function Verisign(url) {
 sealWin=window.open(url,"win",'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=535,height=450');
 self.name = "mainWin";
 }

// Check if using IE or Mozilla
IE4=(document.all);
if(IE4) 
{
	// We are IE, so use the ActiveX objects for XML
	objXML = new ActiveXObject("Msxml2.DOMDocument.3.0");
	objXML.validateOnParse = true;
	objXML.loadXML( "<xml><test>TEST</test></xml>" );
	if (objXML.parseError.errorCode == 0) {
		hasXML = true;
	}
	g_VerificationXML = new ActiveXObject("Msxml2.DOMDocument");
	g_VerificationXML.async = false;
	g_VerificationXML.load(g_ADDRESS + "/includes/Markets.xml");
	//g_VerificationXML.load("Markets.xml");
	g_YearIndex = 2;
}
else
{
	// We are Mozilla, so use the DOM Level 3 implementation objects
	var objXMLHTTP = new XMLHttpRequest();
	objXMLHTTP.open("GET", g_ADDRESS + "/includes/Markets.xml", false);
	//objXMLHTTP.open("GET", "Markets.xml", false);
	objXMLHTTP.send(null);

	g_VerificationXML = objXMLHTTP.responseXML;
	
	g_YearIndex = 1;
}

//for golf collapse image
var ReferrerCollapse;
	if (g_Referrer == "M43") {
		ReferrerCollapse = g_Referrer;
	}else{
		ReferrerCollapse = "";
	}


// Setup Origin and Destination switchy images
expandCollapseImgs = new Array;
expandCollapseImgs[0]     = new Image();
expandCollapseImgs[0].src = g_IMAGES + "/" + ReferrerCollapse + "bt_info.gif";
expandCollapseImgs[1]     = new Image();
expandCollapseImgs[1].src = g_IMAGES + "/" + ReferrerCollapse + "bt_info.gif";

function get_radio_value(){
	for (var i=0; i < document.resTool.PackageType.length; i++) {
	   if (document.resTool.PackageType[i].checked) {
	      var packageType = document.resTool.PackageType[i].value;
	    }
	}
}

// Function Name: submitSearch
// Purpose: Determines what form to submit the search to.
// Parameters: None
// Return: None
function submitSearch()
{
	// Get Radio Button values
	var SWCharterRadio = FIND("rdoOVMCharter");
	var SBTCharterRadio = FIND("rdoSBTCharter");
	var SBTSkedRadio = FIND("rdoSBTSked");
	for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
	
	var validForm = validateDes();
	//if (packageType != g_HotelOnly)
	if (packageType == g_AirHotel)
	{
		validForm = validateOrg() && validForm;
	}

	validForm = occupancyTest() && validForm;

    validForm = validateText() && validForm;
	// If the form was valid, then determine what form to submit
	if (validForm)
	{
		// Verify which type of search this is
		verifyUA();
		verifySBTCharter();
		if(packageType == g_AirHotel)
		{
			// When we are AirHotel, we can be either OVM Charter (UARisk), SBT Charter, or SBT Sked
			if(g_UARisk && SWCharterRadio.checked)
			{
				// The UARisk flag was set and the SW Charter radio was selected, then submit to OVM
				submitSBT(g_SBTCharterVendor, false, true);
			}
			else if(g_SBTCharter && SBTCharterRadio.checked)
			{
				// The SBTCharter flag was set and the SBT Charter radio was selected, then submit to SBT as charter
				submitSBT(g_SBTCharterVendor, false, false);
			}
			else
			{
				// No flags were set, submit as Scheduled Air
				submitSBT(g_SKEDVendor, false, false)
			}
		}
		else if (packageType == g_HotelCar)
		{
			submitSBT(g_SBTAirOnlyVendor, false, false);
		}
		else if (packageType == g_HotelOnly)
		{ 
			submitHotelOnly();
		}
	}

	return false;
}




// Function Name: submitSBT
// Purpose: Submits the SBT form directly to SBT
// Parameters: vendor - Vendor to subit as.
// Return: None
function submitSBT(vendor, TARSFlag, isSW)
{
	// Find SBT form and original search form
	var SBTForm = FIND("SBTresTool");
	var SearchForm = FIND("resTool");

	// Determine package type
	//var packageType =  SearchForm.PackageType[SearchForm.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}

	// Create date objects out of return and departure date
    var returnDate = new Date(document.resTool.gsReturnDate.value);
    var departDate = new Date(document.resTool.gsDepartureDate.value);

	// Adjust year from '05' to '2005'
	returnDate = adjustYear(returnDate);
	departDate = adjustYear(departDate);
	
	// Check if we are not on a land only and if we are TARS and set the action
	if (TARSFlag == true && (packageType != g_HotelOnly))
	{
	    SBTForm.action = g_TARSSearch;
	}
	else
	{
	    SBTForm.action = g_SBTSearch;
    }

	// Fill in SBT form from values from the original Search form
	SBTForm.gsVendor.value = vendor;
	if (isSW)
	    SBTForm.gsVacationType.value = "AH01";
	else
	SBTForm.gsVacationType.value = packageType;
	SBTForm.gsDestination.value = SearchForm.gsDestinationHidden.value;
	
	// If we are hotel only, we need to send in a differant value for origin
	//g_AirHotel
	if ( (packageType == g_AirHotel)  )//	if ( (packageType != g_HotelOnly) && (packageType != g_HotelCar) )
	{
		SBTForm.gsOrigin.value = SearchForm.gsOriginHidden.value;
	}
	else
	{
		SBTForm.gsOrigin.value = "XXX";
	}
	
	var foCarrier = SearchForm.foCarrier.value;
	if (foCarrier != "") {
		SBTForm.foCarrier.value = foCarrier;
	}	
	
	
	SBTForm.gsNumberOfTravelers.value = trimAge(g_PAXCount);
	//SBTForm.gsDepartureDate.value = SearchForm.DepartDate.value;
	SBTForm.gsDepartureDate.value = SearchForm.gsDepartureDate.value;
	
	//SBTForm.hoCheckInDate.value = SearchForm.DepartDate.value;
	//SBTForm.coPickUpDate.value = SearchForm.DepartDate.value;
	
	//SBTForm.gsReturnDate.value = SearchForm.ReturnDate.value;
	SBTForm.gsReturnDate.value = SearchForm.gsReturnDate.value;
	//SBTForm.hoCheckOutDate.value = SearchForm.ReturnDate.value;
	//SBTForm.coDropOffDate.value = SearchForm.ReturnDate.value;
	SBTForm.gsLengthOfStay.value = diffDays(returnDate, departDate);
	SBTForm.gsAge1.value = checkAge(SearchForm.gsAge1.value);
	SBTForm.gsAge2.value = checkAge(SearchForm.gsAge2.value);
	SBTForm.gsAge3.value = checkAge(SearchForm.gsAge3.value);
	SBTForm.gsAge4.value = checkAge(SearchForm.gsAge4.value);
	SBTForm.gsPromotionCode.value = SearchForm.gsPromotionCode.value;
	SBTForm.foDepartureTime.value = "ANY";//SearchForm.DepartureTime.value;
	SBTForm.foReturnTime.value = "ANY";//SearchForm.ReturnTime.value;
	SBTForm.hasXML.value = hasXML;
	SBTForm.hasVB.value = hasVB;
	if(g_Referrer != "")
	{
		SBTForm.Referrer.value = g_Referrer;
	}
	//if(g_PLCode != "")
	//{
	    SBTForm.plCode.value = g_Referrer;
	//}
	if((g_PostCartID != "") && (g_PostActivePkgSeq != ""))
	{
	    SBTForm.ActivePkgSeq.value = g_PostActivePkgSeq
	    SBTForm.CartID.value = g_PostCartID;
	}

	//showPost(SBTForm);
	SBTForm.submit();
    return false;
}

// Function Name: flipExpandCollapse
// Purpose: Changes the origin and destination expandy image
// Parameters: img - image tag to switch source of
// Return: None
function flipExpandCollapse(img)
{
	// Check what image we are on, and switch to the other one
	if(document.images[img].src == expandCollapseImgs[1].src) {
		document.images[img].src = expandCollapseImgs[0].src;
	} else { document.images[img].src = expandCollapseImgs[1].src; }
} 

// Function Name: toggleListBox
// Purpose: Determines what listbox to show or hide and determines whether to show or hide it.
// Parameters: arg - value of what list box to toggle
// Return: None
function toggleListBox(arg)
{
	var trow;
	var SearchForm = FIND("resTool");

	//var packageType =  SearchForm.PackageType[SearchForm.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
	
	// Determine what list we are toggling
	if(arg == 'org')
	{
		// Find the appropiate list based on parameter passed in and package type determine
		trow = FIND('trOriginClient' + packageType);
		// Determine if we are currently showing or hiding the list box and toggle its state
		if(trow.style.display == "none")
		{
			trow.style.display = "inline";
		}
		else
		{
			trow.style.display = "none";
		}
	}
	else
	{	
		// Find the appropiate list based on parameter passed in and package type determine
		trow = FIND('trDestinationClient' + packageType);
		// Determine if we are currently showing or hiding the list box and toggle its state
		if(trow.style.display == "none")
		{
			trow.style.display = "inline";
		}
		else
		{
			trow.style.display = "none";
		}	
	}
}

// Function Name: occupancyTest
// Purpose: Determines how many passengers theer currently are selected and shows or hides a warning
// Parameters: None
// Return: Boolean - whether or not this test failed or passed
function occupancyTest()
{
	// Find all child boxes and the number of adults traveling
	var retVal = true;
	var warn, warn2, warn3;
	var Passengers = document.resTool.gsNumberOfTravelers.value; //document.resTool.Adults.value;
	var Children = 0;
	var gsAge1 = TRIM(document.resTool.gsAge1.value.toUpperCase());
	var gsAge2 = TRIM(document.resTool.gsAge2.value.toUpperCase());
	var gsAge3 = TRIM(document.resTool.gsAge3.value.toUpperCase());
	var gsAge4 = TRIM(document.resTool.gsAge4.value.toUpperCase());
	
	// Increment passenger count for each child listed
	if (gsAge1 !="" && gsAge1.toUpperCase() != "NA")
	{
		Passengers++;
	}
	if (gsAge2 !="" && gsAge2.toUpperCase() != "NA")
	{
		Passengers++;
	}
	if (gsAge3 !="" && gsAge3.toUpperCase() != "NA")
	{
		Passengers++;	
	}	
	if (gsAge4 !="" && gsAge4.toUpperCase() != "NA")
	{
		Passengers++;	
	}
	
	g_PAXCount = Passengers;

	// Find warning Divs
	warn = FIND('trPassWarning');
	warn2 = FIND('trPassWarning2');
	warn3 = FIND('trPassWarning3');
	// If we have more than 5 passengers, then show the dual booking message and hide fatal pax message
	//if(document.resTool.Adults.value >= "5" || Passengers >= 5)
	if(document.resTool.gsNumberOfTravelers.value >= "5" || Passengers >= 5)
	{
		warn.style.display = "block";
		warn2.style.display = "none";
	}
	else
	{
		warn.style.display = "none";
	}	
	// If we have more then 8 passengers, this search is not allowed.  Show the fatal message and set return value to false
	if(Passengers > 8)
	{
		warn2.style.display = "block";
		warn.style.display = "none";
		retVal = false;
	}
	else
	{
		warn2.style.display = "none";
	}	
	// If we have no passengers, show the other fatal message as this is not allowed either.  Set return value to false.
	//if(document.resTool.Adults.value <= 0)
	if(document.resTool.gsNumberOfTravelers.value <= 0)
	{
		warn3.style.display = "block";
		retVal = false;
	}
	else
	{
		warn3.style.display = "none";
	}
	return retVal;
}

