<!--
//HTML controls type abbreviations:
//txt -- text
//cbx -- checkbox
//rad -- radio
//txta -- textarea
//ddn -- dropdown

var persistenceArray = new Array();

var FIELD_DELIMITER = "~~";
var FIELD_NAME_DELIMITER = "^^";
var FIELD_VALUE_DELIMITER = "__";

function getCookie(Name){ 
	var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
	if (document.cookie.match(re)){ //if cookie found
		return document.cookie.match(re)[0].split("=")[1]; //return its value
	} else {
		return "";
	}
}

function setCookie(name, value, days){
	var expireDate = new Date();
	//set "expstring" to either future or past date, to set or delete cookie, respectively
	var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days));
	document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
}

// Main Persistence Object
function persistenceObj(formID){
	this.formName = formID;
	this.cookieName = formID;
	this.cookieExpirationDays = 2; 
	this.inputTextCheckRadio = new Array();	
	this.formDropDowns = new Array();
	this.formTextAreas = new Array();
	this.cookieStr = "";
	var formInstance = this;
	this.excludedFieldNames = new Array("captchapro_response");
}

persistenceObj.prototype.registerTextCheckRadioFields = function(){
	var allPageInputs = document.getElementsByTagName("input");	
	for (var i = 0; i < allPageInputs.length; i++){
		if (allPageInputs[i].type == "text" || allPageInputs[i].type == "checkbox" || allPageInputs[i].type == "radio" ){
			if(allPageInputs[i].form.name == this.formName){
				this.inputTextCheckRadio.push(allPageInputs[i]);
			}
		}
	}
}

persistenceObj.prototype.registerDropDowns = function(){
	var allPageDropdowns = document.getElementsByTagName("select");
	for (var i = 0; i < allPageDropdowns.length; i++){
			if(allPageDropdowns[i].form.name == this.formName){
				this.formDropDowns.push(allPageDropdowns[i]);
			}
	}
}

persistenceObj.prototype.registerTextAreas = function(){
	var allPageTextareas = document.getElementsByTagName("textarea");
	for (var i = 0; i < allPageTextareas.length; i++){
			if(allPageTextareas[i].form.name == this.formName){
				this.formTextAreas.push(allPageTextareas[i]);
			}
	}
}

persistenceObj.prototype.determineFieldExclusion = function(fld){
	var isExcluded = false;
	for (var j = 0; j < this.excludedFieldNames.length; j++){
		if(fld.name == this.excludedFieldNames[j]){
			isExcluded = true;
			break;
		}
	}
	return isExcluded;
}

persistenceObj.prototype.getField=function(attr){ 
	var fieldRef = document.forms[this.formName].elements[attr];
	return fieldRef;
}

persistenceObj.prototype.saveFieldsValues=function(){ 
	//TextFields and CheckBoxes:
	for (var i=0; i<this.inputTextCheckRadio.length; i++){
		if (this.inputTextCheckRadio[i].type == "text") {
			if(!this.determineFieldExclusion(this.inputTextCheckRadio[i])){
				this.cookieStr += this.inputTextCheckRadio[i].name + FIELD_NAME_DELIMITER + escape(this.inputTextCheckRadio[i].value) + FIELD_VALUE_DELIMITER + "txt" + FIELD_DELIMITER;
			}
		} else if (this.inputTextCheckRadio[i].type == "checkbox") {
			if(!this.determineFieldExclusion(this.inputTextCheckRadio[i])){
				if (this.inputTextCheckRadio[i].checked) {
					this.cookieStr += this.inputTextCheckRadio[i].name + FIELD_NAME_DELIMITER + "1" + FIELD_VALUE_DELIMITER + "cbx" + FIELD_DELIMITER;
				}
			}
		} else if (this.inputTextCheckRadio[i].type == "radio") {
			
			if(!this.determineFieldExclusion(this.inputTextCheckRadio[i])){
				if (this.inputTextCheckRadio[i].checked) {
					this.cookieStr += this.inputTextCheckRadio[i].id + FIELD_NAME_DELIMITER + "1" + FIELD_VALUE_DELIMITER + "rad" + FIELD_DELIMITER;
				}
			}
		}
	}
	
	//DropDowns:
	for (var i=0; i<this.formDropDowns.length; i++){
		if(!this.determineFieldExclusion(this.formDropDowns[i])){
			this.cookieStr += this.formDropDowns[i].name + FIELD_NAME_DELIMITER + this.formDropDowns[i].selectedIndex + FIELD_VALUE_DELIMITER + "ddn" + FIELD_DELIMITER;
		}
	}
	
	//TextAreas:
	for (var i=0; i<this.formTextAreas.length; i++){
		if(!this.determineFieldExclusion(this.formTextAreas[i])){
			this.cookieStr += this.formTextAreas[i].name + FIELD_NAME_DELIMITER + escape(this.formTextAreas[i].value) + FIELD_VALUE_DELIMITER + "txta" + FIELD_DELIMITER;
		}
	}
	setCookie(this.cookieName, this.cookieStr, this.cookieExpirationDays);
}

