// constants used
	var nChanged = false;
	var formLoading = false;
	var URL = window.location.href;
	var SID = URL.substr(URL.indexOf('SID=')+4);
	if (SID.indexOf('&') > 0) SID = SID.substring(0,SID.indexOf('&'));

	var oneMinute = 60 * 1000  // milliseconds in a minute
	var oneHour = oneMinute * 60
	var oneDay = oneHour * 24
	var oneWeek = oneDay * 7

	var TodaysDate=new Date();
	var Yesterday=new Date(TodaysDate.getTime()-oneDay)
function doNothing() {}
function ensureNumeric(e) {  // called onKeyPress
	var key = window.event ? e.keyCode : e.which; //key contains the pressed key in all browsers
	var keychar = String.fromCharCode(key);
	var reg = /0123456789/;  // /\d/;
	var xyz = reg.test(keychar);
//	return reg.test(keychar);
//	Was key that was pressed a numeric character (0-9) or backspace (8)?	if ( key > 47 && key < 58 || key == 8 ) return; // if so, do nothing 	else // otherwise, discard character
	if (window.event) //IE
		window.event.returnValue = null;
	else //Firefox
		e.preventDefault();//    if (key <48 || key >57) {
//		try {
//		window.event.returnValue = false; // works for IE
//		} catch (dummy) {
//			return false; // should work for non IE but doesn't
//		}
//	}
}
function numValue(input){  // returns numeric value 
	var num = input.value.replace(/\$|\,/g,'');
	if (num == '') num = 0;
	if (isNaN(num)) num = 0;
	return parseInt(num);
}
function checkValue(el, max) {
	var val = numValue(el)
	if (val > max) {
		gcAlert('Maximum value allowed is ' + max)
		el.value = max
	}
}

function numFormat(input){  // called by onChange now
	var num = input.value.replace(/\,/g,'');
	var neg = false;
	var dollar = false;
	var decpoint = false;
	if (/\$/.test(num)) dollar = true; 
	if (/\-/.test(num)) neg = true;
	if (/\./.test(num)) decpoint = true ;
	var num = input.value.replace(/[,$-]/g,'');
	if(isNaN(num)){
		gcAlert('You may enter only numbers in this field!');
		num = input.value.replace(/[^\d\.]*/g,'');
	}
	if(!isNaN(num)){
		var nm = num.split('.');
		var nm0 = nm[0] 
		nm0 = nm0.toString().split('').reverse().join('').replace(/(?=\d*\.?)(\d{3})/g,'$1,'); // split and insert comma in groups of 3 digits
		num = nm0.split('').reverse().join('').replace(/^[\,]/,''); // rejoin and strip out leading comma
		if (decpoint) num = num.concat('.');
		if (nm[1]) num = num.concat(nm[1]);
		if (dollar) num = '$' + num;
		if (neg) num = '-' + num;
		input.value = num;
	}
}

function sortBy(fieldname) {
	var sPage = window.location.pathname
	var sPage = sPage.substring(sPage.lastIndexOf('/') + 1);
	var loc = window.location.href
	if (loc.lastIndexOf('?') > 0) {
		var reqStr = loc.substring(loc.lastIndexOf('?') + 1);
		var reqArray = reqStr.split('&');
	} else {
		var reqArray = ""
	}
	
	var seq = 'Asc';
	if (getElement('txtSort') && getElement('txtSeq')) {
		if (fieldname == getElement('txtSort').value) {
			if (getElement('txtSeq').value == 'Asc') seq = 'Desc';
			else seq = 'Asc';
		}
	}
	var str = "Sort=" + fieldname + "&SortSeq=" + seq;
	if (reqArray.length > 0) {
		for (x=0; x<reqArray.length; x++) {
			if (reqArray[x].indexOf("Sort")==-1) str = str + "&" + reqArray[x];
		}
	}
	window.location.href=(sPage + '?' + str);
}

function checkChange(input) {
	if (nChanged) getPremium();
	nChanged = false;
}

