//-----------------------------------------------------------------------------
//Module      :   AdvSearch.js
//Created By  :   Vinod Joseph
//Created On  :   16th Jan 2007
//Description :   javascript functions used by advanced search page.
//				  a lot of functionality is taken from Home.js and DateFunctions.js
//-----------------------------------------------------------------------------
//Modification History:
//-----------------------------------------------------------------------------
//SNo    Who     Date            Description
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------

function ValidateAdvSearch()
{
	var errMessage = "";
	var obj;
	var HotelOnly = document.getElementById('rbtnHotel').checked;
	if(!HotelOnly)
	{
		obj = document.getElementById('txtFrom');
		if(obj.value.length == 0)		errMessage = errMessage + ', From City/Airport';
		else if(obj.value == "")		errMessage = errMessage + ', From City/Airport';
		
		var res = SwainTours.AdvSearch.CheckIATA(obj.value);
		if(res == null)			{ alert("Please select a valid From IATA Code"); return false; }
		if(res.value == null)	{ alert("Please select a valid From IATA Code"); return false; }
		if(res.value != 1)		{ alert("Please select a valid From IATA Code"); return false; }
	}
	
	obj = document.getElementById('txtTo');
	if(obj.value.length == 0)		errMessage = errMessage + ', To City/Airport';
	else if(obj.value == "")		errMessage = errMessage + ', To City/Airport';
	var res = SwainTours.AdvSearch.CheckIATA(obj.value);
	if(res == null)			{ alert("Please select a valid To IATA Code"); return false; }
	if(res.value == null)	{ alert("Please select a valid To IATA Code"); return false; }
	if(res.value != 1)		{ alert("Please select a valid To IATA Code"); return false; }
	
	if(errMessage.length > 0)
	{
		alert("Please select the" + errMessage.substring(1));
		return false;
	}
	
	var objDDay		= document.getElementById('ddlCheckInDay');
	var objDMonth	= document.getElementById('ddlCheckInMonth');
	var retInt		= DateValidate(objDDay[objDDay.selectedIndex].value, objDMonth[objDMonth.selectedIndex].value);
	if(retInt > 27)
	{
		alert('Please select a valid CheckIn Date.');
		return false;
	}
	
	var objADay		= document.getElementById('ddlCheckOutDay');
	var objAMonth	= document.getElementById('ddlCheckOutMonth');
	retInt			= DateValidate(objADay[objADay.selectedIndex].value, objAMonth[objAMonth.selectedIndex].value);
	if(retInt > 27)
	{
		alert('Please select a valid CheckOut Date.');
		return false;
	}
	
	objDDay		= objDDay[objDDay.selectedIndex].value;
	objDMonth	= objDMonth[objDMonth.selectedIndex].value;
	var dtDeparture	= new Date();
	dtDeparture.setDate(1);
	dtDeparture.setFullYear(Number(objDMonth.substring(0, objDMonth.indexOf("-"))));
	dtDeparture.setMonth(Number(objDMonth.substring(objDMonth.indexOf("-") + 1, objDMonth.length)) - 1);
	dtDeparture.setDate(Number(objDDay));
	
	objADay		= objADay[objADay.selectedIndex].value;
	objAMonth	= objAMonth[objAMonth.selectedIndex].value;
	var dtArrival	= new Date();
	dtArrival.setDate(1);
	dtArrival.setFullYear(Number(objAMonth.substring(0, objAMonth.indexOf("-"))));
	dtArrival.setMonth(Number(objAMonth.substring(objAMonth.indexOf("-") + 1, objAMonth.length)) - 1);
	dtArrival.setDate(Number(objADay));
	
	if(CompareDatesOnly(dtArrival, dtDeparture) <= 0)
	{
		alert("CheckOut date cannot be before or same as CheckIn date.");
		return false;
	}
	//IMP: set hidden date fields
	document.getElementById('hdnCheckInDate').value = dtDeparture.getDate() + " " + GetMonthString(dtDeparture.getMonth()) + " " + dtDeparture.getFullYear();
	document.getElementById('hdnCheckOutDate').value = dtArrival.getDate() + " " + GetMonthString(dtArrival.getMonth()) + " " + dtArrival.getFullYear();
	
	obj		= document.getElementById('ddlAdults');
	retInt	= Number(obj[obj.selectedIndex].value);
	obj		= document.getElementById('ddlChildren');
	retInt	= retInt + Number(obj[obj.selectedIndex].value);
	if(retInt > 4)
	{
		alert("Total travelling pax cannot exceed 4.");
		return false;
	}
	
	var dtToday	= new Date();
	dtToday.setDate(dtToday.getDate());
	if(CompareDatesOnly(dtToday, dtDeparture) != -1)
	{
		alert("Please select a CheckIn date after today.");
		return false;
	}

	if(!HotelOnly)
	{
		if(!ValidateFlightData(dtDeparture, dtArrival))
			return false;
	}
	document.getElementById('homedisplay').style.visibility = "hidden";
	document.getElementById('waitdisplay').style.visibility = "visible";
	document.getElementById('waitdisplay').style.display = "block";
	setTimeout("document.getElementById('imgHiddenWait').src = 'images/loader.gif';",10); 
	setTimeout("document.getElementById('SetImage').style.backgroundImage = \"url('images/WaitPic.jpg')\";",10); 
	return true;
}

