//******************************************************************************** GLOBAL VARIABLES
var br=brPlatform="";
if(navigator.appVersion.indexOf("Win")!=-1) var brPlatform="windows";
else var brPlatform="Other";
if(document.getElementById) {
	docLay="document.getElementById";
	if(navigator.appName=="Microsoft Internet Explorer") br="IE";
	else br="NS6";
	var txtBrack1="(";
	var txtBrack2=")";
	var txtStyle=".style";
	var txtShow="visible";
	var txtHide="hidden"; }
else if(document.all) {
	br="IE";
	docLay="document.all";
	var txtBrack1="[";
	var txtBrack2="]";
	var txtStyle=".style";
	var txtShow="visible";
	var txtHide="hidden"; }
else if(document.layers) {
	br="NS";
	docLay="document.layers";
	var txtBrack1="[";
	var txtBrack2="]";
	var txtStyle="";
	var txtShow="show";
	var txtHide="hide"; }

//********************************************************************************** ARRAY FUNCTION
function inArray(needle, haystack) {
	var returnKey=-1;
	for(var i in haystack) {
		if(haystack[i]==needle) returnKey=i; }
	return returnKey;
}

//********************************************************************************** FORM FUNCTIONS
function frmObjSetFocus(docFrmElem, blnMoveCursorToEnd) {
	if(docFrmElem) {
		docFrmElem.focus();
		if(docFrmElem.type=="text" || docFrmElem.type=="textarea" || docFrmElem.type=="password") {
			if(blnMoveCursorToEnd) docFrmElem.value=docFrmElem.value;
			else docFrmElem.select(); } }
}
function formUpdateCounter(txtValue, intMax) {
	var intCount=0;
	if(!isNaN(intCount=parseInt(txtValue.length)) && !isNaN(parseInt(intMax))) winStatus("Character count: "+intCount+", Characters left: "+(intMax-intCount));
}
function searchForSelectText(obj, txt, blnSearchForValue) {
	var intKey=-1;
  // MAKE SURE WE ACTUALLY HAVE A SELECT
	if(obj && obj.type && (obj.type=="select-one" || obj.type=="select-multiple")) {
		for(var i=0;i<obj.length;i++) {
			if(blnSearchForValue && obj[i].value==txt) {
				intKey=i;
				break;
			} else if(!blnSearchForValue && obj[i].text==txt) {
				intKey=i;
				break;
			}
		}
	}
	return intKey;
}
function selectAnOption(obj, txtVal) {
  // MAKE SURE WE ACTUALLY HAVE A SELECT
	if(obj && obj.type && (obj.type=="select-one" || obj.type=="select-multiple")) {
		var intKey=searchForSelectText(obj, txtVal, true);
		if(intKey>-1) {
			obj[intKey].selected=true;
		}
	}	
}

//********************************************************************************* IMAGE FUNCTIONS
var myImages=new Array;
var preImages=new Array;
function imgPreload() {
	if(br!="") {
		for(var i=0;i<myImages.length;i++) {
			preImages[i]=new Image();
			preImages[i].src=myImages[i]; } }
}
function imgSwap(imgName, imgSrc, imgWidth, imgHeight) {
	if(br!="") {
		if(document[imgName]) {
			document[imgName].src=imgSrc;
			if(imgWidth && imgHeight) {
				if(document[imgName].width!=imgWidth) document[imgName].width=imgWidth;
				if(document[imgName].height!=imgHeight) document[imgName].height=imgHeight; }
			return false; } }
}

//********************************************************************************* LAYER FUNCTIONS
function layerMakeHidden(objLayer) {
	if(docLay) eval(docLay+txtBrack1+"'"+objLayer+"'"+txtBrack2+txtStyle+".visibility='"+txtHide+"';");
}
function layerMakeVisible(objLayer) {
	if(docLay) eval(docLay+txtBrack1+"'"+objLayer+"'"+txtBrack2+txtStyle+".visibility='"+txtShow+"';");
}

