///global variables for reservation validation
var isValid			= true;
var strErrorMsg		= "";
var showAlerts		= false;

function reservationValidation(ctrlPrefix, sender, step, intSiteId, intDealId, strCountryCode)
{
	try
	{
		strErrorMsg = ""
	
		switch(step)
		{
			case "step1":
				// Under 21s cannot proceed with bookings - fail immediately
				if (IsUnder21(ctrlPrefix))
				{
					jAlert(strErrorMsg);
					return false;
				} 
				else 
				{
			
					dateFix(ctrlPrefix, strCountryCode);
					
					
					if(strErrorMsg == "")
					{
						if(showAlerts){ alert('dateFix done ok - next datetime'); }
						validateDateTime(ctrlPrefix, sender, intSiteId, intDealId);
					}
					else
					{
						jAlert(strErrorMsg);
						return false;
					}
				}		
			break;
			case "step2":
				validationSum(sender);
			break;
			case "step3":
				validateResConfim(ctrlPrefix, strCountryCode);
				validationSum(sender);
				
				if (strErrorMsg.length > 0)
					document.getElementById(ctrlPrefix + "_ibConfirmBooking").className = "confirm";
					
			break;
		}			
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
		return false;
	}
	
		
	if(strErrorMsg.length)
	{
		return false;
	}
	else
	{
		return true;
	}

}

function validationSum(sender)
{
	try
	{
		if(strErrorMsg.length > 0)
		{
			jAlert(strErrorMsg);
		}
		else
		{				
			if(document.forms.length > 0)
			{
				if(document.getElementById("__EVENTTARGET") == null && document.forms[0].__EVENTTARGET == null)
				{
					var objInput	= document.createElement('input');
						
					objInput.id		= "__EVENTTARGET";
					objInput.name	= "__EVENTTARGET";
					objInput.type	= "hidden";
					document.forms[0].appendChild(objInput);
				}
				
				sender = sender.split("__").join("##");
				sender = sender.split("_").join("$");
				sender = sender.split("##").join("$_");
				
				if(is_buggy_ie)
				{
					document.getElementById("__EVENTTARGET").value = sender.split("$").join(":");
				}
				else
				{
					document.forms[0].__EVENTTARGET.value = sender.split("$").join(":");
				}

				if(showAlerts){ alert('about to submit'); }
				document.forms[0].submit();	
				if(showAlerts){ alert('submission'); }
			}
		}		
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
	}
}

