/*** form.js
Author		: Huy K. Quan
Created on	: Wednesday, June 11, 2003
Company		: 
Type		: Javascript
Description : HTML Form support functions
***/

function js_findForm(formName)
{
	if (typeof(formName) == "object") return formName;
	
	var dforms = document.forms;
	if (!formName && dforms.length > 0) return dforms[0];
	if (typeof(formName) == "string")
	{		
		for (var i = 0; i < dforms.length; i++)
		{
			if (dforms[i].name.toUpperCase() == formName.toUpperCase()) return dforms[i];
		}
	}
	return null;
}

function js_findFormByField(fieldName)
{
	if ( typeof(fieldName) == "object" ) return fieldName;
	
	var i = 0, j = 0;
	var dforms = document.forms;
	for (i = 0; i < dforms.length; i++)
	{
		for(j = 0; j < dforms[i].elements.length; j++)
		{
			if (dforms[i].elements[j].name.toUpperCase() == fieldName.toUpperCase()) return dforms[i];
		}
	}

	if ( js_findFormByField.arguments.length == 1 )
	{
		alert("Web Application Error!\n\nCould not find form that has field name " + fieldName);
	}

	return null;
}

function js_findFormField(fieldName, formName)
{
	if (typeof(fieldName) == "object") return fieldName;
	
	var i = 0, j = 0;
	if (formName)
	{
		formName = js_findForm(formName);
		for(j = 0; j < formName.elements.length; j++)
		{
			if (formName.elements[j].name.toUpperCase() == fieldName.toUpperCase()) return formName.elements[j];
		}
	}
	else
	{		
		var dforms = document.forms;
		for (i = 0; i < dforms.length; i++)
		{
			for(j = 0; j < dforms[i].elements.length; j++)
			{
				if (dforms[i].elements[j].name.toUpperCase() == fieldName.toUpperCase()) return dforms[i].elements[j];
			}
		}
	}
	
	if ( js_findFormField.arguments.length < 3 )
	{
		alert("Web Application Error!\n\nCould not find field that has name " + fieldName);
	}

	return null;
}

function js_getFormInputText(field, form)
{
	field = js_findFormField(field, form);
	if (field) return field.value;
	return null;	
}

function js_isFormInputTextEmpty(field, form)
{
	if (js_getFormInputText(field, form)) return false;
	return true;
}

function js_getFormInputNumericValue(field, form)
{
	field = js_getFormInputText(field, form);
	if (field && js_isNumeric(field)) return field;
	return null;	
}

function js_trim(string) 
{
	var startpos = 0, endpos = string.length - 1;
	if (endpos == -1) return string;
	while (startpos <= string.length && string.substring(startpos, startpos + 1) == " ") startpos++; 
	while (endpos >= 0 && string.substring(endpos, endpos + 1) == " ") endpos--; 
	if (startpos > endpos) return "";
	else return string.substring(startpos, endpos + 1);
}
function js_trimObject(obj)
{
   obj.value = js_trim(obj.value);
}

function js_trimForm(form)
{
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "text" || form[i].type == "password" || form[i].type == "textarea") js_trimObject(form[i]);
	}
}

function js_resetForm(form)
{
	var focusid = null;
	var fieldType;
	for (var i = 0; i < form.length; i++) 
	{
		fieldType = form[i].type.toLowerCase();
		if (fieldType == "text" || fieldType == "password" || fieldType == "textarea")
		{
			form[i].value = "";
			if (focusid == null) focusid = i;
		}
		else if (fieldType == "checkbox")
		{
			form[i].checked = false;
		}
	}
	if (focusid != null) form[focusid].focus();
}

function js_submitForm(form, message, cmdflag, flagValue)
{
	form = js_findForm(form);
	if (!flagValue)
	{
		if (cmdflag)
		{
			var fvCmdFlag = js_findFormField("cmdflag", form);
			if (fvCmdFlag) fvCmdFlag.value = cmdflag;
		}
	}
	else
	{
		if (cmdflag)
		{
			var fvCmdFlag = js_findFormField(cmdflag, form);
			if (fvCmdFlag) fvCmdFlag.value = flagValue;
		}
	}
	if (!message) message = "Web Application is submitting your request";
	//if (js_actionRequest(message, "submit")) 
	form.submit();
}

