/*
This file contains javascript functions that are used by the hotel search
include file on bestwestern.com.  This code is copied from the original 
javascript on book.bestwestern.com but there are some modifications.  Please
pay attention to comments when making any changes or prior to overwriting
any code with updated versions from book.bestwestern.com.  It is recommended
that a code merge be done as opposed to overwriting.
*/

function showWindow( m_url, winname, winwidth, winheight, wndparams)
{
	if ((winname == null) || (winname == "")) winname = "lvs";
	
	winleft = (screen.availWidth / 2) - (winwidth / 2);
	wintop = (screen.availHeight / 2) - (winheight / 2);
	
	if (wndparams == null) wndparams = "scrollbars=no,resizable=no";
	oWinInfo=(window.open(m_url, winname,"left=" + winleft + ",top=" + wintop + ",width=" + winwidth + ",height=" + winheight + "," + wndparams));
	//	registerWindow(oWinInfo);
	if (!Browser.ie) {
		if(oWinInfo.self != null)  oWinInfo.focus();
	}
}

/**
 ****************************************************************************
 * the main validation methods
 ****************************************************************************
 */

/**
 * wrapper function that calls all post-submit validation functions
 */
function validatePropertySearchFormAll(form) {

	var passed = true;

	form.city.value = Trim(form.city.value);
	
	// the Struts-Validator dynamically generated validation
	passed = validatePropertySearchForm(form);

	// the 'custom' validations below
	if (passed) 
	{
		passed = validateCapacityRequest(form);
	}
	if (passed) 
	{
		passed = validateCountryState(form);
	}
	if (passed) 
	{
		passed = validateAddressSearch(form);
	}
	if (passed)
	{
		passed = validateReferencePointSearch(form);
	}
	return passed;
}

/**
 * wrapper function that calls all post-submit validation functions
 */
function validatePropertyPriceAvailFormAll(form) {
	var passed = true;

	// the Struts-Validator dynamically generated validation
	passed = validatePropertyPriceAvailForm(form);

	// the 'custom' validations below
	if (passed) {
		passed = validateArrivalDate(form);
	}
	return passed;
}

/**
 * wrapper function that calls all post-submit validation functions
 */
function validateAddBillingFormAll(form) 
{
	var passed = true;
	
	// the Struts-Validator dynamically generated validation
	passed = validateAddBillingForm(form);

	if (passed)
	{		
		passed = validateBillingGuestAddress(form)
	}

	if (passed)
		{
		if(form.useGuestAddress.checked == false)
		{
			passed = validateBillingAddress(form);
		}
	}
	
	// the 'custom' validations below
	if (passed)
	{
		passed = validateEmailAddresses(form);
	}

	if (passed)
	{
		passed = validateCreditCardExpiryDate(form);
	}
	
	return passed;
}

/**
 * wrapper function that calls all post-submit validation functions
 */
function validateReservationRetrieveFormAll(form) 
{
	var passed = true;
	
	// the Struts-Validator dynamically generated validation
	passed = validateReservationRetrieveForm(form);
	
	if ((form.creditCardNumber.value == "") && (form.confirmationNumber.value == ""))
	{
		window.alert("Please enter either a Credit Card Number or a Reservation Confirmation Number");
		passed = false;
	}

	return passed;
}

function validateCreditCardExpiryDate(form)
{
	var passed = true;
	var month = [form.creditCardExpMonth.selectedIndex].value;
	var year = [form.creditCardExpYear.selectedIndex].value;
	if (month < 11)
	{
		month++;
	}
	else
	{
		month = 0;
		year++;
	}
	var now = new Date();
	var expiry = new Date(year, month, 1);
	
	if (expiry < now)
	{
		passed = false;
		window.alert("The Credit Card you have entered has expired./nPlease check the expiration month and year."+expiry);
	}

	return passed;
}

function validateEmailAddresses(form)
{
	var email1 = form.email.value;
	var email2 = form.confirmEmail.value;
	
	if (email1 != email2)
	{
		window.alert("The e-mail addresses you have entered do not match.");
		return false;
	}
	return true;
}

function validateBillingGuestAddress(form)
{
	if ((form.country.value == "US" || form.country.value == "CA" || form.country.value == "AU"))
	{
		if (form.state.value == "")
		{
			window.alert("Please enter a state for the guest address.");
			form.state.focus();
			return false;
		}
	}
	if ((form.country.value == "US" || form.country.value == "CA"))
	{
		if (form.postalCode.value == "")
		{
			window.alert("Please enter a postal code for guest address.");
			form.postalCode.focus();
			return false;
		}
	}
	return true;
}

function validateBillingAddress(form)
{
	if (form.billingFirstName.value == "")
	{
		window.alert("Please enter the first name of the credit card holder.");
		form.billingFirstName.focus();
		return false;
	}
	if (form.billingLastName.value == "")
	{
		window.alert("Please enter the last name of the credit card holder.");
		form.billingLastName.focus();
		return false;
	}		
	if (form.billingAddress1.value == "")
	{
		window.alert("Please enter address line 1 for billing address.");
		form.billingAddress1.focus();
		return false;
	}		
	if (form.billingCity.value == "")
	{
		window.alert("Please enter a city for billing address.");
		form.billingCity.focus();
		return false;
	}		
	if ((form.billingCountry.value == "US" || form.billingCountry.value == "CA" || form.billingCountry.value == "AU"))
	{
		if (form.billingState.value == "")
		{
			window.alert("Please enter a state for billing address.");
			form.billingState.focus();
			return false;
		}
	}
	if ((form.billingCountry.value == "US" || form.billingCountry.value == "CA"))
	{
		if (form.billingPostalCode.value == "")
		{
			window.alert("Please enter a postal code for billing address.");
			form.billingPostalCode.focus();
			return false;
		}
	}		
	if (form.billingCountry.value == "")
	{
		window.alert("Please enter a country for billing address.");
		form.billingCountry.focus();
		return false;
	}
	return true;
}	

/**
 * Called on form submit to ensure that either none or all of the input elements that would 
 * trigger an availability have been selected (arrival date, numNight and numRooms)
 */
function validateCapacityRequest(form) {
	if (hasAStayElement(form) && !hasAllStayElements(form)) {
		var msg = "If you would like to check Room Availability for a Stay, you must provide:\n  - Your Check-in date,\n  - Your Check-out date\n\nIf you do not wish to check Room Availability and are just searching for a hotel,\nplease deselect all of these fields.";
		window.alert(msg);
		try
		{
			if (form.arrivalMonthYear.selectedIndex <= 0) {
				form.arrivalMonthYear.focus();
				return false;
			}
			else if (form.arrivalDay.selectedIndex <= 0) {
				form.arrivalDay.focus();
				return false;
			}
			else if (form.departureDay.selectedIndex <= 0) {
				form.departureDay.focus();
				return false;
			}
			else if (form.departureMonthYear.selectedIndex <= 0) {
				form.departureMonthYear.focus();
				return false;
			}
		}
		catch (e)
		{
			//Must've come from a page that doesn't have this property.
			return false;
		}
	} 
	else if (hasAllStayElements(form)) {
		return validateArrivalDate(form);
	}
	return true;
}

function validateReferencePointSearch(form)
{
	if ((form.referencePoint != null) && (form.referencePointType != null))
	{
		if ((form.referencePoint.value == "") && (form.referencePointType.value != ""))
		{
			window.alert("Please enter a reference point.");
			return false;
		}

		if ((form.referencePointType.value == "") && (form.referencePoint.value != ""))
		{
			window.alert("Please select a reference point type from the drop down list.");
			return false;
		}
		return true;
	}
	return true;
}

// JON EDIT START added dynamic date stuff.  edit instead of replacing, if needed.

/**
 * this method ensures that the Stay Date provided occurs in the future; this 
 * is called inside validateCapacityRequest
 */