function dateFix(ctrlPrefix, strCountryCode)
{
	try
	{
		///variables
		var pickupLocationId	=	document.getElementById(ctrlPrefix + "_txtPickUpLocationId").value;
		var returnLocationId	=	document.getElementById(ctrlPrefix + "_txtDropOffLocationId").value;
		
		if(pickupLocationId == "")
		{
			if(strCountryCode == "NZ") //#586-24078
			{
				addErrorMsg("Please enter a Pickup location");
			}
			else
			{
				addErrorMsg("Please enter a pick up location");
			}
		}
		
		if( (document.getElementById(ctrlPrefix + "_cboReturnDifferentLocation") != null && !document.getElementById(ctrlPrefix + "_cboReturnDifferentLocation").checked)
			|| (document.getElementById(ctrlPrefix + "_cboReturnSameLocation") != null && document.getElementById(ctrlPrefix + "_cboReturnSameLocation").checked))		
		{
			returnLocationId = pickupLocationId;
		}
		else if(returnLocationId == "")		
		{
			if(strCountryCode == "NZ") //#586-24078
			{
				addErrorMsg("Please enter a drop off location");
			}
			else
			{
				addErrorMsg("Please enter a drop-off location");
			}
		}
		
		if(document.getElementById(ctrlPrefix + "_cbo25Plus") != null)
		{
			if(document.getElementById(ctrlPrefix + "_cbo25Plus").checked == false)
			{
				if(document.getElementById(ctrlPrefix + "_ddlDriverAge").selectedIndex < 1)
				{
					addErrorMsg("Please select driver\'s age");
				}
			}
		}

		// Ensure elements exist before trying to access their values -- not applicable for Wholesale
		if (document.getElementById(ctrlPrefix + "_cboLiveInAustralia") && document.getElementById(ctrlPrefix + "_ddlResideInCountry"))
		{
			if(!document.getElementById(ctrlPrefix + "_cboLiveInAustralia").checked && document.getElementById(ctrlPrefix + "_ddlResideInCountry").selectedIndex <= 0)
			{
				if(strCountryCode == 'NZ')
					addErrorMsg("Please select your country of residence");
				else
					addErrorMsg("Please select your country of residency");
			}
		}
		
		var pickupDateTime		=	document.getElementById(ctrlPrefix + "_txtPickUpDate").value;
			pickupDateTime		+=	" " + document.getElementById(ctrlPrefix + "_ddlPickUpTime").options[document.getElementById(ctrlPrefix + "_ddlPickUpTime").selectedIndex].value;
			
		var returnDateTime		=	document.getElementById(ctrlPrefix + "_txtReturnUpDate").value;
			returnDateTime		+=	" " + document.getElementById(ctrlPrefix + "_ddlReturnTime").options[document.getElementById(ctrlPrefix + "_ddlReturnTime").selectedIndex].value;

		if(!validateSetDateFormat(document.getElementById(ctrlPrefix + "_txtPickUpDate").value))
		{
			addErrorMsg("Please enter a valid pickup date/time");
		}
		
		if(!validateSetDateFormat(document.getElementById(ctrlPrefix + "_txtReturnUpDate").value))
		{
			addErrorMsg("Please enter a valid return date/time");
		}

		var dtPickupDate = new Date();
		var dtReturnDate = new Date();
		
		var jsDateFormat = "d/M/yyyy H:mm a";
		
		dtPickupDate.setTime(Date.parse(pickupDateTime));
		dtReturnDate.setTime(Date.parse(returnDateTime));
		
		dtPickupDate.setTime(getDateFromFormat(pickupDateTime, jsDateFormat));
		dtReturnDate.setTime(getDateFromFormat(returnDateTime, jsDateFormat));
		
		var strPickupDate = formatDate(dtPickupDate, "yyyy-MM-ddTHH:mm:ss");
		var strReturnDate = formatDate(dtReturnDate, "yyyy-MM-ddTHH:mm:ss");
		
		//set ISO date into hidden fields
		document.getElementById(ctrlPrefix + "_hidPickupDate").value = strPickupDate;
		document.getElementById(ctrlPrefix + "_hidReturnDate").value = strReturnDate;
		
		
		if(document.getElementById(ctrlPrefix + "_pnlFastbreakRapidrez") != null && document.getElementById(ctrlPrefix + "_pnlFastbreakRapidrez").style.display == "block")
		{
			if(document.getElementById(ctrlPrefix + "_txtFastbreak").value.length > 0 || document.getElementById(ctrlPrefix + "_txtSurname").value.length > 0)
			{
				if(document.getElementById(ctrlPrefix + "_txtFastbreak").value.length == 0 || document.getElementById(ctrlPrefix + "_txtSurname").value.length == 0)
				{
					addErrorMsg("Please enter both your Fastbreak number and surname to proceed with your rental quote.");
				}
				if(document.getElementById(ctrlPrefix + "_txtSurname").value.length < 1)
				{
					addErrorMsg("Please enter your Surname");
				}
			}
		}
		if (document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") != null && document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") && document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD").style.display == "block")
		{
			if(document.getElementById(ctrlPrefix + "_txtDirectPIN").value.length > 0 || document.getElementById(ctrlPrefix + "_txtOTTOACTO").value.length > 0 || document.getElementById(ctrlPrefix + "_txtBCD").value.length > 0)
			{
				// At least one must contain a value
				if(document.getElementById(ctrlPrefix + "_txtDirectPIN").value.length < 3 && document.getElementById(ctrlPrefix + "_txtOTTOACTO").value.length < 3 && document.getElementById(ctrlPrefix + "_txtBCD").value.length < 3)
				{
					if(strCountryCode == "NZ") //#586-24078
					{
						addErrorMsg("Please enter a Direct PIN number, OTTO / ACTO number or BCD number");
					}
					else
					{
						addErrorMsg("Please enter a Direct PIN #, OTTO / ACTO # or BCD #");
					}
				}
			}
		}
		if(document.getElementById(ctrlPrefix + "_pnlFrequentFlyerFlyBuys") != null && document.getElementById(ctrlPrefix + "_pnlFrequentFlyerFlyBuys").style.display == "block")
		{
			if(document.getElementById(ctrlPrefix + "_ddlProgrammeType").selectedIndex > 0 || document.getElementById(ctrlPrefix + "_txtMembership").value.length > 0)
			{
				if(document.getElementById(ctrlPrefix + "_ddlProgrammeType").selectedIndex < 1)
				{
					addErrorMsg("Please select a Programme Type");
				}
				if(document.getElementById(ctrlPrefix + "_txtMembership").value.length < 1)
				{
					///When either "Jetstar" or "Rex" a membership number is not required
					var ddlProgrammeType = document.getElementById(ctrlPrefix + "_ddlProgrammeType");
					var strProgrammeType = ddlProgrammeType.options[ddlProgrammeType.selectedIndex].value;
					if(strProgrammeType != "JS" && strProgrammeType != "RX")
					{
						if(strCountryCode == "NZ") //#586-24078
						{
							addErrorMsg("Please enter a valid Membership number");
						}
						else
						{
							addErrorMsg("Please enter a valid Membership #");
						}
					}
				}
			}
		}
		if(document.getElementById(ctrlPrefix + "_pnlCouponDiscount") != null && document.getElementById(ctrlPrefix + "_pnlCouponDiscount").style.display == "block")
		{
			if(document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value.length > 0)
			{
				if(document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value.length < 1)
				{
					if(strCountryCode == "NZ") //#586-24078
					{
						addErrorMsg("Please enter a valid Voucher / Coupon number");
					}
					else
					{
						addErrorMsg("Please enter a valid Voucher / Coupon #");
					}	
				}
			}
		}
		if(document.getElementById(ctrlPrefix + "_pnlTravelAgent") != null && document.getElementById(ctrlPrefix + "_pnlTravelAgent") && document.getElementById(ctrlPrefix + "_pnlTravelAgent").style.display == "block")
		{
			if(document.getElementById(ctrlPrefix + "_txtIATA").value.length > 0)
			{
				if(document.getElementById(ctrlPrefix + "_txtIATA").value.length < 1)
				{
					if(strCountryCode == "NZ") //#586-24078
					{
						addErrorMsg("Please enter a valid IATA number");
					}
					else
					{
						addErrorMsg("Please enter a valid IATA #");
					}	
				}
			}
		}
		
		if (   document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") != null 
			&& document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") != null
			&& document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD").style.display == "block" 
			&& document.getElementById(ctrlPrefix + "_pnlCouponDiscount") != null
			&& document.getElementById(ctrlPrefix + "_pnlCouponDiscount").style.display == "block")
		{
			// Has the user tried to enter both a coupon and a BCD?
			if ((document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value.length > 0) && (document.getElementById(ctrlPrefix + "_txtBCD").value.length > 0))
			{
				addErrorMsg("The coupon number entered cannot be used with the BCD entered");	
			}	
		}
	}
	catch(e)
	{
			if(showAlerts){ alert(e.message); }
	}
	
		
	if(strErrorMsg.length)
	{
		return false;
	}
	else
	{
		return true;
	}
	
	
}

