var nav;
var ie
var ver;
var dom;
var coll="";
var styleObj="";

browserDetect()

/* Browser Detection - browserDetect() will detect both the browser type and the version
   number.
   	nav/ie: browser type
	ver:    version number
*/
function browserDetect(){
	var agt=navigator.userAgent.toLowerCase();
	if ((agt.indexOf('mozilla')!=-1) && ((agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible')==-1))) {
		nav=1;
		ie=0;
		lastWidth = window.innerWidth;
		lastHeight = window.innerHeight;
		window.onresize = handleResize;
		ver=parseFloat(navigator.appVersion)
		if (ver>=4) {
			dom="document.layers";
		}
	} else if (agt.indexOf("msie")!=-1) {
		ie=1;
		nav=0;
		s=navigator.appVersion;
    	s=s.substr(s.indexOf("MSIE")).substr(5);
    	ver=parseFloat(s)
		if (ver>=4) {
			dom="document.all";
			coll="all."
			styleObj=".style";
		}
	}
}

/* Window Resize Handler - standard handler for dealing with netscape's resizing problems */
function handleResize(){
	winWidth = window.innerWidth;
	winHeight = window.innerHeight
	if ((lastWidth != winWidth) && (lastHeight != winHeight)){
		lastWidth = winWidth;
		lastHeight = winHeight;
		location.reload();
	}
}
/* Layer Construction (Write) - layerMakeWrite() creates a LAYER for nextscape and
   a DIV for IE. It should be called from in the BODY of the document, as it will
   WRITE the layer wherever it is. If you need to nest a layer or call the function
   elsewhere use layerMakeReturn, which returns a value.
   Arguments:
	n:   name
	w:   width
	h:   height
	x:   left
	y:   top
	z:   z-index
	cls: class
	vis: visibility (0=hide/1=show)
	cnt: starting content
	exn: extra event handler info for netscape, note that these need to be spaced out attribute, eg: 'onMouseover="someFunction()" onMouseout="someFunction()"'
	exe: extra event handler info for explorer

	eg: layerMakeWrite('mylayer',180,50,480,400,1,myClass,1,'This is what's in the layer','','');
*/
function layerMakeWrite(n,w,h,x,y,z,cls,vis,cnt,exn,exe) {
	if (ver>=4) {
		if (nav) {
			vis==1?vis='show':vis='hide';
			document.write('<layer width='+w+' height='+h+' left='+x+' top='+y+' id="'+n+'" z-index='+z+' visibility='+vis+' class="'+cls+'" '+exn+'>'+cnt+'</layer>');
		} else if (ie) {
			vis==1?vis='visible':vis='hidden';
			document.write('<div id="'+n+'" style="position:absolute; width:'+w+';height:'+h+';left:'+x+';top:'+y+';z-index:'+z+';visibility:'+vis+';" '+exe+' class="'+cls+'" >'+cnt+'</div>');
		}
	}
}

/* Layer Construction (Return).
   Arguments: see layerMakeWrite()
*/
function layerMakeReturn(n,w,h,x,y,z,cls,vis,cnt,exn,exe) {
	if (ver>=4) {
		if (nav) {
			vis==1 ? vis='show' : vis='hide';
			return '<layer width='+w+' height='+h+' left='+x+' top='+y+' id="'+n+'" z-index='+z+' visibility='+vis+' class="'+cls+'" '+exn+'>'+cnt+'</layer>';
		} else if (ie) {
			vis==1 ? vis='visible' : vis='hidden';
			return '<div id="'+n+'" style="position:absolute; width:'+w+';height:'+h+';left:'+x+';top:'+y+';z-index:'+z+';visibility:'+vis+';" '+exe+' class="'+cls+'" >'+cnt+'</div>';
		}
	}
}
/* Rollsover images and swap layers */
layerCenter = "holder";
function handleRollover(objRef,imgRef,layerNew){

	if (nav){
		document[objRef].document.images[objRef].src = imgRef;
		document[layerCenter].visibility = "hide";
		document[layerNew].visibility = "show";
	} else if (ie) {
		document.images[objRef].src = imgRef;
		document.all[layerCenter].style.visibility = "hidden";
		document.all[layerNew].style.visibility = "visible";
	}
	layerCenter = layerNew;
}

/* Mouse rollover for image swapping within layers.
   Arguments:
	layRef: name of parent layer
	imgRef: name of image (<img name="?">) within layRef layer
	srcRef: new src value for <img>
*/
function rollover(layRef,imgRef,srcRef) {
	if (nav){
		if ((layRef==null)||(layRef=='')){
			document[imgRef].src = srcRef;
		} else {
			document.layers[layRef].document.images[imgRef].src = srcRef;
		}
	} else if (ie) {
		document[imgRef].src = srcRef;
	}
}

/* Make a layer invisible.
   Argument(s):
	layRef: string reference to layer name.
*/
function hideLayer(layRef) {
	if (nav)
		document[layRef].visibility = "hide";
	if (ie)
	  	document.all[layRef].style.visibility = "hidden";
}

/* Make a layer visible.
   Argument(s):
	layRef: string reference to layer name.
*/
function showLayer(layRef) {
 	if (nav)
  		document[layRef].visibility = "show";
	if (ie)
  		document.all[layRef].style.visibility = "visible";
}

/* Hide Iframes in IE and layers in Nav.
   Argument(s):
	layRef: string reference to layer name.
*/
function hideIFrame(layRef) {
	if (nav)
		document[layRef].visibility = "hide";
	if (ie)
        top.document.all[layRef].style.visibility = "hidden";
}


/* Form Submit function for form submitting within layers.
   Arguments:
	layRef: name of parent layer
	formRef: name of form being submitted
	toValidate : boolean whether to call the validate function for this form
	*/
function formSubmit(layRef,formRef,toValidate) {
	if (nav){
		if ((layRef==null)||(layRef=='')){
			formObj=document.forms[formRef];
		} else {
			formObj=document.layers[layRef].document.forms[formRef];
		}
	} else if (ie) {
		formObj=document[formRef];
	}

	if(toValidate)
	{
		if(validate(formObj))
		{	formObj.submit();	}
	}
	else
	{
		formObj.submit();
	}
}

/* Form Reference function
	layRef: name of parent layer
	formRef: name of form being submitted

	returns a reference to the form.
	*/
function getFormRef(layRef,formRef)
{
	formObj=null;
	if (nav)
	{
		if ((layRef==null)||(layRef==''))
		{	formObj=document.forms[formRef];}
		else
		{	formObj=document.layers[layRef].document.forms[formRef];}
	}
	else if (ie)
	{
		formObj=document.forms[formRef];
	}
	return formObj;
}



/* Form Reset function for form reseting within layers.
   Arguments:
	layRef: name of parent layer
	formRef: name of form being submitted
	*/
function formReset(layRef,formRef) {
	if (nav){
		if ((layRef==null)||(layRef=='')){
			formObj=document.forms[formRef];
		} else {
			formObj=document.layers[layRef].document.forms[formRef];
		}
	} else if (ie) {
//		formObj=document[formRef];
		formObj=document.forms[formRef];
	}
	formObj.reset();
}


/* Cross browser form element setting function
   	Arguments:
	layRef: name of parent layer
	formRef: name of form being submitted
	formElem: name of Element eg action
	formVal: new Value of form Element

	*/

function setFormElement(layRef,formRef,formElem,formVal) {
	formObj=getFormRef(layRef,formRef);
	formObj.elements[formElem].value=formVal;
}

/* Cross browser form form element getting function
   	Arguments:
	layRef: name of parent layer
	formRef: name of form being accessed
	formElem: name of Element eg action
	*/

function getFormElement(layRef,formRef,formElem) {
	formObj=getFormRef(layRef,formRef);
	return formObj.elements[formElem].value;
}



function navigateTo(url){
	if ((url==null)||(url=="null")){
		location.href="#";
	} else {
		location.href=url;
	}
}

/* Open a seperate window.
   Arguments:
	theURL:
	winName:
	features:
*/
function openBrWindow(theURL,winName,features) {
  window.open(theURL,winName,features);
}

/* Layer Construction (specific use) - layerWriteHTML() creates a LAYER for nextscape
   and a IFRAME for IE. It should be called from in the BODY of the document, as it
   will WRITE the layer wherever it is.
   Arguments:
	n:   name
	w:   width
	h:   height
	x:   left
	y:	 top
	z:   z-index
	cls: class
	vis: visibility (0=hide/1=show)
	ex:  extra event handler info

	eg: layerWriteHTML('mylayer',180,50,480,400,1,myClass,1,'');
*/
function layerWriteHTML(n,w,h,x,y,z,cls,vis,ex){
	if (ver>=4) {
		if (nav) {
			vis==1?vis='show':vis='hide';
			document.write('<layer width='+w+' height='+h+' left='+x+' top='+y+' id="'+n+'" z-index='+z+' visibility='+vis+' class="'+cls+'" '+ex+'></layer>');
		} else if (ie) {
			vis==1?vis='visible':vis='hidden';
			document.write('<iframe id="'+n+'" src="/blank.asp" style="position:absolute; width:'+w+';height:'+h+';left:'+x+';top:'+y+';z-index:'+z+';visibility:'+vis+'; " frameBorder="0" marginHeight="0" marginWidth="0"'+ex+' class="'+cls+'" ></iframe>');
		}
	}
}

/* Load an HTML file into a layer with the layerWriteHTML() function.
   Arguments:
	layRef: layer name
	hRef:   url of HTML file
*/
function writeHTML(layRef,hRef){

	if (ver>=4) {
		if (nav) {
				document[layRef].src = hRef;
			} else if (ie) {
				document.all[layRef].src = hRef;
		}
	}
}

////////////////////////////09/02/00////////////////////////////////////////////////
//The following is by JP
//These functions are for cleaning and formatting numbers input by the user.
//They are used by the savings calculator and the mortgage calculator

//format returns the argument with the whole part grouped into triplets of digits,
//separated by dots (European style). Run output numbers through format before displaying them.
function format(x){
	var whole=Math.floor(x)
	var frac=x-whole
	if(frac==0){
		frac=''

	}
	if(navigator.appName=="Netscape"){var slc=0}
		else{var slc=1}
	frac=String(frac).slice(slc)
	frac=frac.substring(0,3)
	var formatted=''
	var counter=0
	for(var i=String(whole).length-1;i>-1;i--){
		counter++
		formatted=String(whole).charAt(i)+formatted
		if(counter%3==0){formatted='.'+formatted}
	}
	if (formatted.charAt(0)=='.'){formatted=formatted.slice(1)}
	formatted=formatted+frac
	return formatted
}

//Cleanup removes dots, spaces, commas and alphabetic characters from input and
//returns a clean float. Run numerical input through it before doing
//any calculations
function cleanup(x){

		x=removepunct(x)
		while(isNaN(x.charAt(0))){
			x=x.slice(1)
		}
		if(x.length==0){
			return 0
		}
		x=parseFloat(x)
		return x
		}

function removepunct(x){
	var removed=''
	for(var i=0;i<String(x).length;i++){
		if(String(x).charAt(i)==' '||String(x).charAt(i)==','||String(x).charAt(i)=='.'){}
		else{
			removed=removed+String(x).charAt(i)
		}
	}
	return removed
}
////////////////////////////end of JP 09/02/00////////////////////////////////////////////////


/* this function returns the selected
   Arguments: */
function getselected(selectarray) {
//	alert (selectarray.Options[selectarray.selectedIndex].value)
	var ret
	var inputlen=(selectarray.length)
//	alert("inputlen:"+selectarray.name)
	for (i=0;i<inputlen;i++) {
		if (selectarray[i].selected==true){
			ret= selectarray[i].value
		}
	}
	return (ret);
}

function readCookie(name){

	var COOKIE = document.cookie;
	var start = COOKIE.indexOf(name + "=");

	if (start==-1){
		return 0;
	}
	start = COOKIE.indexOf("=", start) + 1;
	var end = COOKIE.indexOf(";", start);

	if (end == -1){
		end = COOKIE.length;
	}

	var value = unescape(COOKIE.substring(start, end));

	if (value==null){
		return 00;
	}
	return value;
}

/* Write dynamic content to a layer.
   Arguments:
    nestRef: name of parent layer (for navigator only. pass empty quotes for ie)
	layRef: name layer being written to.
	str: name of form being submitted
	layClass: class applied to layer (required for navigator only)
*/
function writetoLayer(nestRef,layRef,str,layClass){
	if (nav){
		if (nestRef.length > 0){
			document[nestRef].document[layRef].document.write('<span class="test">'+str+'</span>');
			document[nestRef].document[layRef].document.close();
		} else {
			document[layRef].document.write('<span class="'+layClass+'">'+str+'</span>');
			document[layRef].document.close();
		}
	} else {
		document.all[layRef].innerHTML = str;
	}
}

/* Opens only new window if not nav 4.51 */
function openAcrobatDoc(loc)
{
	if(ie){
		 openBrWindow(loc,'new','');
	}
	else if(nav){
		 if (ver == "4.51"){
			location.href=loc;
		 }
		 else{
		 	openBrWindow(loc,'new','');
		 }
	}
	else{
		location.href=loc;
	}
}

function keyDown(e){
	if (nav) {var nKey=e.which; var ieKey=0}
	if (ie) {var ieKey=event.keyCode; var nKey=0}
	if (keyCodes) {
		for (i=0; i<keyCodes.length; i+=3){
			if (nKey==keyCodes[i]||ieKey==keyCodes[i+1]) eval(keyCodes[i+2])
		}
	}
}

