function retOptIn(a_sFormName){
	
	if (a_sFormName == "frmOptIn"){
    showLabel(document.forms[a_sFormName].EMAIL, sDefaultEmail);
  	showLabel(document.forms[a_sFormName].ZIP, sDefaultEmailZip);
  }
}

/* Validates a form called "form", for use with the opt-in and preferences forms. */
function f_validateForm(a_sFormName)
{
   if (typeof(a_sFormName) == "undefined")
   {
      a_sFormName = "form";
   }
   var l_okay = true;

   for (var j=0; j < document.forms[a_sFormName].elements.length; j++)
   {
      var l_element = document.forms[a_sFormName].elements[j];
      f_useHiddenFieldIfCheckbox(l_element);

      var sFieldNameRequired = l_element.name + "_REQUIRED";
      var elRequired = document.forms[a_sFormName].elements[sFieldNameRequired];

      if (elRequired)
      {
         if (elRequired.value == "T" && l_element.value == "")
         {
            alert("You must fill in all the required fields.");
            retOptIn(a_sFormName);
            return;
         }
      }
      //text areas can only be 255 in size
      if(l_element.type == "textarea")
      {
         if (l_element.value.length > 255)
         {
            alert("Please limit your entries to only 255 characters");
            retOptIn(a_sFormName);
            return;
         }
      }
      var sFieldNameDataType = l_element.name + "_DATATYPE";
      var elDataType = document.forms[a_sFormName].elements[sFieldNameDataType];

      if (elDataType)
      {
         if (l_element.value != "")
         {
            if (elDataType.value == "time")
            {
               l_okay = f_isValidTime(l_element.value);
            }
            if (elDataType.value == "date")
            {
               l_okay = f_isValidDate(l_element.value);
            }
            if (elDataType.value == "numeric")
            {
               l_okay = f_isNumeric(l_element.value);
            }
            if (elDataType.value == "email")
            {
               l_okay = f_isValidEmail(l_element.value);
            }
            if (!l_okay)
            {
               if (a_sFormName == "frmOptIn"){
               	showLabel(document.forms[a_sFormName].EMAIL, sDefaultEmail);
               	showLabel(document.forms[a_sFormName].ZIP, sDefaultEmailZip);
               }
               l_element.focus();
               retOptIn(a_sFormName);
               return;
            }
         }
      }
   }

   document.forms[a_sFormName].submit();
}


/* checkboxes that have SYSTEM_ before their name should have an accompanying hidden
 field, that does not have the SYSTEM_.  This field should be "Yes" if the checkbox
 is checked, and "No" if it is not */
function f_useHiddenFieldIfCheckbox(a_element)
{
   if (a_element.type == "checkbox" && a_element.name.substring(0, 7) == "SYSTEM_")
   {
      var hiddenElement = eval("document.form.elements['" + a_element.name.substring(7) +"']");

      if (a_element.checked)
      {
         hiddenElement.value = "Yes";
      }
      else
      {
         hiddenElement.value = "No";
      }
   }
}

/* The following are common validation routines used by any screens that need to
 * validate user input.
 */