///validate pickup and return dateTime for a reservation
function validateDateTime(ctrlPrefix, sender, intSiteId, intDealId)
{

	try
	{				
		
		///variables
		var pickupLocationId	=	document.getElementById(ctrlPrefix + "_txtPickUpLocationId").value;
		var returnLocationId	=	document.getElementById(ctrlPrefix + "_txtDropOffLocationId").value;
		if(returnLocationId == "")
		{
			returnLocationId = pickupLocationId;
		}
		
		//set ISO date into hidden fields
		var strPickupDate = document.getElementById(ctrlPrefix + "_hidPickupDate").value;
		var strReturnDate = document.getElementById(ctrlPrefix + "_hidReturnDate").value;
		
		var url = "/service/budgetws.asmx/ValidateRentalDateTimePeriodLocationString?strPickupLocationId="+ pickupLocationId +"&strReturnLocationId="+ returnLocationId +"&dtPickup="+ strPickupDate +"&dtReturn="+ strReturnDate +"&intSiteId="+ intSiteId +"";
		
		if ((intDealId != null) && (intDealId != "") && (intDealId != 0))
		{
			// A Deal has been specified, so validation logic is more complex
			url = "/service/budgetws.asmx/ValidateRentalDateTimePeriodWithDealAndLocationString?strPickupLocationId="+ pickupLocationId +"&strReturnLocationId="+ returnLocationId +"&dtPickup="+ strPickupDate +"&dtReturn="+ strReturnDate +"&intSiteId="+ intSiteId +"&intDealId=" + intDealId;
		}
		
		var conn = new initHTTPXML();
		var fn_action = function()
		{
			try
			{
				if(conn.getXmlHttp.readyState == conn.ReadyState.Complete)
				{
					if(conn.getXmlHttp.status ==  conn.HttpStatus.OK)
					{
						var XMLdoc		= conn.getXmlHttp.responseXML.documentElement;
						var Messages	= XMLdoc.getElementsByTagName("Message");
						var ErrorMsg	= "";
						for(i=0; i<Messages.length; i++)
						{
							addErrorMsg(Messages[i].firstChild.data);
						}
						if(showAlerts){ alert('validate what else next'); }
						validateWhatElse(ctrlPrefix, sender, intSiteId);
					}
					else
					{
							if(showAlerts){ alert("Error : " + conn.getXmlHttp.status + url) }
					}
				}
			}
			catch(e)
			{
				if(showAlerts){ alert(e.message); }
			}
		}
		
		///load request
		requestHTTPXML(fn_action, conn.getXmlHttp, url); 
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
	}
}


