// Script to check that fields are filled in before form is submitted//	script does not validate that any of the fields are input correctly//	just that there is something in the field.// Script must be placed at the very end of the page, after all form elements.// (c) 2007 eightize// class of required fieldsvar checkFields = "requiredfield";// class to apply to fields that have not been filled correctlyvar checkStyle = "field_hilight";// default class of fieldsvar okStyle = "";// text of the error messagevar errMsg = "Please fill in all required fields before submitting the form. The following needs to be filled in:";setForm();function setForm() {// set up form to call this script on submit if it has checkFields class// assigned to any fields// globals: checkFields	var docForms=document.getElementsByTagName('form');	if (docForms.length) {		for (var i=0;i<docForms.length;i++) {			var reqFields=getElementsByClass(checkFields,docForms[i]);			if (reqFields.length>0)				docForms[i].onsubmit=verifyFields;		}	}}function verifyFields() {// called when user submits form// check through form for empty fields and display error// if there are any// globals: errMsg	var formHandle = this;	var errorTx = digForm(formHandle);	if (errorTx!='') {		alert(errMsg+errorTx);		return false;	} else {		// allow submit to continue		return true;	}}function digForm(parntN) {// step through every required field in the form and check that it is filled// if not, return list of missing field names// globals: checkFields	var fTree = getElementsByClass(checkFields,parntN);	var missFlds = '';	for (var i=0; i<fTree.length; i++) {		// get node type		var fNName = fTree[i].nodeName.toUpperCase();		if (((fNName == 'INPUT')&&(fTree[i].type == 'text'))||(fNName == 'TEXTAREA')||(fNName == 'SELECT')) {			// check if empty			if (trim(fTree[i].value) == '' || fTree[i].value == fTree[i].defaultValue) {				// format field name				missFlds += "\n"+fTree[i].name.replace(/_/g,' ').replace(/([a-z])([A-Z])/g,"$1 $2");				hilightFld(fTree[i],true);			} else {				// remove hilighting, if it's there				hilightFld(fTree[i],false);			}		}	}	return missFlds;}function hilightFld(fieldHandle, addCl) {// add class checkStyle to fields// globals: checkStyle	var reCheck = REmake(checkStyle);	if (addCl && !reCheck.test(fieldHandle.className)) {		fieldHandle.className += " "+checkStyle;	} else {		if (reCheck.test(fieldHandle.className)) {			// only change it if it's been set			fieldHandle.className = fieldHandle.className.replace(reCheck,'');		}	}}function trim(str) {    return str.replace(/^\s*/, '').replace(/\s*$/, ''); }// returns regular expression of stringfunction REmake(testStr,switchStr) {   var badChars = Array('\\','^','$','*','+','?','.','(',')','{','}','|','[',']','/');   var tempStr = testStr;   for (var i=0; i<badChars.length; i++) {      tempStr = tempStr.replace(badChars[i],'\\'+badChars[i]);   }   return new RegExp("\\b"+tempStr+"\\b",(switchStr)?switchStr:'gi');}// get elements by class name// from http://www.dustindiaz.com/top-ten-javascript/function getElementsByClass(searchClass,node,tag) {	var classElements = new Array();	if ( node == null )		node = document;	if ( tag == null )		tag = '*';	var els = node.getElementsByTagName(tag);	var elsLen = els.length;	var pattern = new RegExp("\\b"+searchClass+"\\b");	for (i = 0, j = 0; i < elsLen; i++) {		if ( pattern.test(els[i].className) ) {			classElements[j] = els[i];			j++;		}	}	return classElements;}
