
 //**************swap image*******************

function MM_swapImage() { //v3.0

  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)

   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}

}



 //**************image restore*******************

function MM_swapImgRestore() { //v3.0

  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;

}



 //**************preload images*******************

function MM_preloadImages() { //v3.0

  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();

    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)

    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}

}









 //**************layer swap*******************

function MM_findObj(n, d) { //v4.01

  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {

    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

  if(!x && d.getElementById) x=d.getElementById(n); return x;

}



function MM_showHideLayers() { //v6.0

  var i,p,v,obj,args=MM_showHideLayers.arguments;

  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];

    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }

    obj.visibility=v; }

}

 //**************end layer swap*******************




// function that displays status bar message



function dm(msgStr) {

  document.returnValue = false;

  if (document.images) { 

     window.status = msgStr;

     document.returnValue = true;

  }

}

var showMsg = navigator.userAgent != "Mozilla/4.0 (compatible; MSIE 4.0; Mac_PowerPC)";

function dmim(msgStr) {

  document.returnValue = false;

  if (showMsg) { 

    window.status = msgStr;

    document.returnValue = true;

  }

}

// stuff for tour finder

var ns6 = document.getElementById && ! document.all ? 1 : 2;

function expandit(tour_ID, name) {
	displaydiv = ns6 ? document.getElementById(name + "_" + tour_ID).style : document.all[name + "_" + tour_ID].style;
	showdiv = ns6 ? document.getElementById(name + "_show_" + tour_ID).style : document.all[name + "_show_" + tour_ID].style;
	hidediv = ns6 ? document.getElementById(name + "_hide_" + tour_ID).style : document.all[name + "_hide_" + tour_ID].style;
	displaydiv.display = "block";
	showdiv.display = "none";
	hidediv.display = "block";
}	
function closeit(tour_ID, name) {
	displaydiv = ns6 ? document.getElementById(name + "_" + tour_ID).style : document.all[name + "_" + tour_ID].style;
	showdiv = ns6 ? document.getElementById(name + "_show_" + tour_ID).style : document.all[name + "_show_" + tour_ID].style;
	hidediv = ns6 ? document.getElementById(name + "_hide_" + tour_ID).style : document.all[name + "_hide_" + tour_ID].style;
	displaydiv.display = "none";
	showdiv.display = "block";
	hidediv.display = "none";
}

function checkSurvey(fm, missingurl) {	
	if (fm.improvements.value.length > 1000) {
		fm.missing.value = "Your Improvements message was " + fm.improvements.value.length + " characters.<br />Please shorten your message to no more than 1000 characters.";
	}
	if (fm.missing.value != "")
		fm.action = missingurl;
	fm.submit();
}

function disableOptions () {
	var fm = document.forms['princess_survey'];
	for (var i = 0; i < fm.arriving.length; i++) {
			if (fm.arriving[i].checked)
				break;
	}	
	if (fm.arriving[i].value == "Cruising") {
		for (var x = 0; x < fm.cruiseline.length; x++)
			fm.cruiseline[x].disabled = false;
	}
	else {
		for (var x = 0; x < fm.cruiseline.length; x++) {
			fm.cruiseline[x].checked = false;
			fm.cruiseline[x].disabled = "yes";						
		}
	}
}
function checkGuests(fld, adults) {
	fm = fld.form;
	if (parseInt(fld.value) + (adults ? parseInt(fm.num_children.value) : parseInt(fm.num_adults.value)) > 4) {
		alert("Number of guests cannot exceed 4 total");
		fld.value = (adults ? fm.old_num_adults.value : fm.old_num_children.value);
	} else {
		if (adults)
			fm.old_num_adults.value = fld.value;
		else fm.old_num_children.value = fld.value;
	}
}