function validateArrivalDate(form) 
{
	var day		= parseFloat(form.arrivalDay.value);
	var month	= parseFloat((form.arrivalMonthYear.value).substring(4,6));
	var year	= parseFloat((form.arrivalMonthYear.value).substring(0,4));
	var dday	= parseFloat(form.departureDay.value);
	var dmonth	= parseFloat((form.departureMonthYear.value).substring(4,6));
	var dyear	= parseFloat((form.departureMonthYear.value).substring(0,4));


	//var year  = parseInt((form.arrivalYear.value).substring(0,4)); commented out
	//var year ="2005";
	var curDate = new Date();
	var maxDate = new Date(0);
	if (!isDateValid(day, month, year)) {
		window.alert("The Check-in Date you have entered is invalid.\n Please enter a valid Date");
		form.arrivalDay.focus();
		return false;
	}

	var arrivalDate		=	new Date(year,month,day);
	var departureDate	=	new Date(dyear,dmonth,dday);

	if(departureDate<arrivalDate || (day == dday && month == dmonth && year == dyear)){
		window.alert("The Check-out date must occur after the Check-in date.\nPlease select a valid date.");
		form.departureDay.focus();
		return false;
	}

	var currentDay = curDate.getDate(); 
	var currentMonth = curDate.getMonth();
	var currentYear = curDate.getFullYear();  // getYear function in netscape returns a 3-digit number.  confirmed problem.  have to use getFullYear instead.

	if (year < currentYear || (year == currentYear && month < currentMonth) || (year == currentYear && month == currentMonth && day < currentDay))
	{
		window.alert("The Check-in date you have entered occurs in the past.\nPlease enter a valid date.");
		form.arrivalMonthYear.focus();
		return false;			
	}

	var checkDay = getDay(day, month, year); // arrival day
	var startDay = getDay(currentDay, currentMonth, currentYear); // current day
	var endDay = getDay(dday, dmonth, dyear); // departure day

	// do not allow arrival day to be more than 350 days in the future
	try
	{
		var c = compare(startDay, checkDay, currentYear, year);
		if (c > 350)
		{
			window.alert("The Check-in date you have entered occurs too far in the future.\nPlease enter a valid date.");
			form.arrivalMonthYear.focus();
			return false;
		}
	}
	catch (e)
	{
		alert(e);
		return false;
	}
	
	// do not allow stay duration of more than 30 days
	try
	{
		var c = compare(checkDay, endDay, year, dyear);
		if (c > 30)
		{
			window.alert("Bestwestern.com cannot process a hotel reservation that exceeds 30 days in length. Please revise your Check-in and/or Check-out date.");
			form.arrivalMonthYear.focus();
			return false;
		}
	}
	catch (e)
	{
		alert(e);
		return false;
	}
	
	
	return true;
}

function days_between(date1, date2)
{
   	// The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24;

   	// Convert both dates to milliseconds
    var date1_ms = date1.getTime();
   	var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
   	var difference_ms = date1_ms - date2_ms;

    diff=Math.round(difference_ms/ONE_DAY);

   	return diff;
}

/**
* Changes the departure date equal to increment of
* arrival date to one day.
*/
function changeDep(form)
{
	var arrMY = form.arrivalMonthYear.value;
	var arrDY = form.arrivalDay.value;
	
	arrDate = new Date(0);
	
	arrDate.setYear(arrMY.substring(0,4));
	arrDate.setDate(arrDY);
	arrDate.setMonth(arrMY.substring(6,4));
	
	temp_date = new Date(arrDate.getTime() +(24*60*60*1000)); //Incrementing the arrival date to one day
	form.departureDay.value = temp_date.getDate();
	
	if(temp_date.getMonth() < 10){
		tempMY= temp_date.getYear() + "0" + temp_date.getMonth();
	
	}else{
		tempMY= temp_date.getYear() + '' + temp_date.getMonth();
	
	}

	form.departureMonthYear.value = tempMY;
}


function changeDepartureDate(form)
{
		var arrMY = form.arrivalMonthYear.value;
		var depMY = form.departureMonthYear.value;
		var arrDY = form.arrivalDay.value;
		var depDY = form.departureDay.value;

		arrDate = new Date(0);
		depDate = new Date(0);

		arrDate.setYear(arrMY.substring(0,4));
		arrDate.setDate(arrDY);
		arrDate.setMonth(arrMY.substring(6,4));

		depDate.setYear(depMY.substring(0,4));
		depDate.setDate(depDY);
		depDate.setMonth(depMY.substring(6,4));

		if(days_between(depDate, arrDate)< 0){
			//alert('Your Check-out date must occur after your Check-in date.  Please revise your dates and try again.');
			changeDep(form);
			depMY = form.departureMonthYear.value;
			depDY = form.departureDay.value;
			depDate.setYear(depMY.substring(0,4));
			depDate.setDate(depDY);
			depDate.setMonth(depMY.substring(6,4));
			//return false;
		}

		if(days_between(depDate, arrDate)== 0){
			//alert('Check-in date is equal to the Check-out date. Please enter a valid date.');
			changeDep(form);
			depMY = form.departureMonthYear.value;
			depDY = form.departureDay.value;
			depDate.setYear(depMY.substring(0,4));
			depDate.setDate(depDY);
			depDate.setMonth(depMY.substring(6,4));
			//return false;
		}
		
}
 
				
// JON EDIT END

	
function getDay(day,month,year)
{
	var days = new Array(12);
	var retVal = 0;
	days[0] = 31;
	days[1] = 28;
	days[2] = 31;
	days[3] = 30;
	days[4] = 31;
	days[5] = 30;
	days[6] = 31;
	days[7] = 31;
	days[8] = 30;
	days[9] = 31;
	days[10] = 30;
	days[11] = 31;
	for (var i = 0 ; i < (month) ; i++)
	{
		retVal += days[i];
	}
	if (month > 1 && isLeapYear(year))
	{
		retVal++;
	}
	retVal = retVal + day;
	return retVal;
}

