// $Revision: 2475 $
function getFormParameterValues(form, name) {
	var elements = getFormElements(form, name);
	var values = new Array();
	for (var i = 0; i < elements.length; i++) {
		var elem = elements[i];
		if (elem.disabled) {
			continue;
		}
		values = values.concat(getFormElementValues(elem));
	}
	return values;
}

function getFormElements(form, name) {
	var elements = new Array();
	var formElements = form.elements[name];
	if (formElements == null) {
		return elements;
	}
	if (formElements.type == "select-one" || formElements.type == "select-multiple") {
		elements.push(formElements);
		return elements;
	}
	if (formElements.length != null && formElements.length > 0) {
		for (var i = 0; i < formElements.length; i++) {
			elements.push(formElements[i]);
		}
		return elements;
	}
	elements.push(formElements);
	return elements;
}

function getFormElementValues(element) {
	var values = new Array();
	if (element.disabled) {
		return values;
	}
	switch (element.tagName.toLowerCase()) {
		case "select":
			var options = element.getElementsByTagName("option");
			for (var k = 0; k < options.length; k++) {
				if (!options[k].selected) {
					continue;
				}
				var valueNode = options[k].getAttributeNode("value");
				if (valueNode && valueNode.specified) {
					values.push(options[k].value);
				} else if (options[k].childNodes[0] != null) {
					var value = options[k].childNodes[0].nodeValue;
					values.push(Trim(value));
				}
			}
			break;
		case "textarea":
			values.push(element.value);
			break;
		case "input":
			switch (element.type.toLowerCase()) {
				case "radio":
				case "checkbox":
					if (element.checked) {
						values.push(element.value);
					}
					break;
				case "text":
				case "password":
				case "file":
				case "hidden":
					values.push(element.value);
					break;
			}
			break;
	}
	return values;
}

function SubmitForm(formId, doHtmlSubmit, additionalParameters) {
	var form = getElement(unEscape(formId));
	if (form == null || form.tagName.toLowerCase() != "form") {
		return false;
	}
	if (DoValidateAllInputs(form)) {
		if (doHtmlSubmit) {
			form.submit();
			return false;
		}
		var url = new Url(form.action);
		for (var i = 0; i < form.elements.length; i++) {
			url.AppendElementValues(form.elements[i]);
		}
		// additionalParameters is an array of the form [name1, value1, name2, value2...]
		if (additionalParameters != null) {
			for (var i = 0; i < additionalParameters.length; i += 2 - 0) {
				url.Append(additionalParameters[i], additionalParameters[i + 1]);
			}
		}
		LoadScript(url.toString());
		return true;
	}
	Busy(false);
	MapBusy(false);
	return false;
}

function SubmitInputs(formId) {
	var form = getElement(unEscape(formId));
	if (form == null || form.tagName.toLowerCase() != "form") {
		return false;
	}
	var elems = new Array();
	for (var i = 1; i < arguments.length; i++) {
		elems = elems.concat(getFormElements(form, arguments[i]));
	}
	if (DoValidateInputs(form, elems)) {
		var url = new Url(form.action);
		for (var i = 0; i < elems.length; i++) {
			url.AppendElementValues(elems[i]);
		}
		LoadScript(url.toString());
		return true;
	}
	Busy(false);
	MapBusy(false);
	return false;
}

// onclick function for checkboxes with a master or dependents or both.
function Propagate(checkbox, doUpChecked, doUpUnchecked, doDownChecked, doDownUnchecked) {
	if ((checkbox.checked && doDownChecked) || (!checkbox.checked && doDownUnchecked)) {
		PropagateDown(checkbox);
	}
	if ((checkbox.checked && doUpChecked) || (!checkbox.checked && doUpUnchecked)) {
		PropagateUp(checkbox);
	}
}

// All dependents get checked or unchecked the same as master.
function PropagateDown(master) {
	var dependentNames = (isIE) ? master.dependents : master.getAttribute("dependents");
	if (dependentNames != null) {
		dependentNames = eval(dependentNames);
		for (var i = 0; i < dependentNames.length; i++) {
			var dependent = master.form[dependentNames[i]];
			// var dependent = eval("master.form." + dependentNames[i]);
			if (dependent.checked != master.checked) {
				dependent.checked = master.checked;
				PropagateDown(dependent);
			}
		}
	}
}