// reservations form functions
window.defaultStatus = "";
function clearMissing(fm) {
	fm.missing.value = "";
}
function trimFormField(fm, fieldname) {
	formfield = eval("fm." + fieldname);
	formfield.value = formfield.value.replace(/^ */g, '').replace(/ *$/g, '');
}
function requiredFormField(fm, fieldname, fielddesc) {
	formfield = eval("fm." + fieldname);
	if (formfield.value == "")
		addMissing(fm, fielddesc + " is a required field");
}
function requiredRadioField(fm, fieldname, fielddesc) {
	formfield = eval("fm." + fieldname);
	chk = false;
	for (i = 0; i < formfield.length; i++) {
		if (formfield[i].checked)
			chk = true;
	}
	if (! chk)
		addMissing(fm, fielddesc + " is a required field");
}
function emailField(fm, fieldname, fielddesc, reqd) {
	formfield = eval("fm." + fieldname);	
	if (formfield.value == "" && reqd)
		addMissing(fm, fielddesc + " is a required field");
	else if (formfield.value != "") {
		temp = formfield.value + " ";
		found = temp.search(/[\w\.-]+@([\w-]+\.){1,3}[a-zA-Z]{2,}\s{1}/);
		if (found != 0)
			addMissing(fm, fielddesc + " must be in the form abc@def.com");
	}
}
function dateField(fm, fieldname, fielddesc, reqd) {
	formfield = eval("fm." + fieldname);	
	if (formfield.value == "" && reqd)
		addMissing(fm, fielddesc + " is a required field");
	else if (formfield.value != "") {
		d = new Date(formfield.value);
		if (d.getFullYear() >= 1900 && d.getFullYear() <= 1969)
			d.setYear(d.getFullYear() + 100);
		if (isNaN(d) || d.getFullYear() < 1970)
			addMissing(fm, fielddesc + " must be in a valid date format.");
		else {
			month = d.getMonth() + 1;
			month_str = month < 10 ? "0" + month : month;
			date = d.getDate();
			date_str = date < 10 ? "0" + date : date;	
			formfield.value = month_str + "/" + date_str + "/" + d.getFullYear();
		}
	}
}
function regexpField(fm, regexp, fieldname, fielddesc, msg, reqd) {
	formfield = eval("fm." + fieldname);
	if (formfield.value != "") {
		temp = formfield.value + " ";
		found = temp.search(regexp);
		if (found != 0)
			addMissing(fm, fielddesc + msg);
	} else if (reqd) {
		addMissing(fm, fielddesc + " is a required field");
	}
}
function addMissing(fm, errmsg) {
	fm.missing.value += "," + errmsg;
}
function submitForm(fm) {
	if (fm.missing.value != "") {
		fm.missing.value = fm.missing.value.substring(1);
		fm.action = document.location;
	}
	fm.submit();
}
function checkSearchForm(fm) {
	clearMissing(fm);
	now = new Date();
	now_date = new Date(now.getFullYear(), now.getMonth(), now.getDate());
	earliest_date = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, (86400000 * 3));
	departure_date = new Date(fm.departure_date_year.value, fm.departure_date_month.value - 1, fm.departure_date_day.value);
	if (fm.departure_date_day.value != departure_date.getDate()) {
		addMissing(fm, "Reservation date " + fm.departure_date_month.value + "/" + fm.departure_date_day.value + "/" + fm.departure_date_year.value + " is not a valid date");
	}
	if (departure_date < now_date) {
		addMissing(fm, "Reservation date must be a future date");
	} else if (departure_date < earliest_date) {
		addMissing(fm, "Reservations for rail tours starting before " + (earliest_date.getMonth() + 1) + "/" + earliest_date.getDate() + "/" + earliest_date.getFullYear() + " must be booked via phone. Please call 1-800-426-0500 to book your tour.");
	}
	if (Number(fm.number_adults.value) + Number(fm.number_children.value) > 4) {
		addMissing(fm, "Reservations allow a maximum of four guests. To book for more than four guests please submit multiple reservations.");
	}
	submitForm(fm);
}
function checkNAForm(fm) {	
	clearMissing(fm);
	requiredFormField(fm, "departure_date", "Alternate departure date");
	submitForm(fm);
}
function checkGuestForm(fm) {
	clearMissing(fm);
	for (i = 1; i <= fm.number_adults.value; i++) {
		trimFormField(fm, "guestfirst_" + i);
		requiredFormField(fm, "guestfirst_" + i, "Guest " + i + " First Name");
		trimFormField(fm, "guestlast_" + i);
		requiredFormField(fm, "guestlast_" + i, "Guest " + i + " Last Name");
	}
	for (i = 1; i <= fm.number_children.value; i++) {
		trimFormField(fm, "childfirst_" + i);
		requiredFormField(fm, "childfirst_" + i, "Child " + i + " First Name");
		trimFormField(fm, "childlast_" + i);
		requiredFormField(fm, "childlast_" + i, "Child " + i + " Last Name");
	}
	trimfields = new Array("b_firstname","b_lastname","b_address","b_city","b_zip","b_phone","b_email","cc_number");
	for (i = 0; i < trimfields.length; i++)
		trimFormField(fm, trimfields[i]);
	requiredFormField(fm, "b_firstname", "First Name");
	requiredFormField(fm, "b_lastname", "Last Name");
	requiredFormField(fm, "b_address", "Address");
	requiredFormField(fm, "b_city", "City");
	requiredFormField(fm, "b_state", "State/Province");
	if ((fm.b_country.value == "United States" && "NA,AB,BC,MB,NB,NF,NT,NS,NU,ON,PE,QB,SK,YK".indexOf(fm.b_state.value) >= 0) ||
		(fm.b_country.value == "Canada" && "AB,BC,MB,NB,NF,NT,NS,NU,ON,PE,QB,SK,YK".indexOf(fm.b_state.value) < 0) ||
		("United States,Canada".indexOf(fm.b_country.value) < 0 && fm.b_state.value != "NA"))
		addMissing(fm, "State/Province and Country are mismatched");
	requiredFormField(fm, "b_country", "Country");
	if (fm.b_country.value == "United States")
		regexpField(fm, /\d{5}(-\d{4}){0,1}\s{1}/, "b_zip", "Zip", " must be in the form 12345 or 12345-6789", true);			
	else if (fm.b_country.value == "Canada")
		regexpField(fm, /[a-zA-Z]{1}\d{1}[a-zA-Z]{1}\s{0,1}\d{1}[a-zA-Z]{1}\d{1}\s{1}/, "b_zip", "Zip", " must be in the form A1A 1A1", true);
	else regexpField(fm, /[\-a-zA-Z0-9]{1,10}\s{1}/, "b_zip", "Zip", " must be letters, numbers and dashes", false);					
	if (fm.b_country.value == "United States") {
		tmp = fm.b_phone.value + " ";
		if (tmp.search(/\d{10}\s{1}/) == 0)
			fm.b_phone.value = fm.b_phone.value.substring(0, 3) + "-" + fm.b_phone.value.substring(3, 6) + "-" + fm.b_phone.value.substring(6);
		regexpField(fm, /\d{3}-\d{3}-\d{4}\s{1}/, "b_phone", "Phone", " must be in the form 123-456-7890 for the United States", true);
	} else {
		regexpField(fm, /[\-\d]{1,12}\s{1}/, "b_phone", "Phone", " must be digits and dashes only", true);
	}
	emailField(fm, "b_email", "E-mail");	
	ccnumber = fm.cc_number.value;
	if (ccnumber == "")
		addMissing(fm, "Card Number is a required field");
	else if (! checkCCValid(ccnumber))
		addMissing(fm, "Card Number is an invalid number");
	else {
		cctype = "";
		for (i = 0; i < fm.cc_type.length; i++)
			if (fm.cc_type[i].checked)
				cctype = fm.cc_type[i].value;
		if (checkCCType(ccnumber) != cctype)
			addMissing(fm, "Card Number does not match Card Type");	
	}
	thismonth = (new Date()).getMonth() + 1;
	thisyear = (new Date()).getFullYear();
	if (fm.cc_expyear.value == thisyear && fm.cc_expmonth.value < thismonth)
		addMissing(fm, "Card Expiration must not be an expired month/year");
	submitForm(fm);
}
function checkCCType(number) {
	if (! checkCCValid(number))
		return "Invalid";
	else if (number.length == 16 && number.substr(0, 4) == "6011")
		return "Discover";
	else if (number.length == 16 && (number.substr(0, 2) == "51" || number.substr(0, 2) == "52" || number.substr(0, 2) == "53" || number.substr(0, 2) == "54" || number.substr(0, 2) == "55"))
		return "Mastercard";
	else if ((number.length == 13 || number.length == 16) && number.substr(0, 1) == "4")
		return "Visa";
	else if (number.length == 14 && (number.substr(0, 3) == "300" || number.substr(0, 3) == "301" || number.substr(0, 3) == "302" || number.substr(0, 3) == "303" || number.substr(0, 3) == "304" || number.substr(0, 3) == "305" || number.substr(0, 2) == "36" || number.substr(0, 2) == "38"))
		return "Diners Club";
	else if (number.length == 15 && (number.substr(0, 2) == "34" || number.substr(0, 2) == "37"))
		return "Amex";
	else
		return "Indeterminable";
}
function checkCCValid(number) {
	d = new Array(0,2,4,6,8,1,3,5,7,9);
	num = number;
	sum = 0;
	doub = false;
	while (num != "") {
		digit = parseInt(num.substr(num.length - 1, 1));
		if (! isNaN(digit)) {
			if (doub)
				sum = sum + d[digit];
			else
				sum = sum + digit;
			doub = ! doub;
			num = num.substr(0, num.length - 1);
		} else {
			num = "";
			sum = 1;
		}
	}
	return (sum % 10 == 0);
}
function checkConfirmForm(fm) {
	clearMissing(fm);
	submitForm(fm);
}

