﻿var PrevDropOffLoc = "";
var PrevPickLoc = "";

function updateNearbyEntities() {
    var citycode = GetDestCityCode(rt.Des.value);
    if ((citycode != "") && (rt.Landmark.selectedIndex > 0)) {
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetNearbyEntities(VenCode, PkgCode, citycode, rt.Landmark.selectedIndex, OnCompleteNearbyEntities, OnError);
    } else {
        if (rt.Landmark.selectedIndex == 0) {
            toggleLandmarkDropDown(0);
        } else {
            toggleLandmarkDropDown(1);
        }
        toggleNearbyEntitiesDropDown(1);
    }
}
function NearbyEntitiesTextChange() {
    if (rt.NearbyEntities != null) {
        rt.NearbyEntities.disabled = true;
        updateNearbyEntitiesTextChange();
    }

}
function updateNearbyEntitiesTextChange() {
    var citycode = GetDestCityCode(rt.Des.value);
    if ((citycode != "") && (rt.Landmark.selectedIndex > 0)) {
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetNearbyEntities(VenCode, PkgCode, citycode, rt.Landmark.selectedIndex, OnCompleteNearbyEntities, OnError);
    } else {
        rt.NearbyEntities.options[0] = new Option("", "");
        toggleNearbyEntitiesDropDown(1);
    }
}

var hasNEBC = false;
var lspf;
function updateExternalNearbyEntities(vc, pc, dest) {
    if ((dest != "") && (hrr.NearbyEntities.length <= 1) && (!hasNEBC)) {
        hasNEBC = true;

        lspf = document.getElementById("landmarkSearchProgressField");
        if ((lspf != null) && (lspf != undefined)) { lspf.style.display = "block"; }
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetNearbyEntities(vc, pc, dest, "", OnCompleteExternalNearbyEntities, OnError);
    } else {
        return;
    }
}

function valCity(val, c) {
    var val = val.toUpperCase();
    for (var i = 0; i < c.length; i++) {
        var city = c[i];
        if (((city.C == val) && (rt.isShortDescription != 1)) || (city.D.toUpperCase() == val) || (city.LD.toUpperCase() == val)) {
            return city;
        }
    }
    return null;
}


function resDateSelect(sender, value) {
    if (sender.arrCtrlsToUpdate != null) {
        var a = parseDateFormat(value.trim(), sender.DateFormat);

        for (var i = 0; i < sender.arrCtrlsToUpdate.length; i++) {
            if (sender.arrCtrlsToUpdate[i] != null) {
                sender.arrCtrlsToUpdate[i].value = siteDateFormat(a, sender.arrCtrlsToUpdate[i].DateFormat);
            }
        }
    }
    dateselectvalidations(sender);
    callvalidatorcallout(sender.arrCtrlsToUpdate);

}


function dateselectvalidations(trgt) {
    var validNumberOfNights = false;
    if (rt != null) {
        var a = parseVaxDate(trgt.value.trim());
        if (a != null) {
            if (rt.Length == null)
                rt.Length = 0;

            if (trgt.arrCtrlsToAddDayLength != null) {
                var dt = new Date(a);
                if (rt.NumberOfNights != null) {
                    if (IsValidNumberOfNights(rt.NumberOfNights.value) == true) {
                        rt.Length = parseInt(rt.NumberOfNights.value, 10);
                        validNumberOfNights = true;
                    }
                    else {
                        rt.Length = 0;
                    }
                }
                dt.setDate(a.getDate() + rt.Length);
                for (var i = 0; i < trgt.arrCtrlsToAddDayLength.length; i++) {
                    if (trgt.arrCtrlsToAddDayLength[i] != null) {
                        if (rt.NumberOfNights != null) {
                            if (rt.Length != 0) {
                                trgt.arrCtrlsToAddDayLength[i].value = siteDateFormat(dt, trgt.arrCtrlsToAddDayLength[i].DateFormat);
                                if (rt.Ret.id == trgt.arrCtrlsToAddDayLength[i].id)
                                    returnDateDayName(rt.Ret.value);
                            }
                        }
                        else {
                            trgt.arrCtrlsToAddDayLength[i].value = siteDateFormat(dt, trgt.arrCtrlsToAddDayLength[i].DateFormat);
                            if (rt.Ret.id == trgt.arrCtrlsToAddDayLength[i].id)
                                returnDateDayName(rt.Ret.value);
                        }

                    }
                }
            }
        }

        if (rt.Dep != null)
            if (rt.Dep.id == trgt.id) {
            departureDateDayName(rt.Dep.value);
        }

        if (rt.Ret != null)
            if (rt.Ret.id == trgt.id) {
            returnDateDayName(rt.Ret.value);
            if (rt.NumberOfNights != null)
                updateNumberOfNights();
        }

    }

    if (rt.NumberOfNights != null) {
        if (validNumberOfNights) {
            callvalidatorcallout(trgt.arrCtrlsToAddDayLength);
        }
    }
    else {
        callvalidatorcallout(trgt.arrCtrlsToAddDayLength);
    }

}

