//alert('ResSupport.js');

var TEXTBOX = 1;
var DROPDOWN = 2;
var UI_TYPE;

function Yesterday() // returns a date object with yesterday's date
{
	//var t = new Date();
	//var y = new Date( t - 86400000);
	//return y;

	y = new Date();
	y.setHours( 12 ); // noon to avoid problems with 23, 25 hour days
	y.setTime( y.getTime() - 86400000 );
	return y;
}

function getReservationSubmitButtonPath(field, brand, LangID)
{
	var path;
	var prefix;
	UI_TYPE = DROPDOWN;

	switch (brand) {
		case 'fourpoints' :
			path = "four_points";
			prefix = "fp";
			break;
		case 'GX' :	case 'gx' :
			path = "spg";
			prefix = "pg";
			break;
		case 'luxury' :
			path = "luxury";
			prefix = "lx";
			break;
		case 'Sheraton' : case 'sheraton' :
			path = "sheraton";
			prefix = "si";
			break;
		case 'st_regis' :
			path = "st_regis";
			prefix = "st";
			break;
		case 'whotels' :
			path = "w_hotels";
			prefix = "wh";
			break;
		case 'Westin' : case 'westin' :
			path = "westin";
			prefix = "we";
			break;
		case 'MD' :	case 'md' :
			path = "le_meridien";
			prefix = "md";
			break;
		case 'aloft' :
			path = "alofthotels";
			prefix = "al";
			break;
		case 'element' :
			path = "element";
			prefix = "el";
			break;
		//default :
		//	path = "";
	}

	//path = '/SWCode_Static/ResSupportImages/' + path + '/' + Brand.toLowerCase() + '_btn_res_' + LangID + '.gif';     //si_btn_res_1033.gif
	path = '/SWCode_Static/ResSupportImages/' + path + '/' + prefix.toLowerCase() + '_btn_reservations_' + LangID + '.gif';     //we_btn_reservations_1033.gif
	field.src = path;
	return path;
}

function setHotelProperties(doc, iIndex)
{
	//doc.write('Index: ' + iIndex + '<br />');
	//doc.write('PropertyID: ' + propertyID + '<br />');

	if (iIndex > -1)
	{
		//var requestedChainCode;
		//var requestedAffiliationCode;

		//doc.write('Brand: ' + aryBrand[iIndex] + '<br />');
		//doc.write('PropertyID: ' + aryPropertyID[iIndex] + '<br />');

		switch (aryBrand[iIndex]) 
		{
			case 'fourpoints' :
				requestedChainCode = "SI";
				requestedAffiliationCode = "4P";
				break;
			//case 'GX' :
			case 'gx' : case 'GX' :
				requestedChainCode = "GX";
				requestedAffiliationCode = "SW";
				break;
			case 'luxury' :
				requestedChainCode = "SI";
				requestedAffiliationCode = "LC";
				break;
			case 'Sheraton' : case 'sheraton' :
				requestedChainCode = "SI";
				requestedAffiliationCode = "SI";
				break;
			case 'st_regis' :
				requestedChainCode = "SI";
				requestedAffiliationCode = "LC";
				break;
			case 'whotels' :
				requestedChainCode = "WH";
				requestedAffiliationCode = "WH";
				break;
			case 'westin' :	case 'Westin' :
				requestedChainCode = "WI";
				requestedAffiliationCode = "WI";
				break;
			case 'MD' : case 'md' :
				requestedChainCode = "MD";
				requestedAffiliationCode = "MD";
				break;
			case 'Aloft' : case 'aloft' :
				requestedChainCode = "AL";
				requestedAffiliationCode = "AL";
				break;
			case 'Element' : case 'element' :
				requestedChainCode = "EL";
				requestedAffiliationCode = "EL";
				break;
		}

		propertyID = aryPropertyID[iIndex];
		brand = aryBrand[iIndex];
		requestedChainCode = requestedChainCode;
		requestedAffiliationCode = requestedAffiliationCode;
		ratePlanName = aryRatePlanName[iIndex];
		corporateAccountNumber = aryCorporateAcctNumber[iIndex];

		var holdOmnitureTrackingValue = '';
		aryOmnitureTrackingParam = aryOmnitureTrackingCode[iIndex].split("=");
		if(aryOmnitureTrackingParam.length == 2)
		{
			var inputObj = document.getElementById('OmnitureTrackingParam');
			if(inputObj != undefined)
			{ 
				inputObj.name = aryOmnitureTrackingParam[0];
				inputObj.value = aryOmnitureTrackingParam[1];
				holdOmnitureTrackingValue = aryOmnitureTrackingParam[1];
			}
		}
		
		//Split the query string parameters from the url.
		aryBookingParams = aryHotelBookURLParams[iIndex].split("?");
		if(aryBookingParams.length == 2)
		{
			var tempParamList = aryBookingParams[1];
			//Split the individual query string pairs.
			aryBookingParams = tempParamList.split("&");
			if(aryBookingParams.length > 0)
			{
				var i;
				var sDivHtml = '';
				var aryParam;
				var objDIV = document.getElementById('hiddenParameters');
				if(objDIV != undefined)
				{ 
					for(i=0;i<aryBookingParams.length;i++)
					{
						//Split the parameter into name and value.
						aryParam = aryBookingParams[i].split("=");
						if(aryParam[0] != 'propertyID' && aryParam[1] != holdOmnitureTrackingValue)
						{
							sDivHtml = sDivHtml + '<INPUT TYPE=hidden NAME=' + aryParam[0] + ' VALUE=' + aryParam[1] + '>';
						}
					}
					objDIV.innerHTML = sDivHtml;
				}
			}
		}

		// Set successPath for selected property.
		var objForm = document.getElementById('searchForm');
		if(objForm != undefined)
		{ 
			objForm.action= arysuccessPath[iIndex];
		}
		
		//doc.write('PropertyID: ' + propertyID + '<br />');
		//doc.write('brand: ' + brand + '<br />');
		//doc.write('requestedChainCode: ' + requestedChainCode + '<br />');
		//doc.write('requestedAffiliationCode: ' + requestedAffiliationCode + '<br />');
	}
}

