// RESOURCES NOT IN THIS .js
// FIELD MASKING - http://www.xaprb.com/blog/2006/11/02/how-to-create-input-masks-in-html/



// -------------------------------------------------------------------------------------------------------------
// DISABLE ENTER KEY
// -------------------------------------------------------------------------------------------------------------
function stopRKey(evt) {
	var evt = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}
document.onkeypress = stopRKey;



// -------------------------------------------------------------------------------------------------------------
// TEXT SIZER (508 Compliance)
// -------------------------------------------------------------------------------------------------------------
// SYNTAX 
// <a href="javascript:ts('body',-1)" onmouseover="document.all.tick.src='tick.wav'">A</a>
// <a href="javascript:ts('body',1)" onmouseover="document.all.tick.src='tick.wav'">A+</a> 
var tgs = new Array( 'div','td','tr');
var szs = new Array( 'xx-small','x-small','small','medium','large','x-large','xx-large' );
var startSz = 2;
function ts( trgt,inc ) {
	if (!document.getElementById) return
	var d = document,cEl = null,sz = startSz,i,j,cTags;
	sz += inc;
	if ( sz < 0 ) sz = 0;
	if ( sz > 6 ) sz = 6;
	startSz = sz;
	if ( !( cEl = d.getElementById( trgt ) ) ) cEl = d.getElementsByTagName( trgt )[ 0 ];
	cEl.style.fontSize = szs[ sz ];
	for ( i = 0 ; i < tgs.length ; i++ ) {
		cTags = cEl.getElementsByTagName( tgs[ i ] );
		for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = szs[ sz ];
	}
}



// -------------------------------------------------------------------------------------------------------------
// FORCE UPPERCASE / LOWERCASE
//
// Ex: <input type="button" name="Convert" value="Make Uppercase >>" onClick="makeUppercase();">
// -------------------------------------------------------------------------------------------------------------
function makeUppercase() {
	document.form1.outstring.value = document.form1.instring.value.toUpperCase();
}
function makeUppercase() {
	document.form1.outstring.value = document.form1.instring.value.toLowerCase();
}



// -------------------------------------------------------------------------------------------------------------
// CHECK / UNCHECK ALL CHECKBOXES
//
// Ex: <a href="javascript: void(0);" onclick="javascript: checkall();">Check All</a> / <a href="javascript: void(0);" onclick="javascript: uncheckall();">Uncheck All</a>
// -------------------------------------------------------------------------------------------------------------
function checkall()
{
	for(i=0; i<document.FormName.elements.length; i++)
	{
		if(document.FormName.elements[i].type=="checkbox")
		{
			document.FormName.elements[i].checked=true;
		}
	}
}
function uncheckall()
{
	for(i=0; i<document.FormName.elements.length; i++)
	{
		if(document.FormName.elements[i].type=="checkbox")
		{
			document.FormName.elements[i].checked=false;
		}
	}
}



// -------------------------------------------------------------------------------------------------------------
// CHANGE FUNCTION	(To be utilized in conjunction with framework.css
//					 message boxes to close/hide message box upon click)
// -------------------------------------------------------------------------------------------------------------
function change(id, newClass)
{	// Basic DIV SHOW/HIDE Functionality
	// Ex: <a href="#" onclick="change('error', 'hidden');"><div class="error">&nbsp;&nbsp;<%=request.querystring("error")%></div></a>

	identity=document.getElementById(id);
	identity.className=newClass;
}



// -------------------------------------------------------------------------------------------------------------
// CAPS LOCK CHECK
//
// Ex: <input type="Password" name="Password" size="16" maxlength="16" onkeypress="checkCapsLock( event )">
// -------------------------------------------------------------------------------------------------------------
function checkCapsLock( e ) {
	var myKeyCode=0;
	var myShiftKey=false;
	var myMsg='Caps Lock is On.\n\nTo prevent entering your password incorrectly,\nyou should press Caps Lock to turn it off.';

	// Internet Explorer 4+
	if ( document.all ) {
		myKeyCode=e.keyCode;
		myShiftKey=e.shiftKey;

	// Netscape 4
	} else if ( document.layers ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	// Netscape 6
	} else if ( document.getElementById ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;
	}

	// Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
	if ( ( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey ) {
		alert( myMsg );

	// Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on
	} else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) {
		alert( myMsg );
	}
}




// -------------------------------------------------------------------------------------------------------------
// AUTO TABBING
//
// Ex: <input type="text" name="first" size=4 onKeyup="autotab(this, document.sampleform.second)" maxlength=3> <input type="text" name="second" size=4 onKeyup="autotab(this, document.sampleform.third)" maxlength=3> <input type="text" name="third" size=5 maxlength=4>
// -------------------------------------------------------------------------------------------------------------
function autotab(original,destination){
	if (original.getAttribute&&original.value.length==original.getAttribute("maxlength"))
	destination.focus()
}



// -------------------------------------------------------------------------------------------------------------
// ACCEPT TERMS / AGREE TO TERMS CHECKBOX (Submit won't proceed until this has been checked)
//
// Ex:
//	<form action="/yourscript.cgi-or-your-page.html" method="GET" onsubmit="return checkCheckBox(this)">
// 		<!--Enter your form contents here-->
// 	
// 		<b>By submitting, I agree that all info entered was done accurately & truthfully.</b><br />
// 		I accept: <input type="checkbox" value="0" name="agree">
// 		<input type="submit" value="Submit form">
// 		<input type="button" value="Exit" onclick="document.location.href='/index.html';">
//	</form>
// -------------------------------------------------------------------------------------------------------------
function checkCheckBox(f){
	if (f.agree.checked == false )
	{
		alert('Please check the box to continue.');
		return false;
	}else
	return true;
}



// -------------------------------------------------------------------------------------------------------------
// AGREE TO TERMS FIELD ENABLER (Submit will fail on field requirements due to users inability to type into fields
// -------------------------------------------------------------------------------------------------------------
//	<input type="CHECKBOX" name="CheckThis">
//	If you agree with these <a href="index.asp?page=terms" target="_blank">TERMS</a> click the checkbox below to proceed with signup.
//	Name: <input type="TEXT" name="txtUserName" onfocus="AgreeToTermsEnabler(this.form)"><br />
//	Age: <input type="TEXT" name="txtAge" onfocus="AgreeToTermsEnabler(this.form)"><br />
// -------------------------------------------------------------------------------------------------------------
function AgreeToTermsEnabler(frm)
{
	if (!frm.CheckThis.checked)
		frm.CheckThis.focus()
}



// -------------------------------------------------------------------------------------------------------------
// CHARACTER COUNT
//
// Ex: 	onChange="countit(this)"
// 		<input type="text" name="displaycount" size="20">
// -------------------------------------------------------------------------------------------------------------
function countit(what){
	formcontent=what.form.charcount.value
	what.form.displaycount.value=formcontent.length
}



// -------------------------------------------------------------------------------------------------------------
// CLEAR DEFAULT TEXT
//
// Ex:	<input type="text" value="Search this site" onFocus="clearText(this)">
// -------------------------------------------------------------------------------------------------------------
function clearText(thefield){
	if (thefield.defaultValue==thefield.value)
	thefield.value = ""
} 



// -------------------------------------------------------------------------------------------------------------
// DROPDOWN DATE
//
// Ex:
//	<form action="" name="someform">
//		<select id="daydropdown"></select> 
//		<select id="monthdropdown"></select>
//		<select id="yeardropdown"></select> 
//	</form>
//	
//	<script type="text/javascript">
//		//populatedropdown(id_of_day_select, id_of_month_select, id_of_year_select)
//		window.onload=function(){
//		populatedropdown("daydropdown", "monthdropdown", "yeardropdown")
//		}
//	</script>
// -------------------------------------------------------------------------------------------------------------
var monthtext=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];
function populatedropdown(dayfield, monthfield, yearfield){
	var today=new Date()
	var dayfield=document.getElementById(dayfield)
	var monthfield=document.getElementById(monthfield)
	var yearfield=document.getElementById(yearfield)
	for (var i=0; i<31; i++)
		dayfield.options[i]=new Option(i, i+1)
		dayfield.options[today.getDate()]=new Option(today.getDate(), today.getDate(), true, true) //select today's day
		for (var m=0; m<12; m++)
		monthfield.options[m]=new Option(monthtext[m], monthtext[m])
		monthfield.options[today.getMonth()]=new Option(monthtext[today.getMonth()], monthtext[today.getMonth()], true, true) //select today's month
		var thisyear=today.getFullYear()
		for (var y=0; y<20; y++){
			yearfield.options[y]=new Option(thisyear, thisyear)
		thisyear+=1
	}
	yearfield.options[0]=new Option(today.getFullYear(), today.getFullYear(), true, true) //select today's year
}




// -------------------------------------------------------------------------------------------------------------
// PRINTING ROUTINES (BY ELEMENT)
// -------------------------------------------------------------------------------------------------------------
// SYNTAX 
// <a href="javascript:printIt(document.getElementById('printarea').innerHTML)">Print</a>
// <div id="printarea">Only this part of the page is printed</div>
var win=null;
function printIt(printThis)
{
	win = window.open();
	self.focus();
	win.document.open();
	win.document.write('<'+'html'+'><'+'head'+'><'+'style'+'>');
	win.document.write('body, td { font-family: Verdana; font-size: 10pt;}');
	win.document.write('<'+'/'+'style'+'><'+'/'+'head'+'><'+'body'+'>');
	win.document.write(printThis);
	win.document.write('<'+'/'+'body'+'><'+'/'+'html'+'>');
	win.document.close();
	win.print();
	win.close();
}




// -------------------------------------------------------------------------------------------------------------
// FORM TO COOKIE (Retrievable at next form load)
//
// Ex:
// 	<body onload="cookieForms('open', 'yourform')" onunload="cookieForms('save', 'yourform')">
//	...
// 	<form name="yourform">
//  	<p>Text Fields: 
//   		<input type="text" name="1" value="">
//  	</p>
//  	<p>Passwords: 
//   		<input type="password" name="2" value="">
//   		<br>
//   		(won't be saved)
//		</p>
//  	<p>TextAreas: 
//   		<textarea name="3"></textarea>
//  	</p>
//  	<p>Dropdowns: 
//   	<select name="4">
//    		<option value="one">One</option>
//    		<option value="two">Two</option>
//    		<option value="three">Three</option>
//   	</select>
//  	</p>
//  	<p>Checkboxes: 
//   		<input type="checkbox" name="5" value="ummm">
// 		</p>
// 	 	<p>		
//			Radio Buttons: 
//			<input type="radio" name="6" value="snuh">
//			<input type="radio" name="6" value="whuf">
//  	</p>
//		<hr size="1" width="300" align="left">
// </form>

// -------------------------------------------------------------------------------------------------------------
var expDays = 100;
var exp = new Date(); 
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));