/*--email validation--*/
//  TrimAll.cfm - Trim leading and trailing blanks from an input field

   function TrimAll(obj) {

      var startpos = 0, endpos = obj.value.length - 1;

      if (endpos == -1) { //  null string
        return;
      }

      while (startpos <= obj.value.length && obj.value.substring(startpos, startpos + 1) == " ") {
 	      startpos++; // find start position of string 
      }

      while (endpos >= 0 && obj.value.substring(endpos, endpos + 1) == " ") {
	      endpos--; // find end position of string 
      }

      if (startpos > endpos) { //- trim the object 
         obj.value = "";
      } else {
         obj.value = obj.value.substring(startpos, endpos + 1);
      }
   }

//   BadText.js - Check for the presence of any illegal character

   function BadText(obj, objname) {
      TrimAll(obj);
      c = '|';
      if (obj.value.indexOf(c) != -1) {
         alert("'" + objname + "' contains an illegal '" + c + "' character");
         return true;
      }
      return false;
   }

 //  IsAbsent.js - check for the presence of any character besides a blank

   function IsAbsent(obj, objname) {
      var retval = true;
      for (var i = 0; i < obj.value.length; i++) {
         if (obj.value.substring(i, i + 1) != " ") {
            retval = false;
            break;
         }
      }
      if (retval && (objname != "")) {
         alert("'" + objname + "' may not be left empty");
      }
      return retval;
   }
   