function checkdate(input){
	var dvalue = input.value
	if (dvalue == '') return true;	var validformat=/\/\d{2}$/ //check for short year
	if (validformat.test(dvalue)) {
		var shortyear = dvalue.substr(dvalue.length-2,2)		if (shortyear < 30) {			input.value = dvalue.substr(0,dvalue.length-2)+'20'+dvalue.substr(dvalue.length-2,2)
		} else {			input.value = dvalue.substr(0,dvalue.length-2)+'19'+dvalue.substr(dvalue.length-2,2)
		}		dvalue = dvalue.substr(0,dvalue.length-2)+'20'+dvalue.substr(dvalue.length-2,2)
	}
	validformat=/^\d{1,2}\/\d{1,2}\/\d{4}$/ //Basic check for format validity
	if (!validformat.test(input.value))
		gcAlert("Invalid Date Format. Please correct and submit again.")
	else { //Detailed check for valid date ranges
		var monthfield=input.value.split("/")[0]
		var dayfield=input.value.split("/")[1]
		var yearfield=input.value.split("/")[2]
		var dayobj = new Date(yearfield, monthfield-1, dayfield)
		if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) {
			gcAlert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
			input.focus();		} else
			return true ;
	}
}

function checkRequired(page) {
	var required=false;
	if (page == 'all') {
		var children = document.getElementsByTagName('*');
	} else {
		var children = document.getElementById('Page' + page).getElementsByTagName('*');
	}
	for ( var i = 0; i < children.length; i += 1) {
		if (children[i].id > '' && isVisible(children[i].id)) {
			if (children[i].className.indexOf('required') >= 0) {
				if (children[i].value == '' || children[i].value == '0') {
					required = true
					children[i].style.backgroundColor='red'
				} else {
					children[i].style.backgroundColor=''
				}
			}
			if (children[i].type=='checkbox') {
				var cname = children[i].id;
				if (document.getElementById(cname + "No")) {
					if (!children[i].checked && !document.getElementById(cname + "No").checked) {
						required = true
						children[i].parentNode.style.backgroundColor='red'
						document.getElementById(cname + "No").parentNode.style.background='red'
					} else {
						children[i].parentNode.style.background=''
						document.getElementById(cname + "No").parentNode.style.background=''
					}
				}
			}
		}
	}
	return required;
}

function declineit(el,yesno) {
	if (formLoading) return;
	var cname = el.id
	if (cname.substr(cname.length-2) != 'No' && yesno != 'No' || cname.substr(cname.length-2) == 'No' && yesno == 'No') {
		if (el.checked) {
			el.style.background='red';
			alertText = "This risk is outside the program.<br>Please contact our construction department for assistance at 888-833-4158<br>";
			gcAlert(alertText);
		}
	}
}

function tabToNext(el, len, toel, e) {
	if (el.value.length == parseInt(len)) toel.focus();
}

//******************************************************************************
//  validateRequiredYesNo - makes sure one of the Yes/No boxes is checked//******************************************************************************
function validateRequiredYesNo() {
	var required = false
	var cks = document.getElementsByTagName('INPUT');
	for (i=0;i<cks.length;i++){
		if (cks[i].type=='checkbox' && isVisible(cks[i].id)) {
			var box = cks[i].style;
			var cname = cks[i].id;
			if (document.getElementById(cname + "No")) {
				if (!cks[i].checked && !document.getElementById(cname + "No").checked) {
					required = true
					cks[i].parentNode.style.backgroundColor='red'
					document.getElementById(cname + "No").parentNode.style.background='red'
				} else {
					cks[i].parentNode.style.background=''
					document.getElementById(cname + "No").parentNode.style.background=''
				}
			}
		}
	}
	if (required) return false;
	return true;
}

