﻿function InitTabContainer(id, data) {

    tabInfo = eval("(" + data + ")");

    if (typeof (tabInfo) == 'object') {

        // firefox count childnode with node containner
        var tabs;
        var shiftIndex = 0;

        if (typeof (navigator.product) != 'undefined') {
            shiftIndex++;
        } 

        tabs = $get(id).childNodes[shiftIndex];

        for (var i = 0; i < tabInfo.tabValues.length; i++) {
            if (tabInfo.tabValues[i].visible)
                tabs.childNodes[i + shiftIndex].className = tabInfo.css;
            else
                tabs.childNodes[i + shiftIndex].className = "nungTable";
        }
    }
}


function SetTabValue(sender, args) {

    var x = sender.get_id();
    var y = sender.get_activeTabIndex();
    StoreControlValue(x, y); 

    refreshMap();
}




/********************************************************************************************  
    
METHODS/VARIABLES TO STORE AND LOAD CONTROL VALUES FOR ASYNC DATA EXCHANGE 

/********************************************************************************************/
var controlValueList;
var marker_airport=new Array("a","b","c","d","e","f","g","h","i","g");
var index_airport=0;
var Tatol_airport=new Array();
var MCheck=0;
var City_Center_LaT;
var City_Center_LoN;
var Hotel_Select_LaT="";
var Hotel_Select_LoN="";
var ChecKAddAirport= true;
var Data_Airports;
var Air_Id_SelecT,Air_Name_SelecT;
var AiRSelect="";
var Data_AirportsTotal=new Array();
var Data_AirportsName=new Array();
var Air_Id_SelecTS= new Array();
var marker;
var getZoom = 12;


var airportPopUpID;
var mpeLoader;
var mpeLoaderID;

var mapItem;
var popUpAirportDeparture = false;

function MapItem(itemId, itemDescription, itemLatitude, itemLongitude, itemSelected)
{ 
    this.id = itemId;
    this.description = itemDescription;
    this.latitude = itemLatitude;
    this.longitude = itemLongitude;
    this.selected = itemSelected;
}

function ControlValue(id, value, typeName, visible, enabled, mandatory, promptFieldId, validationGroup, cssClass, parentId, evtChangeHandler)
{ 
    this.controlId = id;
    this.controlParentId = parentId;
    this.controlValue = value;
    this.controlTypeName = typeName;
    this.controlVisible = visible; 
    this.controlEnabled = enabled;
    this.controlMandatory = mandatory;
    this.controlPromptFieldId = promptFieldId;
    this.controlValidationGroup = validationGroup;
    this.controlCssClass = cssClass;
    this.controlHasChanged = false;
    this.controlChangeHandler = evtChangeHandler;
}


function RemoveCDATATags(s) 
{
    try {
        s = s.replace("<![CDATA[", '');
        s = s.replace("]]>", '');
     }
     catch (error) {}
     return s;
}

function InitClientManagedControls(values)
{
   var controlList = eval("(" + values + ")"); 
        
    if (!controlValueList)
        controlValueList = new Array();

    for (var i = 0; i < controlList.managedControls.length; i++) {

        var position = FindControlPosition(controlList.managedControls[i].Id);

        controlList.managedControls[i].Va = RemoveCDATATags(controlList.managedControls[i].Va);
        

        if (position != -1) {
            controlValueList[position].controlValue = controlList.managedControls[i].Va;
            controlValueList[position].controlTypeName = controlList.managedControls[i].Ty;
            controlValueList[position].controlVisible = controlList.managedControls[i].Vi;
            controlValueList[position].controlEnabled = controlList.managedControls[i].En;
            controlValueList[position].controlMandatory = controlList.managedControls[i].Md;
            controlValueList[position].controlPromptFieldId = controlList.managedControls[i].Pf;
            controlValueList[position].controlValidationGroup = controlList.managedControls[i].Vg;
            controlValueList[position].controlCssClass = controlList.managedControls[i].Cc;
            controlValueList[position].controlHasChanged = false;
            if (controlList.managedControls[i].Ty != "tpg")
                UpdateControlValue(controlList.managedControls, i, position);
        }
        else {
            controlValueList.push(new ControlValue(controlList.managedControls[i].Id,
                                                   controlList.managedControls[i].Va,
                                                   controlList.managedControls[i].Ty,
                                                   controlList.managedControls[i].Vi,
                                                   controlList.managedControls[i].En,
                                                   controlList.managedControls[i].Md,
                                                   controlList.managedControls[i].Pf,
                                                   controlList.managedControls[i].Vg,
                                                   controlList.managedControls[i].Cc,
                                                   controlList.managedControls[i].Pi,
                                                   controlList.managedControls[i].Eh));
            if (controlList.managedControls[i].Ty != "tpg")

                UpdateControlValue(controlList.managedControls, i, controlValueList.length - 1);
        }

        SetMandatoryPromptField(controlList.managedControls[i]);
    }


}

function SetMandatoryPromptField(mc) {

    try {
        if (mc.Pf.length > 0) {
            var lbl = $get(mc.Pf);
            if (mc.Md) {
                if (lbl.innerHTML.lastIndexOf('*') != lbl.innerHTML.length - 1)
                    lbl.innerHTML += '*';
            }
            else {
                if (lbl.innerHTML.lastIndexOf('*') != -1)
                    lbl.innerHTML = lbl.innerHtml.replace('*', '');
            }
        }
    }
    catch (error) { }
}

function FindControlPosition(id)
{
    var position = -1;
    for (var i = 0; controlValueList != null && i < controlValueList.length && position == -1; i++)
    {
        if (controlValueList[i].controlId == id)
            position = i;
    }
    return position;
}

function StoreControlValue(id, value)
{
    var position = FindControlPosition(id);
    if (position != -1) {
        controlValueList[position].controlValue = value;
        controlValueList[position].hasChanged  = true;
    }
    

}

function GetControlValue(id)
{
    var position = FindControlPosition(id);
    if (position != -1)
       return controlValueList[position].controlValue;
    else return "";
}

function ControlValues2JSONString(ctrl)
{
    var s = "{";
    if (ctrl)
        s = s + "pbControl:" + ctrl.id + ",";
    s = s + "controlValues:[";
    var count = 0;
    for (var i = 0; i < controlValueList.length; i++)
    {
        if (controlValueList[i].hasChanged)
        {
            if (count > 0) 
                s = s + ",";
            s = s + '{"Id":"' + controlValueList[i].controlId + '" ';
            s = s + ',"Va":"' + controlValueList[i].controlValue + '" ';
            s = s + ',"Vi":"' + controlValueList[i].controlVisible + '" ';
            s = s + ',"En":"' + controlValueList[i].controlEnabled + '"}';
            count++;

            controlValueList[i].hasChanged = false;
        }
    }
    s = s + "]}";
    return s;
}

function GetHelperFieldValue(pobjID)
{
    var result = GetControlValue(pobjID);
}

/*********************************************************************************************

FUNCTIONS TO HANDLE DATE CONTROLS DATA CHANGE

**********************************************************************************************/
function FormatDate(dt) {
    var result = "";
    if (dt)
    {
        if (dt.getDate() < 10)
            result += "0";
        result += dt.getDate().toString() + "-";
        if (dt.getMonth() < 9)
            result += "0";
        result += (dt.getMonth() + 1).toString() + "-";
        result += dt.getFullYear().toString();
    }
    return result;
}    