function callvalidatorcallout(ctrls) {
    if (ctrls == null)
        return;

    if (IsArray(ctrls)) {
        for (var i = 0; i < ctrls.length; i++) {
            if (ctrls[i] != null) {
                if (ctrls[i].Validators != null) {
                    if (ctrls[i].Validators.length > 0) {
                        var val = ctrls[i].Validators[0];
                        val.innerHTML = '';
                        val.evaluationfunction(val);
                    }
                }
            }
        }
    }
    else {
        if (ctrls.Validators != null) {
            if (ctrls.Validators.length > 0) {
                var val = ctrls.Validators[0];
                val.innerHTML = '';
                val.evaluationfunction(val);
            }
        }
    }
}

function IsArray(obj) {
    return !(obj.constructor.toString().indexOf('Array') == -1)
}

function updateNumberOfNights() {
    var nightsOut = getDateDiffDays(rt.Dep.value, rt.Ret.value);
    if (nightsOut > 0) {
        rt.NumberOfNights.value = nightsOut;
        rt.Length = parseInt(nightsOut, 10);

    }
    else {
        rt.NumberOfNights.value = "";
    }
}

function getDateDiffDays(firstDate, secondDate) {
    var date1 = parseVaxDate(firstDate);
    var date2 = parseVaxDate(secondDate);
    var difference = date2 - date1;
    return Math.floor(difference / 86400000); // number of milli seconds in a day
}


function departureDateDayName(depDateValue) {
    if (rt.departureDateDayNameLabel == null || depDateValue == null) return;
    var a = parseVaxDate(depDateValue);
    if (a != null) {
        rt.departureDateDayNameLabel.innerHTML = a.localeFormat("dddd");
    }
    else {
        rt.departureDateDayNameLabel.innerHTML = "";
    }
}

function returnDateDayName(retDateValue) {
    if (rt.returnDateDayNameLabel == null || retDateValue == null) return;
    var a = parseVaxDate(retDateValue);
    if (a != null) {
        rt.returnDateDayNameLabel.innerHTML = a.localeFormat("dddd");
    }
    else {
        rt.returnDateDayNameLabel.innerHTML = "";
    }
}

function ViewHoBrnds(href) {
    if (rt.HoBrnds != null) {
        OnCompleteHoBrnds(rt.HoBrnds, href);
    } else {
        // Trisept.TB.Vax.WebView.VaxAjax.GetHotelBrands(rt.Ven.value, OnCompleteHoBrnds, OnError, href);
    }
}
function ViewVehBrnds(href) {
    if (rt.VehBrnds != null) {
        OnCompleteVehBrnds(rt.VehBrnds, href);
    } else {
        // Trisept.TB.Vax.WebView.VaxAjax.GetVehicleBrands(rt.Ven.value, OnCompleteVehBrnds, OnError, href);
    }
}

function OnCompleteHoBrnds(args, href) {
    rt.HoBrnds = args;
    viewOptions(rt.HoBrnd, href, rt.HoBrnds)
}

function OnCompleteVehBrnds(args, href) {
    rt.VehBrnds = args;
    viewOptions(rt.VehBrnd, href, rt.VehBrnds)
}


function serviceWaitScreen() {
    if (rt.setWS > 0) {
        if ($get("smartSearchProgressField").style.display == "none") {
            $get("smartSearchProgressField").style.display = "block";
        }
    } else {
        if ($get("smartSearchProgressField").style.display == "block") {
            $get("smartSearchProgressField").style.display = "none";
        }
    }
}

function updateOrigins() {
    if (rt.Org != null) {
        GetVendorPackageCode();
        var cityCode = '';
        if (rt.Des != null) {
            if ((rt.Des.value != "") && (rt.DestIndex == -1)) {
                if (rt.isShortDescription == 0) {
                    cityCode = GetCityCode(rt.Des.value);
                }
            }
        }

        if (rt.DestIndex >= 0) {
            cityCode = rt.Dests[rt.DestIndex].C;
        }
        if (rt.isSupportOrgDestPairingOffered == 1) {
            rt.setWS = rt.setWS + 1;
            serviceWaitScreen()
        }

        var usrc = "O";
        if (cityCode == "" && rt.isShortDescription == 1)
            usrc = "OE";

        ac1.setKeywords([]);
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetOriginMarkets(VenCode, PkgCode, cityCode, OnCompleteOrgsAndDests, OnError, usrc);
    }
}

