﻿function ValidateDestination_ClientValidate(source, args) {
    // reset the txtDesIata value
    document.getElementById(flightSearchControlId + "txtDesIata").value = '';
    // get the destination airport entered
    var airport = document.getElementById(flightSearchControlId + "txtDestination").value;
    var isFound = false;
    if (this.allDestinationAirports && this.allDestinationAirports.length > 0) 
    {        
        for (var i = 0; i < this.allDestinationAirports.length; i++) 
        {  
            var placeName = this.allDestinationAirports[i].substring(0,this.allDestinationAirports [i].indexOf('$'));
            var iata = this.allDestinationAirports[i].substring(this.allDestinationAirports[i].indexOf('$')+ 1);
        
            if(placeName == airport || placeName +  ' - ' + iata == airport)
            {
                document.getElementById(flightSearchControlId + "txtDesIata").value = iata;
                isFound = true;
                break;
            }   
        }
    }
    args.IsValid = isFound;
}

function ValidateAccomDestination_ClientValidate(source, args) {
    ValidateAccomPackageDestination_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageDestination_ClientValidate(source, args) {
    ValidateAccomPackageDestination_ClientValidate(packageSearchControlId, args);
}

function ValidateAccomPackageDestination_ClientValidate(controlId, args) {
    if (document.getElementById(controlId + "hidDestinationId").value == '' || document.getElementById(controlId + "hidDestinationId").value == '0')
        args.IsValid = false;
    else
        args.IsValid = true;
}

function ValidateAccomCountry_ClientValidate(source, args) {
    ValidateAccomPackageCountry_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageCountry_ClientValidate(source, args) {
    ValidateAccomPackageCountry_ClientValidate(packageSearchControlId, args);
}

function ValidateAccomPackageCountry_ClientValidate(controlId, args) {
    if (document.getElementById(controlId + "ddlCountry").value == '' || document.getElementById(controlId + "ddlCountry").value == '0')
        args.IsValid = false;
    else
        args.IsValid = true;
}

function GetDestinationIataSuccess(result, eventArgs) {
    alert('result:' + result);
    document.getElementById(flightSearchControlId + "txtDesIata").value = result;
    args
}
function GetDestinationIataFailure() {
    alert('failure:');
}

function GetDestinationIataReturn(result) {
   
}

function ValidateFlightPassengers_ClientValidate(source, args) {
    ValidatePassengers(flightSearchControlId, args);
}

function ValidateAccomPassengers_ClientValidate(source, args) {
    ValidateAccomPackagePassengers(accomSearchControlId, args);
}

function ValidatePackagePassengers_ClientValidate(source, args) {
    ValidateAccomPackagePassengers(packageSearchControlId, args);
}

function ValidateAccomPackagePassengers(controlId, args) {

    var adults = 0;
    var children = 0;
    var infants = 0;
    var numRooms = document.getElementById(controlId + "ddlRooms").value;
    for (roomNumber = 1; roomNumber <= numRooms; roomNumber++) {
        adults = adults + parseInt(document.getElementById(controlId + "ddlAdultsRoom" + roomNumber).value);
        children = children + parseInt(document.getElementById(controlId + "ddlChildrenRoom" + roomNumber).value);
        infants = infants + parseInt(document.getElementById(controlId + "ddlInfantsRoom" + roomNumber).value);
    }
    totalPax = parseInt(adults) + parseInt(children) + parseInt(infants);
    if (totalPax > 9) {
        args.IsValid = false;
    }
    else {
        args.IsValid = true;
    }
}

function ValidatePassengers(controlId, args) {
    var adults;
    var children;
    var infants;
    var totalPax;

    //adults
    adults = document.getElementById(controlId + 'ddlAdults').value;
    //children
    children = document.getElementById(controlId + 'ddlChildren').value;
    //infants
    infants = document.getElementById(controlId + 'ddlInfants').value;

    totalPax = parseInt(adults) + parseInt(children) + parseInt(infants);
    if (totalPax > 9) {
        args.IsValid = false;
    }
    else {
        args.IsValid = true;
    }
}

function ValidateAdultsAgainstInfants_ClientValidate(source, args) {
    var adults;
    var infants;
    adults = parseInt(document.getElementById(flightSearchControlId + 'ddlAdults').value);
    infants = parseInt(document.getElementById(flightSearchControlId + 'ddlInfants').value);
    if (adults < infants) {
        args.IsValid = false;
    }
    else {
        args.IsValid = true;
    }
}

function ValidateAccomAdultsAgainstInfants_ClientValidate(source, args) {
    ValidateAccomPackageAdultsAgainstInfants_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageAdultsAgainstInfants_ClientValidate(source, args) {
    ValidateAccomPackageAdultsAgainstInfants_ClientValidate(packageSearchControlId, args);
}

function ValidateAccomPackageAdultsAgainstInfants_ClientValidate(controlId, args) {
    var adults = 0;
    var infants = 0;
    var numRooms = document.getElementById(controlId + "ddlRooms").value;
    for (roomNumber = 1; roomNumber <= numRooms; roomNumber++) {
        adults = adults + parseInt(document.getElementById(controlId + "ddlAdultsRoom" + roomNumber).value);
        infants = infants + parseInt(document.getElementById(controlId + "ddlInfantsRoom" + roomNumber).value);
    }
    if (adults < infants) {
        args.IsValid = false;
    }
    else {
        args.IsValid = true;
    }
}

function ValidateFlightDepartureDateTime_ClientValidate(source, args) {
    ValidateDepartureDateTime_ClientValidate(flightSearchControlId, args);
}

function ValidateAccomDepartureDateTime_ClientValidate(source, args) {
    ValidateDepartureDateTime_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageDepartureDateTime_ClientValidate(source, args) {
    ValidateDepartureDateTime_ClientValidate(packageSearchControlId, args);
}

function ValidateDepartureDateTime_ClientValidate(controlId, args) {
    var depDateString = document.getElementById(controlId + "ddlDepMonYear").value;
    var splitDepDate = depDateString.split('/');
    var day = parseInt(document.getElementById(controlId + "ddlDepDay").value);
    var year = parseInt(splitDepDate[1].replace(/^0+/, ''));
    var month = parseInt(splitDepDate[0].replace(/^0+/, '')) - 1;
    var depDate = new Date();
    depDate.setFullYear(year, month, day);
    var todayDate = new Date();
    todayDate.setFullYear(todayYear, todayMonth, todayDay);
    var oneDay = 1000 * 60 * 60 * 24;
    var dateDifference = Math.abs(depDate - todayDate);
    dateDifference = Math.round(dateDifference / oneDay);
    if (dateDifference < minimumDays) {
        return args.IsValid = false;
    }
    else {
        return args.IsValid = true;
    }
}

function ValidateFlightDepartureDateNotPast_ClientValidate(source, args) {
    ValidateDepartureDateNotPast_ClientValidate(flightSearchControlId, args);
}

function ValidateAccomDepartureDateNotPast_ClientValidate(source, args) {
    ValidateDepartureDateNotPast_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageDepartureDateNotPast_ClientValidate(source, args) {
    ValidateDepartureDateNotPast_ClientValidate(packageSearchControlId, args);
}

function ValidateDepartureDateNotPast_ClientValidate(controlId, args) {
    var depDateString = document.getElementById(controlId + "ddlDepMonYear").value;
    var splitDepDate = depDateString.split('/');
    var day = parseInt(document.getElementById(controlId + "ddlDepDay").value);
    var year = parseInt(splitDepDate[1].replace(/^0+/, ''));
    var month = parseInt(splitDepDate[0].replace(/^0+/, '')) - 1;
    var depDate = new Date();
    depDate.setFullYear(year, month, day);
    var todayDate = new Date();
    todayDate.setFullYear(todayYear, todayMonth, todayDay);
    if (todayDate > depDate) {
        return args.IsValid = false;
    }
    else {
        return args.IsValid = true;
    }
}

function ValidateAccomDates_ClientValidate(source, args) {
    ValidateDates_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageDates_ClientValidate(source, args) {
    ValidateDates_ClientValidate(packageSearchControlId, args);
}

function ValidateFlightDates_ClientValidate(source, args) {
    ValidateDates_ClientValidate(flightSearchControlId, args);
}

function ValidateDates_ClientValidate(controlId, args) {
    var depDateString = document.getElementById(controlId + "ddlDepMonYear").value;
    var returnDateString = document.getElementById(controlId + "ddlReturnMonYear").value;
    var splitDepDate = depDateString.split('/');
    var splitReturnDate = returnDateString.split('/');

    /* Validation of year*/
    year = parseInt(splitDepDate[1].replace(/^0+/, ''));

    /* Validation of month*/
    month = parseInt(splitDepDate[0].replace(/^0+/, '')) - 1;

    /* Validation of day*/
    day = parseInt(document.getElementById(controlId + "ddlDepDay").value);
    var err = CheckDateIsValid(year, month, day);

    if (err != 0) {
        args.IsValid = false;
        return (args.IsValid);
    }

    /* Validation of year*/
    year = parseInt(splitReturnDate[1].replace(/^0+/, ''));

    /* Validation of month*/
    month = parseInt(splitReturnDate[0].replace(/^0+/, '')) - 1;

    /* Validation of day*/
    day = parseInt(document.getElementById(controlId + "ddlReturnDay").value);

    var err = CheckDateIsValid(year, month, day);

    if (err != 0) {
        args.IsValid = false;
        return (args.IsValid);
    }
}

function CheckDateIsValid(year, month, day) {
    var leap = 0;
    var err = 0;
    /* Validation leap-year / february / day */
    if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
        leap = 1;
    }
    if ((month == 1) && (leap == 1) && (day > 29)) {
        err = 23;
    }
    if ((month == 1) && (leap != 1) && (day > 28)) {
        err = 24;
    }

    /* Validation of other months */
    if ((day > 30) && ((month == 1) || (month == 3) || (month == 5) || (month == 8) || (month == 10))) {
        err = 25;
    }

    return err;
}

function ValidateFlightDepartureDate_ClientValidate(source, args) {
    ValidateDepartureDate_ClientValidate(flightSearchControlId, args);
}

function ValidateAccomDepartureDate_ClientValidate(source, args) {
    ValidateDepartureDate_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageDepartureDate_ClientValidate(source, args) {
    ValidateDepartureDate_ClientValidate(packageSearchControlId, args);
}

function ValidateDepartureDate_ClientValidate(controlId, args) {
    var depDateString = document.getElementById(controlId + "ddlDepMonYear").value;
    var returnDateString = document.getElementById(controlId + "ddlReturnMonYear").value;
    var splitDepDate = depDateString.split('/');
    var depDay = parseInt(document.getElementById(controlId + "ddlDepDay").value);
    var depMonth = parseInt(splitDepDate[0].replace(/^0+/, '')) - 1;
    var depYear = parseInt(splitDepDate[1].replace(/^0+/, ''));
    var depDate = new Date();
    depDate.setFullYear(depYear, depMonth, depDay);
    var splitReturnDate = returnDateString.split('/');
    var returnDay = parseInt(document.getElementById(controlId + "ddlReturnDay").value);
    var returnMonth = parseInt(splitReturnDate[0].replace(/^0+/, '')) - 1;
    var returnYear = parseInt(splitReturnDate[1].replace(/^0+/, ''));
    var returnDate = new Date();
    returnDate.setFullYear(returnYear, returnMonth, returnDay);
    if (returnDate < depDate) {
        return args.IsValid = false;
    }
    else {
        return args.IsValid = true;
    }
    if (returnDate.toString() == depDate.toString()) {
        return args.IsValid = false;
    }
    else {
        return args.IsValid = true;
    }
}

function ValidateChildAges_ClientValidate(source, args) {
    var numChildren = document.getElementById(flightSearchControlId + "ddlChildren").value;
    var valid = true;

    for (i = 1; i <= numChildren; i++) {
        if (document.getElementById(flightSearchControlId + "child" + i + "_cell").value == 0)
            return args.IsValid = false;
    }

    return args.IsValid = true;
}

function ValidateAccomChildAges_ClientValidate(source, args) {
    ValidateAccomPackageChildAges_ClientValidate(accomSearchControlId, args);
}

function ValidatePackageChildAges_ClientValidate(source, args) {
    ValidateAccomPackageChildAges_ClientValidate(packageSearchControlId, args);
}

function ValidateAccomPackageChildAges_ClientValidate(controlId, args) {
    var numRooms = document.getElementById(controlId + "ddlRooms").value;
    var valid = true;

    //Iterate through rooms
    for (i = 1; i <= numRooms; i++) {
        var numChildren = document.getElementById(controlId + "ddlChildrenRoom" + i).value;
        //Iterate through children
        for (j = 1; j <= numChildren; j++) {
            if (document.getElementById(controlId + "room" + i + "_child" + j + "_cell").value == 0) {
                valid = false;
                break;
            }
        }
    }

    args.IsValid = valid;
}

function ValidateDatesApart_ClientValidate(source, args) {
        return args.IsValid = true;
    }

    function ValidateIata_ClientValidate(source, args) {
        if (document.getElementById(flightSearchControlId + "txtDesIata").value == "")
            return args.IsValid = false;
        else
            return args.IsValid = true;
    }

function GetDestinationIata() {
    var airportName = document.getElementById(flightSearchControlId + "txtDestination").value;
    alert('This Should NOT be called, airportName:' + airportName);
    Sys.Net.WebServiceProxy.invoke("../FlightSearchControlWebService.asmx", "CheckDestinationPoint", false, { "airportName": "" + airportName + "" }, GetDestinationIataSuccess, GetDestinationIataFailure);
}

function GetDestinationIataSuccess(result, eventArgs) {
   // alert('result:' + result);
    GetDestinationIataReturn(result);
}
function GetDestinationIataFailure() {
    alert('failure:');
}

function GetDestinationIataReturn(result) {
    document.getElementById(flightSearchControlId + "txtDesIata").value = result;
}

function ValidatePackageUniqueOperators_ClientValidate(source, args) {
    ValidateUnqiueOperators_ClientValidate(packageSearchControlId, args);
}
function ValidateFlightUniqueOperators_ClientValidate(source, args) {
    ValidateUnqiueOperators_ClientValidate(flightSearchControlId, args);
}
function ValidateUnqiueOperators_ClientValidate(controlId, args) 
{
    // check which div is displayed

    var op1 = document.getElementById(controlId + "ddlAirline1").value;
    var op2 = document.getElementById(controlId + "ddlAirline2").value;
    var op3 = document.getElementById(controlId + "ddlAirline3").value;
    
    if(op1 == '0' || op2 == '0')
        return args.IsValid = true;
        
    if(op3 == '0')
    {
        // check to se eif we have 2 values the same
        if(op1 == op2)
            return args.IsValid = false;
    }
    else
    {
        if(op1 == op2 || op1 == op3 || op2 == op3)
            return args.IsValid = false;
    }
    
    return args.IsValid = true;    
}