// Read the name, id, type, and value of one form control element
// as requested by form2ArrayString()
function formObj2String(obj, format) {

// format == 1 - javascript array format
// format == 2 - e-mail body format
// format == 3 - php array format

	var output;
	var valuestr = new String();
	var namestr  = new String();
	var idstr    = new String();
	var typestr  = new String();
	
	if (obj.name) namestr = obj.name;
	if (obj.id)   idstr = obj.id
	typestr = obj.type;
	
	switch (obj.type) {
		case "radio":
			if (obj.name) {
				obj = document.forms[0].elements[obj.name];
				var radioVal = "false,index:-1";
				for (var i = 0; i < obj.length; i++) {
					if (obj[i].checked) {
						radioVal = "true,index:" + i;
						i = obj.length;
					} 
				}
				valuestr = radioVal;
			} else {
				valuestr = obj.checked;
			}
			break;
		case "checkbox":
			if (format==3)
				valuestr = obj.checked ? "1" : "0";
			else
				valuestr = obj.checked;
			break;
		case "select-one":
			valuestr =  obj.selectedIndex;
			if (obj.value)
				valuestr = "'" + valuestr + ":" + escape(obj.value) + "'";
			break;
		case "select-multiple":
			valuestr =  obj.selectedIndex;
			break;
		case "text":
			valuestr = "'" + escape(obj.value) + "'";
			break;
		case "textarea":
			valuestr = "'" + escape(obj.value) + "'";
			break;
		case "password":
			valuestr = "'" + escape(obj.value) + "'";
			break;
		case "hidden":
			valuestr = "'" + escape(obj.value) + "'";
			break;
		default:
			output += "";
	}
	if (format==1) 
		output = "{name:'" + namestr + "',type:'" + typestr + "',value:" + valuestr +"}";
	else if (format==2)
		output = namestr + ": " + valuestr;
	else if (format==3)
		output = "'" + namestr + ":" + typestr + "' => " + valuestr;
	
	return output;
}

// Convert a passed form reference to a string formatted like
// a JavaScript array of objects
function form2ArrayString(form) {
	var elem, lastName = "";
	var output = "[";
	for (var i = 0; i < form.elements.length; i++) {
		elem = form.elements[i];
		if (elem.name && (elem.name != lastName)) {
			output += formObj2String(form.elements[i], 1) + ",";
			lastName = elem.name;
		}
	}
	output = output.substring(0, output.length-1) + "]";
	return output;
}

// Convert a passed form reference to a string formatted like
// a PHP Array
function form2PHPArrayString(form) {
	var elem, lastName = "";
	var output = "array (";
	for (var i = 0; i < form.elements.length; i++) {
		elem = form.elements[i];
		if (elem.name && (elem.name != lastName)) {
			output += formObj2String(form.elements[i], 3) + ",";
			lastName = elem.name;
		}
	}
	output = output.substring(0, output.length-1) + ");";
	return output;
}


// Convert a passed form reference to a string formatted like
// a JavaScript array of objects
function form2EmailBody(form) {
	var elem, lastName = "";
	var output = "";
	for (var i = 0; i < form.elements.length; i++) {
		elem = form.elements[i];
		if (elem.name && (elem.name != lastName)) {
			output += formObj2String(form.elements[i], 2) + "%0A%0D";
			lastName = elem.name;
		}
	}
	return output;
}


// Distribute form control values from another source to the
// controls in this page's form, whose names/ids match those
// of the original form controls
function string2FormObj(form, str) {
	var elem, objArray = eval(str);
	for (var i = 0; i < objArray.length; i++) {
		elem = (objArray[i].name) ? form.elements[objArray[i].name] : document.getElementById(objArray[i].id);
		switch (objArray[i].type) {
			case "radio":
				if (objArray[i].name && objArray[i].value && objArray[i].index >= 0) {
					elem = elem[objArray[i].index];
				}
				elem.checked = objArray[i].value;
				break;
			case "checkbox":
				elem.checked = objArray[i].value;
				break;
			case "select-one":
				if (isNaN(objArray[i].value)) {
					var pair = objArray[i].value.split(":");	
					elem.selectedIndex = pair[0];
				}
				else
					elem.selectedIndex = objArray[i].value;
				break;
			case "select-multiple":
				elem.selectedIndex = objArray[i].value;
				break;
			default:
				elem.value = unescape(objArray[i].value);
		}
	}
}

// Email the contents of the form to the given e-mail address
function emailForm(theForm, addr, subj) {
	var bod = form2EmailBody(theForm);
	open("mailto:" + addr + "?subject=" + subj + "&body=" + bod);
}

// break apart a URL search string
function getArgs(srchstring, seperator) {
	var args = new Object();
	var pairs = srchstring.split(seperator);
	for(var i=0; i<pairs.length; i++) {
		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;
		var argname = pairs[i].substring(0, pos);
		var value = pairs[i].substring(pos+1);
		args[argname] = unescape(value);
	}
	return args;
}

function php2jsArray(phpArrayString) {
	var str = phpArrayString;
	str = str.substring(str.indexOf("(")+1);
	str = str.substring(0,str.indexOf(")"));
	var elems = str.split(",");
	var jsArrayString = "[";
	for(var i=0; i<elems.length; i++) {
		var descriptor = elems[i].split(" => ");
		//descriptor[0] = descriptor[0].substring(1, descriptor[0].length-1);
		var pos = descriptor[0].indexOf(":");
		jsArrayString += "{name:" + descriptor[0].substring(0, pos) + "',type:'" + descriptor[0].substring(pos+1) + ",value:" + descriptor[1] + "},";
	}
	
	jsArrayString = jsArrayString.substring(0, jsArrayString.length-1);
	jsArrayString += "]";
	return jsArrayString;
}