function OnCompleteOrgsAndDests(args, usrc) {
    if (usrc == "O") {
        rt.Orgs = rt.OrgsDescConcat(args);
        ac1.setKeywords(rt.Orgs);
        rt.OrgIndex = valCityIndex(rt.Org.value, rt.Orgs);
    }
    else if (usrc == "D") {
        rt.Dests = rt.OrgsDescConcat(args);
        ac2.setKeywords(rt.Dests);
        rt.DestIndex = valCityIndex(rt.Des.value, rt.Dests);
    }
    else if (usrc == "OE") {
        rt.Orgs = rt.OrgsDescConcat(args);
        ac1.setKeywords(rt.Orgs);
    }
    else if (usrc == "DE") {
        rt.Dests = rt.OrgsDescConcat(args);
        ac2.setKeywords(rt.Dests);
    }
    if (rt.isSupportOrgDestPairingOffered == 1) {
        rt.setWS = rt.setWS - 1;
        serviceWaitScreen()
    }

    if ((rt.isShortDescription == 1) && (rt.Org != null) && (rt.Des != null)) {
        if (rt.Orgs.length > 0 && rt.Dests.length > 0 && rt.Org.value.trim() == "" && rt.Des.value.trim() != "" && rt.DestIndex == -1) {
            rt.DestIndex = valCityIndex(rt.Des.value, rt.Dests);
            updateOrigins();

            updateLocation();
            //updateNearbyEntities();
            if ((rt.NearbyEntities != null) && (rt.Landmark != null) && (rt.NearbyEntities.disabled)) {
                updateNearbyEntities();
            }
            //updateNearbyEntitiesTextChange();
        }
        else if (rt.Org.value.trim() != "" && rt.Des.value.trim() == "" && rt.Orgs.length > 0 && rt.Dests.length > 0 && rt.OrgIndex == -1) {
            rt.OrgIndex = valCityIndex(rt.Org.value, rt.Orgs);
            updateDestinations();
        }
        else if (rt.Orgs.length > 0 && rt.Dests.length > 0) {
            if ((rt.Org.value != "") && (rt.Des.value != "") && (rt.OrgIndex == -1) && (rt.DestIndex == -1)) {
                rt.OrgIndex = valCityIndex(rt.Org.value, rt.Orgs);
                rt.DestIndex = valCityIndex(rt.Des.value, rt.Dests);
                if (rt.DestIndex >= 0) {
                    updateOrigins();
                    updateLocation();
                    if ((rt.NearbyEntities != null) && (rt.Landmark != null) && (rt.NearbyEntities.disabled)) {
                        updateNearbyEntities();
                    }
                    //updateNearbyEntitiesTextChange(); 
                }
                if (rt.OrgIndex >= 0) {
                    updateDestinations();
                }
            }
        }
    }

    if (modalPopupExtender == undefined) {
        if (rt.Org != null && rt.FarePreference != null) {
            if (rt.Org.value.trim() != "" && rt.Des.value.trim() != "") {
                rt.OrgIndex = valCityIndex(rt.Org.value, rt.Orgs);
                rt.DestIndex = valCityIndex(rt.Des.value, rt.Dests);
                if (rt.OrgIndex >= 0 && rt.DestIndex >= 0) {
                    updateFarePreference();
                } else { initializeFarePreference(); }
            } else { initializeFarePreference(); }
        }
    }
}

function updateDestinations() {
    if (rt.Des != null) {
        GetVendorPackageCode();
        var cityCode = '';
        if (rt.Org != null) {
            if ((rt.Org.value != "") && (rt.OrgIndex == -1)) {
                if (rt.isShortDescription == 0) {
                    cityCode = GetCityCode(rt.Org.value);
                }
            }
        }
        if (rt.OrgIndex >= 0) {
            cityCode = rt.Orgs[rt.OrgIndex].C;
        }
        if (rt.isSupportOrgDestPairingOffered == 1) {
            rt.setWS = rt.setWS + 1;
            serviceWaitScreen()
        }

        var usrc = "D";
        if (cityCode == "" && rt.isShortDescription == 1)
            usrc = "DE";
        ac2.setKeywords([]);
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetDestinationMarkets(VenCode, PkgCode, cityCode, OnCompleteOrgsAndDests, OnError, usrc);
    }
}

function updateSmartSearchOrigins() {
    if (rt.Org != null) {
        GetVendorPackageCode();
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetSmartSearchOrigins(VenCode, PkgCode, rt.Org.value, OnCompleteSmartOrgs, OnError);
    }

}

function updateSmartSearchDestinations() {
    if (rt.Des != null) {
        GetVendorPackageCode();
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetSmartSearchDestinations(VenCode, PkgCode, rt.Des.value, OnCompleteSmartDests, OnError);
    }
}

function initializeFarePreference() {
    if (rt.FarePreference != null) {
        if (!rt.FarePreference.disabled) {
            rt.FarePreference.disabled = true;
            rt.FarePreference.length = 0;
            rt.FarePreference.options[0] = new Option(FarePreference.FarePrefDefaultDescription, FarePreference.FarePrefDefaultCode);
        }
    }
}

function updateFarePreference() {
    if (rt.FarePreference != null) {
        GetVendorPackageCode();
        Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetFarePreference(VenCode, PkgCode, rt.Orgs[rt.OrgIndex].C, rt.Dests[rt.DestIndex].C, rt.CabinPreference.value, OnCompleteFarePreferences, OnFareError);
    }
}