function ValidateFlightData(CheckInDate, CheckOutDate)
{
	var objDDay		= document.getElementById('ddlDepartDate');
	var objDMonth	= document.getElementById('ddlDepartMonth');
	var retInt		= DateValidate(objDDay[objDDay.selectedIndex].value, objDMonth[objDMonth.selectedIndex].value);
	if(retInt > 27)
	{
		alert('Please select a valid Departure Date.');
		return false;
	}
	
	var objADay		= document.getElementById('ddlReturnDate');
	var objAMonth	= document.getElementById('ddlReturnMonth');
	retInt			= DateValidate(objADay[objADay.selectedIndex].value, objAMonth[objAMonth.selectedIndex].value);
	if(retInt > 27)
	{
		alert('Please select a valid Return Date.');
		return false;
	}
	
	objDDay		= objDDay[objDDay.selectedIndex].value;
	objDMonth	= objDMonth[objDMonth.selectedIndex].value;
	var dtDeparture	= new Date();
	dtDeparture.setDate(1);
	dtDeparture.setFullYear(Number(objDMonth.substring(0, objDMonth.indexOf("-"))));
	dtDeparture.setMonth(Number(objDMonth.substring(objDMonth.indexOf("-") + 1, objDMonth.length)) - 1);
	dtDeparture.setDate(Number(objDDay));
	
	objADay		= objADay[objADay.selectedIndex].value;
	objAMonth	= objAMonth[objAMonth.selectedIndex].value;
	var dtArrival	= new Date();
	dtArrival.setDate(1);
	dtArrival.setFullYear(Number(objAMonth.substring(0, objAMonth.indexOf("-"))));
	dtArrival.setMonth(Number(objAMonth.substring(objAMonth.indexOf("-") + 1, objAMonth.length)) - 1);
	dtArrival.setDate(Number(objADay));
	
	if(CompareDatesOnly(dtArrival, dtDeparture) <= 0)
	{
		alert("Return date cannot be before or same as Departure date.");
		return false;
	}
	
	var dtToday	= new Date();
	dtToday.setDate(dtToday.getDate()+5);
	if(CompareDatesOnly(dtToday, dtDeparture) != -1)
	{
		alert("Please select a flight departure date 7 days from today.");
		return false;
	}


	CheckInDate.setDate(CheckInDate.getDate()+5);

	if(CompareDatesOnly(CheckInDate,CheckOutDate) == 1)
	{
		alert("A journey must have a minimum of 5 nights accomodation along with flights.");
		//	alert("For journeys less than 2 days, use Advanced search and specify time preferences to avoid clash in flight timings.");
		return false;
	}

	


	if(document.getElementById('chkReturn').checked)
	{
		if(CompareDatesOnly(dtDeparture, CheckInDate) == 1)
		{
			alert("CheckIn date cannot be before Departure date.");
			return false;
		}
		
		if(CompareDatesOnly(CheckOutDate, dtArrival) == 1)
		{
			alert("Return date cannot be before CheckOut date.");
			return false;
		}
	}



	//IMP: set hidden date fields
	document.getElementById('hdnDepartDate').value = dtDeparture.getDate() + " " + GetMonthString(dtDeparture.getMonth()) + " " + dtDeparture.getFullYear();
	document.getElementById('hdnReturnDate').value = dtArrival.getDate() + " " + GetMonthString(dtArrival.getMonth()) + " " + dtArrival.getFullYear();
	return true;
}