function js_onSubmitDefault(message)
{
	return js_actionRequest("Web Application is processing your request", "submit");
}

function js_selectOption(selectName, optionValue, indexValue)
{
	var selectObject = js_findFormField(selectName, null);
	if (indexValue)
	{
		if (optionValue >= 0 && optionValue < selectObject.options.length) selectObject.options[optionValue].selected = true;
	}
	else
	{
		optionValue= optionValue + "";
		for (var i = 0; i < selectObject.options.length; i++)
		{
			var selectValue = selectObject.options[i].value + "";
			if (selectValue.toUpperCase() == optionValue.toUpperCase()) 
			{
				selectObject.options[i].selected = true;				
				return;
			}
		}
	}
}

function js_selectOptionOnChange(onChangeSelectObject, compareValues, selectName, optionValue)
{
	var selfSelectObject = js_findFormField(onChangeSelectObject);
	var selectObject = js_findFormField(selectName);
	var values = compareValues.split(",");
	var selectedValue = js_getSelectedValue(selfSelectObject, false);
	
	for (var j = 0; j < values.length; j++)
	{
		if (values[j] == selectedValue)
		{
			for (var i = 0; i < selectObject.options.length; i++)
			{
				if (selectObject.options[i].value.toUpperCase() == optionValue.toUpperCase()) 
				{
					selectObject.options[i].selected = true;				
					return;
				}
			}
			return;
		}
	}
}

function js_getSelectedValue(selectName, multiple)
{
	var selectObject = js_findFormField(selectName);
	if (!multiple) return selectObject.options[selectObject.selectedIndex].value;
	var jsvValues;
	for (var i = 0; i < selectObject.options.length; i++)
	{
		if (selectObject.options[i].selected)
		{
			if (!jsvValues) jsvValues = selectObject.options[i].value;
			else jsvValues += "," + selectObject.options[i].value;
		}
	}
	return jsvValues;
}

function js_addSelection(selectName, selectValue, selectText, selected)
{
	var selectObject = js_findFormField(selectName);
	var option = new Option(selectText, selectValue);
	selectObject.options[selectObject.options.length] = option;
	if (selected) selectObject.options[selectObject.options.length - 1].selected = true;
}
function js_removeSelection(selectName, selectValue, removeByValue)
{
	if (selectValue.length == 0) return;
	var arrayValue = selectValue.split(",");
	if (arrayValue.length > 1)
	{
		for (var i = 0; i < arrayValue.length; i++)
		{
			js_removeSelection(selectName, arrayValue[i], removeByValue);
		}
		return;
	}
	
	var selectObject = js_findFormField(selectName);
	if (removeByValue)
	{
		for (var i = 0; i < selectObject.options.length; i++) 
		{
			if (selectObject.options[i].value.toUpperCase() == selectValue.toUpperCase()) 
			{
				selectValue = i;
				break;
			}
		}
	}
	if (selectObject.options.length > 0 && selectValue >= 0)
	{
		selectObject.options[selectValue] = null;
		if (selectObject.options.length > selectValue) selectObject.options[selectValue].selected = true;
		else if (selectObject.options.length) selectObject.options[selectObject.options.length - 1].selected = true;
	}
}

function js_selectCheckBoxes(checker, checkName, useWithPrefix)
{
	var includeDisabled = false;
	var prefixName = (useWithPrefix ? useWithPrefix : "");
	if (js_selectCheckBoxes.arguments.length > 3) includeDisabled = js_selectCheckBoxes.arguments[3];
	if (checker.checked) js_checkAll(checker.form, checkName, includeDisabled, prefixName);
	else js_uncheckAll(checker.form, checkName, "", prefixName);
}
	
function js_checkAll(form, checkName, checkDisabled, enableWithPrefix)
{
	var fv_prefixes = null;
	if (enableWithPrefix)
	{
		fv_prefixes = enableWithPrefix.split(",");
	}

	form = js_findForm(form);
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "checkbox" && (checkDisabled || form[i].disabled == false))
		{
			if (!checkName || checkName == form[i].name)
			{
				form[i].checked = true;
				if (enableWithPrefix)
				{
					for (var j = 0; j < fv_prefixes.length; j++)
					{
						//alert(js_trim(fv_prefixes[j]) + " " + js_trim(fv_prefixes[j]) + form[i].value);
						var ctrlobj = js_findFormField(js_trim(fv_prefixes[j]) + form[i].value, form, false);
						if (ctrlobj && ctrlobj.disabled) ctrlobj.disabled = false;
					}
				}
			}
		}
	}
}