function OnCompleteFarePreferences(arg) {
    if (arg != null) {
        var prevFare = null;
        if (arg.length > 0) {
            rt.FarePreference.length = 0;
            rt.FarePreference.disabled = false;
            for (var i = 0; i < arg.length; i++) {
                rt.FarePreference.options[i] = new Option(arg[i].D, arg[i].C);
                if (rt.PrevFare != null) {
                    if (rt.PrevFare == arg[i].C) {
                        rt.FarePreference.options[i].selected = true;
                    }
                } 
            }
            rt.PrevFare = null;
        }
    }
}

function OnFareError(arg) {
    initializeFarePreference();
}

function toggleLandmarkDropDown(value) {
    if (value == 0) {
        rt.NearbyEntities.length = 0;
        rt.Landmark.disabled = false;
    } else {
        rt.NearbyEntities.length = 0;
        rt.Landmark.selectedIndex = 0;
        rt.Landmark.disabled = true;
    }
}

function toggleNearbyEntitiesDropDown(value) {
    if (value == 0) {
        rt.NearbyEntities.disabled = false;
    } else {
        rt.NearbyEntities.selectedIndex = 0;
        rt.NearbyEntities.disabled = true;
    }
}

function updateLocation() {
    if (rt.VehBrnd != null) {
        var citycode = GetDestCityCode(rt.Des.value);

        PrevPickLoc = rt.PiUpLoc.value;
        PrevDropOffLoc = rt.DrOffLoc.value;

        rt.PiUpLoc.length = 0;
        rt.DrOffLoc.length = 0;

        if (citycode != '' && rt.VehBrnd.value != '~') {
            GetVendorPackageCode();
            rt.PiUpLocErrorMsg = 1;

            updatePickUpLocation(citycode);
            updateDropOffLocation(citycode);
        }
        else {
            rt.PiUpLoc.disabled = true;
            rt.DrOffLoc.disabled = true;
        }
    }
}

function updatePickUpLocation(destinationcitycode) {
    Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetVehicalPickUpLocation(VenCode, PkgCode, destinationcitycode, rt.VehBrnd.value, OnCompletePickUpLoc, OnErrorLocation);
}

function updateDropOffLocation(destinationcitycode) {
    Trisept.UI.Web.Search.Components.Restool.RestoolConfigurationComponent.GetVehicalDropOffLocation(VenCode, PkgCode, destinationcitycode, rt.VehBrnd.value, OnCompleteDropOffLoc, OnErrorLocation);
}

function GetCityCode(str) {
    if (str.indexOf('(') != -1 && str.indexOf(')') != -1) {
        var c = str.split('(');
        str = c[1];
        c = str.split(')');
        str = c[0].replace(/^[\s]+/, '').replace(/[\s]+$/, '').replace(/[\s]{2,}/, ' ');
        return str;
    }
    else {
        return "";
    }

}


function GetDestCityCode(str) {
    if (rt.isShortDescription == 1 && (rt.DestIndex > -1)) {
        return rt.Dests[rt.DestIndex].C;
    }
    else {
        return GetCityCode(str);
    }
}

var airportcode = new Array();
function OnCompleteSmartOrgs(arg) {
    rt.SmartOrgs = rt.SmartConcat(arg);
    toggleSmartSearchWait();
    smartSearchList(rt.Org, rt.SmartOrgs, airportcode);
    rt.Org.disabled = false;
    rt.Des.disabled = false;
}

function OnCompleteSmartDests(arg) {
    rt.SmartDests = rt.SmartConcat(arg);
    toggleSmartSearchWait();
    smartSearchList(rt.Des, rt.SmartDests, airportcode);
    if (rt.Org != null)
        rt.Org.disabled = false;
    rt.Des.disabled = false;
}

function OnCompletePickUpLoc(arg) {
    if (arg == null) return;
    arg = arg.objSort("D", "C");
    for (var i = 0; i < arg.length; i++) {
        if (arg[i].C.indexOf("-Y") != -1) {
            rt.PiUpLoc.options[i] = new Option(arg[i].D, arg[i].C.substring(0, arg[i].C.indexOf("-Y")));
            rt.PiUpLoc.options[i].selected = true;
        }
        else {
            rt.PiUpLoc.options[i] = new Option(arg[i].D, arg[i].C);
        }
    }

    if (PrevPickLoc != "") {
        SetSelectedValue(rt.PiUpLoc, PrevPickLoc);
        PrevPickLoc = "";
    }

    if (rt.PiUpLoc.options.length > 0)
        rt.PiUpLoc.disabled = false;
    else
        rt.PiUpLoc.disabled = true;
}