//  BadEmail.js - Check for illegally formatted email address

   function BadEmail(obj, objname)
   {
     TrimAll(obj);
     x=obj;
     L =x.value.length;
 	 if (x.value.charAt(L-1)=="."){alert("'" + objname + "' may not have a period as it last character");x.focus();return true}
	 At=x.value.indexOf("@");
	 if (At==-1){alert("'" + objname + "' is missing an @ sign");x.focus();return true}
	 if (At==0){alert("'" + objname + "' may not have @-sign as first character");x.focus();return true}
	 if (At==(L-1)){alert("'" + objname + "' may not have @-sign as last character");x.focus();return true}
	 A=x.value.indexOf("@",At+1);	 
	 if (A !=-1){alert("'" + objname + "' may not have more than one @-sign");x.focus();return true}
	 P =x.value.indexOf(".");
	 if (P==-1){alert("'" + objname + "' must have at least one period");x.focus();return true}
	 if (P==0){alert("'" + objname + "' may not have period as first character");x.focus();return true}
	 P =x.value.indexOf(".",At+1);
 	 if (P==-1){alert("'" + objname + "' must have at least one period after @-sign");x.focus();return true}
	 if (At+1==P){alert("'" + objname + "' must have characters between @sign and period");x.focus();return true}
	 y=x.value.substring(L-3,L); // last three characters
	 z=x.value.substring(L-2,L); // last two characters
	 z=z.toLowerCase();
	 if (y.charAt(0)=="." && z=="us") {y=x.value.substring(L-6,L-3)}
 	 if (y.charAt(0)!=".")
	     {
    	 y=y.toLowerCase();
	     // if (y!="com" && y!="edu" && y!="net" && y!="org" && y!="gov" && y!="mil" && y!="int"){alert("'" + objname + "' must be .com, .edu, .net, .org, .gov, .mil, or .int ");x.focus();return true};
		 }
	// if (P==(L-3)){alert("'" + objname + "' may not have only one period and end in just two letters");x.focus();return true}
	 if (x.value.indexOf(",")!=-1){alert("'" + objname + "' may not contain a comma");x.focus();return true}
	 if (x.value.indexOf(" ")!=-1){alert("'" + objname + "' may not contain a space");x.focus();return true}
	 if (x.value.indexOf("*")!=-1){alert("'" + objname + "' may not contain a asterisk");x.focus();return true}
	 if (x.value.indexOf(")")!=-1){alert("'" + objname + "' may not contain a close parenthesis");x.focus();return true}
	 if (x.value.indexOf("(")!=-1){alert("'" + objname + "' may not contain a open parenthesis");x.focus();return true}
	 if (x.value.indexOf(">")!=-1){alert("'" + objname + "' may not contain a greater than sign");x.focus();return true}
	 if (x.value.indexOf("<")!=-1){alert("'" + objname + "' may not contain a less than sign");x.focus();return true}
	 if (x.value.indexOf(":")!=-1){alert("'" + objname + "' may not contain a colon");x.focus();return true}
	 if (x.value.indexOf(";")!=-1){alert("'" + objname + "' may not contain a semi-colon");x.focus();return true}
	 if (x.value.indexOf('"')!=-1){alert("'" + objname + "' may not contain a quotation mark");x.focus();return true}
	 return false;
	}

