/** LifeSavingData.com JavaScript Library **/

/** created by Tudor Iordachescu <tudor@teamcode.net>, September 6, 2006 **/
/** Copyright 2006 Teamcode, Inc. **/

window.onload = function(){
		loadForm();
		focusSearchForm();
		
		if(typeof sIFR == "function") sIFR();
};
	
window.onunload = function() {
		formCheck();
};

function focusSearchForm() {
	document.searchform.idnumber.focus();
}

function isblank(s) {
	for(var i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if ((c != ' ') && (c != '\n') && (c != '\t')) {
			return false;
		}
	}
	return true;
}

function formcheck() {
	var q = document.searchform.idnumber.value;

	if ((q == null) || (q == "") || isblank(q)) {
		alert("Please enter a valid driver's license number.");
		jump2form();
		return false;
	}

	return true;
}

function trace( msg ){
  if( typeof( jsTrace ) != 'undefined' ){
    jsTrace.send( msg );
  }
}

/* cookies */
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

/* forms */
var formIsDirty = false; //form has been modified

function getFormData(which){
	var theForm = document[which];
	if(!theForm) {
		trace("Form not found: " + which);
		return null;
	}
	
	var formElements = theForm.elements;
	var cookieValue = "";
	for(var i = 0; i < formElements.length; i++) {
		var currentElement = formElements[i];
		var elementType = currentElement.type;
		//trace(elementType);
		var elementValue = "";
		
		switch(elementType){
			case "checkbox"				: elementValue = "|c=" + (currentElement.checked ? "1" : "0"); break;
			case "radio"				: elementValue = "|r=" + (currentElement.checked ? "1" : "0"); break;
			case "select-one"			: elementValue = "|s=" + currentElement.options.selectedIndex ; break;
			
			case "text"					:
			case "textarea"				: elementValue = "|t=" + escape(currentElement.value); break;
			
			case "submit"				:
			case "button"				: elementValue = "|b="; break; // I don't care about buttons value
		}
		
		cookieValue += elementValue;
	}
	cookieValue = cookieValue.slice(1);
	trace(unescape(cookieValue));
	return cookieValue;
}

function saveForm(which){
	if(which == null) which = document.body.className; // if no form name sent, take the class of the body as the name of the form
	var cookieValue = getFormData(which);
	createCookie(which, cookieValue, 7);
}

function loadForm(which){
	if(which == null) which = document.body.className; // if no form name sent, take the class of the body as the name of the form
	var cookieValue = readCookie(which);
	if(!cookieValue) {
		trace("No cookie for form: " + which);
		return null;
	}
	//trace(cookieValue);
	var theForm = document[which];
	if(!theForm) {
		trace("Form not found in document: " + which);
		return null;
	}
	
	var formElements = theForm.elements;
	
	var storedValues = cookieValue.split("|");
	
	if(storedValues.length != formElements.length) {
		trace("Form elements:" + formElements.length + " - Stored values: " + storedValues.length);
		eraseCookie(which);
		trace("Cookie erased.");
		return null;
	}
	
	for(var i = 0; i < formElements.length; i++) {
		var currentElement = formElements[i];
		var currentData = storedValues[i].split("=");
		
		var elementType = currentElement.type;
		//trace(elementType);
		
		switch(elementType){
			case "checkbox" :
				if(currentData[0] == "c") {
					currentElement.checked = Boolean(parseInt(currentData[1]));
				} else {
					trace("Form element: '" + elementType + "' does not match stored data: " + currentData.join("="));
				};
				break;
				
			case "radio" :
				if(currentData[0] == "r") {
					currentElement.checked = Boolean(parseInt(currentData[1]));
				} else {
					trace("Form element: '" + elementType + "' does not match stored data: " + currentData.join("="));
				};
				break;
				
			case "select-one" :
				if(currentData[0] == "s") {
					currentElement.options.selectedIndex = parseInt(currentData[1]);
				} else {
					trace("Form element: '" + elementType + "' does not match stored data: " + currentData.join("="));
				};
				break;

			case "text" :
			case "textarea" :
				if(currentData[0] == "t") {
					currentElement.value = unescape(currentData[1]);
				} else {
					trace("Form element: '" + elementType + "' does not match stored data: " + currentData.join("="));
				};
				break;
				
			case "submit" :
			case "button" :
				if(currentData[0] != "b") {
					trace("Form element: '" + elementType + "' does not match stored data: " + currentData.join("="));
				};
				break;
		}
	}
}

function formCheck(which){
	if(which == null) which = document.body.className; // if no form name sent, take the class of the body as the name of the form
	if(document[which] && formIsDirty){
		if(confirm("You have unsaved changes. Save them now?")) {
				saveForm(which);
		}
	}
}
