<!-- Begin
	var action;
	var actor;
	var cardId = "";
	var state = "";
	var taxRate = 8.8;

	var notSp=new RegExp("[^ ]+");
	var notHex = new RegExp("[^0-9a-fA-F]", "g");
	var notNum = new RegExp("[^0-9]", "g");
	var sp = new RegExp(" +", "g");
	var at=new RegExp("@");
	var punct = new RegExp("[ :-]", "g");
	var canadianPostcode = new RegExp("^([a-zA-Z][0-9]){3}$")
	var vowel = "aeiouAEIOU";
							 
	function setGlobal(elt, val)
	{
		actor=elt;
		action=val;
	}

	function copyVal(fr, to)
	{
	  document.getElementById(to).value = document.getElementById(fr).value;
	}

	function ableElt(eltId, how)
	{
	  var elt = document.getElementById(eltId);
	  elt.disabled = (how? false: true);
	}

	function blankElt(eltId, ro)
	{
	  var elt = document.getElementById(eltId);
	  elt.value = "";
	  ableElt(eltId, (ro==undefined? false: ~ro));
	}

	function notBlank(elt)
	{
		var which = document.getElementById(elt);
		if(which)
		{
			if (which.value.match(notSp) != null) return true;
		}
		return false;
	}

	function validateText(field, legend, min, max)
	{
		var which = document.getElementById(field);
		if(!which) return true;

		if(which.value.match(notSp) == null)
		{
		  alert("The field...\n'"+legend+"'\n...must contain a non-blank value.");
		  return false;
		}

		if(min != undefined)
		{
		    if(max != undefined)
			{
			    if(max == min)
				{
				    if(which.value.length == min) return true;
					alert("The field...\n'"+legend+"'\n...must contain exactly "+min+" characters.");
				}
				else
				{
					if(which.value.length >= min && which.value.length <= max) return true;
					alert("The field...\n'"+legend+"'\n...must contain between "+min+" and "+max+" characters.");
				}
			}
			else
			{
			  if (which.value.length >= min) return true;
			  alert("The field...\n'"+legend+"'\n...must contain at least "+min+" characters.");
			}
			return false;
		}
		return true;
	}

	function validateNonBlank(field, legend, minv, maxv)
	{
		var which = document.getElementById(field);
		if(!which) return true;

		if(which.value.match(notSp) == null)
		{
		  alert("The field...\n'"+legend+"'\n...must contain a non-blank value.");
		  return false;
		}

		which.value = which.value.replace(sp, "");
		if(minv != undefined)
		{
			if(maxv != undefined)
			{
				if(maxv == minv)
				{
					if(which.value.length == minv) return true;
					alert("The field...\n'"+legend+"'\n...must contain exactly "+minv+" nonblank characters.");
				}
				else
				{
					if(which.value.length >= minv && which.value.length <= maxv) return true;
					alert("The field...\n'"+legend+"'\n...must contain between "+minv+" and "+maxv+" nonblank characters.");
				}
			}
			else
			{
			  if (which.value.length >= minv) return true;
			  alert("The field...\n'"+legend+"'\n...must contain at least "+minv+" nonblank characters.");
			}
			return false;
		}
		return true;
	}

	function validateNumber(field, legend, low, high)
	{
		var which = document.getElementById(field);
		if(which)
		{
			if(which.value.match(notSp) != null)
			{
				var val = parseInt(which.value);
				if(!isNaN(val) && val >= low && val <= high) return true;
				alert("The field...\n'"+legend+"'\n...must contain a number between "+
							low+" and "+high);
			} else
				alert("The field...\n'"+legend+"'\n...must contain a non-blank value.");
		}
		return false;
	}

	function anyChecked(field)
	{
		var which = document.getElementsByName(field);
		if(which)
		{
			for(i=0; i<which.length; i++)
				if(which[i].checked) return true;
		}
		return false;
	}

	function validateAlt(field, legend)
	{
		var rs = anyChecked(field);

		if(!rs)	alert("An option must be selected in field...\n'"+legend+"'");
		return rs;
	}

	function validateEmail(elt)
	{
		if(elt.value.match(notSp) == null)	return;

		if(elt.value.match(at) == null)
		{
			alert("The email field seems to be incorrectly structured");
		}
	}

	function validateMac(elt, legend)
	{
		if(elt.value.match(notSp) == null)	return;

		var temp = elt.value.replace(punct, "");
		if(temp.match(notHex) != null || (temp.length != 12 && temp.length != 24))
		{
			alert("'"+legend+"' should be 12 hex digits with optional\npunctuation using the ':' or '-' characters.");
			return;
		}
		elt.value = temp;
	}

	function validateMD5(elt, legend)
	{
		if(elt.value.match(notSp) == null)	return;

		var temp = elt.value.replace(notHex, "");
		if(temp.length != 32)
		{
			alert("'"+legend+"' should consist of exactly 32 hex digits\nwith optional non-hex punctuation characters.");
			return;
		}
		elt.value = temp;
	}

	function validateCert(elt, legend)
	{
		if(elt.value.match(notSp) == null)	return true;

		var temp = elt.value.replace(sp, "");
		if(temp.match(notHex) != null || temp.length != 16)
		{
			alert("'"+legend+"' should be 16 hex digits with\noptional space characters.");
			return false;
		}
		elt.value = temp;
		return true;
	}

	function validatePhone(elt, legend)
	{
		if(elt.value.match(notSp) == null)	return;

		var temp = elt.value.replace(notNum, "");
		if(temp.length != 7 && temp.length != 10)
		{
			alert("The "+legend+" Phone Number seems to be incorrectly structured");
		}
	}

	function validateZip(elt)
	{
  		state = "";
		if(elt.value.match(notSp) != null)
		{
		  var temp = elt.value.replace(sp, "");
		  if(temp.length == 6)
		  {
  			  if(temp.match(canadianPostcode) != null)
			  {
  				  state = "CANADA";
				  return true;
			  }
		  }
		  temp = temp.replace(notNum, "");
		  if(temp.length != 5 && temp.length != 9)
		  {
			  alert("The zip code seems to be incorrectly structured");
			  return false;
		  }
  
		  state = temp.substr(0, 2);
		  elt.value = (temp.length == 5? temp: temp.substr(0, 5)+"-"+temp.substr(5));
		}
		return true;
	}

	function validateCcNumber(elt)
	{
		if(elt.value.match(notSp) == null)	return true;

		var temp = elt.value.replace(notNum, "");
		var size = (cardId=="AmEx"? 15: 16);
		var article = (vowel.indexOf(cardId.charAt(0), 0) >= 0? "An ": "A ");
		if(temp.length != size)
		{
		  alert(article+cardId+" credit card number must\nhave exactly "+size+" digits.");
		  return false;
		}
		elt.value = temp;
		return true;
	}

	function validateCcSecurity(elt)
	{
		if(elt.value.match(notSp) == null)	return true;

		var temp = elt.value.replace(notNum, "");
		var size = (cardId=="AmEx"? 4: 3);
		var article = (vowel.indexOf(cardId.charAt(0), 0) >= 0? "An ": "A ");
		if(temp.length != size)
		{
		  alert(article+cardId+" credit card security code\nmust have exactly "+size+" digits.");
		  return false;
		}
		elt.value = temp;
		return true;
	}

	function asString(numb, decs)
	{
		var numStr = (numb += 5*Math.pow(10, -decs-1)).toString();
		var i=numStr.indexOf(".");
		numStr = numStr.substr(0, i+decs+1);
		return numStr;
	}

	function stateSelect(tagId, action)
	{
	  var act="";
	  if(action!=undefined)
	  {
		act = " onChange='"+action+";'";
	  }
	  document.write(
					 "<select name='"+tagId+"' id='"+tagId+"'"+act+">\n",
					   "<option value=''>Select a state</option>\n",
					   "<option value='AL-US'>Alabama</option>\n",
					   "<option value='AK-US'>Alaska</option>\n",
					   "<option value='AZ-US'>Arizona</option>\n",

					   "<option value='AR-US'>Arkansas</option>\n",
					   "<option value='CA-US'>California</option>\n",
					   "<option value='CO-US'>Colorado</option>\n",
					   "<option value='CT-US'>Connecticut</option>\n",
					   "<option value='DE-US'>Delaware</option>\n",
					   "<option value='DC-US'>District Of Columbia</option>\n",
					   "<option value='FL-US'>Florida</option>\n",
					   "<option value='GA-US'>Georgia</option>\n",
					   "<option value='HI-US'>Hawaii</option>\n",

					   "<option value='ID-US'>Idaho</option>\n",
					   "<option value='IL-US'>Illinois</option>\n",
					   "<option value='IN-US'>Indiana</option>\n",
					   "<option value='IA-US'>Iowa</option>\n",
					   "<option value='KS-US'>Kansas</option>\n",
					   "<option value='KY-US'>Kentucky</option>\n",
					   "<option value='LA-US'>Louisiana</option>\n",
					   "<option value='ME-US'>Maine</option>\n",
					   "<option value='MD-US'>Maryland</option>\n",

					   "<option value='MA-US'>Massachusetts</option>\n",
					   "<option value='MI-US'>Michigan</option>\n",
					   "<option value='MN-US'>Minnesota</option>\n",
					   "<option value='MS-US'>Mississippi</option>\n",
					   "<option value='MO-US'>Missouri</option>\n",
					   "<option value='MT-US'>Montana</option>\n",
					   "<option value='NE-US'>Nebraska</option>\n",
					   "<option value='NV-US'>Nevada</option>\n",
					   "<option value='NH-US'>New Hampshire</option>\n",

					   "<option value='NJ-US'>New Jersey</option>\n",
					   "<option value='NM-US'>New Mexico</option>\n",
					   "<option value='NY-US'>New York</option>\n",
					   "<option value='NC-US'>North Carolina</option>\n",
					   "<option value='ND-US'>North Dakota</option>\n",
					   "<option value='OH-US'>Ohio</option>\n",
					   "<option value='OK-US'>Oklahoma</option>\n",
					   "<option value='OR-US'>Oregon</option>\n",
					   "<option value='PA-US'>Pennsylvania</option>\n",

					   "<option value='PR-US'>Puerto Rico</option>\n",
					   "<option value='RI-US'>Rhode Island</option>\n",
					   "<option value='SC-US'>South Carolina</option>\n",
					   "<option value='SD-US'>South Dakota</option>\n",
					   "<option value='TN-US'>Tennessee</option>\n",
					   "<option value='TX-US'>Texas</option>\n",
					   "<option value='UT-US'>Utah</option>\n",
					   "<option value='VT-US'>Vermont</option>\n",
					   "<option value='VA-US'>Virginia</option>\n",

					   "<option value='WA-US'>Washington</option>\n",
					   "<option value='WV-US'>West Virginia</option>\n",
					   "<option value='WI-US'>Wisconsin</option>\n",
					   "<option value='WY-US'>Wyoming</option>\n",
					   "<option value=''>---------------</option>\n",

					   "<option value='AB-Canada'>Alberta</option>\n",
					   "<option value='BC-Canada'>British Columbia</option>\n",

					   "<option value='MB-Canada'>Manitoba</option>\n",
					   "<option value='NB-Canada'>New Brunswick</option>\n",
					   "<option value='NL-Canada'>Newfoundland</option>\n",
					   "<option value='NL-Canada'>Labrador</option>\n",
					   "<option value='NT-Canada'>Northwest Terr</option>\n",
					   "<option value='NS-Canada'>Nova Scotia</option>\n",
					   "<option value='NU-Canada'>Nunavut</option>\n",
					   "<option value='ON-Canada'>Ontario</option>\n",
					   "<option value='PE-Canada'>Prince Edward Is</option>\n",
					   "<option value='QC-Canada'>Quebec</option>\n",

					   "<option value='SK-Canada'>Saskatchewan</option>\n",
					   "<option value='YT-Canada'>Yukon Territory</option>\n",
					 "</select>\n");
	}

// end -->