/* Checks if an email address is valid, modified from http://javascript.internet.com/forms/check-email.html
*/
function f_isValidEmail(a_sEmail)
{
   if (a_sEmail != null && a_sEmail != "")
   {
      /* The following pattern is used to check if the entered e-mail address
         fits the user@domain format.  It also is used to separate the username
         from the domain. */
      var emailPat=/^(.+)@(.+)$/;
      /* The following string represents the pattern for matching all special
         characters.  We don't want to allow special characters in the address.
         These characters include ( ) < > @ , ; : \ " . [ ]    */
      var specialCharsUser="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
      var specialCharsDomain="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]\\'";

      /* The following string represents the range of characters allowed in a
         username or domainname.  It really states which chars aren't allowed. */
      var validCharsUser="\[^\\s" + specialCharsUser + "\]";
      var validCharsDomain="\[^\\s" + specialCharsDomain + "\]";
      /* The following pattern applies if the "user" is a quoted string (in
         which case, there are no rules about which characters are allowed
         and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
         is a legal e-mail address. */
      var quotedUser="(\"[^\"]*\")";
      /* The following pattern applies for domains that are IP addresses,
         rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
         e-mail address. NOTE: The square brackets are required. */
      var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
      /* The following string represents an atom (basically a series of
         non-special characters.) */
      var atomUser=validCharsUser + '+';
      var atomDomain=validCharsDomain + '+';
      /* The following string represents one word in the typical username.
         For example, in john.doe@somewhere.com, john and doe are words.
         Basically, a word is either an atom or quoted string. */
      var wordUser="(" + atomUser + "|" + quotedUser + ")";
      // The following pattern describes the structure of the user
      var userPat=new RegExp("^" + wordUser + "(\\." + wordUser + ")*$");
      /* The following pattern describes the structure of a normal symbolic
         domain, as opposed to ipDomainPat, shown above. */
      var domainPat=new RegExp("^" + atomDomain + "(\\." + atomDomain +")*$");


      /* Finally, let's start trying to figure out if the supplied address is
         valid. */

      /* Begin with the coarse pattern to simply break up user@domain into
         different pieces that are easy to analyze. */
      var matchArray=a_sEmail.match(emailPat);
      if (matchArray==null)
      {
        /* Too many/few @'s or something; basically, this address doesn't
           even fit the general mould of a valid e-mail address. */
      	alert("The format of the email address you entered is not valid for email addresses.");
      	return false;
      }
      var user=matchArray[1];
      var domain=matchArray[2];

      // See if "user" is valid
      if (user.match(userPat)==null)
      {
          // user is not valid
          alert("Email username doesn't seem to be valid.");
          return false;
      }

      /* if the e-mail address is at an IP address (as opposed to a symbolic
         host name) make sure the IP address is valid. */
      var IPArray=domain.match(ipDomainPat);
      if (IPArray!=null)
      {
          // this is an IP address
      	  for (var i=1;i<=4;i++)
           {
      	    if (IPArray[i]>255)
             {
      	        alert("Email IP address is invalid!");
      		     return false;
      	    }
          }
          return true;
      }

      // Domain is symbolic name
      var domainArray=domain.match(domainPat);
      if (domainArray==null)
      {
      	alert("Email domain name doesn't seem to be valid.");
         return false;
      }

      /* domain name seems valid, but now make sure that it ends in a
         three-letter word (like com, edu, gov) or a two-letter word,
         representing country (uk, nl), and that there's a hostname preceding
         the domain or country. */

      /* Now we need to break up the domain to get a count of how many atoms
         it consists of. */
      var atomPat=new RegExp(atomDomain,"g");
      var domArr=domain.match(atomPat);
      var len=domArr.length;
      if (domArr[domArr.length-1].length<2 ||
          domArr[domArr.length-1].length>4)
      {
         // the address must end in a two letter or three letter word.
         alert("Email address must end in a three or four letter domain or a two letter country.");
         return false;
      }

      // Make sure there's a host name preceding the domain.
      if (len<2)
      {
         var errStr="Email address is missing a hostname.";
         alert(errStr);
         return false;
      }
   }

   // If we've gotten this far, everything's valid!
   return true;
}

/**
 * Checks if a time value is valid
 *
 */
function f_isValidTime(a_sTime)
{
   // Checks if time is in HH:MM:SS AM/PM format.
   // The seconds and AM/PM are optional.

//   var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
   var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?$/;

   var matchArray = a_sTime.match(timePat);
   if (matchArray == null)
   {
      alert("Time is not in a valid format.");
      return(false);
   }
   hour = matchArray[1];
   minute = matchArray[2];
   second = matchArray[4];

   if (second=="")
   {
      second = null;
   }

   if (hour < 0  || hour > 23)
   {
      alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
      return(false);
   }
   if (minute<0 || minute > 59)
   {
      alert ("Minute must be between 0 and 59.");
      return(false);
   }
   if (second != null && (second < 0 || second > 59))
   {
      alert ("Second must be between 0 and 59.");
      return(false);
   }
   return(true);
}