function OnCompleteDropOffLoc(arg) {

    if (arg == null) return;
    arg = arg.objSort("D", "C");
    for (var i = 0; i < arg.length; i++) {
        if (arg[i].C.indexOf("-Y") != -1) {
            rt.DrOffLoc.options[i] = new Option(arg[i].D, arg[i].C.substring(0, arg[i].C.indexOf("-Y")));
            rt.DrOffLoc.options[i].selected = true;
        }
        else {
            rt.DrOffLoc.options[i] = new Option(arg[i].D, arg[i].C);
        }

    }
    if (PrevDropOffLoc != "") {
        SetSelectedValue(rt.DrOffLoc, PrevDropOffLoc);
        PrevDropOffLoc = "";
    }

    PrevDropOffLoc = "";

    if (rt.DrOffLoc.options.length > 0)
        rt.DrOffLoc.disabled = false;
    else
        rt.DrOffLoc.disabled = true;
}

function SetSelectedValue(DropDownControl, SelValue) {
    if (SelValue == "") return;
    for (var i = 0; i < DropDownControl.options.length; i++) {
        if (DropDownControl.options[i].value == SelValue) {
            DropDownControl.options[i].selected = true;
        }
    }
}

function OnCompleteNearbyEntities(arg) {
    arg = arg.objSort("D", "C");
    rt.NearbyEntities.length = 0;
    var arrEntityLatLong;
    for (var i = 0; i < arg.length; i++) {
        arrEntityLatLong = arg[i].C.split("|");
        if (arg[i].C.indexOf("-Y") != -1) {
            rt.NearbyEntities.options[i] = new Option(arg[i].D, arg[i].C.substring(0, arg[i].C.indexOf("-Y")));
            rt.NearbyEntities.options[i].selected = true;
        }
        else {

            rt.NearbyEntities.options[i] = new Option(arrEntityLatLong[0], arg[i].C);
        }
    }

    if ((arg.length > 0) && (rt.Landmark.selectedIndex > 0)) {
        toggleNearbyEntitiesDropDown(0);
    } else {
        rt.NearbyEntities.options[0] = new Option("No entities found", "");
        rt.NearbyEntities.options[0].selected = true;
        toggleNearbyEntitiesDropDown(1);
    }
    arg.length = 0;
}

function GetBrowserName() { var browser = navigator.appName; return browser; }
function GetBrowserVersion() { var b_version = navigator.appVersion; var version = parseFloat(b_version); return version; }

function OnCompleteExternalNearbyEntities(arg) {
    arg = arg.objSort("D", "C");
    hrr.NearbyEntities.length = 0;
    var browserName = GetBrowserName();
    if (browserName.indexOf("Microsoft") >= 0) { hrr.NearbyEntities.options[0] = new Option("Select location", ""); } else { hrr.NearbyEntities.options[0] = new Option("Location", ""); }
    hrr.NearbyEntities.options[0].selected = true;

    var lastOptGroup = "";
    var arrEntityLatLong;
    for (var i = 1; i < arg.length; i++) {
        arrEntityLatLong = arg[i].C.split("|");
        if (arg[i].C.indexOf("-Y") != -1) {
            hrr.NearbyEntities.options[i] = new Option(arg[i].D, arg[i].C.substring(0, arg[i].C.indexOf("-Y")));
            hrr.NearbyEntities.options[i].selected = true;
        }
        else {
            if (arg[i].D != lastOptGroup) {
                var optGroup = document.createElement("optgroup");
                optGroup.label = arg[i].D;
                hrr.NearbyEntities.appendChild(optGroup);
            }
            //hrr.NearbyEntities.options[i] = new Option(arg[i].D + " - " + arrEntityLatLong[0],arg[i].C);
            hrr.NearbyEntities.options[i] = new Option(arrEntityLatLong[0], arg[i].C);
        }
        lastOptGroup = arg[i].D;
    }

    if (arg.length <= 0) {
        hrr.NearbyEntities.options[0] = new Option("No entities found", "");
        hrr.NearbyEntities.options[0].selected = true;
    }
    if ((lspf != null) && (lspf != undefined)) { lspf.style.display = "none"; }
    arg.length = 0;
}

function OnError(arg, usrc) {
    rt.setWS = rt.setWS - 1;
    serviceWaitScreen();
    //alert("error has occured: " + arg._message);
}

function OnErrorLocation(arg) {
    if (rt.PiUpLocErrorMsg == 1) {
        rt.PiUpLocErrorMsg = 0;
        rt.DrOffLoc.disabled = true;
        rt.PiUpLoc.disabled = true;
        if ((rt.NearbyEntities != null) && (rt.Landmark != null)) {
            toggleLandmarkDropDown(1);
            toggleNearbyEntitiesDropDown(1);
        }
        alert(RestoolClientSideErrorMessage.RequiredPickUpLocation);
    }
}
var VenCode;
var PkgCode;
function GetVendorPackageCode() {
    if (rt.Ven.id == rt.Pkg.id) {
        var i = 0;

        if (rt.Ven.tagName == "SELECT") {
            for (i = 0; i < rt.Ven.getElementsByTagName("OPTION").length; i++) {
                var ddlVenPkg = rt.Ven.getElementsByTagName("Option")[i];
                if (ddlVenPkg.selected == true) {
                    VenCode = ddlVenPkg.value.substring(0, ddlVenPkg.value.indexOf('-'));
                    PkgCode = ddlVenPkg.value.substring(ddlVenPkg.value.indexOf('-') + 1);
                    return true;
                }
            }
        }
        else {
            for (i = 0; i < rt.Ven.getElementsByTagName("INPUT").length; i++) {
                var RbnVenPkg = $get(rt.Ven.id + '_' + i);
                if (RbnVenPkg.checked == true) {
                    VenCode = RbnVenPkg.value.substring(0, RbnVenPkg.value.indexOf('-'));
                    PkgCode = RbnVenPkg.value.substring(RbnVenPkg.value.indexOf('-') + 1);
                    return true;
                }
            }
        }
    }
    else {
        VenCode = rt.Ven.value;
        PkgCode = rt.Pkg.value;
    }
}

