var tooltipAlert = function (message, options) {
	if (message == null || message == "") { return; }
	if (typeof (flexitip) != "undefined") {
		var tipHtml = '<table cellpadding="0" cellspacing="0" border="0">' +
		'<tr><td class="alert_tl"></td><td class="alert_tr"></td></tr>' +
		'<tr><td colspan="2" class="alertContent">' + message + '</td></tr>' +
		'<tr><td class="alert_bl"></td><td class="alert_br"></td></tr></table>';
		flexitip.addTip(tipHtml, options);
	} else { alert(message); }
}

var dismissTooltipAlerts = function () {
	if (typeof (flexitip) != "undefined") { flexitip.clearTips(); }
}

var alertMethod = tooltipAlert;
var dismissAlertMethod = dismissTooltipAlerts;

var activeTable = "tbSearchBox";

var imgPlus = IMG_ROOT + 'i/plus.gif';
var imgMinus = IMG_ROOT + 'i/minus.gif';

var getElement = function(id) { return (document.all ? document.all[id] : document.getElementById(id)); }

function LoadSuggest(item, iata, lang, img, sendFunc) {
    InstallAC(document.forms[0], item, getElement(iata), LANG_ROOT_PATH + 'AJAX/SuggestResult.aspx', lang, getElement(img), sendFunc);
}

function ExpandPanel(id, imgID, id2, imgID2) {
    var panel, image, panel2, image2;
    try {
        panel = getElement(id);
        image = getElement(imgID);

        if (panel.style.display == 'none') {
            panel.style.display = '';
            image.src = imgMinus;

            if (id2) {
                getElement(id2).style.display = 'none';
                getElement(imgID2).src = imgPlus;
            }
            return true;
        }
        else {
            panel.style.display = 'none';
            image.src = imgPlus;
            return false;
        }
    }
    catch (e) { }
}

var toggleDisplay = function (elem, id, onCss, offCss, forceClosed) {
    if (typeof (elem) == 'string') { elem = getElement(elem); }
    var open = false;
    if (typeof ($) != 'undefined') {
        var panel = $('#' + id);
        var open = (panel.css('display') == 'none');
        if (open && !forceClosed) {
            panel.slideDown(200);
            if (elem) { elem.className = offCss; }
        } else {
            panel.slideUp(200);
            if (elem) { elem.className = onCss; }
        }
    }
    else {
        var panel = getElement(id);
        var open = (panel.style.display == 'none');
        if (open && !forceClosed) {
            panel.style.display = '';
            elem.className = offCss;
        }
        else {
            panel.style.display = 'none';
            elem.className = onCss;
        }
    }
    return open;
};

function parse_monthyear(monthyear) {
    var strs = monthyear.split("-");
    var dateObj = {};
    dateObj.year = strs[0];
    dateObj.month = strs[1];
    return dateObj;
}

function parse_date(dt) {
    var dateNow = new Date();
    var strs = dt.split("-");
    var dateObj = {};
    dateObj.year = (strs.length > 0 ? parseInt(strs[0], 10) : dateNow.getFullYear());
    dateObj.month = (strs.length > 1 ? parseInt(strs[1], 10) : (dateNow.getMonth() + 1));
    dateObj.day = (strs.length > 2 ? parseInt(strs[2], 10) : dateNow.getDate());
    return dateObj;
}

function searchDateChanged() {
    calendarChanged('ddDepartDay', 'ddDepartMonth', 'dtDepart', 'ddReturnDay', 'ddReturnMonth', 'dtReturn')
}

function byPriceDateChanged() {
    calendarChanged('ddMinDay', 'ddMinMonth', 'dtMinDate', 'ddMaxDay', 'ddMaxMonth', 'dtMaxDate')
}