function validateNewsletterSignup(aForm) {
	// email address must exist and be valid syntatically
	if (BadText(aForm.email,"Your E-mail Address")) { aForm.email.focus();return false;}
	if (IsAbsent(aForm.email,"Your E-mail Address")) { aForm.email.focus();return false;}
	if (BadEmail(aForm.email,"Your E-mail Address"))  { aForm.email.focus();return false;}

}



/*----------- Spotlight layer script & show and hide script-------------*/
/*function showHide(state,elemID) {
	if ((document.all) && document.all[elemID]) {
		// alert('in ie4 or above');
		if (state == 'show' && document.all(elemID)) document.all[elemID].style.display = 'block';
		else if (state == 'hide' && document.all(elemID)) document.all[elemID].style.display = 'none';
		} // end if document.all is recognized
	else {
		if (document.getElementById(elemID)) {
			// Netscape 6 & IE5, access the text's ID, then use the property innerHTML
			// alert('getElementById');
			if (state == 'show' && document.getElementById(elemID)) document.getElementById(elemID).style.display = 'block';
			else if (state == 'hide' && document.getElementById(elemID)) document.getElementById(elemID).style.display = 'none';
		} // end if getElementById is recognized	
	}
	return;
	
}*/

/*function toggle(id)
	{
	if (document.getElementById)
	{
	var el = document.getElementById(id);
	el.style.left= (el.style.left == '-2000px') ? '0px' : '-2000px';
	}
	}
	
function hideSelected () {
	MM_showHideLayers('spotlight-wrapper','','hide');
	MM_showHideLayers('hide-selected','','show');
	MM_showHideLayers('hide-cover','','show');
	MM_showHideLayers('bannerLayer','','show');
}

function hideSelectedforflash () {
	toggle('spotlight-wrapper');
}*/


/*----------- Spotlight layer script -------------*/