var NetscapeBrowser = (navigator.appName == "Netscape");
var BrowserVersion = parseInt(navigator.appVersion);

function openFullscreen(page,windowname) {
var yes = 1;
var no = 0;

var menubar = no;      // The File, Edit, View Menus
var scrollbars = no;   // Horizontal and vertical scrollbars
var locationbar = no;  // The location box with the site URL
var directories = no;  // the "What's New", "What Cool" links
var resizable = no;    // Can the window be resized?
var statusbar = no;    // Status bar (with "Document: Done")
var toolbar = no;      // Back, Forward, Home, Stop toolbar

var windowprops = '';
if (BrowserVersion > 3) {
	windowprops = "width=" + (screen.width-10) + ",height=" + (screen.height-50) + ",top=0,left=0";
}

windowprops += (menubar ? ",menubars" : "") +
(scrollbars ? ",scrollbars" : "") +
(locationbar ? ",location" : "") +
(directories ? ",directories" : "") +
(resizable ? ",resizable" : "") +
(statusbar ? ",status" : "") +
(toolbar ? ",toolbar" : "");

window.open(page, windowname, windowprops);
}

function padout(number) { return (number < 10) ? '0' + number : number; }
function y2k(number) { return (number < 1000) ? number + 1900 : number; }

function maskDateRate(fldObj) {
	//call mask date and mark need to rate - cpm added 1/5/04
	var saveFld = fldObj.value;
	var v = maskDate(fldObj);
	if (fldObj.form.NeedToRate || saveFld != fldObj.value) {
		fldObj.form.NeedToRate.value = 1;
	}
}

function maskDate(fldObj) {
	var fldVal = fldObj.value;
	var now = new Date();
	var today = padout(now.getMonth()+1) + '/' + padout(now.getDate()) + '/' + y2k(now.getYear());
	var i = fldVal.indexOf("\\");
	if (i > -1) {
		fldVal = today;
		fldObj.value = fldVal;
	}
	var leng = fldVal.length;
	var trimVal = trimString(fldObj.value);
	var c = '', keyEntered = '', slash='';
	var needslash = false;
	var setslash = false;
	if (NetscapeBrowser) {
		var k = window.event.which;
	} else {
		var k = window.event.keyCode;
	}
	//map plus key or equal sign to complete date with current year
	if  ((k == 187 || k == 107) && trimVal.length == 7) {
		fldObj.value = fldObj.value.substring(0,6) + y2k(now.getYear());
		trimVal = trimString(fldObj.value);
	}
	if (k > 47) {
    	// check if we already have two backslashes, 
		// if so, reset k so we skip the char check loop below 
		// and let the user edit date
		var i = fldVal.indexOf("/");
		if (i > -1) {
			i = fldVal.indexOf("/",(i+2));
			var i2 = fldVal.indexOf("/",(i+1));
			if ((i > -1) & (i2 == -1)) {
				k = 37;
			}
		}
	}
	if ((k > 47) || ((k == 32) && trimVal.length < 11)) {
  		for (var i = 0; i < leng; i++) {
			keyEntered = fldVal.charAt(i);
			if (keyEntered == ' ') {
				keyEntered = today.charAt(i);
			}
			if ((keyEntered == "/") & (i == 0)) {
			   keyEntered = "";
			}
			slash = '';
			if (keyEntered == "/") {
			    keyEntered = ""; 
			    if (i < 2) {
			   		c = "0" + c + "/";
				}
				if (i < 5) {
				   if (fldVal.charAt(i+2) == "/") {
					   keyEntered = "0";
					   setslash = true;
					}
				}
			} else {
				if (isNaN(keyEntered)) {
				   keyEntered = "";
				} else {
					if (needslash || (i == 1 || i == 4)) {
						needslash = false;
						slash = "/"
					}
				}
			}
			c = c + keyEntered + slash;
			if (setslash) {
				needslash = true;
				setslash = false;
			}
		}
		fldObj.value = c;
	}
}