//******************************************************************************
//  checkCheck - returns true and sets background if checkbox is checked 
//             - sets background if Yes/No and neither is checked//******************************************************************************
function checkCheck(chkname) {
	var e = getElement(chkname)
	if (e.checked) {
		e.parentNode.style.background='red';
		return true;
	} else {
		var cname = e.id;
		if (cname.substr(cname.length-2) != "No") {
			cname = cname+"No"
		} else {
			cname = cname.substr(0,cname.length-2)
		}
		if (getElement(cname)) {
			if (getElement(cname).checked) {
				e.parentNode.style.background=''
			} else {
				e.parentNode.style.background='red'
			}
		} else {
			e.parentNode.style.background='';
		}
	}
}

//******************************************************************************
// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
//******************************************************************************
function getRadioCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

//******************************************************************************
// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
//******************************************************************************
function setRadioCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {  // ie falls into this
		var cks = document.getElementsByTagName('INPUT');
		for (i=0;i<cks.length;i++){
			if (cks[i].type=='radio') {
				if(cks[i].name == radioObj.name && cks[i].value == newValue.toString()) {
					cks[i].checked = true;
				}
			}
		}
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

//******************************************************************************
// checkDependencies - show/hide dependent elements//******************************************************************************
function checkDependencies(el, condition) {
	var fname;
	var showit = false
	if (condition == '>0') {
		if (parseInt(el.value) > 0) showit=true
	}		 
	if (condition == '<0') {
		if (parseInt(el.value) < 0) showit=true
	}		 
	if (showit) {
		fname = el.name.replace("txt","div")
		if (getElement(fname)) elementShow(fname)
		fname = el.name.replace("txt","td")
		if (getElement(fname)) elementShow(fname)
		fname = el.name.replace("txt","tr")
		if (getElement(fname)) elementShow(fname)
	} else {
		fname = el.name.replace("txt","div")
		if (getElement(fname)) elementHide(fname)
		fname = el.name.replace("txt","td")
		if (getElement(fname)) elementHide(fname)
		fname = el.name.replace("txt","tr")
		if (getElement(fname)) elementHide(fname)
	}
}

//******************************************************************************
// chkEdit - evaluate status of checkbox and show/hide dependent elements//******************************************************************************
function chkEdit(chk) {
	var fname;
	if (chk.checked) {
		fname = chk.name.replace("chk","div")
		if (getElement(fname)) elementShow(fname)
		fname = chk.name.replace("chk","td")
		if (getElement(fname)) elementShow(fname)
		fname = chk.name.replace("chk","tr")
		if (getElement(fname)) elementShow(fname)
	} else {
		if (!formLoading) { // we don't want to reset values if formLoading
			fname = chk.name.replace("chk","txt")
			if (getElement(fname)) getElement(fname).value = 0
			fname = fname+"Limit"
			if (getElement(fname)) getElement(fname).value = 0
		}
		fname = chk.name.replace("chk","div")
		if (getElement(fname)) elementHide(fname)
		fname = chk.name.replace("chk","td")
		if (getElement(fname)) elementHide(fname)
		fname = chk.name.replace("chk","tr")
		if (getElement(fname)) elementHide(fname)
	}
}

//******************************************************************************
// chkYesNo - evaluate status of Yes/No checkboxes and show/hide dependent elements//******************************************************************************
function chkYesNo(chk) {
	var basename = chk.id;
	if (chk.checked) chk.parentNode.style.background=''
	else chk.parentNode.style.background='red';
	if (basename.substr(basename.length-2) == 'No') {
		basename = basename.substr(0,basename.length-2);
		var yesBox = getElement(basename)
		if (chk.checked) {
			if (yesBox.checked) {
				yesBox.checked = false
				chkEdit(yesBox);
			}
		}
	} else {
		var noBox = getElement(chk.id + 'No')
		if (noBox.checked) {
			noBox.checked = false
		} 
		chkEdit(chk);
	}
}

//******************************************************************************
// chkYesNoRequired - evaluate status of Yes/No checkboxes and show/hide dependent elements//******************************************************************************
function chkYesNoRequired(chk) {
	var basename = chk.id;
	if (!chk.checked) chk.checked = true;
	chkYesNo(chk);
}

//******************************************************************************
// Javascript Numeric EditMask
// Written By John McGlothlin - Patoooey@optonline.net
// April 7th, 2004
// with modifications by Guy Chamberlain to function for Firefox and IE

// simple RegEx patterns to make life easy.
var reOneOrMoreDigits = /[\d+]/;
var reNoDigits = /[^\d]/gi;

function doMask(textBox, e) {
//	var keyCode = event.which ? event.which : event.keyCode;
	var keyCode = window.event ? e.keyCode : e.which; //key contains the pressed key in all browsers
//	if (window.event) {
//		keyCode = textBox.keyCode;
//	}
//	else if(textBox.which) { // Netscape/Firefox/Opera
//		keyCode = textBox.which;
//	}	// enter, backspace, delete and tab keys are allowed thru
	if(keyCode == 13 || keyCode == 8 || keyCode == 9 || keyCode == 46)
		return true;
	// get character from keyCode....dealing with the "Numeric KeyPad" 
	// keyCodes so that it can be used

	var keyCharacter = cleanKeyCode(keyCode);
	// grab the textBox value and the mask
	var val = textBox.value;
	if (textBox.mask) var mask = textBox.mask
	else var mask = "(###) ###-####";

	// simple Regex to check if key is a digit
	if(reOneOrMoreDigits.test(keyCharacter) == false)
		return false;

	// get value minus any masking by removing all non-numerics
	val = val.replace(reNoDigits,'');			
	// add current keystroke
	val += keyCharacter;

	// mask it...val holds the existing TextBox.value + the current keystroke
	textBox.value = val.maskValue(mask);
	setCaretAtEnd(textBox);
	return false;
}

// puts starting chars in field

function onFocusMask(textBox) {
	var val = textBox.value;
	if (textBox.mask) var mask = textBox.mask
	else var mask = "(###) ###-####";
	if(val.length == 0 || val == null) {
		var i = mask.indexOf('#');
		textBox.value = mask.substring(0,i);
	}
	setCaretAtEnd(textBox);
	// set just in case.
	textBox.maxlength = mask.length;
}

// blank field if no digits entered

function onBlurMask(textBox) {
	var val = textBox.value;
	// if no digits....nada entered.....blank it.
	if(reOneOrMoreDigits.test(val) == false) {
		textBox.value = '';
	}
}

String.prototype.maskValue = function(mask) {
	var retVal = mask;
	var val = this;
	//loop thru mask and replace #'s with current value one at a time
	// better way of doing this ???
	for(var i=0;i<val.length;i++) {
		retVal = retVal.replace(/#/i, val.charAt(i));
	}
	// get rid of rest of #'s
	retVal = retVal.replace(/#/gi, "");
	return retVal;
}

// The Numeric KeyPad returns keyCodes that ain't all that workable.

// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'.

// This cheesy way allows the Numeric KeyPad to be used

function cleanKeyCode(key) {
	switch(key)
	{
		case 96: return "0"; break;
		case 97: return "1"; break;
		case 98: return "2"; break;
		case 99: return "3"; break;
		case 100: return "4"; break;
		case 101: return "5"; break;
		case 102: return "6"; break;
		case 103: return "7"; break;
		case 104: return "8"; break;
		case 105: return "9"; break;
		default: return String.fromCharCode(key); break;
	}
}

// From:
// http://www.faqts.com/knowledge_base/view.phtml/aid/1159/fid/130

function setCaretAtEnd (field) {
  if (field.createTextRange) {
    var r = field.createTextRange();
    r.moveStart('character', field.value.length);
    r.collapse();
    r.select();
  }
}

//******************************************************************************
//  Error message processing
//******************************************************************************
//  requires a css error class definition for span
//span.error {
//color:#CC0000;
//display:block; //?inline?
//float:left;
//font-weight:600;
//margin-left:10px;
//}


var W3CDOM = (document.getElementsByTagName && document.createElement);

//window.onload = function () {
//	document.forms[0].onsubmit = function () {
//		return validate()
//	}
//}
//
//function validate() {
//	validForm = true;
//	firstError = null;
//	errorstring = '';
//	var x = document.forms[0].elements;
//	for (var i=0;i<x.length;i++) {
//		if (!x[i].value)
//			writeError(x[i],'This field is required');
//	}
//	if (x['email'].value.indexOf('@') == -1)
//		writeError(x['email'],'This is not a valid email address');
//	if (!W3CDOM)
//		alert(errorstring);
//	if (firstError)
//		firstError.focus();
//	if (validForm)
//		alert('All data is valid!');
//	return false;
//}

function writeError(obj,message) {
	validForm = false;
	if (obj.hasError) return;
	if (W3CDOM) {
		obj.className += ' error';
		obj.onchange = removeError;
		var sp = document.createElement('span');
		sp.className = 'error';
		sp.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(sp);
		obj.hasError = sp;
	}
	else {
		errorstring += obj.name + ': ' + message + '\n';
		obj.hasError = true;
	}
	if (!firstError)
		firstError = obj;
}

function removeError()
{
	this.className = this.className.substring(0,this.className.lastIndexOf(' '));
	this.parentNode.removeChild(this.hasError);
	this.hasError = null;
	this.onchange = null;
}
//******************************************************************************

function showPage( pagenum ) {
	var elem;
	document.getElementById('txtActivePage').value = pagenum
	for ( var x = 1; x <= 18; x++ ) {
		elem = getElement('Page' + x) ;
		if (elem) {
			if ( x == pagenum ) {
				elem.style.display = 'block';
			} else {
				elem.style.display = 'none';			}
		}
	}
	self.scrollTo(0,0);
}

function protectFields() {
	var all = document.getElementsByTagName("*");
	for ( var i = 0; i < all.length; i += 1) {
		e = all[i];
		var eid = e.id;
		var etype = e.type;
	    switch (etype) {
			case 'text':
				e.readOnly = true;
				break;
			case 'checkbox':
			case 'radio':
				e.disabled = true;
				break;
			case 'textarea':
			case 'select-one':
				e.disabled = true;
				break;
			case '':
			case 'button':
			case 'hidden':
			case 'submit':
			case 'text/css':
			case 'text/javascript':
			case undefined:
				break;
			default:
//				alert('not handled:' + eid + ' type=' + etype);
				break;
		}
	}
}

//******************************************************************************
//  findPos - gives position of page element
//******************************************************************************
function findPos(obj) {
	var curleft = obj.offsetLeft;
	var curtop = obj.offsetTop;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop]; // returns multiple values in array
}function formatCurrency(num, digits) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = 0;
	if(isNaN(digits)) digits = 0;
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*Math.pow(10,digits)+0.50000000001);
	cents = num%Math.pow(10,digits);
	num = Math.floor(num/Math.pow(10,digits)).toString();
	if(cents<10) cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	if (digits==0) {
		return (((sign)?'':'-') + '$' + num);
	} else {
		return (((sign)?'':'-') + '$' + num + '.' + cents);
	}
}
function getOffsetLeft (el) {
	var ol = el.offsetLeft;
	while ((el = el.offsetParent) != null)
		ol += el.offsetLeft;
	return ol;
}