function HotelRefineRestool(hoLandmarkSearch) {
    this.NearbyEntities = hoLandmarkSearch;
}

function OnChange_NumberOfNights(sender) {
    var numberOfNights = sender.value.trim();
    if (numberOfNights != "") {
        if (IsValidNumberOfNights(numberOfNights)) {
            if (numberOfNights > 0) {
                var dt = parseVaxDate(rt.Dep.value);
                if (dt != null) {
                    rt.Length = parseInt(numberOfNights, 10);
                    dt.setDate(dt.getDate() + rt.Length);

                    rt.Ret.value = siteDateFormat(dt, rt.Ret.DateFormat);

                    if (rt.ChkOut != null) {
                        rt.ChkOut.value = siteDateFormat(dt, rt.ChkOut.DateFormat);
                    }
                    if (rt.DrOff != null) {
                        rt.DrOff.value = siteDateFormat(dt, rt.DrOff.DateFormat);
                    }

                    returnDateDayName(rt.Ret.value);

                    if (rt.Ret.Validators != null) {
                        if (rt.Ret.Validators.length > 0) {
                            var val = rt.Ret.Validators[0];
                            val.innerHTML = '';
                            val.evaluationfunction(val);
                        }
                    }
                }

            }
        }
    }
}

function validateNumberOfNights(sender, args) {
    var numberOfNights = args.Value.trim();
    if (numberOfNights != "") {
        if (IsValidNumberOfNights(numberOfNights) == false) {
            sender.errormessage = RestoolClientSideErrorMessage.VaildNumberOfNights;
            args.IsValid = false;
        }
        else if (numberOfNights <= 0) {
            sender.errormessage = RestoolClientSideErrorMessage.VaildNumberOfNights;
            args.IsValid = false;
        }
    }
    else {
        args.IsValid = true;
    }
}

function IsValidNumberOfNights(val) {//debugger;
    var re = new RegExp("^((0[1-9])|([1-9]0)|([1-9]?[1-9]))$");
    if (!re.test(val))
        return false;
    else
        return true;
}

/*If you modify this signature, please update both restool and external restool creation script*/
function ResTool(venId, pkgId, orgId, desId, depId, retId, chkInId, chkOutId, hoLandmarkId, hoNearbyEntities, piUpId, drOffId, piUpVehLoc, drOffVehLoc, lenId, hoBrndId, vehBrndId, roomId, depDayNameLabel, retDayNameLabel, farePreferenceId, cabinPreferenceId, numberOfNights, isFromExternalPost, isSmartSearchOffered, isShortDescription) {//debugger;
    this.Ven = venId;
    this.Pkg = pkgId;
    this.Org = orgId;
    this.Orgs = new Array();
    this.Des = desId;
    if (this.Des != null) { this.Des.onkeyup = NearbyEntitiesTextChange; }
    this.Dests = new Array();
    this.Dep = depId;
    this.Ret = retId;
    this.ChkIn = chkInId;
    this.ChkOut = chkOutId;
    this.HoBrnd = hoBrndId;
    this.Landmark = hoLandmarkId;
    this.NearbyEntities = hoNearbyEntities;
    this.HoBrnds = null;
    this.PiUp = piUpId;
    this.DrOff = drOffId;
    this.PiUpLoc = piUpVehLoc;
    this.DrOffLoc = drOffVehLoc;
    this.VehBrnd = vehBrndId;
    this.VehBrnds = null;
    if (numberOfNights == null) {
        this.Length = getDateDiffDays(this.Dep.value, this.Ret.value);
    }



    else {
        this.Length = null;
    }
    this.NumberOfNights = numberOfNights;
    this.IsFromExternalPost = isFromExternalPost;
    this.Room = roomId;

    this.departureDT = null;
    this.returnDT = null;
    this.chkinDT = null;
    this.chkOutDT = null;
    this.picupDT = null;
    this.drOffDT = null;

    this.OrgIndex = -1;
    this.DestIndex = -1;
    this.setWS = 0;

    this.departureDateDayNameLabel = depDayNameLabel;
    this.returnDateDayNameLabel = retDayNameLabel;

    this.PiUpLocErrorMsg = 0;
    this.isSmartSearchOffered = isSmartSearchOffered;
    this.isShortDescription = isShortDescription;
    this.FarePreference = farePreferenceId;
    if (this.FarePreference != null) { this.PrevFare = this.FarePreference.value; }
    this.CabinPreference = cabinPreferenceId;


    this.Dep.arrCtrlsToUpdate = new Array(this.ChkIn, this.PiUp);
    this.Ret.arrCtrlsToUpdate = new Array(this.ChkOut, this.DrOff);
    this.Dep.arrCtrlsToAddDayLength = new Array(this.Ret, this.ChkOut, this.DrOff);

}