// Master gets checked only if all its dependents are checked, else it gets unchecked.
function PropagateUp(dependent) {
	var masterName = (isIE) ? dependent.master : dependent.getAttribute("master");
	if (masterName != null) {
		var master = dependent.form[masterName];
		// var master = eval("dependent.form." + masterName);
		var dependentNames = (isIE) ? master.dependents : master.getAttribute("dependents");
		if (dependentNames != null) {
			dependentNames = eval(dependentNames);
			var checked = dependent.checked;
			for (var i = 0; checked && (i < dependentNames.length); i++) {
				var sibling = master.form[dependentNames[i]];
				// var sibling = eval("master.form." + dependentNames[i]);
				checked &= sibling.checked;
			}
			if (master.checked != checked) {
				master.checked = checked;
				PropagateUp(master);
			}
		}
	}
}

// Dependent's onchange function to set master radio button
function CheckMaster(dependent, masterValue) {
	var masterName = (isIE) ? dependent.master : dependent.getAttribute("master");
	if (masterName != null) {
		var masters = dependent.form[masterName];
		for (var i = 0; i < masters.length; i++) {
			if (masters[i].value == masterValue) {
				masters[i].checked = true;
				return;
			}
		}
	}
}

// Uncheck radio button on CTRL-click
function Uncheck(event) {
	if (!event) {
		event = window.event;
	}	
	if (IsCtrl(event)) {
		var elem = GetTarget(event);
		if (elem != null && elem.type == "radio") {
			elem.checked = false;
			// doesn't work on IE unless it returns nothing
			return;
		}
	}
	return false;
}

function SetFormInputValue(formId, name, value) {
	var form = getElement(unEscape(formId));
	if (form == null || form.tagName.toLowerCase() != "form") {
		return;
	}
	var input = eval("form." + name);
	if (input == null || input.tagName.toLowerCase() != "input") {
	    return;
	}
	input.value = value;
}

function SetFocus(formId, name) {
	var form = getElement(unEscape(formId));
	if (form == null || form.tagName.toLowerCase() != "form") {
		return;
	}
	DoSetFocus(form, name);
}

function DoSetFocus(form, name) {
	var input;
	if (name == null) {
		// set focus on first visible non-disabled input
		for (var i = 0; i < form.elements.length; i++) {
			input = form.elements[i];
			if (!IsVisibleElement(input, true)) {
				continue;
			}
			if (input.disabled) {
				continue;
			}
			switch (input.type) {
				case "text":
				case "textarea":
				case "password":
				case "select-one":
				case "select-multiple":
				case "checkbox":
				case "radio":
					if (input.onclick != null) {
						continue;
					}
					// IE seems to need this done twice.
					input.focus();
					input.focus();
					return;
			}
		}
		// if none found, set focus on last visible non-disabled button
		// (which should be submit button)
		for (var i = form.elements.length - 1; i >= 0 ; i--) {
			input = form.elements[i];
			if (!IsVisibleElement(input, true)) {
				continue;
			}
			if (input.disabled) {
				continue;
			}
			switch (input.type) {
				case "button":
					input.focus();
					return;
			}
		}
		return;
	}
	input = form.elements[name];
	if (input != null && input.tagName.toLowerCase() == "input") {
		input.focus();
	}
}

function SubmitOnReturn(formId, event) {
	if (event == null) {
		event = window.event;
	}
	var r;
	var form;
	switch (event.keyCode) {
		// Return
		case 13:
			var target = GetTarget(event);
			if (target.onclick != null) {
				return target.onclick();
			}
			r = Finish(event);
			form = getElement(formId);
			if (form == null) {
				return r;
			}
			return form.onsubmit();
		// Escape
		case 27:
			r = Finish(event);
			form = getElement(formId);
			if (form == null) {
				return r;
			}
			var onescape = form.onescape;
			if (onescape == null) {
				onescape = form.getAttribute("onescape");
			}
			if (onescape != null) {
				eval(onescape);
				return;
			}
	}
}

function SubmitSearch(formId, keysString) {
	var form = getElement(unEscape(formId));
	if (form == null || form.tagName.toLowerCase() != "form") {
		return;
	}
	var keysInput = form.searchkeys;
	if (keysInput == null) {
		return;
	}
	keysInput.value = keysString;
	return form.onsubmit();
}