function getOffsetTop (el) {
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null)
		ot += el.offsetTop;
	return ot;
}

function getElement( elementName ) {
  var elem;
  if( document.getElementById ) // this is the way the standards work
    elem = document.getElementById( elementName );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[elementName];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[elementName];
  return elem;
}

function showElement( elementName ) {
	var elem, vis;
	elem = getElement(elementName) ;
	if (elem) {
		vis = elem.style;
		var s = elem.id		if (s.substring(0,2)=='tr') vis.display = '' //'table-row'; // ie has a problem with table-row
		else if (s.substring(0,2)=='th') vis.display = '' //'table-cell';
		else if (s.substring(0,2)=='td') vis.display = '' //'table-cell';
		else vis.display = 'inline';		vis.visibility = 'visible';
	}
}
function hideElement( element ) {
	var elem, vis;
	elem = getElement(element) ;
	if (elem) {
		vis = elem.style;
		vis.display = 'none';
		vis.visibility = 'hidden';
	}
}
function elementHide( element ) {
	hideElement(element) ;
}

function elementShow( element ) {
	showElement(element);
}
function toggleDisplay( element ) {
	var e = getElement(element);
	if (e.style.display == 'none') showElement(element)	else hideElement(element);
}
function showHelp(el,helpname) {
	elementShow(helpname);
	centerDiv(getElement(helpname));	showHideCombos(helpname,"hidden");
}