function setHotelProperty(doc, sBrand)
{
	switch (sBrand) 
	{
		case 'fourpoints' :
			requestedChainCode = "SI";
			requestedAffiliationCode = "4P";
			break;
		case 'gx' : case 'GX' :
			requestedChainCode = "GX";
			requestedAffiliationCode = "SW";
			break;
		case 'luxury' :
			requestedChainCode = "SI";
			requestedAffiliationCode = "LC";
			break;
		case 'Sheraton' : case 'sheraton' :
			requestedChainCode = "SI";
			requestedAffiliationCode = "SI";
			break;
		case 'st_regis' :
			requestedChainCode = "SI";
			requestedAffiliationCode = "LC";
			break;
		case 'whotels' :
			requestedChainCode = "WH";
			requestedAffiliationCode = "WH";
			break;
		case 'westin' :	case 'Westin' :
			requestedChainCode = "WI";
			requestedAffiliationCode = "WI";
			break;
		case 'MD' : case 'md' :
			requestedChainCode = "MD";
			requestedAffiliationCode = "MD";
			break;
		case 'Aloft' : case 'aloft' :
			requestedChainCode = "AL";
			requestedAffiliationCode = "AL";
			break;
		case 'Element' : case 'element' :
			requestedChainCode = "EL";
			requestedAffiliationCode = "EL";
			break;
	}

	propertyID = propertyID;
	brand = brand;
	requestedChainCode = requestedChainCode;
	requestedAffiliationCode = requestedAffiliationCode;
	ratePlanName = ratePlanName;
	corporateAccountNumber = corporateAccountNumber;
	
	var holdOmnitureTrackingValue = '';
	aryOmnitureTrackingParam = OmnitureTrackingCode.split("=");
	if(aryOmnitureTrackingParam.length == 2)
	{
		var inputObj = document.getElementById('OmnitureTrackingParam');
		if(inputObj != undefined)
		{ 
			inputObj.name = aryOmnitureTrackingParam[0];
			inputObj.value = aryOmnitureTrackingParam[1];
			holdOmnitureTrackingValue = aryOmnitureTrackingParam[1];
		}
	}
	
	//Split the query string parameters from the url.
	aryBookingParams = successPath.split("?");
	if(aryBookingParams.length == 2)
	{
		var tempParamList = aryBookingParams[1];
		//Split the individual query string pairs.
		aryBookingParams = tempParamList.split("&");
		if(aryBookingParams.length > 0)
		{
			var i;
			var sDivHtml = '';
			var aryParam;
			var objDIV = document.getElementById('hiddenParameters');
			if(objDIV != undefined)
			{ 
				for(i=0;i<aryBookingParams.length;i++)
				{
					//Split the parameter into name and value.
					aryParam = aryBookingParams[i].split("=");
					if(aryParam[0] != 'propertyID' && aryParam[1] != holdOmnitureTrackingValue)
					{
						sDivHtml = sDivHtml + '<INPUT TYPE=hidden NAME=' + aryParam[0] + ' VALUE=' + aryParam[1] + '>';
					}
				}
				objDIV.innerHTML = sDivHtml;
			}
		}
	}

	// Set successPath for selected property.
	var objForm = document.getElementById('searchForm');
	if(objForm != undefined)
	{ 
		objForm.action= successPath;
	}
}

function setGoSearchUrl(field, brand)
{
	path = 'http://www.starwoodhotels.com/' + GetBrandName(brand) + '/go.search'; //ex: http://www.starwoodhotels.com/stregis/go.search
	field.action = path;
	return path;
}

