// fix for firefox
if(typeof HTMLElement != 'undefined')
{
    HTMLElement.prototype.click = function() {
    var evt = this.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    this.dispatchEvent(evt);}
}

function RemovePleaseSelectFromDropDown(id) {
    var ddl = document.getElementById(id);
    if (ddl.options[0].text == 'Please select...')
        ddl.remove(0);
}

function RemovePleaseEnterDestination(id) {
    var txt = document.getElementById(id);
    if (txt.value == 'Please enter a destination...')
        txt.value = '';
}

function Display_ChildAges()
{
    var numChildren = document.getElementById(flightSearchControlId + "ddlChildren").value;
    numChildren = parseInt(numChildren);
    
    if(numChildren == 0)
    {
        document.getElementById(flightSearchControlId + "divFlightChildWrapper").style.display = "none";
    } 
    else
    {
        document.getElementById(flightSearchControlId + "divFlightChildWrapper").style.display = "block";
        switch(numChildren)
        {
        case 1:
            document.getElementById(flightSearchControlId + "child1_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_head").style.display = "none";
            document.getElementById(flightSearchControlId + "child3_head").style.display = "none";
            document.getElementById(flightSearchControlId + "child4_head").style.display = "none";
            
            document.getElementById(flightSearchControlId + "child1_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_cell").style.display = "none";
            document.getElementById(flightSearchControlId + "child3_cell").style.display = "none";
            document.getElementById(flightSearchControlId + "child4_cell").style.display = "none";
            break;
        case 2:
            document.getElementById(flightSearchControlId + "child1_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_head").style.display = "none";
            document.getElementById(flightSearchControlId + "child4_head").style.display = "none";
            
            document.getElementById(flightSearchControlId + "child1_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_cell").style.display = "none";
            document.getElementById(flightSearchControlId + "child4_cell").style.display = "none";
            break;
        case 3:
            document.getElementById(flightSearchControlId + "child1_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child4_head").style.display = "none";
            
            document.getElementById(flightSearchControlId + "child1_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child4_cell").style.display = "none";
            break;
        case 4:
            document.getElementById(flightSearchControlId + "child1_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_head").style.display = "inline";
            document.getElementById(flightSearchControlId + "child4_head").style.display = "inline";
            
            document.getElementById(flightSearchControlId + "child1_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child2_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child3_cell").style.display = "inline";
            document.getElementById(flightSearchControlId + "child4_cell").style.display = "inline";
            break;
        }
    }
}

function UpdateReturnDates()
{
    UpdateDates("return");
}

function UpdateDepartureDate()
{
    UpdateDates("depart");
    UpdateReturnDateTolerance();
}

function UpdateDateTextbox(type)
{
    var days
    var monYear
    var textBox
    var div
    var controlId

    if(type == "return")
    {
        if(document.getElementById(flightSearchControlId + "ddlReturnDay"))
        {
            controlId = flightSearchControlId;
        }
        else
        {
            controlId = returnControlId;
        }
        days = document.getElementById(controlId + "ddlReturnDay").value;
        monYear =  document.getElementById(controlId + "ddlReturnMonYear").value;
        textBox = document.getElementById(controlId + "txtReturnDate");
    }

    else if(type == "depart")
    {
        if(document.getElementById(flightSearchControlId + "ddlDepDay"))
        {
            controlId = flightSearchControlId;
        }
        else
        {
            controlId = departControlId;
        }   
        days = document.getElementById(controlId + "ddlDepDay").value;
        monYear =  document.getElementById(controlId + "ddlDepMonYear").value;
        textBox = document.getElementById(controlId + "txtDepDate");
    }
    textBox.value = days + "/" + monYear;
    UpdateDates(type);
    
    if (type == "depart") {
        UpdateReturnDateTolerance();
    }
}

