//<!--
//
//  saveInput
//
//  Purpose: To save form input
//
//  Description: This script saves user input to a cookie so that they don't
//  have to re-enter their data on an unsuccessful submission (i.e., error pages
//  that ask a user to hit the back button to add missing data). The script
//  supports saving text, textarea, password, radio, checkbox, select-one and
//  select-multiple input types.
//
//  Usage: To use you must do three things:
//
//    1. Ensure that all your form elements are uniquely named.
//    2. Add the following code to the source of your article's body. 
//
//    <div>
//    <script type="text/javascript" src="http://orpheus.ucsd.edu/vignette_css/js/ucsdlib_saveInput.js"></script>
//    </div>
//
//    3. Call "saveInput" from your form's onSubmit event.
//
//    e.g., <form onSubmit="saveInput('field1', 'field2', 'field3', 'fieldN')">
//
//-->

var cookie_name = "UCSD_" + encodeURI(window.location.pathname);
var cookie_lifetime_mins = 15;

var delimiter_inner = "::";
var delimiter_outer = "||";

//---
// saveInput
//---

var saveInput = function(){

	var cookie_data = "";
	
	for (var i = 0; i < arguments.length; i++){
		
		var elements = document.getElementsByName(arguments[i]);
		var element = elements[0];
		var values = "";
		
		if ((element.type == "text" || element.type == "password" || element.type == "textarea" || element.type == "select-one") && element.value != "")
			cookie_data += arguments[i] + delimiter_inner + encodeURI(element.value) + delimiter_outer;
		else if (element.type == "radio" || element.type == "checkbox"){
			for (var x = 0; x < elements.length; x++)
				(elements[x].checked) ? values += "1" : values += "0";
			if (parseInt(values,2)) 
				cookie_data += arguments[i] + delimiter_inner + encodeURI(values) + delimiter_outer;
		}
		else if (element.type == "select-multiple" && element.value != ""){
			for (var x = 0; x < element.length; x++)
				(element[x].selected) ? values += "1" : values += "0";
			cookie_data += arguments[i] + delimiter_inner + encodeURI(values) + delimiter_outer;
		}
	}
	
	saveInput.setCookie(cookie_name, cookie_data, cookie_lifetime_mins);
}

//---
// saveInput: Get Cookie Value
//---

saveInput.getCookie = function(name){
	var re = new RegExp(name + "=[^;]+", "i");
	if (document.cookie.match(re))
		return document.cookie.match(re)[0].split("=")[1];
	return "";
}

//---
// saveInput: Set Cookie Value
//---

saveInput.setCookie = function(name, data, lifetime_days){
	var expiration_date = new Date();
	expiration_date.setTime(expiration_date.getTime() + (lifetime_days * 60 * 1000));
	document.cookie = name + "=" + data + "; expires=" + expiration_date.toGMTString() + ";";
}

//---
// restoreInput
//---

var restoreInput = function(){

	var my_cookie = saveInput.getCookie(cookie_name).split(delimiter_outer);

	for (var i = 0; i < my_cookie.length; i++){
	
		var field_name  = my_cookie[i].split(delimiter_inner)[0];
		var field_value = my_cookie[i].split(delimiter_inner)[1];

		var elements = document.getElementsByName(field_name);
		var element = elements[0];
		
		if (element != null){
			if (element.type == "text" || element.type == "password" || element.type == "textarea" || element.type == "select-one")
				element.value = decodeURI(field_value);
			else if (element.type == "radio" || element.type == "checkbox"){
				var values = decodeURI(field_value);
				for (var x = 0; x < elements.length; x++)
					(values.charAt(x) == "1") ? elements[x].checked = true : elements[x].checked = false;
			}
			else if (element.type == "select-multiple"){
				var values = decodeURI(field_value);
				for (var x = 0; x < element.length; x++)
					(values.charAt(x) == "1") ? element[x].selected = true : element[x].selected = false;
			}
		}
	}
}

//---
// Main: Restore form data on page load
//---

if (window.addEventListener)
	window.addEventListener("load", restoreInput, false);
else if (window.attachEvent)
	window.attachEvent("onload", restoreInput);
else if (document.getElementById)
	window.onload = restoreInput;