function isLeapYear(year)
{
	if ((year % 100 != 0 && year % 4 == 0) || (year % 400 == 0))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function compare(day1, day2, year1, year2)
{
	if (year1 != year2)
	{
		day2 += (year2 - year1) * 365;
		if (day1 < 59 && isLeapYear(year1))
		{
			day2++;
		}
	}
	return day2 - day1;
}

/**
 * Called on form submit to ensure that the Guest has selected a state in the event
 * that they selected the US, Canada, or Australia as the country, and did not select
 * a city
 */
function validateCountryState(form) 
{
	if ((form.referencePoint == null || form.referencePoint.value == "") &&
		(form.hotelName == null || form.hotelName.value == "") )
	{			
		var country = form.countryCode.options[form.countryCode.selectedIndex].value;
		if (country == "")
		{
			window.alert("Please select a country.");
			if ( (form.nearStreetAddress != null && form.nearStreetAddress.value != "") ||
				 (form.nearPostalCode != null && form.nearPostalCode.value != ""))
			{
				form.nearCountry.focus();
			}
			else
			{
				form.countryCode.focus();
			}
			return false;
		}
		var state	 = form.stateCode.options[form.stateCode.selectedIndex].value;
		/*
		if ((country == "US" || country == "CA" || country == "AU") && form.stateCode.selectedIndex == 0) 			
		*/
		if ((country == "US" || country == "CA" || country == "AU") && form.stateCode.selectedIndex == 0 && form.city.value == "")
		{
			window.alert("For Canada, the United States and Australia,\n please select a City or a State");
			// if the Guest is doing a 'near address' search, bring the focus there
			if ( (form.nearStreetAddress != null && form.nearStreetAddress.value != "") ||
				 (form.nearPostalCode != null && form.nearPostalCode.value != "") ) 
			{
				form.nearState.focus();
			} 
			else
			{
				form.stateCode.focus();
			}
			return false;
		}
	}
	return true;
}

/** 
 * If the Guest has input a Street Address in attempting to perform a Street Address Search,
 * this method ensures that at least a City or Postal Code has been specified in addition
 * to the basic Country or Country/State requirement
 */
function validateAddressSearch(form) {
	if (form.nearStreetAddress != null && form.nearStreetAddress.value != "") {
		if (form.nearCity.value == "" && form.nearPostalCode.value == "") {
			window.alert("When performing a Street Address search,\n you must provide either a City or a Postal Code");
			form.nearCity.focus();
			return false;
		}
	}
	return true;
}

/**
 * If the Guest wishes to reserve 6-9 rooms (US/Canada) or 4-9 rooms (non US/Canada),
 * or 10+ rooms, this method causes a popup window to open providing a link and/or
 * instructions for reserving rooms under such situations, as these types of 
 * reservations cannot be booked online
 */
function validateNumRooms(aSelect) {
	var form = aSelect.form;
	var countryCode;
	try
	{
		countryCode = form.countryCode[form.countryCode.selectedIndex].value;
	}
	catch (e)
	{
		countryCode = "XX";
	}
	var numRooms = aSelect.options[aSelect.selectedIndex].value;
	var numRoomsLabel = aSelect.options[aSelect.selectedIndex].text;
	if (countryCode == "" || countryCode == "none")
	{
		alert("You must select a country before choosing the number of rooms");
		aSelect.selectedIndex = 0;
		return false;
	}
	if (numRooms == 9) {
		aSelect.selectedIndex=0;
		aSelect.focus();
		
/* JON EDIT START - added form.base_url_book.value */
		var url = form.base_url_book.value + "message.do?msgKey=search.group_request_msg&arg1=http%3A%2F%2Fwww.bestwestern.com";
/* JON EDIT END */
		url += "&arg0=" + numRoomsLabel;		
		popupMessage(url,"msgWindow", 300,200);
		return false;
	}

	if (numRooms == 10) {
		aSelect.selectedIndex=0;
		aSelect.focus();
/* JON EDIT START - added form.base_url_book.value */
		var url = form.base_url_book.value + "message.do?msgKey=search.group_online_msg&arg0=http%3A%2F%2Fwww.bestwestern.com";
/* JON EDIT END */
		popupMessage(url,"msgWindow", 300,200);
		return false;
	}
	return true;
}

function validateReservationChangeFormAll(form)
{
	var cancel = "";
	var modifyRoom = "";
	var modifyBestExtra = "";
	var found = false;

	if (document.forms['reservationChangeForm'].elements["changesSelected"] != null)
	{
		for (var i=1; i<20; i++)
		{
			cancel = "CANCEL_ROOM" + i;
			modifyRoom = "MODIFY_ROOM" + i;
			modifyBestExtra = "MODIFY_BEST_EXTRA" + i;
			
			if ( (document.forms['reservationChangeForm'].elements[cancel] != null && document.forms['reservationChangeForm'].elements[cancel].checked) ||
				 (document.forms['reservationChangeForm'].elements[modifyRoom] != null && document.forms['reservationChangeForm'].elements[modifyRoom].checked) ||
                 (document.forms['reservationChangeForm'].elements[modifyBestExtra] != null && document.forms['reservationChangeForm'].elements[modifyBestExtra].checked) )
			{
				found = true;
				break;
			}
		}
		if (found == false)
		{
			window.alert("There are no modify options selected, please reselect.");
			return false;
		}

		for (var i=1; i<20; i++)
		{
			cancel = "CANCEL_ROOM" + i;
			modifyRoom = "MODIFY_ROOM" + i;
			modifyBestExtra = "MODIFY_BEST_EXTRA" + i;

			if (document.forms['reservationChangeForm'].elements[cancel] != null && document.forms['reservationChangeForm'].elements[cancel].checked)
			{
				if ( (document.forms['reservationChangeForm'].elements[modifyRoom] != null && document.forms['reservationChangeForm'].elements[modifyRoom].checked) ||
					 (document.forms['reservationChangeForm'].elements[modifyBestExtra] != null && document.forms['reservationChangeForm'].elements[modifyBestExtra].checked))
				{
					window.alert("Cancel Room cannot be combined with the other modify options, please reselect.");
					return false;
				}
			}
		}
	}
	return true;
}

function changeOfBillingState(aSelect, fieldName) 
{
	var val = new String(aSelect.options[aSelect.selectedIndex].value);
	var form = aSelect.form;
	
	// synch any existing state dropdown
	if (fieldName == "state") 
	{ 
		form.state.selectedIndex = aSelect.selectedIndex;
	}
	
	else if (fieldName == "billingState")
	{
		form.billingState.selectedIndex = aSelect.selectedIndex;
	}
	
	// change the country dropdown(s) to the proper value
	displayBillingCountry(aSelect, fieldName);
	
	// if the Guest selected one of the country headers in the state drop-down, complain
	if (val == "US" || val == "CA" || val == "AU") 
	{
		window.alert("For Canada, the United States and Australia,\n please select a City or a State");
		aSelect.focus();
	}
	return;
}

function changeOfBillingCountry(aSelect, fieldName) 
{
	refreshBillingStates(aSelect, fieldName);
	var form = aSelect.form;
	
	// synch any existing country dropdowns
	if (fieldName == "country") 
	{ 
		form.country.selectedIndex = aSelect.selectedIndex;
	}
	else if (fieldName == "")
	{
		form.billingCountry.selectedIndex = aSelect.selectedIndex;
	}
}

function changeOfShortenStay(aSelect, bSelectName)
{
	document.forms['reservationChangeForm'].elements[bSelectName].selectedIndex = aSelect.selectedIndex;
	return;
}

/** Displays the proper country depending on a state */
function displayBillingCountry(aSelect, fieldName) 
{
	var val	= aSelect.options[aSelect.selectedIndex].value;
	var form = aSelect.form;
	var idx = 0;
	
	if (val.indexOf("US_") == 0) 
	{
		idx = getIndex(form.billingCountry, "US");
	} 
	else if (val.indexOf("CA_") == 0) 
	{
		idx = getIndex(form.billingCountry, "CA");
	}
	else if (val.indexOf("AU_") == 0) 
	{
		idx = getIndex(form.billingCountry, "AU");
	}
	
	if (idx > 0) 
	{
		if (fieldName == "state")
		{
			form.country.selectedIndex = idx;
		}
		else if (fieldName == "billingState")
		{
			form.billingCountry.selectedIndex = idx;
		}
	}
}

function refreshBillingStates(aSelect, fieldName) 
{
	var stateCodes = new Array();
	var val = aSelect.options[aSelect.selectedIndex].value;
	var form = aSelect.form;
	
	if (val == "US") 
	{
		stateCodes = US_states;
	} 
	else if (val == "CA") 
	{
		stateCodes = CA_states;
	} 
	else if (val == "AU") 
	{
		stateCodes = AU_states;
	} 
	else if (val != "")
	{
		stateCodes = new Array(new Option("All",""));
	}

	if (fieldName == "country")
	{
		setOptions(form.state, stateCodes);
	}	
	else if (fieldName == "billingCountry") 
	{
		setOptions(form.billingState, stateCodes);
	}
}
	
/**
 * When a guest selects a state, we synch the other state box, if any, we change
 * the country to the appropriate country, and we changed the number of rooms 
 * drop-down according to the country
 */
function changeOfState(aSelect) {
	var val = new String(aSelect.options[aSelect.selectedIndex].value);
	var form = aSelect.form;

	// synch any existing state dropdown
	if (form.stateCode != null) { 
		form.stateCode.selectedIndex = aSelect.selectedIndex;
	}

	if (form.nearState!= null) { 
		form.nearState.selectedIndex = aSelect.selectedIndex;
	}
	
	// change the country dropdown(s) to the proper value
	displayCountry(aSelect);

	// refresh the number of rooms dropdown based on country
	refreshNumRoomsDropdown(form.countryCode);

	// if the Guest selected one of the country headers in the state drop-down, complain
	if (val == "US" || val == "CA" || val == "AU") {
		window.alert("For Canada, the United States and Australia,\n please select a City or a State");
		aSelect.focus();
	}
	return;
}

/**
 * When a guest selects a country, we synch the other state box, if any,
 * we display the appropriate list of states, and we display the 
 * number of rooms drop-down appropriate to the country
 */
function changeOfCountry(aSelect) {
	refreshStates(aSelect);
	refreshNumRoomsDropdown(aSelect);
	var form = aSelect.form;

	// synch any existing country dropdowns
	if (form.countryCode != null) { 
		form.countryCode.selectedIndex = aSelect.selectedIndex;
	}

	if (form.nearCountry != null) { 
		form.nearCountry.selectedIndex = aSelect.selectedIndex;
	}
}

   /**
    * called to keep the city fields the same
    */
   function synchCity(aTextbox) 
   {
		var form = aTextbox.form;
		if (form.city != null) {
			form.city.value = aTextbox.value;
		}
		if (form.nearCity != null) {
			form.nearCity.value = aTextbox.value;
		}
		return true;
   }

   
   /**
    * called to set the city field, state select and country select
	* when quick city option selected
    */
   function setCity(aOption) 
   {
		var idx = 0;
		var form = aOption.form;
		var arrayValue = aOption.value.split(";")
		// set city
		form.city.value = arrayValue[0]; //aOption.value;
		// set state
		idx = getIndex(form.stateCode, arrayValue[1]); //aOption.value2); 
		form.stateCode.selectedIndex = idx;
		// set country
		idx = getIndexCountry(form.countryCode, arrayValue[2], arrayValue[3]); //aOption.value3);
		form.countryCode.selectedIndex = idx;
		return true;
   }
   

/**
 * When a Guest selects a month, refresh the ArrivalDay drop-down;
 * also called when a year changes, to account for the possibility
 * that a leap year was selecte/unselected
 */
function changeOfMonth(aSelect) {
	selectNextDate(aSelect)
	var month = (aSelect.value).substring(4,6)
	var day   = aSelect.form.arrivalDay.value;
	var year  = aSelect.value.substring(0,4);
	var numDays = getNumDaysInMonth(month,year);
	var aryDays = new Array();

	aryDays[0] = new Option("", "-1");

	for (var i=1; i <= numDays; i++) {
		aryDays[i] = new Option(i,i);
	}

	setOptions(aSelect.form.arrivalDay, aryDays);

	// restore the date, if one was selected and is valid
	if (day > 0 && day <= numDays) {
		aSelect.form.arrivalDay.options[day].selected = true;
	}

	changeDepartureDate(aSelect.form);
}

function selectNextDate(aSelect){
	var day	  = aSelect.form.arrivalDay.value;
	var month = (aSelect.form.arrivalMonthYear.value).substring(4,6);
	var year  = (aSelect.form.arrivalMonthYear.value).substring(0,4);
	var curDate		=new Date(year,month,day)
	var nextDate	=new Date(curDate)
	nextDate.setDate(nextDate.getDate()+1);
	var nextmonthyear = nextDate.getFullYear() +'' + 
						(nextDate.getMonth() <10 ? '0'+ nextDate.getMonth() :nextDate.getMonth())
	if(	aSelect.form.departureDay.selectedIndex==0 && 
		aSelect.form.departureMonthYear.selectedIndex==0 ){
		aSelect.form.departureDay.value=nextDate.getDate();
		aSelect.form.departureMonthYear.value=nextmonthyear;
	}
}

/**
 * When a Guest selects a month, refresh the ArrivalDay drop-down;
 * also called when a year changes, to account for the possibility
 * that a leap year was selecte/unselected
 */
function changeOfMonthDeparture(aSelect) {

	if(	aSelect.form.arrivalDay.selectedIndex==0 || aSelect.form.arrivalMonthYear.selectedIndex==0 ){
		alert('Check-in date is required');
		return false;
	}


	var month = (aSelect.value).substring(4,6)
	var day   = aSelect.form.departureDay.value;
	var year  = (aSelect.value).substring(0,4);

	var numDays = getNumDaysInMonth(month,year);
	var aryDays = new Array();

	aryDays[0] = new Option("", "-1");

	for (var i=1; i <= numDays; i++) {
		aryDays[i] = new Option(i,i);
	}

	setOptions(aSelect.form.departureDay, aryDays);

	// restore the date, if one was selected and is valid
	if (day > 0 && day <= numDays) {
		aSelect.form.departureDay.options[day].selected = true;
	}

	changeDepartureDate(aSelect.form);
}


/**
 ****************************************************************************
 * functions supporting the main validation methods above
 ****************************************************************************
 */

/* Displays the proper state drop-downs based on a country */
function refreshStates(aSelect) {
	var stateCodes = new Array();
	var val = aSelect.options[aSelect.selectedIndex].value;
	var form = aSelect.form;

	if (val == "US") {
		stateCodes = US_states;
	} 
	else if (val == "CA") {
		stateCodes = CA_states;
	} 
	else if (val == "AU") {
		stateCodes = AU_states;
	} 
	else if (val != ""){
		stateCodes = new Array(new Option("All",""));
	}

	setOptions(form.stateCode, stateCodes);

	if (form.nearState != null) {
		setOptions(form.nearState, stateCodes);
	}
}

/** Displays the proper country depending on a state */
function displayCountry(aSelect) {
	var val	= aSelect.options[aSelect.selectedIndex].value;
	var form = aSelect.form;
	var idx = 0;

	if (val.indexOf("US_") == 0) {
	//if (isValueInOptionArray(val, US_states)) {
		idx = getIndex(form.countryCode, "US");
	} 
	else if (val.indexOf("CA_") == 0) {
	// else if (isValueInOptionArray(val, CA_states)) {
		idx = getIndex(form.countryCode, "CA");
	}
	else if (val.indexOf("AU_") == 0) {
	//else if (isValueInOptionArray(val, AU_states)) {
		idx = getIndex(form.countryCode, "AU");
	}

	if (idx > 0) 
	{
		form.countryCode.selectedIndex = idx;
		if (form.nearCountry != null) { 
			form.nearCountry.selectedIndex = idx;
		}
	}
}


/** refreshes the numRooms dropdown according to the country selected */
function refreshNumRoomsDropdown(aSelect) {		
	var form = aSelect.form;
	if (form.numRooms != null) {
		var opt = new Array();
		var val = aSelect.options[aSelect.selectedIndex].value;	
		var numRoomsSelect = form.numRooms;
		var currentSelect = form.numRooms.selectedIndex;
		if (val == "" || val == "none")
		{
			setOptions(form.numRooms, numRooms_noCountry);
			form.numRooms.selectedIndex = 0;
		}
		
		else if (val == "CA")
		{
			removeAllData(numRoomsSelect);
			numRoomsSelect.options[numRoomsSelect.length] = new Option("", "0");
			 
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("1", "1");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("2", "2");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("3", "3");
				 
				numRoomsSelect[numRoomsSelect.length] = new Option("4-9", "9");
				numRoomsSelect[numRoomsSelect.length] = new Option("10+", "10");				
			
		}
		
		else if (val == "IT")
		{
			removeAllData(numRoomsSelect);
			numRoomsSelect.options[numRoomsSelect.length] = new Option("", "0");
			 
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("1", "1");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("2", "2");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("3", "3");
				 
				numRoomsSelect[numRoomsSelect.length] = new Option("4-9", "9");
				numRoomsSelect[numRoomsSelect.length] = new Option("10+", "10");				
			
		}
		
		else if (val == "US")
		{
			removeAllData(numRoomsSelect);
			numRoomsSelect.options[numRoomsSelect.length] = new Option("", "0");
			 
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("1", "1");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("2", "2");
				
					numRoomsSelect.options[numRoomsSelect.length] = new Option("3", "3");
				 
				numRoomsSelect[numRoomsSelect.length] = new Option("4-9", "9");
				numRoomsSelect[numRoomsSelect.length] = new Option("10+", "10");				
			
		}
		
		else if (val == "policy")
		{
			removeAllData(numRoomsSelect);
			numRoomsSelect.options[numRoomsSelect.length] = new Option("", "0");
			 
				
		}
		
		else 
		{
			setOptions(form.numRooms, numRooms_max3);
		}
		if (form.numRooms.length > (currentSelect + 2) && !(val == "" || val == "none"))
		{				
			form.numRooms.selectedIndex = currentSelect;
		}
	}
}

/**
 * This method returns true if any one of the input elements
 * that would trigger an availability (arrival date, numNights or numRooms) 
 * has been selected - used by validateCapacityRequest to display the proper
 * alert if not all needed elements have been input
 */
function hasAStayElement(form) {
	try
	{
		
		return (
			form.arrivalMonthYear.selectedIndex > 0 ||
			form.arrivalDay.selectedIndex > 0 || 
			form.departureDay.selectedIndex > 0 || 
			form.departureMonthYear.selectedIndex > 0)  ;
	}
	catch (e)
	{
		return false;
	}


}

/**
 * This method returns true if all one of the input elements
 * that would trigger an availability (arrival date, numNights or numRooms) 
 * has been selected - used by validateCapacityRequest to display the proper
 * alert if not all needed elements have been input
 */
function hasAllStayElements(form) {
	try
	{
	return (
		form.arrivalMonthYear.selectedIndex > 0 &&
		form.arrivalDay.selectedIndex > 0 && form.departureDay.selectedIndex > 0 &&
			form.departureMonthYear.selectedIndex > 0);
		//form.arrivalYear.selectedIndex > 0 &&
//		form.numNights.value > 0 &&
//		form.numRooms.selectedIndex > 0); 
	}
	catch (e)
	{
		return false;
	}
}



/**
 ****************************************************************************
 * Generic helper functions not specific to the validation that we are performing
 ****************************************************************************
 */

/** 
 * given a select value, return its index within the select element;
 * if not found return the first element in the select
 */
function getIndex(aSelect, aValue) {
	for (var i=0; i < aSelect.length; i++) {
		if (aSelect.options[i].value == aValue) {
			return i;
		}
	}
	return 0;
}

/** 
 * given a select value, return index of occurance specified 
 * within the country select element; 
 * if not found return the first element in the select.  
 */
function getIndexCountry(aSelect, aValue, aOccurrance) {
	var iOccurrance = 0;
	for (var i=0; i < aSelect.length; i++) {
		if (aSelect.options[i].value == aValue) {
			iOccurrance++;
			if (iOccurrance == aOccurrance)
			return i;
		}
	}
	return 0;
}

/**
 * given an array of Select Option objects, this function returns 
 * true if the passed value is contained in the array; this function
 * is used to determine the Country to which a selected state belongs
 */
function isValueInOptionArray(aValue, aryOption) {
	if (aryOption.length > 0) {
		for (var i=0; i < aryOption.length; i++) {
			if (aryOption[i].value == aValue) {
				return true;
			}
		}
	}
	return false;
}

function removeAllData(options)
{
	var element = options.firstChild;
	while (element != null)
	{
		var nextChild = element.nextSibling;
		options.removeChild(element);
		element = nextChild;
	}
	options.length = 0;
}

/** 
 * given a select input and an array of Options, 
 * set the options of the select to the Options provided
 */
function setOptions(aSelect, aryOptions) {
	if (aryOptions.length > 0) {
		removeAllData(aSelect);
		for (var i=0; i < aryOptions.length; i++) {
			// if we do not assign a new Option, running this method twice
			// over the same array will yield a pointer error
			aSelect.options[aSelect.length] = new Option(aryOptions[i].text, aryOptions[i].value);
		}
	}
}

/** 
 * checks validity of date, copied from validator-rules.xml;
 * but modified to use a 0-based month index (i.e. jan=0)
 */
function isDateValid(day, month, year) {
	if (month < 0 || month > 11) {
		return false;
	}
	if (day < 1 || day > 31) {
		return false;
	}
	if ((month == 3 || month == 5 || month == 8 || month == 10) &&
		(day == 31)) {
		return false;
	}
	if (month == 1) {
		var leap = (year % 4 == 0 &&
				(year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day == 29 && !leap)) {
			return false;
		}
	}
	return true;
}


/**
 * Given a month represented by an integer (jan=0) and a year,  
 * return the number of days in that month; if the year is null, 
 * return 29 days for February
 */
function getNumDaysInMonth(month,year) {
	if (month == 3 || month == 5 || month == 8 || month == 10) {
		return 30;
	}
	else if (month == 1) {
		var leapOrNull = (year < 0) || (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (leapOrNull)
			return 29;
		else
			return 28;
	}
	else {
		return 31;
	}
}

/** 
 * wrapper around window.open used for opening a non-resizable no-thrills popup message windows
 */
function popupMessage(url, winName, aWidth, aHeight, X, Y) 
{
	// if Height and Width are passed, but no X and Y coordinates passed, 
	// center the window on the screen
	if ( aHeight != null && aWidth != null && X == null && Y == null ) {
		X = Math.round((window.screen.availWidth - aWidth) / 2);
		Y = Math.round((window.screen.availHeight - aHeight) / 2);
	}

	var features= "height="+aHeight +", width="+aWidth +
			", screenX="+X +", screenY="+Y +", left="+X +", top="+Y
			+", location=no, menubar=no, resizable=no, scrollbars=no, status=no, toolbar=no";

	var popup = window.open(url,winName, features); 
	popup.focus();
}

function switchToAdvanced()
{
	document.propertySearchForm.action = form.base_url_book.value + "advSearch.do";
	document.propertySearchForm.submit();
	return false;
}
function clearForm()
{
	document.propertySearchForm.city.value = "";
	document.propertySearchForm.stateCode.selectedIndex = 0;
	document.propertySearchForm.countryCode.selectedIndex = 0;
	document.propertySearchForm.arrivalDay.selectedIndex =0;
	document.propertySearchform.arrivalMonthYear.selectedIndex =0;
//	document.propertySearchForm.departureDay.selectedIndex = 0 ; 
//	document.propertySearchform.departureMonthYear.selectedIndex = 0
	document.propertySearchForm.arrivalYear.selectedIndex =0;
	document.propertySearchForm.numRooms.selectedIndex = 0;
	document.propertySearchForm.numNights.selectedIndex = 0;
	try
	{
		changeOfCountry(document.propertySearchForm.countryCode);
	}
	catch (e)
	{
		alert (e);
	}
}


/**
 ****************************************************************************
 * Dynamically created arrays needed to change State/Country/NumRooms
 * dropdowns in the search forms
 ****************************************************************************
 */

// create an array containing all US states
var US_states = new Array ();
US_states[0] = new Option("All","");


	 
	// 
	US_states[US_states.length] = new Option("Alabama", "US_" + "AL");
	//US_states[US_states.length] = new Option("Alabama","Alabama");

	 
	// 
	US_states[US_states.length] = new Option("Alaska", "US_" + "AK");
	//US_states[US_states.length] = new Option("Alaska","Alaska");

	 
	// 
	US_states[US_states.length] = new Option("Arizona", "US_" + "AZ");
	//US_states[US_states.length] = new Option("Arizona","Arizona");

	 
	// 
	US_states[US_states.length] = new Option("Arkansas", "US_" + "AR");
	//US_states[US_states.length] = new Option("Arkansas","Arkansas");

	 
	// 
	US_states[US_states.length] = new Option("California", "US_" + "CA");
	//US_states[US_states.length] = new Option("California","California");

	 
	// 
	US_states[US_states.length] = new Option("Colorado", "US_" + "CO");
	//US_states[US_states.length] = new Option("Colorado","Colorado");

	 
	// 
	US_states[US_states.length] = new Option("Connecticut", "US_" + "CT");
	//US_states[US_states.length] = new Option("Connecticut","Connecticut");

	 
	// 
	US_states[US_states.length] = new Option("Delaware", "US_" + "DE");
	//US_states[US_states.length] = new Option("Delaware","Delaware");

	 
	// 
	US_states[US_states.length] = new Option("District of Columbia", "US_" + "DC");
	//US_states[US_states.length] = new Option("District of Columbia","District of Columbia");

	 
	// 
	US_states[US_states.length] = new Option("Florida", "US_" + "FL");
	//US_states[US_states.length] = new Option("Florida","Florida");

	 
	// 
	US_states[US_states.length] = new Option("Georgia", "US_" + "GA");
	//US_states[US_states.length] = new Option("Georgia","Georgia");

	 
	// 
	US_states[US_states.length] = new Option("Hawaii", "US_" + "HI");
	//US_states[US_states.length] = new Option("Hawaii","Hawaii");

	 
	// 
	US_states[US_states.length] = new Option("Idaho", "US_" + "ID");
	//US_states[US_states.length] = new Option("Idaho","Idaho");

	 
	// 
	US_states[US_states.length] = new Option("Illinois", "US_" + "IL");
	//US_states[US_states.length] = new Option("Illinois","Illinois");

	 
	// 
	US_states[US_states.length] = new Option("Indiana", "US_" + "IN");
	//US_states[US_states.length] = new Option("Indiana","Indiana");

	 
	// 
	US_states[US_states.length] = new Option("Iowa", "US_" + "IA");
	//US_states[US_states.length] = new Option("Iowa","Iowa");

	 
	// 
	US_states[US_states.length] = new Option("Kansas", "US_" + "KS");
	//US_states[US_states.length] = new Option("Kansas","Kansas");

	 
	// 
	US_states[US_states.length] = new Option("Kentucky", "US_" + "KY");
	//US_states[US_states.length] = new Option("Kentucky","Kentucky");

	 
	// 
	US_states[US_states.length] = new Option("Louisiana", "US_" + "LA");
	//US_states[US_states.length] = new Option("Louisiana","Louisiana");

	 
	// 
	US_states[US_states.length] = new Option("Maine", "US_" + "ME");
	//US_states[US_states.length] = new Option("Maine","Maine");

	 
	// 
	US_states[US_states.length] = new Option("Maryland", "US_" + "MD");
	//US_states[US_states.length] = new Option("Maryland","Maryland");

	 
	// 
	US_states[US_states.length] = new Option("Massachusetts", "US_" + "MA");
	//US_states[US_states.length] = new Option("Massachusetts","Massachusetts");

	 
	// 
	US_states[US_states.length] = new Option("Michigan", "US_" + "MI");
	//US_states[US_states.length] = new Option("Michigan","Michigan");

	 
	// 
	US_states[US_states.length] = new Option("Minnesota", "US_" + "MN");
	//US_states[US_states.length] = new Option("Minnesota","Minnesota");

	 
	// 
	US_states[US_states.length] = new Option("Mississippi", "US_" + "MS");
	//US_states[US_states.length] = new Option("Mississippi","Mississippi");

	 
	// 
	US_states[US_states.length] = new Option("Missouri", "US_" + "MO");
	//US_states[US_states.length] = new Option("Missouri","Missouri");

	 
	// 
	US_states[US_states.length] = new Option("Montana", "US_" + "MT");
	//US_states[US_states.length] = new Option("Montana","Montana");

	 
	// 
	US_states[US_states.length] = new Option("Nebraska", "US_" + "NE");
	//US_states[US_states.length] = new Option("Nebraska","Nebraska");

	 
	// 
	US_states[US_states.length] = new Option("Nevada", "US_" + "NV");
	//US_states[US_states.length] = new Option("Nevada","Nevada");

	 
	// 
	US_states[US_states.length] = new Option("New Hampshire", "US_" + "NH");
	//US_states[US_states.length] = new Option("New Hampshire","New Hampshire");

	 
	// 
	US_states[US_states.length] = new Option("New Jersey", "US_" + "NJ");
	//US_states[US_states.length] = new Option("New Jersey","New Jersey");

	 
	// 
	US_states[US_states.length] = new Option("New Mexico", "US_" + "NM");
	//US_states[US_states.length] = new Option("New Mexico","New Mexico");

	 
	// 
	US_states[US_states.length] = new Option("New York", "US_" + "NY");
	//US_states[US_states.length] = new Option("New York","New York");

	 
	// 
	US_states[US_states.length] = new Option("North Carolina", "US_" + "NC");
	//US_states[US_states.length] = new Option("North Carolina","North Carolina");

	 
	// 
	US_states[US_states.length] = new Option("North Dakota", "US_" + "ND");
	//US_states[US_states.length] = new Option("North Dakota","North Dakota");

	 
	// 
	US_states[US_states.length] = new Option("Ohio", "US_" + "OH");
	//US_states[US_states.length] = new Option("Ohio","Ohio");

	 
	// 
	US_states[US_states.length] = new Option("Oklahoma", "US_" + "OK");
	//US_states[US_states.length] = new Option("Oklahoma","Oklahoma");

	 
	// 
	US_states[US_states.length] = new Option("Oregon", "US_" + "OR");
	//US_states[US_states.length] = new Option("Oregon","Oregon");

	 
	// 
	US_states[US_states.length] = new Option("Pennsylvania", "US_" + "PA");
	//US_states[US_states.length] = new Option("Pennsylvania","Pennsylvania");

	 
	// 
	US_states[US_states.length] = new Option("Rhode Island", "US_" + "RI");
	//US_states[US_states.length] = new Option("Rhode Island","Rhode Island");

	 
	// 
	US_states[US_states.length] = new Option("South Carolina", "US_" + "SC");
	//US_states[US_states.length] = new Option("South Carolina","South Carolina");

	 
	// 
	US_states[US_states.length] = new Option("South Dakota", "US_" + "SD");
	//US_states[US_states.length] = new Option("South Dakota","South Dakota");

	 
	// 
	US_states[US_states.length] = new Option("Tennessee", "US_" + "TN");
	//US_states[US_states.length] = new Option("Tennessee","Tennessee");

	 
	// 
	US_states[US_states.length] = new Option("Texas", "US_" + "TX");
	//US_states[US_states.length] = new Option("Texas","Texas");

	 
	// 
	US_states[US_states.length] = new Option("Utah", "US_" + "UT");
	//US_states[US_states.length] = new Option("Utah","Utah");

	 
	// 
	US_states[US_states.length] = new Option("Vermont", "US_" + "VT");
	//US_states[US_states.length] = new Option("Vermont","Vermont");

	 
	// 
	US_states[US_states.length] = new Option("Virginia", "US_" + "VA");
	//US_states[US_states.length] = new Option("Virginia","Virginia");

	 
	// 
	US_states[US_states.length] = new Option("Washington", "US_" + "WA");
	//US_states[US_states.length] = new Option("Washington","Washington");

	 
	// 
	US_states[US_states.length] = new Option("West Virginia", "US_" + "WV");
	//US_states[US_states.length] = new Option("West Virginia","West Virginia");

	 
	// 
	US_states[US_states.length] = new Option("Wisconsin", "US_" + "WI");
	//US_states[US_states.length] = new Option("Wisconsin","Wisconsin");

	 
	// 
	US_states[US_states.length] = new Option("Wyoming", "US_" + "WY");
	//US_states[US_states.length] = new Option("Wyoming","Wyoming");


// create an array containing all Canadian states
var CA_states = new Array ();
CA_states[0] = new Option("All","");


	 
	// 
	CA_states[CA_states.length] = new Option("Alberta", "CA_" + "AB");
	//CA_states[CA_states.length] = new Option("Alberta","Alberta");

	 
	// 
	CA_states[CA_states.length] = new Option("British Columbia", "CA_" + "BC");
	//CA_states[CA_states.length] = new Option("British Columbia","British Columbia");

	 
	// 
	CA_states[CA_states.length] = new Option("Manitoba", "CA_" + "MB");
	//CA_states[CA_states.length] = new Option("Manitoba","Manitoba");

	 
	// 
	CA_states[CA_states.length] = new Option("New Brunswick", "CA_" + "NB");
	//CA_states[CA_states.length] = new Option("New Brunswick","New Brunswick");

	 
	// 
	CA_states[CA_states.length] = new Option("Newfoundland", "CA_" + "NL");
	//CA_states[CA_states.length] = new Option("Newfoundland","Newfoundland");

	 
	// 
	CA_states[CA_states.length] = new Option("Nova Scotia", "CA_" + "NS");
	//CA_states[CA_states.length] = new Option("Nova Scotia","Nova Scotia");

	 
	// 
	CA_states[CA_states.length] = new Option("Ontario", "CA_" + "ON");
	//CA_states[CA_states.length] = new Option("Ontario","Ontario");

	 
	// 
	CA_states[CA_states.length] = new Option("Prince Edward Island", "CA_" + "PE");
	//CA_states[CA_states.length] = new Option("Prince Edward Island","Prince Edward Island");

	 
	// 
	CA_states[CA_states.length] = new Option("Quebec", "CA_" + "QC");
	//CA_states[CA_states.length] = new Option("Quebec","Quebec");

	 
	// 
	CA_states[CA_states.length] = new Option("Saskatchewan", "CA_" + "SK");
	//CA_states[CA_states.length] = new Option("Saskatchewan","Saskatchewan");

	 
	// 
	CA_states[CA_states.length] = new Option("Yukon Territory", "CA_" + "YT");
	//CA_states[CA_states.length] = new Option("Yukon Territory","Yukon Territory");


// create an array containing all Australian states
var AU_states = new Array ();
AU_states[0] = new Option("All","");


	 
	// 
	AU_states[AU_states.length] = new Option("Australian Capital Territory", "AU_" + "ACT");
	//AU_states[AU_states.length] = new Option("Australian Capital Territory","Australian Capital Territory");

	 
	// 
	AU_states[AU_states.length] = new Option("New South Wales", "AU_" + "NSW");
	//AU_states[AU_states.length] = new Option("New South Wales","New South Wales");

	 
	// 
	AU_states[AU_states.length] = new Option("Northern Territory", "AU_" + "NT");
	//AU_states[AU_states.length] = new Option("Northern Territory","Northern Territory");

	 
	// 
	AU_states[AU_states.length] = new Option("Queensland", "AU_" + "QLD");
	//AU_states[AU_states.length] = new Option("Queensland","Queensland");

	 
	// 
	AU_states[AU_states.length] = new Option("South Australia", "AU_" + "SA");
	//AU_states[AU_states.length] = new Option("South Australia","South Australia");

	 
	// 
	AU_states[AU_states.length] = new Option("Tasmania", "AU_" + "TAS");
	//AU_states[AU_states.length] = new Option("Tasmania","Tasmania");

	 
	// 
	AU_states[AU_states.length] = new Option("Victoria", "AU_" + "VIC");
	//AU_states[AU_states.length] = new Option("Victoria","Victoria");

	 
	// 
	AU_states[AU_states.length] = new Option("Western Australia", "AU_" + "WA");
	//AU_states[AU_states.length] = new Option("Western Australia","Western Australia");


// create the default number of Rooms dropdown
var numRooms_max3 = new Array(
		new Option("","0"),
		new Option("1","1"),
		new Option("2","2"),
		new Option("3","3"),
		new Option("4-9","9"),
		new Option("10+","10")
		);

// create the number of Rooms dropdown for US and CA
var numRooms_max5 = new Array(
		new Option("","0"),
		new Option("1","1"),
		new Option("2","2"),
		new Option("3","3"),
		new Option("4","4"),
		new Option("5","5"),
		new Option("6-9","9"),
		new Option("10+","10")
		);
// create the number of Rooms dropdown for no country selected.
var numRooms_noCountry = new Array(
	   new Option("", "-1"),
	   new Option("1", "1"),
	   new Option("2", "2"),
	   new Option("3", "3"),
	   new Option("4-9", "9"),
	   new Option("10+", "10"));

   var bCancel = false; 

   function validatePropertySearchForm(form) {                                                                   
       if (bCancel) 
     return true; 
       else 
      return true; 
  } 



function validateFloatRange(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oRange = new floatRange();
    for (x in oRange) {
        if ((form[oRange[x][0]].type == 'text' ||
             form[oRange[x][0]].type == 'textarea') &&
            (form[oRange[x][0]].value.length > 0)) {
            var fMin = parseFloat(oRange[x][2]("min"));
            var fMax = parseFloat(oRange[x][2]("max"));
            var fValue = parseFloat(form[oRange[x][0]].value);
            if (!(fValue >= fMin && fValue <= fMax)) {
                if (i == 0) {
                    focusField = form[oRange[x][0]];
                }
                fields[i++] = oRange[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

function validateByte(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oByte = new ByteValidations();
    for (x in oByte) {
    	var field = form[oByte[x][0]];
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
		field.type == 'radio') {
		
		var value = '';
		// get field's value
		if (field.type == "select-one") {
			var si = field.selectedIndex;
			if (si >= 0) {
			value = field.options[si].value;
			}
		} 
		else {
		value = field.value;
		}
            
        if (value.length > 0) {

         var iValue = parseInt(value);
         if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
             if (i == 0) {
                 focusField = field;
             }
             fields[i++] = oByte[x][1];
             bValid = false;
         }
		}
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

function validateMaxLength(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oMaxLength = new maxlength();
                for (x in oMaxLength) {
                    if (form[oMaxLength[x][0]].type == 'text' ||
                        form[oMaxLength[x][0]].type == 'textarea') {
                        var iMax = parseInt(oMaxLength[x][2]("maxlength"));
                        if (form[oMaxLength[x][0]].value.length > iMax) {
                            if (i == 0) {
                                focusField = form[oMaxLength[x][0]];
                            }
                            fields[i++] = oMaxLength[x][1];
                            bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }
			
function validateRequired(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRequired = new required();
                for (x in oRequired) {
                	var field = form[oRequired[x][0]];
                	
                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'file' ||
                        field.type == 'select-one' ||
                        field.type == 'radio' ||
                        field.type == 'password') {
                        
                        var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
							if (si >= 0) {
								value = field.options[si].value;
							}
						} else {
							value = field.value;
						}
                        
                        if (value == '') {
                        
	                        if (i == 0) {
	                            focusField = field;
	                        }
	                        fields[i++] = oRequired[x][1];
	                        bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }
			
function validateInteger(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oInteger = new IntegerValidations();
                for (x in oInteger) {
                	var field = form[oInteger[x][0]];

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'select-one' ||
                        field.type == 'radio') {
                        
                        var value = '';
						// get field's value
						if (field.type == "select-one") {
							var si = field.selectedIndex;
						    if (si >= 0) {
							    value = field.options[si].value;
						    }
						} else {
							value = field.value;
						}
                        
                        if (value.length > 0) {
                        
                            if (!isAllDigits(value)) {
                                bValid = false;
                            } else {
	                            var iValue = parseInt(value);
	                            if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
	                                if (i == 0) {
	                                    focusField = field;
	                                }
	                                fields[i++] = oInteger[x][1];
	                                bValid = false;
	                           }
                           }
                       }
                    }
                }
                if (fields.length > 0) {
                   focusField.focus();
                   alert(fields.join('\n'));
                }
                return bValid;
            }

function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x") {
       validChars = "0123456789abcdefABCDEF";
       startFrom = 2;
    } else if (argvalue.charAt(0) == "0") {
       validChars = "01234567";
       startFrom = 1;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}
	
function validateRange(form) {
    return validateIntRange(form);
}
	
	function validateDate(form) {
               var bValid = true;
               var focusField = null;
               var i = 0;
               var fields = new Array();
               oDate = new DateValidations();
               for (x in oDate) {
                   var value = form[oDate[x][0]].value;
                   var datePattern = oDate[x][2]("datePatternStrict");
                   if ((form[oDate[x][0]].type == 'text' ||
                        form[oDate[x][0]].type == 'textarea') &&
                       (value.length > 0) &&
                       (datePattern.length > 0)) {
                     var MONTH = "MM";
                     var DAY = "dd";
                     var YEAR = "yyyy";
                     var orderMonth = datePattern.indexOf(MONTH);
                     var orderDay = datePattern.indexOf(DAY);
                     var orderYear = datePattern.indexOf(YEAR);
                     if ((orderDay < orderYear && orderDay > orderMonth)) {
                         var iDelim1 = orderMonth + MONTH.length;
                         var iDelim2 = orderDay + DAY.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderDay && iDelim2 == orderYear) {
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                         } else if (iDelim1 == orderDay) {
                            dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                         } else if (iDelim2 == orderYear) {
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                         } else {
                            dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                            if (!isValidDate(matched[2], matched[1], matched[3])) {
                               if (i == 0) {
                                   focusField = form[oDate[x][0]];
                               }
                               fields[i++] = oDate[x][1];
                               bValid =  false;
                            }
                         } else {
                            if (i == 0) {
                                focusField = form[oDate[x][0]];
                            }
                            fields[i++] = oDate[x][1];
                            bValid =  false;
                         }
                     } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                         var iDelim1 = orderDay + DAY.length;
                         var iDelim2 = orderMonth + MONTH.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
                         } else if (iDelim1 == orderMonth) {
                             dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
                         } else if (iDelim2 == orderYear) {
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
                         } else {
                             dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                             if (!isValidDate(matched[1], matched[2], matched[3])) {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                 }
                                 fields[i++] = oDate[x][1];
                                 bValid =  false;
                              }
                         } else {
                             if (i == 0) {
                                 focusField = form[oDate[x][0]];
                             }
                             fields[i++] = oDate[x][1];
                             bValid =  false;
                         }
                     } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                         var iDelim1 = orderYear + YEAR.length;
                         var iDelim2 = orderMonth + MONTH.length;
                         var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                         var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                         if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
                         } else if (iDelim1 == orderMonth) {
                             dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
                         } else if (iDelim2 == orderDay) {
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
                         } else {
                             dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
                         }
                         var matched = dateRegexp.exec(value);
                         if(matched != null) {
                             if (!isValidDate(matched[3], matched[2], matched[1])) {
                                 if (i == 0) {
                                     focusField = form[oDate[x][0]];
                                  }
                                  fields[i++] = oDate[x][1];
                                  bValid =  false;
                              }
                          } else {
                              if (i == 0) {
                                  focusField = form[oDate[x][0]];
                              }
                              fields[i++] = oDate[x][1];
                              bValid =  false;
                          }
                     } else {
                         if (i == 0) {
                             focusField = form[oDate[x][0]];
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                     }
                  }
               }
               if (fields.length > 0) {
                  focusField.focus();
                  alert(fields.join('\n'));
               }
               return bValid;
            }

function isValidDate(day, month, year) {
    if (month < 1 || month > 12) {
               return false;
           }
           if (day < 1 || day > 31) {
               return false;
           }
           if ((month == 4 || month == 6 || month == 9 || month == 11) &&
               (day == 31)) {
               return false;
           }
           if (month == 2) {
               var leap = (year % 4 == 0 &&
                          (year % 100 != 0 || year % 400 == 0));
               if (day>29 || (day == 29 && !leap)) {
                   return false;
               }
           }
           return true;
 }
	
	function validateCreditCard(form) {
                var bValid = true;
				/*
                var focusField = null;
                var i = 0;
                var fields = new Array();
                var company = form.creditCardType.value;
                oCreditCard = new creditCard();
                for (x in oCreditCard) {
                    if ((form[oCreditCard[x][0]].type == 'text' ||
                         form[oCreditCard[x][0]].type == 'textarea') &&
                        (form[oCreditCard[x][0]].value.length > 0)) {
                        if (!checkCardMatch(company, form[oCreditCard[x][0]].value) || !luhnCheck(form[oCreditCard[x][0]].value)) {
                            if (i == 0) {
                                focusField = form[oCreditCard[x][0]];
                            }
                            fields[i++] = oCreditCard[x][1];
                            bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
				*/
                return bValid;
            }			
            
/**
 * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
 */
function luhnCheck(cardNumber) {
    if (isLuhnNum(cardNumber)) {
        var no_digit = cardNumber.length;
        var oddoeven = no_digit & 1;
        var sum = 0;
        for (var count = 0; count < no_digit; count++) {
            var digit = parseInt(cardNumber.charAt(count));
            if (!((count & 1) ^ oddoeven)) {
                digit *= 2;
                if (digit > 9) digit -= 9;
            };
            sum += digit;
        };
        if (sum == 0) return false;
        if (sum % 10 == 0) return true;
    };
    return false;
}

function isLuhnNum(argvalue) {
    argvalue = argvalue.toString();
    if (argvalue.length == 0) {
        return false;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if ((argvalue.substring(n, n+1) < "0") ||
            (argvalue.substring(n,n+1) > "9")) {
            return false;
        }
    }
    return true;
}
        
function checkCardMatch(code, st) {
	if (st.length > 19)
	{
		return (false);
	}
	if (code == "AX")
	{
		if (st.length != 15)
		{
			return (false);
		}
		prefix = st.substring(0,2);
		if (prefix != 34 && prefix != 37)
		{
			return (false);
		}
	}
	else if (code == "VA")
	{
		if (st.length != 13 && st.length != 16)
		{
			return (false);
		}
		prefix = st.substring(0,1);
		if (prefix != 4)
		{
			return (false);
		}
	}
	else if ("MC" == code)
	{
		if (st.length != 16)
		{
			return (false);
		}
		prefix = st.substring(0,2);
		if (prefix < 51 || prefix > 55)
		{
			return (false);
		}
	}
	//At any stage, can add extra cards in here for pre-validation step.
	return true;				
}

function validateIntRange(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRange = new intRange();
                for (x in oRange) {
                    if ((form[oRange[x][0]].type == 'text' ||
                         form[oRange[x][0]].type == 'textarea') &&
                        (form[oRange[x][0]].value.length > 0)) {
                        var iMin = parseInt(oRange[x][2]("min"));
                        var iMax = parseInt(oRange[x][2]("max"));
                        var iValue = parseInt(form[oRange[x][0]].value);
                        if (!(iValue >= iMin && iValue <= iMax)) {
                            if (i == 0) {
                                focusField = form[oRange[x][0]];
                            }
                            fields[i++] = oRange[x][1];
                            bValid = false;
                        }
                    }
                }
                if (fields.length > 0) {
                    focusField.focus();
                    alert(fields.join('\n'));
                }
                return bValid;
            }

			
function validateShort(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oShort = new ShortValidations();
    for (x in oShort) {
    	var field = form[oShort[x][0]];
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {
            var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
					value = field.options[si].value;
				}
			} 
			else {
				value = field.value;
			}
            
            if (value.length > 0) {
	            var iValue = parseInt(value);
    	        if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
         	       	if (i == 0) {
                		focusField = field;
	                }
                	fields[i++] = oShort[x][1];
                 	bValid = false;
            	}
           }
        }
    }
    
	if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}

			
function validateFloat(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oFloat = new FloatValidations();
    for (x in oFloat) {
    	var field = form[oFloat[x][0]];
    	
        if (field.type == 'text' ||
            field.type == 'textarea' ||
            field.type == 'select-one' ||
            field.type == 'radio') {
	       	var value = '';
			// get field's value
			if (field.type == "select-one") {
				var si = field.selectedIndex;
				if (si >= 0) {
			   		value = field.options[si].value;
				}
			}
			else {
				value = field.value;
			}
            
            if (value.length > 0) {
				var iValue = parseFloat(value);
             	if (isNaN(iValue)) {
                	if (i == 0) {
                    	focusField = field;
                 	}
                 	fields[i++] = oFloat[x][1];
                 	bValid = false;
             	}
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}
			
			
function validateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oEmail = new email();
    for (x in oEmail) {
        if ((form[oEmail[x][0]].type == 'text' ||
             form[oEmail[x][0]].type == 'textarea') &&
            (form[oEmail[x][0]].value.length > 0)) {
            if (!checkEmail(form[oEmail[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEmail[x][0]];
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}


/**
 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
 * http://javascript.internet.com
 */
function checkEmail(emailStr) {
   if (emailStr.length == 0) {
       return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
       return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
       return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
       for (var i = 1; i <= 4; i++) {
          if (IPArray[i] > 255) {
             return false;
          }
       }
       return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
       return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
       (domArr[domArr.length-1].length > 3)) {
       return false;
   }
   if (len < 2) {
       return false;
   }
   return true;
}
			
			
function validateMask(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    oMasked = new mask();
    for (x in oMasked) {
        if ((form[oMasked[x][0]].type == 'text' ||
             form[oMasked[x][0]].type == 'textarea' ||
             form[oMasked[x][0]].type == 'password') &&
            (form[oMasked[x][0]].value.length > 0)) {
            if (!matchPattern(form[oMasked[x][0]].value, oMasked[x][2]("mask"))) {
                if (i == 0) {
                    focusField = form[oMasked[x][0]];
                }
                fields[i++] = oMasked[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}


function matchPattern(value, mask) {
   var bMatched = mask.exec(value);
   if (!bMatched) {
       return false;
   }
   return true;
}
			
			
function validateMinLength(form) {
	var bValid = true;
	var focusField = null;
	var i = 0;
	var fields = new Array();
	oMinLength = new minlength();
	for (x in oMinLength) {
	    if (form[oMinLength[x][0]].type == 'text' ||
	        form[oMinLength[x][0]].type == 'textarea') {
	        var iMin = parseInt(oMinLength[x][2]("minlength"));
	        if (form[oMinLength[x][0]].value.length < iMin) {
	            if (i == 0) {
	                focusField = form[oMinLength[x][0]];
	            }
	            fields[i++] = oMinLength[x][1];
	            bValid = false;
	        }
	    }
	}
	if (fields.length > 0) {
	   focusField.focus();
	   alert(fields.join('\n'));
	}
	return bValid;
}

var Browser = new Object();
with (Browser) {
	Browser.b = Browser;
	b.a = navigator.userAgent.toLowerCase();
	b.v = navigator.appVersion;
	b.version = parseFloat(v);
	b.major = parseInt(v);
	b.opera = (a.indexOf('opera') != -1)?true:false;
	b.hotjava = (a.indexOf('hotjava') != -1)?true:false;
	b.webtv = (a.indexOf('webtv') != -1)?true:false;
	b.nav = (a.indexOf('mozilla') != -1 && a.indexOf('spoofer') == -1 && 
		a.indexOf('compatible') == -1 && !opera && !webtv && !hotjava)?true:false;
	b.nav4 = (nav && major == 4)?true:false;
	b.nav6 = (nav && major == 5)?true:false;
	b.nav6up = (nav && major >= 5)?true:false;
	b.aol = (a.indexOf('aol') != -1)?true:false;
	b.ie = (!opera && a.indexOf('msie') != -1)?true:false;
	b.ie4 = (ie && major == 4 && a.indexOf('msie 4') != -1)?true:false;
	b.ie4up = (ie && major >= 4)?true:false;
	b.ie5 = (ie4up && a.indexOf('msie 5.0') != -1)?true:false;
	b.ie5up = (ie4up && !ie4)?true:false;
	b.macie5=(ie4 && v.indexOf("macintosh")!=-1)?true:false;
	b.ie55 = (ie5up && a.indexOf('msie 5.5') != -1)?true:false;
	b.ie55up = (ie5up && !ie5)?true:false;
	b.ie6 = (ie4up && a.indexOf('msie 6.') != -1)?true:false;
	b.ie6up = (ie55up && !ie55)?true:false;
	b.win95 = (a.indexOf('win95') != -1 || a.indexOf('windows 95') != -1)?true:false;
	b.win98 = (a.indexOf('win98') != -1 || a.indexOf('windows 98') != -1)?true:false;
	b.mac = (a.indexOf('macintosh') != -1)?true:false;
	b.win9x = (win95 || win98)?true:false;
	b.sun = (a.indexOf('sunos') != -1)?true:false;
}
