var us_states = [ "AL","AK","AP","AZ","AR","CA","CO","CT","DE","DC","FL","GA","HI","ID","IL",
	      		  "IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV",
	      		  "NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX",
	      		  "UT","VT","VA","WA","WI","WV", "WI","WY" ];
var ca_prov = [ "AB","BC","LB","MB","NB","NL","NWT","NS","NU","ON","PI","PE","QC","SK","YT" ];
var misc = [ "AS", "GU", "FM", "MH", "MP", "PW", "PR", "VI" ];

var stateProvinceAutoSet = true;
var countryAutoSet = true;
var searchForm = new WebForm();
// declare the form to validate, can be (and is) overwritten on including JSP
var f = document.searchForm;

function searchForm_onSubmit() {
	searchForm.resetErrors();

    checkLocationFields();
	searchForm.collapseErrors("multipleError");

	if (searchForm.hasErrors()) {
		searchForm.showErrors();
        return false;
	} else {
		return true;
	}
}

function checkLocationFields() {
	locationStatus = getLocationStatus();
	isAddressSearch = (f.searchType.value == "address")
	if (!isAddressSearch) {
		if (locationStatus =="BLANK") {
			searchForm.addError("~searchCriteriaRequiredError", "stateProvinceError", "countryError" );
			return;
		}
		if (locationStatus == "CITY_ONLY") {
			searchForm.addError("~countryRequiredForCitySearchError", "countryError" );
			return;
		}
		if (locationStatus == "INVALID_US_SEARCH") {
			searchForm.addError("~toGeneralUSSearchError","stateProvinceError" );
			return;
		}
	} else {
		if ((locationStatus =="INVALID_US_SEARCH") && (!addressEntered)) {
			searchForm.addError("~searchCriteriaRequiredError", "stateProvinceError" );
			return;
		}		
	}
}
function getLocationStatus() {
	cityEmpty = (f.city.value =="");
	stateProvinceEmpty = (f.stateProvince.value == "");
	countryEmpty = (f.country.value=="");
	countryUS = (f.country.value=="US");
	
	if ((!cityEmpty) && (!stateProvinceEmpty) && (!countryEmpty)) { return "COMPLETE_SEARCH"; }
	if ((!stateProvinceEmpty) && (!countryEmpty)) { return "STATE_SEARCH"; }
	if ((!cityEmpty) && (!countryUS) && (!countryEmpty)) { return "NON_US_CITY_SEARCH"; }
	if ((!countryEmpty) && (!countryUS) ) { return "NON_US_COUNTRY_SEARCH"; }
	if ((stateProvinceEmpty) && (countryUS) ){ return "INVALID_US_SEARCH"; }
	if ((!cityEmpty) && (stateProvinceEmpty) && (countryEmpty)) { return "CITY_ONLY"; }
	if ((cityEmpty) && (stateProvinceEmpty) && (countryEmpty)) { return "BLANK"; }
	return "INCOMPLETE";
}
function getZipCodeStatus() {
	var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
	if(f.postalCode.value == ''){
		return "BLANK";
	} else if(!objRegExp.test(f.postalCode.value)){
		return "INVALID";
	} else {
		return "VALID"
	}
}

function rateRange_onChange() {
	if (f.country[f.country.selectedIndex].value == "US") {
		f.rateRange.disabled = false;
	} else {
		f.rateRange.disabled = true;
		f.rateRange.selectedIndex = 0;
	}
}

function setDropDown(v,dd) {
	for (i = 0; i < dd.options.length - 1; i++ ) {
		if ( dd.options[i].value == v ) {
			dd.selectedIndex = i;
			return true
		}
	}
	return false;
}

function stateProvince_onChange() {
	c = false;
	if(isIn(f.stateProvince.value,us_states)) {
		c = "US";
	} else if(isIn(f.stateProvince.value,ca_prov)) {
		c = "CA";
	} else if(isIn(f.stateProvince.value,misc)) {
		c = "US";
	}
	if (c != false) {
		setDropDown(c,f.country);
	}
	stateProvinceAutoSet = false;
}

function isIn(elt, list){
	for(var i=0; i < list.length; i++){
		var tempArray = list[i].split(":")
		if( tempArray[0] == elt ){
			return tempArray;
		}
	}
	return false;
}

function searchTab_onClick(searchAction, isLoggedIn) {
	searchForm.resetErrors();
	f.searchAction.value = searchAction;
	var t = (searchAction == 'findRooms')
	document.getElementById('rightSearchTab').className = t ? "faded" : "selected";
	document.getElementById('leftSearchTab').className = t ? "selected" : "faded";
	document.getElementById('roomInfo').style.display= t ? "" : "none";

	document.getElementById('redeemLoggedOut').style.display = (!isLoggedIn && (!t)) ? "block" : "none";
	document.getElementById('standardForm').style.display = (! (!isLoggedIn && (!t))) ? "block" : "none";
}

function searchType_onClick(searchType) {
	searchForm.resetErrors();
	f.searchType.value = searchType;
	document.getElementById('cityToggle').className = (searchType == "city") ? "toggleHREFSelected" : "toggleHREF";
	document.getElementById('favoritesToggle').className = (searchType == "favorite") ? "toggleHREFSelected" : "toggleHREF";
	var byF = (searchType == "favorite")
	document.getElementById('byLocationBlock').style.display = byF ? "none" : "block";
	document.getElementById('byFavoriteBlock').style.display = byF ? "block" : "none";
	if (!byF) {
		var t = (searchType == "city");
		document.getElementById('byLocationBlock').style.display = "none";
		if (!t) {f.country.selectedIndex = 1;}
		document.getElementById('byLocationBlock').style.display = "block";
		rateRange_onChange();
	} else {
		f.rateRange.disabled = true;
		f.rateRange.selectedIndex = 0;
	}
}

function advancedSearch_onClick() {
	f.searchAction.value = "advanced";
	if (f.sendRedirect.value != null){
		f.sendRedirect.value = "true";
	}
	f.submit();
}