function hideHelp(helpname) {
	showHideCombos(helpname,"visible");
	elementHide(helpname);
}

function checkElementDisplay( check, element ) {
	if ( check.checked ) {
		elementShow (element)
		elementShow ('lbl' + element)
	}	
	else {
		elementHide (element)
		elementHide ('lbl' + element) ;
	}
}

function isVisible(elementName) {
	var elem = getElement(elementName);	if (elem.style.display == 'none') return false;	var parentID = elem.parentNode.id;	var parent = elem.parentNode
//alert('element=' + elementName + ' parentID=' + parentID)
//alert('parentID(4)=' + parentID.substr(0,4))
	if (parentID.substr(0,4)!='Page' && elem.parentNode.style.display == 'none') return false;//var str = 'field=' + elementName
	while (parentID.substr(0,4) != 'Page') {
//str = str + ' parent=' + parentID + '\n';
//alert(str);
		parent = parent.parentNode;
		parentID = parent.parentNode.id;
		if (typeof(parentID) == 'undefined') return true;
		if (parent.style.display == 'none') return false;
	} 
	return true;
}
function moveDiv(fromDiv, toDiv) {
	var elem, newparent;
	elem = getElement(fromDiv) ;
	elem.parentNode.removeChild (elem);
	newparent = getElement(toDiv) ;
	newparent.appendChild(elem);
}