persistenceObj.prototype.retrieveFieldsValues=function() { 
	var cookieValue = getCookie(this.cookieName);
		
		if (cookieValue != "") { 
			var cookievaluepair = cookieValue.split(FIELD_DELIMITER);
			cookievaluepair.splice(cookievaluepair.length-1, 1);
			
			for (var i=0; i<cookievaluepair.length; i++){
				
				var formElementObject = this.getField(cookievaluepair[i].split(FIELD_NAME_DELIMITER)[0]);
				var formElementType = cookievaluepair[i].split(FIELD_VALUE_DELIMITER)[1];
				
				if (formElementObject) {
					formElementObject.disabled = false;
					if (formElementType == "txt"){
						formElementObject.value = unescape(cookievaluepair[i].split(FIELD_VALUE_DELIMITER)[0].split(FIELD_NAME_DELIMITER)[1]);
					} else if (formElementType == "cbx"){
						formElementObject.checked = (cookievaluepair[i].split(FIELD_NAME_DELIMITER)[1] == "1" + FIELD_VALUE_DELIMITER + "cbx")? true : false;
					} else if (formElementType == "rad"){
						formElementObject.checked = (cookievaluepair[i].split(FIELD_NAME_DELIMITER)[1] == "1" + FIELD_VALUE_DELIMITER + "rad")? true : false;
					} else if (formElementType == "ddn"){
						formElementObject.selectedIndex = parseInt(cookievaluepair[i].split(FIELD_NAME_DELIMITER)[1]);
					} else if (formElementType == "txta"){
						formElementObject.value = unescape(cookievaluepair[i].split(FIELD_VALUE_DELIMITER)[0].split(FIELD_NAME_DELIMITER)[1]);
					}
				}
			}
		}
}

//Call this function if you wish to clear the user's cookie of any saved values for this form instantly
persistenceObj.prototype.clearCookie=function(){
	setCookie(this.cookiename, "", -1);
}

function init(){
	var formsArray = document.getElementsByTagName("form");
	
	for (var i = 0; i < formsArray.length; i++){
		persistenceArray[i] = new persistenceObj(formsArray[i].name);
		persistenceArray[i].registerTextCheckRadioFields();
		persistenceArray[i].registerDropDowns();
		persistenceArray[i].registerTextAreas();
		persistenceArray[i].retrieveFieldsValues();
	}
}

if (window.addEventListener){
	window.addEventListener('load', init, false);
} else if (window.attachEvent) {
	window.attachEvent('onload', init);
}

function getPersistenceObjectByName(frmName){
	for (var i = 0; i < persistenceArray.length; i++){
		if(persistenceArray[i].formName == frmName){
			return persistenceArray[i];
		}
	}
}

function trimString(sInString) {
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
}

function parseHiddenFieldExcludedFields(frm){
	if(frm.elements["doNotPersist"]){
		var hiddenValue = frm.elements["doNotPersist"].value
		var hiddenFieldsArray = hiddenValue.split(",");
		for(var i = 0; i < hiddenFieldsArray.length; i++){
			hiddenFieldsArray[i] = trimString(hiddenFieldsArray[i]);
		}
		return hiddenFieldsArray;
	} else {
		return false;
	}
}

function persist(frm){
	var persistenceObject = getPersistenceObjectByName(frm.name);
	excludeFieldNamesArray = parseHiddenFieldExcludedFields(frm);
	if(excludeFieldNamesArray){
		for(var i = 0; i < excludeFieldNamesArray.length; i++){
			persistenceObject.excludedFieldNames.push(excludeFieldNamesArray[i]);
		}
	}
	persistenceObject.saveFieldsValues();	
}	
//-->