function getCookieVal (offset) {  
	var endstr = document.cookie.indexOf (";", offset);  
	if (endstr == -1) { endstr = document.cookie.length; }
	return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {  
	var arg = name + "=";  
	var alen = arg.length;  
	var clen = document.cookie.length;  
	var i = 0;  
	while (i < clen) {    
		var j = i + alen;    
		if (document.cookie.substring(i, j) == arg) return getCookieVal (j);    
		i = document.cookie.indexOf(" ", i) + 1;    
		if (i == 0) break;   
	}  

	return null;
}

function SetCookie (name, value) {  
	var argv = SetCookie.arguments;  
	var argc = SetCookie.arguments.length;  
	var expires = (argc > 2) ? argv[2] : null;  
	var path = (argc > 3) ? argv[3] : null;  
	var domain = (argc > 4) ? argv[4] : null;  
	var secure = (argc > 5) ? argv[5] : false;  
	document.cookie = name + "=" + escape (value) + 
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	((path == null) ? "" : ("; path=" + path)) +  
	((domain == null) ? "" : ("; domain=" + domain)) +    
	((secure == true) ? "; secure" : "");
}

function cookieForms() {  
	var mode = cookieForms.arguments[0];
	for(f=1; f<cookieForms.arguments.length; f++) {
		formName = cookieForms.arguments[f];

		if(mode == 'open') {	
			cookieValue = GetCookie('saved_'+formName);
			if(cookieValue != null) {
				var cookieArray = cookieValue.split('#cf#');

				if(cookieArray.length == document[formName].elements.length) {
					for(i=0; i<document[formName].elements.length; i++) {
						if(cookieArray[i].substring(0,6) == 'select') { document[formName].elements[i].options.selectedIndex = cookieArray[i].substring(7, cookieArray[i].length-1); }
						else if((cookieArray[i] == 'cbtrue') || (cookieArray[i] == 'rbtrue')) { document[formName].elements[i].checked = true; }
						else if((cookieArray[i] == 'cbfalse') || (cookieArray[i] == 'rbfalse')) { document[formName].elements[i].checked = false; }
						else { document[formName].elements[i].value = (cookieArray[i]) ? cookieArray[i] : ''; }
					}
				}
			}
		}

		if(mode == 'save') {	
			cookieValue = '';
			for(i=0; i<document[formName].elements.length; i++) {
				fieldType = document[formName].elements[i].type;
				if(fieldType == 'password') { passValue = ''; }
				else if(fieldType == 'checkbox') { passValue = 'cb'+document[formName].elements[i].checked; }
				else if(fieldType == 'radio') { passValue = 'rb'+document[formName].elements[i].checked; }
				else if(fieldType == 'select-one') { passValue = 'select'+document[formName].elements[i].options.selectedIndex; }
				else { passValue = document[formName].elements[i].value; }

				cookieValue = cookieValue + passValue + '#cf#';
			}
			cookieValue = cookieValue.substring(0, cookieValue.length-4); // Remove last delimiter
			SetCookie('saved_'+formName, cookieValue, exp);		
		}	
	}
}




// -------------------------------------------------------------------------------------------------------------
// EXPANDABLE ELEMENTS (DIV) ROUTINES
// -------------------------------------------------------------------------------------------------------------
/*
	SYNTAX
	
	<p>Click the areas below to expand functional areas.</p>
	<div onClick="expandcontent('area1')" style="cursor:hand; cursor:pointer">
		<b>+ Click here to expand this area</b>
	</div>
	<div id="area1" class="switchcontent">
		This area will expand and collapse upon clicking of it&#39;s 
		connected header.&nbsp; This is especially nice when you 
		want to hide content and show it without refreshing the 
		browser page.
		<br /><br />
	</div>
*/
var enablepersist="on"    // Enable saving state of content structure using session cookies? (on/off)
var collapseprevious="no" // Collapse previously open content when opening present? (yes/no)
if (document.getElementById){
	document.write('<style type="text/css">')
	document.write('.switchcontent{display:none;}')
	document.write('</style>')
}
function getElementbyClass(classname){
	ccollect=new Array()
	var inc=0
	var alltags=document.all? document.all : document.getElementsByTagName("*")
	for (i=0; i<alltags.length; i++){
		if (alltags[i].className==classname)
		ccollect[inc++]=alltags[i]
	}
}
function contractcontent(omit){
	var inc=0
	while (ccollect[inc]){
		if (ccollect[inc].id!=omit)
			ccollect[inc].style.display="none"
		inc++
	}
}
function expandcontent(cid){
	if (typeof ccollect!="undefined"){
		if (collapseprevious=="yes")
		contractcontent(cid)
		document.getElementById(cid).style.display=(document.getElementById(cid).style.display!="block")? "block" : "none"
	}
}
function revivecontent(){
	contractcontent("omitnothing")
	selectedItem=getselectedItem()
	selectedComponents=selectedItem.split("|")
	for (i=0; i<selectedComponents.length-1; i++)
	document.getElementById(selectedComponents[i]).style.display="block"
}
function get_cookie(Name) { 
	var search = Name + "="
	var returnvalue = "";
	if (document.cookie.length > 0) {
		offset = document.cookie.indexOf(search)
		if (offset != -1) { 
		offset += search.length
		end = document.cookie.indexOf(";", offset);
		if (end == -1) end = document.cookie.length;
		returnvalue=unescape(document.cookie.substring(offset, end))
		}
	}
	return returnvalue;
}
function getselectedItem(){
	if (get_cookie(window.location.pathname) != ""){
		selectedItem=get_cookie(window.location.pathname)
	return selectedItem
	}
	else
		return ""
}
function saveswitchstate(){
	var inc=0, selectedItem=""
	while (ccollect[inc]){
		if (ccollect[inc].style.display=="block")
			selectedItem+=ccollect[inc].id+"|"
		inc++
	}
	document.cookie=window.location.pathname+"="+selectedItem
}
function do_onload(){
	uniqueidn=window.location.pathname+"firsttimeload"
	getElementbyClass("switchcontent")
	if (enablepersist=="on" && typeof ccollect!="undefined"){
		document.cookie=(get_cookie(uniqueidn)=="")? uniqueidn+"=1" : uniqueidn+"=0" 
		firsttimeload=(get_cookie(uniqueidn)==1)? 1 : 0 //check if this is 1st page load
		if (!firsttimeload)
			revivecontent()
	}
}
if (window.addEventListener)
	window.addEventListener("load", do_onload, false)
else if (window.attachEvent)
	window.attachEvent("onload", do_onload)
else if (document.getElementById)
	window.onload=do_onload
if (enablepersist=="on" && document.getElementById)
	window.onunload=saveswitchstate




// -------------------------------------------------------------------------------------------------------------
// PAGE - JUMP TO (BY DAY OF WEEK / MONTH / DAY OF MONTH
// -------------------------------------------------------------------------------------------------------------
function dayofweekjump() {
    // Ex: <BODY OnLoad="dayofweekjump()"> 
    var DOWArray = new
    initArray("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
    var today = new Date();
    var day = DOWArray[today.getDay()+1];
    window.location = day + ".html";
}
function monthjump() {
    // Ex: <BODY OnLoad="monthjump()">
    today = new Date();
    m = new Array("January.html","February.html","March.html","April.html","May.html","June.html","July.html","August.html","September.html","October.html","November.html","December.html");
    window.location = m[today.getMonth()];
}
function dayofmonthjump() {
    // Ex: <BODY OnLoad="dayofmonthjump()">
    var today = new Date();
    var day = today.getDate();
    window.location = day + ".html";
}
function initArray() {
    this.length = initArray.arguments.length;
    for (var i = 0; i < this.length; i++)
    this[i+1] = initArray.arguments[i];
}



// -------------------------------------------------------------------------------------------------------------
// SEARCH FACILITIES
// -------------------------------------------------------------------------------------------------------------
function findInPage(str) {
	// Ex : <form name=search onSubmit="return findInPage(this.string.value);">
	//      Find in Page
	//      <input name=string type=text size=15 onChange="n = 0;">
	//      </form>
	var txt, i, found;
	if (str == "")
	return false;
	if (NS4) {
	   if (!win.find(str))
	   while(win.find(str, false, true))
	   n++;
	else
	   n++;
	   if (n == 0) alert(str + " was not found on this page.");
	}
	if (IE4) {
	   txt = win.document.body.createTextRange();
	   for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
	   txt.moveStart("character", 1);
	   txt.moveEnd("textedit");
	}
	if (found) {
	   txt.moveStart("character", -1);
	   txt.findText(str);
	   txt.select();
	   txt.scrollIntoView();
	   n++;
	}
	else {
	if (n > 0) {
	   n = 0;
	   findInPage(str);
	}
	else
	   alert(str + " was not found on this page.");
	   }
	}
	return false;
}



// -------------------------------------------------------------------------------------------------------------
// FORM REQUIRED FIELD VALIDATION
// -------------------------------------------------------------------------------------------------------------
// Ex Method 1: (Required fields are UPPERCASED - Preferred method)
//	<form onSubmit="return checkrequired(this)">
// 		<input type="text" name="NAME">
// 		<input type="text" name="EMAIL">
// 		<select name="hobby">
// 			<option>....</option>
// 		</select>
// 		<textarea name="comments"></textarea>
//	</form>
//
// Ex Method 2: (Required fields are prefixed with the word required)
//	<form onSubmit="return checkrequired(this)">
// 		<input type="text" name="requiredname">
// 		<input type="text" name="requiredemail">
// 		<select name="requiredhobby">
// 			<option>....</option>
// 		</select>
// 		<textarea name="comments"></textarea>
//	</form>
// -------------------------------------------------------------------------------------------------------------
function checkrequired(which){
	var pass=true
	if (document.images){
		for (i=0;i<which.length;i++){
			var tempobj=which.elements[i]
				if (tempobj.name.substring(0,8)=="required" || tempobj.name == tempobj.name.toUpperCase()){
					if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){
					pass=false
				break
			}
		}
	}
}
if (!pass){
	alert("One or more of the required elements are not completed. Please complete them, then submit again!")
	return false
}
else
	return true
}



// -------------------------------------------------------------------------------------------------------------
// VALIDATE SSN (Social Security Number)
//
// Ex: <input type=button value="Validate Number" onClick="ValidateSSN(this.form.ssn.value);">
// -------------------------------------------------------------------------------------------------------------
function ValidateSSN(ssn) {
	var matchArr = ssn.match(/^(\d{3})-?\d{2}-?\d{4}$/);
	var numDashes = ssn.split('-').length - 1;
	if (matchArr == null || numDashes == 1) {
		alert('Invalid SSN. Must be 9 digits or in the form NNN-NN-NNNN.');
		msg = "does not appear to be valid";
	}
	else 
		if (parseInt(matchArr[1],10)==0) {
			alert("Invalid SSN: SSN's can't start with 000.");
			msg = "does not appear to be valid";
		}
	else {
		msg = "appears to be valid";
		alert(ssn + "\r\n\r\n" + msg + " Social Security Number.");
	   }
}



// -------------------------------------------------------------------------------------------------------------
// VALIDATE ZIP
//
// Ex: <form name=zip onSubmit="return validateZIP(this.zip.value)">
// -------------------------------------------------------------------------------------------------------------
function validateZIP(field) {
	var valid = "0123456789-";
	var hyphencount = 0;
	if (field.length!=5 && field.length!=10) {
		alert("Please enter your 5 digit or 5 digit+4 zip code.");
		return false;
	}
	for (var i=0; i < field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (temp == "-") hyphencount++;
		if (valid.indexOf(temp) == "-1") {
			alert("Invalid characters in your zip code.  Please try again.");
			return false;
		}
		if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
			alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
			return false;
		}
	}
	return true;
}