function GetReserveLabel(brand)
{
	var label;

	switch (brand) {
		case 'Westin' :	case 'westin' : case 'luxury' : case 'st_regis' : case 'stregis' :
    		label = RESERVE_LABEL;
    		break;
		case 'fourpoints' : case 'GX' : case 'gx' : case 'Sheraton' : case 'sheraton' : case 'whotels' : case 'MD' : case 'md' : case 'Aloft' : case 'aloft' : case 'Element' : case 'element' : 
    		label = BOOK_NOW_LABEL;
    		break;
  		default:
    		label = BOOK_NOW_LABEL;
    		break;
    }
    
    return label;
}

function GetSearchLabel(brand)
{
	var label;
    label = SEARCH_LABEL;
    return label;

}

function GetBrgUrl(brand)
{
	var pathBRG;
	pathBRG = 'http://www.starwoodhotels.com/en_US/html/HTML_Blocks/BRG/searchResults_BRG_popup.jsp?brgBrand=' + GetBrandCode(brand);
	return pathBRG;
}

/*
-------------------------------------------------------------------------------------------
				 COMMON BRAND ROUTINES
-------------------------------------------------------------------------------------------
*/

function GetBrandName(brand)
{
	var brandname;
	
	switch (brand) {
		case 'fourpoints' :
			brandname = "fourpoints";
			break;
		case 'GX' : case 'gx' :
			brandname = "preferredguest";
			break;
		case 'luxury' :
			brandname = "luxury";
			break;
		case 'Sheraton' : case 'sheraton' :
			brandname = "sheraton";
			break;
		case 'st_regis' :
			brandname = "stregis";
			break;
		case 'whotels' :
			brandname = "whotels";
			break;
		case 'Westin' : case 'westin' :
			brandname = "westin";
			break;
		case 'MD' : case 'md' :
			brandname = "lemeridien";
			break;
		case 'Aloft' : case 'aloft' :
			brandname = "alofthotels";
			break;
		case 'Element' : case 'element' :
			brandname = "elementhotels";
			break;
	}
	return brandname;
}

function GetBrandCode(brand)
{
	var brandcode;
	
	switch (brand) {
		case 'fourpoints' :
			brandcode = "4P";
			break;
		case 'GX' : case 'gx' :
			brandcode = "SPG";
			break;
		case 'luxury' :
			brandcode = "LC";
			break;
		case 'Sheraton' : case 'sheraton' :
			brandcode = "SI";
			break;
		case 'st_regis' :
			brandcode = "ST";
			break;
		case 'whotels' :
			brandcode = "WH";
			break;
		case 'Westin' : case 'westin' :
			brandcode = "WI";
			break;
		case 'MD' : case 'md' :
			brandcode = "MD";
			break;
		case 'Aloft' : case 'aloft' :
			brandcode = "AL";
			break;
		case 'Element' : case 'element' :
			brandcode = "EL";
			break;
	}
	return brandcode;
}

/*
-------------------------------------------------------------------------------------------
				 WATSON BUSINESS RULES FUNCTIONS
-------------------------------------------------------------------------------------------
*/

//------------------------------------
// default the checkin date to today's date
function setDateToToday(f, isDefaultDates,defaultValue,DATE_FORMAT)
{
	if (startCIDate == '' && isDefaultDates == false){
		f.ciDate.value = DATE_FORMAT; //'MM/DD/YYYY';
		f.coDate.value = DATE_FORMAT; //'MM/DD/YYYY';
		f.arrivalDate.value = '';
		f.departureDate.value = '';


	} else if (startCIDate == '' && isDefaultDates == true) {
		function lZero(nr) {if (nr < 10) nr = "0" + nr;return nr;}
	
		var today = new Date();
		var month = today.getMonth() + 1;
		var day = today.getDate();
		var year = today.getYear() + "";

		f.ciDate.value = lZero(month) + "/" +  lZero(day) + "/200" + year.charAt(year.length-1);
		f.coDate.value = lZero(month) + "/" +  lZero(day + 1) + "/200" + year.charAt(year.length-1);
	
		var checkIn = new validDate(f.ciDate);
		
		if ( checkIn.valid ) {
			checkIn.setField();
			f.arrivalDate.value = f.ciDate.value;
			
			var checkInAlt = new validDate(f.arrivalDate);
			checkInAlt.setAltField(checkInAlt.d);
	
			var checkOut = validDate(f.coDate);
			
			if ( (! (checkOut.valid)) || (checkOut.d.getTime() < checkIn.d.getTime())) {
				checkOut.setD(checkIn.d);
				checkOut.nextDay();
				checkOut.setField();
				
				f.departureDate.value = f.coDate.value;
				
				var checkOutAlt = validDate(f.departureDate);
				checkOutAlt.setAltField(checkOutAlt.d);
			}
		}		
		
	} else {
		f.ciDate.value = startCIDate;
		f.coDate.value = startCODate;
		f.arrivalDate.value = startCIDateBE;
		f.departureDate.value = startCODateBE;
	}
}
//-------------------------------------