///validate pickup and return dateTime for a reservation
function validateWhatElse(ctrlPrefix, sender, siteId)
{

	try
	{				
		///test data
		///	<xml>
		///		<controls>
		///			<controlBlock id="block1"> A contolBlock can contail more then one control
		///				<control>
		///					<id>txtInputDataId</id>
		///					<value>valueFromInputElement</value>
		///				</control>
		///				<errorMsg>
		///					<message>Error msg</message> Will get populates by server side incase of exception
		///					<message>Error msg</message> 
		///				<errorMsg>						
		///			</controlBlock>
		///		</controls>
		///	</xml>
			
		///variables
		var pickupLocationId	=	document.getElementById(ctrlPrefix + "_txtPickUpLocationId").value;
		var returnLocationId	=	document.getElementById(ctrlPrefix + "_txtDropOffLocationId").value;
		if(returnLocationId == "")
		{
			returnLocationId = pickupLocationId;
		}
		
		//set ISO date into hidden fields
		var strPickupDate = document.getElementById(ctrlPrefix + "_hidPickupDate").value;
		var strReturnDate = document.getElementById(ctrlPrefix + "_hidReturnDate").value;
			
		///create an sting of xml
		var strXML	=	"";
			strXML	=	"<xml>";
			strXML	+=	"<pickupLocationId>"+	pickupLocationId	+"</pickupLocationId>";
			strXML	+=	"<returnLocationId>"+	returnLocationId	+"</returnLocationId>";
			strXML	+=	"<pickupDateTime>"+		strPickupDate		+"</pickupDateTime>";
			strXML	+=	"<returnDateTime>"+		strReturnDate		+"</returnDateTime>";
			strXML	+=	"<siteId>"+				siteId				+"</siteId>";
			strXML	+=	"<controls>";

		///is user 25+
		var isOver25 = false;
		if(document.getElementById(ctrlPrefix + "_cbo25Plus").checked)
		{
			isOver25 = true;
		}
		else
		{
			if(document.getElementById(ctrlPrefix + "_ddlDriverAge").selectedIndex == 3)
			{
				isOver25 = true;
			}
		}
		
		strXML	+=	"<controlBlock id=\"isOver25\">";
		strXML	+=	"<control>";
		strXML	+=	"<id></id>";
		strXML	+=	"<value><![CDATA["+	isOver25 +"]]></value>";
		strXML	+=	"</control>";
		strXML	+=	"<errorMsg/>";
		strXML	+=	"</controlBlock>";
		

		///I have a Fastbreak/Rapidrez # (incl. corporate Fastbreaks)
		if(document.getElementById(ctrlPrefix + "_pnlFastbreakRapidrez") != null && document.getElementById(ctrlPrefix + "_pnlFastbreakRapidrez").style.display != "none")
		{
			if(document.getElementById(ctrlPrefix + "_txtFastbreak").value.length > 0 || document.getElementById(ctrlPrefix + "_txtSurname").value.length > 0)
			{
				///build xml for block
				strXML	+=	"<controlBlock id=\"FastbreakRapidrez\">";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtFastbreak").id	+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtFastbreak").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtSurname").id	+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtSurname").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<errorMsg/>";
				strXML	+=	"</controlBlock>";
			}
		}
		///I have a corporate account or BCD #
		if (document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") != null && document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD") && document.getElementById(ctrlPrefix + "_pnlCorporateAccountOrBCD").style.display != "none")
		{
			if(document.getElementById(ctrlPrefix + "_txtDirectPIN").value.length > 0 || document.getElementById(ctrlPrefix + "_txtOTTOACTO").value.length > 0 || document.getElementById(ctrlPrefix + "_txtBCD").value.length > 0)
			{
				///build xml for block
				strXML	+=	"<controlBlock id=\"CorporateAccountBCD\">";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtDirectPIN").id	+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtDirectPIN").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtOTTOACTO").id		+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtOTTOACTO").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtBCD").id			+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtBCD").value		+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<errorMsg/>";
				strXML	+=	"</controlBlock>";
			}
		}
		///I am a Frequent Flyer/FlyBuys member
		if(document.getElementById(ctrlPrefix + "_pnlFrequentFlyerFlyBuys") != null && document.getElementById(ctrlPrefix + "_pnlFrequentFlyerFlyBuys").style.display != "none")
		{
			if(document.getElementById(ctrlPrefix + "_ddlProgrammeType").selectedIndex > 0 || document.getElementById(ctrlPrefix + "_txtMembership").value.length > 0)
			{
				///build xml for block
				strXML	+=	"<controlBlock id=\"FrequentFlyerFlyBuys\">";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_ddlProgrammeType").id	+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_ddlProgrammeType").options[document.getElementById(ctrlPrefix + "_ddlProgrammeType").selectedIndex].value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtMembership").id		+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtMembership").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<errorMsg/>";
				strXML	+=	"</controlBlock>";
			}
			
		}
		///I have a coupon/discount #
		if(document.getElementById(ctrlPrefix + "_pnlCouponDiscount") != null && document.getElementById(ctrlPrefix + "_pnlCouponDiscount").style.display != "none")
		{
			if(document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value.length > 0)
			{
				strXML	+=	"<controlBlock id=\"CouponDiscount\">";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtVoucherCoupon").id	+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<errorMsg/>";
				strXML	+=	"</controlBlock>";
			}
		}
		///I'm a Travel Agent
		if(document.getElementById(ctrlPrefix + "_pnlTravelAgent") != null && document.getElementById(ctrlPrefix + "_pnlTravelAgent") && document.getElementById(ctrlPrefix + "_pnlTravelAgent").style.display != "none")
		{
			if(document.getElementById(ctrlPrefix + "_txtIATA").value.length > 0)
			{
				strXML	+=	"<controlBlock id=\"TravelAgent\">";
				strXML	+=	"<control>";
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_txtIATA").id		+"]]></id>";
				strXML	+=	"<value><![CDATA["+	document.getElementById(ctrlPrefix + "_txtIATA").value	+"]]></value>";
				strXML	+=	"</control>";
				strXML	+=	"<errorMsg/>";
				strXML	+=	"</controlBlock>";
			}
		}
	
		///Wholesalse Inclusive / Exclusive
		if(document.getElementById(ctrlPrefix + "_pnlInclusiveFeesAndDuties") != null)
		{
			strXML	+=	"<controlBlock id=\"wholeSaleIE\">";
			strXML	+=	"<control>";
			if(document.getElementById(ctrlPrefix + "_rboInclusive").checked)
			{
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_rboInclusive").id	+"]]></id>";
				strXML	+=	"<value><![CDATA[inclusive]]></value>";
			}
			else
			{
				strXML	+=	"<id><![CDATA["+	document.getElementById(ctrlPrefix + "_rboExclusive").id	+"]]></id>";
				strXML	+=	"<value><![CDATA[exclusive]]></value>";
			}
			strXML	+=	"</control>";
			strXML	+=	"<errorMsg/>";
			strXML	+=	"</controlBlock>";
		}

		strXML	+=	"</controls>";
		strXML	+=	"</xml>";
	

	
		if(showAlerts){ alert(strXML); }

		var url = "/service/budgetws.asmx/ValidateWhatElseLocationString?strXML=" + strXML;
		var conn = new initHTTPXML();
		var fn_action = function()
		{
			try
			{
				if(conn.getXmlHttp.readyState == conn.ReadyState.Complete)
				{
					if(conn.getXmlHttp.status ==  conn.HttpStatus.OK)
					{
						var XMLdoc		= conn.getXmlHttp.responseXML.documentElement;
						var Messages	= XMLdoc.getElementsByTagName("message");
						
						for(i=0; i<Messages.length; i++)
						{
							if(Messages[i].childNodes.length > 0)
							{
								addErrorMsg(Messages[i].firstChild.data);
							}
						}
						
						validationSum(sender)
					}
					else
					{
						alert("Error : " + conn.getXmlHttp.status + url)
					}
				}
			}
			catch(e)
			{
				//alert("x1 " + e.message);
			}
		}
		

		if(showAlerts){ alert('about to load request ?!?!?'); }
		if(showAlerts){	alert(url); }

		///load request
		requestHTTPXML(fn_action, conn.getXmlHttp, url); 
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
	}
}

