/*
	FormUtil
*/

var FormUtil = new Object();

/*public string*/ FormUtil.serializeForm = function (/*HTMLFormElement*/ oForm, /*boolean*/ urlEncoded) {

	var result = new Array();
	for(var i=0;i<oForm.elements.length;i++) {
		var serializedField = FormUtil.serializeField(oForm.elements[i],(urlEncoded)? true:false)
		if (serializedField != "") {
			result.push(serializedField)
		}
	}
	return result.join('&')
}

/*private string*/ FormUtil.serializeField = function (/*HTMLFieldElement*/ oField, /*boolean*/ urlEncoded) {

	if ((oField.nodeName.toUpperCase() == "INPUT") || (oField.nodeName.toUpperCase() == "TEXTAREA")) {
		return FormUtil.serializeTEXTnCHOICEField(oField, (urlEncoded)? true:false)
	} else if (oField.nodeName.toUpperCase() == "SELECT") {
		return FormUtil.serializeSELECTField(oField, (urlEncoded)? true:false)
	}else return ""
}

/*private string*/ FormUtil.serializeTEXTnCHOICEField = function (/*HTMLFieldElement*/ oField, /*boolean*/ urlEncoded) {

	if (((oField.checked == null) || ((oField.getAttribute('type') != null) && ((oField.getAttribute('type').toUpperCase() == "TEXT") || (oField.getAttribute('type').toUpperCase() == "HIDDEN")))) || (oField.checked)) {
		var result = oField.getAttribute('name') + "=" + ((urlEncoded)? encodeURIComponent(oField.value) : oField.value).toString();
		return result
	} else return ""
}

/*private string*/ FormUtil.serializeSELECTField = function (/*HTMLFieldElement*/ oField, /*boolean*/ urlEncoded) {

	if (oField.getAttribute('multiple') != null) {
		var result = new Array();
		for(var i=0;i<oField.options.length;i++) {
			if(oField.options[i].selected) {
				var tmp = oField.getAttribute('name') + "=" + ((urlEncoded)? encodeURIComponent(oField.options[i].value) : oField.options[i].value).toString();
				result.push(tmp)
			}
		} return result.join('&')
	} else {
		if (oField.selectedIndex > -1) {
			var result = oField.getAttribute('name') + "=" + ((urlEncoded)? encodeURIComponent(oField.options[oField.selectedIndex].value) : oField.options[oField.selectedIndex].value).toString();
			return result
		} else return ""
	}
}