function chkDate(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len = fldVal.length;
	var isOkay = len == 0;
	if ((len == 8) || (len == 9)) {	
		var i = fldVal.indexOf("/");
		var ii = fldVal.lastIndexOf("/");
		if (((ii-i) == 2) && (fldVal.charAt(ii-1) !='0')) {
			fldVal = fldVal.substring(0,(i+1)) + '0' + fldVal.slice(ii-1);
		}
		if ((i == 1) && (fldVal.charAt(0) !='0')) {
			fldVal = '0' + fldVal;
		}
		if (len != fldVal.length) {
			len = fldVal.length;
			fldObj.value = fldVal;
		}
	}
	if (len == 10)
		isOkay = isDateString(fldVal); 
	
	if (!isOkay) {
		alert('Not a valid date - must be in the format MM/DD/YYYY');
		fldObj.focus();
	}
}

function chkDateMinMax(fldObj, isRequired) {
	var fldVal = trimString(fldObj.value);
	var len = fldVal.length;
	var isOkay = len == 0;
	if (len == 10) {
		isOkay = isDateString(fldVal);
	}
	if (isOkay && len == 0 && isRequired) {
		isOkay = false;
		alert("A valid date is REQUIRED - must be in the format MM/DD/YYYY");
		fldObj.focus();
	}
	else {
	
		if (!isOkay) {
			alert("Not a valid date - must be in the format MM/DD/YYYY");
			fldObj.focus();
		} else  {
			var lowval = fldObj.form(fldObj.name + 'Minimum').value;
			if (lowval.length == 0)
				lowval = '(no minimum)'
			var highval = fldObj.form(fldObj.name + 'Maximum').value;
			if (highval.length == 0)
				highval = '(no maximum)'
			var msg = 'From ' + lowval +  ' to ' + highval
			if (!InDateRange(fldObj.value,lowval,highval)) {
				alert('Outside date range ' + msg);
				fldObj.focus();
			}
		}
	}
}


function InDateRange(inval,lowval,highval) {
  var indate = new Date(inval);
  var lowdate = new Date(lowval);
  var highdate = new Date(highval);
  if ((indate.getTime() < lowdate.getTime()) || (indate.getTime() > highdate.getTime())) {
	return false;
  }
  return true
}

function trimString(s){
	var userInput;      
	var iStart, iEnd;
	var sTrimmed;      
	var cChar;
	userInput = s;
	iEnd = userInput.length - 1;
	iStart = 0;      
	bLoop = true;      
	cChar = userInput.charAt(iStart);
	while ((iStart < iEnd) && ((cChar == "\n") || (cChar == "\r") || (cChar == "\t") || (cChar == " "))){
		iStart ++;         
		cChar = userInput.charAt(iStart);      }
	cChar = userInput.charAt(iEnd);
	while ((iEnd >= 0) && ((cChar == "\n") || (cChar == "\r") || (cChar == "\t") || (cChar == " "))){
		iEnd --;
		cChar = userInput.charAt(iEnd);      }

	if (iStart <= iEnd){
		sTrimmed = userInput.substring(iStart, iEnd + 1);} 
	else {
         sTrimmed = "";}
	
	return sTrimmed;
}

//event.which == 13 for Netscape
function CheckEnterKey(){
	if (NetscapeBrowser) {
	if (window.event.which == '13'){
		//set focus to next element
		window.event.which = 9;
		}
	}
	else {
	if (window.event.keyCode == '13'){
		//set focus to next element
		window.event.keyCode = 9;
		}
	}
}

function Mid(String, Start, Length) {
	if (String == null)
		return (false);

	if (Start > String.length)
		return '';

	if (Length == null || Length.length == 0)
		return (false);

	return String.substr((Start - 1), Length);
}

function ToggleDisplay(d) {
	//send object to hide/display
	//ex: onclick="ToggleDisplay(document.all.DIVid)"
	if (d.style.display == '') 
		d.style.display='none'; 
	else 
		d.style.display=''; 
}