function ciDate_onBlur(defaultValue) {
	var checkIn = new validDate(f.ciDate);
	
	if ( checkIn.valid ) {
		checkIn.setField();
		f.arrivalDate.value = f.ciDate.value;
		
		var checkInAlt = new validDate(f.arrivalDate);
		checkInAlt.setAltField(checkInAlt.d);

		var checkOut = new validDate(f.coDate);
		if ( !(checkOut.valid) || (checkOut.d.getTime() < checkIn.d.getTime())) {
			
			checkOut.setD(checkIn.d);
			checkOut.nextDay();
			checkOut.setField();
			
			f.departureDate.value = f.coDate.value;
			
			var checkOutAlt = validDate(f.departureDate);
			checkOutAlt.setAltField(checkOutAlt.d);
		}
	} else {
		f.ciDate.value = defaultValue;
		f.arrivalDate.value = '';
	}
}

function coDate_onBlur(defaultValue) {
	var checkOut = new validDate(f.coDate);
	if ( checkOut.valid ) {
		checkOut.setField();
		
		f.departureDate.value = f.coDate.value;
		
		var checkOutAlt = validDate(f.departureDate);
		checkOutAlt.setAltField(checkOutAlt.d);
	} else {
		f.coDate.value = defaultValue;
		f.departureDate.value = '';
	}
}


//------------------------------------------------------
          // U T I L I T Y    F U N C T I O N S
//-------------------------------------------------------
// padd a zero if string is one char
function paddZero(s)
{
	if(s >= 0 && s <= 9){
	  s = '0' + s;
	}
	return s;
}
//------------------------------------------------------
// reset a form
function okReset(f) {
	var formElements = f.elements;
	var str = "";
	var name, type, value

	for (i=0; i<formElements.length; i++) {
		name  = formElements[i].name;
		type = formElements[i].type;
		value = formElements[i].value;
		
		if (type == 'text'){
			if (name == 'ciDate'){formElements[i].value = dateFormatString;}
			else if (name == 'coDate'){formElements[i].value = dateFormatString;}
			else {formElements[i].value = '';}
		}		
		if (type == 'checkbox'){formElements[i].checked = false;}
		if (type == 'select-one'){formElements[i][formElements[i].selectedIndex].selected = 0;}
	}
}

//------------------------------------------------------
// function set errorArray
function setErrCode(code)
{
	errorArray[errorArray.length] = code;
}
//------------------------------------------------------
// function set resetArray
function resetErr()
{
   errorArray = new Array();
}
//-------------------------------------------------
// diff in days between two dates
function getDiffDays(indate,outdate)
{
	if(indate == null || outdate == null)
		return '';
	
	var diff = '';
	// this will give us a float i.e something like 7.9583333.. for 8 days
	var df =  ( outdate.getTime()-indate.getTime() ) / (1000 * 60 * 60 * 24);
	
	// convert to a whole number
	df = Math.round(df);
	
	// convert to string
	diff = df.toString(10);
	
	return diff;
}
//-------------------------------------------------

function correctDate(incFormat) //incorrect format expected: yyyy-mm-dd
{
	if (incFormat != ''){
		var tempArray = incFormat.split("-");
		
		var tempYear = tempArray[0];
		var tempMonth = tempArray[1];
		var tempDay = tempArray[2];

		var corFormat = tempMonth + "/" + tempDay + "/" + tempYear;	
		return corFormat;
	} else {
		return false;
	}
}

//-------------------------------------------------
// Write to a Div layer
function writetoDiv(containerName,elemLoc,msg,pageType)
{
//alert(elemLoc);
	if (document.layers) {
		elemLoc = containerName.document[elemLoc];
		elemLoc.document.open();
		elemLoc.document.write("<br>"+msg);
		elemLoc.document.close();
	} else {
	    var objStyle = document.getElementById(elemLoc).style;
		if(msg == null){
			objStyle.display = 'none';
		} else {
			document.getElementById(elemLoc).innerHTML = msg;
			objStyle.display = 'block';
			objStyle.visibility = 'visible';
		}
	}
}
//-------------------------------------------------
// TabSwitching functions
function tabSwitch(newSection,pageType) {
	if (pageType == '' || pageType == null){
		hideSection(activeSection);
		showSection(newSection);
		activeSection = newSection;
	}
}

function hideSection (sectionName) {
	var tempSection = getSectionRef(sectionName);
	hideDiv(tempSection.elemName);
}

function showSection (sectionName) {
	var tempSection = getSectionRef(sectionName);
	showDiv(tempSection.elemName);
}