ResTool.prototype.OrgsDescConcat = function populateLongDesc(bb) {
    for (var i = 0; i < bb.length; i++) {
        if (rt.isShortDescription == 1) {
            bb[i].LD = bb[i].D;
        }
        else {
            bb[i].LD = bb[i].D + " (" + bb[i].C + ")";
        }
    }
    return bb;
}

//Smart Search
ResTool.prototype.SmartConcat = function populateLongCity(od) {
    if (od != null) {
        var ss = new Array();
        for (var i = 0; i < od.length; i++) {
            ss[i] = od[i].C;
            airportcode[i] = od[i].D;

            for (var j = 0; j < od[i].D.length; j++) {
                if (od[i].D[j] != null) // not taking into account if airport item is null.
                {
                    if (rt.isShortDescription == 1) {
                        airportcode[i][j] = od[i].D[j].substring(0, od[i].D[j].indexOf(" ("))
                    }
                }
                else {
                    airportcode[i] = new Array()
                }
            }
        }

    }
    else {
        var ss = new Array();
        airportcode = new Array();
    }
    return ss;
}


function valCityIndex(val, c) {
    var val = val.toUpperCase();
    for (var i = 0; i < c.length; i++) {
        var city = c[i];
        if (((city.C == val) && (rt.isShortDescription != 1)) || (city.D.toUpperCase() == val) || (city.LD.toUpperCase() == val)) {
            return i;
        }
    }
    return -1;
}


function validateOrigin(sender, args) {
    var city = null;
    if ($get("div_table") != null)
        return;

    if (!(rt.Orgs.length == 0 && rt.IsFromExternalPost == 1)) {
        var orgctrl = $get(sender.controltovalidate);
        if (orgctrl.prevValue == null)
            orgctrl.prevValue = "";

        if (args.Value.trim() == "") {
            rt.OrgIndex = -1;
            //if(orgctrl.prevValue != args.Value.trim()){
            updateDestinations();
            orgctrl.prevValue = orgctrl.value;
            //}
            sender.errormessage = RestoolClientSideErrorMessage.RequiredOrigin;
            args.IsValid = false;
            initializeFarePreference();
            return;
        }

        if (orgctrl.prevValue != args.Value.trim()) {

            rt.OrgIndex = valCityIndex(args.Value.trim(), rt.Orgs);
            if (rt.OrgIndex >= 0) {
                orgctrl.value = rt.Orgs[rt.OrgIndex].LD //city.LD ;
                // orgDes = rt.Orgs[rt.OrgIndex];
                args.IsValid = true;
                sender.innerHTML = "";
                updateDestinations()
            }
            else {
                if (rt.isSmartSearchOffered != 1) {
                    sender.errormessage = RestoolClientSideErrorMessage.ValidDestination;
                    args.IsValid = false;
                }
            }

            orgctrl.prevValue = orgctrl.value;
        }
        if (rt.OrgIndex == -1 && rt.isSmartSearchOffered != 1) {
            sender.errormessage = RestoolClientSideErrorMessage.ValidOrigin;
            args.IsValid = false;
            initializeFarePreference();
        }
    }
    else {
        args.IsValid = true;
        sender.innerHTML = "";
    }
}