//**************************************************************************** VALIDATION FUNCTIONS
function getLeapYear(storeYear) {
	if(!(storeYear%4)) {
		if(storeYear%100) return true;
		else if(!(storeYear%400)) return true; }
	return false;
}
function getNumberOfDays(storeYear,storeMonth) {
	var storeMonthArray=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if(getLeapYear(storeYear)) storeMonthArray[1]=29;
	if((storeYear>1990) && (storeMonth>=0) && (storeMonth<=11)) return parseInt(storeMonthArray[storeMonth]);
	return 0;
}
function validateDate(docFrmYear, docFrmMonth, docFrmDay, txtErrorMsg) {
	var blnError=false;
	if(docFrmYear && docFrmMonth && docFrmDay) {
		var intYear=docFrmYear.options[docFrmYear.selectedIndex].value;
		var intMonth=docFrmMonth.options[docFrmMonth.selectedIndex].value-1;
		var intDay=docFrmDay.options[docFrmDay.selectedIndex].value;
		if(isNaN(parseInt(intYear)) || isNaN(parseInt(intMonth)) || isNaN(parseInt(intDay))) blnError=true;
		else if((parseInt(intYear)<1990) || (parseInt(intMonth)<0) || (parseInt(intMonth)>11) || (parseInt(intDay)<1) || (parseInt(intDay)>31)) blnError=true;
		else if(getNumberOfDays(intYear, intMonth)<intDay) blnError=true;
		if(blnError) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmDay.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmDay);
			return false; }
		else return true; }
	else return false;
}
function validateStartEnd(docFrmYearS, docFrmMonthS, docFrmDayS, docFrmYearE, docFrmMonthE, docFrmDayE, txtErrorMsgS, txtErrorMsgE) {
  // DOES NOT VALIDATE DATES
	if(docFrmYearS && docFrmMonthS && docFrmDayS && docFrmYearE && docFrmMonthE && docFrmDayE) {
		var dte=new Date();
		var dteS=new Date(docFrmYearS.options[docFrmYearS.selectedIndex].value, (docFrmMonthS.options[docFrmMonthS.selectedIndex].value-1), docFrmDayS.options[docFrmDayS.selectedIndex].value, 0, 0, 0, 0);
		var dteE=new Date(docFrmYearE.options[docFrmYearE.selectedIndex].value, (docFrmMonthE.options[docFrmMonthE.selectedIndex].value-1), docFrmDayE.options[docFrmDayE.selectedIndex].value, 0, 0, 0, 0);
		if(dteS<=dte) {
			if(!txtErrorMsgS) txtErrorMsgS="Error with start date";
			alert(txtErrorMsgS);
			frmObjSetFocus(docFrmDayS);
			return false; }
		else if(dteE<dteS) {
			if(!txtErrorMsgE) txtErrorMsgS="Error with end date";
			alert(txtErrorMsgE);
			frmObjSetFocus(docFrmDayE);
			return false; }
		else return true; }
}
function validateEmail(docFrmElem, txtErrorMsg, blnOptional) {
	if(docFrmElem) {
		if(!docFrmElem.value && blnOptional) return true;
		var regExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z])+$/;
		if(!regExp.test(docFrmElem.value)) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmElem.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmElem);
			return false; }
		return true; }
	else return false;
}
function validateImageRef(docFrmElem, txtErrorMsg, blnOptional) {
	var blnError=false;
	if(docFrmElem) {
		if(docFrmElem.value=="" && blnOptional) return true;
		else {
			var splitElement=docFrmElem.value.split(".");
			var fileExtension=splitElement[(splitElement.length-1)];
			if(splitElement.length!=2) blnError=true;
			else if((fileExtension!="gif") && (fileExtension!="jpg") && (fileExtension!="jpeg")) blnError=true; }
		if(blnError) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmDay.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmElem);
			return false; }
		else return true; }
	return false;
}
function validateSelect(docFrmElem, txtErrorMsg, blnCheckVal) {
	if(docFrmElem) {
		var blnError=(blnCheckVal)?(docFrmElem.options[docFrmElem.selectedIndex].value==""):((docFrmElem.type=="select-multiple" && docFrmElem.selectedIndex==-1) || (docFrmElem.type=="select-one" && docFrmElem.selectedIndex==0));
		if(blnError) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmElem.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmElem);
			return false; }
		return true; }
	else return false;
}
function validateString(docFrmElem, txtErrorMsg, intMin, intMax, blnOptional) {
	if(docFrmElem) {
		if(!docFrmElem.value && blnOptional) return true;
		if(!intMin) intMin=1;
		if(!intMax) intMax=16777216;
		if(!docFrmElem.value || docFrmElem.value.length<intMin || docFrmElem.value.length>intMax) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmElem.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmElem);
			return false; }
		return true; }
	else return false;
}
function validateURL(docFrmElem, txtErrorMsg, blnOptional) {
	var blnError=false;
	if(docFrmElem) {
		if(docFrmElem.value=="" && blnOptional) return true;
		else {
			var splitElement=docFrmElem.value.split("://");
			if(splitElement.length!=2) blnError=true;
			else if((splitElement[0]!="http" && splitElement[0]!="https") || (splitElement[1].length<6)) blnError=true;
			else {
				var splitElement2=splitElement[1].split(".");
				if(splitElement2.length<2) blnError=true;
				else if((splitElement2[0].length<2) || (splitElement2[1].length<2)) blnError=true; }
			if(blnError) {
				if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmDay.name+"'";
				alert(txtErrorMsg);
				frmObjSetFocus(docFrmElem);
				return false; }
			else return true; } }
	return false;
}
function validateCheckbox(docFrmElem, txtErrorMsg) {
	if(docFrmElem) {
		if(!docFrmElem.checked) {
			if(!txtErrorMsg) txtErrorMsg="Error at form entry: '"+docFrmElem.name+"'";
			alert(txtErrorMsg);
			frmObjSetFocus(docFrmElem);
			return false; }
		return true; }
	else return false;
}