function calendarChanged(depDayId, depMonthId, depDateId, retDayId, retMonthId, retDateId) {
    var depDateObj = parse_date(getElement(depDateId).value);
    var retDateObj = parse_date(getElement(retDateId).value);
    var depDate = new Date(depDateObj.year, depDateObj.month - 1, depDateObj.day);
    var retDate = new Date(retDateObj.year, retDateObj.month - 1, retDateObj.day);

    var today = new Date();
    if (depDate < today) {
        depDate = today;
        setDropdownValue(getElement(depDayId), depDate.getDate());
        setDropdownValue(getElement(depMonthId), depDate.getFullYear() + '-' + (depDate.getMonth() + 1));
        getElement(depDateId).value = depDate.getFullYear() + '-' + (depDate.getMonth() + 1) + '-' + depDate.getDate();
    }

    if (retDate < depDate) {
        retDate = depDate;
        setDropdownValue(getElement(retDayId), retDate.getDate());
        setDropdownValue(getElement(retMonthId), retDate.getFullYear() + '-' + (retDate.getMonth() + 1));
        getElement(retDateId).value = retDate.getFullYear() + '-' + (retDate.getMonth() + 1) + '-' + retDate.getDate();
    }
}

function dateDropdownChanged(depDayId, depMonthId, depDateId, retDayId, retMonthId, retDateId, sender) {
    var ddDepDay = getElement(depDayId);
    var ddDepMonth = getElement(depMonthId);
    var ddRetDay = getElement(retDayId);
    var ddRetMonth = getElement(retMonthId);
    var inputDepDate = getElement(depDateId);
    var inputRetDate = getElement(retDateId);

    var depDay = ddDepDay.value;
    var depYM = ddDepMonth.value;
    var depMonthYear = new parse_monthyear(depYM);
    var depDate = new Date(depMonthYear.year, depMonthYear.month - 1, depDay);
    inputDepDate.value = depDate.getFullYear() + '-' + (depDate.getMonth() + 1) + '-' + depDate.getDate();

    var retDay = ddRetDay.value;
    var retYM = ddRetMonth.value;
    var retMonthYear = new parse_monthyear(retYM);
    var retDate = new Date(retMonthYear.year, retMonthYear.month - 1, retDay);
    inputRetDate.value = retDate.getFullYear() + '-' + (retDate.getMonth() + 1) + '-' + retDate.getDate();

    var today = new Date();
    if (depDate < today) { depDate = today; }
    setDropdownValue(ddDepDay, depDate.getDate());
    setDropdownValue(ddDepMonth, depDate.getFullYear() + '-' + (depDate.getMonth() + 1));
    inputDepDate.value = depDate.getFullYear() + '-' + (depDate.getMonth() + 1) + '-' + depDate.getDate();

    if (retDate < depDate) {
        if (sender == ddRetDay) { retDate.setMonth(depDate.getMonth() + 1); }
        else { retDate = depDate; }
    }
    setDropdownValue(ddRetDay, retDate.getDate());
    setDropdownValue(ddRetMonth, retDate.getFullYear() + '-' + (retDate.getMonth() + 1));
    inputRetDate.value = retDate.getFullYear() + '-' + (retDate.getMonth() + 1) + '-' + retDate.getDate();
}

// FORM VALIDATION
function validateSidebarForm() {
    activeTable = "tbSideBarFlightSearch";
    validateForm();
}

function validateForm() {
    var p = {
        ErrDepId: 'errAptDep', ErrDestId: 'errAptDest', ErrDateId: 'errDateReturn',
        DepCityId: 'tbAptDep', DestCityId: 'tbAptDest', DepIataId: 'tbDepIata', DestIataId: 'tbDestIata',
        TrainCheckId: 'chkTrain', FlightCheckId: 'chkFlight', BusCheckId: 'chkBus', FerryCheckId: 'chkFerry',
        DepartDateId: 'dtDepart', ReturnDateId: 'dtReturn', OnewayRadioId: 'optOneWay',
        AdultsId: 'ddAdults', ChildrenId: 'ddChildren', InfantsId: 'ddInfants', CurrencyId: 'ddCurrency',
		BusinessCheckId: 'cbBusinessClass', InclNearbyDep: 'chkDepNearby', InclNearbyDest: 'chkDestNearby'
    };    
    submitSearchForm(p, 'right');
}

