
    // neighborhood labels

var neighborhoodLabels = new Array();
neighborhoodLabels[ALBANY_DOWNTOWN] = 'Downtown';
neighborhoodLabels[ANN_ARBOR_UM] = 'U of M State Street Park & Ride';
neighborhoodLabels[ATLANTIC_CITY_BOARDWALK] = 'The Boardwalk';
neighborhoodLabels[BALTIMORE_PENN_STATION] = 'Penn Station';
neighborhoodLabels[BALTIMORE_TRAVEL_PLAZA] = 'Baltimore Travel Plaza';
neighborhoodLabels[BALTIMORE_WHITE_MARSH] = 'White Marsh Park & Ride';
neighborhoodLabels[BOSTON_SOUTH_STATION] = 'South Station';
neighborhoodLabels[BUFFALO_AIRPORT] = 'Niagara International Airport';
neighborhoodLabels[BUFFALO_TRANSPORTATION_CENTER] = 'Metropolitan Transportation Center';
neighborhoodLabels[CHAMPAIGN_ILLINOIS_TERMINAL] = 'Illinois Terminal';
neighborhoodLabels[CHICAGO_UNION_STATION] = 'Union Station';
neighborhoodLabels[CINCINNATI_DOWNTOWN] = 'Downtown';
neighborhoodLabels[CLEVELAND_TOWER_CITY] = 'Tower City Center';
neighborhoodLabels[COLUMBIA_WABASH] = 'Wabash Station';
neighborhoodLabels[COLUMBUS_DOWNTOWN] = 'Downtown';
neighborhoodLabels[COLUMBUS_OSU] = 'Ohio State University';
neighborhoodLabels[DES_MOINES_DOWNTOWN] = 'Downtown';
neighborhoodLabels[DETROIT_DOWNTOWN] = 'Downtown';
neighborhoodLabels[DETROIT_WSU] = 'Wayne State University';
neighborhoodLabels[INDIANAPOLIS_DOWNTOWN] = 'Downtown';
neighborhoodLabels[IOWA_CITY_UI] = 'University of Iowa';
neighborhoodLabels[KANSAS_CITY_DOWNTOWN] = 'Downtown';
neighborhoodLabels[MADISON_HUXLEY] = 'Huxley Road';
neighborhoodLabels[MADISON_DUTCH_MILL] = 'Dutch Mill Park & Ride';
neighborhoodLabels[MEMPHIS_MATA] = 'MATA North End Bus Terminal';
neighborhoodLabels[MILWAUKEE_AMTRAK] = 'Amtrak Station';
neighborhoodLabels[MILWAUKEE_RYAN_ROAD] = 'Ryan Road Park & Ride';
neighborhoodLabels[MINNEAPOLIS_CENTRAL] = 'Central';
neighborhoodLabels[MINNEAPOLIS_METRODOME] = 'Metrodome';
neighborhoodLabels[NEW_YORK_CHINATOWN] = 'Chinatown';
neighborhoodLabels[NEW_YORK_PENN] = 'Penn Station';
neighborhoodLabels[NEW_YORK_PORT_AUTHORITY] = 'Port Authority Bus Terminal';
neighborhoodLabels[NEW_YORK_SOHO] = 'SoHo';
neighborhoodLabels[NORMAL_AMTRAK] = 'Amtrak Station';
neighborhoodLabels[PHILADELPHIA_30TH_STREET] = '30th Street Station';
neighborhoodLabels[PHILADELPHIA_CHERRY_HILL_MALL] = 'Cherry Hill Mall';
neighborhoodLabels[PHILADELPHIA_CHINATOWN] = 'Chinatown';
neighborhoodLabels[PITTSBURGH_CONVENTION_CENTER] = 'Convention Center';
neighborhoodLabels[RIDGEWOOD_ROUTE_17] = 'Route 17 Park & Ride';
neighborhoodLabels[ROCHESTER_AMTRAK] = 'Amtrak Station';
neighborhoodLabels[ROCHESTER_HENRIETTA] = 'West Henrietta';
neighborhoodLabels[ST_LOUIS_UNION] = 'Union Station';
neighborhoodLabels[STATE_COLLEGE_PENN_STATE] = 'Penn State University';
neighborhoodLabels[SYRACUSE_REGIONAL] = 'Regional Transportation Center';
neighborhoodLabels[TOLEDO_SOUTHWYCK] = 'Southwyck Shopping Center';
neighborhoodLabels[TORONTO_COACH] = 'Toronto Coach Terminal';
neighborhoodLabels[WASHINGTON_BETHESDA] = 'Bethesda';
neighborhoodLabels[WASHINGTON_CHINATOWN] = 'Chinatown';
neighborhoodLabels[WASHINGTON_DUPONT] = 'Dupont Circle';
neighborhoodLabels[WASHINGTON_GREENBELT] = 'Greenbelt';
neighborhoodLabels[WASHINGTON_MCPHERSON] = 'McPherson Square';
neighborhoodLabels[WASHINGTON_ROSSLYN] = 'Rosslyn';
neighborhoodLabels[WASHINGTON_UNION_STATION] = 'Union Station';

    // city labels

