// Some globals
var trimmedOBdep;
var trimmedOBarr;
var trimmedIBdep;
var trimmedIBarr;
var depapt = new Array();
var arrapt = new Array();
var directonly;

$(document).ready(function(){
	// Default to return flights
	$("[name=radioval]").attr("checked", false);
	$("#return").attr("checked", true);

	// Popup calender initialization
	$("#DepDate").datepicker({  
		showOn: 'both', 
		buttonImage: 'images/calendar2.gif', 
		buttonImageOnly: true, 
		showAnim: null,
		duration: '',
		buttonText: '-',
		minDate: 0 
	});
	$("#ArrDate").datepicker({  
		showOn: 'both', 
		buttonImage: 'images/calendar2.gif', 
		buttonImageOnly: true, 
		showAnim: null,
		duration: '',
		minDate: 1,
		buttonText: '-',
		beforeShow: function() { getMinimumDays(); }
	});
	
	// Show tooltips
	$('input,.ttip,label,.stdinput').tooltip({ 
		track: true, delay: 0, showURL: false, showBody: " - ", fade: 0 
	});

	// Autocomplete initilialization
	$(".citySelect")
		.autocomplete(airports, {
			autoFill: false,
			selectFirst: true,
			max: 18,
			mustMatch: false,
			matchContains: true,
			scrollHeight: 220,
			width: 190
		})
		.result(function() {
		  completeAutofill();
		  if ($(this).attr("id") == "OBdep")
			$("#OBarr").focus();
		  if ($(this).attr("id") == "OBarr") 
			$("#DepDate").focus();
	});

	// Attach actions to the radio button options
	$("#return").change(function() {
		showFlights();
		showReturn();
	});
	$("#oneway").change(function() {
		showFlights();
		hideReturn();
	});
	$("#multicity").change(function() {
	   top.location.href="http://www.wwgbe.com/eres/quicksearch-multi.aspx?lang=" + lang + "&agencyID=" + agencyID;
	});
	$("#hotelsradio").change(function() {
	   hideFlights();
	});
	
	// Fixes for our friend IE6
	var isMSIE = /*@cc_on!@*/false;
	if (isMSIE) { 
		//$('.pngfx').ifixpng();
		$('#carhover').hover(function() { $('#tab-cars').hide(); $('#tab-cars-hover').show(); } , function () { $('#tab-cars-hover').hide(); $('#tab-cars').show();});
		$('#hotelhover').hover(function() { $('#tab-hotels').hide(); $('#tab-hotels-hover').show(); } , function () { $('#tab-hotels-hover').hide(); $('#tab-hotels').show();});
		$('#flighthover').hover(function() { $('#tab-flights').hide(); $('#tab-flights-hover').show(); } , function () { $('#tab-flights-hover').hide(); $('#tab-flights').show();});
		$('#flighthotelhover').hover(function() { $('#tab-flights-hotels').hide(); $('#tab-flights-hotels-hover').show(); } , function () { $('#tab-flights-hotels-hover').hide(); $('#tab-flights-hotels').show();});
	}
});

function getMinimumDays() { 
	try	{ $("#ArrDate").datepicker("option", "minDate", $("#DepDate").datepicker("getDate")); }
	catch (e) { }
}

function showReturn() {
	$("#adatecol, #atimecol").fadeIn();
}
function hideReturn() {
	$("#adatecol, #atimecol").fadeOut();
}

function hideFlights() {
	$("#flightstable").hide();
	$("#hotelstable").show();
}

function showFlights() {
	$("#hotelstable").hide();
	$("#flightstable").show();
}

/*
Begin form processing scripts.
The following scripts process the submission form and error check before sending.
*/

//Return flights auto fill the inbound destinations.
function completeAutofill() {
	if ($('[name=radioval]:checked').val() != "M") {
		$("#IBarr").val($("#OBdep").val());
		$("#IBdep").val($("#OBarr").val());
	}
}

// Generic trimming functions to pull the airport code out of city names
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

