var formSubmitted = false;

function clearForm(formElement) {
	var form = findParentOfType(formElement, "FORM");
	var inputs = form.getElementsByTagName("input");
	var selects = form.getElementsByTagName("select");
	var textareas = form.getElementsByTagName("textarea");
	clearElements(inputs);
	clearElements(selects);
	clearElements(textareas);
}


function clearElements(elements) {
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].type == "hidden" || elements[i].type == "button")
			continue;
		if (elements[i].type == "select-one") {
			elements[i].selectedIndex = 0;
		}
		else if (elements[i].type == "radio" || elements[i].type == "checkbox") {
			if (elements[i].checked == true)
				elements[i].checked = false;
		} else
			elements[i].value = "";
	}
}

// Consider doing recursive style update here
function setWaitCursor(element) {
	element.style.cursor = "wait";
}

function setDefaultCursor(element) {
	element.style.cursor = "default";
}

function queryString(form) {
	var inputs = form.getElementsByTagName("input");
	var selects = form.getElementsByTagName("select");
	var queryString = "";
	queryString = queryStringFromElements(inputs, queryString);
	queryString = queryStringFromElements(selects, queryString);
	queryString = queryStringFromElements(form.getElementsByTagName("textarea"), queryString);
	return queryString;
}

function queryStringFromElements(elements, queryString) {
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].type == 'radio' && elements[i].checked != true || elements[i].name.length < 1)
			continue;
		if (queryString.length > 0)
			queryString += '&';
		queryString += elements[i].name+ '=' +elements[i].value;
	}
	return queryString;
}

function setFocusOnField(form, field) {
  var focusControl = eval("document.forms[\"" +form+ "\"].elements[\"" +field+ "\"]");

  if (focusControl.type != "hidden" && !focusControl.disabled) {
     focusControl.focus();
  }
}

function submitForm(field) {
	if (formSubmitted)
		return false;
	var form = findParentOfType(field, "FORM");
	formSubmitted = true;
	form.submit();
}

function inputSelected(currentField) {
	// IE
	if (document.selection) {
		var range = document.selection.createRange();
	    return range.text.length > 0;
	}
	// Mozilla
	else if (currentField.selectionStart < currentField.selectionEnd) {
		return true;
	} 
	return false;
}

function upperCase(field) {
	if (field.value.length == field.maxLength) {
		field.value=field.value.toUpperCase();
	}
}

function autoGoToNextField(currentField, nextFieldId) {
	autoGoToNextField2(currentField, currentField.maxLength, nextFieldId);
}

function autoGoToFirstSiblingOfType(currentField) {
	autoGoToFirstSiblingOfType2(currentField, currentField.maxLength);
}

function autoGoToNextField2(currentField, requiredLength, nextFieldId) {
	if (currentField.value.length == requiredLength) {
		var go = inputSelected(currentField);
		if (!go)  {
			//window.status=window.status +" go:" +go;
			var form = findParentOfType(currentField, "FORM");
			form[nextFieldId].focus();
		}
	}
}

function autoGoToFirstSiblingOfType2(currentField, requiredLength) {
	if (currentField.value.length == requiredLength)
		if (!inputSelected(currentField)) {
			var sibling = findFirstSiblingOfType(currentField);
			sibling.focus();
		}
}

function findFirstSiblingOfType(field) {
	var nextCell = field.nextSibling;
	while(nextCell.nodeName != field.nodeName)
		nextCell = nextCell.nextSibling;
	return nextCell;
}

function goToNextFieldOfType(startingField, requiredLength, tagName) {
	if (currentField.value.length == requiredLength) {
		var tag = startingField.getElementsByTagName(tagName);
		tag.focus();
	}
}

function findParentOfType(field, tagName) {
	var form = field.parentNode;
	while (form.tagName != tagName)
		form = form.parentNode;
	return form;
}