function UpdateDates(type)
{
    var days
    var monYear
    var textBox
    var div
    var controlId
    
    if(type == "return")
    {
        if(document.getElementById(flightSearchControlId + "ddlReturnDay"))
        {
            controlId = flightSearchControlId;
        }
        else
        {
            controlId = returnControlId;
        }
        days = document.getElementById(controlId + "ddlReturnDay");
        monYear =  document.getElementById(controlId + "ddlReturnMonYear");
        textBox = document.getElementById(controlId + "txtReturnDate").value;
        if(document.getElementById("divReturnError"))
        {
            div = document.getElementById("divReturnError");
        }
        else
        {
            div = document.getElementById(controlId + "divReturnError");
        }
    }
    
    else if(type == "depart")
    {
        if(document.getElementById(flightSearchControlId + "ddlDepDay"))
        {
            controlId = flightSearchControlId;
        }
        else
        {
            controlId = departControlId;
        }
        days = document.getElementById(controlId + "ddlDepDay");
        monYear =  document.getElementById(controlId + "ddlDepMonYear");
        textBox = document.getElementById(controlId + "txtDepDate").value;
        if(document.getElementById("divDepError"))
        {
            div = document.getElementById("divDepError");
        }
        else
        {
            div = document.getElementById(controlId + "divDepError");
        }
    }
    
    if(days && monYear && textBox && div)
    {
        var splitDate = textBox.split('/');
        var day = parseInt(splitDate[0].replace(/^0+/,''));
        var month = splitDate[1];
        var year = parseInt(splitDate[2].replace(/^0+/,''));

        for(var i = 0; i < monYear.options.length; i++)
        {
            if(monYear.options[i].value == month + "/" + year)
            {
                monYear.options[i].selected = true;
                days.selectedIndex = day - 1;
                div.style.display = "none";
                return;
            }
        }
        div.style.display = "block";
    }
}

function UpdateReturnDateTolerance()
{
    if(document.getElementById(flightSearchControlId + "ddlDepDay"))
    {
        depTextBox = document.getElementById(flightSearchControlId + "txtDepDate");
        returnTextBox = document.getElementById(flightSearchControlId + "txtReturnDate");
    }
    else
    {
        depTextBox = document.getElementById(departControlId + "txtDepDate");
        returnTextBox = document.getElementById(returnControlId + "txtReturnDate");
    }
        
    var splitDepDate = depTextBox.value.split('/');
    var depDay = parseInt(splitDepDate[0].replace(/^0+/,''));
    var depMonth = splitDepDate[1] - 1;
    var depYear = parseInt(splitDepDate[2].replace(/^0+/,''));
    var depDate = new Date();
    depDate.setFullYear(depYear,depMonth,depDay);
    var splitReturnDate = returnTextBox.value.split('/');
    var returnDay = parseInt(splitReturnDate[0].replace(/^0+/,''));
    var returnMonth = splitReturnDate[1] - 1;
    var returnYear = parseInt(splitReturnDate[2].replace(/^0+/,''));
    var returnDate = new Date();
    returnDate.setFullYear(returnYear,returnMonth,returnDay);
    var oneDay = 1000 * 60 * 60 * 24;
    var dateDifference = Math.abs(depDate - returnDate);
    dateDifference = Math.round(dateDifference / oneDay);
    if(dateDifference < minimumDaysApart || returnDate < depDate)
    {
        depDate.setDate(depDate.getDate() + (parseInt(minimumDaysApart)));
        var days = depDate.getDate();
        var month = depDate.getMonth();
        var year = depDate.getFullYear();
        if(days < 10)
        {
            days = "0" + days;
        }
        month = month + 1;
        if(month < 10)
        {
            month = "0" + month;
            if (month == "00")
                month = "01";
        }
        returnTextBox.value = days + "/" + month + "/" + year;
        UpdateDates("return");
    }
}

function GetDestinationIataFromArray(airport) {
    var iataTextBoxId = "ctl00_ContentPlaceHolder_ctl00_SearchControl01_FlightsControl_AutoSuggestFlightsControl_txtDesIata";
    try {
        var test = document.getElementById(iataTextBoxId).value;
    }
    catch (ex) { iataTextBoxId = flightSearchControlId + 'txtDesIata'}
    
    if(  document.getElementById(flightSearchControlId + "hdnAutoSuggest"))
        document.getElementById(flightSearchControlId + "hdnAutoSuggest").value = '';
    else
        document.getElementById(iataTextBoxId).value = ''; //"ctl00_ContentPlaceHolder_ctl00_SearchControl01_FlightsControl_AutoSuggestFlightsControl_txtDesIata"
    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) {
                if (document.getElementById(flightSearchControlId + "hdnAutoSuggest"))
                    document.getElementById(flightSearchControlId + "hdnAutoSuggest").value = iata;
                else
                    document.getElementById(iataTextBoxId).value = iata;
                break;
            }            
        }
    }    
}


