﻿// 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 LoadRadSelected(id) {
    if (document.getElementById(id + "_hidRadSearchSelected").value != '') {
        var rad = document.getElementById(id + "_hidRadSearchSelected").value;
        //alert(rad);
        if (rad == "Flights")
            document.getElementById(id + "_radFlights").checked = true;
        if (rad == "Accom")
            document.getElementById(id + "_radAccom").checked = true;
        if (rad == "Package")
            document.getElementById(id + "_radPackages").checked = true;
    }
}
function SearchChange(id) {

    if (document.getElementById(id + "_radFlights") && document.getElementById(id + "_radFlights").checked) {       
        document.getElementById("FlightsControlDiv").style.display = "block";
        document.getElementById("AccommodationControlDiv").style.display = "none";
        document.getElementById("PackageControlDiv").style.display = "none";

        document.getElementById("FlightsControlDiv").style.visibility = "visible";
        document.getElementById("AccommodationControlDiv").style.visibility = "hidden";
        document.getElementById("PackageControlDiv").style.visibility = "hidden";

        //document.getElementById("searchcontrol01").style.height = "331px";
        //document.getElementById("searchcontrol01").style.minHeight = "331px";
        //showFlightChildren(flightSearchControlId);
        Display_FlightChildAges();
        ToggleAirlines('chkNarrowSearchByAirline', 'divHomeAirlines', flightSearchControlId);
    }
    else if (document.getElementById(id + "_radAccom") && document.getElementById(id + "_radAccom").checked) {
        document.getElementById("FlightsControlDiv").style.display = "none";
        document.getElementById("AccommodationControlDiv").style.display = "block";
        document.getElementById("PackageControlDiv").style.display = "none";
               
        document.getElementById("FlightsControlDiv").style.visibility = "hidden";
        document.getElementById("AccommodationControlDiv").style.visibility = "visible";
        document.getElementById("PackageControlDiv").style.visibility = "hidden";
       
        //document.getElementById("searchcontrol01").style.height = "418px";
        //document.getElementById("searchcontrol01").style.minHeight = "418px";

        showRooms('Packages', '', accomSearchControlId);

    }
    else if (document.getElementById(id + "_radPackages") && document.getElementById(id + "_radPackages").checked) {
        document.getElementById("FlightsControlDiv").style.display = "none";
        document.getElementById("AccommodationControlDiv").style.display = "none";
        document.getElementById("PackageControlDiv").style.display = "block";

        document.getElementById("FlightsControlDiv").style.visibility = "hidden";
        document.getElementById("AccommodationControlDiv").style.visibility = "hidden";
        document.getElementById("PackageControlDiv").style.visibility = "visible";

        //document.getElementById("searchcontrol01").style.height = "418px";
        //document.getElementById("searchcontrol01").style.minHeight = "418px";
        showRooms('Packages', '', packageSearchControlId);
        ToggleAirlines('chkNarrowSearchByAirline', 'divAirlines', packageSearchControlId);
    }


}         


function Display_FlightChildAges()
{
    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 + "rowChild1").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild2").style.display = "none";
            document.getElementById(flightSearchControlId + "rowChild3").style.display = "none";
            document.getElementById(flightSearchControlId + "rowChild4").style.display = "none";
            break;
        case 2:
            document.getElementById(flightSearchControlId + "rowChild1").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild2").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild3").style.display = "none";
            document.getElementById(flightSearchControlId + "rowChild4").style.display = "none";
            break;
        case 3:
            document.getElementById(flightSearchControlId + "rowChild1").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild2").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild3").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild4").style.display = "none";
            break;
        case 4:
            document.getElementById(flightSearchControlId + "rowChild1").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild2").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild3").style.display = "";
            document.getElementById(flightSearchControlId + "rowChild4").style.display = "";
            break;
        }
    }
}

function UpdateReturnDate(controlId)
{
    UpdateDates("return", controlId);
}

function UpdateDepartureDate(controlId) {
    UpdateDates("depart", controlId);
    UpdateReturnDateTolerance(controlId);
}

function UpdateDateTextbox(type, controlId)
{
    var days
    var monYear
    var textBox
    var div

    if(type == "return")
    {
        days = document.getElementById(controlId + "ddlReturnDay").value;
        monYear = document.getElementById(controlId + "ddlReturnMonYear").value;
        textBox = document.getElementById(controlId + "txtReturnDate");
    }

    else if(type == "depart")
    {
        days = document.getElementById(controlId + "ddlDepDay").value;
        monYear = document.getElementById(controlId + "ddlDepMonYear").value;
        textBox = document.getElementById(controlId + "txtDepDate");
    }
    textBox.value = days + "/" + monYear;
    UpdateDates(type, controlId);
    
    if (type == "depart") {
        UpdateReturnDateTolerance(controlId);
    }
}

function UpdateDates(type, controlId)
{
    var days
    var monYear
    var textBox
    var div
    
    if(type == "return")
    {
        days = document.getElementById(controlId + "ddlReturnDay");
        monYear = document.getElementById(controlId + "ddlReturnMonYear");
        textBox = document.getElementById(controlId + "txtReturnDate").value;
        div = document.getElementById("divReturnError");
    }
    
    else if(type == "depart")
    {
        days = document.getElementById(controlId + "ddlDepDay");
        monYear = document.getElementById(controlId + "ddlDepMonYear");
        textBox = document.getElementById(controlId + "txtDepDate").value;
        div = document.getElementById("divDepError");
    }
    
    if(days && monYear && textBox)
    {
        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;
                if (div)
                    div.style.display = "none";
                return;
            }
        }
        if (div)
            div.style.display = "block";
    }
}

function UpdateReturnDateTolerance(controlId)
{
    depTextBox = document.getElementById(controlId + "txtDepDate").value;
    returnTextBox = document.getElementById(controlId + "txtReturnDate").value;
        
    var splitDepDate = depTextBox.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.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);
    //alert('date difference = ' + dateDifference + '; depDate= ' + depDate + '; returnDate= ' + returnDate);
    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;
        }
        document.getElementById(controlId + "txtReturnDate").value = days + "/" + month + "/" + year;
        UpdateDates("return", controlId);
    }
}


/* TravelAgent */
TravelAgent = function() {

    var aRE = /^a$/i

    var travelagent = this;
    var traveldata = new TravelData();

    var fillAirport = function(airport) {
        travelagent.destination.value = airport.replace(/<span>/gi,'').replace(/<\/span>/gi,'');
    }

    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;
                }
            }
        }
    }

    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;
    this.airportdata = new Array();
    this.countrydata = new Array();
    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;
}

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 ToggleAirlines(checkbox, div, controlId)
 {
     var chk = document.getElementById(controlId + checkbox);
    if (chk.checked == true)
    {
        document.getElementById(controlId + div).style.display = 'block';
    }
    else
    {
        document.getElementById(controlId + div).style.display = 'none';
    }        
    return false;
 }
 