var cityLabels = new Array();
cityLabels[ALBANY_DOWNTOWN] = 'Albany';
cityLabels[ANN_ARBOR_UM] = 'Ann Arbor';
cityLabels[ATLANTIC_CITY_BOARDWALK] = 'Atlantic City';
cityLabels[BALTIMORE_PENN_STATION] = 'Baltimore';
cityLabels[BALTIMORE_TRAVEL_PLAZA] = 'Baltimore';
cityLabels[BALTIMORE_WHITE_MARSH] = 'Baltimore';
cityLabels[BOSTON_SOUTH_STATION] = 'Boston';
cityLabels[BUFFALO_AIRPORT] = 'Buffalo';
cityLabels[BUFFALO_TRANSPORTATION_CENTER] = 'Buffalo';
cityLabels[CHAMPAIGN_ILLINOIS_TERMINAL] = 'Champaign';
cityLabels[CHICAGO_UNION_STATION] = 'Chicago';
cityLabels[CINCINNATI_DOWNTOWN] = 'Cincinnati';
cityLabels[CLEVELAND_TOWER_CITY] = 'Cleveland';
cityLabels[COLUMBIA_WABASH] = 'Columbia MO';
cityLabels[COLUMBUS_DOWNTOWN] = 'Columbus';
cityLabels[COLUMBUS_OSU] = 'Columbus';
cityLabels[DES_MOINES_DOWNTOWN] = 'Des Moines';
cityLabels[DETROIT_DOWNTOWN] = 'Detroit';
cityLabels[DETROIT_WSU] = 'Detroit';
cityLabels[INDIANAPOLIS_DOWNTOWN] = 'Indianapolis';
cityLabels[IOWA_CITY_UI] = 'Iowa City';
cityLabels[KANSAS_CITY_DOWNTOWN] = 'Kansas City';
cityLabels[MADISON_HUXLEY] = 'Madison';
cityLabels[MADISON_DUTCH_MILL] = 'Madison';
cityLabels[MEMPHIS_MATA] = 'Memphis';
cityLabels[MILWAUKEE_AMTRAK] = 'Milwaukee';
cityLabels[MILWAUKEE_RYAN_ROAD] = 'Milwaukee';
cityLabels[MINNEAPOLIS_CENTRAL] = 'Minneapolis';
cityLabels[MINNEAPOLIS_METRODOME] = 'Minneapolis';
cityLabels[NEW_YORK_CHINATOWN] = 'New York';
cityLabels[NEW_YORK_PENN] = 'New York';
cityLabels[NEW_YORK_PORT_AUTHORITY] = 'New York';
cityLabels[NEW_YORK_SOHO] = 'New York';
cityLabels[NORMAL_AMTRAK] = 'Normal';
cityLabels[PHILADELPHIA_30TH_STREET] = 'Philadelphia';
cityLabels[PHILADELPHIA_CHERRY_HILL_MALL] = 'Philadelphia';
cityLabels[PHILADELPHIA_CHINATOWN] = 'Philadelphia';
cityLabels[PITTSBURGH_CONVENTION_CENTER] = 'Pittsburgh';
cityLabels[RIDGEWOOD_ROUTE_17] = 'Ridgewood';
cityLabels[ROCHESTER_AMTRAK] = 'Rochester';
cityLabels[ROCHESTER_HENRIETTA] = 'Rochester';
cityLabels[ST_LOUIS_UNION] = 'St Louis';
cityLabels[STATE_COLLEGE_PENN_STATE] = 'State College';
cityLabels[SYRACUSE_REGIONAL] = 'Syracuse';
cityLabels[TOLEDO_SOUTHWYCK] = 'Toledo';
cityLabels[TORONTO_COACH] = 'Toronto';
cityLabels[WASHINGTON_BETHESDA] = 'Washington DC';
cityLabels[WASHINGTON_CHINATOWN] = 'Washington DC';
cityLabels[WASHINGTON_DUPONT] = 'Washington DC';
cityLabels[WASHINGTON_GREENBELT] = 'Washington DC';
cityLabels[WASHINGTON_MCPHERSON] = 'Washington DC';
cityLabels[WASHINGTON_ROSSLYN] = 'Washington DC';
cityLabels[WASHINGTON_UNION_STATION] = 'Washington DC';

    // functions