/* TravelAgent */
TravelAgent = function() {

    var aRE = /^a$/i

    var travelagent = this;
    var traveldata = new TravelData();
    //var origins = new Origins(document.getElementById("from"));

    var fillAirport = function(airport) {       
        var stringWithoutSpans = airport.replace(/<span>/gi,'').replace(/<\/span>/gi,'')
        travelagent.destination.value = stringWithoutSpans ;
        GetDestinationIataFromArray(stringWithoutSpans);        
    }

    var selectAirportFromAutoFill = function(evt) {
        evt = (evt) ? evt : ((window.event) ? event : null);
        if (evt) {
            var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
            if (elem && aRE.test(elem.nodeName)) {
                var airport = elem.innerHTML;
                fillAirport(airport);
                // close suggestions
                // 20070320 WvdH: added parentNode
                travelagent.dest_suggest.parentNode.style.display = "none";
                travelagent.dest_suggest.style.display = "none";
                return false;               
            }
        }
    }

    var selectAirportFromCountry = function(evt) {
        evt = (evt) ? evt : ((window.event) ? event : null);
        if (evt) {
            var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
            if (elem) {
                var airport = travelagent.dest_airport.options[travelagent.dest_airport.selectedIndex].innerHTML;
                fillAirport(airport);
                closeFindDestination();
            }
        }
    }

    var navigateInDestinationList = function(evt) {
        if (traveldata) {
            evt = (evt) ? evt : ((window.event) ? event : null);
            if (evt && (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13 || evt.keyCode == 9)) {
                var as = travelagent.dest_suggest.childNodes;
                for (var i = 0; i < as.length; i++) {
                    var a = as[i];
                    if (a.className == 'selected') {
                        if (evt.keyCode == 40 && a.nextSibling != null) {
                            a.className = "";
                            a.nextSibling.className = "selected";  
                            travelagent.dest_suggest.parentNode.scrollTop = a.nextSibling.offsetTop - 20;                           
                        }
                        else if (evt.keyCode == 38 && a.previousSibling != null) {
                            a.className = "";
                            a.previousSibling.className = "selected";
                            travelagent.dest_suggest.parentNode.scrollTop = a.previousSibling.offsetTop - 20;
                        }
                        else if (evt.keyCode == 13 || evt.keyCode == 9) {
                            a.className = "";
                            var airport = a.innerHTML;
                            fillAirport(airport);
                            // 20070320 Wvdh: added parentNode 
                            travelagent.dest_suggest.parentNode.style.display = "none";
                            travelagent.dest_suggest.style.display = "none";
                        }
                        evt.cancelBubble = true;
                        return false;
                    }
                }
                if (as.length > 0 && evt.keyCode == 40) {
                    as[0].className = 'selected';
                    travelagent.dest_suggest.scrollTop = 0;                    
                    return false;
                }
            }
        }
    }

    function returnValue()
    {
        return false;
    }
    
    var fillDestinations = function(evt) {
        // open suggestions
        if (traveldata) {
            evt = (evt) ? evt : ((window.event) ? event : null);
            if (evt) {
                if (evt.keyCode == 40 || evt.keyCode == 38 || evt.keyCode == 13 || evt.keyCode == 9) {
                    return navigateInDestinationList(evt);
                }
                // fill box
                travelagent.removeDestinations();
                var searchString = travelagent.destination.value;
                if (searchString == "") {
                    // 20070320 WvdH: added parentNode
                    travelagent.dest_suggest.parentNode.style.display = "none";
                    travelagent.dest_suggest.style.display = "none";
                    //                    if (evt.type == "keyup")
                    //                        travelagent.setClasses("all", "all");
                    return;
                }
                var elems = traveldata.selectAirportData(searchString);
                if (elems.length > 0) {
                    for (var i = 0; i < elems.length; i++) {
                        var a = document.createElement("a");
                        a.setAttribute("href", "#");
                        a.setAttribute("onclick", "return false;");
                        // start fm22162 
                        a.setAttribute("tabindex", i + 7, ";");
                        // end  fm22162 
                        a.innerHTML = elems[i];
                        travelagent.dest_suggest.appendChild(a);
                    }                  
                   
                    travelagent.dest_suggest.scrollTop = 0;
                    // 20070320 WvdH: added parentNode
                    travelagent.dest_suggest.parentNode.style.display = "block";
                    travelagent.dest_suggest.style.display = "block";
                }
                else {
                    // 20070320 WvdH: added parentNode
                    travelagent.dest_suggest.parentNode.style.display = "none";
                    travelagent.dest_suggest.style.display = "none";
                    //travelagent.setClasses("all", "all");
                    return;
                }
            }
        }
    }

    /* Destination Finder */
    var showFindDestination = function(evt) {
        // fill only the first time
        if (travelagent.dest_country.childNodes.length < 5) {
            var elems = traveldata.getCountryData();
            if (elems.length > 0) {
                for (var i = 0; i < elems.length; i++) {
                    var tag = document.createElement("option");
                    tag.innerHTML = elems[i];
                    travelagent.dest_country.appendChild(tag);
                }
            }
        }
        var containerd = document.getElementById('destinationcontainer');
        if (document.all) {
            var entries = document.getElementsByTagName('select');
            for (var i = 0; i < entries.length; i++) {
                if (entries[i].className == 'dest_hide') {
                    entries[i].style.display = 'none';
                }
            }
        }
        containerd.style.display = 'block';
        // start fm22162 
        document.getElementById('dest_country').focus();
        // endfm22162 
    }
    var closeFindDestination = function(evt) {
        var containerd = document.getElementById('destinationcontainer');
        if (document.all) {
            var entries = document.getElementsByTagName('select');
            for (var i = 0; i < entries.length; i++) {
                if (entries[i].className == 'dest_hide') {
                    entries[i].style.display = 'block';
                }
            }
        }
        containerd.style.display = 'none';
    }
    var findAirports = function(evt) {
        evt = (evt) ? evt : ((window.event) ? event : null);
        if (evt) {
            var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
            if (elem) {
                var country = elem.options[elem.selectedIndex].innerHTML;
                var elems = traveldata.getAirportData(country);
                if (elems.length > 0) {
                    travelagent.dest_airport.options.length = 0;
                    for (var i = 0; i < elems.length; i++) {
                        var tag = document.createElement("option");
                        tag.innerHTML = elems[i];
                        travelagent.dest_airport.appendChild(tag);
                    }
                    // prefill first airport in form
                    var default_airport = elems[0];
                    fillAirport(default_airport);
                }
            }
        }
    }

    this.destination = document.getElementById(flightSearchControlId + "txtDestination");    
    addEvent(this.destination, "focus", fillDestinations);
    addEvent(this.destination, "keyup", fillDestinations);

    this.dest_suggest = document.getElementById("autofill");
    addEvent(this.dest_suggest, "click", selectAirportFromAutoFill);  
}