// Function Name: padAge
// Purpose: Places a leading zero on values that are a single digit.  Needed for OVM
// Parameters: age - value to be padded
// Return: String - padded value
function padAge(age)
{
	if (age.length < 2 && age != 0)
	{
		age = '0' + age;
		//alert("age now is: " + age);
	}
	return age;
}

// Function Name: trimAge
// Purpose: Trims leading zeroes from a value.
// Parameters: age - value to be trimmed
// Return: String - trimmed value
function trimAge(age)
{
	if (age.length >= 2 && age.substr(0,1) == '0')
	{
		age = age.substr(1, age.substr.length - 1);
		//alert("age now is: " + age);
	}
	return age;
}

// Function Name: diffDays
// Purpose: Determines differance in days of date objects
// Parameters: d1 - First Date, d2 - Second Date
// Return: Int - difference between d1 and d2.
function diffDays(d1, d2)
{
	// Determine difference by dividing by number of milliseconds in a day
	return Math.round((d1 - d2)/864e5);
}

// Function Name: checkAge
// Purpose: Determines if the value passed in is a value age.
// Parameters: age - Value to be checked
// Return: String - converted value
function checkAge(age)
{
	var retVal = "";
	if ( age.toUpperCase() != "NA")
	{
		retVal = age;
	}
	return retVal;
}

// Function Name: convertMonth
// Purpose: Converts integer representation of the month into its english name
// Parameters: month - Integer representation of month, zero indexed
// Return: String - Month's name
function convertMonth(month)
{
	var retVal = "";

	switch(month)
	{
		case 0:
			retVal = "January";
			break;
		case 1:
			retVal = "February";
			break;
		case 2:
			retVal = "March";
			break;
		case 3:
			retVal = "April";
			break;
		case 4:
			retVal = "May";
			break;
		case 5:
			retVal = "June";
			break;
		case 6:
			retVal = "July";
			break;
		case 7:
			retVal = "August";
			break;
		case 8:
			retVal = "September";
			break;
		case 9:
			retVal = "October";
			break;
		case 10:
			retVal = "November";
			break;
		case 11:
			retVal = "December";
			break;
	}

	return retVal;
}

// Function Name: convertPackageType
// Purpose: Converts SBT package type to OVM equivalent
// Parameters: packageType - package type to be analyzed and converted
// Return: String - OVM equivalent package type
function convertPackageType(packageType)
{
	var retVal = "";

	// The only package type that is differant is the Air Hotel pacakge type
	if (packageType == g_AirHotel)
	{	
		retVal = g_AirHotelOVM;
	}
	else
	{
		retVal = packageType;
	}

	return retVal;

}

// Function Name: TRIM
// Purpose: Standard string trim function
// Parameters: s - string to be trimmed of whitespace
// Return: String - trimmed string
function TRIM(s) 
{
  // Remove leading spaces and carriage returns
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r'))
  {
    s = s.substring(1,s.length);
  }
  // Remove trailing spaces and carriage returns
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r'))
  {
    s = s.substring(0,s.length-1);
  }
  return s;
}


// Function Name: showPost
// Purpose: Displays an alert of the passed in forms values
// Parameters: theForm - form to be dispalyed
// Return: None
function showPost(theForm)
{
	var al = theForm.name;
	for (var x=0; x< theForm.elements.length; x++) {
		al += "\n" + theForm.elements[x].name + "=" + theForm.elements[x].value;
	}
	alert( al );
}

// Function Name: FIND
// Purpose: Finds an object on the page and returns a referance to it
// Parameters: item - name of object ot find
// Return: Object - referance to the found object, or false if not found
function FIND(item) {
	if (document.all) 
		return(document.all[item]);
	if (document.getElementById) 
		return(document.getElementById(item));
	return(false);
}

// Function Name: validateOrg
// Purpose: Validates that the origin in the text box exists in the list box.
// Parameters: None
// Return: Boolean - whether the Origin was found or not
function validateOrg()
{
	// Originaly this would only look at a single list for origins, but since Mozilla doesn't play nice we have to determine what package type we are.
	// And then look at the appriopriate list.
	//var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}

	// Air & Hotel validataion
	if (packageType == g_AirHotel)
	{
	  //run through option values and see if origin selected is actually a valid origin. then do the same for dest.
	  var orgSel = TRIM(document.resTool.gsOrigin.value).toUpperCase();
	  
	  if (orgSel == "")
	  {
		document.resTool.gsOriginHidden.value = "";
	  }
	  
	  var originWarn
	  var originRow
	  var orgFound = false;
	  
	  //showPost(document.resTool);
	  //alert("orgSel: " + orgSel);
	  // origin match.
	  if(orgSel.length > 3) 
	  {
			for(var x = 0; x < document.resTool.originsLBoxAH.options.length; x++)
			{
				var searchStr = TRIM(document.resTool.originsLBoxAH.options[x].text);
				searchStr = searchStr.toUpperCase();
								  
				//alert("searchStr = |" + searchStr + "| orgSel = |" + orgSel + "|");
				if(searchStr.match(orgSel) != null || searchStr == orgSel)
				{
					orgFound = true;
					//alert(orgSel + " = " + searchStr);
					document.resTool.gsOrigin.value = TRIM(document.resTool.originsLBoxAH.options[x].text);
					document.resTool.gsOriginHidden.value = document.resTool.originsLBoxAH.options[x].value;				
					//alert("document.resTool.originsLBox.options[x].value:" + document.resTool.originsLBox.options[x].value);
					break;
				}		
				//alert(document.resTool.originsLBox.options[x].text + "=" + document.resTool.originsLBox.options[x].value);
			}
	  }
	  else
	  {
		//don't check for 3 char. assume its valid.		
		for(var x = 0; x < document.resTool.originsLBoxAH.options.length; x++)
		{
			var searchStrValue = document.resTool.originsLBoxAH.options[x].value;
									  
			if(searchStrValue == orgSel)
			{
				document.resTool.gsOriginHidden.value = document.resTool.originsLBoxAH.options[x].value;				
				orgFound=true;
			}			
		}		
	  }
		originWarn = FIND('trOriginWarning');
		originRow = FIND('trOriginClientAH');
		if(!orgFound)
		{
			originWarn.style.display = "block"; originRow.style.display = "block"; flipExpandCollapse('originInquire'); 
		}		   
		else	   
		{
			originWarn.style.display = "none"; originRow.style.display = "none"; //document.resTool.gsOriginHidden.value = orgSel; 
		} 
	   if(orgFound)
			return true;
	   else
			return false;
	}
	// Air Only Validation
	else if (packageType == g_HotelCar)

	{
      //alert("in validateOrgDes");
	  //run through option values and see if origin selected is actually a valid origin. then do the same for dest.
	  var orgSel = TRIM(document.resTool.gsOrigin.value).toUpperCase();	  
	  
	  var originWarn
	  var originRow
	  var orgFound = false;
	  
	  //showPost(document.resTool);
	  //alert("orgSel: " + orgSel);
	  
	  // origin match.
	  if(orgSel.length > 3) 
	  {
			for(var x = 0; x < document.resTool.originsLBoxA.options.length; x++)
			{
				var searchStr = TRIM(document.resTool.originsLBoxA.options[x].text);
				searchStr = searchStr.toUpperCase();
								  
				//alert("searchStr = |" + searchStr + "| orgSel = |" + orgSel + "|");
				if(searchStr.match(orgSel) != null || searchStr == orgSel)
				{
					orgFound = true;
					//alert(orgSel + " = " + searchStr);
					document.resTool.gsOrigin.value = TRIM(document.resTool.originsLBoxA.options[x].text);
					document.resTool.gsOriginHidden.value = document.resTool.originsLBoxA.options[x].value;				
					//alert("document.resTool.originsLBox.options[x].value:" + document.resTool.originsLBox.options[x].value);
					break;
				}		
				//alert(document.resTool.originsLBox.options[x].text + "=" + document.resTool.originsLBox.options[x].value);
			}
	  }
	  else
	  {
		//don't check for 3 char. assume its valid.		
		for(var x = 0; x < document.resTool.originsLBoxA.options.length; x++)
		{
			var searchStrValue = document.resTool.originsLBoxA.options[x].value;
									  
			if(searchStrValue == orgSel)
			{
				document.resTool.gsOriginHidden.value = document.resTool.originsLBoxA.options[x].value;				
				orgFound=true;
			}			
		}		
	  }
		originWarn = FIND('trOriginWarning');
		originRow = FIND('trOriginClientA');
		if(!orgFound)
		{
			originWarn.style.display = "block"; originRow.style.display = "block"; flipExpandCollapse('originInquire'); 
		}		   
		else	   
		{
			originWarn.style.display = "none"; originRow.style.display = "none"; //document.resTool.gsOriginHidden.value = orgSel; 
		} 
	   if(orgFound)
			return true;
	   else
			return false;
	}	

	// Hotel Only validation
	else if (packageType == g_HotelOnly)
	{
      //alert("in validateOrgDes");
	  //run through option values and see if origin selected is actually a valid origin. then do the same for dest.
	  var orgSel = TRIM(document.resTool.gsOrigin.value).toUpperCase();	  
	  
	  var originWarn
	  var originRow
	  var orgFound = false;
	  
	  //showPost(document.resTool);
	  //alert("orgSel: " + orgSel);
	  
	  // origin match.
	  if(orgSel.length > 3) 
	  {
			for(var x = 0; x < document.resTool.originsLBoxH.options.length; x++)
			{
				var searchStr = TRIM(document.resTool.originsLBoxH.options[x].text);
				searchStr = searchStr.toUpperCase();
								  
				//alert("searchStr = |" + searchStr + "| orgSel = |" + orgSel + "|");
				if(searchStr.match(orgSel) != null || searchStr == orgSel)
				{
					orgFound = true;
					//alert(orgSel + " = " + searchStr);
					document.resTool.gsOrigin.value = TRIM(document.resTool.originsLBoxH.options[x].text);
					document.resTool.gsOriginHidden.value = document.resTool.originsLBoxH.options[x].value;				
					//alert("document.resTool.originsLBox.options[x].value:" + document.resTool.originsLBox.options[x].value);
					break;
				}		
				//alert(document.resTool.originsLBox.options[x].text + "=" + document.resTool.originsLBox.options[x].value);
			}
	  }
	  else
	  {
		//don't check for 3 char. assume its valid.		
		for(var x = 0; x < document.resTool.originsLBoxA.options.length; x++)
		{
			var searchStrValue = document.resTool.originsLBoxH.options[x].value;
									  
			if(searchStrValue == orgSel)
			{
				document.resTool.gsOriginHidden.value = document.resTool.originsLBoxH.options[x].value;				
				orgFound=true;
			}			
		}		
	  }
		originWarn = FIND('trOriginWarning');
		originRow = FIND('trOriginClientH');
		if(!orgFound)
		{
			originWarn.style.display = "block"; originRow.style.display = "block"; flipExpandCollapse('originInquire'); 
		}		   
		else	   
		{
			originWarn.style.display = "none"; originRow.style.display = "none"; //document.resTool.gsOriginHidden.value = orgSel; 
		} 
	   if(orgFound)
			return true;
	   else
			return false;
	}
}