//******************************************************************************** WINDOW FUNCTIONS
function winStatus(txt) {
// NETSCAPE 6 WILL OVER-RIDE THE STATUS BAR TEXT WITH THE URL IF THERE IS NOT A SLIGHT DELAY!
// - HOPEFULLY THIS WILL BE SORTED OUT IN THE FUTURE!?
	var displayMe,timerID;
	if(txt) displayMe=txt;
	else displayMe="";
	if(timerID) clearTimeout(timerID);
	if(br=="NS6") timerID=setTimeout("window.status='"+displayMe+"'",1);
	else window.status=displayMe;
	return true;
}
var popupName;
function winNew(winName, url, theWidth, theHeight, scroll, showToolbar, allowResize, showStatus, showMenubar, showLocation) {
	var txtNewHost="";
  // CHECK TO SEE IF THIS IS AN EXTERNAL URL
	if(url.indexOf("http")!=-1) {
	  // THIS IS USED SO WE CAN ALWAYS GIVE "FOCUS" TO POPUP (EVEN EXTERNAL)
		var arrItems=url.split(/\//, 2);
		if(arrItems.length>=2) {
			txtNewHost=arrItems[1];
		  // MAKE SURE WE'VE GOT RID OF ANY EMBEDDED USERNAME/PASSWORDS
			var arrURL=txtNewHost.split(/@/, 2);
			if(arrURL.length==2) txtNewHost=arrURL[1];
			else if(arrURL.length==1) txtNewHost=arrURL[0]; } }
	if(txtNewHost=="") txtNewHost=self.location.hostname;
	if((br!="IE") && (url.indexOf(".pdf")!=-1)) {
		top.location.href=url;
		return false; }
	if(url) {
		if(url.indexOf(".pdf")!=-1) {
			theWidth=770;
			theHeight=550; }
		else if(self.location.hostname!=txtNewHost) {
			theWidth=798;
			theHeight=520;
			scroll=showToolbar=allowResize=showStatus=showMenubar=showLocation="yes";
			allowResize="1"; }
		if(!isNaN(parseInt(theWidth)) && !isNaN(parseInt(theHeight))) {
			intLeft=(screen.width)?(screen.width-theWidth)/2:0;
			if(self.location.hostname!=txtNewHost) intTop=10;
			else intTop=(screen.height)?(screen.height-theHeight)/2:0;
			params="width="+theWidth+",height="+theHeight+",left="+intLeft+",top="+intTop+",scrollbars=";
			params+= (scroll) ? scroll:"no";
			params+=",toolbar=";
			params+= (showToolbar) ? showToolbar:"no";
			params+=",resizable=";
			params+= (allowResize) ? allowResize:"no";
			params+=",status=";
			params+= (showStatus) ? showStatus:"no";
			params+=",menubar=";
			params+= (showMenubar) ? showMenubar:"no";
			params+=",location=";
			params+= (showLocation) ? showLocation:"no";
			popupName=window.open(url, winName, params);
			return false; } }
	if(!popupName) return true;
}
function winFitPicture(intImgW, intImgH) {
	if(brPlatform=="Windows") {
		var iWidth=winReturnWidth();
		var iHeight=winReturnHeight();
		if(!intImgW || !intImgH) {
		  // CALCULATE WIDTH & HEIGHT
			if(document.images[0].width<=screen.width && document.images[0].height<=screen.height) {
				iWidth=document.images[0].width-iWidth;
				iHeight=document.images[0].height-iHeight; }
			else iWidth=iHeight=0; }
		else {
			if(intImgW<=screen.width && intImgH<=screen.height) {
				iWidth=intImgW-iWidth;
				iHeight=intImgH-iHeight; }
			else iWidth=iHeight=0; }
		window.resizeBy(iWidth, iHeight); }
}
function winPrint() {
	if(window.print) {
		window.print();
		return false; }
	else {
		alert("Your browser does not support this feature. You should\n"+
		  "be able to print using either the menu which appears\n"+
		  "when you right click this page or by using the\n"+
		  "menu/icons at the top of the main window."); }
}
function winReturnWidth() {
	if(br=="IE") return document.body.offsetWidth;
	else if(br=="NS6" || br=="NS") return window.innerWidth;
	else return 0;
}
function winReturnHeight() {
	if(br=="IE") return document.body.offsetHeight;
	else if(br=="NS6" || br=="NS") return window.innerHeight;
	else return 0;
}
function closePopup(newURL) {
	if(!newURL || newURL=="") newURL="/";
	if(window.opener) {
		window.opener.focus();
		top.close(); }
	else top.location.href=newURL;
}

//******************************************************************************** CUSTOM FUNCTIONS
function updateNumberOfDays(obj, itemUpdated) {
	var elNights=obj.frmNumberOfNights.value;
	elNights=parseInt(elNights);
	if(isNaN(elNights)) {
		elNights=1;
	}
	var elStartDay=obj.frmStartD.options[obj.frmStartD.selectedIndex].value;
	var elStartMonth=obj.frmStartM.options[obj.frmStartM.selectedIndex].value-1;
	var elStartYear=obj.frmStartY.options[obj.frmStartY.selectedIndex].value;
	var elEndDay=obj.frmEndD.options[obj.frmEndD.selectedIndex].value;
	var elEndMonth=obj.frmEndM.options[obj.frmEndM.selectedIndex].value-1;
	var elEndYear=obj.frmEndY.options[obj.frmEndY.selectedIndex].value;
	var startDate=new Date(elStartYear, elStartMonth, elStartDay, 0, 0, 0, 0);
	var endDate=new Date(elEndYear, elEndMonth, elEndDay, 0, 0, 0, 0);
	if(itemUpdated=="frmEnd") {
	  // GET THE INTERNAL TIME VALUE OF THE START AND END DATES
		var intInternalMillisecondsS=startDate.getTime();
		var intInternalMillisecondsE=endDate.getTime();
	  // GET THE DIFFERENCE BETWEEN THE TWO DATES AND CALCULATE THE NUMBER OF DAYS
		obj.frmNumberOfNights.value=parseInt((intInternalMillisecondsE-intInternalMillisecondsS)/86400000);
	} else {
	  // GET THE INTERNAL TIME VALUE OF THE START DATE
		var intInternalMillisecondsS=startDate.getTime();
	  // CALCULATE THE NEW INTERNAL TIME VALUE FOR THE END DATE
		intInternalMillisecondsS=intInternalMillisecondsS+(elNights*86400000);
		var newEndDate=new Date(intInternalMillisecondsS);
	  // SET THE END DATE
		selectAnOption(obj.frmEndD, newEndDate.getDate());
		selectAnOption(obj.frmEndM, (newEndDate.getMonth()+1));
		selectAnOption(obj.frmEndY, newEndDate.getFullYear());
	}
}