function loadOrigin() {

    var labelValues = new Object();

    for (var i = 0; i < routeFunctions.length; i++) {

        var current = routeFunctions[i]();
        for (var j = 0; j < current.length; j++) {

            var neighborhoodCode = current[j].startLocation.neighborhoodCode;
            if (typeof(labelValues[cityLabels[neighborhoodCode]]) === 'undefined') {
                labelValues[cityLabels[neighborhoodCode]] = new Object();
                labelValues[cityLabels[neighborhoodCode]][''] = new Array();
            }
            labelValues[cityLabels[neighborhoodCode]][''].push(neighborhoodCode);
        }
    }

    /*for (var i = 0; i < rides.length; i++) {
        var neighborhoodCode = rides[i].startLocation.neighborhoodCode;
        if (typeof(labelValues[cityLabels[neighborhoodCode]]) === 'undefined')
            labelValues[cityLabels[neighborhoodCode]] = new Array();
        labelValues[cityLabels[neighborhoodCode]].push(neighborhoodCode);
    }*/

    for (var i in labelValues)
        labelValues[i][''] = labelValues[i][''].unique();

    for (var i in labelValues) {
        if ((i === cityLabels[NEW_YORK_PENN] || i === cityLabels[CHICAGO_UNION_STATION] || i === cityLabels[PHILADELPHIA_30TH_STREET] || i === cityLabels[WASHINGTON_CHINATOWN] || i === cityLabels[BOSTON_SOUTH_STATION]) && labelValues[i][''].length > 1) {
            for (var j = 0; j < labelValues[i][''].length; j++) {
                var neighborhoodCode = labelValues[i][''][j];
                labelValues[i]['\xa0\xa0\xa0' + neighborhoodLabels[neighborhoodCode]] = [neighborhoodCode];
            }
        }
    }

    var sortedLabels = new Array();
    for (var i in labelValues)
        sortedLabels.push(i);
    sortedLabels.sort();

    sortedLabels.splice(0, 0, '');
    labelValues[''] = new Object();
    labelValues[''][''] = new Array();

    var origin = document.getElementById('origin');
    for (var i = 0; i < sortedLabels.length; i++) {

        var option = document.createElement("option");
        option.text = sortedLabels[i];
        option.value = labelValues[sortedLabels[i]][''].join(',');
        origin.options.add(option);

        var sortedNeighborhoodLabels = new Array();
        for (var j in labelValues[sortedLabels[i]])
            if (j !== '')
                sortedNeighborhoodLabels.push(j);
        sortedNeighborhoodLabels.sort();

        for (var j = 0; j < sortedNeighborhoodLabels.length; j++) {
            option = document.createElement("option");
            option.text = sortedNeighborhoodLabels[j];
            option.value = labelValues[sortedLabels[i]][sortedNeighborhoodLabels[j]].join(',');
            origin.options.add(option);
        }
    }
}

var firstDestinationLoad = true;

