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 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) {
		if (sender == ddDepDay) { depDate.setMonth(depDate.getMonth() + 1); }
		else { 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(btn) {
    dismissAlertMethod();
	if(abortSuggest){ abortSuggest(); }

	var errAptDep = getElement('errAptDep');
	var errAptDest = getElement('errAptDest');
	var errDateReturn = getElement('errDateReturn');

	var depField = getElement('tbAptDep');
	var destField = getElement('tbAptDest');
	var depIATAField = getElement('tbDepIata');
	var destIATAField = getElement('tbDestIata');
	var currency = getElement('ddCurrency');

	var chkFlightField = getElement('chkFlight');
	var chkTrainField = getElement('chkTrain');
	var chkBusField = getElement('chkBus');
	var chkFerryField = getElement('chkFerry');

	var chkBusinessClassField = getElement('cbBusinessClass');

	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: "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: "right" });
	}
	else{ errAptDest.innerHTML = ''; }

	if( (depIATAField.value != '' && depIATAField.value == destIATAField.value) ||
		destField.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 depDateElems = getElement('dtDepart').value.split('-');
	var retDateElems = getElement('dtReturn').value.split('-');
	var blnOneWay = getElement('optOneWay').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: "top-left" });
		}
	}

	var ddInfants = getElement('ddInfants');
	var ddAdults = getElement('ddAdults');
	if(ddInfants.value > ddAdults.value){				
		isError = true;
		alertMethod(TXT_INVALID_NO_INFANTS, { anchor: ddInfants, anchorPos: "right" });			
		ddInfants.focus();
	}

	if (isError) { return false; }

	if (btn && TXT_SEARCHING.length > 0) { btn.firstChild.innerHTML = TXT_SEARCHING.toUpperCase(); }

	var depIATA = getElement('tbDepIata').value;
	var destIATA = getElement('tbDestIata').value;

	var URL = FLIGHTS_FOLDER + (depIATA.length == 0 || destIATA.length == 0 ? 'preflysearch.aspx' : 'flysearch.aspx');
	URL += '?depcity=' + encodeURIComponent(getElement('tbAptDep').value);
	URL += '&depIATA=' + depIATA;
	URL += '&destIATA=' + destIATA;
	URL += '&destcity=' + encodeURIComponent(getElement('tbAptDest').value);
	URL += '&depart=' + getElement('dtDepart').value;
	URL += '&return=' + (getElement('optOneWay').checked ? '' : getElement('dtReturn').value);
	URL += '&adults=' + getElement('ddAdults').value;
	URL += '&infants=' + getElement('ddInfants').value;
	URL += '&children=' + getElement('ddChildren').value;
	URL += '&flway=' + (getElement('optOneWay').checked ? 'True' : 'False');
	URL += '&flight=' + (chkFlightField ? chkFlightField.checked : 'true');
	if(currency){ URL += '&currency=' + currency.value; }

	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;
	
	// Mashup Extra redirects:
	MashupRedirects();
	
	var chkDepNearbyField = getElement('chkDepNearby');
	var chkDestNearbyField = getElement('chkDestNearby');
	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=/;';
	}
    	
	// break out of frame
	if(IsInFrame()){ top.location.href = URL; }
	else { window.location.href = URL; }
	
	return false;
}

function IsInFrame(){
	if(typeof top != 'undefined' && top.location && top.location.href.indexOf("App_Test") < 0){ return true; }
	else { return false; }
}

function MashupRedirects(){
    var checkboxes = window.document.forms[0].cblExtraDeepLinks;
	if(checkboxes == null){ return; }

    var departure = getElement('tbDepIata').value;
    if(departure == ""){ departure = getElement('tbAptDep').value; }
    var destination = getElement('tbDestIata').value;
    if(destination == ""){ destination = getElement('tbAptDest').value; }
	var adults = getElement('ddAdults').value;
	var children = getElement('ddChildren').value;
	var infants = getElement('ddInfants').value;
	var depDate = getElement('dtDepart').value;
	var retDate = (getElement('optOneWay').checked ? '' : getElement('dtReturn').value);

	if(checkboxes.nodeName != null){
		PopupRedirect(checkboxes.value, departure, destination, adults, children, infants, depDate, retDate);
	}
	else{
		for(var i = 0; i < checkboxes.length; i++){
			if(checkboxes[i].checked){
				PopupRedirect(checkboxes[i].value, departure, destination, adults, children, infants, depDate, retDate);
			}
		}
	}
}