function displayvalue( element ) {
  var elem, vis;
	elem = getElement(element) ;
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
  return vis.display;
}

function getStyleObject(objectId) {
	// cross-browser function to get an object's style object given its
	if(document.getElementById && document.getElementById(objectId)) { 	// W3C DOM
		return document.getElementById(objectId).style;
	} else if (document.all && document.all(objectId)) { 	// MSIE 4 DOM
		return document.all(objectId).style;
	} else if (document.layers && document.layers[objectId]) { 	// NN 4 DOM.. note: this won't find nested layers
		return document.layers[objectId];
	} else {
		return false;
	}
}

function gcAlert(alertText) {
	if (getElement('txtAlert')) {
		getElement('txtAlert').innerHTML = alertText;
		getElement('txtAlert').value = alertText;
		elementHide('alertCancel');
		getElement('alertOK').onclick=function(){showHideCombos('divAlert','visible');elementHide('divAlert');}
		elementShow('divAlert');
		centerDiv(getElement('divAlert'));
		showHideCombos('divAlert','hidden')
	} else {
		alertText.replace('<br>','/n')
		alert(alertText);
	}
}
function gcConfirm(alertText, okfunction, cancelfunction) {
	if (getElement('txtAlert')) {
		getElement('txtAlert').innerHTML = alertText;
		getElement('txtAlert').value = alertText;
		if (okfunction > '' ) {
			eval("getElement('alertOK').onclick=function(){showHideCombos('divAlert','visible');elementHide('divAlert');" + okfunction + "}")
		} else {
			getElement('alertOK').onclick=function(){showHideCombos('divAlert','visible');elementHide('divAlert');}
		}
		elementShow('alertCancel');
		if (cancelfunction > '' ) {
			eval("getElement('alertCancel').onclick=function(){showHideCombos('divAlert','visible');elementHide('divAlert');" + cancelfunction + "}")
		} else {
			getElement('alertCancel').onclick=function(){showHideCombos('divAlert','visible');elementHide('divAlert');}
		}
		elementShow('divAlert');
		centerDiv(getElement('divAlert'));
	} else {
		var answer = confirm(alertText);
		if (answer) { eval(okfunction) } 		else { eval(cancelfunction) }
	}
}// centerDiv - element must be visible to get attributes
function centerDiv(el) {	var positionx = 0;
	var positiony = 0;
	if (typeof( window.pageYOffset ) == 'number')		{positiony = window.pageYOffset}  // non-IE
	else if (document.body.scrollTop > 0)				{positiony = document.body.scrollTop} // IE (before 6) DOM
	else												{positiony = document.documentElement.scrollTop} // IE 6
	if (typeof( window.innerWidth ) == 'number')		{positionx = window.innerWidth}  // non-IE
	else if (document.documentElement.clientWidth > 0)	{positionx = document.documentElement.clientWidth} // IE 6
	else												{positionx = document.body.clientWidth} // IE before 6
	if (document.getElementById)	{el.style.top=(200+positiony)+"px"}
	else if (document.all)			{el.style.top=(200+positiony)}
	else if (document.layers)		{el.top=(200+positiony)}
	if (document.getElementById)	{el.style.left=((positionx-el.offsetWidth)/2)+"px"}
	else if (document.all)			{el.style.left=((positionx-el.offsetWidth)/2)}
	else if (document.layers)		{el.left=((positionx-el.offsetWidth)/2)}
}
function showHideCombos(div,show){
	var el = getElement(div)	var i; var j;
	var cboX; var cboY;
	var elX; var elY; var elW; var elH;
	var sel = document.getElementsByTagName('SELECT');   // get all SELECT elements
	var t = findPos(el)
	//	alert ('Offset of ' + el.id + '=' + t[0] + ',' + t[1])
	elX = t[0]	elY = t[1]
	elW = el.clientWidth	elH = el.clientHeight
	//	alert ('x,y Width and height of ' + el.id + '=' + elX + ',' + elY + ' - ' + elW + ',' + elH )
	for (i=0;i<sel.length;i++) {		var cbo = sel[i] // getElement(sel[i].id)
		if (!isDescendent(cbo,div)) {
		cboX = getOffsetLeft(cbo)			cboY = getOffsetTop(cbo)
			//alert('checking ' + cbo.id + ' = ' + (cboX+cbo.clientWidth) + '>=' + elX + ' && ' + cboX + '<=' + (elX+elW) + ' && ' + (cboY+cbo.clientHeight) + '>=' + elY + ' && ' + cboY + '<=' + (elY+elH) )			if (cboX+cbo.clientWidth>=elX && cboX<=elX+elW && cboY+cbo.clientHeight>=elY && cboY<=elY+elH )
				cbo.style.visibility=show;
		}
	}}

