// a function

// Variables to be populated
var requiredFields = new Array; 
var fieldNames = new Array; 
var valStrings = new Array;

// only loop once
var formElementIndex = new Array;
var formElementIndexInitialised = false;
function initFormElementIndex(formObject) {
	if (typeof formObject == "undefined") { formObject = document.forms[0]; }
	var lastElement = '';
	//alert ('Initialising');
	for (var i = 0; i < formObject.elements.length; i++) {
		if (formObject.elements[i].name != lastElement) {
			lastElement = formObject.elements[i].name;
			if (lastElement) { formElementIndex[lastElement] = i; }
			//alert ('formElementIndex['+lastElement+'] = '+formElementIndex[lastElement]);
		}
		//status = (i+1) + '/' + formObject.elements.length;
	}
	formElementIndexInitialised = true;
	return true;
}

// Functions to support validation of search.php

// Variables in HTML
// requiredFields, fieldNames, valStrings should come from requiredFields.js
if (typeof valStrings == "undefined") {
	var valStrings = new Array;
}


// If you click anything other than All, All must be unchecked
// unless you've just unchecked the last of the other checked items.
function uncheck (formElement) {
	var firstElement = 0;
	var gotAnother = false;
	var allChecked = true;
	for (var i = formElementIndex[formElement.name]; i < formElement.form.elements.length; i++) {
		if (formElement.form.elements[i].name == formElement.name) {
			if (firstElement) {
				gotAnother = (gotAnother || formElement.form.elements[i].checked);
				allChecked = (allChecked && formElement.form.elements[i].checked);
			} else {
				firstElement = i;
				formElement.form.elements[i].checked = false;
			}
		} else if (firstElement) {
			break;  // terminate the loop when we go on to another form element.
		}
	}
	if (!gotAnother || allChecked) {
		formElement.form.elements[firstElement].checked = true;
		if (allChecked) {
			resetCheckboxes(formElement.form, formElement.name);
		}
	}
}


// Reset a given set of checkboxes
function resetCheckboxes (formObject, formElementName) {
	var gotFirstElement = false;
	//alert ("resetting "+formElementName+" "+formElementIndex[formElementName]);
	for (var i = formElementIndex[formElementName]; i < formObject.elements.length; i++) {
		if (formObject.elements[i].name == formElementName) {
			if (gotFirstElement) {
				formObject.elements[i].checked = false;
			} else {
				formObject.elements[i].checked = true;
				gotFirstElement = true;
			}
		} else if (gotFirstElement) {
			break;  // terminate the loop when we go on to another form element.
		}
	}
}

// If you click all, we have to clear all the others,
// but ensure that later stays checked and reset the weighting.
// Originally checkAll - called often, so HTML is optimised by shortening
function check (formElement) {
	resetCheckboxes (formElement.form, formElement.name);
}