scripts/menu.js
/**
 * Driver function for checking the file extension of the entered URL
 * If the URL ends in a valid file extension, one of the two functions will return true,
 * resulting in the expression evaluating to false. If both functions evaluate to false,
 * the expression will evaluate to true
 * @param {String} url The URL to analyse the file extension of
 */
Driver function for checking the file extension of the entered URL
If the URL ends in a valid file extension, one of the two functions will return true,
resulting in the expression evaluating to false. If both functions evaluate to false,
the expression will evaluate to true
@param {String} url The URL to analyse the file extension of
Driver function for checking the file extension of the entered URL If the URL ends in a valid file extension one of the two functions will return true resulting in the expression evaluating to false . If both functions evaluate to false the expression will evaluate to true @param { String } url The URL to analyse the file extension of
function invalidURLFileExtension(url) {
    var endsInKMZ = checkStringEndText(url, ".kmz");
    var endsInDae = checkStringEndText(url, ".dae");
    var endsInZip = checkStringEndText(url, ".zip");
    return (!endsInKMZ && !endsInDae && !endsInZip);
}
function invalidURLFileExtension ( url ) { var endsInKMZ = checkStringEndText ( url , ".kmz" ) ; var endsInDae = checkStringEndText ( url , ".dae" ) ; var endsInZip = checkStringEndText ( url , ".zip" ) ; return ( ! endsInKMZ && ! endsInDae && ! endsInZip ) ; }
Driver function for checking the file extension of the entered URL
 If the URL ends in a valid file extension, one of the two functions will return true,
 resulting in the expression evaluating to false.
Driver function for checking the file extension of the entered URL If the URL ends in a valid file extension one of the two functions will return true resulting in the expression evaluating to false .
/* Logical AND on multiple false statements is FALSE: (FALSE && FALSE == FALSE). But by negating the statements instead,
     * we can express the use case of having failed to find a match: (NOT(FALSE) && NOT(FALSE) == TRUE). */