TravelAgent.prototype.removeDestinations = function() {
    var dest_suggest = document.getElementById("autofill");
    var elems = dest_suggest.childNodes;
    if (elems.length > 0) {
        for (var i = elems.length - 1; i >= 0; i--) {
            //elems[i].innerHTML = "";
            elems[i].parentNode.removeChild(elems[i]);
        }
    }
}

/* TravelData */
TravelData = function(url) {

    var traveldata = this;   
    //var xmlhttp = null;
    this.airportdata = new Array();
    this.countrydata = new Array();
    //this.xmldata = null;
    traveldata.populateData();
}

function charOrdA(a, b) {
    var a = a.toLowerCase(); 
    var b = b.toLowerCase();
    if (a > b) return 1;
    if (a < b) return -1;
     return 0;
    //return parseInt(a < b ? -1 : (a > b ? 1 : 0));
}

TravelData.prototype.populateData = function() {    
    if (allDestinationAirports && this.airportdata && !this.airportdata.length > 0) {
        for (var i = 0; i < allDestinationAirports.length; i++) {
            this.airportdata[i] = allDestinationAirports[i];
        }
    }
}

TravelData.prototype.selectAirportData = function(searchString) {
    //document.getElementById(flightSearchControlId + "hdnAutoSuggest").value = '';
    // get subset of the airport array
    var selectedData = new Array();
    var prioritisedData = new Array();
    var addedIATA = false;
    if (this.airportdata && this.airportdata.length > 0 && searchString.length > 1) {
        for (var i = 0; i < this.airportdata.length; i++) {
            var dataString = this.airportdata[i].toLowerCase();
            var position = dataString.indexOf(searchString.toLowerCase())
            var indexOfDoller = this.airportdata[i].indexOf('$');
            if (position != -1)            
            {
                if(position == 0)
                {
                    if(isNaN(this.airportdata[i].substring(indexOfDoller + 1)))
                        prioritisedData.push(makeSearchBold(searchString , this.airportdata[i].substring(0,indexOfDoller) + ' - ' + this.airportdata[i].substring(indexOfDoller+ 1) ));
                    else
                        prioritisedData.push(makeSearchBold(searchString ,this.airportdata[i].substring(0,indexOfDoller)));
                        
                }   
                else
                { 
                    var charPosition  =   dataString.charAt(position - 1);      
                    if(charPosition == ' ' || charPosition == '-' || charPosition == '(')
                    {
                        if(isNaN(this.airportdata[i].substring(indexOfDoller+ 1)))
                            selectedData.push(makeSearchBold(searchString , this.airportdata[i].substring(0,indexOfDoller) + ' - ' + this.airportdata[i].substring(indexOfDoller+ 1) ));
                        else
                            selectedData.push(makeSearchBold(searchString ,this.airportdata[i].substring(0,indexOfDoller)));
                    }
                    else
                    {
                        if(!addedIATA && this.airportdata[i].substring(indexOfDoller+ 1) == searchString.toUpperCase())
                        {
                            if(isNaN(this.airportdata[i].substring(indexOfDoller+ 1)))                    
                                selectedData.push(makeSearchBold(searchString ,this.airportdata[i].substring(0,indexOfDoller) + ' - ' + this.airportdata[i].substring(indexOfDoller+ 1) ));
                            else
                                selectedData.push(makeSearchBold(searchString ,this.airportdata[i].substring(0,indexOfDoller)));
                            addedIATA = true;
                        }
                    }
                }
            }
        }
        if(prioritisedData.length >= 10)
        {
            var data = new Array();
            for(var i=0; i <= 10; i++)
            {
                data.push(prioritisedData[i]);           
            }
            return data;
        }          
        else
        {
            var data = new Array();
            for(var i=0; i < prioritisedData.length; i++)
            {
                data.push(prioritisedData[i]);           
            }
            
            for(var i=0; i < (10 - prioritisedData.length); i++)
            {
                if(data.length >= 10)
                    break;
                    
                if(selectedData.length > i)
                    data.push(selectedData[i]);
            }
            return data;
        }      
                
        prioritisedData = prioritisedData.concat(selectedData);
    }    
    return prioritisedData;
}