function submitSearchForm(fields, alignTips) {
    dismissAlertMethod();
    if (abortSuggest) { abortSuggest(); }

    var errAptDep = getElement(fields.ErrDepId);
    var errAptDest = getElement(fields.ErrDestId);
    var errDateReturn = getElement(fields.ErrDateId);

    var depField = getElement(fields.DepCityId);
    var destField = getElement(fields.DestCityId);
    var depIATAField = getElement(fields.DepIataId);
    var destIATAField = getElement(fields.DestIataId);

    var chkFlightField = getElement(fields.FlightCheckId);
    var chkTrainField = getElement(fields.TrainCheckId);
    var chkBusField = getElement(fields.BusCheckId);
    var chkFerryField = getElement(fields.FerryCheckId);
    var chkBusinessClassField = getElement(fields.BusinessCheckId);
    var currency = getElement(fields.CurrencyId);

    var isError = false;

    if (trim(depField.value) == '') {
        errAptDep.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(depField);
        alertMethod(TXT_NO_DEP_ERROR, { anchor: depField, anchorPos: (alignTips ? alignTips : "left") });
    }
    else { errAptDep.innerHTML = ''; }

    if (trim(destField.value) == '') {
        errAptDest.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(destField);
        alertMethod(TXT_NO_DEST_ERROR, { anchor: destField, anchorPos: (alignTips ? alignTips : "right") });
    }
    else { errAptDest.innerHTML = ''; }

    if (
        (depIATAField.value != '' && depIATAField.value == destIATAField.value) ||
		(depField.value != '' && trim(destField.value).toLowerCase() == trim(depField.value).toLowerCase())
       ) {
        errAptDest.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(destField);
        alertMethod(TXT_SAME_DEP_DEST_ERROR, { anchor: destField, anchorPos: (alignTips ? alignTips : "right") });
    }
    else if (!isError) { errAptDest.innerHTML = ''; }

    var depDateElems = getElement(fields.DepartDateId).value.split('-');
    var retDateElems = getElement(fields.ReturnDateId).value.split('-');
    var blnOneWay = getElement(fields.OnewayRadioId).checked;

    try {
        var dtDepart = new Date(depDateElems[0], depDateElems[1], depDateElems[2]);
        var dtReturn = new Date(retDateElems[0], retDateElems[1], retDateElems[2]);
        if (!blnOneWay && dtDepart > dtReturn) {
            errDateReturn.innerHTML = '<font color=red>X</font>';
            isError = true;
        }
        else { errDateReturn.innerHTML = ''; }
    }
    catch (e) {
        errDateReturn.innerHTML = '<font color=red>X</font>';
        isError = true;
    }

    if (chkFlightField && chkTrainField && chkBusField && chkFerryField) {
        var hasTransport = chkFlightField.checked || chkTrainField.checked || chkBusField.checked || chkFerryField.checked;
        if (!hasTransport) {
            isError = true;
            alertMethod(TXT_NO_TRANSPORT, { anchor: chkFerryField.parentNode, anchorPos: (alignTips ? alignTips : "top-left") });
        }
    }

    var ddInfants = getElement(fields.InfantsId);
    var ddAdults = getElement(fields.AdultsId);
    if (ddInfants.value > ddAdults.value) {
        isError = true;
        alertMethod(TXT_INVALID_NO_INFANTS, { anchor: ddInfants, anchorPos: (alignTips ? alignTips : "right") });
        ddInfants.focus();
    }

    if (isError) { return false; }

    var depIATA = getElement(fields.DepIataId).value;
    var destIATA = getElement(fields.DestIataId).value;

    var URL = FLIGHTS_FOLDER + (depIATA.length == 0 || destIATA.length == 0 ? 'preflysearch.aspx' : 'flysearch.aspx');
    URL += '?depcity=' + encodeURIComponent(getElement(fields.DepCityId).value);
    URL += '&destcity=' + encodeURIComponent(getElement(fields.DestCityId).value);
    URL += '&depIATA=' + depIATA;
    URL += '&destIATA=' + destIATA;
    URL += '&depart=' + getElement(fields.DepartDateId).value;
    URL += '&return=' + (blnOneWay ? '' : getElement(fields.ReturnDateId).value);
    URL += '&adults=' + getElement(fields.AdultsId).value;
    URL += '&children=' + getElement(fields.ChildrenId).value;
    URL += '&infants=' + getElement(fields.InfantsId).value;
    URL += '&currency=' + getElement(fields.CurrencyId).value;
    URL += '&flway=' + (blnOneWay ? 'True' : 'False');
    URL += '&flight=' + (chkFlightField ? chkFlightField.checked : 'true');

    if (chkTrainField && chkTrainField.checked)
        URL += '&train=true';

    if (chkBusField && chkBusField.checked)
        URL += '&bus=true';

    if (chkFerryField && chkFerryField.checked)
        URL += '&ferry=true';

    if (chkBusinessClassField && chkBusinessClassField.checked)
        URL += '&BusinessClass=true';

    var lang = '';
    try { lang = LANG_CODE; } catch (e) { }
    URL += '&lang=' + lang;

    var chkDepNearbyField = (fields.InclNearbyDep ? getElement(fields.InclNearbyDep) : null);
    var chkDestNearbyField = (fields.InclNearbyDep ? getElement(fields.InclNearbyDest) : null);
    var depNearby = false;
    var destNearby = false;

    // Add parameters for ALL Airport search
    if (depField.value.indexOf(TXT_ALL_AIRPORTS) != -1) { depNearby = true; }
    if (!depNearby && chkDepNearbyField) { depNearby = chkDepNearbyField.checked; }

    // Add parameters for ALL Airport search
    if (destField.value.indexOf(TXT_ALL_AIRPORTS) != -1) { destNearby = true; }
    if (!destNearby && chkDestNearbyField) { destNearby = chkDestNearbyField.checked; }

    if (depNearby) { URL += '&DepAll=1'; }
    if (destNearby) { URL += '&DestAll=1'; }

    if (currency && currency.value.length > 0) {
        document.cookie = 'Currency=' + currency.value + '; path=/;';
    }

    window.location.href = URL;
    return false;
}