/**
 * Checks if a value is a number
 *
 */
function f_isNumeric(a_sNumber)
{
   myString = "0123456789";

   for(i = 0; i < a_sNumber.length; i++)
   {
      if(myString.indexOf(a_sNumber.charAt(i)) == -1)
      {
         alert("The number you entered is invalid");
         return(false);
      }
   }
   return(true);
}
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s)
{
   var i;
   for (i = 0; i < s.length; i++){
      // Check that current character is number.
      var c = s.charAt(i);
      if (((c < "0") || (c > "9")))
      {
         return false;
      }
   }
   // All characters are numbers.
   return true;
}

function stripCharsInBag(s, bag)
{
   var i;
   var returnString = "";
   // Search through string's characters one by one.
   // If character is not in bag, append to returnString.
   for (i = 0; i < s.length; i++)
   {
      var c = s.charAt(i);
      if (bag.indexOf(c) == -1)
      {
         returnString += c;
      }
   }
   return returnString;
}

function daysInFebruary (year)
{
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n)
{
	for (var i = 1; i <= n; i++)
	{
		this[i] = 31;

		if (i==4 || i==6 || i==9 || i==11)
		{
		   this[i] = 30;
		}
		if (i==2)
		{
		   this[i] = 29;
		}
   }
   return this
}