function isDescendent(child,ancestor) {
	var el = child;  //getElement(child)	while ((el = el.offsetParent) != null)
		if (el.id == ancestor) return true;
	return false;
}

function validateZip(e) {
    var oXML = getXMLHttpObj();
	var data = e.value;
    oXML.open('GET', 'RateBR.asp?SID=' + SID + '&R=Zip&D=' + data, true);
	oXML.onreadystatechange = function(){ zipResponse(oXML); }
    oXML.send('');
}

function zipResponse(oXML){
    if(oXML.readyState!=4) return;
	loadData(oXML);
	var parts = oXML.responseText.split("||"); // split into fieldnames element and rest    
	var prefix = parts[0].substr(0,parts[0].indexOf('City'))
	var fieldname = parts[0].split('|');       // get fieldname array
	var partdata = oXML.responseText.substr(parts[0].length+2, oXML.responseText.length)
//	var fielddata = partdata.split('|');       // now split out the field data
//	if (partdata.indexOf("Invalid") == 0) {
//		alert(partdata);
//		document.forms[0].txtZip.style.background='red';
//	} else {
//		document.forms[0].txtZip.style.background='';
//		document.forms[0].txtCity.className='';
//		document.forms[0].txtCity.readOnly=false;
//	}
	if (partdata.indexOf('Invalid') >= 0) {
		gcAlert(partdata)
		getElement('txt' + fieldname + 'Zip').style.background='red'
	} else { 
		getElement('txt' + prefix + 'Zip').style.background=''
		getElement('txt' + prefix + 'City').className=''
		getElement('txt' + prefix + 'City').readOnly = false
//		getElement('txt' + prefix + 'State').readOnly = false
	}
}