function hideDiv (divRef) {
	var tempDiv = document.getElementById(divRef);
	tempDiv.style.visibility = "hidden";
}
function showDiv (divRef) {
	var tempDiv = document.getElementById(divRef);
	tempDiv.style.visibility = "visible";
}
//-------------------------------------------------
// Determine if there are any errors.
function checkForErrors(f1,action,pageType,f2)
{

	if (errorArray.length > 0){
		for (i=0; i < errorArray.length; i++){
			showErrArray = showErrArray + errorArray[i] + ", ";
		}
		//alert(showErrArray);
		resetPage(pageType);
		evalErrors(errorArray,f1,pageType);
		
		resetErr();
		showErrArray = '';
	} else {
		// begin alert form elements before submitting
			if (f2){var formElements = f2.elements;}
			else if (f1){var formElements = f1.elements;}
			else{var formElements = f.elements;}
			
			var str = "";
	
			for (i=0; i<formElements.length; i++) {
				var name  = formElements[i].name;
				var value = formElements[i].value;
				var type  = formElements[i].type;
				str += type + " " + name + " = " + value + "\n";
			}
			//alert(str);
		// end alert form elements before submitting

		if (f2){
			f2.action = action;
			f2.submit();
		} else {
			f1.action = action;
			f1.submit();
		}
	}
}
//-------------------------------------------------
// Clear whatever field you pass in 
function clearField(fieldName, valueToCheck)
{
	if (eval(fieldName).value == valueToCheck){
		eval(fieldName).value = '';
	};
};
//-------------------------------------------------
// utility function to validate dates
function validDate(field) {
	this.field = field;
	_s  = field.value;

	// separate the parts of the date and rearrange into 'MM/DD/YYYY' format
	if (DATE_FORMAT == 'DD/MM/YYYY')
	{ 	_s = setDDtoMMFormat(_s);	}
	else if (DATE_FORMAT == 'DD.MM.YYYY')
	{ 	_s = setDDtoMMFormatDE(_s);	}
	else if (DATE_FORMAT == 'YYYY/MM/DD')
	{	_s = setYYtoMMFormat(_s);	}

	_d = new Date()
	_d.setTime(Date.parse(_s))

	this.valid = true;
	if ( isNaN(_d.getDate()) ) {
		var year = new Date().getYear() + "";
		_d.setTime(Date.parse(  _s + "/200" + year.charAt(year.length-1))); 
		if ( isNaN(_d.getDate() ) ) {
			this.valid = false;
		} else {
			var nowDelta = _d.getTime() - new Date().getTime();
			if (nowDelta < (-1 * (1000*60*60*24*5) )) { 
				_d.setYear(_d.getYear() + 1);
			} 
		}
	}
	this.d = _d;
	this.setD = function(_d) {this.d = _d}
	this.setNonD = function(_s) {this.s = _s}
	this.getM = function() {
		var month = this.d.getMonth();
		return month;
	}
	this.getD = function() {
		var day = this.d.getDay();
		return day;
	}
	this.getY = function() {
		var y = (this.d.getYear() + 10000) % 100;
		y += (y < 38) ? 2000 : 1900; 
		return y
	}
	this.setField = function() {
		if (DATE_FORMAT == 'DD/MM/YYYY')
		{
			s = lZero(this.d.getDate()) + "/" + lZero(this.d.getMonth() + 1) + "/" + this.getY();
		}
		else if (DATE_FORMAT == 'DD.MM.YYYY')
		{
			s = lZero(this.d.getDate()) + "." + lZero(this.d.getMonth() + 1) + "." + this.getY();
		}
		else if (DATE_FORMAT == 'YYYY/MM/DD')
		{
			s = this.getY() + "/" + lZero(this.d.getMonth() + 1) +"/"+ lZero(this.d.getDate());
		}
		else  //'MM/DD/YYYY'
		{
			s = lZero(this.d.getMonth() + 1) +"/"+ lZero(this.d.getDate()) + "/" + this.getY();
		}
		field.value = s
		return s;
	}
	this.setAltField = function() {
		s = this.getY() +"-"+ lZero(this.d.getMonth() + 1 ) + "-" + lZero(this.d.getDate());
		field.value = s
		return s;
	}
	this.nextDay = function() {
		return this.d.setDate(this.d.getDate()+1);
	}
	this.diffDate = function(dd) {
		return (makeDate(this.d).getTime() - makeDate(dd).getTime()) / (1000*60*60*24);
	}
	function makeDate(md) {
		return new Date(md.getMonth() + 1 + "/" + md.getDate() + "/" + md.getYear()); 
	}

	function lZero(nr) {if (nr < 10) nr = "0" + nr;return nr;}

	return this;
}
//--------------------------------------------------------

function IsDDMMYYYYValid(entry){
rex=/\b(0?[1-9]|[12][0-9]|3[01])\/(1[0-2]|0?[1-9])\/\d\d\d\d/
return rex.test(entry)
}