// Trim the city names to include only the three character airport code for form submission,
// then assign the trimmed airport codes to hidden fields.
function trimCities() {

	var arr = $("#OBarr").val();
	var n = arr.indexOf('(');
	var arrn = "";
	
	if(n>0) {
		arrn=arr.substring(n+1,arr.length-1);
		$("#OBarrvl").val(trim(arrn,' '));
	} else {
		$("#OBarrvl").val(arr);
	}

	arr = $("#OBdep").val();
	n = arr.indexOf('(');
	if(n>0) {
		arrn=arr.substring(n+1,arr.length-1);
		$("#OBdepart").val(trim(arrn,' '));
	} else {
		$("#OBdepart").val(arr);
	}
	
	arr = $("#IBdep").val();
	n = arr.indexOf('(');
	if(n>0) {
		arrn=arr.substring(n+1,arr.length-1);
		$("#IBdepart").val(trim(arrn,' '));
	} else {
		$("#IBdepart").val(arr);
	}
	
	arr = $("#IBarr").val();
	n = arr.indexOf('(');
	if(n>0) {
		arrn=arr.substring(n+1,arr.length-1);
		$("#IBarrvl").val(trim(arrn,' '));
	} else {
		$("#IBarrvl").val(arr);
	}
	return true;
}

function checkDepartAndArrivalDates() {
	var departureDate = $("#DepDate").val();
	var arrivalDate = $("#ArrDate").val();
	
	
	if (departureDate == null || departureDate == "") {
		createDialog($("#DepDate"), translations[lang].qsEnterDepDate, translations[lang].qsDateError);
		return false;
	}
	if ((arrivalDate == null || arrivalDate == "") && ($('[name=radioval]:checked').val() != "O")) {
		createDialog($("#ArrDate"), translations[lang].qsEnterArrDate, translations[lang].qsDateError);
		return false;
	}
	
	try {
		departureDate = $.datepicker.parseDate('mm/dd/yy', departureDate);
	} catch (e) {
		if (e == "Invalid date") { 
			createDialog($("#DepDate"), translations[lang].qsDepDateInvalid, translations[lang].qsDateError);
		} else {
			createDialog($("#DepDate"), translations[lang].qsInvalidDateFormat, translations[lang].qsDateError);
		}
		return false;
	}
	
	try {
		arrivalDate = $.datepicker.parseDate('mm/dd/yy', arrivalDate);
	} catch (e) {
		if (e == "Invalid date") { 
			createDialog($("#ArrDate"), translations[lang].qsArrDateInvalid, translations[lang].qsDateError);
		} else {
			createDialog($("#ArrDate"), translations[lang].qsInvalidDateFormat, translations[lang].qsDateError);
		}
		return false;
	}
	
	if ( (departureDate > arrivalDate) && ($('[name=radioval]:checked').val() != "O")) {
		createDialog($("#ArrDate"), translations[lang].qsDatesConflict, translations[lang].qsDateError);
		return false;
	}
	return true;
}

function checkTotPax() {
	if (parseInt($("#nbinfants").val()) > parseInt($("#nbadults").val())) {
		createDialog($("#nbinfants"), translations[lang].qsPaxAdultsInfantsError, translations[lang].qsPaxErrorTitle);
		return false;
	}
	if ((parseInt($("#nbadults").val()) + parseInt($("#nbchilds").val())) > 8) {
		createDialog($("#nbadults"), translations[lang].qsPaxAdultsChildrenError, translations[lang].qsPaxErrorTitle);
		return false;
	}
	if (parseInt($("#nbchilds").val()) > (parseInt($("#nbadults").val()) *2)) {
		createDialog($("#nbadults"), translations[lang].qsPaxTotalError, translations[lang].qsPaxErrorTitle);
		return false;
	}
	if ((parseInt($("#nbchilds").val()) + parseInt($("#nbinfants").val())) > (parseInt($("#nbadults").val()) *2)) {
		createDialog($("#nbadults"), translations[lang].qsPaxTotalError, translations[lang].qsPaxErrorTitle);
		return false;
	}
	if ((parseInt($("#nbchilds").val()) + parseInt($("#nbinfants").val()) + parseInt($("#nbadults").val())) > 9) {
		createDialog($("#nbadults"), translations[lang].qsPaxTotalError, translations[lang].qsPaxErrorTitle);
		return false;
	}

	return true;
}