// Function Name: validateDes
// Purpose: Validates that the destination in the text box exists in the list box.
// Parameters: None
// Return: Boolean - whether the destination was found or not
function validateDes()
{
	// Originaly this would only look at a single list for destinations, but since Mozilla doesn't play nice we have to determine what package type we are.
	// And then look at the appriopriate list.
	//var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
	for (var i=0; i < document.resTool.PackageType.length; i++) {
		if (document.resTool.PackageType[i].checked) {
		    var packageType = document.resTool.PackageType[i].value;
		}
	}
	var destFound = false;

	// Air & Hotel validation
	if(packageType == g_AirHotel)
	{
	  var desSel = TRIM(document.resTool.gsDestination.value).toUpperCase();
	  var destWarn
	  var destRow
	  if(desSel.length > 3) 
	  {
			
	   }
	  else
	  {
		document.resTool.gsDestinationHidden.value = document.resTool.destLBoxAH.value;
		destFound=true;
	  }
	   //------ Display Error message for Invalid Destination.
	   destWarn = FIND('trDestinationWarning');
	   destRow = FIND('trDestinationClientAH');

		if(!destFound)
		{
			//-----	07/14/2005 MTM
			//----- Exclude following airport/destinations from displaying error message for invalid destination.
			if ( (desSel == "0CB") || (desSel == "0DR") || (desSel == "0JA") || (desSel == "NEG") || (desSel == "OCJ") || (desSel == "SIG") || (desSel == "0CN") || (desSel == "LIR") || (desSel == "SJO") || (desSel == "0EU") || (desSel == "0MX") || (desSel == "NVR") || (desSel == "YYZ") || (desSel == "WAS") || (desSel == "TVL") || (desSel == "0NV") || (desSel == "MKK") || (desSel == "0HI") || (desSel == "SPE") || (desSel == "SAR") || (desSel == "KYL") || (desSel == "FMY") || (desSel == "CLW") || (desSel == "0FL") || (desSel == "ANH") || (desSel == "0CA") || (desSel == "0CD")  ) {
			//----- 07/20/2005 MTM
				document.resTool.gsDestinationHidden.value = document.resTool.gsDestinationHidden.value;//"";
				document.resTool.gsDestination.value = document.resTool.gsDestination.value;//"";
				destFound=true;
			}else{
				destWarn.style.display = "block"; destRow.style.display = "block";// flipExpandCollapse('DestinationInquire'); 
			}
		}
		else	   
		{				
		  destWarn.style.display = "none"; destRow.style.display = "none"; //document.resTool.gsDestinationHidden.value = desSel; 
		}
	   if(destFound)
			return true;
	   else
			return false;	  

	}
	// Air Only validation
	else if (packageType == g_HotelCar)
	{
	  var desSel = TRIM(document.resTool.gsDestination.value).toUpperCase();
	  var destWarn
	  var destRow
	  if(desSel.length > 3) 
	  {
	   }
	  else
	  {
				document.resTool.gsDestinationHidden.value = document.resTool.destLBoxA.value;
				destFound=true;
	  }

	   //------ Display Error message for Invalid Destination.
	   destWarn = FIND('trDestinationWarning');
	   destRow = FIND('trDestinationClientA');

		if(!destFound)
		{
		  //destWarn.style.display = "block"; destRow.style.display = "block"; flipExpandCollapse('DestinationInquire'); 
			//-----	07/14/2005 MTM
			//----- Exclude following airport/destinations from displaying error message for invalid destination.
			if ( (desSel == "0CB") || (desSel == "0DR") || (desSel == "0JA") || (desSel == "NEG") || (desSel == "OCJ") || (desSel == "SIG") || (desSel == "0CN") || (desSel == "LIR") || (desSel == "SJO") || (desSel == "0EU") || (desSel == "0MX") || (desSel == "NVR") || (desSel == "YYZ") || (desSel == "WAS") || (desSel == "TVL") || (desSel == "0NV") || (desSel == "MKK") || (desSel == "0HI") || (desSel == "SPE") || (desSel == "SAR") || (desSel == "KYL") || (desSel == "FMY") || (desSel == "CLW") || (desSel == "0FL") || (desSel == "ANH") || (desSel == "0CA") || (desSel == "0CD")   ) {
			//----- 07/20/2005 MTM
				document.resTool.gsDestinationHidden.value = "";
				document.resTool.gsDestination.value = "";
				destFound=true;			
			}else{
				destWarn.style.display = "block"; destRow.style.display = "block";// flipExpandCollapse('DestinationInquire'); 
			}
		}
		else	   
		{				
		  destWarn.style.display = "none"; destRow.style.display = "none"; //document.resTool.gsDestinationHidden.value = desSel; 
		}
	   if(destFound)
			return true;
	   else
			return false;	  

	}	
	// Hotel Only validation
	else if (packageType == g_HotelOnly)
	{
	  var desSel = TRIM(document.resTool.gsDestination.value).toUpperCase();
	  var destWarn
	  var destRow
	  if(desSel.length > 3) 
	  {
	   }
	  else
	  {
				document.resTool.gsDestinationHidden.value = document.resTool.destLBoxH.value;
				destFound=true;
	  }

	   //------ Display Error message for Invalid Destination.
	   destWarn = FIND('trDestinationWarning');
	   destRow = FIND('trDestinationClientH');

		if(!destFound)
		{
		  //destWarn.style.display = "block"; destRow.style.display = "block"; flipExpandCollapse('DestinationInquire'); 
			//-----	07/14/2005 MTM
			//----- Exclude following airport/destinations from displaying error message for invalid destination.
			if ( (desSel == "0CB") || (desSel == "0DR") || (desSel == "0JA") || (desSel == "NEG") || (desSel == "OCJ") || (desSel == "SIG") || (desSel == "0CN") || (desSel == "LIR") || (desSel == "SJO") || (desSel == "0EU") || (desSel == "0MX") || (desSel == "NVR") || (desSel == "YYZ") || (desSel == "WAS") || (desSel == "TVL") || (desSel == "0NV") || (desSel == "MKK") || (desSel == "0HI") || (desSel == "SPE") || (desSel == "SAR") || (desSel == "KYL") || (desSel == "FMY") || (desSel == "CLW") || (desSel == "0FL") || (desSel == "ANH") || (desSel == "0CA") || (desSel == "0CD")   ) {
			//----- 07/20/2005 MTM
				document.resTool.gsDestinationHidden.value = "";
				document.resTool.gsDestination.value = "";
				destFound=true;			
			}else{
				destWarn.style.display = "block"; destRow.style.display = "block";// flipExpandCollapse('DestinationInquire'); 
			}
		}
		else	   
		{				
		  destWarn.style.display = "none"; destRow.style.display = "none"; //document.resTool.gsDestinationHidden.value = desSel; 
		}
	   if(destFound)
			return true;
	   else
			return false;	  

	}
}

function convertOrigin()
{
    if (validateOrg())
	{
		//var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
		var lstOrigins = FIND("originsLBox" + packageType);
		var SearchForm = FIND("resTool");
		var sOriginCode = "";
		var i = 0;

		sOriginCode = SearchForm.gsOriginHidden.value;

		for (i = 0; i < lstOrigins.length; i++)
		{
			if (lstOrigins.options[i].value == sOriginCode)
			{
				SearchForm.gsOrigin.value = lstOrigins.options[i].text;
			}
		}
	}
}

function convertDestination()
{
	if (validateDes())
	{
		//var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
		var lstDestinations = FIND("destLBox" + packageType);
		var SearchForm = FIND("resTool");
		var sDestinationCode = "";
		var i = 0;

		sOriginCode = SearchForm.gsDestinationHidden.value;
		for (i = 0; i < lstDestinations.length; i++)
		{
			if (lstDestinations.options[i].value == sOriginCode)
			{
				SearchForm.gsDestination.value = lstDestinations.options[i].text;
			}
		}
	}
}


// Function Name: validateDepartureDateSubmit
// Purpose: Similar to validateDepartureDate, but only called on form submit, doesn't check for 'mm/dd/yy'
// Parameters: None
// Return: Boolean - whether the date is valid
function validateDepartureDateSubmit()
{
	// Create a date object from the entered departure date 
	var departDateString = document.resTool.DepartDate.value;
    var departDate = new Date(departDateString);
	// Create a date object for today.
	var today = new Date();

	var retVal = true;

	// Adjust year from '05' to '2005'
	departDate = adjustYear(departDate);

	// Find warnings for departures
	// Invalid date entry warning
    var warning = FIND("trDepartureWarning");
	// Date is in the past warning
	var warningPast = FIND("trDepartureWarningPast");

	// Check if the date is not a date at all, or fails at RegEx validations
	if (departDate == "NaN" || !validateDateFormat(departDateString))
	{
		// Show invalid date warning
	   warning.style.display = "block"
	   retVal = retVal && false;
	}
	else 
	{
		warning.style.display = "none"
		retVal = retVal && true;
	}

	// <- SDA 08/18/05 START
	// Check if departure date is before today
	if (departDate != "NaN" && validateDateFormat(departDateString)){
		if (departDate < today)
		{
			// Show date in past warning
		warningPast.style.display = "block"
		retVal = retVal && false;
		}
		else
		{
		warningPast.style.display = "none"
			retVal = retVal && true;
		}
	}else{
			warningPast.style.display = "none";
		}
	// <- SDA 08/18/05 END
	
	return retVal;
}


// Function Name: adjustYear
// Purpose: Adjusts year from 2 digit to proper four digit
// Parameters: date - Date object to have adjusted year
// Return: Date - object with adjusted date
function adjustYear(date)
{
	// Check if full year returns as less then 2000
	if (parseInt(date.getFullYear(),10) < 2000)
	{
		// Take year and add 2000
		date.setFullYear(2000 + date.getYear());
		return date;
	}
	else
	{
		return date;
	}
}