function validateDestination(sender, args) {
    var city = null;
    if ($get("div_table") != null)
        return;

    if (!(rt.Dests.length == 0 && rt.IsFromExternalPost == 1)) {
        var desctrl = $get(sender.controltovalidate);
        if (desctrl.prevValue == null)
            desctrl.prevValue = "";

        if (args.Value.trim() == "") {
            if ((rt.NearbyEntities != null) && (rt.Landmark != null)) {
                toggleLandmarkDropDown(1);
                toggleNearbyEntitiesDropDown(1);
            }
            rt.DestIndex = -1;
            //if(desctrl.prevValue != args.Value.trim()){
            updateOrigins();
            desctrl.prevValue = desctrl.value;
            //}
            sender.errormessage = RestoolClientSideErrorMessage.RequiredDestination;
            args.IsValid = false;
            initializeFarePreference();
            return;
        }

        if (desctrl.prevValue != args.Value.trim()) {
            rt.DestIndex = valCityIndex(args.Value.trim(), rt.Dests);
            if (rt.DestIndex >= 0) {
                desctrl.value = rt.Dests[rt.DestIndex].LD;
                args.IsValid = true;
                sender.innerHTML = "";
                updateOrigins();

                if ((rt.NearbyEntities != null) && (rt.Landmark != null) && (rt.NearbyEntities.disabled)) {
                    updateNearbyEntities();
                }
            }
            else {
                if ((rt.NearbyEntities != null) && (rt.Landmark != null)) {
                    toggleLandmarkDropDown(1);
                    toggleNearbyEntitiesDropDown(1);
                }
                if (rt.isSmartSearchOffered != 1) {
                    sender.errormessage = RestoolClientSideErrorMessage.ValidDestination;
                    args.IsValid = false;
                }
            }

            desctrl.prevValue = desctrl.value;
        }
        else if (rt.DestIndex == -1) {
            if ((rt.NearbyEntities != null) && (rt.Landmark != null)) {
                toggleLandmarkDropDown(1);
                toggleNearbyEntitiesDropDown(1);
            }
            if (rt.isSmartSearchOffered != 1) {
                sender.errormessage = RestoolClientSideErrorMessage.ValidDestination;
                initializeFarePreference();
                args.IsValid = false;
            }
        }
    }
    else {
        //desDes = rt.Dests[rt.DestIndex];
        args.IsValid = true;
        sender.innerHTML = "";
    }
}
// Function to display smartsearch list
function EnsureSmartSearch() {
    if (rt.isSmartSearchOffered == 1) {
        if (rt.Org != null)
            rt.Org.disabled = true;
        rt.Des.disabled = true;

        var city = null;
        if (rt.Orgs.length != 0) {
            city = valCity(rt.Org.value, rt.Orgs);
            if (city == null) {
                toggleSmartSearchWait();
                updateSmartSearchOrigins();
                return false;
            }
        }
        if (rt.Dests.length != 0) {
            city = valCity(rt.Des.value, rt.Dests);
            if (city == null) {
                toggleSmartSearchWait();
                updateSmartSearchDestinations();
                return false;
            }
        }
        return true;
    }
    else {
        return true;
    }
}



function toggleSmartSearchWait() {
    if ($get("smartSearchProgressField").style.display == "none") {
        $get("smartSearchProgressField").style.display = "block";
    }
    else {
        $get("smartSearchProgressField").style.display = "none";
    }
}

function promocode_checkkey(evt) {
    if (typeof evt.keyCode != 'undefined') {
        if (evt.type != 'keyup') return;
        var objevt = evt.target || evt.srcElement;
        var kc = evt.keyCode;
        if (kc != 37 && // Left Arrow
            kc != 39 && // Right Arrow
            kc != 8 && // Backspace
            kc != 46)  // Delete
        {
            objevt.value = objevt.value.toUpperCase();
        }
    }
}

var PostToSearchUsingResToolSubmitHandle;
function PostToSearchUsingResTool(actUrl, vend, pkg, promo, itin, hasOrg, enableautosubmit) {
    if (typeof (Page_ClientValidate) == "function") {
        if (Page_ClientValidate("") == true) {
            var f = document.createElement("form");
            f.setAttribute("method", "POST");
            f.setAttribute("action", actUrl);
            f.appendChild(BuildHiddenField("gsVendor", vend));
            f.appendChild(BuildHiddenField("gsPackage", pkg));
            f.appendChild(BuildHiddenField("gsPromotionCode", $get(promo).value));
            if (hasOrg) { f.appendChild(BuildHiddenField("gsOrigin", rt.Org.value)); }
            f.appendChild(BuildHiddenField("gsDestination", rt.Des.value));
            f.appendChild(BuildHiddenField("gsDepartureDate", rt.Dep.value));
            f.appendChild(BuildHiddenField("gsReturnDate", rt.Ret.value));
            f.appendChild(BuildHiddenField("coPickUpDate", rt.PiUp.value));
            f.appendChild(BuildHiddenField("coDropOffDate", rt.DrOff.value));
            f.appendChild(BuildHiddenField("hocheckindate", rt.ChkIn.value));
            f.appendChild(BuildHiddenField("hocheckoutdate", rt.ChkOut.value));
            f.appendChild(BuildHiddenField("gsdateformat", GlobalFormat.SiteDateFormat));
            f.appendChild(BuildHiddenField("itin", itin));
            f.appendChild(BuildHiddenField("enableautosubmit", enableautosubmit));
            document.getElementsByTagName("BODY")[0].appendChild(f);
            document.forms[document.forms.length - 1].submit();
        }
    }
}

function BuildHiddenField(nam, val) {
    var i = document.createElement("input");
    i.setAttribute("type", "hidden");
    i.setAttribute("name", nam);
    i.setAttribute("value", val);
    return i;
}

function PopulateModalResTool(destinationCode, vendorCode, packageCode) {
    rt.Des.value = destinationCode;
    rt.Ven.value = vendorCode;
    rt.Pkg.value = packageCode;
    showModal('modalRestool', 'modalPopup', 1, -1, -1, '', '', '');
}

function pkgLongDiscriptionToolTip(descriptionLong) {
    var divPkgLongDesc = $get("pkgLongDiscription");
    if (divPkgLongDesc != null) {
        divPkgLongDesc.innerHTML = descriptionLong;
    }
}
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();