// Requires $ UI with dialog.
function createDialog(element, errorText, errorTitle) {
	if (!errorTitle) 
		errorTitle = "Error";
		
	// If no element is passed for the alert, put the box somwhere in the middle of the viewport.
	var offsetX = "45%";
	var offsetY = "50%";
	var pageScroll = getPageScroll();
	var nonbubble = true;
	
	//For positioning the popup box, use offsets of the passed element.
	if (element != null) {
		var offsetBox = element;
		offsetX = offsetBox.offset().left + 75 - pageScroll[0];
		offsetY = offsetBox.offset().top - 8 - pageScroll[1];
		nonbubble = false; 
	}

	//Custom alert dialog initilialization 
	$('#dialog').dialog({
		autoOpen: false,
		title: errorTitle,
		buttons: { "Ok": function() { $(this).dialog("close"); } },
		modal: true,
		draggable: false,
		height: 140,
		bgiframe: true,
		position: [offsetX,offsetY]
	});
	
	if (element != null) {
		$('#dialog').dialog({
			close: function(event,ui) { element.focus(); }
		});
	}
			
	$('#dialog').html(errorText);
	
	if (nonbubble) {
		$('#dialog').dialog( { dialogClass: 'nonbubble' } );
	}
	$('#dialog').dialog('open');
	
	var isMSIE = /*@cc_on!@*/false;
	if (isMSIE) { 
		window.scrollTo(1,1);
	}
}

// getPageScroll() by quirksmode.com
function getPageScroll() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;
    }
    return new Array(xScroll,yScroll);
}

function langSelect() {
	var lang = $("#langBox").val();
	top.location.href= "index.aspx?lang=" + lang + "&agencyID=" + agencyID;
}

function langSelect2() {
	var lang = $("#langBox").val();
	top.location.href= "index-flights+hotels.aspx?lang=" + lang + "&agencyID=" + agencyID;
}

// Check all field inputs for validity and, if correct, redirect the user.
function checkWholeForm() {

	directonly = $('#directOnly').attr('checked')?1:0;

	if (!checkTotPax())
		return false;
	
	if ($("#OBdep").val() == "") {
		createDialog($("#OBdep"), translations[lang].qsDepLocationError, translations[lang].qsLocationsError);
		return false;
	}
	
	if ($("#OBarr").val() == "") {
		createDialog($("#OBarr"), translations[lang].qsArrLocationError, translations[lang].qsLocationsError);
		return false;
	}
	
	
	if (!checkDepartAndArrivalDates()) 
		return false;
		
	// Trim the city names to get airport codes
	var fullcity = "";
	var airportCode = "";
	var n = 0;
	
	fullcity = $("#OBdep").val();
	n = fullcity.indexOf('(');
	if (n>0) {
		airportCode = fullcity.substring(n+1,fullcity.length-1);
		trimmedOBdep = trim(airportCode,' ');
	} else { 
		trimmedOBdep = fullcity.toUpperCase();
	}
	
	fullcity = $("#OBarr").val();
	n = fullcity.indexOf('(');
	if (n>0) {
		airportCode = fullcity.substring(n+1,fullcity.length-1);
		trimmedOBarr = trim(airportCode,' ');
	} else { 
		trimmedOBarr = fullcity.toUpperCase();
	}
	
	fullcity = $("#IBdep").val();
	n = fullcity.indexOf('(');
	if (n>0) {
		airportCode = fullcity.substring(n+1,fullcity.length-1);
		trimmedIBdep = trim(airportCode,' ');
	} else { 
		trimmedIBdep = fullcity.toUpperCase();
	}
	
	fullcity = $("#IBarr").val();
	n = fullcity.indexOf('(');
	if (n>0) {
		airportCode = fullcity.substring(n+1,fullcity.length-1);
		trimmedIBarr = trim(airportCode,' ');
	} else { 
		trimmedIBarr = fullcity.toUpperCase();
	}
	
	// Autocomplete fix to stop it from blanking out the fields in firefox
	// when the user hits the back button.
	$(".citySelect").removeAttr("autocomplete");
	
	// Redirect the user
	var newURL = "http://www.wwgbe.com/eres/faresdisp.aspx?OBDep=" + trimmedOBdep +
				"&OBArr="		+ trimmedOBarr +
				"&IBDep="		+ trimmedIBdep +
				"&IBArr="		+ trimmedIBarr +
				"&Airline="		+ $("#Airline").val() +
				"&DepDate="		+ $("#DepDate").val() +
				"&ArrDate="		+ $("#ArrDate").val() +
				"&FareType="	+ $("#FareType").val() +
				"&radioval="	+ $('[name=radioval]:checked').val() +
				"&LowestFares="	+ "" +
				"&nbadults="	+ $("#nbadults").val() +
				"&nbchilds="	+ $("#nbchilds").val() +
				"&nbinfants="	+ $("#nbinfants").val() +
				"&OBtime="		+ $("#OBtime").val() +
				"&IBtime="		+ $("#IBtime").val() +
				"&directOnly="	+ directonly +
				"&lang="		+ lang +
				"&agencyID="		+ agencyID;
	
	top.location.href=newURL;

	return false;
}