// Function Name: validateDateFormat
// Purpose: Validates entered date against a regular expression and valid values, accounts for leap years in february.
// Parameters: inDate - string representation of date
// Return: Boolean - whether the date is valid
function validateDateFormat( inDate ) 
{

  // Generate regular expression for "mm/dd/yy" where the month and day can be 1 or 2 digits
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/;

	// Test against ergular expression
	if(!objRegExp.test(inDate))
	{
		// Failure
		return false; 
	}
	else
	{
		// Parse out date components and determine if it is a valid day for the month
		// Find seperator
		var sSeparator = findSeperator(inDate);
		// Split date into array
		var arrayDate = inDate.split(sSeparator);
		// Create array of valid days for each month
		var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31, '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
		// Parse day from array
		var intDay = parseInt(arrayDate[1],10);

		// Determine if month exists
		if(arrayLookup[padAge(arrayDate[0])] != null) {
		  // Determine if the day entered is less then or equal to valid max day
		  if(intDay <= arrayLookup[padAge(arrayDate[0])] && intDay != 0)
			return true; 
	}

	// Process Feruary differently.
    var intMonth = parseInt(arrayDate[0],10);
    if (intMonth == 2) { 
	   // Pull year out of array
       var intYear = parseInt(arrayDate[2],10);
	   // Determine valid max day for February based on leap year or not.
       if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
          return true; 
       }
  }
  return false; 
}

// Function Name: findSeperator
// Purpose: Helper function for validateDateFormat to find the seperator in the date string
// Parameters: inDate - date to find seperator in
// Return: Char - Seperator used in date string
function findSeperator(inDate)
{
	var i;
	var retVal = "";

	// Loop through each Char in String
	for (i = 0; i < inDate.length; i++)
	{
		// If the current index value is not a number, then it is the seperator
		if (isNaN(inDate.substr(i,1)))
		{
			retVal = inDate.substr(i,1);
		}
	}
	return retVal;
}

// Function Name: verifyUA
// Purpose: Verifies whether or not the current values in the res tool are a combination that results in a UA Risk search
// Parameters: None
// Return: None
function verifyUA()
{
	// Determine what package tpye we are on
    //var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
 
	if ((packageType == g_AirHotel))//    if ((packageType != g_HotelOnly))
    {
		// Find origin and destination values
        var orgCode = document.resTool.gsOriginHidden.value;
        var desCode = document.resTool.gsDestinationHidden.value;
	
		
        var departDate = document.resTool.gsDepartureDate.value;
		var returnDate = document.resTool.gsReturnDate.value;
		

		// Continue to process only when the origin, destination, departure and return have been filled out
        if( TRIM(orgCode) != "" && TRIM(desCode) != "" && TRIM(departDate) != "mm/dd/yy" && TRIM(departDate) != "" && TRIM(returnDate) != "mm/dd/yy" && TRIM(returnDate) != "")
        {
			// Create date objects from departure and return date string
			var departDateObject = new Date(departDate);
			var returnDateObject = new Date(returnDate);
			
			// Adjust year from '05' to '2005'
			departDateObject = adjustYear(departDateObject);
			returnDateObject = adjustYear(returnDateObject);

			// Create departure and return date search values in format "YYYYMMDD"
			var searchDepartDate = departDateObject.getFullYear().toString() + padAge((departDateObject.getMonth() + 1).toString()) + padAge(departDateObject.getDate().toString());
			var searchReturnDate = returnDateObject.getFullYear().toString() + padAge((returnDateObject.getMonth() + 1).toString()) + padAge(returnDateObject.getDate().toString());

			// Build XPath search string for searching Markets.xml
            var searchPath = "ValidationMarkets/Origin[@Code='" + orgCode + "']/Dest[@Code='" + desCode + "' and @HighDate>='" + searchDepartDate + "' and @LowDate<='" + searchDepartDate + "' and @HighDate>='" + searchReturnDate + "' and @LowDate<='" + searchReturnDate + "' and @UA='Y']";
                     
            var UANL;
			// IE and Mozilla do XPath searches differently, determine what method to use.
			if (IE4)
			{
				// IE allows a VB style selectNodes
				// Find number of nodes that match the XPath search string
				UANL = g_VerificationXML.selectNodes(searchPath).length;
			}
			else
			{
				// Mozilla uses DOM Level 3 Evaluations
				// Find number of nodes that match the XPath search string
				UANL = g_VerificationXML.evaluate("count(" + searchPath + ")", g_VerificationXML, null , XPathResult.ANY_TYPE, null).numberValue;
			}


			// Check if we found any nodes
            if( UANL > 0)
            {	
				// Determine if we are Air only
				if(packageType == g_HotelCar)
				{
					// Hide the Air option selection and select the UA Charter radio
	                hideAirSelection();
					selectCharterUA();
				}
				else
				{
					// Check if the UA Radios are not already being shown
					if(charterUAVisible() == false)
					{
						// Show the UA Charter radio options
						showCharterUA();
						//hideAirSelection();	
						// Select the UA Charter Radio
						selectCharterUA();
					}
				}
				// Set the UA Risk flag to True
                g_UARisk = true;
            }
			// No Nodes were found
            else
            {
				// Check if we are not SBT Charter
				if (!g_SBTCharter)
				{
					// Hide air selections
	                hideAirSelection();
					// Select the Scheduled Air radio
					selectSKED();
				}
				// Set the UA Risk flag to False
                g_UARisk = false;
            }
        }
    }
}

// Function Name: verifySBT
// Purpose: Verifies whether or not the current values in the res tool are a combination that results in a SBT Charter search
// Parameters: None
// Return: None
function verifySBTCharter()
{
	// Determine what package tpye we are on
	//var packageType = document.resTool.PackageType[document.resTool.PackageType.selectedIndex].value;
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}

	// Only validate SBT Charter if we are Air & Hotel, not UA Risk
    if (packageType == g_AirHotel && !g_UARisk)
    {
		// Find origin and destination values
        var orgCode = document.resTool.gsOriginHidden.value;
        var desCode = document.resTool.gsDestinationHidden.value;

		// Find departure dates
        //var departDate = document.resTool.DepartDate.value
        var departDate = document.resTool.gsDepartureDate.value

		// Check of it origin, destination, and depart date have been filled out
        if( TRIM(orgCode) != "" && TRIM(desCode) != "" && TRIM(departDate) != "mm/dd/yy" && TRIM(departDate) != "")
        {
			// Create date object from departure date string
			var departDateObject = new Date(departDate);

			// Adjust year from '05' to '2005'
			departDateObject = adjustYear(departDateObject);

			// Create departure date values in format "YYYYMMDD"
			var searchDepartDate = departDateObject.getFullYear().toString() + padAge((departDateObject.getMonth() + 1).toString()) + padAge(departDateObject.getDate().toString());

			// Build XPath search string for searching Markets.xml 
            var searchPath = "ValidationMarkets/Origin[@Code='" + orgCode + "']/Dest[@Code='" + desCode + "' and @HighDate>='" + searchDepartDate + "' and @LowDate<='" + searchDepartDate + "' and @UA='']";
                                
            var CharterNL;
			// IE and Mozilla do XPath searches differently, determine what method to use.
			if (IE4)
			{
				// IE allows a VB style selectNodes
				// Find number of nodes that match the XPath search string
				CharterNL = g_VerificationXML.selectNodes(searchPath).length;
			}
			else
			{
				// Mozilla uses DOM Level 3 Evaluations
				// Find number of nodes that match the XPath search string
				CharterNL = g_VerificationXML.evaluate("count(" + searchPath + ")", g_VerificationXML, null, XPathResult.ANY_TYPE, null).numberValue;
			}
		

			// Check if we found any nodes
            if( CharterNL > 0)
            {
				// Determine if we are already showing the SBT Charter options
				if(charterSBTVisible() == false)
				{
					// Show SBT Charter options
	                //showCharterSBT();
	                hideAirSelection();
					// Select the SBT Charter Radio
					selectCharterSBT();
				}
				// Set SBT Charter flag to true
				g_SBTCharter = true;
            }
			// No matching nodes found
            else
            {
				// Hide air selection options
                hideAirSelection();
				// Select Scheduled air radio
				selectSKED();
				// Set SBT Charter Flag to false
				g_SBTCharter = false;
            }
        }
    }
}


// Function Name: charterUAVisible
// Purpose: Indicates whether or not the UA Options are being shown
// Parameters: None
// Return: Boolean - whether or not the UA options are shown
function charterUAVisible()
{
	var retVal = false;

	// Find OVM Charter (UA Risk) Div
    var OVMCharterDiv = FIND("OVMCharterDiv");

	// Check if the Div is being displayed
	if (OVMCharterDiv.style.display == "block")
	{
		retVal = true;
	}

	return retVal;
}

// Function Name: charterSBTVisible
// Purpose: Indicates whether or not the SBT Charter Options are being shown
// Parameters: None
// Return: None
function charterSBTVisible()
{
	var retVal = false;

	// Find SBT Charter Options Div
    var SBTCharterDiv = FIND("SBTCharterDiv");

	// Check if SBT Charter Div is being displayed
	if (SBTCharterDiv.style.display == "block")
	{
		retVal = true;
	}

	return retVal;
}

// Function Name: showCharterUA
// Purpose: Shows the UA Risk div and hides the SBT Divs
// Parameters: None
// Return: None
function showCharterUA()
{ 
	// Find OVM and SBT Divs
    var OVMCharterDiv = FIND("OVMCharterDiv");
    var SBTSkedDiv = FIND("SBTSkedDiv");
    var SBTCharterDiv = FIND("SBTCharterDiv");

	// Show OVM Div, hide others
    OVMCharterDiv.style.display = "block";
    SBTSkedDiv.style.display = "block";
    SBTCharterDiv.style.display = "none";
}

// Function Name: showCharteSBT
// Purpose: Shows the SBT div and hides the OVM Divs
// Parameters: None
// Return: None
function showCharterSBT()
{
	// Find OVM and SBT divs
    var OVMCharterDiv = FIND("OVMCharterDiv");
    var SBTSkedDiv = FIND("SBTSkedDiv");
    var SBTCharterDiv = FIND("SBTCharterDiv");

	// Show SBT Charter Div, hide others
	OVMCharterDiv.style.display = "none";
    SBTSkedDiv.style.display = "block";
    SBTCharterDiv.style.display = "block";
}

// Function Name: showOrigin
// Purpose: Shows the origin textbox and flight time drop downs
// Parameters: None
// Return: None
function showOrigin()
{
	// Find Origin div, and flight time divs
	var OriginRow = FIND("trOrigin");
	var DepartTimeDiv = FIND("divDepartTime");
	var ReturnTimeDiv = FIND("divReturnTime");

	// Show all
	OriginRow.style.display = "block";
	DepartTimeDiv.style.display = "block";
	ReturnTimeDiv.style.display = "block";
}