//--------------------------------------------------------
function setDDtoMMFormat(dt){
	d = dt;
	a = d.split("/");
	d = a[1] + "/" + a[0] + "/" + a[2];
	return d;
}
//--------------------------------------------------------
function setDDtoMMFormatDE(dt){
	d = dt;
	a = d.split(".");
	d = a[1] + "." + a[0] + "." + a[2];
	return d;
}
//--------------------------------------------------------
function setYYtoMMFormat(dt){
	d = dt;
	a = d.split("/");
	d = a[1] + "/" + a[2] + "/" + a[0];
	return d;
}
//--------------------------------------------------------
// calculate the lengthOfStay
function getLengthOfStay(checkin,checkout){
var checkinDate = getDateFromField(checkin, dateFormatString);
var checkoutDate = getDateFromField(checkout, dateFormatString);
	if (!(isNaN(checkinDate)) && !(isNaN(checkoutDate))){
		if(f.lengthOfStay != null) {
			var diff = getDiffDays(checkinDate,checkoutDate);
			if(diff > 30 || diff < 0)
			diff = 0;
			
			f.lengthOfStay.value = diff;
		}
	}
}
//--------------------------------------------------------
//Get the Date from a form field - Based on Internationalization Variables

function getDateFromField(formField, dateFormat) {
	// formField is a reference to a text field
	// dateFormat is a string describing the local date format
	//	Current options for dateFormat:
	//		mm/dd/yyyy - English
	//		dd.mm.yyyy - German
	//		dd/mm/yyyy - Non-English, Non-Japanese
	//		yyyy/mm/dd - Japanese
	
	var date = new Date(); // Default the date to today ready to be overwritten.
	var currDate = new Date(); // Today's date and time for comparison's sake.

	dateFormat = dateFormat.toLowerCase();
	var fieldString;
	if (typeof formField == "object") { fieldString= formField.value; } // Get the current value of the field
		else { fieldString = formField; } // We were passed a direct value
	if (fieldString.search("/") > 0) { // check if we have / to delimit
		var dateValues = fieldString.split("/");
	} else if (fieldString.search("[.]") > 0) { // They used . instead of /
		var dateValues = fieldString.split(".");
	} else if (fieldString.search("-") > 0) { // They used - instead of /
		var dateValues = fieldString.split("-");
	} else if (fieldString != "") {  // Assume there are no delimiters, assume one number
		var dateValues = new Array(fieldString);
	} else if (fieldString == "") {  // If there's not data there, assume it was deleted, and throw back a validDate object compatible invalid date.
		date.setTime(Date.parse(dateFormatString));
		return date;
	}

	if (fieldString.toLowerCase() == dateFormatString) { 
		date.setTime(Date.parse(fieldString));
		return date;
	}
	
	var year;
	var month;
	var day;
	
	switch(dateFormat) {
		case 'mm/dd/yyyy':
			if (dateValues[0]) month = dateValues[0];
			if (dateValues[1]) day = dateValues[1];
			if (dateValues[2]) year = dateValues[2];
			break;
		case 'dd/mm/yyyy':
			if (dateValues[0]) day = dateValues[0];
			if (dateValues[1]) month = dateValues[1];
			if (dateValues[2]) year = dateValues[2];
			break;
		case 'dd.mm.yyyy':
			if (dateValues[0]) day = dateValues[0];
			if (dateValues[1]) month = dateValues[1];
			if (dateValues[2]) year = dateValues[2];
			break;
		case 'yyyy/mm/dd':
			if (dateValues[0]) year = dateValues[0];
			if (dateValues[1]) month = dateValues[1];
			if (dateValues[2]) day = dateValues[2];
			break;
		case 'yyyy/dd/mm':
			if (dateValues[0]) year = dateValues[0];
			if (dateValues[1]) day = dateValues[1];
			if (dateValues[2]) month = dateValues[2];
			break;
		default:  // Default to mm/dd/yyyy
			if (dateValues[0]) month = dateValues[0];
			if (dateValues[1]) day = dateValues[1];
			if (dateValues[2]) year = dateValues[2];
			break;
	}
			
	if (year) { 
		if (year.length == 2) { year = "20" + year; } // Try to make the year 4 digits
		if (year.length == 4) { // If it's not 4 digits, just fall back to using the current year
			date.setFullYear(year);
		}
	}
	date.setDate(1);
	if (month) date.setMonth(month - 1); // setMonth uses a zero-based number
	if (day) date.setDate(day);
	if (date.getTime() < currDate.getTime()) date.setYear(currDate.getFullYear() + 1); // For dates in the past, set to next year.
	writeDateToField(formField, date, dateFormat);
	return date;
}
//--------------------------------------------------------
//Write the date to a form field - Based on Internationalization Variables