function chkNumeric (fldObj,decplaces) {
	var fldVal = trimString(fldObj.value);
	var isProblem = false;
	if (fldVal.length != 0) {
		isProblem = isNaN(fldVal); 
		if (isProblem) {
			alert("Not a valid number");
			fldObj.focus();
		} else {
			 var d = fldVal.indexOf('.');
			 if ((d > -1) && (d < (fldVal.length - (decplaces + 1)))) {
		 		alert("Too many decimal places");
				fldObj.focus();
			}
		}
	}
}
function chkNumeric0(fldObj) {
	chkNumeric(fldObj,0);
}
function chkNumeric2(fldObj) {
	chkNumeric(fldObj,2);
}
function chkNumeric4(fldObj) {
	chkNumeric(fldObj,4);
}
function chkPhone(fldObj) {
	var isOkay = formatPhone(fldObj); 
	if (!isOkay) {
		alert('You must enter the full 10 digit phone number or blank it out.');
		fldObj.focus();
	}
}

function formatPhone(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
  	for (var i = len-1; i >= 0; i--) {
		n = fldVal.charAt(i);
		if (!isNaN(n) && n != ' ') {
			if (c.length < 12) {
	   			c = n + c;
				if (c.length == 4 || c.length == 8) {
					c = '-' + c;
				}
			}
		}
	}
	if (fldVal.length > 0 && c.length < 12) {
		return false;
	} else {
		fldObj.value = c;
		return true;
	}
}

function chkSSN(fldObj) {
	var isOkay = formatSSN(fldObj); 
	if (!isOkay) {
		alert('You must enter a 9 digit social security number or blank it out.');
		fldObj.focus();
	}
}
function formatSSN(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
	var lok = true;
  	for (var i = len-1; i >= 0; i--) {
		n = fldVal.charAt(i);
		if (!isNaN(n) && n != ' ' && c.length < 11) {
  			c = n + c;
			if (c.length == 4 || c.length == 7) {
				c = '-' + c;
			}
		} else {
			if (n != ' ' && n != '-') {
				lok = false;
			}
		}
	}
	if ((!lok || c.length !=11 ) && c.length !=0) {
		return false;
	} else {
		fldObj.value = c;
		return true;
	}
}
function formatEIN(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
	var lok = true;
  	for (var i = len-1; i >= 0; i--) {
		n = fldVal.charAt(i);
		if (!isNaN(n) && n != ' ' && c.length < 11) {
  			c = n + c;
			if (c.length == 7) {
				c = '-' + c;
			}
		} else {
			if (n != ' ' && n != '-') {
				lok = false;
			}
		}
	}
	if ((!lok || c.length !=10 ) && c.length !=0) {
		return false;
	} else {
		fldObj.value = c;
		return true;
	}
}
function chkTaxID(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
	var lok = (len == 0);
	if (len > 9) {
		if (fldVal.charAt(2) == '-') {
			lok = formatEIN(fldObj);
		} else {
		  	if (fldVal.charAt(3) == '-') {
				  lok = formatSSN(fldObj);
			}
		}
	}
	if (!lok) {
		alert('You must enter a properly formatted Tax ID or blank it out.  Enter in either EIN format: ##-####### or SSN format: ###-##-####.');
		fldObj.focus();
	}
}

//function to handle zip+4 in same field
function chkZip4(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
	var lok = (len == 0 || len == 5);
	if (!lok) {
		if (fldVal.charAt(5) == '-') {
			lok = (len == 10); //dash is already there, so length must be 10
		} else {
			if (len == 9) {
				lok = true;
				c = fldVal.substring(0,5) + '-' + fldVal.substring(5,9);
				fldObj.value = c;
			}
		}
	}
	if (!lok) {
		alert('You must enter a properly formatted zip code - either 5 digits or 5 digits plus 4 (dash will be entered for you)');
		fldObj.focus();
	}
}

