function aboutformmemory() { 	window.open("http://www.linkedresources.com/tools/formmemory.html","formmemwindow","toolbar=yes,location=1,directories=yes,status=yes,menubar=1,scrollbars=yes,resizable=1,width=600,height=420,screenX=20,screenY=10");	}// unique variables. These must be declared either here or in the calling HTML doc// var formname = "SampleSource"; // use your own, of course// var suggestedFileName="FormMemory_" + formname;// var areacode = "612";  // use your own, of course// var mailto = "you@yourcompany.com";// var j=23; // encoding key - change it to a number between 3 and 35// set-upvar x = document.open();var insidedelim="=";var enddelim="\r";if (navigator.appVersion.lastIndexOf('Win') != -1) {	enddelim="\r\n";	}var salvaged="";// archive routinesfunction makeArchive(form) {	var fe=form.elements;	var formlen = fe.length;	var candylist=fe[0].value + enddelim;	var candyitem="";	var j = fe["helper_key"].value;	var alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 .,/?;:'[{]}\|=+-_)(*&^%$#@!`~";	var beta=gamma(alpha,delta(j,alpha.length));	for (k=0;k<formlen;k++) {		if (fe[k].name.substring(0,7)!="helper_") {			if ((fe[k].type=="password")||(fe[k].type=="textarea")) {	            var newp="";	            var tarChar="";	            for (ct=0;ct<fe[k].value.length;ct++) {	            	tarChar = (fe[k].value.charAt(ct));	            	if (-1<alpha.indexOf(tarChar,0)) {	                	newp=newp+beta.charAt(alpha.indexOf(tarChar,0));	               		} else {	               		newp=newp+tarChar;	               		}	           		}	            candylist += fe[k].name + insidedelim + escape(newp) + enddelim;	            continue;	            }	        }		}	form.helper_archiveField.value = candylist;	}function useArchive(form,candylist) {	var fe=form.elements;	var formlen = fe.length;	var candyitem="";	var candyname="";	var candyvalue="";	var j = fe["helper_key"].value;	var alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 .,/?;:'[{]}\|=+-_)(*&^%$#@!`~";	var beta=gamma(alpha,delta(j,alpha.length));	candylist=appendchar(candylist,enddelim);  // just do it once, to be sure	candyitem=parseOneItem(candylist,enddelim) + enddelim;	while (candyitem!="") {		candylist=chopOneLine(candylist,enddelim);		candyname=parseOneItem(candyitem,insidedelim);		candyvalue=parseItemTwo(candyitem,insidedelim,enddelim);		for (k=0;k<formlen;k++) {			if (fe[k].name.toLowerCase()==candyname.toLowerCase()) {				if (fe[k].name=="SuggestedFileName") {					break;					}				if ((fe[k].type=="text"||fe[k].type=="hidden")) {					fe[k].value=candyvalue;					break;					}				if ((fe[k].type=="password")||(fe[k].type=="textarea")) {		            var newp="";		            var tarChar="";		            candyvalue=unescape(candyvalue);		            for (ct=0;ct<candyvalue.length;ct++) {		            	tarChar=candyvalue.charAt(ct);		            	if (-1<alpha.indexOf(tarChar,0)) {		                	newp=newp+alpha.charAt(beta.indexOf(tarChar,0));		                	} else {	               			newp=newp+tarChar;	               			}		            	}		            fe[k].value = newp;		            break;		        	}				}			}	((candylist.length<(insidedelim.length+enddelim.length+1)))?candyitem="":candyitem=parseOneItem(candylist,enddelim) + enddelim;		}	}// encryption routinesfunction delta(x,y) {	var z=x%y;	return z;	}function omega(m,g,f) {	w=m.substring(f*g,m.length);	var p="";	(g==1)?q="":p=m.substring(0,f*(g-1));	var t=m.substring(f*(g-1),f*g);	var s="";	for (y=0;y<f;y++) {		s=s+t.charAt((f-y)-1);		}	z=p+s+w;	return z;	}function gamma(s,n) {	var w=s.length;	var f = s.substring(n,w) + s.substring(0,n);	var g=0;	(w%n==0||w%n==1)?g=5:g=w%n;	for (m=1;m<(w/g);m++) {		f=omega(f,m,g);		}	return f;	}// parsing routinesfunction parseOneItem(str,delimiter) {  // extracts the first item of a delimited list	if (str.length < 1) return "";	return str.substring(0,str.indexOf(delimiter,0));	}function parseItemTwo(str,delim1,delim2) {  // we trust that str arrives with both delims within it, in order	if (str.length < (delim1.length+delim2.length)) return "";	return str.substring((str.indexOf(delim1,0)+delim1.length),str.indexOf(delim2,str.indexOf(delim1,0)));	}	function chopOneLine(str,delimiter) {  // removes the first item of a delimited list	if (str.length < 1) return "";	if (str.length-delimiter.length<=str.indexOf(delimiter,0)) return "";	return str.substring(str.indexOf(delimiter,0)+delimiter.length,str.length);	}function appendchar(str,thechar) {  // if the last character is not thechar, it will be!	if (str.charAt(str.length-1)!=thechar) str+=thechar;	return str;	}// reset routinesfunction resetWarning(form) {	makeArchive(form);	salvaged=form.helper_archiveField.value;	alert ('This will erase everything you have entered!!\r \rIf you hit RESET in error, you can recover by immediately clicking \r \r[Recover From RESET]');	}function recover(form) {	if (salvaged=="") {		alert("Nothing to recover from.");		} else {		form.helper_archiveField.value=salvaged;		useArchive(form,salvaged);		}	}// smart entry routines		function polishSSN(fev) {	var ssn = fev;	for (k=0;k<=ssn.length;k++) {		if (isNum(ssn.charAt(k))==false) {			ssn = ssn.substring(0,k) + ssn.substring(k+1,ssn.length);			k--;			}		}	ssn=ssn.substring(0,9);	ssn = ssn.substring(0,3) + "-" + ssn.substring(3,5) + "-" + ssn.substring(5,9);	return ssn;	}function polishPhoneNum(fev) {	var phone = fev;	var ext = "";	if (phone=="") {return"";}	for (k=0;k<=phone.length;k++) {		if (isNum(phone.charAt(k))==false) {			phone = phone.substring(0,k) + phone.substring(k+1,phone.length);			k--;			}		}	if (phone.length<7) {alert ("I'm sorry, you've entered too few digits. Try again.")};	if (phone.length<10) {phone = areacode + phone};	if (10<phone.length) {ext=" ext "};	phone = "(" + phone.substring(0,3) + ") " + phone.substring(3,6) + "-" + phone.substring(6,10) + ext + phone.substring(10,16);	return phone;	}function isNum(x) {	if (x==0||x==1||x==2||x==3||x==4||x==5||x==6||x==7||x==8||x==9) {		return true;		} else {		return false;		}	}// other useful routines	function siv(x) {	return x[x.selectedIndex].value;	}function smartLink(fileName,textToPass) {	document.location.pathname=whereabouts(document.location.pathname) + fileName + escape(textToPass);	}function whereabouts(here) {	return here.substring(0,here.lastIndexOf("/")+1);	}