function makeSearchBold(charsToMakeBold, stringToMakeBold)
{
    charsToMakeBold = charsToMakeBold.replace('(','').replace(')','');
    stringToMakeBold = stringToMakeBold.replace('(','||||').replace(')','####')
    var regex = new RegExp( '(' + charsToMakeBold  + ')', 'gi' );  
    return stringToMakeBold.replace( regex, "<span>$1</span>" ).replace('||||', '(').replace('####',')');  
}


function addEvent(elm, evt, fn) {
    if (elm.addEventListener) {
        elm.addEventListener(evt, fn, false);
        return true;
    }
    else if (elm.attachEvent) {
        var r = elm.attachEvent('on' + evt, fn);
        return r;
    }
    else {
        elm['on' + evt] = fn;
    }
}

 function chkAirlinesClicked()
 {
    if(document.getElementById(flightSearchControlId + "chkAirlines"))
    {
        if(document.getElementById(flightSearchControlId + "chkAirlines").checked)
        {     
            document.getElementById(flightSearchControlId + "divAirlineOperators").style.display = '';      
        }
        else
        {
             document.getElementById(flightSearchControlId + "divAirlineOperators").style.display = 'none';
        }  
    }
    else if(document.getElementById(packageSearchControlId + "chkAirlines"))
    {
        if(document.getElementById(packageSearchControlId + "chkAirlines").checked)
        {     
            document.getElementById(packageSearchControlId + "divAirlineOperators").style.display = '';      
        }
        else
        {
             document.getElementById(packageSearchControlId + "divAirlineOperators").style.display = 'none';
        } 
    }
 }

 //flightSearchControlId, departControlId & returnControlId are set in page codebehind and used to identify asp.net form elements.
 function ValidatePassengersAmend_ClientValidate(source, args) {
     var adults;
     var children;
     var infants;
     var totalPax;

     //adults
     adults = document.getElementById(flightSearchControlId + 'ddlAdults').value;
     //children
     children = document.getElementById(flightSearchControlId + 'ddlChildren').value;
     //infants
     infants = document.getElementById(flightSearchControlId + 'ddlInfants').value;

     totalPax = parseInt(adults) + parseInt(children) + parseInt(infants);
     if (totalPax > 9) {
         args.IsValid = false;
     }
     else {
         args.IsValid = true;
     }
 }

 function ValidateAdultsAgainstInfantsAmend_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 ValidateDepartureDateTime_ClientValidate(source, args) {

     var depDateString;
     if (document.getElementById(flightSearchControlId + "ddlDepMonYear")) {
         depDateString = document.getElementById(flightSearchControlId + "ddlDepMonYear").value;
     }
     else {
         depDateString = document.getElementById(departControlId + "ddlDepMonYear").value;
     }
     var splitDepDate = depDateString.split('/');
     var day;
     if (document.getElementById(flightSearchControlId + "ddlDepDay")) {
         day = parseInt(document.getElementById(flightSearchControlId + "ddlDepDay").value);
     }
     else {
         day = parseInt(document.getElementById(departControlId + "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 ValidateDepartureDateNotPast_ClientValidate(source, args) {
     var depDateString;

     if (document.getElementById(flightSearchControlId + "ddlDepMonYear")) {
         depDateString = document.getElementById(flightSearchControlId + "ddlDepMonYear").value;
     }
     else {
         depDateString = document.getElementById(departControlId + "ddlDepMonYear").value;
     }

     var splitDepDate = depDateString.split('/');

     var day;

     if (document.getElementById(flightSearchControlId + "ddlDepDay")) {
         day = parseInt(document.getElementById(flightSearchControlId + "ddlDepDay").value);
     }
     else {
         day = parseInt(document.getElementById(departControlId + "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 ValidateDates_ClientValidate(source, args) {
     var depDateString;

     if (document.getElementById(flightSearchControlId + "ddlDepMonYear")) {
         depDateString = document.getElementById(flightSearchControlId + "ddlDepMonYear").value;
     }
     else {
         depDateString = document.getElementById(departControlId + "ddlDepMonYear").value;
     }

     var returnDateString
     if (document.getElementById(flightSearchControlId + "ddlReturnMonYear")) {
         returnDateString = document.getElementById(flightSearchControlId + "ddlReturnMonYear").value;
     }
     else {
         returnDateString = document.getElementById(returnControlId + "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*/
     if (document.getElementById(flightSearchControlId + "ddlDepDay")) {
         day = parseInt(document.getElementById(flightSearchControlId + "ddlDepDay").value);
     }
     else {
         day = parseInt(document.getElementById(departControlId + "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*/
     if (document.getElementById(flightSearchControlId + "ddlReturnDay")) {
         day = parseInt(document.getElementById(flightSearchControlId + "ddlReturnDay").value);
     }
     else {
         day = parseInt(document.getElementById(returnControlId + "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 ValidateDepartureDate_ClientValidate(source, args) {
     var depDateString;

     if (document.getElementById(flightSearchControlId + "ddlDepMonYear")) {
         depDateString = document.getElementById(flightSearchControlId + "ddlDepMonYear").value;
     }
     else {
         depDateString = document.getElementById(departControlId + "ddlDepMonYear").value;
     }

     var returnDateString
     if (document.getElementById(flightSearchControlId + "ddlReturnMonYear")) {
         returnDateString = document.getElementById(flightSearchControlId + "ddlReturnMonYear").value;
     }
     else {
         returnDateString = document.getElementById(returnControlId + "ddlReturnMonYear").value;
     }
     var splitDepDate = depDateString.split('/');
     var depDay;
     if (document.getElementById(flightSearchControlId + "ddlDepDay")) {
         depDay = parseInt(document.getElementById(flightSearchControlId + "ddlDepDay").value);
     }
     else {
         depDay = parseInt(document.getElementById(departControlId + "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;
     if (document.getElementById(flightSearchControlId + "ddlReturnDay")) {
         returnDay = parseInt(document.getElementById(flightSearchControlId + "ddlReturnDay").value);
     }
     else {
         returnDay = parseInt(document.getElementById(returnControlId + "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 ValidateDatesApart_ClientValidate(source, args) {
     return args.IsValid = true;
 }

 function ValidateUnqiueOperators_ClientValidate(source, args) {

     var checkBox = document.getElementById(flightSearchControlId + "chkAirlines").checked;
     var op1 = document.getElementById(flightSearchControlId + "ddlOperator1").value;
     var op2 = document.getElementById(flightSearchControlId + "ddlOperator2").value;
     var op3 = document.getElementById(flightSearchControlId + "ddlOperator3").value;

     if (checkBox) {
         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;
 }

 function ValidateFlightDateInRange(source, args) {
     var status = ValidateDateInRange(flightSearchControlId);
     return args.IsValid = status;
 }

 function ValidateAccomDateInRange(source, args) {

     var status = ValidateDateInRange(departControlId)
     return args.IsValid = status;
 }

 function ValidateDateInRange(prefix) {

     //VALIDATION CHANGED TO USE MAX DEPART DATE AS LIMIT FOR BOTH DEPART AND RETURN DATES
     var returnStatus;

     var hidMaxDepDate = document.getElementById(prefix + "hidMaxDateForwardDep");
     var inputDepDate = document.getElementById(prefix + "txtDepDate");

     prefix = prefix.replace('jQueryDepDate', 'jQueryReturnDate');
     var hidMaxRetDate = document.getElementById(prefix + "hidMaxDateForwardRet");
     var inputRetDate = document.getElementById(prefix + "txtReturnDate");

     var validDepDate = false;
     var validRetDate = false;

     var arrDepDate = inputDepDate.value.split('/');
     var arrMaxDepDate = hidMaxDepDate.value.split('/');

     var arrRetDate = inputRetDate.value.split('/');
     var arrMaxRetDate = hidMaxRetDate.value.split('/');


     var dateDepInput = new Date(arrDepDate[2], arrDepDate[1] - 1, arrDepDate[0]);
     var dateDepMax = new Date(arrMaxDepDate[2], arrMaxDepDate[1] - 1, arrMaxDepDate[0]);
     var dateRetInput = new Date(arrRetDate[2], arrRetDate[1] - 1, arrRetDate[0]);
     var dateRetMax = new Date(arrMaxRetDate[2], arrMaxRetDate[1] - 1, arrMaxRetDate[0]);

     validDepDate = dateDepInput < dateDepMax;
     validRetDate = dateRetInput < dateDepMax;

     //alert(inputDepDate.value + '   ' + hidMaxDepDate.value + '   ' + validDepDate);

     if (validDepDate && validRetDate)
         return returnStatus = true;
     else
         return returnStatus = false;
 }

 function GetDestinationIata() {
     var airportName = document.getElementById("txtDestination").value;
     alert('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() {

 }

 function GetDestinationIataReturn(result) {
     document.getElementById(flightSearchControlId + "hdnAutoSuggest").value = result;
 }

 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;
 }
