// Form Functions  v1.0
// documentation: http://www.dithered.com/javascript/form/index.html
// license: http://creativecommons.org/licenses/by/1.0/
// code by Chris Nott (chris[at]dithered[dot]com)


// Convert a list of strings into a 'get' query string
// function makeSearchString {{{
function makeSearchString() {
	var args = makeSearchString.arguments;
	var searchString = "?";
	var pair;
	for (var i = 0; i < args.length; i++) {
		pair = URLEncode(args[i++]) + "=";
		pair += (args[i]);
		searchString += pair + "&";
	}
	return searchString.substring(0, searchString.length - 1);
}
// }}}

// function makeSearchString {{{
function makeArray() {
	var args = makeArray.arguments;
	var argumentsArray= new Array();
	var pair;
	for (var i = 0; i < args.length; i++) {
		pair = URLEncode(args[i++]) + "=";
		pair += (args[i]);
		argumentsArray.push(pair);
	}
	return argumentsArray;
}
// }}}

// Create a 'get' query string with the data from a given form
// function gatherFormData {{{
function gatherFormData(form) {
	var formData = '';
	var element;
	
	// For each form element, extract the name and value
	for (var i = 0; i < form.elements.length; i++) {
		element = form.elements[i];
		if (element.type == "text" || element.type == "password" || element.type == "hidden" || element.type == "textarea") formData += "'" +  (element.name) + "', '" + URLEncode(element.value) + "', ";
		else if (element.type.indexOf("select") != -1) {
			for (var j = 0; j < element.options.length; j++) {
				if (element.options[j].selected == true) formData += "'" + element.name + "', '" + element.options[element.selectedIndex].value + "', ";
			}
		}
		else if (element.type == "checkbox" && element.checked) formData += "'" + element.name + "', '" + element.value + "', ";
		else if (element.type == "radio" && element.checked == true) formData += "'" + element.name + "', '" + element.value + "', ";
	}
	
	// Feed strings to makeSearchString() to do 'get' query string conversion
	return (eval("makeSearchString(" + formData.substring(0, formData.length - 2) + ")"));
}
// }}}


// function gatherFormDatainArray {{{
function gatherFormDatainArray(form) {
    var formData = new Array();
    var element;

    // For each form element, extract the name and value
    for (var i = 0; i < form.elements.length; i++) {
	element = form.elements[i];

	if (element.type == "text" || element.type == "password" || element.type == "hidden" || element.type == "textarea")
	    formData += "'" +  (element.name) + "', '" + URLEncode(element.value) + "', ";

	else if (element.type.indexOf("select") != -1) {
	    for (var j = 0; j < element.options.length; j++) {
		if (element.options[j].selected == true) formData += "'" + element.name + "', '" + element.options[element.selectedIndex].value + "', ";
	    }
	}
	else if (element.type == "checkbox" && element.checked) formData += "'" + element.name + "', '" + element.value + "', ";
	else if (element.type == "radio" && element.checked == true) formData += "'" + element.name + "', '" + element.value + "', ";
    }

    // Feed strings to makeSearchString() to do 'get' query string conversion
    return (eval("makeArray(" + formData.substring(0, formData.length - 2) + ")"));
}
// }}}

// Clear a form so that default initial values are erased
// function clearForm {{{
function clearForm(form) {
	var element;
	for (var i = 0; i < form.elements.length; i++) {
		element = form.elements[i];
		if (element.type == "text" || element.type == "password" || element.type == "textarea") element.value = '';
		else if (element.type.indexOf("select") != -1) element.selectedIndex = -1;
		else if (element.type == "checkbox" && element.checked) element.checked = false;
		else if (element.type == "radio" && element.checked == true) element.checked = false;
	}
}
// }}}


// Build an associative array with all name and value pairs in a 'get' query string
// function getSearchAsArray {{{
function getSearchAsArray() {
	var searchQuery = new Array;
	var pair;
	var temp;
	var search = location.search;
	
	// replace all '+'s with ' 's because unescape() doesn't do it
	search = search.replace(/\+/g, ' ');
	
	// for each pair, separate, unescape and place into the associate array
	var split = 1;
	while (split > 0) {
		split = search.lastIndexOf('&');
		if (split == -1) split = 0;
		pair = search.substring(split + 1, search.length);
		
		// multiple select values should be placed in an array
		if (searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] != null) {
			temp = searchQuery[unescape(pair.substring(0, pair.indexOf('=')))];
			searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] = new Array(temp, unescape(pair.substring(pair.indexOf('=') + 1)));
		}
		
		// all other form elements have a one-to-one name and value relationship
		else searchQuery[unescape(pair.substring(0, pair.indexOf('=')))] = unescape(pair.substring(pair.indexOf('=') + 1));
		
		search = search.substring(0, split);
	}
	return searchQuery;
}
// }}}
var query = getSearchAsArray();