//validate zip code field - cpm 2006/06/06 - added
function chkZip(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len   = fldVal.length;
	var c = '', n = '';
	var lok = (len == 0 || len == 5);
	if (!lok) {
		alert('You must enter a properly formatted 5 character zip code');
		fldObj.focus();
	} else {
		chkNumeric0(fldObj);
	}
}

function chkCarriageReturn () {
	if (NetscapeBrowser) {
	if (window.event.which == "13"){
		window.event.keyCode = 10;
		}
	}
	else {
	if (window.event.keyCode == "13"){
		window.event.keyCode = 10;
		}
	}
}

function chkEmail(fldObj) {
	var fldVal = trimString(fldObj.value);
	var len = fldVal.length;
	var msg = '';
	if (len != 0) {
		var dotpos = fldVal.indexOf('.');
		var lastdotpos = fldVal.lastIndexOf('.');
		var atpos = fldVal.indexOf('@');
		var lastatpos = fldVal.lastIndexOf('@');
		if (len < 6) {
			msg = 'must be at least six characters';
		}
		if (msg.length == 0 && fldVal.indexOf(' ') > -1) {
			msg = 'can not contain spaces';
		}
		if (msg.length == 0 && fldVal.indexOf('"') > -1) {
			msg = 'can not contain double quotes';
		}
		if (msg.length == 0 && dotpos == 0) {
			msg = 'can not begin with a \".\" period';		
		}
		if (msg.length == 0) {
			if (lastdotpos == -1) {
				msg = 'must have a . (period) between the domain name and the domain extension';
			} else {
				if (lastdotpos <= atpos+1) {
					msg = 'must have a domain name between the @ symbol and the . (period)';
				} else {
					if (lastdotpos > len-3 || lastdotpos < len-6) {
						msg = 'must have a domain extension that is between two and five characters long';
					}
				}
			}
			if (atpos < 1 || (lastdotpos > -1 && atpos > lastdotpos) || lastatpos > atpos) {
				if (msg.length > 0) {
					msg = ' and ' + msg;
				}
				msg = 'must have a single @ symbol after the user name' + msg;
			}
		}
		if (msg.length > 0) {
			alert('Use a valid E-mail address format: username@domainname.extension\nIt ' + msg + '.  Please correct it or blank it out.');
			fldObj.focus();
		} else {
			fldObj.value = fldVal.toLowerCase();
		}
	}
}

function pleasewait(msgframe,msg1,msg2) {
	var bgcolor1 = '#FFF0C0';
	var bgcolor3 = '#800000';
	var forecolor3 = '#FFFFFF';
	waitmessage(msgframe,msg1,msg2,bgcolor1,bgcolor3,forecolor3);
}

function waitmessage(msgframe,msg1,msg2,bgcolor,msgbgcolor,msgtextcolor) {
	msgframe.document.write("");
	msgframe.document.close();
	msgframe.document.write('<html><head></head><body bgcolor="' + bgcolor + '">');
	msgframe.document.write('<h2 style="background:' + msgbgcolor + '; color:' + msgtextcolor + '; font-family:Arial; font-size:14pt; font-weight:bold">PLEASE WAIT</h2>');
	msgframe.document.write('<table width="100%" height="100%">');
	msgframe.document.write('<tr align="center" style="vertical-align:middle">');
	msgframe.document.write('<th><h2 style="color:red">' + msg1 + '</h2>');
	msgframe.document.write('<h3>' + msg2 + '</h3>');
	msgframe.document.write('</th></tr></table>');
	msgframe.document.write('</body></html>');
}