function PopupRedirect(opid, departure, destination, adults, children, infants, depDate, retDate){
    var path = ROOT_FOLDER + "redirect.aspx";
    if(typeof REDIRECT_PATH != 'undefined'){ path = REDIRECT_PATH; }
	var URL = path;
	URL += "?opid=" + opid + "&url=" +
		"&DepartAirport=" + encodeURIComponent(departure) +
		"&DestinationAirport=" + encodeURIComponent(destination) +
		"&Adults=" + adults +
		"&Children=" + children +
		"&Infants=" + infants +
		"&DepartureDate=" + depDate +
		"&ReturnDate=" + retDate;
	
	// A Popup blocker may stop this.
	var popupType = "scrollbars,location,resizable,status,toolbar,menubar,width=" + screen.width / 2 + ",height=" + screen.height / 2;
	var winPopup = window.open(URL, "_blank" + opid, popupType);
	if(winPopup != null){
        // Pop-under
        winPopup.blur();
    }
}

// FORM VALIDATION
function validateDirForm(btn) {
    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: "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: "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; }

	if (btn && TXT_SEARCHING.length > 0) { btn.firstChild.innerHTML = TXT_SEARCHING.toUpperCase(); }

	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 += trim(depIATAField.value) + "/";
		URL += trim(destIATAField.value) + "/";
		if(monthField.value != '0'){ URL += encodeURIComponent(monthField.value) + '/'; }
		URL += fileName + '.htm';
	}
	else{
		URL = FLIGHTS_FOLDER + 'directoryresults.aspx';
		URL += '?aptDep=' + trim(depIATAField.value);
		URL += '&aptDest=' + trim(destIATAField.value);
		URL += '&depcity=' + encodeURIComponent(trim(depField.value));
		URL += '&destcity=' + encodeURIComponent(trim(destField.value));

		if(monthField.value != '0')
			URL += '&month=' + encodeURIComponent(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;
}

// FORM VALIDATION
function validateByPriceForm(btn) {
    dismissAlertMethod();
	var depField = getElement('tbAptDep3');
	var depIATAField = getElement('tbDepIata3');
	var errAptDep = getElement('errAptDep3');
	var continentField = getElement('ddContinents');
	var countryField = getElement('ddCountries');
	var blnOneWay = getElement('optOneWay3').checked;
	var chkDateRange = getElement('chkDateRange');
	var maxPrice = getElement('tbMaxPrice');
	var currency = getElement('ddCurrency3');
	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: "left" });
		return false;
	}

	if (btn && TXT_SEARCHING.length > 0) { btn.firstChild.innerHTML = TXT_SEARCHING.toUpperCase(); }

	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(depCity) + "/"; }

	URL += continentField.value + (countryField.value != '' ? '-' + countryField.value : '') + "/";
	if(blnOneWay){ URL += TXT_ONEWAY.replace(regex, '-') + "/"; }

	var maxPriceVal = (maxPrice ? trim(maxPrice.value) : '');
	if(maxPriceVal.length > 0){
		URL += maxPriceVal + "/";
	}

	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 ExpandPanel(id, imgID, onImg, offImg){
	var panel = getElement(id);
	var image = getElement(imgID);

	if(panel.style.display == 'none'){
		panel.style.display = '';
		image.src = offImg;
	}
	else{
		panel.style.display = 'none';
		image.src = onImg;
	}
}

function toggleDisplay(elem, id, onCss, offCss){
	if(typeof(elem) == 'string'){ elem = getElement(elem); }
	var panel = getElement(id);
	if(panel.style.display == 'none'){
		panel.style.display = '';
		elem.className = offCss;
	}
	else{
		panel.style.display = 'none';
		elem.className = onCss;
	}
}


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 SetElemVisibility(id, visible){
	var elem = getElement(id);
	if(elem){ elem.style.display = (visible ? '' : 'none'); }
}

function LoadSuggest(item,iata,lang,img,sendFunc,widthScale){
	if(!widthScale){ widthScale = 1.8; }
	if(typeof item == 'string'){ item = getElement(item); }
	InstallAC(document.CFLiveSearch, item, getElement(iata), LANG_ROOT_PATH + 'AJAX/SuggestResult.aspx', lang, getElement(img), sendFunc, widthScale);
}

function continentListChanged(elem, targetId, selectedContinent){
	if(elem){
		if (selectedContinent == '') {
			elem.selectedIndex -= 1;
			updateDropdownValue(elem);
		}
		fetchCountries(targetId, elem.value);
	}
}

function FocusItem(elem){
	elem.focus();
	elem.select();
}

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;
	}

	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) {
		    dismissAlertMethod();
		    alertMethod(TXT_AMOUNT_TOO_LARGE, { anchor: ctl, anchorPos: "left" });
		    evt.returnValue = false;
		    return false;
		}
		return true;
	}
		
	evt.returnValue = false;
	return false;
}

// Trim leading/trailing whitespace off string
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; }
	}
}