function ParseDate(s){
    if (s)
    {
        var parts = s.split("-");
        if (parts.length == 3)
            return new Date(parseInt(parts[2], 10),parseInt(parts[1], 10)-1,parseInt(parts[0], 10));
        else return null;
    }
    else return null;
}


function HandleDateChangeMinMax(txtDate, ceID, absMin, absMax, ctrlIDMin, ceIDMin, ctrlIDMax, ceIDMax, canBeEqual)
{
    var dtCurrent = ParseDate(txtDate.value);
    if (dtCurrent)
    {
        var ceMin = $find(ceIDMin);
        var ceMax = $find(ceIDMax);
    
        var dtAbsMin = ParseDate(absMin);
        var dtAbsMax = ParseDate(absMax);
        var dtCtrlMin = null;
        if  (ctrlIDMin && ctrlIDMin.length > 0)
            dtCtrlMin = ParseDate($get(ctrlIDMin).value);
        var dtCtrlMax = null;
        if  (ctrlIDMax && ctrlIDMax.length > 0)
            dtCtrlMax = ParseDate($get(ctrlIDMax).value);

        if (dtAbsMin && dtCurrent < dtAbsMin)
            dtCurrent = dtAbsMin;
            
        if (dtAbsMax && dtCurrent > dtAbsMax)
            dtCurrent = dtAbsMax;

        if (dtCtrlMin && dtCurrent <= dtCtrlMin)
        {
            var ctrlMin = $get(ctrlIDMin);
            var tmpDate = new Date(dtCurrent.getFullYear(), dtCurrent.getMonth(), dtCurrent.getDate());

            if (canBeEqual)
                tmpDate.setDate(tmpDate.getDate());
            else tmpDate.setDate(tmpDate.getDate() - 1);
            ctrlMin.value = FormatDate(tmpDate);
            ceMin.set_selectedDate(tmpDate);
            StoreControlValue(ctrlIDMin, ctrlMin.value);  
        }
        
        if (dtCtrlMax && dtCurrent >= dtCtrlMax)
        {
            var ctrlMax = $get(ctrlIDMax);
            var tmpDate = new Date(dtCurrent.getFullYear(), dtCurrent.getMonth(), dtCurrent.getDate());
            if (canBeEqual)
                tmpDate.setDate(tmpDate.getDate());
            else tmpDate.setDate(tmpDate.getDate() + 1);
            ctrlMax.value = FormatDate(tmpDate);
            ceMax.set_selectedDate(tmpDate);
            StoreControlValue(ctrlIDMax, ctrlMax.value);  

        }
    }
    
    txtDate.value = FormatDate(dtCurrent);
    $find(ceID).set_selectedDate(dtCurrent);
    StoreControlValue(txtDate.id, txtDate.value);  
        
    return true;
}

/**************************************************************************************/

function ToggleVisibility(chb, pnlID, showOn) {

    var pnl = $get(pnlID);
    
    StoreControlValue(chb.id, chb.value);
    if ((chb.checked && showOn == 'TRUE') || (!chb.checked && showOn == 'FALSE')) {
        pnl.style.display = 'none';
    }
    else {
        pnl.style.display = "";
        pnl.className = "";
    }
}   

function ValuePairSelected(source, eventArgs)
{
    StoreControlValue(source.get_id(), eventArgs.get_value());  
}

function CustomerSelected(source, eventArgs) {
    StoreControlValue(source.get_id(), eventArgs.get_value());
    return AsyncServerMessage("msgLoadPerson", eventArgs.get_value(), ShowResponseDetails, false);
}


function LocationSelected(source, eventArgs)
{
    StoreControlValue(source.get_id(), eventArgs.get_value());
    var data = source.get_id() + '|' + eventArgs.get_value();
    AsyncServerMessage('LocationSelected', data, ShowResponseDetails, false);
    return false;
}

function HotelSelected(source, eventArgs)
{
    StoreControlValue(source.get_id(), eventArgs.get_value());  
}

function HandleChbBookerIsGuestClicked(chb)
{
    if (chb.checked)
        StoreControlValue(chb.id, "TRUE");
    else StoreControlValue(chb.id, "FALSE");
    SendCommandMsg(chb, 'msgChangeBookerIsGuest', false);
}


function HandleFilterContext(cbx, acClientID, txtClientID)
{
    var ac = $find(acClientID);
    ac.set_contextKey(cbx.value);
    
    var txt = $get(txtClientID);
    txt.innerText = "";

    StoreControlValue(cbx.id, cbx.value);  
    StoreControlValue(txt.id, txt.innerText);  
}


function StoreCbxValue(cbxID)
{
    StoreControlValue(cbxID, $get(cbxID).value);
}

function FillCascadedControls(result) {

    var options = eval("(" + result + ")");
    
    for (i = 0; i < options.dataTable.length; i++)
    {
        cbx = $get(options.dataTable[i].controlId);
        cbx.options.length=0;

        if (options.dataTable[i].rows.row.length > 0)
        {
            for (j = 0; j < options.dataTable[i].rows.row.length; j++) 
            {
                var option = new Option(options.dataTable[i].rows.row[j].val, options.dataTable[i].rows.row[j].id);
                cbx.options[cbx.options.length] = option;
            }
        }
        StoreControlValue(options.dataTable[i].controlId, cbx.value);
        cbx.disabled = false;    
    }
    return ;
}

function CascadedChangeHandler(triggerId, functionId, jsControls)
{
    var cbx = $get(triggerId);

    if (cbx.value != GetControlValue(triggerId))
    {
        StoreControlValue(triggerId, cbx.value);

        var controlInfo = eval("(" + jsControls + ")");

        var cascKeys = new Array();
        var cascControlIds = new Array();
    
        for (i = 0; i < controlInfo.cascControls.length; i++)
        {
            $get(controlInfo.cascControls[i].controlID).disabled = true;
            cascKeys.push(controlInfo.cascControls[i].id);
            cascControlIds.push(controlInfo.cascControls[i].controlID);
        }

        var valKeys = new Array();
        var values = new Array();
    
        for (i = 0; i < controlInfo.valControls.length; i++)
        {
            valKeys.push(controlInfo.valControls[i].id);
            $get(controlInfo.valControls[i].controlID).value;
            values.push($get(controlInfo.valControls[i].controlID).value);
        }

        TableLoadServices.HandleCascadedControls(functionId , valKeys, values, cascKeys, 
                                                    cascControlIds, FillCascadedControls);
    }
}



function HandleRentalCarLocationChange(cbx, msgId) {
    mpeLoader = $find('mpeLoadingBehaviorID1');
    if (mpeLoader)
        mpeLoader.show();

    StoreControlValue(cbx.id, cbx.value);
    return AsyncServerMessage(msgId, ControlValues2JSONString(), ShowResponseDetails, false);
}


function HandleFilterTableRequest(ctlId, tableId) {

    var ctl = $get(ctlId);
    StoreControlValue(ctl.id, ctl.checked);
    var index = GetRowIndex(ctl);
    return AsyncServerMessage("msgFilterList" + tableId, index.toString() + '|' + ctl.checked, ShowResponseDetails, false);
}

function HandleFilterTableTdRequest(ctlId, tableId) {

    var ctl = $get(ctlId);
    StoreControlValue(ctl.id, ctl.checked);
    var index = GetColumnIndex(ctl);
    return AsyncServerMessage("msgFilterList" + tableId, index.toString() + '|' + ctl.checked, ShowResponseDetails, false);
}
/************************************************************

FOR MANAGE FUNCTIONS
to
************************************************************/



/************************************************************/

var request;
var requestReady = false;



