var _forms_ = [];

var FormWrapper = function(name) {

	this.name = name;
	this.submit = false;
	var formObject = document.forms[this.name];

	this.getForm = function () {
		return formObject;
	}

	this.getValue = function (key) {
		getValue(key, null);
	}

	this.getValue = function (key, defaultValue) {
		var result = this.getValues(key);
		if (result == null || result.length == 0) {
			return (defaultValue == null)?null:defaultValue;
		}
		return result[0];
	}

	this.getValues = function (key) {
		if (this.containsKey(key) == false) {
			return null;
		}
		var result = [];

		if (formObject[key].type) {
			if (formObject[key].type.indexOf("select") < 0 ) {
				result[0] = formObject[key].value;
			} else {
				result = this.getOptionValues(formObject[key]);
			}
			return result;
		}

		for (var i=0; i < formObject[key].length; i++) {
			if (formObject[key][i].type.indexOf("select") < 0) {
				result[result.length] = formObject[key][i].value;
			} else {
				result = result.concat(this.getOptionValues(formObject[key][i]));
			}
		}

		return result;
	}

	this.getOptionValues = function (selectObject) {
		if (selectObject == null || selectObject.type.indexOf("select") < 0
			|| selectObject.options == null || selectObject.options.length == 0) {
			return null;
		}
		var result = [];
		for (var i = 0; i < selectObject.options.length; i++) {
			result[result.length] = selectObject.options[i].value;
		}
		return result;
	}

	this.getCheckedValue = function (key) {
		var result = this.getCheckedValues(key);
		if (result == null || result.length == 0) {
			return null;
		}
		return result[0];
	}

	this.getCheckedValues = function (key) {
		if (this.containsKey(key) == false) {
			return null;
		}
		var result = [];
		if (formObject[key].length == null) {
			if (formObject[key].checked == true) {
				result[0] = formObject[key].value;
				return result;
			}
			return null;
		}

		for (var i = 0; i < formObject[key].length; i++) {
			if (formObject[key][i].checked == true) {
				result[result.length] = formObject[key][i].value;
			}
		}
		return result;
	}

	this.getSelectedValue = function (key) {
		var result = this.getSelectedValues(key);
		if (result == null || result.length == 0) {
			return null;
		}
		return result[0];
	}

	this.getSelectedValues = function (key) {
		if (this.containsKey(key) == false) {
			return null;
		}
		var result = [];
		var selectObject = null;
		if (formObject[key].length == null) {
			selectObject = formObject[key];
		} else {
			selectObject = formObject[key][0];
			alert(formObject[key]);
		}

		if (selectObject.type.indexOf("select") < 0) {
			return null;
		}
		if (selectObject.options == null || selectObject.options.length == 0) {
			return null;
		}

		for (var i = 0; i < selectObject.options.length; i++) {
			if (selectObject.options[i].selected) {
				result[result.length] = selectObject.options[i].value;
			}
		}
		return result;
	}

	this.containsKey = function (key) {
		if (key == null || key == "") {
			return false;
		}
		if (formObject == null || formObject[key] == null) {
			return false;
		}
		return true;
	}

	this.submit = function () {
		if (this.formObject == null || this.submit == true) {
			return;
		}
		this.submit = true;
		this.formObject.submit();
	}

}

function initFormWrapper() {
	if (document.forms == null) {
		return;
	}
	for (var i = 0; i < document.forms.length; i++) {
		if (document.forms[i].name) {
			_forms_[document.forms[i].name] = new FormWrapper(document.forms[i].name);
		}
	}
}

function destroyFormWrapper() {
	if (window.detachEvent) {
		window.detachEvent("onload", initFormWrapper);
	}
}

function getForm(name) {
	if (name == null) {
		return null;
	}
	return _forms_[name];
}

if (window.addEventListener) {
	window.addEventListener("load", initFormWrapper, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", initFormWrapper);
	window.attachEvent("onunload", destroyFormWrapper);
} else {}