// Function Name: hideOrigin
// Purpose: Hides the origin textbox and flight time drop downs
// Parameters: None
// Return: None
function hideOrigin()
{
	// Find Origin div and flight time divs
	var OriginRow = FIND("trOrigin");
	var DepartTimeDiv = FIND("divDepartTime");
	var ReturnTimeDiv = FIND("divReturnTime");

	// Hide all
	OriginRow.style.display = "none";
	DepartTimeDiv.style.display = "none";
	ReturnTimeDiv.style.display = "none";
}

// Function Name: hideAirSelection
// Purpose: Hides all air selection choices
// Parameters: None
// Return: None
function hideAirSelection()
{
	// Find Air Selection Divs
    var OVMCharterDiv = FIND("OVMCharterDiv");
    var SBTSkedDiv = FIND("SBTSkedDiv");
    var SBTCharterDiv = FIND("SBTCharterDiv");

	// Hide All
    OVMCharterDiv.style.display = "none";
    SBTSkedDiv.style.display = "none";
    SBTCharterDiv.style.display = "none";
}

// Function Name: showTARS
// Purpose: Shows the TARS link
// Parameters: None
// Return: None
function showTARS()
{
	// Find TARS div
	var TARSdiv = FIND("TARSDiv");

	// Show TARS div
	TARSdiv.style.display = "block";
}

// Function Name: hideTARS
// Purpose: Hides the TARS link
// Parameters: None
// Return: None
function hideTARS()
{
	// Find TARS div
	var TARSdiv = FIND("TARSDiv");

	// Hide TARS div
	TARSdiv.style.display = "none";
}

// Function Name: selectCharterUA
// Purpose: Selectes the UA Risk Charter radio button
// Parameters: None
// Return: None
function selectCharterUA()
{
	// Find UA Risk radio button and select it
	var OVMCharterRadio = FIND("rdoOVMCharter");
	OVMCharterRadio.checked = true;
}

// Function Name: selectCharterSBT
// Purpose: Selects the SBT Charter radio button
// Parameters: None
// Return: None
function selectCharterSBT()
{
	// Find SBT Charter radio button and select it
	var SBTCharterRadio = FIND("rdoSBTCharter");
	SBTCharterRadio.checked = true;
}

// Function Name: selectCharterSKED
// Purpose: Selects the SBT SKED radio button
// Parameters: None
// Return: None
function selectSKED()
{
	// Find the SBT Scheduled air radio button and select it.
	var SBTSkedRadio = FIND("rdoSBTSked");
	SBTSkedRadio.checked = true;
}

// Function Name: generateLists
// Purpose: Originally used to generate org and des lists, now does init functionality
// Parameters: None
// Return: None
function generateLists()
{
	// Determine package type
    //var packageType = document.resTool.PackageType.options[document.resTool.PackageType.selectedIndex].value;
	var OVMPackageTypeRadio = get_radio_value();
		//OVMPackageTypeRadio.checked = true;
		
		for (var i=0; i < document.resTool.PackageType.length; i++) {
		   if (document.resTool.PackageType[i].checked) {
		      var packageType = document.resTool.PackageType[i].value;
		    }
		}
    
    //occupancyTest();

	// Hide all origin and destination lists
	hideListBoxes();

	// Check if a origin is selected and not on hotel only
	if ((TRIM(document.resTool.gsOriginHidden.value) != "") && (packageType == g_AirHotel))//if ((TRIM(document.resTool.gsOriginHidden.value) != "") && (packageType != g_HotelOnly))
	{
		// Validate Origin
		//validateOrg();
		convertOrigin();
	}

	// Chech if a destination is selected
	if (TRIM(document.resTool.gsDestinationHidden.value) != "")
	{
		// Validate Destination
		//validateDes();
		convertDestination();
	}

	// Check if package type is Air and Hotel
	if( packageType == g_AirHotel)
	{	
		// Show Origin Divs
		showOrigin();
		// Hide Air Selection options
		hideAirSelection();
		// See if we have set the radios on init and if we should
		if (g_InitVendorFlag && ( (g_PostVendor == g_SKEDVendor) || (g_PostVendor == g_SBTCharterVendor)))
		{
		    // Clear the init vendor flag
		    g_InitVendorFlag = false;
		    
		    // Do Market validation
            verifySBTCharter();
		    
		    // Since we came from SBT, set the proper radio.
		    if (g_PostVendor == g_SKEDVendor)
		    {
		        selectSKED();
		    }
		    else if (g_PostVendor == g_SBTCharterVendor)
		    {
		        selectCharterSBT();
		    }
		}
		else
		{
		    // Verify values as TARS, UA Risk, and SBT Charter
		    
		    verifyUA();
		    verifySBTCharter();
		}
	}
	// Check if package type is Air Only
	else if ( packageType == g_HotelCar)
	{
		// Hide Origin warnings
		FIND("trOriginWarning").style.display = "none";
		// Verify TARS	
		// Hide Air selection options and Origin divs
		hideAirSelection();
		hideOrigin();
	}
	else 
	{
		// Hide Origin warnings
		FIND("trOriginWarning").style.display = "none";
		// Verify TARS
		
		// Hide Air selection options and Origin divs
		hideAirSelection();
		hideOrigin();
	}
}

// Function Name: hideListBoxes
// Purpose: Hides all of the origin and destination list boxes
// Parameters: None
// Return: None
function hideListBoxes()
{
	FIND("trOriginClientAH").style.display = "none";
	FIND("trOriginClientA").style.display = "none";
	FIND("trOriginClientH").style.display = "none";

	FIND("trDestinationClientAH").style.display = "none";
	FIND("trDestinationClientA").style.display = "none";
	FIND("trDestinationClientH").style.display = "none";	
}

// Function Name: popupcalendar
// Purpose: Pops up a calendar for selecting dates
// Parameters: url - URL to pop
// Return: None
    function popUpCalendar(the_field, strMonthYearObj, strMonthYearObj2, strDayObj, strDayObj2, strYearObj, strYearObj2, strPriority)
    {
	    var the_url, the_d_date, the_d_month, the_d_year, the_r_date, the_r_month, the_r_year;

	    the_d_date = document.resTool.gsDepartureDate.value.split("/");
	    the_d_month = the_d_date[0];
	    the_d_year = the_d_date[2];

	    the_r_date = document.resTool.gsReturnDate.value.split("/");
	    the_r_month = the_r_date[0];
	    the_r_year = the_r_date[2];

	    if(the_field == "depart"){
		    // append new parameter to allow for shading of selected depart date in depart date calendar
           the_url = "includes/popupcal.asp?cal=Depart&startMonth=" + the_d_month + "&startYear=" + the_d_year + "&dDate=" + the_d_date + "&strMonthYearObj=" + strMonthYearObj + "&strMonthYearObj2=" + strMonthYearObj2 + "&strDayObj=" + strDayObj + "&strDayObj2=" + strDayObj2+ "&strYearObj=" + strYearObj + "&strYearObj2=" + strYearObj2 + "&strPriority=" + strPriority;
        }
        else{
           // append new parameter to allow for shading of selected depart date in return date calendar
           the_url = "includes/popupcal.asp?cal=Return&startMonth=" + the_r_month + "&startYear=" + the_r_year + "&dDate=" + the_d_date + "&strMonthYearObj=" + strMonthYearObj + "&strMonthYearObj2=" + strMonthYearObj2 + "&strDayObj=" + strDayObj + "&strDayObj2=" + strDayObj2+ "&strYearObj=" + strYearObj + "&strYearObj2=" + strYearObj2  + "&strPriority=" + strPriority;
        }

	    if (the_field == "depart")
	    {
		    var anchorname = 'gsDepartPopup';
		    var obj = document.getElementById(anchorname);
		    var x=0;
		    var y=0;
		    x=findPosX(obj);
		    y=findPosY(obj);

		    x=x+window.screenLeft-140;
		    y=y+window.screenTop+20;

	    } else {
		    var anchorname = 'gsReturnPopup';
		    var obj = document.getElementById(anchorname);
		    var x=0;
		    var y=0;
		    x=findPosX(obj);
		    y=findPosY(obj);

		    x=x+window.screenLeft-140;
		    y=y+window.screenTop+20;

	    }
	    thispop = "'location=no,directories=no,status=no,menubar=no,resizable=no,width=200,height=186,left=" + x + ",top=" + y + "'";
	    var calpop = window.open(the_url,'calwin',thispop);
    }

// Function Name: onload
// Purpose: preforms init page functionality
// Parameters: None
// Return: None
window.onload=function(){
	
	FIND("trSubmitReal").style.display = "block";
	FIND("trSubmitFake").style.display = "none";	
	initSearchParameters();
    generateLists();
    BodyLoadHandler();	

}

window.onUnload=function(){
	
    BodyLoadHandler();	

}

// Function Name: initSearchParameters
// Purpose: Grabs parameters that were setup through request variables and configures ResTool
// Parameters: None
// Return: None
function initSearchParameters()
{
    var Origin = "";
    var Destination = "";
    // initPackageType
    if (g_PostPackageType != "")
    {
        var i;
        
        for (i = 0; i < document.resTool.PackageType.length; ++i)
        {
            if ( document.resTool.PackageType[i].value == g_PostPackageType)
            {
                document.resTool.PackageType.selectedIndex = i;
            }
        }
    }
    // initOrigin
    if (TRIM(g_PostOrigin) != "" && g_PostOrigin != "XXX")
    {
        Origin = g_PostOrigin;
    }
    else if (TRIM(g_PLCodeOrigin) != "")
    {
        Origin = g_PLCodeOrigin;
    }
    
    document.resTool.gsOrigin.value = Origin;
    document.resTool.gsOriginHidden.value = Origin;
    // initDestination
    if (TRIM(g_PostDestination) != "")
    {
        Destination = g_PostDestination;
    }
    else if (TRIM(g_PLCodeDestination) != "")
    {
        Destination = g_PLCodeDestination;
    }
    
    document.resTool.gsDestination.value = Destination;
    document.resTool.gsDestinationHidden.value = Destination;
    
    // initDepartureDate
    if (g_PostDepartureDate != "")
    {        
        initDate(g_PostDepartureDate, 'depart', 1);

    }
    else
    {
        //initDepartureDate();
    }
    
    // initDepartureTime
    if (g_PostDepartureTime != "")
    {
		document.resTool.DepartureTime.value = document.resTool.DepartureTime.value;

    }
    
    // initReturnDate
    if (g_PostReturnDate != "")
    {
        initDate(g_PostReturnDate, 'return', 2);
    }
    else
    {
        //initReturnDate();
    }
    
    
    // initReturnTime
    if (g_PostReturnTime != "")
    {
		document.resTool.ReturnTime.value = document.resTool.ReturnTime.value;
    }
    // initPassengers
    if (g_PostPassengers != "")
    {
        var iPax = parseInt(g_PostPassengers, 10);
        
        if (g_PostChild1 != "")
        {
            --iPax;
            //document.resTool.ChildAge1.value = g_PostChild1;
            document.resTool.gsAge1.value = g_PostChild1;
        }
        if (g_PostChild2 != "")
        {
            --iPax;
            //document.resTool.ChildAge2.value = g_PostChild2;
            document.resTool.gsAge2.value = g_PostChild2;
        } 
        if (g_PostChild3 != "")
        {
            --iPax;
            //document.resTool.ChildAge3.value = g_PostChild3;
            document.resTool.gsAge3.value = g_PostChild3;
        }
        if (g_PostChild4 != "")
        {
            --iPax;
            //document.resTool.ChildAge4.value = g_PostChild4;
            document.resTool.gsAge4.value = g_PostChild4;
        }
        
        document.resTool.Adults.value = iPax;
        g_PaxCount = iPax;                           
    }
    // initPromoCode
    if (g_PostPromoCode != "")
    {
        document.resTool.gsPromotionCode.value = g_PostPromoCode;
    }
}