function EnableDisable(frm){
	i = 0;
	while (i < frm.elements.length){
		if (frm.elements[i].type == "text")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "password")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "textarea")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "select-one")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "select-multiple")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "checkbox")
			frm.elements[i].disabled = !frm.elements[i].disabled
		if (frm.elements[i].type == "radio")
			frm.elements[i].disabled = !frm.elements[i].disabled
		i = i + 1;
	}
}
function MapAddress(frm,prefix,suffix) {
	var curl;
	var csz;
//code for using yahoo maps
csz = frm(prefix + 'City' + suffix).value;
csz = csz + ',' + frm(prefix + 'State' + suffix).value;
csz = csz + ' ' + frm(prefix + 'Zip' + suffix).value;

//curl = 'BFCat=&Pyt=Tmap&newFL=Use+Address+Below';
//	curl = curl + '&addr=' + escape(frm(prefix + 'Address1' + suffix).value + ' ' + escape(frm(prefix + 'Address2' + suffix).value));
//	curl = curl + '&csz=' + escape(csz);
//	curl = curl + '&country=us';
//	curl = curl + '&Get+Map=Get+Map';
//	curl = "http://maps.yahoo.com/py/maps.py?" + curl;
//	var framewin = window.open(curl,"_blank");

//code for using google maps
curl = 'http://maps.google.com/maps?q=';
curl = curl + escape(frm(prefix + 'Address1' + suffix).value);
curl = curl + ' ' + csz;
var framewin = window.open(curl,"_blank");

}

function TopoMapAddress(frm,prefix,suffix,isPublicQuote) {
	var curl;
	
	if (isPublicQuote == 1)
		curl = 'index.cfm?view=tools_topomap';
	else
		curl = 'main.cfm?view=tools_topomap';
	curl = curl + '&city=' + escape(frm(prefix + 'City' + suffix).value);
	curl = curl + '&state=' + escape(frm(prefix + 'State' + suffix).value);
	curl = curl + '&zip=' + escape(frm(prefix + 'Zip' + suffix).value);
	curl = curl + '&zipfield=' + prefix + 'zip' + suffix;
	curl = curl + '&ispublicquote=' + isPublicQuote;
	var framewin = window.open(curl,"_blank");
}

//cpm changed to use new form at USPS 1/5/2004
//	write('<h1>Searching USPS for zip code for ' + curl + '</h1>');
//	write('<FORM NAME="ctystzip" ACTION="http://www.usps.com/cgi-bin/zip4/ctystzip2"  METHOD="POST">');
//	write('<INPUT TYPE="hidden" NAME="ctystzip" VALUE="' + curl + '"></form>');
//cpm changed URL for new USPS form 9/22/05
//http://zip4.usps.com/zip4/citystate_responseA.jsp
function LookupZip(frm,prefix,suffix) {
	var curl;
	var cCity = frm(prefix + 'City' + suffix).value;
	var cState = frm(prefix + 'State' + suffix).value;
	var cAddr = '';
	var cAddr2 = '';
	if (frm(prefix + 'Address1' + suffix))
		cAddr = frm(prefix + 'Address1' + suffix).value;
	if (frm(prefix + 'Address2' + suffix))
		cAddr2 = frm(prefix + 'Address2' + suffix).value;
	if (cAddr.length > 0)
		curl = 'zcl_0_results.jsp';
	else
		curl = 'zcl_1_results.jsp';
		
	var lookupwin = window.open("","_blank");
	with (lookupwin.document) {
	write('<html><head><title>zip code search</title></head><body>');
	write('<h1>Searching USPS for zip code for ' + curl + '</h1>');
	write('<FORM NAME="form1" ACTION="http://zip4.usps.com/zip4/' + curl + '"  METHOD="POST">');
	write('<INPUT TYPE="hidden" NAME="visited" VALUE="1">');
	write('<INPUT TYPE="hidden" NAME="pagenumber" VALUE="0">');

	if (cAddr.length > 0) {
		write('<INPUT TYPE="hidden" NAME="firmname" VALUE="">');
		write('<INPUT TYPE="hidden" NAME="urbanization" VALUE="">');
		write('<INPUT TYPE="hidden" NAME="address2" VALUE="' + cAddr2 + '">');
		write('<INPUT TYPE="hidden" NAME="zip5" VALUE="">');
		write('<INPUT TYPE="hidden" NAME="address1" VALUE="' + cAddr + '">');
	}
	
	write('<INPUT TYPE="hidden" NAME="city" VALUE="' + cCity + '">');
	write('<INPUT TYPE="hidden" NAME="state" VALUE="' + cState + '">');
	write('</form></body></html>');
	//note cannot have the script tag in the javascript as complete string or won't work right
	//that's why it is broken up so strangely.
	write('<scrip');
	write('t>document.forms[0].submit()</s');
	write('cript>');
	}
}

