function fApplyImageBehaviour(sNavLevel) { // v1.2.1 2005-08-22; like:; req:;
	var aMouseOvers = new Array(); var aMouseOuts = new Array();
	if (!(document.createElement && document.getElementsByTagName)) return; // W3 DOM detection
	var oNavs = document.getElementById('jsApplyRollOvers'+sNavLevel);
	if (!oNavs) return;
	var tImgs = oNavs.getElementsByTagName('img');
	for (var i=0;i<tImgs.length;i++) {
		if (tImgs[i].id != 'jsIgnoreRollOvers') { // test if NOT delimiter/spacer image
			tImgs[i].onmouseover = function() {this.src = aMouseOvers[this.number].src;};
			tImgs[i].onmouseout = function() {this.src = aMouseOuts[this.number].src;};
			var suffix = tImgs[i].src.substring(tImgs[i].src.lastIndexOf('.'));
			aMouseOuts[i] = new Image();
			aMouseOuts[i].src = tImgs[i].src;
			aMouseOvers[i] = new Image();
			aMouseOvers[i].src = tImgs[i].src.substring(0,tImgs[i].src.lastIndexOf('.')) + "-o" + suffix;
			tImgs[i].number = i;
		}
	}
}
function fNonBlankFormField(oFormField) { // v1.4.0 2005-02-13; like:fValidateForm(v2.2),fValidateFormField(v1.3); req:;
	if (oFormField.type) {
		if (/text|file|password/.test(oFormField.type)) { // text and file and password
			return (oFormField.value.replace(/ /g, "").length != 0); // trim spaces
		} else if (/select/.test(oFormField.type)) { // select dropdown menu; both multiple and single
			if (oFormField.selectedIndex == -1) return false;
			else if (oFormField.selectedIndex == 0 && oFormField.options[oFormField.selectedIndex].value == "") // if first item selected AND blank value (meaning default value often instruction label)
				return false;
			else return true;
		} else if (/radio|checkbox/.test(oFormField.type)) { // single radio/checkbox
			return (oFormField.checked);
		} else alert('Note to Webmaster: Form type action not defined.');
	} else if (oFormField.length && oFormField[0].type && /radio|checkbox/.test(oFormField[0].type)) // multiple radio/checkbox
		for (var i=0; i<oFormField.length; i++)
			if (oFormField[i].checked) return true;
	return false;
}
function fValidEmail(oFormField) { // v1.1.1 2004-10-04; like:fValidateFormField(v1.3); req:;
	if (!(/^.+@.+\..{2,3}$/.test(oFormField.value))) return false; // test format
	else if (oFormField.value.match(/[\(\)\<\>\,\;\:\\\"\[\]]/)) return false; //test for illegal characters
	return true;
}
function fValidPhone(oFormField) { // v1.0.1 2004-10-01; like:fValidateFormField(v1.3); req:;
	var stripped = oFormField.value.replace(/[\(\)\.\-\ ]/g, ""); // strip out acceptable non-numeric characters
	return (isNaN(stripped) || (stripped.length != 10))?false:true; // contains no letters and check for 10 digits
}
function fValidateFormField(oFormField) { // v1.3.2 2005-02-13; like:fValidateForm(v2.2); req:fNonBlankFormField(v1.4),fValidDate(v1.2), fValidEmail(v1.1), fValidPhone(v1.0);
	if (!fNonBlankFormField(oFormField)) return false;
	if (oFormField.name) // radio,checkbox nameless
		if (oFormField.name.indexOf('email') != -1) // check for vailid E-Mail
			return fValidEmail(oFormField)
		else if (oFormField.name.indexOf('phone') != -1) // check for vailid Telephone
			return fValidPhone(oFormField)
	return true;
}
function fValidateForm(oForm) { // v2.2.1 2004-10-11; like:; req:fValidateFormField(v1.3);
	if (!document.getElementById || !document.getElementsByTagName) return true; // old browsers rely on server-side validation
	var bFormPassed = true, oLabel, tLabels = document.getElementsByTagName('label');
	for (var i=0; (oLabel = tLabels[i]); i++) {
		if (oLabel.className == 'txtFormLabelRequired' || oLabel.className == 'txtFormLabelAlert') {
			if (!oLabel.htmlFor) alert('Note to Webmaster: JS validation label MUST have "for" attribute.');
			if (document.getElementById(oLabel.htmlFor))
				var oFormField = oForm[document.getElementById(oLabel.htmlFor).name]; // take ID from label and learn name associated with form element
			else alert('Note to Webmaster: ' + oLabel.htmlFor + ' missing ID attribute.');
			
			if (oFormField) {
				var oClarifyLabel = document.getElementById(oFormField.id+"Clarify");
				if (fValidateFormField(oFormField)) {
					oLabel.className = 'txtFormLabelRequired';
					if (oClarifyLabel) oClarifyLabel.style.display = 'none';
				} else {
					bFormPassed = false;
					oLabel.className = 'txtFormLabelAlert';
					if (oClarifyLabel) oClarifyLabel.style.display = 'block';
				}
			}
		}
	}
	if (!bFormPassed) alert("Required fields are highlighted");
	return bFormPassed;
}
