function HTML_Form_Do(formName, action)
{
	document.forms[formName].elements['DO'].value = action;
	document.forms[formName].submit();	
	return true;
}

function HTML_Form_SubmitDo(formName, action, params)
{
	if (document.forms[formName].onsubmit()) HTML_Form_Do(formName, action);
}

function HTML_Form_Submit(formName, validate)
{
	if (document.forms[formName].name) form = document.forms[formName];
	else if (arguments.length > 2 && arguments[2] && document.forms[formName][arguments[2]]) form = document.forms[formName][arguments[2]];
	else if (document.forms[formName][0]) form = document.forms[formName][arguments[2]];
	else return;
	if (!validate || form.onsubmit()) form.submit();
}

function HTML_Form_Field(fieldName)
{
	if (arguments.length > 1 && arguments[1]) form = arguments[1];
	else form = self.document.forms[HTML_Form_Fields[fieldName]['Form']];
	if (!form.name) form = form[0];
	if (!form.name) return false;
	if (form.elements[fieldName]) {
		if (form.elements[fieldName].type) return form.elements[fieldName];
		if (form.elements[fieldName][0].type == 'radio') return form.elements[fieldName];
		if (form.elements[fieldName][0].type) return form.elements[fieldName][0];
		return form.elements[fieldName];
	}
	if (form.elements[fieldName+'[]']) return form.elements[fieldName+'[]'];
	return false;
}

function HTML_Form_Value(field)
{
	if (typeof(field) == "string") field = HTML_Form_Field(field);
	if (!field) return null;
	var result = Array();

	// Check for various field types and return values
	if (!field.options && field.length) {
		for (var i = 0; i < field.length; i++)
			if (field[i] && field[i].checked) result[result.length] = field[i].value;			
	} else if (field.type == 'select-one' || field.type == 'select') {
		if (field.selectedIndex >= 0) result[result.length] = field.options[field.selectedIndex].value;
	} else if (field.type == 'select-multiple') {
		for (var o = 0; o < field.options.length; o++)
			if (field.options[o].selected) result[result.length] = field[o].value;
	} else if (field.type == 'button' || field.type == 'checkbox') {
		if (field.checked) result[result.length] = field.value;
	} else if (field.type == 'text' || field.type == 'textarea' || field.type == 'password' || field.type == 'file' || field.type == 'radio' || field.type == 'hidden') {
		 result[result.length] = field.value;
	} else {
		 result[result.length] = '';
	}

	// Return single item if not more than one, else return array
	if (result.length == 0) return '';
	if (result.length == 1) return result[0];
	return result;
}

function HTML_Form_Error()
{
	var fieldName = arguments[0];
	var error = arguments[1];
	var errorText = error;
	var item = /%s/;

	if (HTML_Forms[HTML_Form_Fields[fieldName]['Form']]['Errors'][error]) errorText = HTML_Forms[HTML_Form_Fields[fieldName]['Form']]['Errors'][error];
	if (HTML_Form_Fields[fieldName]['Errors'][error]) errorText = HTML_Form_Fields[fieldName]['Errors'][error];
	for (var i = 2; i < arguments.length; i++) errorText = errorText.replace(item, arguments[i]);
	return errorText;	
}

function HTML_Form_Validate(form)
{
	if (!HTML_Form_Field_Validate) return true;
	var formInfo = HTML_Forms[form.name];
	var fieldName;
	if (!formInfo['Validate']) return true;
	self.status = "Validating Input...";
	for (fieldName in HTML_Form_Fields) {
		if (!HTML_Form_Fields[fieldName]) continue;
		if (!HTML_Form_Fields[fieldName]['Form'] == form.name) continue;
		if (!HTML_Form_Field_Validate(fieldName, form)) {
			self.status = "";
			return false;
		}
	}
	self.status = "";
	return true;
}