//alternate zip lookup function where pass in city and state rather than form field information
function LookupZip2(frm, fCity, fState) {
	var curl;
	var cCity = frm(fCity).value;
	var cState = "";
	if (frm(fState).selectedIndex) {
		var n = frm(fState).selectedIndex;
		cState = frm(fState).options[n].value;
		var i = cState.indexOf('|');
		if (i > -1)
			cState = cState.substring(0,i);
		}	
	else
		cState = frm(fState).value;
	curl = cCity + ' ' + cState;
	var lookupwin = window.open("","_blank");
	with (lookupwin.document) {
	write('<html><head><title>zip code search</title></head><body>');
	write('<h1>Searching USPS for zip code for ' + curl + '</h1>');
	write('<FORM NAME="form1" ACTION="http://zip4.usps.com/zip4/zcl_1_results.jsp"  METHOD="POST">');
	write('<INPUT TYPE="hidden" NAME="visited" VALUE="1">');
	write('<INPUT TYPE="hidden" NAME="pagenumber" VALUE="0">');
	write('<INPUT TYPE="hidden" NAME="city" VALUE="' + cCity + '">');
	write('<INPUT TYPE="hidden" NAME="state" VALUE="' + cState + '">');
	write('</form></body></html>');
	//note cannot have the script tag in the javascript as complete string or won't work right
	//that's why it is broken up so strangely.
	write('<scrip');
	write('t>document.forms[0].submit()</s');
	write('cript>');
	}
}

//replace all occurrences of sOld with sNew in stVar
function replaceAll (stVar, sOld, sNew)
{ var st = stVar;
  if (sOld.length == 0)
     return st;
  var idx = st.indexOf(sOld);
  while (idx >= 0)        
  {  st = st.substring(0,idx) + sNew + st.substr(idx+sOld.length);
     idx = st.indexOf(sOld);
  }
  return st;
}

function ChangeTime(obj,TimeField) {
	//obj is the radio button, TimeField is the name of the field with time value to change
	var t;
	var x;
	var frm = obj.form;
	var c = obj.value;
	t = frm(TimeField).value;
	x = t.indexOf('M',1);
	if (x == -1) x = t.indexOf('m',1);
	if (x > 1) t = t.substr(0,x-1);
	t = trimString(t) + ' ' + c;
	t = t.substr(0,8);

	frm(TimeField).value = t;
}
function CheckTime(fldObj) {
	var timeStr = trimString(fldObj.value);
	var timesArray = timeStr.split(',');
	if (timeStr.length > 0 && timesArray) {
		for (var i = 0; i < timesArray.length; i++) {
			if (!IsValidTime(timesArray[i])) {
				fldObj.focus();
			}
		}
	}
}
function IsValidTime(timeStr) {
// 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 errmsg = "  " + timeStr + " is not a valid time.";
var matchArray = timeStr.match(timePat);
if (matchArray == null) {
alert("Time is not in a valid format." + errmsg);
return false;
}
hour = matchArray[1];
minute = matchArray[2];
second = matchArray[4];
ampm = matchArray[6];

if (second=="") { second = null; }
if (ampm=="") { ampm = null }

if (hour < 0  || hour > 23) {
alert("Hour must be between 1 and 12. (or 0 and 23 for military time)" + errmsg);
return false;
}
if (hour <= 12 && ampm == null) {
if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
alert("You must specify AM or PM." + errmsg);
return false;
   }
}
if  (hour > 12 && ampm != null) {
alert("You can't specify AM or PM for military time." + errmsg);
return false;
}
if (minute<0 || minute > 59) {
alert("Minute must be between 0 and 59." + errmsg);
return false;
}
if (second != null && (second < 0 || second > 59)) {
alert("Second must be between 0 and 59." + errmsg);
return false;
}
return true;
}