function GetNewRequest()
{
    if (window.ActiveXObject)
        request = new ActiveXObject('Msxml2.XMLHTTP');
    else request = new XMLHttpRequest();
}


/**************  Raising and capturing results from async server events  **************************/

/****************************************************************
Approved async request methods
*****************************************************************/
function ValidateMandatoryFields(msg) {
    var ok = true;
    for (var i = 0; i < controlValueList.length; i++)
    {
        var mustValidate = false;   
        if (controlValueList[i].controlMandatory)
        {
            if (controlValueList[i].controlValidationGroup.length == 0)
                mustValidate = true;
            else
            {
                msgList = controlValueList[i].controlValidationGroup.split('|');
                for (var j = 0; j < msgList.length; j++)
                {
                    if (msgList[j] == msg)
                    {
                        mustValidate = true;
                    }
                }
            }
        }       
        if (mustValidate) {
           if (controlValueList[i].controlValue.length == 0)
            {
                ok = false;
            }
        }
    }

    if (!ok)
        alert('mandatory field error');
    return ok;
}


function AsyncServerMessage(id, data, myCallBackFunction, doPostback)
{
    if (request == null)
        GetNewRequest();
    request.open("POST", document.location.href, true);
    request.onreadystatechange = myCallBackFunction;
    request.setRequestHeader('asyncServerMessage', 'true');
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    var body = id.toString() + '|' + data.toString();
    request.send(body);
    return doPostback;
}

function SendCommandMsg(ctrl, msg, asyncCallback) {
    if (ValidateMandatoryFields(msg)) {
        mpeLoader = $find('mpeLoadingBehaviorID1');

        if (mpeLoader)
            mpeLoader.show();
        if (asyncCallback)
            return AsyncServerMessage(msg, ControlValues2JSONString(ctrl), ShowResponseDetails, false);
        return AsyncServerMessage(msg, ControlValues2JSONString(), ShowResponseDetails, false);
    }
    else return false;
}



function SendCommandMsgTable(ctrl, msg, asyncCallback)
{
    mpeLoader = $find('mpeLoadingBehaviorID1');

    if (mpeLoader)
        mpeLoader.show();
        
    var table = GetParentTable(ctrl);
    var selectedIndex = GetBodyRowIndex(table, ctrl);
    if (table != null && selectedIndex != null)
    {
        SetRowStyles(table.id, selectedIndex);
        StoreControlValue(table.id, selectedIndex);
        
        if (asyncCallback)
            return AsyncServerMessage(msg, ControlValues2JSONString(ctrl), ShowResponseDetails, false);
        else 
            return AsyncServerMessage(msg, ControlValues2JSONString(), ShowResponseDetails, false);
    }
    else return false;
}

function HideMPELoader()
{
    mpeLoader = $find('mpeLoadingBehaviorID1');
    if (mpeLoader)
        mpeLoader.hide();
}

/**********  Async Response Handling Methods *******************************************************/

function DefaultServerEventResponse()
{
    if (request.readyState == 4 && request.status == 200)
    {
    }
}


function CallPostBack(eventTarget, eventArgument)
{

}

function ShowResponseDetails() 
{
    if (request.readyState == 4 && request.status == 200)
    {
        try
        {
            var exception = false;

            var result = eval("(" + request.responseText + ")");
           
            var x = result.pbControl;
            var y = result.error;
            
            if (!result.error && result.pbControl)
            {              
                CallPostBack(result.pbControl, ControlValues2JSONString());          
            }
            else 
            {
                try {
                    UpdateControlValues(result.managedControls);  
                }
                catch (errorShow)
                {
                }
                try {

                    if (mpeLoader)
                        mpeLoader.hide();

                    ShowStatusMessages(result.statusMessages) 
                }
                catch (errorShow)
                {
                }
            }     
        }
        catch (error) {
            exception = true;
        }

        // check if result is not object and mpeLoader is show
        // to hide mpeLoader
        if (typeof (result) == 'object') {
            if (mpeLoader && !result.pbControl) {
                mpeLoader.hide();
            }
        }
        if (exception && mpeLoader) {
                mpeLoader.hide();
        }
    }    
}

function UpdateControlValues(managedControls) {

    for (var i = 0; i < managedControls.length; i++) {
        var position = FindControlPosition(managedControls[i].Id);
        managedControls[i].Va = RemoveCDATATags(managedControls[i].Va);
        
        try {
            if (position != -1) {
                controlValueList[position].controlValue = managedControls[i].Va;
                controlValueList[position].controlTypeName = managedControls[i].Ty;
                controlValueList[position].controlVisible = managedControls[i].Vi;
                controlValueList[position].controlEnabled = managedControls[i].En;
                controlValueList[position].controlMandatory = managedControls[i].Md;
                controlValueList[position].controlPromptFieldId = managedControls[i].Pf;
                controlValueList[position].controlValidationGroup = managedControls[i].Vg;
                controlValueList[position].controlCssClass = managedControls[i].Cc;
                controlValueList[position].controlHasChanged = false;                
            }
            else {
                controlValueList.push(new ControlValue(managedControls[i].Id,
                                                   managedControls[i].Va,
                                                   managedControls[i].Ty,
                                                   managedControls[i].Vi,
                                                   managedControls[i].En,
                                                   managedControls[i].Md,
                                                   managedControls[i].Pf,
                                                   managedControls[i].Vg,
                                                   managedControls[i].Cc,
                                                   managedControls[i].Pi));
                position = controlValueList.length - 1;
            }
            UpdateControlValue(managedControls, i, position);
        }
        catch (error)
        { }
    }
}

function UpdateControlValue(managedControls, sourcePostion, targetPosition)
{
    switch (controlValueList[targetPosition].controlTypeName) {
        case "lbl":
            UpdateLabel(managedControls[sourcePostion]);
            break;
        case "cbx":
            UpdateCombobox(managedControls[sourcePostion]);
            break;
        case "txt":
            UpdateText(managedControls[sourcePostion]);
            break;
        case "lbt":
            UpdateLinkButton(managedControls[sourcePostion]);
            break;
        case "img":
            UpdateImage(managedControls[sourcePostion]);
            break;
        case "himg":
            UpdateHtmlImage(managedControls[sourcePostion]);
            break;
        case "rbt":
            UpdateRadioButton(managedControls[sourcePostion]);
            break;
        case "ibt":
            UpdateImageButton(managedControls[sourcePostion]);
            break;
        case "chb":
            UpdateCheckBox(managedControls[sourcePostion]);
            break;
        case "tbc":
            UpdateTabControl(managedControls[sourcePostion]);
            break;
        case "pnl":
            UpdatePanel(managedControls[sourcePostion]);
            break;
        case "btn":
            UpdateButton(managedControls[sourcePostion]);
            break;
        case "tpg":
            UpdateTablePager(managedControls[sourcePostion]);
            break;
        case "ace":
            UpdateAutoCompleteExtender(managedControls[sourcePostion]);
            break;
        case "cpe":
            UpdateCollapsiblePanelExtender(managedControls[sourcePostion]);
            break;
        case "wud":
            UpdateWUDateControl(managedControls[sourcePostion]);
            break;
        case "wut":
            UpdateWUTimeControl(managedControls[sourcePostion]);
            break;
        case "map":
            UpdateMapControl(managedControls[sourcePostion]);
            break;
        case "edt":
            UpdateEditorControl(managedControls[sourcePostion]);
            break;
    }
}

function FindManagedControl(id) {
    var ctl = $get(id);
    if (!ctl)
        ctl = $find(id);
    return ctl;   
}