function writeDateToField(formField, date, dateFormat) {

	if ( isNaN(date.getDate() ) ) {
		formField.value = dateString;
		return;
	}
	
	dateFormat = dateFormat.toLowerCase();
	var month = date.getMonth() + 1;
	month = paddZero(month);
	var day = date.getDate();
	day = paddZero(day);
	var year = date.getFullYear();
	var dateString;
	var sep = "/";
	var sepDE = ".";
	switch(dateFormat) {
		case 'mm/dd/yyyy':
			dateString = month + sep + day + sep + year;
			break;
		case 'dd/mm/yyyy':
			dateString = day + sep + month + sep + year;
			break;
		case 'dd.mm.yyyy':
			dateString = day + sepDE + month + sepDE + year;
			break;
		case 'yyyy/mm/dd':
			dateString = year + sep + month + sep + day;
			break;
		case 'yyyy/dd/mm':
			dateString = year + sep + day + sep + month;
			break;
		default:  // Default to mm/dd/yyyy
			dateString = month + sep + day + sep + year;
			break;
	}
	
	formField.value = dateString;
}
/*
-------------------------------------------------------------------------------------------
				 WATSON DATE ERROR CHECKING FUNCTIONS
-------------------------------------------------------------------------------------------
*/
function okCheckDates() {
	if (f.ciDate.value != 'MM/DD/YYYY'){
		var checkIn = new validDate(f.ciDate);
		if (!checkIn.valid ) {
			// check-in date not valid
			setErrCode(19);
			setErrCode(1);
		}
	}
	
	if (f.coDate.value != 'MM/DD/YYYY'){
		var checkOut = new validDate(f.coDate);	
		if (!checkOut.valid) {
			// check-out date not valid
			setErrCode(20);
			setErrCode(2);
		}
	}	
		
	if (f.ciDate.value != 'MM/DD/YYYY' && f.coDate.value != 'MM/DD/YYYY'){
		if ( (checkIn.valid) & (checkOut.valid) ) {
			// check for other date validation
			//alert("datesCheck(" + checkIn.d + ", " + checkOut.d);
			datesCheck(checkIn, checkOut);
		}
	}
}

// this function takes Dates, not validDates()
function datesCheck(checkIn, checkOut) {
	checkIn.setField();
	var datesDelta = checkOut.d.getTime() - checkIn.d.getTime();
	var nowDelta = checkIn.diffDate(new Date());
	var datesEqual = (checkIn.d.getTime() == checkOut.d.getTime());
	
	// begin 550 day check
		var today = new Date();
		today.setHours(0);
		today.setMinutes(0);
		today.setSeconds(0);
		today.setMilliseconds(0);
		var limit = new Date(550 * 24 * 60 * 60 * 1000);
		/*have to add the 1 hr in millis because of the possibility of daylight savings time removing an hour.*/
		var isTooLong = (checkOut.d.getTime() - today.getTime() >= (limit.getTime() - (60*60*1000))) ? true : false;
	// end 550 day check
	
	if (nowDelta < 0 ) {
		// Error : checkin date before today
		setErrCode(9);
		setErrCode(1);
	} else if (datesEqual) {
		// Error : checkin date = checkout date
		setErrCode(11);
		setErrCode(1);
		setErrCode(2);
	} else if (isTooLong) {
		// Error : too far out in the future (> 550 days or 18 months)
		setErrCode(13);
		setErrCode(1);
		setErrCode(2);
	} else if (datesDelta < 0) {
		// Error : checkin date after checkout date
		setErrCode(10);
		setErrCode(1);
		setErrCode(2);
	} else if (datesDelta > 1000*60*60*24*30) {
		// Error : stay too long (> 30 days or 1 month)
		setErrCode(12);
		setErrCode(1);
		setErrCode(2);
	}
}

/*
-------------------------------------------------------------------------------------------
				 WATSON ERROR CONTROLLER
-------------------------------------------------------------------------------------------
*/

