function wireupCities() {
    var mainpos = $("#Albany").offset();
    $("#Albany").mouseenter(function() {
        $("#tooltip-Albany").fadeIn("fast");
        var pos = $("#Albany").offset();
        var height = $("#Albany").height();
        $("#tooltip-Albany").css({ "left": (pos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Albany").mouseleave(function() { $("#tooltip-Albany").fadeOut("fast"); });

    $("#Binghamton").mouseenter(function() {
        $("#tooltip-Binghamton").fadeIn("fast");
        var pos = $("#Binghamton").offset();
        var height = $("#Binghamton").height();
        $("#tooltip-Binghamton").css({ "left": (pos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Binghamton").mouseleave(function() { $("#tooltip-Binghamton").fadeOut("fast"); });


    $("#Buffalo").mouseenter(function() {
        $("#tooltip-Buffalo").fadeIn("fast");
        var pos = $("#Buffalo").offset();
        var height = $("#Buffalo").height();
        $("#tooltip-Buffalo").css({ "left": (pos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Buffalo").mouseleave(function() { $("#tooltip-Buffalo").fadeOut("fast"); });

    $("#BuffaloAirport").mouseenter(function() {
        $("#tooltip-BuffaloAirport").fadeIn("fast");
        var pos = $("#BuffaloAirport").offset();
        var height = $("#BuffaloAirport").height();
        $("#tooltip-BuffaloAirport").css({ "left": (pos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#BuffaloAirport").mouseleave(function() { $("#tooltip-BuffaloAirport").fadeOut("fast"); });

    $("#Montreal").mouseenter(function() {
        $("#tooltip-Montreal").fadeIn("fast");
        var pos = $("#Montreal").offset();
        var height = $("#Montreal").height();
        $("#tooltip-Montreal").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Montreal").mouseleave(function() { $("#tooltip-Montreal").fadeOut("fast"); });

    $("#NewYork").mouseenter(function() {
        $("#tooltip-NewYork").fadeIn("fast");
        var pos = $("#NewYork").offset();
        var height = $("#NewYork").height();
        $("#tooltip-NewYork").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#NewYork").mouseleave(function() { $("#tooltip-NewYork").fadeOut("fast"); });

    $("#NYPennStation").mouseenter(function() {
        $("#tooltip-NYPennStation").fadeIn("fast");
        var pos = $("#NYPennStation").offset();
        var height = $("#NYPennStation").height();
        $("#tooltip-NYPennStation").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#NYPennStation").mouseleave(function() { $("#tooltip-NYPennStation").fadeOut("fast"); });

    $("#Plattsburgh").mouseenter(function() {
        $("#tooltip-Plattsburgh").fadeIn("fast");
        var pos = $("#Plattsburgh").offset();
        var height = $("#Plattsburgh").height();
        $("#tooltip-Plattsburgh").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Plattsburgh").mouseleave(function() { $("#tooltip-Plattsburgh").fadeOut("fast"); });

    $("#Rochester").mouseenter(function() {
        $("#tooltip-Rochester").fadeIn("fast");
        var pos = $("#Rochester").offset();
        var height = $("#Rochester").height();
        $("#tooltip-Rochester").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Rochester").mouseleave(function() { $("#tooltip-Rochester").fadeOut("fast"); });

    $("#Syracuse").mouseenter(function() {
        $("#tooltip-Syracuse").fadeIn("fast");
        var pos = $("#Syracuse").offset();
        var height = $("#Syracuse").height();
        $("#tooltip-Syracuse").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Syracuse").mouseleave(function() { $("#tooltip-Syracuse").fadeOut("fast"); });

    $("#Toronto").mouseenter(function() {
        $("#tooltip-Toronto").fadeIn("fast");
        var pos = $("#Toronto").offset();
        var height = $("#Toronto").height();
        $("#tooltip-Toronto").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Toronto").mouseleave(function() { $("#tooltip-Toronto").fadeOut("fast"); });

    $("#Utica").mouseenter(function() {
        $("#tooltip-Utica").fadeIn("fast");
        var pos = $("#Utica").offset();
        var height = $("#Utica").height();
        $("#tooltip-Utica").css({ "left": (mainpos.left + 20) + "px", "top": pos.top + height + "px" });
    });
    $("#Utica").mouseleave(function() { $("#tooltip-Utica").fadeOut("fast"); });
}


function OneWay() {
    if ($("input[name='tripOption']:checked").val() == 'oneWay') {
        $("div.arriveDate").addClass("hidden");
        $("fieldset.arriving div.formField.children").addClass("expand");
        $("fieldset.arriving div.formField.time").addClass("hidden");

    }
    else {
        $("div.arriveDate").removeClass("hidden");
        $("fieldset.arriving div.formField.children").removeClass("expand");
        $("fieldset.arriving div.formField.time").removeClass("hidden");
    }

}

function buttonClickSearch() {
    var retValidation = validateRequest();
    if (retValidation == false) return;
    retValidation = validatePassangerCount();
    if (retValidation == false) return;
    //passed O/D , depart and return time
    var locationUrl = 'https://www.greyhound.com/farefinder/redirect/neon.aspx?redirect=y&version=1.0&' + GetQString('origin') + '&'
			+ GetQString('destination') + '&' + GetODTime('depart') + '&' + GetODTime('return');
    //passed type of trip(round/onway) , Depart/Return Date
    locationUrl = locationUrl + '&' + GetTrip() + '&' + GetODDate('depart') + '&' + GetODDate('return');
    locationUrl = locationUrl + '&adults=' + document.getElementById('adults').value + '&Seniors=' + document.getElementById('seniors').value + '&Children=' + document.getElementById('children').value;
    //&PromoCode= &discount
    locationUrl = locationUrl + GetDiscount();
    open(locationUrl);
    //document.getElementById('adults').style.color="#c6c8c8";
    $('#departDate').css("color", "#c6c8c8");
    $('#arriveDate').css("color", "#c6c8c8");
    setErrMessage();

}
//get discount code
function GetDiscount() {
    var control;
    control = document.getElementById('discounts').value;
    //			control=$j('#discounts option:selected').val();
    var code = '';
    var qs;
    var qCard='';
    switch (control) {
        case 'No Discounts':
            qs = '0';
            code = '&PromoCode=' + document.getElementById('code').value;
            break;
        case 'U.S. Military, $198 Round Trip':
            qs = 'MM';
            break;
        case 'Companion Fare':
            qs = 'CP';
            break;
        case 'Student Advantage':
            qs = 'CD';
            qCard = '&Card=' + document.getElementById('card').value + '&CardExpiration=' + document.getElementById('expYear').value;
            break;
        case 'Veterans Advantage':
            qs = 'VA';
            qCard = '&Card=' + document.getElementById('card').value + '&CardExpiration=' + document.getElementById('expYear').value;
            break;
    }
    return code + '&discount=' + qs + qCard;
}

function GetQString(od) {
    var control;

    if (od == 'origin')
        control = document.getElementById('departCity').value;
    //			control=$j('#departCity option:selected').val();
    else
        control = document.getElementById('arriveCity').value;
    //control=$j('#arriveCity option:selected').val();


    var qs;
    switch (control) {
        case 'albany':
            qs = od + 'city=Albany&' + od + 'state=NY&' + od + 'id=150051';
            break;
        case 'binghamton':
            qs = od + 'city=Binghamton&' + od + 'state=NY&' + od + 'id=150205';
            break;
        case 'buffalo':
            qs = od + 'city=Buffalo&' + od + 'state=NY&' + od + 'id=150249';
            break;
        case 'buffaloairport':
            qs = od + 'city=Buffalo+Airport&' + od + 'state=NY&' + od + 'id=150250';
            break;
        case 'newyork':
            qs = od + 'city=New+York&' + od + 'state=NY&' + od + 'id=151239';
            break;
        case 'newyorkpenn':
            qs = od + 'city=New+York+Penn+Sta&' + od + 'state=NY&' + od + 'id=155420';
            break;
        case 'plattsburgh':
            qs = od + 'city=Plattsburgh&' + od + 'state=NY&' + od + 'id=151437';
            break;
        case 'rochester':
            qs = od + 'city=Rochester&' + od + 'state=NY&' + od + 'id=151580';
            break;
        case 'syracuse':
            qs = od + 'city=Syracuse&' + od + 'state=NY&' + od + 'id=151745';
            break;
        case 'utica':
            qs = od + 'city=Utica&' + od + 'state=NY&' + od + 'id=151811';
            break;
        case 'montreal':
            qs = od + 'city=Montreal&' + od + 'state=PQ&' + od + 'id=110011';
            break;
        case 'toronto':
            qs = od + 'city=Toronto&' + od + 'state=ON&' + od + 'id=120274';
            break;
    }
    return qs;
}
//to get whether roundtrip or not
function GetTrip() {
    var legs = 'legs=1';
    var radioObj = document.getElementById('tripOptionroundTrip');
    if ((radioObj.checked) && (radioObj.value == 'roundTrip')) {
        legs = 'legs=2';
    }
    return legs;
}

//to get the exact time   
function GetODTime(timestring) {
    var control;
    var qs;
    if (timestring == 'return') {
        control = document.getElementById('returnTime').value;
        qs = 'rhr=';
    }
    //control=$j('#returnTime option:selected').val();
    else {
        control = document.getElementById('departTime').value;
        qs = 'dhr=';
        //control=$j('#departTime option:selected').val();
    }

    switch (control) {
        case 'Any':
            qs = qs + 'Any';
            break;
        case '3:00 AM':
            qs = qs + '3';
            break;
        case '6:00 AM':
            qs = qs + '6';
            break;
        case '9:00 AM':
            qs = qs + '9';
            break;
        case 'Noon':
            qs = qs + '12';
            break;
        case '3:00 PM':
            qs = qs + '15';
            break;
        case '6:00 PM':
            qs = qs + '18';
            break;
        case '9:00 PM':
            qs = qs + '21';
            break;
        case 'Midnight':
            qs = qs + '24';
            break;
    }
    return qs;
}

//pass depart date and return date
function GetODDate(datestring) {
    var control;
    var qs;
    if (datestring == 'return') {
        control = document.getElementById('dateArrive').value;
        qs = 'rdate=' + control;
    }
    //control=$j('#returnTime option:selected').val();
    else {
        control = document.getElementById('dateDepart').value;
        qs = 'ddate=' + control;
        //control=$j('#departTime option:selected').val();
    }
    return qs;
}

function validatePassangerCount() {
    if ((parseInt($('#adults').val()) + parseInt($('#children').val()) + parseInt($('#seniors').val())) > 5) {
        alert('You may purchase only 5 tickets per transaction. If needed, please split your purchase into multiple orders.');
        return false;
    }
}

function validateRequest() {
    if ($('#arriveCity option:selected').val() == $('#departCity option:selected').val()) {
        setErrMessage(1);
        $('#goingToCity').css("color", "#F18746");
        return false;
    }
    if ($("input[name='tripOption']:checked").val() == 'oneWay') {
        if ($("input[id='dateDepart']").val() == '') {
            setErrMessage(1);
            $('#departDate').css("color", "#F18746");
            return false;
        }
        else { $('#departDate').css("color", "#c6c8c8"); }

        //date validation
        if (!dateValidation($("input[id='dateDepart']").val())) {
            setErrMessage(1);
            $('#departDate').css("color", "#F18746");
            return false;
        }
        else { $('#departDate').css("color", "#c6c8c8"); }
    }
    else {
        if ($("input[id='dateDepart']").val() == '') {
            setErrMessage(1);
            $('#departDate').css("color", "#F18746");
            return false;
        }
        else { $('#departDate').css("color", "#c6c8c8"); }
        if ($("input[id='dateArrive']").val() == '') {
            setErrMessage(1);
            $('#arriveDate').css("color", "#F18746");
            return false;
        }
        else { $('#arriveDate').css("color", "#c6c8c8"); }

        // date validation
        if (!dateValidation($("input[id='dateDepart']").val())) {
            setErrMessage(1);
            $('#departDate').css("color", "#F18746");
            return false;
        }
        else { $('#departDate').css("color", "#c6c8c8"); }
        if (!dateValidation($("input[id='dateArrive']").val())) {
            setErrMessage(1);
            $('#arriveDate').css("color", "#F18746");
            return false;
        }
        else { $('#arriveDate').css("color", "#c6c8c8"); }
    }
    //alert(($('#adults').val()+$('#seniors').val()+$('#children').val()));
    if (($('#adults').val() + $('#seniors').val() + $('#children').val()) == 0) {
        setErrMessage(1);
        $('#labelAdults').css("color", "#F18746");
        return false;
    }
    else { $('#labelAdults').css("color", "#c6c8c8"); }
    setErrMessage();
    return true;
    
}

function setErrMessage(err) {
    if (err == null) {
        $('#errMsg').text("");
        $('#errMsg').css('background', 'none');
    }
    else {
        $('#errMsg').text("Please fill out all the required fields.");
        $('#errMsg').css('color', '#F18746');
        $('#errMsg').css('width', '210px');
        $('#errMsg').css('font-size', '11px');
        //$('#errMsg').css('color', 'black');
    }
}

function setExpireation() {
    $('#expYear').children().remove();
    for (j = 0; j <= 11; j++) {
        var myDate = new Date();
        myDate.setMonth(myDate.getMonth() + j);
        var mth = '' + (myDate.getMonth() + 1);
        if (mth.length < 2)
            mth = '0' + mth;
        $('#expYear').append('<option value="' + (mth + '/' + myDate.getFullYear()) + '">' + (mth + '/' + myDate.getFullYear()) + '</option>');
    }
}
function dateValidation(DateVal) {
    //var DateVal = $('#dateDepart').val();
    if (!isValidDate(DateVal)) {
        return false;
    }
    if (!checkDateRange(DateVal)) {
        return false;
    }
    return true;

}
function checkDateRange(dateStr) {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!
    var yyyy = today.getFullYear();
    var dt = mm + "/" + dd + "/" + yyyy;
    var today1 = new Date(dt);
    var arrayStr = dateStr.split("/");
    if (arrayStr[2].length == 2)
        dateStr = arrayStr[0] + '/' + arrayStr[1] + '/' + '20' + arrayStr[2];
    var DateStr = new Date(dateStr);
    if (DateStr < today1) {
        return false;
    }
    today.setDate(today.getDate() + 364);
    if (DateStr > today) {
        return false;
    }
    return true;
}

function isValidDate(dateStr) {
    var datePat = /^(\d{2})(\/)(\d{2})\2(\d{2}|\d{4})$/;
    var matchArray = dateStr.match(datePat); // is the format ok?
    if (matchArray == null) {
        return false;
    }
    month = matchArray[1]; // parse date into variables
    day = matchArray[3];
    year = matchArray[4];
    if (month < 1 || month > 12) { // check month range

        return false;
    }
    if (day < 1 || day > 31) {

        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {

        return false
    }
    if (month == 2) { // check for february 29th
        var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day == 29 && !isleap)) {

            return false;
        }
    }
    return true;  // date is valid
}

$(document).ready(function() {
    OneWay();
    wireupCities();
    $("input[name='tripOption']").click(function() { OneWay(); });
    $('#searchTicketsBtn').click(function() {
        buttonClickSearch();
    });
    $('#arriveCity').change(function() {
        $('#goingToCity').css("color", "#c6c8c8");
        setErrMessage();
    });
    $('#departCity').change(function() {
        $('#goingToCity').css("color", "#c6c8c8");
        setErrMessage();
    });
    $('#adults').change(function() {
        $('#labelAdults').css("color", "#c6c8c8");
        setErrMessage();
    });

    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!
    var yyyy = today.getFullYear();
    if (dd < 10) { dd = '0' + dd }
    if (mm < 10) { mm = '0' + mm }
    var dt = mm + "/" + dd + "/" + yyyy;
    $('#dateDepart').val(dt.toString());
    $('#dateArrive').val(dt.toString());
    $('#adults').val('1');

    $('#discounts').change(function() {
        var disc = $('#discounts').val();
        var today = new Date();
        var mth = today.getMonth() + 1;
        var yr = today.getFullYear();
        setExpireation();
        switch (disc) {
            case 'Student Advantage':
                $('#card').val('');
                $('#divPromo').css("display", "none");
                $('#divStudent').css("display", "block");
                break;
            case 'Veterans Advantage':
                $('#card').val('');
                $('#divPromo').css("display", "none");
                $('#divStudent').css("display", "block");
                break;
            case 'No Discounts':
                $('#code').val('');
                $('#divPromo').css("display", "block");
                $('#divStudent').css("display", "none");
                break;
            default:
                $('#divPromo').css("display", "none");
                $('#divStudent').css("display", "none");
                break;
        }
    });
});