function UpdateLabel(controlInfo) {
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) 
    {
        ctl.innerHTML = controlInfo.Va;
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateCombobox(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        if (!ctl.onchange)
            ctl.onchange = function () { MainTrack_OnCbxChange(ctl) };

        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
        if (controlInfo.Jd)
            UpdateCbxData(ctl, controlInfo.Jd);

        ctl.value = controlInfo.Va; 
    }
}

function UpdateText(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.value = controlInfo.Va;
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");

        if (!ctl.onchange)
            ctl.onchange = function () { MainTrack_OnTxtChange(ctl) };

        if (!ctl.onblur)
            ctl.onblur = function () { MainTrack_OnTxtChange(ctl) };

        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateLinkButton(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.innerHTML = controlInfo.Va;
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateImage(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.src = controlInfo.Va;
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateHtmlImage(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.src = controlInfo.Va;
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateRadioButton(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {

        if (!ctl.onclick)
            ctl.onclick = function () { MainTrack_Toolbar_OnRbtClick(ctl) };

        ctl.checked = controlInfo.Va.toString().toUpperCase() == "TRUE";
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateImageButton(controlInfo) {
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function AddListFilterHandler(ctl)
{
    var tableId = GetTableId(ctl);

    return function () { HandleFilterTableRequest(ctl.id, tableId) };
}

function UpdateCheckBox(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {

        if (!ctl.onclick)
        {
            if (controlInfo.Eh == 'filter')
                ctl.onclick = AddListFilterHandler(ctl);
            else 
                ctl.onclick = function () { MainTrack_OnChbClick(ctl) };
        }
        ctl.checked = controlInfo.Va.toString().toUpperCase() == "TRUE" || controlInfo.Va.toString().toUpperCase() == "Y";
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateTabControl(controlInfo)
{
    var ctl = $find(controlInfo.Id);
    if (ctl) {
        if (!ctl.onclick)
            ctl.onclick = function () { MainTrack_OnTabClick(ctl) };

        ctl.set_activeTabIndex(parseInt(controlInfo.Va, 10));
        if (controlInfo.Jd)
            ShowTabControl(ctl, controlInfo.Jd);
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdatePanel(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateButton(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
    }
}

function UpdateTablePager(controlInfo) {
    var ctl = $get(controlInfo.Id);
    if (ctl) {
        if (controlInfo.Jd)
        {
            ShowTable(controlInfo.Jd);
            if (controlInfo.Jd.isDummy.toString().toUpperCase() != "TRUE")
                ctl.className = controlInfo.Cc;
            else ctl.className = 'nungTable';
        }
        else ctl.className = 'nungTable';
    }
}

function UpdateCollapsiblePanelExtender(controlInfo)
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.set_Collapsed(controlInfo.Va.toString().toUpperCase() == "TRUE");
    }
}

function UpdateAutoCompleteExtender(controlInfo) {
    var ctl = FindManagedControl(controlInfo.Id);
}

function UpdateMapControl(controlInfo) 
{
    var ctl = FindManagedControl(controlInfo.Id);
    if (ctl) {
        ctl.disabled = !(controlInfo.En.toString().toUpperCase() == "TRUE");
        if (controlInfo.Vi.toString().toUpperCase() == "TRUE")
            ctl.className = controlInfo.Cc;
        else ctl.className = 'nungTable';
        if (controlInfo.Jd)
            SetMarkersOnMap(ctl, controlInfo.Jd);
    }
}

function UpdateEditorControl(controlInfo) {
    if ($get(controlInfo.Id).control == undefined) {
        $get(controlInfo.Id).onactivate = function () {
            var editor = $get(controlInfo.Id).control;
            if (editor == undefined) return;
            var editPanel = editor.get_editPanel();
            var designPanel = editPanel.get_modePanels()[0];
            var htmlPanel = editPanel.get_modePanels()[1];

            var onContentChanged = function () {
                var value = editor.get_content();
                var escaped = value;
                var findReplace = [[/&/g, "&amp;"], [/</g, "&lt;"], [/>/g, "&gt;"], [/"/g, "&quot;"], [/\\n/g, ""]];
                for (i = 0; i < findReplace.length; i++)
                    escaped = escaped.replace(findReplace[i][0], findReplace[i][1]);

                MainTrack_OnTxtChange({ id: controlInfo.Id, value: escaped });
            }

            designPanel.onContentChanged = onContentChanged;
            htmlPanel.onContentChanged = onContentChanged;

            $get(controlInfo.Id).onactivate = null; // unbind event
        }
    } else {
        var editor = $get(controlInfo.Id).control;
        var value = controlInfo.Va;
        if (value != "") {
            var unescaped = value;
            var findReplace = [[/&amp;/g, "&"], [/&lt;/g, "<"], [/&gt;/g, ">"], [/&quot;/g, "\""], [/\[_/g, "<"], [/_\]/g, ">"], [/\\n/g, ""]];
            for (i = 0; i < findReplace.length; i++)
                unescaped = unescaped.replace(findReplace[i][0], findReplace[i][1]);
            editor.set_content(unescaped);
        } else {
            editor.set_content("");
        }
    }
}

function UpdateWUTimeControl(controlInfo) {
}

function UpdateWUDateControl(controlInfo) {
}

function ShowTabControl(tabControl, tabInfo) {
    var tabs = tabControl.get_tabs();

    for (var i = 0; i < tabInfo.tabValues.length; i++) {
        if (tabInfo.tabValues[i].visible) {
            if (tabs[i]._active)
                tabs[i]._tab.className = "ajax__tab_active ajax__tab_outer";
            else
                tabs[i]._tab.className = tabInfo.css;
        }
        else tabs[i]._tab.className = "nungTable";
    }
}

function ShowStatusMessages(statusMessages) 
{
    for (var i = 0; i < statusMessages.length; i++)
    {
        alert(statusMessages[i].msgText);
    }
}

function UpdateCbxData(cbx, data)
{
    if (cbx == null){
        return ;
    }

    cbx.options.length=0;

    if (data.length > 0){
        for (i = 0; i < data.length; i++) {
            var option = new Option(data[i].value, data[i].id);
            cbx.options[cbx.options.length] = option;
        }
    }
}

function UpdateOptionList(cbx, data)
{
    if (cbx == null){
        return ;
    }

    cbx.options.length=0;

    if (data.length > 0){
        for (i = 0; i < data.length; i++) {
            var option = new Option(data[i].value, data[i].id);
            cbx.options[cbx.options.length] = option;
        }
    }
    cbx.disabled = false;
}

function OnLoadError(error)
{
    alert(error.get_message());
}

/****************************************************************************
    Approved table methods
****************************************************************************/

function FindControl(ctrl, key) //finds a control in a table
{
   var result;

   if (ctrl.id && ctrl.id.length >= key.length && key == ctrl.id.substr(ctrl.id.length - key.length))
        result = ctrl;

   for (var i = 0; i < ctrl.childNodes.length && !result; i++)
        result = FindControl(ctrl.childNodes[i], key)        
   return result;
}

function FirstDataRow(table)
{
    if (table.tHead != null)
        return 1;
    else return 0;
}

function LastDataRow(table)
{
    if (table.tFoot != null)
        return table.rows.length - 1;
    else return table.rows.length;
}

function GetParentTable(ctrl)
{
    var parent = ctrl.parentNode;
    while (parent.tagName != 'TABLE')
        parent = parent.parentNode;
    return parent;    
}

function HandleListRbtCheck(triggerRbt, btnId, message)
{   
    var table = GetParentTable(triggerRbt);
    
    var startIndex = FirstDataRow(table);
    var endIndex = LastDataRow(table);
    var itemIndex = GetRowIndex(triggerRbt);    
    
    for (var i = startIndex; i < endIndex; i++)
    {
        var rbt = FindControl(table.rows[i], btnId);
        if (rbt != null)
        {
           rbt.checked = (i == itemIndex);
           StoreControlValue(rbt.id, rbt.checked.toString());
        }
    }
    
    AsyncServerMessage(message, itemIndex.toString(), DefaultServerEventResponse, false);    
    return true;
}

function HandleListChbCheck(triggerChb, chbID, message) {
    var table = GetParentTable(triggerChb);

    var startIndex = FirstDataRow(table);
    var endIndex = LastDataRow(table);
    var itemIndex = GetRowIndex(triggerChb);

    var msgData = itemIndex.toString();

    var chb = FindControl(table.rows[itemIndex], chbID);
    if (chb != null) 
    {
        msgData = msgData + '|' + chb.checked.toString();
        StoreControlValue(chb.id, chb.checked.toString());
    }

    AsyncServerMessage(message, msgData, ShowResponseDetails2, false);
    return true;
}

function GetTableId(ctrl) {
    try {
        var parent = ctrl.parentNode;
        while (parent.tagName != 'TABLE')
            parent = parent.parentNode;
        return parent.id;
    }
    catch (err) {
        return "";
    }
}

function GetRowIndex(ctrl)
{
    try {
    var parent = ctrl.parentNode;
    while (parent.tagName != 'TR')
        parent = parent.parentNode;
    return parent.rowIndex;    
    }
    catch (err) 
    {
    return 0;
    }    
}

function GetColumnIndex(ctrl)
{
    var parent = ctrl.parentNode;
    while (parent.tagName != 'TD')
        parent = parent.parentNode;
    return parent.cellIndex;    
}

function GetBodyRowIndex(table, ctrl)
{
    var index = GetRowIndex(ctrl);
    if (table.tHead != null)
        return index - 1;    
    else return index;    
}

function SetFooterData(id, currentPage, numberOfPages, numberOfItems)
{
    var table = $get(id);
    if (table != null && table.tFoot != null && table.tFoot.rows.length > 0)
    {
        cbx = FindControl(table.tFoot, 'cbxPager');
        cbx.options.length = 0; // clear drop down option
        while (cbx.options.length < numberOfPages)
        {
            var pageNumber = cbx.options.length + 1;
            var option = new Option(pageNumber.toString(), pageNumber.toString());
            cbx.options[cbx.options.length] = option;
        }
        var index = currentPage + 1;
        cbx.value = index.toString();
        cbx.disabled = (numberOfPages <= 1);
        lblCurrentPage = FindControl(table.tFoot, 'lblCurrentPage');
        lblCurrentPage.innerHTML = index.toString();
        lblNumberOfPages = FindControl(table.tFoot, 'lblPages');
        lblNumberOfPages.innerHTML = numberOfPages.toString();
        lblNumberOfItems = FindControl(table.tFoot, 'lblItems');
        lblNumberOfItems.innerHTML = numberOfItems.toString();
        
        FindControl(table.tFoot, 'btnNext').disabled = (index == numberOfPages);
        FindControl(table.tFoot, 'btnEnd').disabled = (index == numberOfPages);
        FindControl(table.tFoot, 'btnPrev').disabled = (index == 1);
        FindControl(table.tFoot, 'btnStart').disabled = (index == 1);
    }
}

function InitPagedTable(id, pagerId, selectedIndex, currentPage, numberOfPages, numberOfItems, isDummy)
{
    var table = $get(id);

    if (table == null)
        return;

    if (isDummy)
        table.className = 'nungTable';

    SetRowStyles(id, selectedIndex);

    try {
        var hfPager = FindControl($get(id).tFoot, 'hfPagerId');

        if (typeof(hfPager) != 'undefined')
            hfPager.value = pagerId;

        SetFooterData(id, currentPage, numberOfPages, numberOfItems);
    }
    catch (err)
    { }

    //window.onbeforeunload = UnLoadWindow;
}

function UnLoadWindow() {
    alert("hallo unload");    
}


function SetTableStyle(tableId, tableClass, isDummy)
{
    var table = $get(tableId);
    if (isDummy)
        table.className = 'nungTable';
    else table.className = tableClass;
}

function InitTable(id, selectedIndex)
{
    SetRowStyles(id, selectedIndex);
}

function SetRowStyles(id, selectedIndex)
{
    var table = $get(id);
    if (table != null)
    {
        var tbody = table.tBodies[0];
        
        for (var i=0; i < tbody.rows.length; i++)
        {
            if (selectedIndex != null && i == selectedIndex)
                tbody.rows[i].className = 'tablerow selectedrow';
            else 
                if ((i%2)!=0)
                {
                    tbody.rows[i].className = 'tablerow alternate';
                }
                else 
                    tbody.rows[i].className = 'tablerow';

        }   
    }
}

function AdjustNumberOfRows(tbody, count, columns)
{
    if (tbody.rows.length < count)
    {
        var counter = tbody.rows.length;
        while (tbody.rows.length < count)
        {
            counter++;
            var row = tbody.rows[0];
            var clone = row.cloneNode(true);
            var ctlNumber = counter.toString();
            if (ctlNumber.length == 1) 
                ctlNumber = '0' + ctlNumber;
            for (var i = 0; i < columns.length; i++)
            {
                var z = FindControl(clone, columns[i]);
                var p = FindControl(clone, "acLocation_completionListElem");
                if (z)
                {
                    var c = z.id;
                    z.id = z.id.replace('01_' + columns[i], ctlNumber + '_' + columns[i].toString());
                }
            }
            tbody.appendChild(clone);                         
        }
    }
    else 
        if (tbody.rows.length > count)
        {
            while (tbody.rows.length > count)
            {
                var row = tbody.rows[tbody.rows.length - 1];
                while (row.firstChild != null)
                  row.removeChild(row.firstChild);
                tbody.deleteRow(tbody.rows.length - 1);
            }
        }
}

function AdjustNumberOfRows2(tbody, count, columns, acInformation) {
    if (tbody.rows.length < count) {
        var counter = tbody.rows.length;
        while (tbody.rows.length < count) {
            counter++;
            var row = tbody.rows[0];
            var clone = row.cloneNode(true);
            var ctlNumber = counter.toString();
            if (ctlNumber.length == 1)
                ctlNumber = '0' + ctlNumber;
            for (var i = 0; i < columns.length; i++) {
                var z = FindControl(clone, columns[i]);
                var p = FindControl(clone, "acLocation_completionListElem");
                if (z) {
                    var c = z.id;
                    z.id = z.id.replace('01_' + columns[i], ctlNumber + '_' + columns[i].toString());
                }
            }
            tbody.appendChild(clone);

            if (acInformation) {
                var txtControl = FindControl(clone, acInformation.txtControl);
                var id = txtControl.id.replace(acInformation.txtControl, acInformation.acControl)
                try {
                    var c = Sys.Application.findComponent(id);
                    if (c != null) {
                        Sys.Application.removeComponent(c);
                        c = Sys.Application.findComponent(id + 'PopupBehavior');
                        if (c != null)
                            Sys.Application.removeComponent(c);
                    }
                    c = $create(Sys.Extended.UI.AutoCompleteBehavior,
                        { "id": id, "minimumPrefixLength": 3,
                            "serviceMethod": acInformation.serviceMethod,
                            "servicePath": acInformation.servicePath
                        }, null, null, txtControl);
                    c.add_itemSelected(ValuePairSelected);
                    }
                catch (error) {
                    error = 'my error ' + error;
                }
            }
        }
    }
    else
        if (tbody.rows.length > count) {
            while (tbody.rows.length > count) {
                var row = tbody.rows[tbody.rows.length - 1];
                while (row.firstChild != null)
                    row.removeChild(row.firstChild);
                tbody.deleteRow(tbody.rows.length - 1);
            }
        }
}

function AddAutoCompleteExtenders(tbody, acInformation) {
    var counter = 0;
    for (var i = 0; i < tbody.rows.length; i++) {
        counter++;
        var row = tbody.rows[i];
        var ctlNumber = counter.toString();
        if (ctlNumber.length == 1)
            ctlNumber = '0' + ctlNumber;
      
        var txtControl = FindControl(row, acInformation.txtControl);

        var id = txtControl.id.replace(acInformation.txtControl, acInformation.acControl);       

        try {
            var c = Sys.Application.findComponent(id);
            if (c != null) {
                Sys.Application.removeComponent(c);
                c = Sys.Application.findComponent(id + 'PopupBehavior');
                if (c != null)
                    Sys.Application.removeComponent(c);
            }       

            c = $create(Sys.Extended.UI.AutoCompleteBehavior,
                        { "id": id, "minimumPrefixLength": 3,
                            "serviceMethod": acInformation.serviceMethod,
                            "servicePath": acInformation.servicePath
                        }, null, null, txtControl);            
        }
        catch (error) {
            error = 'my error ' + error;
        }

        var p = 5;
    }
}

function OnTableLoadOk(result)
{
    var data = eval("(" + result + ")");
    ShowTable(data);
}

function ShowTable(data)
{
    var table = $get(data.tableName);
    if (table != null)
    {        
        var tbody = table.tBodies[0];
        AdjustNumberOfRows2(tbody, data.rows.length, data.columns, data.acInformation);
        for (var i = 0; i < data.rows.length; i++)
        {
            for (var j = 0; j < data.columns.length; j++)
            {            
                var ctl = FindControl(tbody.rows[i], data.columns[j]);

                if (ctl)
                {                    
                    if  (ctl.tagName == 'SPAN' || ctl.tagName == 'A')
                    {
                        ctl.innerHTML = data.rows[i][j];
                    }
                    else                    
                        if  (ctl.tagName == 'TEXTAREA')
                            ctl.value = data.rows[i][j];

                    else     
                    if (ctl.tagName == 'INPUT')
                    {
                        var z = data.rows[i];
                        var z1 = data.rows[i][j];
                        StoreControlValue(ctl.id, data.rows[i][j].toString(), '0', ''); 
                        if (ctl.type == 'text')
                            ctl.value = data.rows[i][j];
                        else if (ctl.type == 'checkbox' || ctl.type == 'radio' )
                            ctl.checked = data.rows[i][j];
                        else if (ctl.type == 'image')
                        {
                                ctl.src = data.rows[i][j].toString();
                                var x = 4;
                        }
                        else if (ctl.type == 'submit')
                        {
                            try {
                                if (data.rows[i][j].toString() == 'FALSE')
                                    ctl.disabled= true;
                                else ctl.disabled= false;
                            }
                            catch(err) {}
                        }
                    }
                    else 
                    if (ctl.tagName == 'SELECT')
                    {
                        ctl.value = data.rows[i][j];
                    }
                    else 
                    if  (ctl.tagName == 'IMG')
                    {
                        ctl.src = data.rows[i][j];
                    }
                }

            }            
        }

        SetTableStyle(data.tableName, data.className, data.isDummy);
        SetRowStyles(table.id, parseInt(data.selectedIndex, 10));
        SetFooterData(table.id, parseInt(data.currentPage, 10), parseInt(data.numberOfPages, 10), 
                      parseInt(data.numberOfItems, 10))
    }   
}

function HandlePagingButton(ctrl, item) {
    var c = ctrl.parentNode;
    while (c.id != 'tblFooter')
        c = c.parentNode;
    var hfPager = FindControl(c, 'hfPagerId');
    c = c.parentNode;
    while (c.tagName != 'TABLE')
        c = c.parentNode;

    var s = PageMethods.GetTableData(c.id, hfPager.value, item, OnTableLoadOk, OnLoadError);
    return false;
}

function HandlePagerChange(cbxPager)
{
    var c = cbxPager.parentNode;
    while (c.id != 'tblFooter')
        c = c.parentNode;
    var hfPager = FindControl(c, 'hfPagerId');
    c = c.parentNode;
    while (c.tagName != 'TABLE')
        c = c.parentNode;

    var pageNumber = cbxPager.value;
    var s = PageMethods.GetTableData(c.id, hfPager.value, pageNumber.toString(), OnTableLoadOk, OnLoadError);
}

function HandleListSortCommand(lbtSort, message)
{
    var c = lbtSort.parentNode;
    while (c.tagName != 'TABLE')
        c = c.parentNode;
    var s = PageMethods.GetTableData(c.id, c.id, 'sort' + message, OnTableLoadOk, OnLoadError);
    return false;
}

/************ End of the table related javascript functions **************************/

function HandleCopyButton(item) {
    var table = $get("tblRepeater");
    var row   = table.rows[1];
    var parent   = row.parentNode; 
    var clone = row.cloneNode(true);
    var btn = FindControl(clone, "btn1");
    btn.id = "dataListItem_ctl11_btn1";
    parent.appendChild(clone); 
    var btn = FindControl(clone, "btn1");
    var btn2 = FindControl(table.rows[2], "btn1");    

    return false;
}

function UpdateList(result){
    var options = eval("(" + result + ")");
    if (options.description.length < 1){
        return ;
    }

    var cbxID = options.description[0];
    var cbx = $get(cbxID);
    if (cbx == null){
        return ;
    }

    cbx.disabled = true;
    cbx.options.length=0;

    if (options.id.length > 1){
        for (i = 1; i < options.id.length; i++) {
            var option = new Option(options.description[i], options.id[i]);
            cbx.options[cbx.options.length] = option;
        }
    }
    cbx.disabled = false;
}

function GetSSRRateValue(ctrl, key)
{
    var tmpLbl = FindControl(ctrl, key);
    if (tmpLbl)  
        return parseFloat(tmpLbl.innerText);
    else return 0; 
}

function HandleRentalCarSSRChbChange(chbID, dlSSRID, dlMandatoryID, itemRateID, itemRateReqCurID,
                                     rateID, ssrTotalID, totalID, rateReqCurID, ssrTotalReqCurID, totalReqCurID) 
{
    var rate = parseFloat($get(rateID).innerText);
    var rateReqCur = parseFloat($get(rateReqCurID).innerText);
    
    var mandatoryRate = 0;
    var mandatoryRateReqCur = 0;
    
    var dlMandatory = $get(dlMandatoryID);
    var r = dlMandatory.rows[0];
    var r2 = dlMandatory.rows[1];
    for (var i = 0; i < dlMandatory.rows.length; i++)
    {
        mandatoryRate += GetSSRRateValue(dlMandatory.rows[i], itemRateID);
        mandatoryRateReqCur += GetSSRRateValue(dlMandatory.rows[i], itemRateReqCurID);
    }
        
    var ssrRate = mandatoryRate;
    var ssrRateReqCur = mandatoryRateReqCur;

    var dlSSR = $get(dlSSRID);
    
    for (var i = 0; i < dlSSR.rows.length; i++)
    {
        var chb = FindControl(dlSSR.rows[i], chbID);
        if (chb && chb.checked) 
        {
            ssrRate += GetSSRRateValue(dlSSR.rows[i], itemRateID);
            ssrRateReqCur += GetSSRRateValue(dlSSR.rows[i], itemRateReqCurID);
        }
    }
    
    var totalRate = rate + ssrRate;
    var totalRateReqCur = rateReqCur + ssrRateReqCur;
    
    var txtSSR = $get(ssrTotalID);
    txtSSR.innerText = ToMoneyString(ssrRate);
    
    var txtSSRReqCur = $get(ssrTotalReqCurID);
    txtSSRReqCur.innerText = ToMoneyString(ssrRateReqCur);

    var txtTotal = $get(totalID);
    txtTotal.innerText = ToMoneyString(totalRate);

    var txtTotalReqCur = $get(totalReqCurID);
    txtTotalReqCur.innerText = ToMoneyString(totalRateReqCur);
}

function SSRSelectionChangeHandler(pObjID) 
{
    var pObj = $get(pObjID);
    StoreControlValue(pObj, pObj.value);
    var s = "{'index':'" + GetRowIndex(pObj).toString() + "', 'value': '" + pObj.value + "'}";
   
    AsyncServerMessage('ssrSelected', s, ShowResponseDetails, false);
}

var filePath;

function HandleBtnAddImageClick(btn, ctlID)
{
    var obj = $get(ctlID);
    var filePath = obj.value;
    CallServer(obj.value, '');

    return false;    
}

/* GOOGLE MAP RELATED SCRIPTS   */
var map = null;
var Hmap = null;
var BMhotelDetail ;
var BMhotelCenter;

function initialize() {
    try {
        if (GBrowserIsCompatible()) {
            map = new GMap2(document.getElementById("map"));
            var mapControl = new GMapTypeControl();
            map.addControl(mapControl);
            map.addControl(new GMapTypeControl(true));

            if (navigator.appName == 'Microsoft Internet Explorer') {
                map.setUIToDefault();
                map.setCenter(new GLatLng(52.373056, 4.892222), 13);
            }

            GEvent.addListener(map, "moveend",
            function () {
                var center = map.getCenter();
            }
        );

        }
    }
    catch (error) { }
}

function refreshMap() 
{
    if (map) {
        // for firefox
        if (typeof(navigator.product) != 'undefined') {
            map.setUIToDefault();
            map.setCenter(new GLatLng(City_Center_LaT, City_Center_LoN), getZoom);
        }

        var newLat = map.getCenter().lat();
        var newLng = map.getCenter().lng();
        var newZoom = map.getZoom();

        map.checkResize();
        map.setCenter(new GLatLng(newLat, newLng), newZoom);
    }
}
    
function InitGoogleMap(hotelInfo) 
{
    if (hotelInfo)
    {
        initialize();
        
        for (var i = 0; i < hotelInfo.hotels.length; i++)
            if (hotelInfo.hotels[i].validCoordinates)
        {
            if(Hotel_Select_LaT==hotelInfo.hotels[i].latitude && Hotel_Select_LoN==hotelInfo.hotels[i].longitude)
            {
                AddHotelMarker(hotelInfo.hotels[i], "ImageMarkerOnMap.aspx?MarkerNumber=" +(i+1)+"&MarkerName=marker_hotel_select.png"); 
            }
            else
            {
                AddHotelMarker(hotelInfo.hotels[i], "ImageMarkerOnMap.aspx?MarkerNumber=" + (i+1)+"&MarkerName=marker_hotel.png");  
            }
        
             var Latitude = hotelInfo.hotels[0].latitude;
             var Longitude = hotelInfo.hotels[0].longitude;
          
            var maxLatitude = Math.max(Latitude,hotelInfo.hotels[i].latitude);
            var maxLongitude = Math.max(Longitude,hotelInfo.hotels[i].longitude);       
            var minLatitude = Math.min(Latitude,hotelInfo.hotels[i].latitude);
            var minLongitude = Math.min(Longitude,hotelInfo.hotels[i].longitude);
        }

        var swLatLng = new GLatLng(minLatitude,minLongitude);   
        var neLatLng = new GLatLng(maxLatitude,maxLongitude);
        var center = new GLatLng((maxLatitude+minLatitude)/2,(maxLongitude+minLongitude)/2);
        var getBound = new GLatLngBounds(swLatLng, neLatLng); 

        BMhotelCenter=new GLatLng((maxLatitude+minLatitude)/2,(maxLongitude+minLongitude)/2);

        if (map.getBoundsZoomLevel(getBound)> getZoom) {
        }
        else {        
            getZoom = map.getBoundsZoomLevel(getBound) - 1;
        }

        if (getZoom < 12)
            getZoom = 12;

        var center = new GLatLng(hotelInfo.centerLatitude, hotelInfo.centerLongitude);

        if (navigator.appName == 'Microsoft Internet Explorer') 
        {
            map.setCenter(center, getZoom);
        }
               
        var gIcon = new GIcon(G_DEFAULT_ICON);     
        gIcon.iconSize = new GSize(30,39);
        gIcon.image = "images/markers/marker_poi.png";
        var marker = new GMarker(new GLatLng(hotelInfo.centerLatitude, hotelInfo.centerLongitude),{title:hotelInfo.centerText, icon:gIcon});       
        map.addOverlay(marker);       

        City_Center_LaT = hotelInfo.centerLatitude;
        City_Center_LoN = hotelInfo.centerLongitude;
    }
    else 
    {
        BMhotelDetail = hotelInfo;
        initialize();
    }
}

function PopUpHotelDetails(s)
{
    alert(s);
}

function AddHotelMarker(hotelInfo, HotelIcoN) {
    var hIcon = new GIcon(G_DEFAULT_ICON);
    hIcon.iconSize = new GSize(30, 39);
    hIcon.image = HotelIcoN;
    var point = new GLatLng(hotelInfo.latitude, hotelInfo.longitude);
    var marker = new GMarker(new GLatLng(hotelInfo.latitude, hotelInfo.longitude), { title: hotelInfo.hotelName, icon: hIcon });
    GEvent.addListener(marker, "click", function () { PopUpHotelDetails(hotelInfo.hotelName) });
    map.addOverlay(marker);    
}

/* END OF GOOGLE MAP RELATED SCRIPTS   */

Sys.Application.add_load(function pageLoad(){});
Sys.Application.add_unload(function pageUnload(){});

//--------------------------------------------------------------------------------------------//

function ToggleCbxPanel(cbxID, panelID, jsIDs, cssString)
{
    var cbx = $get(cbxID);
    StoreControlValue(cbx.id, cbx.value);
    var ids = eval("(" + jsIDs + ")"); 
    var pnl = $get(panelID);
    
    var showPanel = false;
    for (var i = 0; i < ids.keysVisible.length; i++)
      if (ids.keysVisible[i] == cbx.value)
        showPanel = true;
        
    if (showPanel)
        pnl.style.display= cssString;
    else 
        pnl.style.display= 'none';
}

function DisableControl(ctlID)
{
    var ctl = $get(ctlID);
    ctl.disabled = true;
}   
 
function Visible(ctlID)
{
    var ctl = $get(ctlID);
   ctl.style.display='';

}

function InVisible(ctlID)
{
    var ctl = $get(ctlID);
   ctl.style.display='none';

}

function EnableControl(ctlID)
{
    var ctl = $get(ctlID);
    ctl.disabled = false;
}    

var AirportPopUpTargetCtlID = '';
var AirportPopUpDistance = '50';
    
function AirportPopUpLocationChanged(ctrl, msg)
{
    StoreControlValue(ctrl.id, ctrl.value);
    CombineStoredValues();

    return AsyncServerMessage(msg, ControlValues2JSONString(), PopUpAirportFillTable3, false);
}

function ModalReservationDetailsClick(msg, mep, btn)
{
    AsyncServerMessage(msg, GetRowIndex(btn).toString(), ShowResponseDetails, false);
    mep.show();
}

function ModalAircraftClick(mep, btn)
{
    AsyncServerMessage('getImages', GetRowIndex(btn).toString(), PopUpImagesFillTable, false);
    mep.show();
}

var indexImage = -1;
var mepImage;

function LaunchModalImageSelect(mep, btn)
{
    mepImage = mep;
    indexImage = GetRowIndex(btn);
    mep.show();
}

function HandleUploadImageCompleted(okPressed)
{
    mepImage.hide();
    if (okPressed)
        return AsyncServerMessage("msgImageUploaded", indexImage.toString(), ShowResponseDetails, false);
    else
        return AsyncServerMessage("msgImageUploaded", "-1", ShowResponseDetails, false);
}

function PopUpImagesFillTable()
{
    if (request.readyState == 4 && request.status == 200)
    {
        var images = eval("(" + request.responseText + ")");
        ShowControlValues(images.controlValues);
    }
}

function HandleTableLoad(table)
{
    alert("table load");
}

function ImageClick(srcCtrl, targetID, pagerID)
{
    
    $get(targetID).src = srcCtrl.src;
   return false;
}

function ButtonImageViewerClick(tableID, action, pagerID)
{
    AsyncServerMessage("getImageDetails", action, ShowResponseDetails, false);
    return false;

}

function OnImageLoadError(result)
{
    alert ('Image load error' + result);
}

function ChangeCalculationTotal(ctrl, sumType, itemIndex)
{
    var data = sumType + '|' + ctrl.value + '|' + itemIndex.toString();
    AsyncServerMessage('CalculationChange', data, ShowResponseDetails, false);
    return false;
}

// Add segments for charters alone
function HandleRadioButtonInRepeater(chb, msgId) {
    mpeLoader = $find('mpeLoadingBehaviorID1');
    if (mpeLoader)
        mpeLoader.show();

    var table = GetParentTable(chb);

    var startIndex = FirstDataRow(table);
    var endIndex = LastDataRow(table);
    var itemIndex = GetRowIndex(chb);

    for (var i = startIndex; i <= endIndex; i++) {
        for (var j = 0; j < table.rows[i].cells.length; j++) {
            var inputType = table.rows[i].cells[j].getElementsByTagName("input");
            for (var k = 0; k < inputType.length; k++) {
                if (typeof (inputType[k]) != 'undefined') {
                    if (inputType[k].type == "radio") {
                        StoreControlValue(inputType[k].id, "FALSE");
                    }
                }
            }
        }
    }

    if (chb.checked)
        StoreControlValue(chb.id, "TRUE");
    else StoreControlValue(chb.id, "FALSE");

    return AsyncServerMessage(msgId, ControlValues2JSONString(), ShowResponseDetails, false);
}
function AddSegmentEventResponse()
{
    if (request.readyState == 4 && request.status == 200)
    {
        OnTableLoadOk(request.responseText);
        return true;
    }
}

function AddSegmentButtonClickHandler(triggerId, tableID, jsControls)
{
    var controlInfo = eval("(" + jsControls + ")");
    response = '{values:[';
    
    for (i = 0; i < controlInfo.ctrls.length; i++)
    {
        response = response + '{' + "'" + controlInfo.ctrls[i] + "'" + "," + "'" + GetFieldValue(controlInfo.ctrls[i]) + "'" + '}';
        if (i < controlInfo.ctrls.length - 1)
            response = response + ',';

    }

    response = response + ']}';

    var table = $get(tableID);
    if (table != null)
    {
        AsyncServerMessage('AddSegment', response, ShowResponseDetails, false);
        return false;
    }
    else 
    {
        AsyncServerMessage('AddSegment', response, ShowResponseDetails, true);
        return true;
    }
}

function HandleLocationAirportChange(ctrlTriggerID, ctrlTargetID, ctrlIdID)
{
}


function LoadAirportRequest(ctlTriggerID, ctrlTargetID)
{
    lbtn.innerText = "Select airport";   
}

/************************************************************/

function HotelAvailabilityTimer(hfSessionID, hfStatusID, lblMessageID, btnRefreshID) 
{ 
    var t2 = window.setInterval("CheckHotelAsyncAvailability('" + hfSessionID + "', '" + hfStatusID + "', '" +
                                 lblMessageID + "', '" + btnRefreshID + "')", 5000);
}

function CheckHotelAsyncAvailability(hfSessionID, hfStatusID, lblMessageID, btnRefreshID)
{
    var sessionId = $get(hfSessionID);
    var statusId =  $get(hfStatusID);

    if (sessionId != null && statusId != null)
        if (sessionId.value != "0" && statusId.value == "0") // sessionId can not be 0 for an existing session  
        {                                                    // status = 0 means not searching inactive
            statusId.value = "1";                            // status = 1 means start searching
            WSHotelsSearchProgress.GetAvailabilityUpdates(sessionId.value, hfSessionID, hfStatusID,
                                                          lblMessageID, btnRefreshID, HandleAvailabilityResponse);
        }
}

function HandleAvailabilityResponse(result) 
{
    var status = eval("(" + result + ")");
    if (status.available > 0) 
    {
        if ($get(status.btnRefreshID) != null)
            $get(status.btnRefreshID).disabled = false;
                 
        if ($get(status.lblMessageID) != null)
            $get(status.lblMessageID).innerHTML = "Press refresh to see more results!";
    }
        
    var statusId = $get(status.hfStatusID);
    if (status.completed == "Y")
    {
        statusId.value = "2";                       // set status to completed
        if (status.available == 0) 
            $get(status.lblMessageID).innerHTML = "";
    }
    else statusId.value = "0";                      // set status to idle
}

function FilterAircraft(ctrl, msg, asyncCallback)
{    
    StoreControlValue(ctrl.id, ctrl.checked);   
    CombineStoredValues();

    return AsyncServerMessage(msg, ControlValues2JSONString(ctrl), ShowResponseDetails, asyncCallback);
}

function ChangeCurrency(cbx)
{
    return AsyncServerMessage('msgChangeCurrency', cbx.value, ShowResponseDetails, true)
}

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

/* */

var oldTxtStyle = '';
// Show and hide loading image for autocomplete
function ShowImage(source, eventArgs) {
    var elName = source._element.id;
    var el = document.getElementById(elName);
    if (el) {
        el.style.backgroundImage = 'url(img/ajax-loader-greySnake.gif)';
        el.style.backgroundRepeat = 'no-repeat';
        el.style.backgroundPosition = 'right';
        if (oldTxtStyle == '')
            oldTxtStyle = el.className;
        el.className += ' show_loading_image';
    }
}

function HideImage(source, eventArgs) {
    var elName = source._element.id;
    var el = document.getElementById(elName);
    if (el) {
        el.style.backgroundImage = navigator.appName == 'Microsoft Internet Explorer' ? 'none' : null;
        el.className = oldTxtStyle;
    }


}
