var req

function loadCities(objSel) 
{
	var regionCode
	
	// if region-enabled update, an empty region means clearing the city list
	if (document.forms[0].searchMode.value == "weekly" && objSel.selectedIndex == 0)
	{
		// an empty region means clearing the city list
		document.forms[0].cityZip.options.length = 0
	}
	else
	{
		// otherwise filter 
		regionCode = objSel.options[objSel.selectedIndex].value;
		getCityList(regionCode)
	}
	
}

function getCityList(regionCode)
{
	req = false;
	
	if (document.forms[0].searchMode.value == "weekly")
		channelId = 1
	else
		channelId = 0
		
	url = "includes/getRegionCities.asp?channelID="+channelId+"&regionId=" +regionCode
	
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("MSXML2.ServerXMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
	}
}

function processReqChange() 
{
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
            
            //alert(req.responseText)
            objResults = eval('(' +req.responseText +')')
            populateCitiesList(objResults);
        } else {
            alert("There was a problem retrieving the Data:\n" +
                req.statusText);
        }
    }
}

function populateCitiesList(cities)
{
	var citiesList = document.getElementById("cityZip");
	var firstOptionText = "";

	//if we couldn't find the cities drop down
	if (citiesList == null)
	{
		return; //couldn't find the cities dropdown...
	}
	
	citiesList.options.length = 0; //reset the cities dropdown
	
	// add first entry into the list
	//alert(document.forms[0].searchMode.value)
	with (document.forms[0])
	{
		if (searchMode.value == "nightly" || searchMode.value == "packages" || (searchMode.value == "weekly" && region.selectedIndex > 0))
		{
			firstOptionText = "Please Select a City"
		}
	}
	citiesList.options[citiesList.options.length] = new Option(firstOptionText, "");       
	
	//alert(cities)
	//alert("rows len:" +cities.Rows.length)
	for (var i = 0; i < cities.Rows.length; ++i)
	{
		citiesList.options[citiesList.options.length] = new Option(cities.Rows[i].state +" -- " +cities.Rows[i].city, cities.Rows[i].city +"--" +cities.Rows[i].zip);       
	}  
	
}

function dateDiff(date1, date2)
{
	var one_day=1000*60*60*24
	return Math.ceil((date1.getTime()-date2.getTime())/(one_day))
}

function dateAdd(indt, days) {
	var d = new Date(indt);
	var dv = d.valueOf();
	var ndv;

	ndv = dv + (days*(1000*60*60*24));
	
	var nd = new Date(ndv);
	return ((nd.getMonth() + 1) + "/" + nd.getDate() + "/" + nd.getFullYear());
}

function dateAddPrev(indt, days, sign) {
	var d = new Date(indt);
	var dv = d.valueOf();
	var ndv;
	if (sign == "+")
		ndv = dv + (days*(1000*60*60*24));
	else
		ndv = dv - (days*(1000*60*60*24));
	var nd = new Date(ndv);
	return ((nd.getMonth() + 1) + "/" + nd.getDate() + "/" + nd.getFullYear());
}