// DIRECTORY FORM VALIDATION
function validateDirForm() {
    activeTable = "tbDirectorySearch";
    dismissAlertMethod();
    var errAptDep = getElement('errAptDep2');
    var errAptDest = getElement('errAptDest2');

    var depField = getElement('tbAptDep2');
    var destField = getElement('tbAptDest2');

    var depIATAField = getElement('tbDepIata2');
    var destIATAField = getElement('tbDestIata2');
    var currency = getElement('ddCurrency2');

    var isError = false;

    if (trim(depField.value) == '') {
        errAptDep.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(depField);
        alertMethod(TXT_NO_DEP_ERROR, { anchor: depField, anchorPos: "right" });
    }
    else { errAptDep.innerHTML = ''; }

    if (trim(destField.value) == '') {
        errAptDest.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(destField);
        alertMethod(TXT_NO_DEST_ERROR, { anchor: destField, anchorPos: "right" });
    }
    else { errAptDest.innerHTML = ''; }

    if (
        (depIATAField.value != '' && depIATAField.value == destIATAField.value) ||
		(depField.value != '' && trim(destField.value).toLowerCase() == trim(depField.value).toLowerCase())
        ) {
        errAptDest.innerHTML = '<font color=red>X</font>';
        isError = true;
        FocusItem(destField);
        alertMethod(TXT_SAME_DEP_DEST_ERROR, { anchor: destField, anchorPos: "right" });
    }
    else if (!isError) { errAptDest.innerHTML = ''; }

    var monthField = getElement('ddDirectoryMonth');
    var blnOneWay = getElement('optOneWay2').checked;

    if (isError) { return false; }

    var URL;

    if (depIATAField.value.length == 3 && destIATAField.value.length == 3) {
        var depCity = depField.value.replace(TXT_ALL_AIRPORTS, '');
        depCity = trim(depCity.replace(',', ' ').replace('  ', ' '));
        var destCity = destField.value.replace(TXT_ALL_AIRPORTS, '');
        destCity = trim(destCity.replace(',', ' ').replace('  ', ' '));
        var regex = /\s+/g;
        var fileName = TXT_RESULTS_NAME;
        fileName = fileName.replace('{0}', depCity);
        fileName = fileName.replace('{1}', destCity);
        fileName = fileName.replace(regex, '-');

        URL = FLIGHTS_FOLDER;
        if (blnOneWay) { URL += TXT_ONEWAY.replace(regex, '-') + "/"; }
        URL += depIATAField.value + "/";
        URL += destIATAField.value + "/";
        if (monthField.value != '0') { URL += monthField.value + '/'; }
        URL += fileName + '.htm';
    }
    else {
        URL = FLIGHTS_FOLDER + 'directoryresults.aspx';
        URL += '?aptDep=' + depIATAField.value;
        URL += '&aptDest=' + destIATAField.value;
        URL += '&depcity=' + encodeURIComponent(depField.value);
        URL += '&destcity=' + encodeURIComponent(destField.value);

        if (monthField.value != '0')
            URL += '&month=' + monthField.value;

        URL += '&currency=' + currency.value;
        URL += '&way=' + (blnOneWay ? '1' : '2');
    }

    if (currency && currency.value.length > 0) {
        document.cookie = 'Currency=' + currency.value + '; path=/;';
    }

    window.location.href = URL;

    return false;
}