function validateCouponLocationAndDates(ctrlPrefix)
{
	try
	{
		var couponCode = document.getElementById(ctrlPrefix + "_txtVoucherCoupon").value;
		
		if (couponCode != null && couponCode.length > 0)
		{
			///variables
			var pickupLocationId	=	document.getElementById(ctrlPrefix + "_txtPickUpLocationId").value;
			var returnLocationId	=	document.getElementById(ctrlPrefix + "_txtDropOffLocationId").value;
			if(returnLocationId == "")
			{
				returnLocationId = pickupLocationId;
			}
			var pickupDateTime		=	document.getElementById(ctrlPrefix + "_txtPickUpDate").value;
			var returnDateTime		=	document.getElementById(ctrlPrefix + "_txtReturnUpDate").value;
				pickupDateTime		+=	" " + document.getElementById(ctrlPrefix + "_ddlPickUpTime").options[document.getElementById(ctrlPrefix + "_ddlPickUpTime").selectedIndex].value;
				returnDateTime		+=	" " + document.getElementById(ctrlPrefix + "_ddlReturnTime").options[document.getElementById(ctrlPrefix + "_ddlReturnTime").selectedIndex].value;

			var dtPickupDate = new Date();
			var dtReturnDate = new Date();
			
			var jsDateFormat = "d/M/yyyy HH:mm a";
			
			dtPickupDate.setTime(Date.parse(pickupDateTime));
			dtReturnDate.setTime(Date.parse(pickupDateTime));
			
			dtPickupDate.setTime(getDateFromFormat(pickupDateTime, jsDateFormat));
			dtReturnDate.setTime(getDateFromFormat(returnDateTime, jsDateFormat));
			
			var strPickupDate = formatDate(dtPickupDate, "yyyy-MM-ddTHH:mm:ss");
			var strReturnDate = formatDate(dtReturnDate, "yyyy-MM-ddTHH:mm:ss");
			
		
			var url = "/service/budgetcouponvalidator.asmx/ValidateLocationStringAndDates?strCouponCode=" + couponCode + "&strPickupLocationId="+ pickupLocationId +"&strReturnLocationId="+ returnLocationId +"&dtPickup="+ strPickupDate +"&dtReturn="+ strReturnDate +"";
		
			var connCoupon = new initHTTPXML();
			var fn_actionCoupon = function()
			{
				try
				{
					if(connCoupon.getXmlHttp.readyState == connCoupon.ReadyState.Complete)
					{
						if(connCoupon.getXmlHttp.status ==  connCoupon.HttpStatus.OK)
						{
							var XMLdoc		= connCoupon.getXmlHttp.responseXML.documentElement;
							var Messages	= XMLdoc.getElementsByTagName("Message");
							var ErrorMsg	= "";
							for(i=0; i<Messages.length; i++)
							{
								addErrorMsg(Messages[i].firstChild.data);
							}
						}
						else
						{
							alert("Error : " + connCoupon.getXmlHttp.status + url)
						}
					}
				}
				catch(e)
				{
					if(showAlerts){ alert(e.message); }
				}
			}
			///load request
			requestHTTPXML(fn_actionCoupon, connCoupon.getXmlHttp, url); 
		}
	
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
	}
}

