// Script functions for search page
var ERROR;
var PAX;
var promodates = null;

// sets search boxes with default parameters
function setUpPromoSearchBox(){
	ERROR = new Errors();
	PAX = new PromoPax(document.promosearch,ERROR);
	clearErrors();
	var pForm = document.promosearch;

	var prefRegs = $("input:hidden[name='p_reg']").val();
	if( pForm ){
		//Initialize Type ahead
		var sgFrame = document.getElementById('suggestFrame');
		if( prefRegs != null && prefRegs != 'null'
			&& prefRegs != '' && prefRegs.toUpperCase() != 'ALL' ){
			loadPromoDests(pForm.destCity1, prefRegs, $("input:hidden[name='p_pdest']").val());
		}
		else{
			initDestAirportSuggest(1,
				pForm.destCity1Display, pForm.destCity1,
				document.getElementById('ssDest1SuggestDiv'), sgFrame);	
		}
		initDeptAirportSuggest(1,
				pForm.gatewayDisplay, pForm.gateway, 
				document.getElementById('ssGatewaySuggestDiv'), sgFrame);
	}
	// Preset dates
	// Start date: 21 days from today
	// End date: 7 days from start date

	/* Tat P: 11/2/10 - If cookie value is found, do not preset date
	unless cookie value is in the past.
	*/

	var currentTime = new Date();

    if (pForm.startDate.value != 'mm/dd/yyyy')
    {
       var cookieDate = new DateUtil();
	   var newdate = cookieDate.toJSDate(pForm.startDate.value);

	   if (cookieDate.dateDifference(currentTime, newdate) > 0)
	   {
   		   var dateUtil = new DateUtil();
		   dateUtil.setDateTo(pForm.startDate,21);
		   dateUtil.setDateTo(pForm.depDate1,7,pForm.startDate.value);
	   }
    }
	else if ( pForm.startDate.value == 'mm/dd/yyyy' )
	{
		var dateUtil = new DateUtil();
		dateUtil.setDateTo(pForm.startDate,21);
		dateUtil.setDateTo(pForm.depDate1,7,pForm.startDate.value);
	}

	PAX.loadChildAges();
	var tog = $("input:hidden[name='p_torig']").val();
	var surl = $("input:hidden[name='p_url']").val();
	var clt = $("input:hidden[name='p_clt']").val();
	if( tog == null || tog == 'null' || tog == ''){
		tog = document.referrer;
	}
	if( surl == null || surl == 'null' || surl == ''){
		surl = document.URL;
	}
	if( clt != null && clt != 'null' && clt != ''){
		$("input:hidden[name='client_Type']").val(clt);
	}
	$("input:hidden[name='trackOrgination']").val(tog);
	$("input:hidden[name='search_URL']").val(surl);
}

// Show Highlighted depart calendar
function showDepartCalendar(){	
	clearErrors();
	var cal_div = document.getElementById("calendarDiv");
	var cal_ifr = document.getElementById("calendarFrame");
	var dtField = document.promosearch.startDate;
	var nxtDtField = document.promosearch.depDate1; 
	var clType = $("input:hidden[name='client_Type']").val();
	getDepartCalendars(cal_div,cal_ifr,dtField,nxtDtField,clType,null);
}
// Show return calendar
function showReturnCalendar(){
	clearErrors();
	var cal_div = document.getElementById("calendarDiv");
	var cal_ifr = document.getElementById("calendarFrame");
	var prvDtField = document.promosearch.startDate;
	var dtField = document.promosearch.depDate1;
	var nxtDtField = document.promosearch.depDate1;
	var clType = $("input:hidden[name='client_Type']").val();
	getReturnCalendars(cal_div,cal_ifr,prvDtField,dtField,nxtDtField,clType,null);
}

//Hides all error messges
function clearErrors(){
	ERROR.hide();
	var errDivs = ["gatewayError","destCity1Error","startDateError","depDate1Error","hotelList0Error","roomCountError","room1PassError","room1ChildAgeErr","room2ChildAgeErr"];
	for( var r = 0; r < errDivs.length; r++ ){	$('#'+errDivs[r]).fadeOut('fast');	}
}