// SEARCHBYPRICE FORM VALIDATION
function validateByPriceForm() {
    dismissAlertMethod();
    var depField = getElement('tbAptDep');
    var depIATAField = getElement('tbDepIata');
    var errAptDep = getElement('errAptDep');
    var continentField = getElement('ddContinents');
    var countryField = getElement('ddCountries');
    var blnOneWay = getElement('optOneWay').checked;
    var chkDateRange = getElement('chkDateRange');
    var maxPrice = getElement('tbMaxPrice');
    var currency = getElement('ddCurrency');
    var minStay = getElement('tbMinStay');
    var maxStay = getElement('tbMaxStay');

    if (trim(depField.value) == '') {
        if (errAptDep) { errAptDep.innerHTML = '<font color=red>X</font>'; }
        FocusItem(depField);
        alertMethod(TXT_NO_DEP_ERROR, { anchor: depField, anchorPos: "right" });
        return false;
    }

    var URL = BYPRICE_FOLDER;
    var depCity = depField.value.replace(TXT_ALL_AIRPORTS, '');
    depCity = trim(depCity.replace(',', ' ').replace('  ', ' '));
    var regex = /\s+/g;
    var fileName = TXT_BYPRICE_NAME;
    fileName = fileName.replace('{0}', depCity);
    fileName = fileName.replace(regex, '-');

    if (depIATAField.value.length == 3) { URL += depIATAField.value + "/"; }
    else { URL += encodeURIComponent(depField.value) + "/"; }

    URL += continentField.value + (countryField.value != '' ? '-' + countryField.value : '') + "/";
    if (blnOneWay) { URL += TXT_ONEWAY.replace(regex, '-') + "/"; }

    if (maxPrice && maxPrice.value.length > 0) {
        URL += maxPrice.value + "/";
    }

    var minStayVal = (minStay ? trim(minStay.value) : '');
    if (minStayVal.length > 0) {
        URL += TXT_MIN_STAY_URL + '_' + minStayVal + "/";
    }

    var maxStayVal = (maxStay ? trim(maxStay.value) : '');
    if (maxStayVal.length > 0) {
        URL += TXT_MAX_STAY_URL + '_' + maxStayVal + "/";
    }

    if (chkDateRange && chkDateRange.checked) {
        URL += getElement('dtMinDate').value + "/";
        URL += getElement('dtMaxDate').value + "/";
    }

    URL += fileName + '.htm';

    if (currency && currency.value.length > 0) {
        document.cookie = 'Currency=' + currency.value + '; path=/;';
    }

    abortFetchCountries();
    window.location.href = URL;

    return false;
}