//determine the number of days between two dates
function daysElapsed(date1,date2) {
    var difference =
        Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
      - Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24;
}

//return number of months between two dates
function monthsElapsed(d2,d1) {
	var yr1 = d1.getYear();
	yr1 = y2k(yr1);
	var m1 = d1.getMonth();
	var yr2 = d2.getYear();
	yr2 = y2k(yr2);
	var m2 = d2.getMonth();
	var m = 12 * (yr2 - yr1) + (m2 - m1);
	return m;
}

// rounds number to X decimal places, defaults to 2
function utlRound(number,X) {
    X = (!X ? 2 : X);
    return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

// round a number up to the nearest X (specify 10, 100, 1000, etc.)
function utlRoundUp(number,x) {
	var z = eval(number)
	var y = parseInt(z / x) * x;
	if (z % x > 0)
		y = y + x;
	return y;
}
//rounds a number down to the nearest X (specify 10, 100, 1000, etc.)
function utlRoundDown(number,x) {
	var y = parseInt(eval(number) / x) * x;
	return y;
}

//format as a dollar
function DollarFormat(number) {
	return outputMoney(number);
}

//best approach for output in money format with decimals
function outputMoney(number) {
	var c;
	if (number < 0) {
		var n = -1 * number;
		c = '($' + outputDollars(Math.floor(n-0) + '') + outputCents(n - 0) + ')';
	} else {
		c = '$' + outputDollars(Math.floor(number-0) + '') + outputCents(number - 0);
	}
    return c
}

function outputDollars(number) {
    if (number.length <= 3)
        return (number == '' ? '0' : number);
    else {
        var mod = number.length%3;
        var output = (mod == 0 ? '' : (number.substring(0,mod)));
        for (i=0 ; i < Math.floor(number.length/3) ; i++) {
            if ((mod ==0) && (i ==0))
                output+= number.substring(mod+3*i,mod+3*i+3);
            else
                output+= ',' + number.substring(mod+3*i,mod+3*i+3);
        }
        return (output);
    }
}

function outputCents(amount) {
    amount = Math.round( ( (amount) - Math.floor(amount) ) *100);
    return (amount < 10 ? '.0' + amount : '.' + amount);
}



function UpperCase(fldObj) {
	var str = trimString(fldObj.value);
	fldObj.value = str.toUpperCase();
}

function CheckMinMax(fldObj,minval,maxval) {
	if (!isNaN(fldObj.value) && !isNaN(minval)) {
		if (eval(fldObj.value) < eval(minval)) {
			alert('cannot be less than ' + minval);
			fldObj.focus();
		}
	}
	if (!isNaN(fldObj.value) && !isNaN(maxval)) {
		if (eval(fldObj.value) > eval(maxval)) {
			alert('cannot be more than ' + maxval);
			fldObj.focus();
		}
	}
}

//check to see if there are double quotes in string
function chkQuotes(fldObj) {
	var problem = fldObj.value.indexOf('"') > -1; 
	if (problem) {
		alert('You may not use double quotes in this field.');
		fldObj.focus();
	}
}

//check valid ABA routing number (assumed numeric check already done)
function chkABARouting(fldObj) {
	var rn = fldObj.value;
	var lok = false;
	if (rn.length == 9) {
		var n = 0;
		for (i = 0; i < rn.length; i += 3) {
		   n += parseInt(rn.charAt(i), 10) * 3
		     +  parseInt(rn.charAt(i + 1), 10) * 7
		     +  parseInt(rn.charAt(i + 2), 10);
		}
		lok = ((n != 0) && (n % 10 == 0));
	}
	return lok;
}