// -------------------------------------------------------------------------------------------------------------
// VALIDATE DATE
//
// Ex:
//	<INPUT type="text" name=testdat size='10' maxlength="10" onblur="check_date(this)">
//
//  	ddmmyy</b> (171201)   or <BR>
//  	ddmmyyyy</b> (17122001) or <BR>
//  	ddXmmXyy</b> (17-12-01 or 17y12q01 ... ) or <BR>
//  	ddXmmXyyyy</b> (17.12.2001 or 17,12,2001 ...) <br>
//  	where "X" is any sign not in 0..9, i.e. "-" or "/"<p>
// -------------------------------------------------------------------------------------------------------------
function check_date(field){
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = ".";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
	err = 0;
	DateValue = DateField.value;
	
	/* Delete all chars except 0..9 */
	for (i = 0; i < DateValue.length; i++) {
		if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
			DateTemp = DateTemp + DateValue.substr(i,1);
		}
	}
	DateValue = DateTemp;
	
	/* Always change date to 8 digits - string*/
	/* if year is entered as 2-digit / always assume 20xx */
	if (DateValue.length == 6) {
	DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
	if (DateValue.length != 8) {
	err = 19;}
	/* year is wrong if year = 0000 */
	year = DateValue.substr(4,4);
	if (year == 0) {
	err = 20;
	}
	/* Validation of month*/
	month = DateValue.substr(2,2);
	if ((month < 1) || (month > 12)) {
	err = 21;
	}
	/* Validation of day*/
	day = DateValue.substr(0,2);
	if (day < 1) {
	err = 22;
	}
	/* Validation leap-year / february / day */
	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
	leap = 1;
	}
	if ((month == 2) && (leap == 1) && (day > 29)) {
	err = 23;
	}
	if ((month == 2) && (leap != 1) && (day > 28)) {
	err = 24;
	}
	/* Validation of other months */
	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
	err = 25;
	}
	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
	err = 26;
	}
	/* if 00 ist entered, no error, deleting the entry */
	if ((day == 0) && (month == 0) && (year == 00)) {
	err = 0; day = ""; month = ""; year = ""; seperator = "";
	}
	/* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
	if (err == 0) {
	DateField.value = day + seperator + month + seperator + year;
	}
	/* Error-message if err != 0 */
	else {
		alert("Date is incorrect!");
		DateField.select();
		DateField.focus();
	}
}


// -------------------------------------------------------------------------------------------------------------
// VALIDATE PASSWORD FIELDS 1 & 2
//
// Ex: 
//	<form name=myForm onSubmit="return validatePwd()">
//		Password: <input type=password name=password1 maxlength=12>
//		Verify password: <input type=password name=password2 maxlength=12>
//	</form>
// -------------------------------------------------------------------------------------------------------------
function validatePwd() {
	var invalid = " "; // Invalid character is a space
	var minLength = 6; // Minimum length
	var pw1 = document.myForm.password1.value;
	var pw2 = document.myForm.password2.value;
	
	// check for a value in both fields.
	if (pw1 == '' || pw2 == '') {
		alert('Please enter your password twice.');
		return false;
	}
	// check for minimum length
	if (document.myForm.password.value.length < minLength) {
		alert('Your password must be at least ' + minLength + ' characters long. Try again.');
		return false;
	}
	// check for spaces
	if (document.myForm.password.value.indexOf(invalid) > -1) {
		alert("Sorry, spaces are not allowed.");
		return false;
	}
	else {
	if (pw1 != pw2) {
		alert ("You did not enter the same new password twice. Please re-enter your password.");
		return false;
	}
	else {
		alert('Nice job.');
		return true;
      }
   }
}




// -------------------------------------------------------------------------------------------------------------
// VALIDATE IP ADDRESS
//
// Ex: <input type="submit" value="Verify" onClick="verifyIP(IPvalue.value)";>
// -------------------------------------------------------------------------------------------------------------
function verifyIP (IPvalue) {
	errorString = "";
	theName = "IPaddress";
	var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
	var ipArray = IPvalue.match(ipPattern);
	if (IPvalue == "0.0.0.0")
		errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
	else if (IPvalue == "255.255.255.255")
		errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
	if (ipArray == null)
		errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
	else {
		for (i = 0; i < 4; i++) {
			thisSegment = ipArray[i];
		if (thisSegment > 255) {
			errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
			i = 4;
		}
		if ((i == 0) && (thisSegment > 255)) {
		errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
		i = 4;
      }
   }
	extensionLength = 3;
	if (errorString != "")
		alert (errorString);
	}
}



// -------------------------------------------------------------------------------------------------------------
// VALIDATE TIME (HH:MM:SS AM/PM format)
//
// Ex: <form name=timeform onSubmit="return IsValidTime(document.timeform.time.value);">
// -------------------------------------------------------------------------------------------------------------
function IsValidTime(timeStr) {
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);
	if (matchArray == null) {
		alert("Time is not in a valid format.");
		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)");
		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.");
		return false;
	   }
	}
	if  (hour > 12 && ampm != null) {
		alert("You can't specify AM or PM for military time.");
		return false;
	}
	if (minute<0 || minute > 59) {
		alert ("Minute must be between 0 and 59.");
		return false;
	}
	if (second != null && (second < 0 || second > 59)) {
		alert ("Second must be between 0 and 59.");
		return false;
	}
	return false;
}