function evalErrors(errorArray,f,pageType)
{
	var errorMsg, elemLoc;
	var errNum = 0;
	
	for (i=0; i < errorArray.length; i++){
		switch(errorArray[i]) {
			case 1:
				errorMsg = ERR001; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Check-in';
				elemLoc = 'divCI';
				break;
			case 2:
				errorMsg = ERR002; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Check-out';
				elemLoc = 'divCO';
				break;
			case 3:
				errorMsg = ERR003; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Zip Code (U.S. only)';
				elemLoc = 'divZip';
				break;
			case 4:
				if (pageType == 'advSearch'){
					errorMsg = ERR004A; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Country';
				} else {
					errorMsg = ERR004B; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0">&nbsp;';
				}
				elemLoc = 'divCountry';
				break;
			case 5:
				if (pageType == 'advSearch'){
					errorMsg = ERR005A; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> State/Province';
				} else {
					errorMsg = ERR005B; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0">&nbsp;';
				}
				elemLoc = 'divStateProvince';
				break;
			case 6:
				errorMsg = ERR006; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Rate Range (USD)';
				elemLoc = 'divRateRange';
				break;
			case 7:
				errorMsg = ERR007; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Street address (U.S. only)';
				elemLoc = 'divAddress';
				break;
			case 8:
				errorMsg = ERR008; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> City<br>';
				elemLoc = 'divCity';
				break;
			//---------------------
			case 9:
				errorMsg = ERR009; //'Arrival date cannot be earlier than today.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 10:
				errorMsg = ERR010; //'Departure date cannot be earlier than arrival date.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 11:
				errorMsg = ERR011; //'Arrival and departure date cannot be on the same day.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 12:
				errorMsg = ERR012; //'Your stay cannot be more than one month.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 13:
				errorMsg = ERR013; //'You can only book up to 550 days in advance.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 14:
				errorMsg = ERR014; //'Zip Code search is only available in the U.S.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 15:
				errorMsg = ERR015; //'Address Search is only available in the U.S.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 16:
				errorMsg = ERR016; //'The zip code entered is not valid. Please try again.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 17:
				errorMsg = ERR017; //'Need to enter city, state, and country for address search.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 18:
				errorMsg = ERR018; //'The check-in and checkout dates entered are not valid. Please try again.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 19:
				errorMsg = ERR019; //'The check-in date entered is not valid. Please try again.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 20:
				errorMsg = ERR020; //'The checkout date entered is not valid. Please try again.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 21:
				errorMsg = ERR021; //'Rate range search is for U.S. hotels only.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 22:
				errorMsg = ERR022; //'Please enter your search criteria.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 23:
				errorMsg = ERR023; //'Need to enter state/province for a U.S. city search.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 24:
				errorMsg = ERR024; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Special Rate Plan (ID required at Check-in)';
				elemLoc = 'divSpecRate';
				break;
			case 25:
				errorMsg = ERR025; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0"> Promotion Code';
				elemLoc = 'divPromoCode';
				break;
			case 26:
				errorMsg = ERR026; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0">&nbsp;&nbsp;';
				elemLoc = 'divSET';
				break;
			case 27:
				errorMsg = ERR027; //'<img src="http://www.starwood.com/Media/Graphics/Common/error_arrow.gif" border="0">&nbsp;&nbsp;';
				elemLoc = 'divIATA';
				break;
			case 28:
				errorMsg = ERR028; //'The Travel Agent number entered is not valid.  Please try again.<br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 29:
				errorMsg = ERR029; //'The SET number entered is not valid. Please try again.<br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 30:
				errorMsg = ERR030; //'You can either enter a promotion code or select a special rate plan. Please clear one of those fields.<br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 31:
				errorMsg = ERR031; //'You cannot select a special rate plan when you have entered a SET or corporate account number. Please clear one of those fields.<br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 32:
				errorMsg = ERR032; //'<br/>You must agree to the Terms & Conditions in order to continue.<br/><br/>';
				elemLoc = 'divTCError';
				errNum = errNum + 1;
				break;
			case 33:
				errorMsg = ERR033; //'<br/>There are too many hotels in the United States to list here. Please specify at least City or State for best results.<br/><br/>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 34:
				errorMsg = ERR034; //'Need to enter a country for a city search.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;
			case 80:
				errorMsg = ERR080; //'Need to select a hotel from the list.<br><br>';
				elemLoc = 'divMsgTop';
				errNum = errNum + 1;
				break;				
		}
		if(sectionReference != null){tabSwitch('section1',pageType);}//switch the tab to see the error message
		if(pageType == 'home'){errorMsg = '<span class="searchFormErrorTextHome">' + errorMsg + '</span>';}
		else{errorMsg = '<span class="searchFormErrorText">' + errorMsg + '</span>';}
		writetoDiv(sectionReference,elemLoc,errorMsg,pageType);
	}
	//generic messaging
	//alert(errNum);
	if (errNum > 1 || errNum == 0){
		if(pageType == 'home'){errorMsg = '<span class="searchFormErrorTextHome">We need you to correct or provide more information. Please see each marked section.<br><br></span>';}
		else{errorMsg = '<span class="searchFormErrorText">We need you to correct or provide more information. Please see each marked section.<br><br></span>';}
		elemLoc = 'divMsgTop';
		if(sectionReference != null){tabSwitch('section1',pageType)};//switch the tab to see the error message
		writetoDiv(sectionReference,elemLoc,errorMsg,pageType);
	}
}



/*
-------------------------------------------------------------------------------------------
				 COMMON FORM INIT
-------------------------------------------------------------------------------------------
*/
//------------------------------------------------------------
// Create and Initialize Form Object
if (!formLookupInited) {
	var formLookup = new Object();
	var formLookupInited = true;
}
//------------------------------------------------------------

//------------------------------------------------------------
// Functions to create a reference to a form.
function createFormRef(formName, formRef) {
	formLookup[formName] = formRef;
}

function getFormRef (formName) {
	if (formLookup) {
		return formLookup[formName];
	} 
}

function initializeForm (formName,divRef) {
	var formRef = divRef.document.forms[formName];
	createFormRef(formName,formRef);
}
//------------------------------------------------------------



/*
-------------------------------------------------------------------------------------------
				 DROP DOWN DAY/MONTH
-------------------------------------------------------------------------------------------
*/
//------------------------------------------------------------

//------------------------------------------------------------