function SetItemDisabled(ids, disabled) {
    try {
        for (var n = 0; n < ids.length; n++) {
            var elem = getElement(ids[n]);
            if (elem) {
                setDisabled(elem, disabled);
                if (elem.tagName != 'SELECT') {
                    for (var i = 0; i < elem.childNodes.length; i++) {
                        setDisabled(elem.childNodes[i], disabled);
                    }
                }
            }
        }
    }
    catch (e) { }
}

function LogSearch(count) {
	var url = LANG_ROOT_PATH + 'AJAX/Statistics.asmx/SaveSearch2';
    if (typeof jxRequest != 'undefined') {
        var settings = getElement('LogSettings');
        var key = getElement('LogKey');
        var lang = ((typeof LANG_CODE != 'undefined') ? LANG_CODE : '');
        var isCached = ((typeof fromCache != 'undefined') ? fromCache : false);
        if (settings && key) {
        	var content = 'logSettings=' + encodeURIComponent(settings.value) +
				'&logKey=' + encodeURIComponent(key.value) + '&lang=' + encodeURIComponent(lang) +
				'&count=' + count + '&isCached=' + (isCached ? 'true' : 'false');
            jxRequest.Request(url, null, 'POST', content);
        }
    }
}

function ValidateNumeric(evt, ctl) {
    if (!evt && window.event) { evt = window.event; }
    var keyCode = evt.keyCode;
    var MAX_LENGTH = 999999999;

    //navigation keys
    switch (keyCode) {
        case 8: //backspace
        case 9: //tab
        case 35: //end		
        case 36: //home		
        case 37: //left arrow
        case 39: //right arrow
        case 46: //delete
        case 144: //num lock
            return true;
    }
    dismissAlertMethod();
    if ((keyCode >= 45 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105)) {
        var selLength = (document.selection ? document.selection.createRange().text : ctl.selectionEnd - ctl.selectionStart);
        if (selLength == 0 && parseInt(ctl.value + "" + String.fromCharCode(keyCode), 10) > MAX_LENGTH) {
        	alertMethod(TXT_AMOUNT_TOO_LARGE, { anchor: ctl, anchorPos: "right" });
        	evt.returnValue = false;
        	return false;
		}
        return true;
    }

    evt.returnValue = false;
    return false;
}

function FocusItem(elem) { elem.focus(); elem.select(); }
function trim(str) { return str.replace(/^\s+/, "").replace(/\s+$/, ""); };

function setDropdownValue(ctl, val) {
    if (ctl) {
        if (ctl.setValue) { ctl.setValue(val); }
        else { ctl.value = val; }
    }
}

function updateDropdownValue(ctl) {
    if (ctl && ctl.updateValue) { ctl.updateValue(); }
}

function setDisabled(ctl, val) {
    if (ctl) {
        if (ctl.setDisabled) { ctl.setDisabled(val); }
        else if (ctl.disabled != null) { ctl.disabled = val; }
    }
}

function validateMiddleForm() {
    var p = {
        ErrDepId: 'errDepMid', ErrDestId: 'errDestMid', ErrDateId: 'errDateMid',
        DepCityId: 'tbDepMid', DestCityId: 'tbDestMid', DepIataId: 'tbDepIataMid', DestIataId: 'tbDestIataMid',
        TrainCheckId: 'chkTrainMid', FlightCheckId: '', BusCheckId: 'chkBusMid', FerryCheckId: 'chkFerryMid',
        DepartDateId: 'dtDepartMid', ReturnDateId: 'dtReturnMid', OnewayRadioId: 'optOneWayMid',
        AdultsId: 'ddAdultsMid', ChildrenId: 'ddChildrenMid', InfantsId: 'ddInfantsMid', CurrencyId: 'ddCurrencyMid',
		BusinessCheckId: '', InclNearbyDep: 'chkDepNearbyMid', InclNearbyDest: 'chkDestNearbyMid'
    };
    activeTable = "tbFlightSearch";
    submitSearchForm(p);
}
function middleDateChanged() {
    calendarChanged('ddDepDayMid', 'ddDepMonthMid', 'dtDepartMid', 'ddRetDayMid', 'ddRetMonthMid', 'dtReturnMid');
}

