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 getElement = function (id) { return (document.all ? document.all[id] : document.getElementById(id)); };

function preloadImages() {
	var d=document; if(d.images){ if(!d.p) d.p=[];
	var i,j=d.p.length,a=preloadImages.arguments; for(i=0; i<a.length; i++)
	if(a[i].indexOf('#')!=0){ d.p[j]=new Image; d.p[j++].src=a[i];}}
}

function LoadSuggest(item,iata,lang,img,sendFunc,scale){
	InstallAC(document.forms[0], item, getElement(iata), LANG_ROOT_PATH + 'AJAX/SuggestResult.aspx', lang, getElement(img), sendFunc, scale);
}

function ShowHidePanel(object) {
	var ctrl = getElement(object);
	if(ctrl.style.display == 'none')
		ctrl.style.display = '';
	else
		ctrl.style.display = 'none';
}

function toggleControl(object, displayState) {
	if(displayState == 'show')
		getElement(object).style.display = '';
	else
		getElement(object).style.display = 'none';
}

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 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 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'
	};	
	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, 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;
}

function FocusItem(elem){
	elem.focus();
	elem.select();
}

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 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 setDisabled(ctl, val){
	if(ctl){
		if(ctl.setDisabled){ ctl.setDisabled(val); }
		else if(ctl.disabled != null){ ctl.disabled = val; }
	}
}