function loadDestination() {

    var destination = document.getElementById('destination');
    destination.options.length = 0;

    var origin = document.getElementById('origin');
    if (origin.value == '')
        return;
    if (firstDestinationLoad) {
        origin.remove(0);
        firstDestinationLoad = false;
    }

    var originNeighborhoodCodes = origin.value.split(',');
    var temp = new Array();
    for (var i = 0; i < originNeighborhoodCodes.length; i++)
        temp.push(parseInt(originNeighborhoodCodes[i]));
    originNeighborhoodCodes = temp;

    var destinationNeighborhoodCodes = new Array();
    for (var i = 0; i < routeFunctions.length; i++) {

        var current = routeFunctions[i]();
        for (var j = 0; j < current.length; j++) {

            var neighborhoodCode = current[j].startLocation.neighborhoodCode;
            if (originNeighborhoodCodes.contains(neighborhoodCode))
                destinationNeighborhoodCodes.push(current[j].endLocation.neighborhoodCode);
        }
    }
    destinationNeighborhoodCodes = destinationNeighborhoodCodes.unique();

/*    var destinationNeighborhoodCodes = new Array();
    for (var i = 0; i < rides.length; i++) {
        var neighborhoodCode = rides[i].startLocation.neighborhoodCode;
        if (originNeighborhoodCodes.contains(neighborhoodCode))
            destinationNeighborhoodCodes.push(rides[i].endLocation.neighborhoodCode);
    }
    destinationNeighborhoodCodes = destinationNeighborhoodCodes.unique();*/

    var labelValues = new Object();

    for (var i = 0; i < destinationNeighborhoodCodes.length; i++) {
        var neighborhoodCode = destinationNeighborhoodCodes[i];
        if (typeof(labelValues[cityLabels[neighborhoodCode]]) === 'undefined') {
            labelValues[cityLabels[neighborhoodCode]] = new Object();
            labelValues[cityLabels[neighborhoodCode]][''] = new Array();
        }
        labelValues[cityLabels[neighborhoodCode]][''].push(neighborhoodCode);
    }

    for (var i in labelValues) {
        if ((i === cityLabels[NEW_YORK_PENN] || i === cityLabels[CHICAGO_UNION_STATION] || i === cityLabels[PHILADELPHIA_30TH_STREET] || i === cityLabels[WASHINGTON_CHINATOWN] || i === cityLabels[BOSTON_SOUTH_STATION]) && labelValues[i][''].length > 1) {
            for (var j = 0; j < labelValues[i][''].length; j++) {
                var neighborhoodCode = labelValues[i][''][j];
                labelValues[i]['\xa0\xa0\xa0' + neighborhoodLabels[neighborhoodCode]] = [neighborhoodCode];
            }
        }
    }

    var sortedLabels = new Array();
    for (var i in labelValues)
        sortedLabels.push(i);
    sortedLabels.sort();

    for (var i = 0; i < sortedLabels.length; i++) {

        var option = document.createElement("option");
        option.text = sortedLabels[i];
        option.value = labelValues[sortedLabels[i]][''].join(',');
        destination.options.add(option);

        var sortedNeighborhoodLabels = new Array();
        for (var j in labelValues[sortedLabels[i]])
            if (j !== '')
                sortedNeighborhoodLabels.push(j);
        sortedNeighborhoodLabels.sort();

        for (var j = 0; j < sortedNeighborhoodLabels.length; j++) {
            option = document.createElement("option");
            option.text = sortedNeighborhoodLabels[j];
            option.value = labelValues[sortedLabels[i]][sortedNeighborhoodLabels[j]].join(',');
            destination.options.add(option);
        }
    }
}

function checkSelections() {

    var origin = document.getElementById('origin');
    var destination = document.getElementById('destination');
    var date = document.getElementById('date');
    var error = document.getElementById('error');

    if (origin.value === '' || destination.value === '' || date.value === '') {
        error.style.display = 'block';
        return false;
    }
    else if (hasPassed('12:00am', new Date(parseInt(date.value) + 86400000), timeZones[parseInt(origin.value.split(',')[0])])) {
        alert('That date has already passed at the selected departure location. Please select a later date.');
        return false;
    }
    else
        return true;
}

function getOrigin() {

    var originNeighborhoodCodes = getParameter('origin');
    if (originNeighborhoodCodes != null) {
        originNeighborhoodCodes = originNeighborhoodCodes.split(',');
        for (var i = 0; i < originNeighborhoodCodes.length; i++)
            originNeighborhoodCodes[i] = parseInt(originNeighborhoodCodes[i]);
    }

    return originNeighborhoodCodes;
}

function getDestination() {

    var destinationNeighborhoodCodes = getParameter('destination');
    if (destinationNeighborhoodCodes != null) {
        destinationNeighborhoodCodes = destinationNeighborhoodCodes.split(',');
        for (var i = 0; i < destinationNeighborhoodCodes.length; i++)
            destinationNeighborhoodCodes[i] = parseInt(destinationNeighborhoodCodes[i]);
    }

    return destinationNeighborhoodCodes;
}

function getDate() {

    var date = getParameter('date');
    if (date != null)
        date = parseInt(date);
    return date;
}

function getTimeOfDay() {

    return getParameter('timeOfDay');
}

function getNbrPassengers() {

    var nbrPassengers = getParameter('nbrPassengers');
    if (nbrPassengers != null)
        nbrPassengers = parseInt(nbrPassengers);
    return nbrPassengers;
}


