	cookieDuration=4*365.25*24*60*60*1000; // (in ms) expires in 1000ms/s X 60s/min X 60min/hr X 24hr/day X 365.25days/yr X 4 = 4yrs
	cookiePath="/"; //cookiePath="/path/to"; // restrict cookie pervasiveness to only a subfolder
	URLstring=""; // URLstring="www.mysite.com"; // or something

	expdate = new Date();
	FixCookieDate(expdate);
	expdate.setTime(expdate.getTime()  + cookieDuration); 

	debug=0;

	function cookie_ol() {
		//killCookies();
		if(document.forms[0]) { setTimeout('getCookies();',250); }
	}

	function setACookie(fn,fv) { // convenience method
		SetCookie(fn, fv, expdate,cookiePath,URLstring,false);		
	}

	function setCookies() { 
		if (debug) alert("setCookies(): cookieFields.length="+cookieFields.length);
		if (cookieFields && cookieFields.length>=1 && document.forms && document.forms[0] && document.forms[0].elements[cookieFields[0]]) { 
			// set cookies!
			//if (debug) alert("setCookies(): cookieFields.length="+cookieFields.length);
			for (var i=0; i<cookieFields.length; i++) {
				with (document.forms[0]) { 
					fn = cookieFields[i];
					fv = 
						(
							elements[cookieFields[i]].type.indexOf("text")>=0
							? elements[cookieFields[i]].value 
							: (
								elements[cookieFields[i]].type.indexOf("checkbox")>=0
								? elements[cookieFields[i]].checked
								: ""
							)
						)
					;

					if (debug && i<2)  { 
						alert("setCookies(): "+i+": [set] "+fn+" = "+fv);
					}

					if (fv) { // don't set false cookies
						//		  name,	value,	expires,path,	   domain,   secure
						SetCookie(fn,	fv,		expdate,cookiePath,URLstring,false);		
						if (debug && i<2)  { 
							tc = n(GetCookie(cookieFields[i])); 
							if (tc!="") { 
								alert("setCookies(): "+i+": [get] "+tc);
							}
						}
					} else {
						DeleteCookie(fn,cookiePath,URLstring);
					}
				}
			}
		}
	}

	function getCookies() {
		if (cookieFields && cookieFields.length>=1 && document.forms && document.forms[0] && document.forms[0].elements[cookieFields[0]]) { 
			// get cookies!
			for (var i=0; i<cookieFields.length; i++) {
				with (document.forms[0]) { 
					if (debug && i<4){ 
						alert("getCookies(): "+i+" of "+cookieFields.length+" - "+cookieFields[i]+": "+elements[cookieFields[i]].type); 
					}
					if (elements[cookieFields[i]] && elements[cookieFields[i]].type.indexOf("text")>=0 && elements[cookieFields[i]].value==""){
						elements[cookieFields[i]].value = n(GetCookie(cookieFields[i]));
						if (debug){ 
							alert("getCookies(): "+i+" -TXT- "+cookieFields[i]+": "+elements[cookieFields[i]].value); 
						}
					} else if (elements[cookieFields[i]] && elements[cookieFields[i]].type.indexOf("checkbox")>=0) {
						tc = n(GetCookie(cookieFields[i]));
						elements[cookieFields[i]].checked = (tc && tc!="false"?true:false);
						if (debug && i<2){ 
							alert("getCookies(): "+i+" -CKB- "+cookieFields[i]+": "+elements[cookieFields[i]].checked+" ("+tc+")"); 
						}
					}
				}
			}
		}
	}

	function killCookies() {
		//kill cookies & wipe fields
		for (var i=0; i<cookieFields.length; i++) {
			with (document.forms[0]) { 
				fn = cookieFields[i];
				elements[cookieFields[i]].value = "";
				DeleteCookie(fn,cookiePath,URLstring);
			}
		}
	}


	//
	// Cookie functions borrowed shamelessly from http://www.hidaho.com/cookies/cookie.txt
	//

	function getCookieVal (offset) {
	  var endstr = document.cookie.indexOf (";", offset);
	  if (endstr == -1)
		 endstr = document.cookie.length;
	  return unescape(document.cookie.substring(offset, endstr));
	}

	function FixCookieDate (date) {
	  var base = new Date(0);
	  var skew = base.getTime(); // dawn of (Unix) time - should be 0
	  if (skew > 0)  // Except on the Mac - ahead of its time
		 date.setTime (date.getTime() - skew);
	}

	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)
	//    gotta remove the plus signs
			return MakePlusSpace(getCookieVal (j));
		 i = document.cookie.indexOf(" ", i) + 1;
		 if (i == 0) break; 
	  }
	  return null;
	}

	function MakeSpacePlus (value) {
	  value = "" + value + "";
	  if (value == "") value=" ";
	  var vlen = value.length;
	  var newvalue = "";
	  var i=0;
	  while (i < vlen) {
		 if (value.substring(i,i+1) == " ") {
			newvalue = newvalue + "+";
		 } else {
			newvalue = newvalue + value.substring(i,i+1);
		 }
		 i = i + 1;
	  }
	  return newvalue; 
	}

	function MakePlusSpace (value) {
	  value = "" + value + "";
	  var vlen = value.length;
	  var newvalue = "";
	  var i=0;
	  while (i < vlen) {
		 if (value.substring(i,i+1) == "+") {
			newvalue = newvalue + " ";
		 } else {
			newvalue = newvalue + value.substring(i,i+1);
		 }
		 i = i + 1;
	  }
	  return newvalue; 
	}

	function SetCookie (name,value,expires,path,domain,secure) {
	//
	// added my own MakeSpacePlus to handle multiword cookies
	//
	  multiwordvalue = MakeSpacePlus (value);
	  document.cookie = name + "=" + escape (multiwordvalue) +
		 ((expires) ? "; expires=" + expires.toGMTString() : "") +
		 ((path) ? "; path=" + path : "") +
		 ((domain) ? "; domain=" + domain : "") +
		 ((secure) ? "; secure" : "");
	}

	function DeleteCookie (name,path,domain) {
	  if (GetCookie(name)) {
		 document.cookie = name + "=" +
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	  }
	}

function n(s) { 
	s+="";
	if (s==null || s=="null") {
		return "";
	} else {
		return s;
	}
}