function validateResConfim(ctrlPrefix, strCountryCode)
{
	try
	{
		///When an NZreservation is an inter-island
		if	(
				document.getElementById(ctrlPrefix + "_ddlFerryPickup") != null
			&&	document.getElementById(ctrlPrefix + "_txtFerryDate")	!= null
			&&	document.getElementById(ctrlPrefix + "_ddlFerryTime")	!= null
			&&	document.forms[0].hidPickupDateTime						!= null
			&&	document.forms[0].hidReturnDateTime						!= null
			)
		{
			if(document.getElementById(ctrlPrefix + "_ddlFerryPickup").selectedIndex < 1)
			{
				addErrorMsg("Please select an Pickup location");
			}
			
			//date format
			if(validateSetDateFormat(document.getElementById(ctrlPrefix + "_txtFerryDate").value))
			{
				var dtPickupDateTime = new Date()
				dtPickupDateTime.setTime(document.forms[0].hidPickupDateTime.value);
				dtPickupDateTime.setTime(getDateFromFormat(document.forms[0].hidPickupDateTime.value, "d/M/yyyy H:mm"));
				var dtReturnDateTime = new Date(document.forms[0].hidPickupDateTime.value.replace("T", " "));
				dtReturnDateTime.setTime(document.forms[0].hidReturnDateTime.value);
				dtReturnDateTime.setTime(getDateFromFormat(document.forms[0].hidReturnDateTime.value, "d/M/yyyy H:mm"));
				var dtIslandPickupDateTime = new Date();
				
				
				var jsDateFormat = "d/M/yyyy H:mm a";

				var IslandpickupDateTime		=	document.getElementById(ctrlPrefix + "_txtFerryDate").value;
					IslandpickupDateTime		+=	" " + document.getElementById(ctrlPrefix + "_ddlFerryTime").options[document.getElementById(ctrlPrefix + "_ddlFerryTime").selectedIndex].value;

				dtIslandPickupDateTime.setTime(Date.parse(IslandpickupDateTime));
				dtIslandPickupDateTime.setTime(getDateFromFormat(IslandpickupDateTime, jsDateFormat));
				
				
				var one_day			= 1000*60 //in min
				var	threeDaysInM	= (60*24*3)
				
				if(strCountryCode == "NZ") //#586-24078
				{
					if(Math.ceil((dtIslandPickupDateTime.getTime()-dtPickupDateTime.getTime())/(one_day)) < threeDaysInM)
					{
						addErrorMsg("First pickup to second pickup must be at least 3 days");
					}
					if(Math.ceil((dtReturnDateTime.getTime()-dtIslandPickupDateTime.getTime())/(one_day)) < threeDaysInM)
					{
						addErrorMsg("Second pickup to dropoff must be at least 3 days");
					}
				}
				else
				{
					if(Math.ceil((dtIslandPickupDateTime.getTime()-dtPickupDateTime.getTime())/(one_day)) < threeDaysInM)
					{
						addErrorMsg("First pickup to second pickup must be at least 3 days");
					}
					if(Math.ceil((dtReturnDateTime.getTime()-dtIslandPickupDateTime.getTime())/(one_day)) < threeDaysInM)
					{
						addErrorMsg("Second pickup to dropoff must be at least 3 days");
					}
				}
			}
			else
			{
				addErrorMsg("Please enter a valid Ferry Date");
			}
		}
		///txtFirstName
		if(document.getElementById(ctrlPrefix + "_txtFirstName").value.length < 1)
		{
			addErrorMsg("Please enter your first name");
		}
		///txtLastName
		if(document.getElementById(ctrlPrefix + "_txtLastName").value.length < 1)
		{
			addErrorMsg("Please enter your last name");
		}
		///txtPhoneNumber
		if(document.getElementById(ctrlPrefix + "_txtPhoneNumber").value.length < 1)
		{
			addErrorMsg("Please enter a valid phone number");
		}
		///txtEmailAddress
		var strEmail		= "";
		var strEmailError	= "";
		if(document.getElementById(ctrlPrefix + "_txtConsultantEmail") == null)
		{
			strEmail		= "_txtEmailAddress";
			strEmailError	= "Please enter a valid email address";
		}
		else
		{
			strEmail		= "_txtConsultantEmail";
			strEmailError	= "Please enter a valid consultant email address";
		}
		
		if(document.getElementById(ctrlPrefix + strEmail) != null && document.getElementById(ctrlPrefix + strEmail).value.length < 6)
		{
			addErrorMsg(strEmailError);
		}
		else
		{
			var emailPat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
			if (!emailPat.test(document.getElementById(ctrlPrefix + strEmail).value))
			{
				addErrorMsg(strEmailError);
			}
		}
		
		///ddlAirline if it is available
		if(document.getElementById(ctrlPrefix + "_ddlAirline") != null && document.getElementById(ctrlPrefix + "_ddlAirline").selectedIndex > 0)
		{
			var ddlAirline		= document.getElementById(ctrlPrefix + "_ddlAirline");
			var strAirline		= ddlAirline.options[ddlAirline.selectedIndex].value;
			var strFlightNumber = "";

			if(document.getElementById(ctrlPrefix + "_txtFlightNumber") != null)
			{
				var txtFlightNumber		= document.getElementById(ctrlPrefix + "_txtFlightNumber");
				strFlightNumber			= txtFlightNumber.value;
				strFlightNumber			= txtFlightNumber.value.toUpperCase();
				strFlightNumber			= strFlightNumber.replace(strAirline, "");
				txtFlightNumber.value	= strFlightNumber;
			}
			
			
			var exp = /^\d{0,4}$/;
			
			if(strFlightNumber.match(exp) == null)
			{
				if (strCountryCode == "NZ")
				{
					addErrorMsg("Your flight number must be between 1 to 4 digits long and consist of numbers only.");
				}
				else
				// if (strCountryCode = "AU")
				{
					addErrorMsg("Your flight number must be between 0 and 9999 and consist of numerical characters only.");
				}			}
		}
		///ddlAirline if it is available
		if(document.getElementById(ctrlPrefix + "_txtFlightNumber") != null && document.getElementById(ctrlPrefix + "_ddlAirline") != null)
		{
			var ddlAirline = document.getElementById(ctrlPrefix + "_ddlAirline");
			var strAirline = ddlAirline.options[ddlAirline.selectedIndex].value;
			if(document.getElementById(ctrlPrefix + "_txtFlightNumber").value.length > 0 && strAirline == 0)	
			{
				addErrorMsg("Please select an airline for your booking");
			}
			
			//tracker id : 586-22114    flight number validation for nz airports
			var pickupLocationCode	=	document.getElementById(ctrlPrefix + "_txtPickUpLocationCode").value;
			var returnLocationCode	=	document.getElementById(ctrlPrefix + "_txtDropOffLocationCode").value;
			locArray = new Array("KKE","WRE","HLZ","ROT","TUO","NPL","WAG","WHK","DUD","ZQN");
			if(document.getElementById(ctrlPrefix + "_txtFlightNumber").value.length <= 0)
			{
				for(var i=0; i < locArray.length; i++ ){
					if(locArray[i] == pickupLocationCode || locArray[i] == returnLocationCode)
					{
						addErrorMsg("Please enter a flight number for your booking");
					}
				}
			}
		}
	}
	catch(e)
	{
		if(showAlerts){ alert(e.message); }
	}
}

function addErrorMsg(strErrorMsg)
{
	if(this.strErrorMsg == "")
	{
		this.strErrorMsg =	"Sorry, there are some problems with your booking request: \n\n"
		this.strErrorMsg += "* "	+ strErrorMsg;
	}
	else
	{
		this.strErrorMsg += "\n* "	+ strErrorMsg;
	}
}

function IsUnder21(ctrlPrefix)
{
	var selDriverAge = document.getElementById(ctrlPrefix + "_ddlDriverAge");
	var msgDriverAge = document.getElementById(ctrlPrefix + "_hidDriverAge");
	var isUnder21 = false;
	if (selDriverAge && msgDriverAge)
	{
		if (selDriverAge.options[selDriverAge.selectedIndex].value == "Under 21")
		{
			isUnder21 = true;
			addErrorMsg(msgDriverAge.value);
		}
	}
	return isUnder21;
}