var clickcnt = 0;
var stopOnBlur = 0;
function AdvCheckFocus(_i1, _i3) {  // _i1: iata dd field, _i3 - div field
	
	if(document.getElementById(_i3).style.display == "block")
	{
		document.getElementById(_i1).focus();
	}
	if(stopOnBlur == 0)
	{
		if(document.getElementById(_i3).style.display == "block")
		{
			document.getElementById(_i1).focus();
		}
	}
	
	if(stopOnBlur == 1) stopOnBlur = 0;
	if(stopOnBlur == 2) stopOnBlur = 0;
	return true;
}

function AdvCheckFocus1(_i1, _i3) {  // _i1: iata dd field, _i3 - div field
	if(document.getElementById(_i3).style.display == "block")
	{
		document.getElementById(_i1).focus();
		document.getElementById(_i1).selectedIndex = 0;
	}
}

function AdvShowDiv(divName)
{
	document.getElementById(divName).style.display == "block";
}

function AdvGetIATAList(_a1, _b1, _i1, _i2) { // _a1 - text field, _b1 - keyevent, _i1: iata dd field, _i2: iata div field
	var cc;
	if(stopOnBlur == 2)
	{
		stopOnBlur = 0;
		return;
	}
	if(_b1){
		cc=_b1.charCode||_b1.keyCode||_b1.which;
		if(cc==40||cc==57386) {
			if(document.getElementById(_i2).style.display == "block") {
				if(stopOnBlur == 0)	stopOnBlur = 1;
				document.getElementById(_i1).focus();
				document.getElementById(_i1).selectedIndex = 0;
				return;
			}
			stopOnBlur = 1;
		}
	}
	if(_a1.value.length < 3) return;
	var character = String.fromCharCode(cc);
	var res = SwainTours.AdvSearch.AjaxGetIATA(_a1.value, character);
	var lstIATA = document.getElementById(_i1);
	lstIATA.length = 0;
	if(res == null) { document.getElementById(_i2).style.display="none"; return; }
	if(res.value == null) { document.getElementById(_i2).style.display="none"; return; }
	if(res.value.length == 0) { document.getElementById(_i2).style.display="none"; return; }
	
	for(i = 0;i < res.value.length;i++) {
		lobj = new Option();
		lobj.text	= res.value[i].IATACode;
		lobj.value	= res.value[i].IATAId;
		lstIATA.options.add(lobj);
	}
	
	if(document.getElementById(_i2).style.display = "none") document.getElementById(_i2).style.display = "block";
	if(_i2 == 'divFrom')
		document.getElementById('divTo').style.display = "none";
	else
		document.getElementById('divFrom').style.display = "none";
}

function AdvSelectIATA(_a1, _b1, bi, _i1, _i2) { // _a1 - text field, _b1 - keyevent, bi: bypass field, _i1: iata dd field, _i2: iata div field
	if(bi == 1)	{
		document.getElementById(_a1).value = _i1.value;
		stopOnBlur = 2;
		document.getElementById(_a1).focus();
		document.getElementById(_i2).style.display = "none";
		return true;
	}
	
	if(_b1){
		var cc=_b1.charCode||_b1.keyCode||_b1.which;
		
		if( (cc==13) || (cc==9) ) {
			document.getElementById(_a1).value = _i1.value;
			document.getElementById(_i2).style.display = "none";
			stopOnBlur = 2;
			document.getElementById(_a1).focus();
			return false;
		}
		if(cc==27) {
			document.getElementById(_i2).style.display = "none";
			stopOnBlur = 2;
			document.getElementById(_a1).focus();
			return false;
		}
		else if(cc==8) return false;
		if( (cc==38||cc==57385) && (_i1.selectedIndex == 0) ) {
			if(clkcnt >= 0) {
				stopOnBlur = 1;
				document.getElementById(_a1).focus();
				clkcnt = 0;
			}
			else
				clkcnt++;
		}
		else
			clkcnt = 0;
	}
}