function setSelectValue(obj, value)
          {
			var i = 0
			foundText = false
			
			for (i = 0; i < obj.options.length; i++)
			{
				if (obj.options[i].value == value)
				{
					obj.selectedIndex = i
					foundText = true
					break
				}
			}
			
			if (!foundText)
				obj.options[0].selected
			
          }
          
          function setSelectText(obj, value)
          {
			var i = 0
			foundText = false
			
			//alert("-" +value +"-")
			for (i = 0; i < obj.options.length; i++)
			{
				if (obj.options[i].text == value)
				{
					obj.selectedIndex = i
					foundText = true
					break
				}
			}
			
			if (!foundText)
				obj.options[0].selected
			
          }
          
          function selectPackages()
          {
			// change tab image src's
			document.getElementById("availability").src = "images/botNightly_Off.gif"
			document.getElementById("Packages").src = "images/botPackages_On.gif"
			document.getElementById("Weekly").src = "images/botWeekly_Off.gif"
			
			document.forms[0].searchMode.value = "packages"
						
			var CalendarArrival
			
			
			CalendarArrival = document.getElementById("uixCalendarArrival")
			CalendarArrival.onclick = function()
			{ 
				show_calendar('fineavail.arrival',null,null,'MM/DD/YYYY', null, null, 'fineavail.departdate', 3);
				return false;
			}
						
			displayRegionFields(false)
			displayPackageAdditionalFields(true)
			
          }
          
          function selectResorts()
          {
			// change tab image src's
			document.getElementById("availability").src = "images/botNightly_On.gif"
			document.getElementById("Packages").src = "images/botPackages_Off.gif"
			document.getElementById("Weekly").src = "images/botWeekly_Off.gif"
			
			var CalendarArrival
			
			CalendarArrival = document.getElementById("uixCalendarArrival")
			CalendarArrival.onclick = function()
			{ 
				show_calendar('fineavail.arrival',null,null,'MM/DD/YYYY', null, null, 'fineavail.departdate', 3);
				return false;
			}
			
			// set the search mode
			document.forms.fineavail.searchMode.value = "nightly"
			
			//alert("displayRegionFields")
			displayRegionFields(false)
			
			//alert("displayPackageAdditionalFields")
			displayPackageAdditionalFields(false)
			
          }
          
          function selectWeekly()
          {
			// change tab image src's
			document.getElementById("availability").src = "images/botNightly_Off.gif"
			document.getElementById("Packages").src = "images/botPackages_Off.gif"
			document.getElementById("Weekly").src = "images/botWeekly_On.gif"
			
			var CalendarArrival;
			
			CalendarArrival = document.getElementById("uixCalendarArrival");
			CalendarArrival.onclick = function()
			{ 
				show_calendar('fineavail.arrival',null,null,'MM/DD/YYYY', null, null, 'fineavail.departdate', 7);
				return false;
			}
		
			// set the search mode
			document.forms.fineavail.searchMode.value = "weekly"
			
			displayRegionFields(true)
			displayPackageAdditionalFields(false)
			
			// set the arrival and departure dates
			with (document.forms.fineavail)
			{
				var startdate = new Date(document.getElementById("arrival").value);
				var today = new Date();
						
				//alert(dateDiff(startdate, today) )
				
				if (dateDiff(startdate, today) < 3)
				{
					arrival.value = dateAdd(today, 3);
				}
				departdate.value = dateAdd(arrival.value, 7);
				
				// Format the dates for presentation
				var ad = new Date(document.getElementById("arrival").value);
				arrival.value = ad.formatDate("m/d/Y");
				
				var dd = new Date(document.getElementById("departdate").value);
				departdate.value = dd.formatDate("m/d/Y");
				
			}
			
          }
          
          function checkWeeklyDate()
          {
			with (document.forms.fineavail)
			{
				if (searchMode.value == "weekly")
					departdate = dateAdd(arrival.value, 7)
			}
          }
          
          function displayRegionFields(display)
          {
			if (display)
			{
				
				// show the region drop-down
				document.getElementById("regionSelect").style.display = "inline"
				//regionSelect.style.display = 'inline'
				
				// filter city list
				with (document.forms[0])
				{
					
					// if a region is selected
					if (region.selectedIndex > 0)
					{
						var regionCode
	
						regionCode = region.options[region.selectedIndex].value;
						getCityList(regionCode)
					}
					else
					{
						// clear city list
						cityZip.options.length = 0
					}
					
				}
				
			}
			else
			{
				// hide the drop-down
				//regionSelect.style.display = 'none'
				document.getElementById("regionSelect").style.display = "none"
				
				with (document.forms[0])
				{	
					//alert("czsi:" +cityZip.selectedIndex)
					if (cityZip.selectedIndex > 0)
					{
						// get the current city
						varCity = cityZip.options[cityZip.selectedIndex].value	
						
						//alert("city:" +city)
						//alert("cityZip:" +varCity)	
					
						// load all the cities
						getCityList('')
						//alert(cityZip.options.length)
						
						// set the drop-down city value
						setSelectValue(cityZip, varCity)
					}
					else
					{
						// load all the cities
						getCityList('')
					}
				}
			}
          }
          
          function displayRegionFields2(display)
          {
			if (display)
			{
				// show the region drop-down
				regionSelect.style.display = 'inline'
				
				with (document.forms[0])
				{
					
					// if a city is selected
					if (cityZip.selectedIndex > 0)
					{
						// set the region to the current city's state
						//alert(cityZip.selectedIndex)
						varCityState = document.forms[0].cityZip.options[document.forms[0].cityZip.selectedIndex].text
												
						//alert(varCityState)
						arrText = varCityState.split(" ")
						//alert(arrText[0])
					
						setSelectText(region, arrText[0])
						
						getCityList(arrText[0])
						
						setSelectText(city, varCityState)
					}
					else
					{
						//alert(region.selectedIndex)
						if (region.selectedIndex > 0)
						{
							// set the region to the current region value
							getCityList(region.options[region.selectedIndex].value)
						}
						else
						{
							// just empty the city list
							cityZip.options.length = 0
						}	
						
					}
				}
			}
			else
			{
				// hide the drop-down
				regionSelect.style.display = 'none'
				
				with (document.forms[0])
				{
					//alert(cityZip.selectedIndex)
					
					if (cityZip.selectedIndex > -1)
					{
						// get the current city
						varCity = cityZip.options[cityZip.selectedIndex].value	
						
						//alert(varCity)	
					
						// load all the cities
						getCityList('')
						
						// set the drop-down city value
						setSelectValue(city, varCity)
					}
					else
					{
						// load all the cities
						getCityList('')
					}
				}
				
			}
          }
          
          
          function displayPackageAdditionalFields(display)
          {
			
			if (display)
			{
				document.getElementById("divGuests").style.display = "inline"
				//divGuests.style.display = 'inline'
			}
			else
			{
				document.getElementById("divGuests").style.display = "none"
				//divGuests.style.display = 'none'
			}
          }
          
          function validateCity()
          {
			var valid = true
			
				with (document.forms[0])
				{
					//alert(cityZip.selectedIndex)
					//alert("-" +cityZip.options[cityZip.selectedIndex].value +"-")
					
					if (cityZip.selectedIndex < 1)
						valid = false
					else	
						if (cityZip.options[cityZip.selectedIndex].value == "")
							valid = false
					
					if (!valid)
					{
						if (searchMode.value == "nightly" || searchMode.value == "packages")
						{
							alert("Please Select City")
							cityZip.focus()
							return false
						}
						else
						{
							alert("Region and City must be selected")
							region.focus()
							return false
						}
					}
				}
				
				return valid
          }
          
			
			function channelMileRound(miles)
			{
				if (miles <=5)
					{ miles = 5 }
				else if (miles <= 10)
					{ miles = 10 }
				else if (miles <= 25)
					{ miles = 25 }
				else if (miles <= 50)
					{ miles = 50 }
				else if (miles <= 100)
					{ miles = 100 }
				else if (miles <= 200)
					{ miles = 200 }
				else
					{ miles = 300 }
				
				return miles
			}
					
			
			function validateSearch()
			{
				if (validateCity())
				{
					with (document.forms.fineavail)
					{
						// split the city zip value into the hidden form fields
						arrCityZip = cityZip.options[cityZip.selectedIndex].value.split("--")
						
						city.value = Text.trim(arrCityZip[0])
						if (arrCityZip.length > 1)
							zip.value = Text.trim(arrCityZip[1])
						
						//alert("city:-" +Text.trim(arrCityZip[0]) +"-")
						//alert("zip:-" +Text.trim(arrCityZip[1]) +"-")
						
						startdate = new Date(document.getElementById("arrival").value);
						enddate = new Date(document.getElementById("departdate").value);
						var today = new Date();
						
						//miles = document.getElementById("maxmiles").value
						miles = maxmiles.value
						
						if (miles == "" || isNaN(miles))
						{
							alert("Please enter in a valid mile(s)");
							return false;
						}
						
						//if (occupants == "")
						//{
						//	alert("Please choose a valid occupant number")
						//	return false;
						//}
						
						if (startdate >= enddate)
						{
							alert("The arrival date can not be greater than the depart date");
							return false;
						}
						
						if (enddate < today)
						{
							alert("The depart date can not be less than today's date");
							return false;
						}
						

						if (searchMode.value == "weekly" )
						{
							if( dateDiff(startdate, today) < 3)
							{
								alert("The arrival date must be at least 3 days from today.");
								return false;
							}
						}
						else
						{
							if (dateDiff(today, startdate) > 1)
							{
								alert("The arrival date can not be less than today's date");
								return false;
							}
						}	
						// if search type is weekly 
						if (searchMode.value == "weekly")
						{
							// round up miles
							miles = channelMileRound(miles)
							//alert(miles)
							
							// then min stay is 7 and max stay is 20
							if (dateDiff(enddate, startdate) < 7)
							{
								alert("The date span can not be less than 7 days");
								return false;
							}
							
							if (dateDiff(enddate, startdate) > 21)
							{
								alert("The date span can not be more than 21 days");
								return false;
							}
						}
						else
						{
							// otherwise is min 1 day and max 60
							if (dateDiff(enddate, startdate) > 60)
							{
								alert("The date span can not be more than 60 days");
								return false;
							}
						}
						
					}
					
					maxmiles.value = miles
					
					return true
				}
				else
					return false
			}