function getXMLHttpObj() {
	var xmlHttp=null;
	try { xmlHttp=new XMLHttpRequest(); } // Firefox, Opera 8.0+, Safari
	catch (e) { // Internet Explorer
		if (window.XMLHttpRequest) {  // IE 7
			xmlHttp=new window.XMLHttpRequest;
		} else {
			try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
			catch (e) {
				try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
				catch (e) {
					try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
					catch (e) {
						xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
					}
				}			}		}	}
	return xmlHttp;
}
function loadForm(quote) {
	formLoading = true;
	if (getElement('divWait')) centerDiv(getElement('divWait'));
	if (getElement('txtActivePage')) showPage(getElement('txtActivePage').value); 
	showData(quote);
//	formLoading = false;
}

function loadData(oXML){
    if(oXML.readyState!=4) return;

	if (getElement('TestOutput')) getElement('TestOutput').innerHTML = oXML.responseText;
	var parts = oXML.responseText.split("||"); // split into fieldnames element and rest
	var fieldname = parts[0].split('|');       // get fieldname array
	var partdata = oXML.responseText.substr(parts[0].length+2, oXML.responseText.length)
	var fielddata = partdata.split('|');       // now split out the field data

	formLoading = true;
    for(var i=0; i<fieldname.length; i++){
		var thisfieldname = fieldname[i]		if (thisfieldname.substring(0,3)=='tbl') {
			getElement(thisfieldname).innerHTML = fielddata[i]
		}		if (getElement('chk' + fieldname[i])) {
			var fn = getElement('chk' + fieldname[i]);
			var disabledstate = fn.disabled
			fn.disabled = false
			if ( fielddata[i] ) {
				var thisdata = fielddata[i]
				if ( thisdata > '0' ) {  // the checkbox should be checked
					if ( !fn.checked ) fn.click()
					else {
						fn.click() // turn off first then
						fn.click(); // click twice to make sure dependent fields are displayed
					}
					fn.checked = true // to be sure it is checked for FF
				} else {  // the checkbox should not be checked
					if ( fn.checked ) fn.click()
					fn.checked = false; // to be sure it is not checked for FF
					if ( thisdata == -1 ) {  // the No checkbox should be checked
						if (getElement('chk' + fieldname[i] + 'No')) getElement('chk' + fieldname[i] + 'No').checked = true
					}				}
//              special processing to set radio buttons
				if (fn.type == 'radio') {
					setRadioCheckedValue(eval('document.forms[0].' + fn.id), fielddata[i])
				}
			} else { // fieldname provided but null data
				if ( fn.checked ) fn.click();
			}
//			if ( !fn.checked ) fn.click();  // testing turns on everything
			fn.disabled = disabledstate;
		}
		if (getElement('rdo' + fieldname[i])) {
			var fn = getElement('rdo' + fieldname[i]);
			var disabledstate = fn.disabled
			fn.disabled = false
			if ( fielddata[i] ) {
				var thisdata = fielddata[i]
				setRadioCheckedValue(eval('document.forms[0].' + fn.id), fielddata[i])
			}
			fn.disabled = disabledstate;
		}
		if (getElement('txt' + fieldname[i])) {
			var fn = getElement('txt' + fieldname[i]);
			if ( fielddata[i] ) {
				var thisdata = fielddata[i]
				fn.value = fielddata[i];
			} else {
				fn.value = "";
			}			if (fn.onchange) fn.onchange();
//			fn.value = 123;  // test value to fill page
		}
	}
	if (fielddata.length > fieldname.length) {
		if (fielddata[fielddata.length-1] > ' ' ) gcAlert(fielddata[fielddata.length-1]);
	}
	elementHide('divWait');
	afterLoading() 
}
function afterLoading() {
	formLoading = false;	if (getElement('txtReadOnly') && getElement('txtReadOnly').value == 'ReadOnly') {
		protectFields()	
	}
}