// -------------------------------------------------------------------------------------------------------------
// FORM REQUIRED FIELD VALIDATION (SINGLE PASS METHOD)
// -------------------------------------------------------------------------------------------------------------
// SYNTAX
/* 
	<form name="formcheck" onsubmit="return formCheck(this);" action="form-login-lookup.asp" method="post">
	or 
	<form name="formcheck" onsubmit="return formCheck(this);">
		Username: <input type=text name="Username" size="25"><br>
		Password: <input type=text name="Password" size="25"><br>
		<input type=submit value="Submit Form">
	</form>
*/
function formCheck(formobj){
	var fieldRequired = Array("FirstName", "LastName");
	var fieldDescription = Array("First Name", "Last Name");
	var alertMsg = "Please complete the following fields:\n";
	var l_Msg = alertMsg.length;
	for (var i = 0; i < fieldRequired.length; i++){
		var obj = formobj.elements[fieldRequired[i]];
		if (obj){
			switch(obj.type){
			case "select-one":
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "select-multiple":
				if (obj.selectedIndex == -1){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "text":
			case "textarea":
				if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			default:
			}
			if (obj.type == undefined){
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
			}
		}
	}
	if (alertMsg.length == l_Msg){
		return true;
	}else{
		alert(alertMsg);
		return false;
	}
}



// -------------------------------------------------------------------------------------------------------------
// GOOGLE NEWS TICKER
// -------------------------------------------------------------------------------------------------------------
// REQUIRES: images/indicator.gif
// SYNTAX 
/* 
	<!--  GOOGLE TICKER - GET API CODE HERE... http://code.google.com/apis/ajaxfeeds/signup.html -->
	<script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAATmslPGmQJXg5psvYt2RcyxQCC3sEp3zF9rKO9Qv7EICqBSnBIxRC_eOx2HLTw6siqbORhiwAgvgQJw"></script>
	
	<p><b>Breaking News:</b></p>
	<script type="text/javascript">
	var newsfeed=new gfeedfetcher("example3", "example3class", "_new")
	newsfeed.addFeed("BBC", "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml") //Specify "label" plus URL to RSS feed
	newsfeed.addFeed("MSNBC", "http://www.msnbc.msn.com/id/3032091/device/rss/rss.xml") //Specify "label" plus URL to RSS feed
	newsfeed.addFeed("Yahoo News", "http://rss.news.yahoo.com/rss/topstories") //Specify "label" plus URL to RSS feed
	newsfeed.displayoptions("datetime snippet") //show the specified additional fields
	newsfeed.setentrycontainer("p") //Display each entry as a paragraph
	newsfeed.filterfeed(8, "date") //Show 8 entries, sort by date
	newsfeed.init() //Always call this last
	</script>

	<p><b>Breaking News (Live Updates):</b></p>
	<script type="text/javascript">
	var newsfeed=new gfeedrssticker("example3", "example3class", 2500, "_new")
	newsfeed.addFeed("BBC", "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml") //Specify "label" plus URL to RSS feed
	newsfeed.addFeed("MSNBC", "http://www.msnbc.msn.com/id/3032091/device/rss/rss.xml") //Specify "label" plus URL to RSS feed
	newsfeed.addFeed("Yahoo News", "http://rss.news.yahoo.com/rss/topstories") //Specify "label" plus URL to RSS feed
	newsfeed.displayoptions("datetime snippet") //show the specified additional fields
	newsfeed.setentrycontainer("p") //Display each entry as a paragraph
	newsfeed.filterfeed(8, "date") //Show 8 entries, sort by date
	newsfeed.entries_per_page(5)
	newsfeed.init() //Always call this last
	</script>
*/
var gfeedfetcher_loading_image="images/indicator.gif" //Full URL to "loading" image. No need to config after this line!!
google.load("feeds", "1") //Load Google Ajax Feed API (version 1)
function gfeedfetcher(divid, divClass, linktarget){
	this.linktarget=linktarget || "" //link target of RSS entries
	this.feedlabels=[] //array holding lables for each RSS feed
	this.feedurls=[]
	this.feeds=[] //array holding combined RSS feeds' entries from Feed API (result.feed.entries)
	this.feedsfetched=0 //number of feeds fetched
	this.feedlimit=5
	this.showoptions="" //Optional components of RSS entry to show (none by default)
	this.sortstring="date" //sort by "date" by default
	document.write('<div id="'+divid+'" class="'+divClass+'"></div>') //output div to contain RSS entries
	this.feedcontainer=document.getElementById(divid)
	this.itemcontainer="<li>" //default element wrapping around each RSS entry item
}
gfeedfetcher.prototype.addFeed=function(label, url){
	this.feedlabels[this.feedlabels.length]=label
	this.feedurls[this.feedurls.length]=url
}
gfeedfetcher.prototype.filterfeed=function(feedlimit, sortstr){
	this.feedlimit=feedlimit
	if (typeof sortstr!="undefined")
	this.sortstring=sortstr
}
gfeedfetcher.prototype.displayoptions=function(parts){
	this.showoptions=parts //set RSS entry options to show ("date, datetime, time, snippet, label, description")
}
gfeedfetcher.prototype.setentrycontainer=function(containerstr){  //set element that should wrap around each RSS entry item
	this.itemcontainer="<"+containerstr.toLowerCase()+">"
}
gfeedfetcher.prototype.init=function(){
	this.feedsfetched=0 //reset number of feeds fetched to 0 (in case init() is called more than once)
	this.feeds=[] //reset feeds[] array to empty (in case init() is called more than once)
	this.feedcontainer.innerHTML='<img src="'+gfeedfetcher_loading_image+'" /> Retrieving RSS feed(s)'
	var displayer=this
	for (var i=0; i<this.feedurls.length; i++){ //loop through the specified RSS feeds' URLs
		var feedpointer=new google.feeds.Feed(this.feedurls[i]) //create new instance of Google Ajax Feed API
		var items_to_show=(this.feedlimit<=this.feedurls.length)? 1 : Math.floor(this.feedlimit/this.feedurls.length) //Calculate # of entries to show for each RSS feed
		if (this.feedlimit%this.feedurls.length>0 && this.feedlimit>this.feedurls.length && i==this.feedurls.length-1) //If this is the last RSS feed, and feedlimit/feedurls.length yields a remainder
			items_to_show+=(this.feedlimit%this.feedurls.length) //Add that remainder to the number of entries to show for last RSS feed
		feedpointer.setNumEntries(items_to_show) //set number of items to display
		feedpointer.load(function(r){displayer._fetch_data_as_array(r)}) //call Feed.load() to retrieve and output RSS feed
	}
}
gfeedfetcher._formatdate=function(datestr, showoptions){
	var itemdate=new Date(datestr)
	var parseddate=(showoptions.indexOf("datetime")!=-1)? itemdate.toLocaleString() : (showoptions.indexOf("date")!=-1)? itemdate.toLocaleDateString() : (showoptions.indexOf("time")!=-1)? itemdate.toLocaleTimeString() : ""
	return "<span class='datefield'>"+parseddate+"</span>"
}
gfeedfetcher._sortarray=function(arr, sortstr){
	var sortstr=(sortstr=="label")? "ddlabel" : sortstr //change "label" string (if entered) to "ddlabel" instead, for internal use
	if (sortstr=="title" || sortstr=="ddlabel"){ //sort array by "title" or "ddlabel" property of RSS feed entries[]
		arr.sort(function(a,b){
		var fielda=a[sortstr].toLowerCase()
		var fieldb=b[sortstr].toLowerCase()
		return (fielda<fieldb)? -1 : (fielda>fieldb)? 1 : 0
		})
	}
	else{ //else, sort by "publishedDate" property (using error handling, as "publishedDate" may not be a valid date str if an error has occured while getting feed
		try{
			arr.sort(function(a,b){return new Date(b.publishedDate)-new Date(a.publishedDate)})
		}
		catch(err){}
	}
}
gfeedfetcher.prototype._fetch_data_as_array=function(result){
	var thisfeed=(!result.error)? result.feed.entries : "" //get all feed entries as a JSON array or "" if failed
	if (thisfeed=="") //if error has occured fetching feed
		alert("Google Feed API Error: "+result.error.message)
	for (var i=0; i<thisfeed.length; i++) //For each entry within feed
		result.feed.entries[i].ddlabel=this.feedlabels[this.feedsfetched] //extend it with a "ddlabel" property
	this.feeds=this.feeds.concat(thisfeed) //add entry to array holding all feed entries
	this._signaldownloadcomplete() //signal the retrieval of this feed as complete (and move on to next one if defined)
}
gfeedfetcher.prototype._signaldownloadcomplete=function(){
	this.feedsfetched+=1
	if (this.feedsfetched==this.feedurls.length) //if all feeds fetched
		this._displayresult(this.feeds) //display results
}
gfeedfetcher.prototype._displayresult=function(feeds){
	var rssoutput=(this.itemcontainer=="<li>")? "<ul>\n" : ""
	gfeedfetcher._sortarray(feeds, this.sortstring)
	for (var i=0; i<feeds.length; i++){
		var itemtitle="<a href=\"" + feeds[i].link + "\" target=\"" + this.linktarget + "\" class=\"titlefield\">" + feeds[i].title + "</a>"
		var itemlabel=/label/i.test(this.showoptions)? '<span class="labelfield">['+this.feeds[i].ddlabel+']</span>' : " "
		var itemdate=gfeedfetcher._formatdate(feeds[i].publishedDate, this.showoptions)
		var itemdescription=/description/i.test(this.showoptions)? "<br />"+feeds[i].content : /snippet/i.test(this.showoptions)? "<br />"+feeds[i].contentSnippet  : ""
		rssoutput+=this.itemcontainer + itemtitle + " " + itemlabel + " " + itemdate + "\n" + itemdescription + this.itemcontainer.replace("<", "</") + "\n\n"
	}
	rssoutput+=(this.itemcontainer=="<li>")? "</ul>" : ""
	this.feedcontainer.innerHTML=rssoutput
}

// NOTE: From here down is used for news as moving auto-refreshing ticker
var gfeedfetcher_loading_image="images/indicator.gif" //Specify full URL to "loading" image. Overwrites same var from gfeedfetcher.js
function gfeedrssticker(divid, divClass, delay, linktarget){
	this.tickerid=divid //ID of ticker div
	this.delay=parseInt(delay) //Default delay between msg change, in miliseconds.
	this.mouseoverBol=0 //Boolean to indicate whether mouse is currently over ticker (and pause it if it is)
	this.itemsperpage=1 //Entries to show per page
	this.messagepointer=0
	gfeedfetcher.call(this, divid, divClass, linktarget) //inherit properties from "gfeedfetcher" class and also use DIV generated by "gfeedfetcher"
	this.itemcontainer="<div>" //default element wrapping around each RSS entry
	this.tickerdiv=document.getElementById(divid)
}
gfeedrssticker.prototype=new gfeedfetcher //inherit methods from gfeedfetcher class
gfeedrssticker.prototype.constructor=gfeedrssticker
gfeedrssticker.prototype._displayresult=null //Remove inherited method "_displayresult()"
gfeedrssticker.prototype.entries_per_page=function(num){
	this.itemsperpage=num
}
gfeedrssticker.prototype._signaldownloadcomplete=function(){ //overwrite inherited method "_signaldownloadcomplete()"
	this.feedsfetched+=1
	if (this.feedsfetched==this.feedurls.length) //if all feeds fetched
		this._initscroller(this.feeds) //Populate the two DIVs within scroller with the fetched data
}
gfeedrssticker.prototype._initscroller=function(feeds){
	var scrollerinstance=this
	gfeedfetcher._sortarray(feeds, this.sortstring)
	this.itemsperpage=(this.itemsperpage>=feeds.length)? 1 : this.itemsperpage //Adjust "itemsperpage" if needed (based on total # of avail entries)
	var feedslice=feeds.slice(this.messagepointer, this.itemsperpage) //Get subsection of feed array based on how many entries to show at once
	this.tickerdiv.innerHTML=formatrssmessage(feedslice, this.showoptions, this.itemcontainer, this.linktarget)
	this.tickerdiv.onmouseover=function(){scrollerinstance.mouseoverBol=1}
	this.tickerdiv.onmouseout=function(){scrollerinstance.mouseoverBol=0}
	this.messagepointer=this.itemsperpage //increment message pointer
	if (window.attachEvent) //Clean up loose references in IE
		window.attachEvent("onunload", function(){scrollerinstance.tickerdiv.onmouseover=scrollerinstance.tickerdiv.onmouseout=null})
	setTimeout(function(){scrollerinstance._rotatemessage()}, this.delay)
}
function formatrssmessage(feedslice, showoptions, itemcontainer, linktarget){
	var rssoutput=(itemcontainer=="<li>")? "<ul>\n" : "" //if "itemcontainer" is set to "<li>", define a "<ul>" tag to wrap around the result
	for (var i=0; i<feedslice.length; i++){ //Loop through the entered slice of a RSS feed (1 or more entries)
		var itemtitle="<a href=\"" + feedslice[i].link + "\" target=\"" + linktarget + "\" class=\"titlefield\">" + feedslice[i].title + "</a>"
		var itemlabel=/label/i.test(showoptions)? '<span class="labelfield">['+feedslice[i].ddlabel+']</span>' : " "
		var itemdate=gfeedfetcher._formatdate(feedslice[i].publishedDate, showoptions)
		var itemdescription=/description/i.test(showoptions)? "<br />"+feedslice[i].content : /snippet/i.test(showoptions)? "<br />"+feedslice[i].contentSnippet  : ""
		rssoutput+=itemcontainer + itemtitle + " " + itemlabel + " " + itemdate + "\n" + itemdescription + itemcontainer.replace("<", "</") + "\n\n"
	}
	rssoutput+=(itemcontainer=="<li>")? "</ul>\n" : ""
	return rssoutput
}
gfeedrssticker.prototype._rotatemessage=function(){
	var scrollerinstance=this
	if (this.mouseoverBol==1) //if mouse is currently over scoller, do nothing (pause it)
		setTimeout(function(){scrollerinstance._rotatemessage()}, 100)
	else{
		var feedslice=this.feeds.slice(this.messagepointer, this.messagepointer+this.itemsperpage)
		this.tickerdiv.innerHTML=formatrssmessage(feedslice, this.showoptions, this.itemcontainer, this.linktarget)
		this.messagepointer=(this.messagepointer+this.itemsperpage > this.feeds.length-1)? 0 : this.messagepointer+this.itemsperpage
		setTimeout(function(){scrollerinstance._rotatemessage()}, this.delay)
	}
}




// -------------------------------------------------------------------------------------------------------------
// WORD FILTER (Ex: dirty words)
// 
// Ex:
//	<form name="form1">
//		<textarea rows="3" cols="40" name="user_text" style="border:2 solid #808080; font-family:verdana,arial,helvetica; font-weight:normal; font-size:10pt" onclick="select_area()">Enter your text here...</textarea><br><br>
// 		<input type="button" style="background:#EFEFEF; border:2 solid #808080; width:25%; cursor:pointer" value="Submit" onclick="validate_user_text();">
// 	</form>
// -------------------------------------------------------------------------------------------------------------
var swear_words_arr=new Array("sex","slut","dick","gay","prick","xxx");
var swear_alert_arr=new Array;
var swear_alert_count=0;
function reset_alert_count()
{
	swear_alert_count=0;
}
function validate_user_text()
{
	reset_alert_count();
	var compare_text=document.form1.user_text.value;
	for(var i=0; i<swear_words_arr.length; i++)
	{
		for(var j=0; j<(compare_text.length); j++)
		{
			if(swear_words_arr[i]==compare_text.substring(j,(j+swear_words_arr[i].length)).toLowerCase())
			{
				swear_alert_arr[swear_alert_count]=compare_text.substring(j,(j+swear_words_arr[i].length));
				swear_alert_count++;
			}
		}
	}
	var alert_text="";
	for(var k=1; k<=swear_alert_count; k++)
	{
		alert_text+="\n" + "(" + k + ")  " + swear_alert_arr[k-1];
	}
	if(swear_alert_count>0)
	{
		alert("The form cannot be submitted.\nThe following banned words were found:\n_______________________________\n" + alert_text + "\n_______________________________");
		document.form1.user_text.select();
	}
else
	{
		document.form1.submit();
	}
}
function select_area()
{
	document.form1.user_text.select();
}
window.onload=reset_alert_count;




// -------------------------------------------------------------------------------------------------------------
// ZIP TO STATE
//
// Ex:
//	<form name="zipform" method=post>
//		Zip
//		<input type=text name="zip" size=5 maxlength=5 onChange="setState(this, state);">
//		     State
//		<select name="state">
//			<option value="" selected>Please Select</option>
//			<option value="AK">Alaska</option>
//			<option value="AL">Alabama</option>
//			<option value="AR">Arkansas</option>
//			<option value="AS">American Samoa</option>
//			<option value="AZ">Arizona</option>
//			<option value="CA">California</option>
//			<option value="CO">Colorada</option>
//			<option value="CT">Conneticut</option>
//			<option value="DC">District of Colombia</option>
//			<option value="DE">Delaware</option>
//			<option value="FL">Florida</option>
//			<option value="FM">Federated States</option>
//			<option value="GA">Georgia</option>
//			<option value="GU">Guam</option>
//			<option value="HI">Hawaii</option>
//			<option value="IA">Iowa</option>
//			<option value="ID">Idaho</option>
//			<option value="IL">Illinois</option>
//			<option value="IN">Indiana</option>
//			<option value="KS">Kansas</option>
//			<option value="KY">Kentucky</option>
//			<option value="LA">Louisiana</option>
//			<option value="MA">Massachusetts</option>
//			<option value="MD">Maryland</option>
//			<option value="ME">Maine</option>
//			<option value="MI">Michigan</option>
//			<option value="MN">Minnesota</option>
//			<option value="MO">Missouri</option>
//			<option value="MS">Mississippi</option>
//			<option value="MT">Montana</option>
//			<option value="NC">North Carolina</option>
//			<option value="ND">North Dakota</option>
//			<option value="NE">Nebraska</option>
//			<option value="NH">New Hampshire</option>
//			<option value="NJ">New Jersey</option>
//			<option value="NM">New Mexico</option>
//			<option value="NV">Nevada</option>
//			<option value="NY">New York</option>
//			<option value="OH">Ohio</option>
//			<option value="OK">Oklahoma</option>
//			<option value="OR">Oregon</option>
//			<option value="PA">Pennsylvania</option>
//			<option value="PR">Puerto Rico</option>
//			<option value="RI">Rhode Island</option>
//			<option value="SC">South Carolina</option>
//			<option value="SD">South Dakota</option>
//			<option value="TN">Tennessee</option>
//			<option value="TX">Texas</option>
//			<option value="UT">Utah</option>
//			<option value="VI">Virgin Islands</option>
//			<option value="VT">Vermont</option>
//			<option value="VA">Virginia</option>
//			<option value="WA">Washington</option>
//			<option value="WI">Wisconsin</option>
//			<option value="WV">West Virginia</option>
//			<option value="WY">Wyoming</option>
//			<option value="XX">Other...</option>
//			</select>
//		</form>
// -------------------------------------------------------------------------------------------------------------
zipString = "0000000000000000000000000000000000000000000000000000CF000000000000000000000000000000000000000000000000000000000000000000000002000000000010000000000000E7C73C98072C43959647FA5748B0CFB6FFF738420EAB6D78D0E3000F1C0030C0000000000006CFFFFFFEF10EFFF6F8FEF100EBF707CFFF3046BF4FFAF77F7EFBCD0032C018100000000008E0000DF687DB0FFDD400000006000000C0EFDEC01D7AD100000000010C1530C30D9FF200000AF78FFFAD7F640075F00F6500EFFF000000000E00000000000E300C30C007E353104B501000AE5B06DCF0F3C70DF0091E708EF5A0E0E071BE1036E00C30000000C3EC94BBDF97EC1020420EFFFFFFFFFF3FB180E031FF09EFF934000C2000004200810A2E30004BC7EBFF8F7D5886000000000300000E87F7F9DF600F000000000DFF007FE39E1010002000000CFFEFFBAFDFB000000C00FEF700CFF100FDF0A90C006D3F7CFFBF7005EF38FFFEBF5EFFDF300001000000000000000000000877FBBF2F1C2B4D000EFF000000000000000000000000087FFEF6FF8FBF53FD79E2CEB000000000000000000000000000000880FFF976F70000000000000000000000204C9FB796EB300000000000000000000000000000000B6FF106F6A73000E3EFF7F4BFFFFFF5FFF4CF443EFF!0000000000000000000000EFFEB7977EFCFE3E5FFFEFDF7EF711C100000000000000000000C1BFFD4FB04FFFEDC5FFF500000000435EFFFE910000000064DFFFDFC4E1FEBF9BFD2AFB3000000048FA9BF5CBDFD000000EAFBCFFC2D77F75FBFBB7C6000000004FFFFC0FF77FBFE1000000000000ACFFFF300000000A0C96FF7BFFBEF7EFEFDEF3102020000CFFFEFFD7AFFBA7B002000000000E5FFD2000000000200000000000CF27000000000E100000000F7CFFF000000000EF00000008FFFFFF7F7FEEFD02000000000010000000000000E12001002038FF7FFEFF700006000000CFFFFD2EFF7F70000000008FF73FFEFAEFC9F000000EF0000000000000000000000064C2DFFFFAB2E3EFFFFFFBFF5EFFDE9CB76FFCF138001900080000004CFEEFFCDDF30E700000000010CFB10EEA12CFFDF700A3FFFD5C1FF9CCB18FFEF9FF6EFFFF33CF71000000000000006FDD000000004000002000008E7511F700000EFFC040FEFCE529C7310E1150CFF1048FB0303EFC707E100000000000000000EFFFFFDFF9FFCDEFFDFFF8DFBEFF5000000000000008041BFEEF10000000000000000000000CFF0000000000000000000008AA40FF159D55C17F244230084EFF7041424810000000000000EF1003DD10FF733F448000000E1E9FFDDFE1CDF7D300200008E4000FEF7FDFFB396EC!F72400600007DDFD16400F044FB0008EFFDDFEFFFE6FFBFFFFFBFFFFEF70000000000000000000000E14FEB7C50FFD10104000000040CFFFD710FF7307040000000E70000000000000000000000063CD41E5E1F1CEF7040000000EFF0C123043E5000400200C8020000F1CFD70CFF0000000000EB717FFFF3145FEEAFBF5F709E7000400200000000000003000825020B634646D98251346CDDDC508490FD0042072B6D6200008705E24A03410CF28000000E300000000100000001000807002083000008349A17000004DEFF022105183E478F7EF6CDE9A163EFFD05CB20000000000008FFE7FFFF0000000000AF1FF1C3FF9EFFFFE10F40E9015075E0000000000000000000000000EFFFFFFFFFBF18010218784CDEFFFFF7F3400EFFFFFFF0300B80830000004020F32FFF76010EFF70000000000000000000000000000000008FFFFFF000008EFE5FFD5B7FEF3E5CC3FB8FD7EF40002220004000000000000EF70000000000000000000000E30000000000000000000000020CFFFFD30B047DD37EBFF7F7E3400FF400F1CF00000000009E720010000000000000000000EFFFFF7FFFFBBD100000000000000000000008DFFFFFE36400028FFFFFF90080000000010082864510C814AFFFB7F9BF05FF0000000000000000000000CF2EF7EF7FEBFFEEF7DFFFFDDFF7E308800000!000E000000000002000000CFA7DFFFFBFB7100000878FDBBB3FECFFFFFF7CF6F00CD87F3D7FB9FEF7F7FBFF7F7EFF50DFFFFFF7937000000100EF300020000200000000000006FE7FF9FFDF5FFFB7FF2FFEF5EDDF7FFF66FFFB0AFFD6F7770E10000000000000000000000020008FF27FFEF5CDFF8FFFF10A1FDBF99FFEFFFFF7C7C8F000A0CFFFD7FBE76BF7F6FFBE2B7000007DFFBF3873F7B77F9730E9DFFF5ADFFF1FFDF00000000EFFDE3300001C103000000400E37FFFFBFEF65F2FB10000000EDFA7379AF706DB33FBFD7FF0E300000000000000000000008EEDFFFFDFFFEFDF7FFFFFBDFB0000000C7F9FFF7F00C7DD5C3EDFF01E4FEFFF09F300000000E300000000000000000000000A7F303FFFFF89DFFE790F68D4EAF301EEFDB3C000CF7000000EFFFFFF92030000BB63110000E30000000000000000000000000CE5DB7B2A2671EDF9F7E3004FDFF7E67FEFF8FB1B1016F10EFFFFFF00CCFE301102080050EDFDFFDFBFFBDF71C6DFEF100EF7FFFFC0FFFCFFBBE7FFFAF6E300002000000000000000000AF6DE7FDF7CFEFBFFBD7EFF8165511DCEFBDF1000000000200EFFFFFFFFFF1CFEFF5DFE640020CF3FBE7F7FF7EFF50F1000020CBBFBFFFDFFCDFF7FFD77106040070CFF7FFFEF30000000026CBFFFFFF7D485F7DFFFFFB722CF3FBF7F7FD7FFBCFFB10002!0000EBB503EB23B7500000006F280FFFC7D7BFFF000000000E0007FB7EF36FFFA400000000EADF3BBC73F6DEB300100000020CF7F77FD577EFF0000000002087BECBF0FFC707FFF000100EFCB3FD5F5F10000008000000EFFD040C74254648200000000E086BFBEEF3FDDBFFFFEF7AFC200001FFF497F000000000000E3000FE7FFBBFFDB7DFF6000020CD6FE7BFFE5000000000000EFF7FFFFFFFFBFFFFFF7FFF6EEFF30FF70010000000020000020CFAF3BBFBDEF3FFD1000040EDEFFFFA7ADF6F5F7D9000000EF08000000000000000000000EF31F783F79AED2DF7BFF3000EF10000000000000000000008E2000FDF8EDBF5DDBB7F00000204F0FBFFBFFCAF7F517FF30020000FAEF5E7B7ABF55DF2000E0CF712CDFF7EFDDFF7FBF91CE72000000000000000800008020C5DF3EDAFFFD1000000000020000FFDF3FDFF310C3000000AACEB3FDEFBFBFFF7E3000000EB7DE40000100000000200000E0CDFEFFD1F18E33000000400EFF000000000000EF36000000204F7FFF7ADFD60000000000020CF7FFFF5DDEE7D5F5B30800ED7FFFEFFFBD7FFAF4FDFEFFDEFFFDFFFFFFFFF070CBEEB973000000000001080000000000020C1F10CA8FFDF6DEEF1F048EAF300F7797F5CF3535F6FF7F1AFD1FD66EDFBFCA5B00000000EFF1000000100000000000000ECFF736CF10000000!00000000EF7000000000400000001FEFFE300000C6DFFCF5FDFAA10000EFFBF156BFFFEBFFFFE770D0EEFFBF71FDFFDBBD9FF977FDFFEDDFFFDFBE73C407650200208AC4CE0041710400004F010FF4EFFFDFFBEB798219071000000FF580FFCFFFDFFE16CBF36C6AFDFBFFF7DB9642F794C75F7B2AFFDFF78B7FFFFEC3FFFEBD4A000F70B43E68FFA749DFD7ADFEFDF500000000000000000002226F6D8FD3FFDF3708C75B57447962D0D39154F7F000000000EFFFFFFFEB31C10935ECFF7060000000000000000000000000E381000000000000000000000E3000F1F1DF248370000000002C63ADFBDDBBFFFFFFBFEF500E3EEFF80677C7CF4FEEFF9DF6E1C6265687F0E33EFED000400E18FF70400000000000000000C02800CCFFFD0001C008600B1E420D730C000C3D30010F38F8EFEFFCE640F70000000000000EFFF030871000000000000000EF110085B7C494190A3172100A9B62957CC4F1F41A41F30000E1C00DF40EF76D3910000000020AFDFFFFFFC300000000000068C9039CF0FFF200000000000EFF00D189FDE37E9BB7118200E3AC6EBC9C9A4CDFFF99A7E30EEFBB9FF0C3C7E1F07A7BFD100000CFFFF770680346FD57F76ED5E1FF1032A44F000000028F2B7FFFDEFFF0CDFFF908DC100EFFFEB0600208000000000000EF31000D0000820EF70020C71EB300000!00000000000000000A700069F7FFFC031C5FDEBF6E2028AF944FE94DCDD54100000EFFFFDFFF7D35ECFF73FCFFF0638F07DF7FECFA36A9CF03000E0E9F3750B87D0596E3AF2630208FFCF52098D50B45EE70000688B164CBE7250E9BB7BCF000E70F2FCFEDB1EE7C6E5F367FEEF37C59DCA3CA070000000000200D905A3F188000000000000209A7FFF59EFFFB7CF7EF93DF6048F1B8C5E7C46E4443A7820CBF8C67DA99FB6AF9C89E65A0CCFFCE7479F875973362FE020E7B60008C8ABD3D7FD89AE000E7AF2FFFFF00407730800821160C68FAF56F50000000000000EFDDAB56C23B48A5BE30000002C952A35DF0FE702EE554ED5BEFFFFFF3000008000CFF0000060C379E83BBFBEB57DAD500006DBFF7C955C08046EA1F273008000000CFF3848D504C000000E7000300E7ECF98796A43D000E678E417472046ABDFA5DAB7564000BA5DECCF40642D7070000BD9967CC799911A000000000EF1087BAE2ED0C8F4DD56EF0020C9EA9A4D20801588CD31C000BC4B54848804A2A900000000695D6810250A890060000500000000000000000000000000000CE7FFBD00FEFF0000000004CEFFE31840000C93000000000CE93F310FAAC933DF3004E3BFC66CF3F6C00F1E8F30CEB00000EFFBB1A28400080000001008CEFFFD77E71F7ABBD3F33EDB7BEFFF9FF3C110405201810048!EEFFB240000000000000000000EFF7FFFFFFFFEFFFFFFFFFFF30C68BFF79FED76F5F77DF60006C61FBF87FF00F100CFFF4F36EFFDA9F7EF0FC189D76000000EFFFFFFFF3FD4E5766F6FF70BEFFCC9EFFEFBFBFFFFFFDFDFDEFF10F3FFDEFFFFFFF1C10000E1FBDFFF3EFF8F3F1CFEFF640EFFBFEFFE7FFEFFFFFFFFBF7E6BFFFFFFFFFFFF7F6DFFEDF30E74E100000000000000000000E720000000000000000000000E46C510C3F7F9FDEAEFC700006F9F7CF7B6CED70F5F9710000EFFDFFF700104001000000410EF00DF3EF574BA1137FF07D80EF6FFD7EFF5EFB727FDBEB130E7C1D1E511FFCC19FFFFFBE77EFFF3FFDFDFFFFF6FEBFFFFB7C57D77DF70E30000000000000E373B6DBDDFFF213000000008E7CF5FFBFDB30000000000000CFFFFE7FFFFF1D5FFFDFFFDFFEFFEFFF2FEFFF72E3DBFDB300070FFD177730D3FB7BF32FFF7EFFFF7FF7FFF7EF75FCF1F75D20CF2BF34D6EFFF39CE200008EDCFFFAFEEFF3FEDF9B37000FEF318FBFECEE581DFB2690000AAD0877DFD7CCB30000000000CEFFFF1520000000000000000AFE7B00000000000000000008EFFFFFBFFF7FED6FFFBFEFFFF0C008048082640100000008BFEFF33300000000000000000CFEB7FDFDB20000000000000000EFFDD7000000000000000000CE04BDFB0FACFFF7BF3000000CE7000DFEDFEE700!000000000CEFFF7DF7FFFFE7FFFFFFFFEFFAFDD1FFE31000000000000000EF342000000000000000000EE09B20034E4F54FDFF938CF8DB42CFFFFEFF7AB0E117EFFA6B4EFFDFFFFFF3F4CF1C00300400EFFF3FDFF3BFDBF7000000088EFF32FFDFEDF3DBF700000000EFB71F5CEF79708FFFFFF0FF7EFFFF6E9E8B11E5CD300B4073ED7FD7F5BD0DC5BCF9FFF1EFDEFFFF7FFFB000EF783160CE2EEFF18DF8D330FFFFFF050000061FFFFFFFBF3CD1FFFF3E143268E596FFFFFFFFFFF7FFFF7FB000000086CCA0832620090009EFFFFFFFDE16B880000000140EFFFF7FFFFFF1CCFFFC7FD12F80E60AF44EB97010FF718F0F6EFFFFF7EE208C80F10FA7F742EFFF100F77F908FFFEFF77000EFEA09ECCFBFFFFDAD32F3500EFFFF79D950FFF312C90F0C60C0200F3CFF70CE41000E04CBCEF77B100EFF60000000000000EF78FF1FFFF0C001F5D77F0B0000000000000000000000000000000B0F714EF3033CFFF9B140000000000000000000000000EEF6000009000F13836AF3F860283000A4BFF3AD70E360E302000000000000000000000000000000000000EF7700078EFDD30FCE9F08F5F7BF7F1D7EDAA47008DFBFDABCDF00308BDFF100EFFFFF7FF7D72E8B400EFEFFF0000000000000000000000000EF00000000FD33FF5FE77EC00E100000000F7FF893CFF7F070E0EFF7!0C709EF7070C720000800000000087FFDFFFBF100000EFFF1010000000000000000EFEF0000000000C7FFD9FDBD700867A3DFFFFFEB726FB9CF8B30EFFFFB3CF0700000000200800EF0000000000CE7FFFFF10000E3C7FF0C0097E3070CE100000200001EA9967AE778CE3F0000EBAB4EF7BDFBFAD79FDFFF400EFFFFE6D203101090C8002FA0E0000FC11573F7DEF3ADC7430E100000C1000EFDFEFDA000002D5B96200000000000000000000CFDDFFF3FDF9FFFFFFDEF8720C8D68FF7FFFB07E8DCBFF00EFFFF797DFFF7000000000000EFFF7FFFFFFAFFBFFEFFFBBC7EFFD9610000040000000000002000000000000000000000000630C732000F340FD3200FDD582AFEBEFE36C31F3D7E7E00000EDEED77F00FEB72FFF7F7ED30602DFF9F3C1040000000004876DDDEAB74B7F7FFBCFCB90100AFFFF5FDFFFED1AAE1E2ED5E220000F7EB7708EF3080020000E2DE73DF7FFF99FEEFDF78F30600000200000EFBF1BF7EE100E700000000EBFFFDB7EEFA300E4E4EFEFFEEFEDCA7FFB96000E1000F6C3F17B6DFBB7570000E10003F3ECADFDFD7FEF10000600F3FF780BFFFEFF00000000000000000CFF84FFCA7EFC5D708FFB7040017F7FFEFEBF0E70EFFB7020910040000A10C5305EB200DF59F6E5DDFF00000000ED000EE30BF089BF74CFF0000EE00072EF0000B5FFB7320!080E000000EB4AA373EF30000000E34000048BBFCF95CA3100000000000000000000000000000020000000000000000000000008DF7CDE8333EF9FFEF870000009F8E20000D74BA73C8700000EFFFFF3B30E2CBF24710FAEFF00C3B5174B5CDAFF4C599FC10C3608E00425F111391B125390CFFF3C502105480000CFFFFF1E100C700000000000000000006000001642FF9C880A0000000AC5AD9DF009B2C5C256000000C40E0A8C98B5AA44301AE018AEFDDF40CEAF7BF9E38F1B68FF620402939AE560915FE8B0200A10C945D54104C3DB9400000028C620003C499105F102064020052866020018080301200000E007A5D9CEDD3EEFDB1000000EF09960C91DAEA89C2000000060078EAE899EA48D50F7000000149A679FF9B38C60000000000000000000000000000000000E0000FBBBF3FFE5B5E0DEF100E1000D9FE070C7B9DC0000000EDECBB00D13085B6E4E19E100E1000FF57E8BFD12FFD700000C5F281080373CBFF100000000E000D00128210240F00000000C000000AF4482200000000000608BF75BB0F43EE63001C510000000000000000000000000000000000000000000000000000EFFEFEEFB33F5C57FD77F7024EEEBB8E587DFFF7D100000008EFEFFFDFD11080016D18088086CCCFF7CF7FFF0F1000000000CC57110CFFFEE17DF3000000067C9FFFFF3FAF!F71EE0000000EFFFF91080000FB3C0006000A6082FFBDFD1C7DF7D93EDCB20C381061513D30000000000000EE7F31EDFEFFD30EDD73A7300A3C12E55B93F7F37B5737F7FBEFFFFFFFFFFF0000000E27FFEE0CD3E1CF7F0CE5574F57E100EFFFB7616000000000100002FE7DB7DBF1FF7EF010C20EFD30EFEF00000000080000000000C2CFFE7FF7FBFD7BFEE9FFAFAAEFF543048000400180000000CEBAE75F52FFFFEB7FCC4F8700EF00000000000000000000008E38F496479F1CF1EFF2000008EECFCF0CB45F5FF5FB5300000EFFFFFFFFFFFFF4C9FE20000DEFFDFFFDFFFFF7DFAF76FB700EF7FFDDFFA3034C8068860400E7000000000000000000000002007FF1F65DFD7FF0AFEFF5FF20CFBB92D8F74003DFBFFD3006F7FB7CDBFB7FEDFFFFBFFFEF0000000000010000000000008208F700CFD3FF97BBFD340000CFCF6FFFA0DDFC7FFDB1F5000EFB4FFFFCB79EE9141C6D2C85E9D18FB0007E791369FBF3C70EFF00000000000000000000006DDE30DD5FD74F1EEC7070480210FB153C2000001000010008E7C60B2C36FE588BFE7FFFBFFEF3CD0208002CFFFF3000208FE1CFBF4FBFFEC3E7ADCE5FFD5A4C1FF3CFFF000010000000004DDDFD7EFFFFC00FF4D200408E00009FFD19F600F3470F0000CF1005FCCF779FF7CFE0FF571EF1003DEFFA6BFFDBF0000400200F!9FBB936EE37691EF37D0720CFF10EEE183401640080000E7DF97BDFB394000000000000EBB7000C777EFFFF7FDD73000EF207F77FFF5FDEDFFC7FDFF3EF2D2EE5DFFFF48FFFF9F5EFFAFFF7FFDEFB7C7E7F6EFDFF96EFFFFFFFFFD10C41F3DE0018AEDFF7FFFF1FC52BFCCC3FCC2620CFFFC7FF77EE7FFFB100000EF20800A1000CFB0000000000EFFFFFFFF378EFFE844004000AE500FFFFFFF7CFFF700080006FBBFFFEF7FFF7FFFCFFFFFF32CFBF61622004010000010000EFFFFFDFFDFECB7FFFFFFBFFFED8BB3E700000000000000000E1000397FF7EFFFEFFDFFF300EFEDFFEFBFFFB830000000000E7FBFFFFC3F7FFFB110000000EF7D58240005580100000010820CFFFEFFFD7FEB9F5EBD77012EEBFFF7EF9FBBB777CFF7DBB6E1FF7EAEF3A3F4E7D7FBF8F1E2DBF7AEC44E5BCFBF0000000EEFF07EBFFFDFDFFFFF500000EFF9FDFFFFFFFF7FFF62000062CD7FDEFFFFDFDFE7BF700000EFFFFF2FFD18408F9300308F760000BDDFD3DFFF3FFBFF100020CCFFFFBDF795FFEFEFE6DFEEFB79FFFF5EBFFE7FFF370000ED000000000000000000000082000000CABFEB6EF1000000000000000001184000000030000EFFDFDFFEF3FFFDF000000000E7B00000000000000000000002000000CDEFF70000000000002000000C64FFEC697000000002000000C39FFFFCFE000!00000E0400BEFF3F7FFFF7CFF00820E000000C1F1EF710000000000000000000000000000000000000000000000000000000000000000000000000000000000000E100000CBFFF7F317FFF0000820000008F17DACFF7F9000000EFFFFFFBB3FFBF200000000006E7FFFF7FF7FFFD6000000000EFF000000000000000000000E2000000CE7D1FF3FEF73B7DE020008BFC9E7FFFF1000000000200007CF3F4EFFF3EB7700000EF300000000000000000000000000000000000000000000000EFFFFFDAFF5FF1FF76FDF6FFEE37CC7E71EFDF7F08D1FEFFD0EFFFFFF1E20000888546335A00000000000000000000000000EF10000000000000000000400EFD97FEFF7FFEEFF6EFFFFFEF0000000000000000000000000EFFEF06000010000000EDFF70EFF373F00000000000000000020C2BDFFFBFDFFFF330000000EFEF3FF100000000000040000EDCF8BFF8FB0EFB76EE250000EBFF33C7D03E0000000000000EF92001000010000000000000EFFF7FF7FBFDFDFDFEF93FFFC208FA3FE5FFE5DFF710000000E0CFDFFFDFF7FFF7F60000000E0000FFFFFFFFCFFFF70000002647F7D7DFFFFEF6BDF110FA1E5AF8ECFF3FFF13FFFCFF7400EEF7F3FE37FFAF39EFFFDB710EFFFFFF3200748027F9248F000000000000000000000000000EFFFFFBFFFFF7FFFFFFFFFFFFEFFFFFFFFFF!F7CC1057C9F100000000000000CFFFFFFFFFFFFEF2F100000000000000000000EFF3FF7CF56FF379FB9AFFCB7EFDD100000000000000000000E761EFFAF9FFEFBFBFFBEAD10ECE6BFFFFBEFDD7D3BF5FBF2720CEFFAB5FFFEBF7FFF7BE00028FDDFFF9BB7BB7DFC6FFBBF3E9FFFBFFFDFB6FFF9BFF6F2AF2000002CE7FD7BD2F7FE6100060CEFFBBE7FFF73FEFFFBFF7020008ACF6B2DEFEFCF3DFF10020CF1FFBF771DCFF00000000000000000000000000000000000000000000000000000000000EF4F77FFFFFFFFFEFFFF00000AF786000000000000000003F76007FBF8FFEFBBFF7F7D00000208FAE7FDA777EFEFFE9F7008600007D7FF76FD37EFFB2000020000F4B77F99BADDF5F1300020000F6F7DFFF3F3000000000E424F536976BDDDFF6FFDAD78000000000000000000000000000000000000000000000000006FBF728EBDFEB7FFBBDF20000CF300E7000000000000000000EF57DDBFAFB1ECF7EEF76000020C2FBBE9EA79BBEE75A77000620A5F7F3DF39D5BD0DFFD7D36F000B1FB47327CF7FBB3000060000FEC5DFFEF10000000000EBC35EACE33D59FF2FBDEB7F06000000CA48B27100000000000000000000000000000000000EDDFD5FFFFAD4FEEFFFFEF300EF9D300000000000000000000208FEE6C00FB5FFF04E100000208FFCD43FABB600000000000E7!C5F7B4F1FFD73FFB7ADF20020000FFF965F000000000000061000978FDFB1000000000000E8CEF7BFB9BEFDD7083000000ED110BFFF3FF9ED9FDF000000E1CFFFEFF30000000000000006FFFF76EEEFFFA17BFFFFFFFFEFFBFF6FDFFFDFAF3DFFFFFFFE130000000000000000000000E3000000000000000000000086CF9BF7EFFFFFFFFFFFF704082FCFFF6C5FF7FFFBF5100000EEFFFFF7F7FBFAFBBFFFEBBD6A2C05000400004000000000000830000800000000000000000060CFE7DFFD77FFBFD760000002CDFD3BD1FEDF7EFBDFF3BB00EFFD006C100000000000000002100000CFFF1C5FF74FFE300820CFFFFFF77776DF9FFF0000060CFFFFDFFF8FFC5EFFFD7F002000F97FFBFF5FCFBF1000000EFCF0027FFB1CF1000000000061600FFFFFFBFFD31EF700C08E0CF777C78FFFFFC7CF7D100000C7A13F37F1AA3000000000064EFFEFDF31FF7DFAECFFFFF60000000000000000000000000EF1CFF7C7FFF7FFF7BFEF73F626C7DB764DBFBFFFE4ED1000020CEEFF9FDFFF5CFFBEF3000020CFEFFCFFBFFF7BAD300000020CB66FFECD1E89FFDF2E7FF0EF3ADF400904003EF20324841AEFDFFBFFFFFFFFFFFDFFFFFFEE7FFFDDFCFDFFFFFEFBCBDFF26CFBF7D7FFBFB336F7A19F08EFFFFFFFFFBFCA79DA0E5018F0000000000000000000000000E10000047DEFF3AEE6!2FEF7002000000CFFFED7FFFB70000002000000CFFBFB9FBE0000000020000FFF3716DE1F74E000000E20000049FDFDB49DED9FB00020000FF76E3EFB2DCFEF7000060000008FFFBCF3FF00000000208FF717C310DF7FFFFFFF73766F7FBFF7F6FFF7BFD389BFFF0000000000000000000000000000000000000000000000000060000FDF7FFFBEFAEFEFFFE7FEF1000000000000000000000020000D3DBFFFFFF39D79FC30020000D75ECFFD99EEE1FB1700E100000CF1F97EFEF76000000000000000001000000000000820C67D78DFFCFFCEF3DFF3000EFF0000000000000000000000E289700C3B9DDCFF34CDFF00862000FF6FF1BFC01000000000602000002DB523BE55288500020000002D1F459B1FC30D4F00AFFFFDFEF73F7FFFD3F9767106FDF2FFFFE7F0FB7FFFFAFF20EF7420000000000000000040C00000000000000000000000004C5FFBFCB9FFF75FDCBF9EDF2E7EBE00000000001000000000EFFFFFF00000C0000009C60000000000000000000000000000EDBFFDFB5D70E000000000000EE7D7FD9FFFDFD00000000000AFFDF7734748034080808401820C731B1FDF4BEFF8EBFF000020000004ECD6EFFF7F300000020000004BFF7BBDFD50000000E373FF7F8F6AEFFFED7000000EFF5ED99F6DDED90000000000EFFFFBCDB10080B100870000020000004F!37FAF3B10000000060407DAD1FEFFDF1D5E5FBC1063CFDF76008F57BBF5FDA300020000EEBDEDFF6FBBEF0000002000000CFFBBB37610000000020000008CF75EEAFBF0F50000220000000000C700000000000EB7CFD6FEF7F5CFEFF3000000EFF7FD9DFF4B0D20109DF00040000000000000000000000000AB6EFFFFBFFFFDE7FDD770000EF6EFF1F6FFF5F7FF00000000EF753FDB1041000000108010060000FDBF7F9BFCFF2000000060CEFDFFFFFEBBFBFF7FBFF10E04FFFF9F7FF7FDF7EFDF000060000DF7FFFF7DFBDEFF7000020000FFF7FF70000000000000A0000FAFF4FFFF3FEF000040020C5F3000000000000000000020000008EBBEFF7BE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7E0000C3FFDEFFDFFBDFFC51000FFEFF08F6F7FFF4DFEF68000000000000000000000000006040000008F70FFB18F330CF2E10007CAE7EFFFFFFE0000000EFFFFFFBF6F5FDDD0E87F7A356EA9100E7EDFDFFF3300000000DCDFFE77F99FFBFB6F7FFB10EFFFFFE8A30000000048810F50000000000000000000000000ED30DABF7F9FF94BFFBC50000EFFBC106E700B71E781000000E8F3CFE6F6FAE69B57BB758D0!EC281DFF69F6DEFFEBA600000AFECFCFFFCBD7DFFEBFAB60030000000000000000000000000E083000C8CDDEFFFECC7000002080077D00DBF7CCF7100000060000DE9FF7F8FE7700000000E0660F02B2F7E3F77F300000CEFCF7FFFBFFF9BEBFFFDFF308EFDFFFFFFBF26371F7ADF0608EFEDBEA800000000000000080A0CF97FFBD7CDFC1F77BAFED1E1CFB6FFFFFBEEF7FEFD40000A00BBFFF7FD74E37FBBFAB00060CAB85FFD73DEEF479ADE000E18DF687FF7BA37777610000060810BD7FEFE8F79200000000E716FAD5F7BFF9F0000000000EFFFFFDF75FBFFFEFFFED76FFEFFFFFFFDBFFFFBDB63E136EF00000000000000000000000002000000000010000000000000E0000024FFFD7ADB000128900EE000FCF7FFDFFF7FFB000000200005F11C6FDCCFD32000000E600F5DFEFED6EFF5D300000060000000D4F99BE1000000000200000083E4FE000000000000E7FF7FCFFFEFDFDFCDFFF3000EF5DB3CFF32E7BF00E10CD27000000000000000000000000002000000CBEDF6DCFF70000000E0000EEFD77FCDFFFF120000060000E2FE5DE2FFFAE5700000E100000C33BDC30000000000060000FDFE7BA5F93500000000610043FE7BD3FDB1FBB4B10006000000C9BFFBEBD7000000006CFEBFF7DEFFF77FA7C7FEF7EE74CFBF0D6FDFFEBF3307A200EFFDFFFFFFFFF34F!F4828F0C0A04B094009440EB99D7D7CFF7E9EF7F7BFFFDFFF70FFFFEFF3AB0000000000CCDFFF7000008EF18000C2FF9C7FFCF10FFB70EFF300000000CCFD7C3CD3F1C60000008FC1FFBD7200055000E108006FFFEDB4DF53FF10400EFFFFF09E9B1FFCBFD264D1FFEFFFFFDEF318580E100E728BFEF1000E56C3FFBCEFD30000086EF0000000008529FE7A13300600000DEBBC77FEFFFD1AFC00E392CDFD6EFF7DF2FE6E0000F00000EDFFFF3FF33FCAF7FE30EFDD10000000000000000008EE1000BB953633FF6FEF6DF500E7300004FBB2EA60000000000EFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000EF7BFFFFE7F3BFFEEFFA79F3EE70851E9FFFFFEFDBBFFFFB2965CFED4FF3FFFFFFFFEFFFB73EFDDF70CFD6EEF0F79F6FFD16008FBCFE18F0C8BF340000000EF72016000000000000000000EE10000CEFF34BBEFFBD70000E30000000000C42F9FFFCFFE0EFFFBEF308F76FFFFEF10000069BFFE3CB0FFDD9F100000000EFFFFFFFFFFFFFFF778C9FBFF00000004BDF9EBEF1FFBFBE20EFFFF0C00000000BEFF710000E3001F408F9AF3EFF7BFD7FFFCFFFFFDFDDF7DFFFFEF3F0800E3FFFFFFFF6FFFFFFB7CFE300600000877FF8C3030C3AB700000000008F4FFF7BF000000000EAFFD6BAF9F787FE753EFF9F7EFF4FB1000000089FDD47F20020000FF!EFFBBD9F200000000000871D7E0DCFCAF9DE3FF0000EFFF181400000320100000C28E7D1F3E7FFBF721FE00000000EF1000000000000000000000EEFD7C30CECF33DDF771FF63000000020CDFCEFF00000000000EFDF7DFED7FFFF4341E7DFFFFEFCFF7FDE77F0000000000000EFC17FF9F700CC0F600000000EFFDFFFFFFA5FDBF7CE830CF8ED740E0300000000000000000E0008FF7FFDDBFBAEFEFF8106E1CF3FF5FFFFE20000000000020CD0F187CD7F70000000000022000FCBF3FFECE00000000006B7FFFFFF130000F500000000AFFFF76FF3FF6005040200082EFFF8FB66DFF6DECDA6369E1060000FFFF7BDBF2000000000020C90FFDBBFD930000000040060000BFFD000000000000000060CEDFFFF0000000000000000E7000FF00000000000000000060C90B7CBFFE7F70000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE7000000000CFCB0C30E10000000000000000000000000400204FEEB200D1000000000000020400EBAD100000000000000020C50FCDF0F04000000000000204F1910000000000000000006328010CAFD5300000000000020CF7BAE1000000000000000020000008FF53000000000000060000C2EFFE30000000000000608700200000000000000000020CFDFD1000000000000000!00E7EF6BC7FFA7CF1E0857AE000E0875FB5F7FD7F00000000000E7080FBBE5FFFD0DF3000000020000D7CABFFBF000000000006FC9BDDFFFEBDF334E131C000EFBFBFFFB0010030000000108E7FF1EF4FBFFFF77FF73001000000000000000000000000000EDDE7FFFFFFDEFFFFFFDDFFF6EFFFFFFDFFFBD3602C001160820000000000100000000000006FFFFFFFFF300000000000000EB3D00000000000000000000020CB5FEFFB500000000000000E7000FDFFFDFFF3DB0000000020CFFF7FFFFFEFFFFCF9F1C0000000000000000000000000000000000000000000000000000EFFFFFFFFFB7DE0FFFFF5E00E0000000000000000000000000EFDFBFFDFB6FFFFFDBFEFBE19EFF34FFBFFFFFFFFFAFF7A40000000000000000000000000006000000CF9FFD700000000000EEFEFFFFFFB75F040C0000000EFFFFF7DFFFFF500008200000000000000000000000000000060810DFFFF700000000000000E1887F3FFDDF070000000000000000000000000000000000000000000000000000000000000E3070FFEFFF08000000000000E78300CEFFF70000000000000CFDD0100841B201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006FFF7FFBD7FFB3BF151080000EFFFFF38000006!4000412BCFF200000000000000000000000062CBBFE100080020308000000604BF30000000802000000008F7EFFFBFBE93B775FAEFF0050000000000000000000000000020CF4C1FF1DE630000000000020000BBF100000000000000002000000CABF00000000000000E7B10FFF7DFFBF5E201000000E00FDF74F100000000000000060C2030C10714F1DB1000000020C57A340FFFFF0000000000020CCF6DEEB20000000000000000CFFBFFFDFF7EFFEFFFFF7800000000000000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000AFFFFFFF39FE3300040000000EDFFFFFFFEEFFF991422128A8000000000000000000000000020CCF00000000000000000000CFFFCFFFFD5FF100000000001EFEB0900200000200400000880000000000000000000000000E787020000000000000000000E0080F7DF00000000000800000000000000000000000000000EFFFFFFFFFFFFFFFFFFFFDBEBE00000000000000000400200060E30F1C387AFC0FF4D610CF1EFF3000000000000000000006EFF0000000000000000000000EF70000000000000000000000EF710F1C3E10C1872C0010000EDCF3B0870DF3000000000000EF7E0408F05F12000000001000000000000000000000000000ACE13B3C00F4C000400200000EF7C7!A7A0000000000804FB00EF74067000000000000000000EFF397FFE2F7CFFFB813F71F9EFF318400100000004004008BEF500E4000000000000000000EFFD70000000000000000000064FC5C1EFABF7DDEFFB517FBEE100000000200000000000009E6FF3208F0EFD00C000F184008936CFF72F14ADF3FFDCC7D31EFFFFFDFFFDA6FCFFFFF4DCFFE0C00DECF9F1EFFFD5E7F70102BFF7FF3FF7E45F87BF747A7EEFDF499000000000000000000EF3EF60C1987BF3E9C10EFEB9CF4DD9F7000CFFFF00FF93D76EFF1000180000000000070008EF9D3E28F7F740BFFF0EFE0080000000000000000000000000EFEF1F1CF0F1000FF00000068EEF0730400104001000000408EF59DFFCDEFFED7FEDDFDE810EFB30000000000000000FF700EE710FD7F7FFFF7B300080000634FFCDFD9E7EF5F000025C19EFFF5FFDEEFFF737F7A000000EFFD77F3003B488738FF55C7000000000000100000000001006E190FF530D14E05000000000C2CDFFFF8EF3008FFC409C70DEFFDFFFFFFFFCFBFFF92001008FB00006DB9F77FE8B6EDFFEFEF70000000000000000000000EF300000000000000000000026CFFFFFFAFFFFBFFFFFFBEF9FEFFFEBF000802087400000000EF71010000000000000000000EF10010000004000000000000A10F0DFF2E7EFF397CFF0000CEFFFEB5CBFE7CF1FFCA30!0000E4FFFFFFFF70DFF31C3000C71EFFB8FFF737EFF60820000407AFEFFFF7E7FFDF7BF7FDFE702EF79FFFFBBE7F7FF7F317E572E084C2F957DEFFDDBF200A280EFFFFBFFFF77DFDFFFFFFFFFFA02F275181EC00CC20010000C000FFFFFF7F08321F02008048A04FFDFFDFFFFEFFEFFFFD930ECFEBFBBFE3DFFFEBFED1FFFBAFFFFFF7F3F6DD77000000000EF1FE310000080E5DA858100204628E650788F004B5FF0D100E0000000000000000000004000E99670ECFF7BF600080100CFEFF92ED3C0C9302FFFFFED004AF7FF7EF7EFFFFBFFFFFF7FBBEFFFFFF58FFF76EF00000000400CFFEEF10F1C1010400000006FFEFFDFFF73FE7DBD8710000ECFFFEBDF7BF3000000000000EFFFFFBF35508ED0CB10F4C7DEFF702FEADEFD9E7FFF7B7F51EFFFB9FFDFFDFFFFF73F7DFFFE1000DFDFFB10000000000000E1000FF4FF30000000000000068F1070CFF30C7D30000000002047EBFDEFF750B6B7F3D7000EFF6610000000000000000000EFFF8FFBFFFECFFE3D30C0030EFFDF67A75079C435D4623D8CAF100FFDBFBBFBFFDCFFBDDF383CD0FFFBFD7FFFFFDF7FF5F7EFBB561C2CCF4801F8022003EEFB315DDBF7D5DFF7F9BFFFBBEFE7BF7B9EFBF00FFDF0CF0000000000000000000000000000688FBEDF73BFFBF5000000000E9300F66FFFDD300000000000A7BFFFEE7B10!0000000000000EBEEFEFFEFBDFFFBFE6932000EFFFF9110000815100000000860000FD7B7AF73BF080000000E000000000000000000000000EFFFFF10001CFFFAFBFFBFF08CFFF87FDFFBBFFFFFFDFFFFF2EFF51FF67FFFFFFFFFFFF7F00E08003F6B1304000000000000A000CEE300004";
stateRange = "00215NH00544NY00795PR00851VI00988PR02791MA02940RI03897NH04992ME05495VT05544MA05907VT06389CT06390NY06928CT08989NJ09899AE14925NY19640PA19980DE20099DC20199VA20599DC21930MD24658VA26886WV28909NC29945SC31999GA33994FL34099AA34997FL36925AL38589TN39776MS39901GA42788KY45999OH47997IN49971MI52809IA54990WI56763MN57799SD58856ND59937MT62999IL65899MO67954KS69367NE71497LA72959AR73199OK73344TX74966OK79999TX81658CO83128WY83422ID83422WY83888ID84791UT86556AZ88441NM88595TX89883NV96162CA96698AP96797HI96799AS96898HI96932GU96940PW96944FM96952MP96970MH97920OR99403WA99950AK";
function getState(zip) {
	if ((parseInt(zipString.substr(zip / 4, 1), 16) & Math.pow(2, zip % 4)) && (zip.length == 5))
	for (var i = 0; i < stateRange.length; i += 7)
		if (zip <= 1 * stateRange.substr(i, 5))
			return stateRange.substr(i + 5, 2);
	return null;
}
function setState(txtZip, optionBox) {
	if (txtZip.value.length != 5 || isNaN(txtZip.value / 4)) {
	optionBox.options[0].selected = true;
	alert("Please enter a 5 digit, numeric zip code.");
	return;
}
var state = getState(txtZip.value);
for (var i = 0; i < optionBox.options.length; i++)
	if (optionBox.options[i].value == state)
		return optionBox.options[i].selected = true;
	for (var i = 0; i < optionBox.options.length; i++)
		if (optionBox.options[i].value == "XX")
			return optionBox.options[i].selected = true;
}




// -------------------------------------------------------------------------------------------------------------
// AUTO COMPLETE
//
// Ex:
//	<form action="index.asp?page=contact-us" method="post">		                                  
//		<p><label>Your Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </label><input type="text" class="txt_input" name="NAME" /></p>		                                  
//		<p><label>Your Phone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </label><input type="text" class="txt_input" name="PHONE" /></p>		                                  
//		<p><label>Your E-Mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </label><input type="text" class="txt_input" name="EMAIL" onFocus="this.value=''" value="Email address here"></p>		                                  
//		<p>
//			<label>Subject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </label>
//			<input name="subject" type="text" value="" size="48" onkeyup="autoComplete(this,this.form.subjectoptions,'value',true)">
//			<select name="subjectoptions" style="display: none" onChange="this.form.subject.value=this.subjectoptions[this.selectedIndex].value">
//				<option value="assistance with code">assistance with code
//				<option value="new project">new project
//				<option value="c#">c#
//				<option value="vb.net">vb.net
//				<option value="vb6">vb6
//				<option value="visual basic">visual basic
//				<option value="javascript">javascript
//				<option value="jquery">jquery
//				<option value="html">html
//				<option value="coldfusion">coldfusion
//				<option value="ruby on rails">ruby on rails
//				<option value="php">php
//				<option value="java">java
//				<option value="quickbasic">quickbasic
//				<option value="perl">perl
//				<option value="cgi">cgi
//			</select>
//			&nbsp;(auto complete)
//		</p>
                          
//		<p><label>Message <span class="req"></span></label></p>		                                  
//		<p><textarea rows="4" name="txtMessage" cols="49"></textarea></p>		                                  
//		<p>                                     
//			<img id="imgCaptcha" src="captcha.asp" />
//			<a href="javascript:void(0)" onclick="CaptchaRefresh('imgCaptcha')">Change Image</a>
//			<p><input name="captchacode" type="text" id="captchacode" size="10" /></p>
//			<input type="submit" name="submitForm" value="Submit" onClick="return checksubmit(this)" />                                 
//		</p>		                              
//	</form>	  
// -------------------------------------------------------------------------------------------------------------
function autoComplete (field, select, property, forcematch) {
	// Invalid field values appear in RED
	// TO DO: Force another search on backspace or delete key (Probably need to do this at the control event side)
	var found = false;
	for (var i = 0; i < select.options.length; i++) {
		if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) {
			found=true; break;
			field.style.color = '#000000';
			}
		}
		if (found) { select.selectedIndex = i; }
		else { select.selectedIndex = -1; }
		if (field.createTextRange) {
		if (forcematch && !found) {
			field.value=field.value.substring(0,field.value.length-1); 
			field.style.color = '#ff0000';	// RED
			return;
		}
		var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
		if (cursorKeys.indexOf(event.keyCode+";") == -1) {
			var r1 = field.createTextRange();
			var oldValue = r1.text;
			var newValue = found ? select.options[i][property] : oldValue;
			if (newValue != field.value) {
				field.value = newValue;
				field.style.color = '#000000';
				
			var rNew = field.createTextRange();
			rNew.moveStart('character', oldValue.length) ;
			rNew.select();
			}
		}
	}
}
function autoCompleteCheck (f) {
	var okaytocontinue = true;
	for(i=0; i<f.elements.length; i++)
	{
		if (f.elements[i].type != "submit") {
			if (f.elements[i].style.color == '#ff0000') {
				okaytocontinue = false;
			}
		}
	}
	if (okaytocontinue == false) {
		alert('Some entries are invalid - Please review RED entries.');
		return false;
	}else
	return true;
}