function js_uncheckAll(form, checkName, checkval, disableWithPrefix)
{
	var fv_prefixes = null;
	if (disableWithPrefix)
	{
		fv_prefixes = disableWithPrefix.split(",");
	}
	
	form = js_findForm(form);
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "checkbox")
		{
			if (!checkName || checkName == form[i].name)
			{
		
				if (checkval && form[i].value == checkval) form[i].checked = true;
				else
				{
					form[i].checked = false;
					if (disableWithPrefix)
					{
						for (var j = 0; j < fv_prefixes.length; j++)
						{
							var ctrlobj = js_findFormField(js_trim(fv_prefixes[j]) + form[i].value, form, false);
							if (ctrlobj && !ctrlobj.disabled) ctrlobj.disabled = true;
						}
					}

				}
			}
		}
	}
}

function js_countChecked(form, checkName)
{
	var fvcnt = 0;
	form = js_findForm(form);
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "checkbox" && (!checkName || checkName == form[i].name) && form[i].checked) fvcnt++;
	}
	return fvcnt;
}

function js_getCheckedValueList(form, checkName, delimiter)
{
	var fvcnt = 0;
	var fvresult = "";
	form = js_findForm(form);
	if (!delimiter) delimiter = ",";
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "checkbox" && form[i].name == checkName && form[i].checked)
		{
			if (fvcnt > 0) fvresult = fvresult + delimiter + form[i].value;
			else fvresult = form[i].value;
			fvcnt++;
		}
	}
	return fvresult;
}

function js_enableCheckedObjects(checkObject)
{
	checkObject = js_findFormField(checkObject);
	var form = checkObject.form;
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].type == "checkbox" && form[i].name == checkObject.name && form[i].checked && form[i].disabled)
		{
			form[i].disabled = false;
		}
	}
	return;
}

function js_focusAfterCheck(checker, focusElement)
{
	checker = js_findFormField(checker);
	focusElement = js_findFormField(focusElement);
	if (checker.checked) focusElement.focus();
}

function js_enableAllOnCheck(checker, elements)
{
	elements = elements.split(",");
	for (var i = 0; i < elements.length; i++)
	{
		js_enableOnCheck(checker, elements[i], "NoAlertOnNotFound");
	}
}

function js_enableOnCheck(checker, elementObject)
{
	checker = js_findFormField(checker);
	if (js_enableOnCheck.arguments.length > 2)
		elementObject = js_findFormField(elementObject, checker.form, false);
	else
		elementObject = js_findFormField(elementObject, checker.form);
	
	if (!elementObject) return;	
	if (checker.checked)
	{
		elementObject.disabled = false;
		elementObject.focus();
	}
	else elementObject.disabled = true;
}

function js_disableAllOnCheck(checker, elements)
{
	elements = elements.split(",");
	for (var i = 0; i < elements.length; i++)
	{
		js_disableOnCheck(checker, elements[i]);
	}
}

function js_disableOnCheck(checker, elementObject)
{
	checker = js_findFormField(checker);
	if (js_disableOnCheck.arguments.length > 2)
		elementObject = js_findFormField(elementObject, checker.form, false);
	else
		elementObject = js_findFormField(elementObject, checker.form);

	if (!elementObject) return;
	if (checker.checked) elementObject.disabled = true;
	else
	{
		elementObject.disabled = false;
		elementObject.focus();
	}
}

function js_showHideOnCheck(checker, elementObject)
{
	checker = js_findFormField(checker);
	elementObject = js_getElementById(elementObject);
	if (checker.checked) js_showLayer(elementObject);
	else js_hideLayer(elementObject);
}

function js_enableFormControls(form)
{
	form = js_findForm(form);
	for (var i = 0; i < form.length; i++)
	{
		if (form[i].disabled)
		{
			form[i].disabled = false;
		}
	}
}