// Function Name: initDate
// Purpose: Initializes the date(s) 
// Parameters: None
// Return: None
function initDate(date, cal,strPriority)
{
      //Check date before resetting values
		var validDate = validateDateFormat(date);
		if (validDate){
			
			the_d_date = getNonJSDate(getJSDateFormat(date)).split("/");
			the_d_month = parseInt(the_d_date[0], 10);
			the_d_day	= parseInt(the_d_date[1], 10);
			the_d_year = "20" + the_d_date[2];
			 
			var i;
	        if (cal == 'depart') {
				for (i = 0; i < document.resTool.departMonth.length; ++i)
				{
					if ( document.resTool.departMonth[i].value == the_d_month + "/" + the_d_year )
					{
						document.resTool.departMonth.selectedIndex = i;
		                
					}
				}
				for (i = 0; i < document.resTool.departDay.length; ++i)
				{
					if ( document.resTool.departDay[i].value == the_d_day )
					{
						document.resTool.departDay.selectedIndex = i;
					}
				}
			}else{
				for (i = 0; i < document.resTool.returnMonth.length; ++i)
				{
					if ( document.resTool.returnMonth[i].value == the_d_month + "/" + the_d_year )
					{
						document.resTool.returnMonth.selectedIndex = i;
		                
					}
				}
				for (i = 0; i < document.resTool.returnDay.length; ++i)
				{
					if ( document.resTool.returnDay[i].value == the_d_day )
					{
						document.resTool.returnDay.selectedIndex = i;
					}
				}
			}	         
	      
			adjustDate( 'departMonth1','returnMonth1','departDay1','returnDay1','departYear1', 'returnYear1',strPriority);
		}
}


// Function Name: longDateTimeStringToShortDateString
// Purpose: Converts a string from format "yyyy-MM-ddT12:34:00" to "MM/dd/yy"
// Parameters: longDateTime - String of long date time
// Return: String - short Date Time
function longDateTimeStringToShortDateString(longDateTime)
{
    var retVal = ""; 
    // Trim down input string to just the date portion   
    var workString = longDateTime.substring(0, (longDateTime.length - longDateTime.indexOf("T") + 1));
    // Split the date into its componenets
    var workArray = workString.split("-");
    
    // Build up return value from date array
    retVal = padAge(workArray[1]).toString() + "/" + padAge(workArray[2]).toString() + "/" + workArray[0].toString().substr(2,2);
    
    return retVal;
}


///////////////////////////////////////////////////////////////////////////////////////
        
function getIndex(m_obj)
{
	var m_num;
    
    for (m_num = 0; m_num < m_obj.length; m_num++)
    {
	   if (m_obj.options[m_num].selected)
	   {  return m_num;  }
    }
}

//10/20/04 - Levon Amelyan - end
function getNewDate(day_value, month_value, year_value)
{    
	var opts, m_day, m_month, m_year, new_date_value;

	m_day = day_value;
	opts = month_value.split("/");
	m_month = parseInt((opts[0] - 1), 10);
	m_year = parseInt(opts[1], 10);

	new_date_value = new Date(m_year, m_month, m_day);

    //alert("in getNewDate: " + new_date_value + " => " + day_value + " || " + month_value + " || " + year_value);
	
    return(new_date_value);
}



function checkDates(JS_date, ck_type)
{
	var m_day, m_month, m_year, opts, min_dep_date;
    
	opts = document.resTool.minDepartDate.value.split("/");
	m_month = opts[0];              
	m_day = opts[1] - 0;   // to make sure this is converted to integer
	m_year = opts[2];

	m_month = m_month - 1;   // in javascript, month array starts at 0, so need to subtract current m_month value by 1

	if (parseInt(m_year, 10) < 2000)
    { m_year = "20" + m_year; }

	min_dep_date = new Date(m_year, m_month, m_day);   

	//alert("new date: " + JS_date + "  vs  " + "min_dep_date: " + min_dep_date);
    
	if (ck_type == "moreorequal")
    {
	   if (JS_date >= min_dep_date)
       {  return true; }
       else
       { return false; }
	}
}

function setDateDropDown(nonJS_date, day_obj, month_obj, year_obj)
{
	// use this function to reset date drop down or to update date drop down if the next date should be automatically selected!!

	var m_num, m_day, m_month, m_year, opts, m_month_str, cont_flag;

	opts = nonJS_date.split("/");
	m_month = opts[0] - 0;
	m_day = opts[1] - 0;
	m_year = "20" + opts[2];
	m_month_str = m_month + "/" + m_year;

    //alert("setDateDropDown: " + nonJS_date + " => " + m_day + " = " + m_month_str);
	cont_flag = false;
    for (m_num = 0; m_num < month_obj.length; m_num++)
    {
	   month_obj.options[m_num].selected = false;
	   if (month_obj.options[m_num].value == m_month_str)
	   {
	      month_obj.options[m_num].selected = true;
          cont_flag = true;
       }
    }

//Year Pre-Selection <- start
    for (m_num = 0; m_num < year_obj.length; m_num++)
    {
	   year_obj.options[m_num].selected = false;
	   if (year_obj.options[m_num].value == m_year)
	   {
	      year_obj.options[m_num].selected = true;
          cont_flag = true;
       }
    }
//Year Pre-Selection <- end

	if (cont_flag == true)
    {
	   cont_flag = false;
       for (m_num = 0; m_num < day_obj.length; m_num++)
       {
   	      day_obj.options[m_num].selected = false;
   	      if (day_obj.options[m_num].value == m_day)
   	      {
   	         day_obj.options[m_num].selected = true;
             cont_flag = true;
          }
       }
	}

    return cont_flag;

}


function getJSDate(date_value)
{
	var m_num, m_day, m_month, m_year, opts, m_month_str, JS_date;

	opts = date_value.split("/");
	m_month = opts[0] - 1;              
	m_day = opts[1] - 0;   // this is to convert this to numeric from possibly a value w/ 0 in front of it like 02, 03, etc.
	m_year = parseInt(("20" + opts[2]), 10);

	JS_date = new Date(m_year, m_month, m_day);   
	return JS_date;
}

function getNonJSDate(date_value)
{
	var n_day, n_month, n_year, n_yy, nonJS_date;
    
	n_day = date_value.getDate() - 0;
	n_month = date_value.getMonth() + 1;
    n_year = date_value.getYear() + " ";  // this needs to be a string since we're using substr later on!!

	if (n_day < 10)
    {  
       n_day = "0" + n_day;
    }
    
    if (n_month < 10)
    {
       n_month = "0" + n_month;
    }

	if (n_year < 2000)
    {  
       n_year = parseInt(n_year, 10) + 1900;
       n_year = n_year + " ";
    }
	n_year = n_year.substr(2,2);
	
	nonJS_date = n_month + "/" + n_day + "/" + n_year;
	//alert("nonJS_date: " + nonJS_date);
    
    return(nonJS_date);
}

function updateDOW(JS_date, dow_type)
{
	//var day_of_week = new Array("SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY");
	var day_of_week = new Array("SUN","MON","TUE","WED","THU","FRI","SAT");
	var day_value = JS_date.getDay();
    //alert("updateDOW: " + JS_date + " " + day_value);



	var depDOW = FIND("departDOW");
	var retDOW = FIND("returnDOW");
	var dow = day_of_week[day_value].substring(0,1).toUpperCase() + day_of_week[day_value].substring(1,3).toLowerCase()

	if (dow_type == "depart")
    {  depDOW.innerHTML = dow;  }
    else
    {  retDOW.innerHTML = dow;  }
    //alert("updateDOW: " + JS_date + " = " + day_value + " = " + day_of_week[day_value]);

}


function getNewReturnDate(curr_date, stay_length, msg_value)
{
	var opts, m_day, m_month, m_year, nonJS_date, JS_date, cont_flag, dummy_flag;
   
    
	opts = curr_date.split("/");
    m_month = parseInt((opts[0] - 1), 10);  
	m_day = parseInt(opts[1], 10);
	m_year = "20" + opts[2];
    
	JS_date = new Date(m_year, m_month, m_day + stay_length);  
	nonJS_date = getNonJSDate(JS_date);
	
	cont_flag = setDateDropDown(nonJS_date, m_day, m_month, m_year);       
	
	if (cont_flag == true)
    {
       document.resTool.ReturnDate.value = nonJS_date;   
	   updateDOW(JS_date, "return");
	}
	else
    {
	   alert("New " + msg_value + " causes a new return date that is beyond allowed date range.  Please choose another " + msg_value);
	   //dummy_flag = setDateDropDown(document.resTool.gsOrigReturnDate.value, document.resTool.returnDay, document.resTool.returnMonth);       
	   //JS_date = getJSDate(document.resTool.gsOrigReturnDate.value);
       updateDOW(JS_date, "return");
    }    

	return cont_flag;

}

function getNewDepartDate(curr_date, stay_length, msg_value)
{
	var opts, m_day, m_month, m_year, nonJS_date, JS_date, cont_flag, dummy_flag;
	opts = curr_date.split("/");
    m_month = parseInt((opts[0] - 1), 10);  
	m_day = parseInt(opts[1], 10);
	m_year = "20" + opts[2];
    //alert("Month - " + m_month + " Day - " + m_day + " Year - " + m_year);

	JS_date = new Date(m_year, m_month, m_day);  
	nonJS_date = getNonJSDate(JS_date);
	//cont_flag = setDateDropDown(nonJS_date, m_day, m_month, m_year);       
    for (m_num = 0; m_num < document.resTool.departYear.length; m_num++)
    {
	   document.resTool.departYear.options[m_num].selected = false;
	   if (document.resTool.departYear.options[m_num].value == m_year)
	   {
	      document.resTool.departYear.options[m_num].selected = true;
          cont_flag = true;
       }
    }
	return(JS_date);

}