function f_isValidDate(dtStr)
{
   if (dtStr.length != 10)
   {
		alert("The date format should be : mm/dd/yyyy");
		return(false);
   }
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;

	if (strDay.charAt(0)=="0" && strDay.length>1)
	{
	   strDay = strDay.substring(1);
	}
	if (strMonth.charAt(0)=="0" && strMonth.length>1)
	{
	   strMonth = strMonth.substring(1);
	}
	for (var i = 1; i <= 3; i++)
	{
		if (strYr.charAt(0)=="0" && strYr.length>1)
		{
		   strYr = strYr.substring(1);
		}
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1)
	{
		alert("The date format should be : mm/dd/yyyy");
		return(false);
	}
	if (strMonth.length<1 || month<1 || month>12)
	{
		alert("Please enter a valid month");
		return(false);
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		alert("Please enter a valid day");
		return(false);
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
	{
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
		return(false);
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
	{
		alert("Please enter a valid date");
		return(false);
	}
   return(true);
}


function hideAll()
{
	widget('directions', 'hide');
	widget('map', 'hide');
	widget('mileage', 'hide');
	widget('pat', 'hide');
}

function getElement(sContent){
	var objLocation;
	var sElement;
	
	if(document.getElementById){
		sElement = "document.getElementById('" + sContent + "')";
	}
	else if(document.all){
		sElement = "document.all['" + sContent + "']";
	}
	
	objLocation = eval(sElement);
	return objLocation;
}

function widget(sContent, sMethod)
{	
	var objLocation = getElement(sContent);
	var objAddresses = getElement('addresses');
	
	if (objLocation){
		if (sMethod == "show"){		
			hideAll();
			objLocation.style.display = 'block';
		}
		else{
			objLocation.style.display = 'none';
		}
	}
	
	if (objAddresses){
		objAddresses.style.display = 'none';
	}
}

function init(bIsDefault)
{
	var objForm = document.frmGetDirections;
	if (objForm.txtStartAddress.value == ""){
		objForm.txtStartAddress.value = sDefaultAddress;
	}
	
	if (objForm.txtDestAddress.value == ""){
		objForm.txtDestAddress.value = sDefaultAddress;
	}
	
	if (bIsDefault){
		if (objForm.txtStartCity.value == ""){
			objForm.txtStartCity.value = sDefaultCity;
		}
		
		if (objForm.txtDestCity.value == ""){
			objForm.txtDestCity.value = sDefaultCity;
		}
		
		if (objForm.txtStartState.value == ""){
			objForm.txtStartState.value = sDefaultState;
		}
		
		if (objForm.txtDestState.value == ""){
			objForm.txtDestState.value = sDefaultState;
		}
		
		if (objForm.txtStartZip.value == ""){
			objForm.txtStartZip.value = sDefaultZip;
		}	
		
		if (objForm.txtDestZip.value == ""){
			objForm.txtDestZip.value = sDefaultZip;
		}
	}
	
	document.frmInputType.radInputType[0].checked = true;
} 
	
	function setFocusToAddtoList(){

//no op
}	

function showLabel(objElement, sLabel){
	if (objElement.value == ""){
			objElement.value = sLabel;
	};
}

function hideLabel(objElement, sLabel){
	if (objElement.value == sLabel){
			objElement.value = "";
	}
}

function useSavedAddressDirStart(){
	useSavedAddress('frmGetDirections', 'DirStart', 'Start', bSignedIn);
}


function useSavedAddressDirDest(){
	useSavedAddress('frmGetDirections', 'DirDest', 'Dest', bSignedIn);
}

function useSavedAddressMap(){
	useSavedAddress('frmGetMap', 'Map', 'Map', bSignedIn);
}

function useSavedAddressMileageStart(){
	useSavedAddress('frmGetMileage', 'MileageStart', 'Start', bSignedIn);
}

function useSavedAddressMileageDest(){
	useSavedAddress('frmGetMileage', 'MileageDest', 'Dest', bSignedIn);
}

function openAirportList(sType)
{
	var sFormParams = "FRM=frmGetDirections&WID=txtDestAddress&PAGE=home&ADDR=txtDestAddress&CITY=txtDestCity&STATE=txtDestState&ZIP=txtDestZip";
	
	if (sType == "DirStart"){
		sFormParams = "FRM=frmGetDirections&WID=txtStartAddress&PAGE=home&ADDR=txtStartAddress&CITY=txtStartCity&STATE=txtStartState&ZIP=txtStartZip";
	}
	else if (sType == "Map"){
		sFormParams = "FRM=frmGetMap&WID=txtMapAddress&NAME=txtMapName&CITY=txtMapCity&STATE=txtMapSt&ZIP=txtMapZip";
	}
	else if (sType == "MileageStart"){
		sFormParams = "FRM=frmGetMileage&WID=txtStartAddress&PAGE=home&ADDR=txtStartAddress&CITY=txtStartCity&STATE=txtStartState&ZIP=txtStartZip";
	}
	else if (sType == "MileageDest"){
		sFormParams = "FRM=frmGetMileage&WID=txtDestAddress&PAGE=home&ADDR=txtDestAddress&CITY=txtDestCity&STATE=txtDestState&ZIP=txtDestZip";
	}
	
	var sAddrWindow = window.open(MakeClientScriptURLString("/common/useAnAirport.jsp?"+sFormParams,false),"Airport","directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=no,width=400,height=400,screenX=200,screenY=300,top=200,left=300");
}

function validateSaveAddress(sForm, sPrefix)
{
 	var reArpt = /^[A-Za-z]{3}/;
 	var reLatLong = /^\s*([+-]{0,1}\d+\.{0,1}\d*\s*){1,3}\s*,\s*([+-]{0,1}\d+\.{0,1}\d*\s*){1,3}\s*$/;
	var sAddressField = "txt"+sPrefix+"Address";
	var sCheckedField = "chk"+sPrefix+"SaveToAB";
	var objCheckedField = document.forms[sForm][sCheckedField];
	var sNameField = "txt"+sPrefix+"Name";
	var objNameField = document.forms[sForm][sNameField];
	var sTemp = document.forms[sForm][sAddressField].value;
	
	if(objCheckedField.checked){
  	if(reArpt.test(sTemp) && sTemp.length == 3) {
    	alert('Sorry, you cannot add an airport to the address book.');
      objCheckedField.checked = false;
      return;
  	}

    if(reLatLong.test(sTemp)){
    	alert('Sorry, you cannot add latitude - longitudes to the address book.');
      objCheckedField.checked = false;
      return;
  	}

  	if(objNameField.value.length < 1 || objNameField.value == sDefaultName){
  		alert('Please provide a name for the address to be saved.');
  		objCheckedField.checked = false;
   		return;
  	}
  }
}

function openAddressBook(sType)
{
	var sFormParams = "FRM=frmGetDirections&NAME=txtDestName&ADDR=txtDestAddress&CITY=txtDestCity&STATE=txtDestState&ZIP=txtDestZip";
	
	if (sType == "DirStart"){
		sFormParams = "FRM=frmGetDirections&NAME=txtStartName&ADDR=txtStartAddress&CITY=txtStartCity&STATE=txtStartState&ZIP=txtStartZip";
	}
	else if (sType == "Map"){
		sFormParams = "FRM=frmGetMap&NAME=txtMapName&ADDR=txtMapAddress&CITY=txtMapCity&STATE=txtMapSt&ZIP=txtMapZip&COUNTRY=cboCountry";
	}
	else if (sType == "MileageStart"){
		sFormParams = "FRM=frmGetMileage&NAME=txtStartName&ADDR=txtStartAddress&CITY=txtStartCity&STATE=txtStartState&ZIP=txtStartZip";
	}
	else if (sType == "MileageDest"){
		sFormParams = "FRM=frmGetMileage&NAME=txtDestName&ADDR=txtDestAddress&CITY=txtDestCity&STATE=txtDestState&ZIP=txtDestZip";
	}
	
	var sAddrWindow = window.open(MakeClientScriptURLString("/common/myAddressBook.jsp?"+sFormParams+"&iShowAddresses=0",false),"AddressBook","directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=no,width=450,height=400,screenX=200,screenY=300,top=200,left=300");
}

function useSavedAddress(sForm, sType, sPrefix, bSignedIn)
{
	var sSelect = "cboSavedAddresses" + sType;
	var sLocation = document.forms[sForm][sSelect].options[document.forms[sForm][sSelect].selectedIndex].value;
	var sFieldAddress = "txt" + sPrefix + "Address";
	var sFieldCity = "txt" + sPrefix + "City";
	var sFieldState = "txt" + sPrefix + "State";
	
	if (sType == "Map")
	{
		sFieldState = "txt" + sPrefix + "St";
	}
	
	var sFieldZip = "txt" + sPrefix + "Zip";
	
	if (sLocation != ""){
		
		if (sLocation != "all"){
			var arrLocation = sLocation.split("|");
			var sAddress = arrLocation[0];
			var sCity = arrLocation[1];
			var sState = arrLocation[2];
			var sZIP = arrLocation[3];
			
			if(sAddress.indexOf("[") > 0){
				sAddress = sAddress.substring((sAddress.indexOf("[")+1),sAddress.lastIndexOf("]"));
			}	 		
			
			if (sAddress == ""){
				sAddress = sDefaultAddress;
			}
			
			if (sCity == ""){
				sCity = sDefaultCity;
			}
			
			if (sState == ""){
				sState = sDefaultState;
			}
			
			if (sZIP == ""){
				sZIP = sDefaultZip;
			}
			
			if (bSignedIn)
			{
				var sName = arrLocation[4];
				var sFieldName = "txt" + sPrefix + "Name";
				document.forms[sForm][sFieldName].value = sName;
			}
			
			document.forms[sForm][sFieldAddress].value = sAddress;
			document.forms[sForm][sFieldCity].value = sCity;
			document.forms[sForm][sFieldState].value = sState;
			document.forms[sForm][sFieldZip].value = sZIP;
		}
		else{
			openAddressBook(sType);
		}	
	}
}

function prepareFields(sForm, sType, bSignedIn){
	var objForm = document.forms[sForm];
	
	if(sType == "Directions" || sType == "Map" || sType == "Mileage"){
	
		var sPrefix = "Start";
		if (sType == "Map"){
			sPrefix = sType;
		}
		
		var sFieldAddress = "txt"+sPrefix+"Address";
		var sFieldCity = "txt"+sPrefix+"City";
		var sFieldState = "txt"+sPrefix+"State";
		
		if (sType == "Map"){
			sFieldState = "txt"+sPrefix+"St";
		}
		
		var sFieldZip = "txt"+sPrefix+"Zip";
		
		var startStreet = objForm[sFieldAddress].value;
		var startCity = objForm[sFieldCity].value;
		var startState = objForm[sFieldState].value;
		var startZip = objForm[sFieldZip].value;
		
		if (startStreet == sDefaultAddress){
			objForm[sFieldAddress].value = "";
		}
		
		if (startCity == sDefaultCity){
			objForm[sFieldCity].value = "";
		}
		
		if (startState == sDefaultState){
			objForm[sFieldState].value = "";
		}
		
		if (startZip == sDefaultZip){
			objForm[sFieldZip].value = "";
		}	
		

		if(bSignedIn){
			var sFieldName = "txt"+sPrefix+"Name";
			var startName = objForm[sFieldName].value;
			if (startName == sDefaultName){
				objForm[sFieldName].value = "";
			}
		}
		
		if (sType != "Map"){
			var destStreet = objForm.txtDestAddress.value;
			var destCity = objForm.txtDestCity.value;
			var destState = objForm.txtDestState.value;
			var destZip = objForm.txtDestZip.value;	  
			
			if (destStreet == sDefaultAddress){
				objForm.txtDestAddress.value = "";
			}
				
			if (destCity == sDefaultCity){
				objForm.txtDestCity.value = "";
			}
			
			if (destState == sDefaultState){
				objForm.txtDestState.value = "";
			}
			
			if (destZip == sDefaultZip){
				objForm.txtDestZip.value = "";
			}	
			
			if (bSignedIn)
			{
				var destName = objForm.txtDestName.value;
				
				if (destName == sDefaultName){
					objForm.txtDestName.value = "";
				}
			}
		}
	}
	else if(sType == "PAT")
	{
		var sTripName = objForm.txtTripName.value;
		if (sTripName == sDefaultTripName){
			objForm.txtTripName.value = "";
		}
	}
	else if(sType == "FindPlace")
	{
		var sPlaceFindAddress = objForm.txtPoiAddress.value;
		var sPlaceType = objForm.poi.value;

		if (sPlaceFindAddress == sDefaultAddress){
			objForm.txtPoiAddress.value = "";
		}
		
		if (sPlaceType == sDefaultFindPlace){
			objForm.poi.value = "";
		}
		
	}
	else if(sType == "OptIn")
	{
		var sEmail = objForm.EMAIL.value;
		var sEmailZip = objForm.ZIP.value;
		if (sEmail == sDefaultEmail){
			objForm.EMAIL.value = "";
		}
		if (sEmailZip == sDefaultEmailZip){
			objForm.ZIP.value = "";
		}
	}
	else if(sType == "KayakFlight")
	{
		var sKayakFrom = objForm.l1.value;
		var sKayakTo = objForm.l2.value;
		if (sKayakTo == sDefaultKTo){
			objForm.l2.value = "";
		}
		if (sKayakFrom == sDefaultKFrom){
			objForm.l1.value = "";
		}
	}
	else if(sType == "KayakHotel" || sType == "KayakCarRental")
	{
		var sKayakCity = objForm.crc.value;
		if (sKayakCity == sDefaultKCity){
			objForm.crc.value = "";
		}
	}
	else if(sType == "Weather")
	{
		var objWeather = getElement('txtWeather')
		var sWeather = objWeather.value;
		if (sWeather == sDefaultWeather){
			objWeather.value = "";
		}
	}	
}

function advancedOptionSubmit(bSignedIn){
	prepareFields('frmGetDirections','Directions', bSignedIn);

	document.getElementById("frmGetDirections").action = MakeClientScriptURLString('/directions/dirGetDirectionsInput2Pt.jsp?notcache=1');
	
	document.getElementById("directUserToAdvancedOption").value = 1;		
	document.getElementById("frmGetDirections").submit();		
}	

function addAStopSubmit(bSignedIn){
	prepareFields('frmGetDirections','Directions', bSignedIn);  

	document.getElementById("frmGetDirections").action = MakeClientScriptURLString('/directions/dirGetDirectionsInput.jsp?notcache=1');

	document.getElementById("directUserToAdvancedOption").value = 1;		
	document.getElementById("frmGetDirections").submit();		
	
}

function getWeather(bUpdate)
{
  var xmlHttpRequest;
  var bSubmit = true;

  //Browser check
  try
  {
     // Firefox, Safari, Opera
     xmlHttpRequest = new XMLHttpRequest();
  }
  catch (e)
  {
     //IE
     try
     {
       xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e)
     {
        //IE 7.0
        try
        {
           xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
           alert("This feature is not supported by your browser.");
           return false;
        }
      }
    }
    xmlHttpRequest.onreadystatechange=function()
    {
       if(xmlHttpRequest.readyState == 4)
       {
        var objWeatherSection = getElement("weatherForecast");
        objWeatherSection.style.display = "block";
	    	objWeatherSection.innerHTML = xmlHttpRequest.responseText;
       }
    }
   	
   	var sWeatherQuery = "";
   	
   	if (bUpdate == "true")
   	{
   		var objWeatherQuery = getElement('txtWeather');
   		sWeatherQuery = escape(objWeatherQuery.value);
   		
   		if (sWeatherQuery == ""){
				alert("Please enter a ZIP Code or City, State.");
				objWeatherQuery.focus();	
				bSubmit = false;	
			}
		}  
		
		if (bSubmit){
			var sWeatherURL = MakeClientScriptURLString('/weather/include/incHomeWeather.jsp?sWeatherLoc='+sWeatherQuery); 
			// need to makeScriptUrl() - TO DO
			xmlHttpRequest.open("GET",sWeatherURL,true);
			xmlHttpRequest.send(null);
		}
		
}

function changeWeatherLoc()
{
	document.cookie='sWeatherLoc=;path=/;domain=.randmcnally.com;expires=Thu,01-Jan-70 00:00:01 GMT';
	document.cookie='sWeatherLoc=;path=/;expires=Thu,01-Jan-70 00:00:01 GMT';
	getWeather('false');
}

function setWeatherLoc(sWeatherQuery){
	var objWeatherQuery = getElement('txtWeather');
	objWeatherQuery.value = sWeatherQuery;
	getWeather('true');
}

function getTraffic(){
	var objTraffic = document.frmTraffic.cboMetros;
	var nIndex = objTraffic.selectedIndex;
	var nMetro = objTraffic.options[nIndex];
	if (nMetro.value != null && nMetro.value != "")
  {
  	sURL = nMetro.value + "?AWOPARTNER=RANDMCNALLY";
    location.href = sURL;
  }
  else{
  	alert('Please select a metro area.');
  	}
}

function returnElement(sContent)
{
	var objLocation;
	var sElement;
	
	if(document.getElementById)
	{
		sElement = "document.getElementById('" + sContent + "')";
	}
	else if(document.all)
	{
		sElement = "document.all['" + sContent + "']";
	}
	
	objLocation = eval(sElement);
	return objLocation;
}


function showObject(objObject){
	objObject.style.display = 'block';
}

function hideObject(objObject){
	objObject.style.display = 'none';
}

function showPanel(x,y,sPanel,sText){
	
	if (sPanel != ""){
		var objPanel = returnElement(sPanel);
		if(objPanel){
			showObject(objPanel);
			YAHOO.util.Dom.setStyle(sPanel, 'left', parseInt(x)+'px'); 
			YAHOO.util.Dom.setStyle(sPanel, 'top', parseInt(y)+'px'); 
			
			if (sText != null){
				var sTextArea = sPanel+"_text";
				
				var objText = returnElement(sTextArea);
				if(objText){
					objText.innerHTML = sText; 
				}
			}
		}
	}
}

function hidePanel(sPanel){
	if (sPanel != ""){
		var objPanel = returnElement(sPanel);
		if(objPanel){
			hideObject(objPanel);
		}
	}
}

function useThisAddress(sInputID, sAddress){
	
	var objInput = returnElement(sInputID);
	if (objInput){
		objInput.value = sAddress;
		
		var objPanel = returnElement('addresses');
		hidePanel('addresses');
	}
}

function showAddressList(sInputID){
	
	if (sInputID != ""){
		
		var objPanel = returnElement('addresses');
		var nXOffset = 148;
		if(sInputID == "BetaFindMap"){
			nXOffset = 14;
		}
		
		var nX = YAHOO.util.Dom.getX(sInputID)+nXOffset;
		var nY = YAHOO.util.Dom.getY(sInputID)+19;
	
		if (objPanel){
		
			bShowPanel = false;
			if(objPanel.style.display == "block"){
				
				if(YAHOO.util.Dom.getY('addresses') != nY){
					
					bShowPanel = true;
				}
				else
				{
					hidePanel('addresses');
				}
			}
			else{
				bShowPanel = true;
			}
			
			if(bShowPanel){
				
				//Load addresses from cookie
				var addressesArray = null;
				var addressesConcat = YAHOO.util.Cookie.get("addresses");
				//RMUtils.log(addressesConcat);
				if (addressesConcat == null)
					addressesArray = new Array();
				else
					addressesArray = addressesConcat.split("=");
			
				//Load saved addresses from cookie
				var savedAddressesArray = null;
				var savedAddressesConcat = YAHOO.util.Cookie.get("SavedAddresses");
				//RMUtils.log(savedAddressesConcat);
				
				if (savedAddressesConcat == null)
					savedAddressesArray = new Array();
				else
					savedAddressesArray = savedAddressesConcat.split("=");
					
				
				//Clear the panel
				var i = 0;
				var sAddresses = "";
				//display recent addresses
				while (i < addressesArray.length && i < 5) {
					
					//Create the link for each address, something like <br/><a href="javascript:noop()">Chicago, IL</a>
					sAddresses += "<p><a href=\"javascript:useThisAddress('"+sInputID+"', '"+addressesArray[i]+"')\">" + (i+1) + ". " + addressesArray[i] + "</a></p>";				
					i++;
				}
				
				if (sHTMLSavedAddresses != "") {
					var sTemp = sHTMLSavedAddresses.replace(/INPUT_ID/g, sInputID); //Distinguish top and bottom input address boxes
					sAddresses += "<h5>SAVED ADDRESSES</h5>" + sTemp;
				}
				
/*//Don't show the SAVED ADDRESS list from cookie.  Instead, load it from the Explorer account
if (savedAddressesArray != null && savedAddressesArray.length > 0){
					
					sAddresses += "<p><h5>SAVED ADDRESSES</h5></p>";
					
					//display saved addresses			
					i = 0;
					while (i < savedAddressesArray.length && i < 10) {
						try {
							//remove empty addresses
							
							var savedAddress = eval("(" + savedAddressesArray[i] + ")"); //each array element is a JSON object that looks like {"name":"my house", "address":"chicago, il"}
							
							sAddresses += "<p><a href=\"javascript:useThisAddress('"+sInputID+"', '"+savedAddress.addr+"')\">" + (i+1) + ". " + savedAddress.name + "</a></p>";			
							
							i++;
						}
						catch (e) {
							//protect against malformed addresses
							
							//RMUtils.log("Error while retrieving saved address: " + savedAddressesArray[i] + " - " + e);
							savedAddressesArray.splice(i, 1);
						}
					}
				}
*/				
				showPanel(nX, nY, 'addresses', sAddresses);
			}
		}	
	}	
}

function addAStop(sWaypoint,sType,sForm){
	
		var objForm = document.forms[sForm];
		objForm.hidAddStop.value = sWaypoint;
		prepareFields(sForm, sType, false);
		objForm.submit();
	
}

function enterFormSubmit(sForm,e,sType){
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13){
		
		prepareFields(sForm,sType, false);
		var objForm = document.forms[sForm];
		objForm.submit();
		return false;
	}
	else
		return true;
}