// Validates Search parameters
function validateSearchParameters(){
	clearErrors();
	var pForm = document.forms['promosearch'];
	if( pForm ) {
		if( pForm.gateway.value.length < 1 ){
			ERROR.setInline('gatewayError').add("Select a departure city",true);
			return false;
		}
		if( pForm.destCity1.value.length < 1 ){
			ERROR.setInline('destCity1Error').add("Select a destination city",true);
			return false;
		}
		if( pForm.gateway.value == pForm.destCity1.value ){
			ERROR.setInline('destCity1Error').add("Departure and destination city cannot be the same",true);
			return false;
		}
		if( !validateTravelDates(pForm.startDate,pForm.depDate1,pForm.tripType.value) ){
			return false;
		}
		if( !PAX.validatePax() ){
			return false;
		}
		var spHradio = pForm.hotelChoice0;
		var hlist = pForm.hotelList0;
		if( spHradio && spHradio[1].checked && hlist ){
			var seletedHotel = false;
			for( var y = 0; y < hlist.options.length; y++ ) {
				if( hlist.options[y].selected == true ){seletedHotel = true;break;}
			}
			if( !seletedHotel ){
				ERROR.setInline('hotelList0Error').add("Select a hotel",true);
				return false;
			}
    	}
		return true;
	} else {
		return false;
	}
}


//**********************************************************************
//Name			: validateTravelDates
//Description	: Validates the travel date fields.
//Input			: departInputField:  Departure date input field
//				  returnInputField:  Return date input field
//				  tripType:  type of trip selected
//Output		: True if the travel date values are valid or false if
//				  errors are found.
//**********************************************************************
function validateTravelDates(departInputField, returnInputField, tripType) {	
	var departDate = null;
	var returnDate = null;
  
	//Dates must be valid and in correct format
	if( validateDateSyntax(departInputField, "departure", document.getElementById("startDateError"), "style31")) {
		departDate = parseDateMMDDYYYY(departInputField.value);
	} else {
		return false;
	}
	
	if( validateDateSyntax(returnInputField, "return", document.getElementById("depDate1Error"), "style31")) {
		returnDate = parseDateMMDDYYYY(returnInputField.value);
	} else {
		return false;
	}

	// Dates cannot be the same
	if( departDate.getTime() == returnDate.getTime() ) {
		ERROR.setInline('depDate1Error').add("Departure date and return date cannot be the same",true);
		returnInputField.select();
		return false;
	}

	//Departure date must be earlier than return date
	if( departDate > returnDate ) {
		ERROR.setInline('depDate1Error').add("Return date cannot be earlier than departure date",true);
		returnInputField.select();
		return false;
	}
	var today = new Date();    
	var firstSelectableDate = getDateFromSeed(today, 4);
	var lastSelectableDatePkg = getDateFromSeed(today, 331);
	// Earliest selectable date should be 4 days after current date
	if( departDate < firstSelectableDate ) {
		ERROR.setInline('startDateError').add("Departure date must be at least 4 days in the future",true);
		departInputField.select();
		return false;
	}
	// Air + hotel packages can only be made up to 331 days in advance
	if( tripType != null && tripType != "HL" && departDate > lastSelectableDatePkg) {
		ERROR.setInline('startDateError').add("Flight &amp; Hotel Packages can only be booked up to 331 days in advance",true);
		departInputField.select();
		return false;
	}
	return true;
}

// Toggle trip type options
function toggleTripTypeOptions(ttype){
	clearErrors();
	if( ttype.indexOf('FL') > -1 ){
		$("#ClassRow").css('display','');
	}
	else {
		$("#ClassRow").css('display','none');
	}
}

// Toggle Hotel list
function toggleHotelList(choice){
	clearErrors();
	var pForm = document.forms['promosearch'];
	if( pForm && choice == 'Y' ){
		var destCode = $("select[name='destCity1']").val();
		if( !destCode ){
			destCode = $("input[name='destCity1']").val();
		}
		if( destCode == '' || destCode == "- Select a Destination City -" ){
			ERROR.setInline('destCity1Error').add("Please select a destination city to see hotels",true);
			pForm.hotelChoice0[0].checked=true;
			pForm.destCity1.focus();
			return false;
		}
		var hotelObj = new Hotel();
		if( hotelObj.loadTo(destCode, pForm.hotelList0) ){
			$("#l_hotelList").fadeIn('fast');
		}else{
			pForm.hotelChoice0[0].checked = true;
		}
	} else {
		$("#l_hotelList").fadeOut('fast');
		pForm.hotelChoice0[0].checked=true;
	}
	return true;
}

function roomsChanged(){
	clearErrors();
	PAX.setRooms();
}
function r1aChanged(){
	clearErrors();
	PAX.setR1Adults();
}
function r1cChanged(){
	clearErrors();
	PAX.setR1Child();
}
function r2aChanged(){
	clearErrors();
	PAX.setR2Child();
}
function r2cChanged(){
	clearErrors();
	PAX.setR2ChildAges();
}