function resetDepartDate()
{
	var JS_date, cont_flag;
	var DepartDateInput = FIND("gsOrigDepartureDate");
	var d = new Date();
	d.setDate(d.getDate() + g_DepartOffset);
	DepartDateInput.value = padAge((d.getMonth() + 1).toString()) + "/" + padAge(d.getDate().toString()) + "/" +  d.getFullYear().toString().substr(2,2);
	cont_flag = DepartDateInput.value; //setDateDropDown(document.resTool.gsOrigDepartureDate.value, document.resTool.departDay, document.resTool.departMonth);       
	JS_date = getJSDate(DepartDateInput.value); //getJSDate(document.resTool.gsOrigDepartureDate.value);
    updateDOW(JS_date, "depart");
}


// 08/25/05 Patrick Duemling - Supports window positioning in popUpCalendar()
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}
function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
// 08/25/05 Patrick Duemling - end
//////////////////////////////////////////////////////////
function hideChildFields()
{
	var o1 = getObject("childrendiv1");
	var o2 = getObject("childrendiv2");
	var o3 = getObject("childrendiv3");
	var children = document.resTool.gsNumberOfChildren.options[document.resTool.gsNumberOfChildren.options.selectedIndex].value;
	var adults = document.resTool.gsNumberOfTravelers.options[document.resTool.gsNumberOfTravelers.options.selectedIndex].value;
	switch (children)
	{
	case "0":
	{
		document.resTool.gsNumberOfChildren.selectedIndex = 0;
		document.resTool.gsAge1.selectedIndex = 0;
		document.resTool.gsAge2.selectedIndex = 0;
		document.resTool.gsAge3.selectedIndex = 0;
		o1.style.display="none";
		o2.style.display="none";
		o3.style.display="none";
		break;
	}
	case "1":
	{
		if(adults == "4")
		{
			alert("Max of 4 passengers per vacation");
			document.resTool.gsNumberOfChildren.selectedIndex = 0;
			hideChildFields();
		}
		else
		{
		document.resTool.gsAge2.selectedIndex = 0;
		document.resTool.gsAge3.selectedIndex = 0;
			o1.style.display="block";
			o2.style.display="none";
			o3.style.display="none";
		}
		break;
	}
	case "2":
	{
		if((adults == "4") || (adults == "3"))
		{
			alert("Max of 4 passengers per vacation");
			document.resTool.gsNumberOfChildren.selectedIndex = 0;
			hideChildFields();
		}
		else
		{
		document.resTool.gsAge3.selectedIndex = 0;
			o1.style.display="block";
			o2.style.display="block";
			o3.style.display="none";
		}
		break;
	}
	case "3":
	{
		if((adults == "4") || (adults == "3") || (adults == "2"))
		{
			alert("Max of 4 passengers per vacation");
			document.resTool.gsNumberOfChildren.selectedIndex = 0;
			hideChildFields();
		}
		else
		{
			o1.style.display="block";
			o2.style.display="block";
			o3.style.display="block";
		}
		break;
	}
	}
}

function checkAdults()
{
	var children = parseInt(document.resTool.gsNumberOfChildren.options[document.resTool.gsNumberOfChildren.options.selectedIndex].value,10);
	var adults = parseInt(document.resTool.gsNumberOfTravelers.options[document.resTool.gsNumberOfTravelers.selectedIndex].value,10);
	var pax = children + adults;
	if(pax > 4)
	{
		alert("Max of 4 passengers per vacation");
		document.resTool.gsNumberOfTravelers.selectedIndex = 0;
	}

}
function getObject(ID) {
if (document.getElementById)
{
  return document.getElementById(ID);
}
else if (document.all)
{
  return document.all[objID];
}
else if (document.layers)
{
  return document.layers[objID];
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
// Function will adjust the dates of each calendar based on the params passed in.
function adjustDate(strMonthYearObj, strMonthYearObj2, strDayObj, strDayObj2, strYearObj, strYearObj2, strPriority) {    
    var m_names_full = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    var m_names_abv = new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
    
    var objAdjustMonthYear = FIND(strMonthYearObj);    
    var objAdjustMonthYear2 = FIND(strMonthYearObj2);
    var objAdjustDay = FIND(strDayObj); 
    var objAdjustDay2 = FIND(strDayObj2);  
    
    //04/25/07
    var objAdjustYear = FIND(strYearObj);
    var objAdjustYear2 = FIND(strYearObj2);
     
    
    if ((objAdjustMonthYear != undefined) && (objAdjustMonthYear2 != undefined) && (objAdjustDay != undefined) && (objAdjustDay2 != undefined) && (objAdjustYear != undefined) && (objAdjustYear2 != undefined)){        
        // Today's date
        var objTodaysDate = new Date(Date());
        
        // First date
        var objDate = new Date();
        var strAdjustMonthYear = objAdjustMonthYear.value;     
        var arrAdjustMonthYear = strAdjustMonthYear.split("/");    
        objDate.setFullYear(arrAdjustMonthYear[1], parseInt(arrAdjustMonthYear[0]) - 1, objAdjustDay.value);
        
        var strAdjustYear = arrAdjustMonthYear[1];
        
        // Second date
        var objDate2 = new Date();
        var strAdjustMonthYear2 = objAdjustMonthYear2.value;
        var arrAdjustMonthYear2 = strAdjustMonthYear2.split("/");
        objDate2.setFullYear(arrAdjustMonthYear2[1], parseInt(arrAdjustMonthYear2[0]) - 1, objAdjustDay2.value);
        
        var strAdjustYear2 = arrAdjustMonthYear2[1];
        
        //alert("Date1 - " + objDate + "\nDate2 - " + objDate2);
        
        //check days of month
        var strMonthDays = daysInMonth(arrAdjustMonthYear[0],arrAdjustMonthYear[1]); 
        var strMonthDays2 = daysInMonth(arrAdjustMonthYear2[0],arrAdjustMonthYear2[1]); 
        //alert(arrAdjustMonthYear[0] + "/" +arrAdjustMonthYear[1] + " " + strMonthDays + "\n" + arrAdjustMonthYear2[0] + "/" + arrAdjustMonthYear2[1] + " " + strMonthDays2);
        
        //compare selected days of month with days month actually contains
        if ( (parseInt(objAdjustDay.value) > strMonthDays) || (parseInt(objAdjustDay2.value) > strMonthDays2) ) {
			alert("Sorry, the date(s) you selected are invalid. \nPlease verify your dates and select again. \nNote: We have defaulted the date to the next day for your convenience.");
		}
        
        
		// Compare dates
		if (objDate >= objDate2) {     
		//alert("strPriority - " + strPriority);  
			if (strPriority == '2') {     
		// Before we add X # to the day, we need to make sure the month has that many days        
				var strNumDaysInMonth = daysInMonth(arrAdjustMonthYear[0],arrAdjustMonthYear[1]);           
					
				var intNum
					intNum = parseInt(objAdjustDay2.value) - 2;       
				var strNum = new String();
					strNum = String(intNum);

				if (intNum == 0) {   // dates should remain the same            
					objAdjustDay2.value = parseInt(objAdjustDay.value) + 1;             
				}else{
					objAdjustDay.value = strNum; 
					objAdjustMonthYear.value = objAdjustMonthYear2.value;  
					objAdjustYear.value = objAdjustYear2.value;
					
				}                        
			}else if (strPriority == '1'){        
		// Before we add one to the day, we need to make sure the month has that many days        
				var strNumDaysInMonth = daysInMonth(arrAdjustMonthYear[0],arrAdjustMonthYear[1]);        
				//alert(arrAdjustMonthYear[0] + "/" + arrAdjustMonthYear[1] + "    " + "DaysMonth - " + strNumDaysInMonth);  
				
				var intNum
					intNum = parseInt(objAdjustDay.value) + 2;
				var strNum = new String();
					strNum = String(intNum);        

				if (intNum <= parseInt(strNumDaysInMonth)) {                            
					var objDateNew = new Date();
					var strAdjustMonthYearNew = objAdjustMonthYear.value;
					var arrAdjustMonthYearNew = strAdjustMonthYearNew.split("/");
						objDateNew.setFullYear(arrAdjustMonthYearNew[1], parseInt(arrAdjustMonthYearNew[0]) - 1, objAdjustDay.value);

					var intAdjustMonthNew = objDateNew.getMonth() + 1;
					var strAdjustMonthNew = String(intAdjustMonthNew);
					var strAdjustMonthYearNew = strAdjustMonthNew + "/" + objDateNew.getFullYear();

					var strAdjustYearNew = objDateNew.getFullYear();
						
						objAdjustDay2.value = strNum; 
						objAdjustMonthYear2.value = strAdjustMonthYearNew;
						objAdjustYear2.value = strAdjustYearNew;
				}else{            
					// adjust new month day value
					objAdjustDay2.value = (intNum - parseInt(strNumDaysInMonth));     
					       
					// adjust the month one ahead            
					if ( parseInt(arrAdjustMonthYear[0]) < 12 ) {                
					// add one to month
						var intNewMonth = parseInt(arrAdjustMonthYear[0]) + 1;                
						var strNewMonth = new String();
							strNewMonth = String(intNewMonth)
						var strNewMonthYear = strNewMonth + "/" + arrAdjustMonthYear[1];                
							objAdjustMonthYear2.value = strNewMonthYear;
						var strNewYear = arrAdjustMonthYear[1];
							objAdjustYear2.value = strNewYear;
					}else{                
						// start at "1" for month (January) of new year                
						var strNewMonth = new String("1");                
						var intNewYear = parseInt(arrAdjustMonthYear[1]) + 1;
							strNewYear = String(intNewYear)                
						var strNewMonthYear = strNewMonth + "/" + strNewYear;                
							objAdjustMonthYear2.value = strNewMonthYear;
							objAdjustYear2.value = strNewYear;
					}            
				}                                      
			}      
		}else{
///	Reset Return date if Departure Date changes and is less then current return date.
			if (strPriority == '1'){    
				var strNumDaysInMonth = daysInMonth(arrAdjustMonthYear[0],arrAdjustMonthYear[1]);        

				var intNum
					intNum = parseInt(objAdjustDay.value) + 2;
				var strNum = new String();
					strNum = String(intNum);        

				if (intNum <= parseInt(strNumDaysInMonth)) {                            
					var objDateNew = new Date();
					var strAdjustMonthYearNew = objAdjustMonthYear.value;
					var arrAdjustMonthYearNew = strAdjustMonthYearNew.split("/");
						objDateNew.setFullYear(arrAdjustMonthYearNew[1], parseInt(arrAdjustMonthYearNew[0]) - 1, objAdjustDay.value);

					var intAdjustMonthNew = objDateNew.getMonth() + 1;
					var strAdjustMonthNew = String(intAdjustMonthNew);
					var strAdjustMonthYearNew = strAdjustMonthNew + "/" + objDateNew.getFullYear();
					
					var strAdjustYearNew = arrAdjustMonthYearNew[1];
					
						objAdjustDay2.value = strNum; 
						objAdjustMonthYear2.value = strAdjustMonthYearNew;
						objAdjustYear2.value = strAdjustYearNew;
				}else{            
					// adjust new month day value
					objAdjustDay2.value = (intNum - parseInt(strNumDaysInMonth));            
					// adjust the month one ahead            
					if ( parseInt(arrAdjustMonthYear[0]) < 12 ) {                
					// add one to month
						var intNewMonth = parseInt(arrAdjustMonthYear[0]) + 1;                
						var strNewMonth = new String();
							strNewMonth = String(intNewMonth)
						var strNewMonthYear = strNewMonth + "/" + arrAdjustMonthYear[1];                
							objAdjustMonthYear2.value = strNewMonthYear;
						
						var strNewYear = arrAdjustMonthYear[1];
							objAdjustYear2.value = strNewYear;
							
					}else{                
						// start at "1" for month (January) of new year                
						var strNewMonth = new String("1");                
						var intNewYear = parseInt(arrAdjustMonthYear[1]) + 1;
							strNewYear = String(intNewYear)                
						var strNewMonthYear = strNewMonth + "/" + strNewYear;                
							objAdjustMonthYear2.value = strNewMonthYear;
						var strNewYear = strNewYear;
							objAdjustYear2.value = strNewYear;
					}            
				} 
			}               
/////////////////////////////
        }
        
        // Need to adjust resTool dates for popupcal's to work
        var objDepartDate = getNewDate(parseInt(objAdjustDay.value), objAdjustMonthYear.value, objAdjustYear.value);    
        var objReturnDate = getNewDate(parseInt(objAdjustDay2.value), objAdjustMonthYear2.value, objAdjustYear2.value);    
        var strDepartDate = getNonJSDate(objDepartDate);
        var strReturnDate = getNonJSDate(objReturnDate);    
 //alert("strDepartDate = " + strDepartDate + "\n strReturnDate = " + strReturnDate);
			
			if ( (objDepartDate == "NaN") && (objReturnDate == "NaN")) {
				resetDepartDate();
				g_PostDepartureDate = document.resTool.gsOrigDepartureDate.value;
				initSearchParameters();
			}
			
			if ( (objDepartDate == "NaN") && (objReturnDate != "NaN")) {
				alert("Invalid departure date.\nDeparture Date exceeds valid date range.\nPlease select a new date.");
				resetDepartDate();
				g_PostDepartureDate = document.resTool.gsOrigDepartureDate.value;
				initSearchParameters();
			}else{
				document.resTool.gsDepartureDate.value = strDepartDate;
			}
			
			if ( (objReturnDate == "NaN") && (objDepartDate != "NaN")) {
				alert("Invalid return date.\nReturn Date exceeds valid date range.\nDate has been reset. Please select a new date.");
				resetDepartDate();
				g_PostDepartureDate = document.resTool.gsOrigDepartureDate.value;
				initSearchParameters();
				
			}else{
				//var strReturnDate = getNonJSDate(objReturnDate);    
				document.resTool.gsReturnDate.value = strReturnDate; 
			}
       //alert(strDepartDate + " ----- " + strReturnDate);
//      document.resTool.gsDepartureDate.value = strDepartDate;
//		document.resTool.gsReturnDate.value = strReturnDate; 
    }   
}

function doAdjustDate(strMonthYearObj, strMonthYearObj2, strDayObj, strDayObj2, strYearObj, strYearObj2, strPriority){    
    adjustDate(strMonthYearObj, strMonthYearObj2, strDayObj, strDayObj2, strYearObj, strYearObj2, strPriority);
}

function departDateChange_UV()
{
	var m_index, m_day, m_month, m_year, JS_date, nonJS_date, cont_flag;

    m_index = getIndex(document.resTool.departDay);
	m_day = document.resTool.departDay.options[m_index].value;

    m_index = getIndex(document.resTool.departMonth);
	m_month = document.resTool.departMonth.options[m_index].value;

	m_index = getIndex(document.resTool.departYear);
	m_year = document.resTool.departYear.options[m_index].value;

	JS_date = getNewDate(m_day, m_month, m_year);
    nonJS_date = getNonJSDate(JS_date);
	
	//==================================================================================================
	// check whether valid date has been selected.  Otherwise, reset date to its previous/original value
	//==================================================================================================
	cont_flag = setDateDropDown(nonJS_date, document.resTool.departDay, document.resTool.departMonth, document.resTool.departYear);
	if (cont_flag == true)
    {
		document.resTool.gsDepartureDate.value = nonJS_date;		
		document.resTool.gsOrigDepartureDate.value = nonJS_date;
		
		updateDOW(JS_date, "depart");		
		// 11/28/06 JMB < Update the return DOW
		var strReturnDate = document.resTool.gsReturnDate.value;				
		
		updateDOW(getJSDateFormat(strReturnDate), "return");
	}
	else
    {
	    alert("New depart date is not a valid date.  Please choose another date");
  	    resetDepartDate();
	}
}

function returnDateChange_UV()
{
	var m_index, m_day, m_month, m_year, JS_date, nonJS_date, cont_flag;
    var min_stay, max_stay, new_stay_length, calc_value;

    m_index = getIndex(document.resTool.returnDay);
	m_day = document.resTool.returnDay.options[m_index].value;

    m_index = getIndex(document.resTool.returnMonth);
	m_month = document.resTool.returnMonth.options[m_index].value;

	m_index = getIndex(document.resTool.returnYear);
	m_year = document.resTool.returnYear.options[m_index].value;


	JS_date = getNewDate(m_day, m_month, m_year);
    nonJS_date = getNonJSDate(JS_date);    
	//==================================================================================================
	// check whether valid date has been selected.  Otherwise, reset date to its previous/original value
	//==================================================================================================
	cont_flag = setDateDropDown(nonJS_date, document.resTool.returnDay, document.resTool.returnMonth, document.resTool.returnYear);

	if (cont_flag == true)
    {        
		document.resTool.gsReturnDate.value = nonJS_date;
		document.resTool.gsOrigReturnDate.value = nonJS_date;
		updateDOW(JS_date, "return");
		
		var strDepartureDate = document.resTool.gsDepartureDate.value;
		//document.resTool.gsOrigDepartureDate.value = strDepartureDate;
		stay_length = parseInt(document.resTool.numOfNights.options[document.resTool.numOfNights.options.selectedIndex].value, 10);
		var newDepartDate = getNewDepartDate(strDepartureDate, stay_length, "");
		updateDOW(newDepartDate, "depart");
	}
	else
    {
	    alert("New return date is not a valid date.  Please choose another date");
  	    resetReturnDate();
	}
}

function numOfNightsChange()
{
	var cont_flag = false;
	var curr_item_array, new_item_array;

    stay_length = parseInt(document.resTool.numOfNights.options[document.resTool.numOfNights.options.selectedIndex].value, 10);

	// array starts 1 count less than numOfNights value
    curr_item_array = parseInt(document.resTool.numOfNights.options[document.resTool.numOfNights.options.selectedIndex].value, 10) - 1;

	cont_flag = getNewReturnDate(document.resTool.gsDepartureDate.value, stay_length, "Number of nights");
	if (cont_flag == true)
    {
	   document.resTool.gsOrigLengthOfStay.value = document.resTool.numOfNights.options[document.resTool.numOfNights.options.selectedIndex].value;
	   //alert("good -> gsOrigLengthOfStay: " + document.resTool.gsOrigLengthOfStay.value);
    }
    else
    {
       document.resTool.gsLengthOfStay.value = document.resTool.gsOrigLengthOfStay.value;
	   //alert("bad -> gsLengthOfStay: " + document.resTool.gsOrigLengthOfStay.value);
       document.resTool.numOfNights.options[curr_item_array].selected = false;
	   new_item_array = document.resTool.gsOrigLengthOfStay.value - 1;
	   document.resTool.numOfNights.options[new_item_array].selected = true;
    }

}

function lengthOfStayChange()
{
	var min_stay, max_stay, stay_length;
	var cont_flag = false;

	min_stay = parseInt(document.resTool.minStay.value, 10);
	max_stay = parseInt(document.resTool.maxStay.value, 10);
    stay_length = parseInt(document.resTool.gsLengthOfStay.value, 10);

	//alert("lengthOfStayChange: " + stay_length + " => " + min_stay + " to " + max_stay);

	if (isNaN(stay_length))
	{
	   alert("Non-numeric length of stay was entered. Please enter a valid length of stay between " + min_stay + " and " + max_stay);
       document.resTool.gsLengthOfStay.value = document.resTool.gsOrigLengthOfStay.value;
	}
	else
	{
   	   if (stay_length < min_stay)
       {
   	      alert("Invalid length of stay value was entered. Please enter a valid length of stay between " + min_stay + " and " + max_stay);
   	      document.resTool.gsLengthOfStay.value = document.resTool.gsOrigLengthOfStay.value;
   	   }
       else
       {
   	      if (stay_length > max_stay)
          {
      	     alert("Invalid length of stay value was entered. Please enter a valid length of stay between " + min_stay + " and " + max_stay);
      	     document.resTool.gsLengthOfStay.value = document.resTool.gsOrigLengthOfStay.value;
          }
      	  else
          {
      	     cont_flag = getNewReturnDate(document.resTool.gsDepartureDate.value, stay_length, "length of stay");
	         if (cont_flag == true)
             {
	            document.resTool.gsOrigLengthOfStay.value = document.resTool.gsLengthOfStay.value;
             }
             else
             {
      	        document.resTool.gsLengthOfStay.value = document.resTool.gsOrigLengthOfStay.value;
             }
          }
       }
	}

}
function daysInMonth(month,year) {
    var dd = new Date(year, month, 0);
    return dd.getDate();
} 
function getJSDateFormat(date_value)
{    
	var m_num, m_day, m_month, m_year, opts, m_month_str, new_date_value;

	opts = date_value.split("/");
	m_month = opts[0] - 1;
	m_day = opts[1] - 0;   // this is to convert this to numeric from possibly a value w/ 0 in front of it like 02, 03, etc.
	m_year = parseInt("20" + opts[2]);

	new_date_value = new Date(m_year, m_month, m_day);	
	return new_date_value;	
}
///////////////////////////////////////////////////////////////
function validateText(){
    var validtext;
    var childage;
    if (document.resTool.gsPromotionCode.value != ""){
        if (validate(document.resTool.gsPromotionCode.value, "PROMOCODE") == false) {
			   alert("The promo code is not valid");
			    validtext = false;
		}
        else{
        validtext = true;
        }
    }
     else{
        validtext = true;
    }
    return validtext;
}      
   