 // Form validation script [ valForm(formId) ]
// (c) copyright 2001 Braddock Graham
// Please leave these three lines, thanks....
function valForm(formObj)
{
	// start a string to hold the pop-up alert box text (concatenated below)
	validationAlertString = "";
	// get a the form object reference and make sure it's valid
	if(!formObj || typeof formObj.elements == "undefined")
	    return false;
	if(formObj && typeof formObj.elements != "undefined")
	{
	    // set the boolean values for missing requiredScript fields and invalid email field value
	    emptyInputs = false;
	    invalidEmail = false;
	    // get the array of all the requiredScript inputs from the hidden form element named "requiredScript"
	    reqInputsValue = (typeof formObj.elements.requiredScript != "undefined" && typeof formObj.elements.requiredScript.value != "undefined") ? formObj.elements.requiredScript.value : false;
	    // if no requiredScript inputs are found return
	    if(!reqInputsValue)
	        return;
	    reqInputs = (reqInputsValue.toString().indexOf(",") != -1) ? reqInputsValue.split(",") : [[reqInputsValue]];
	    reqLen = reqInputs.length;
	    for(i=0;i<reqLen;i++)
	    {
	        // get a reference to the current "requiredScript" field
	        reqField = (typeof formObj.elements[reqInputs[i]] != "undefined") ? formObj.elements[reqInputs[i]] : false;
	        if(reqField)
	        {
	            // set the current field's value to [tmpVal]
	            tmpVal = reqField.value;
	            // check to see if the value is "invalid" (blank or "requiredScript" in this case)
	            if(tmpVal == "" || tmpVal == null || tmpVal == " " || tmpVal == "requiredScript")
	            {
	                // if the regField is a set of radio buttons
	                if(typeof reqField.type == "undefined" && typeof reqField.length != "undefined")
	                {
	                    reqILen = reqField.length;
	                    valueFound = false;
	                    for(rEI=0;rEI< reqILen;rEI++)
	                    {
	                        if(typeof reqField[rEI].checked == "boolean" && reqField[rEI].checked) valueFound = true;
	                    }
	                    if(!valueFound)
	                    {
	                        for(rEI=0;rEI< reqILen;rEI++)
	                        {
	                            if(typeof reqField[rEI].value != "undefined" && reqField[rEI].value.toString() != "" && typeof reqField[rEI].id != "undefined" && reqField[rEI].id.toString() == "") reqField[rEI].id = reqInputs[i] + "_" + reqField[rEI].value.toString();
	                            // IE 4+ and NS 6+ code
	                            // change the border/padding of the containing element for these radio buttons for IE 4+ and NS 6
	                            if(!document.layers)
	                            {
	                                if(document.getElementById(reqInputs[i] + "_label") && typeof document.getElementById(reqInputs[i] + "_label").className != "undefined") { document.getElementById(reqInputs[i] + "_label").className = "formReqLabel"; if(!document.all) { document.getElementById(reqInputs[i] + "_label").style.padding = "1px"; document.getElementById(reqInputs[i] + "_label").style.border = "solid 2px rgb(255,0,0)" } };
	                                if(document.all) reqField[rEI].onfocus = function() { if(this.className == "reqField") { this.className = "formField"; } if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; } };
	                                else if(!document.all && document.getElementById) reqField[rEI].addEventListener("focus",function() { this.className = "formField"; if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; document.getElementById(this.name.toString() + "_label").style.padding = "0px"; document.getElementById(this.name.toString() + "_label").style.border = "solid 0px rgb(255,255,255)"; } },false);
	                            }
	                            // NS 4 code
	                            if(document.layers)
	                            {
	                                // if this is the beginning of missing "radio" button values then start the validationAlertString text for this set of possible values
	                                if(rEI == 0) validationAlertString += "one of the following " + reqField[0].name + " values:\n";
	                                // add the value of this radio button
	                                validationAlertString += reqField[rEI].value + ",";
	                            }
	                        }
	                        if(document.layers && validationAlertString.charAt(validationAlertString.length - 1) == ",") validationAlertString = validationAlertString.substring(0,validationAlertString.length - 1) + "\n\n";
	                    }
	                }
	                // else if the regField isn't a set of radio buttons
	                else
	                {
	                    // IE 4+ and NS 6+ code
	                    // change border for input fields with "invalid" email values for IE 4+ and NS 6
	                    if(!document.layers)
	                    {
	                        if(typeof reqField.className != "undefined") reqField.className = "reqField";
	                        if(document.getElementById(reqInputs[i] + "_label") && typeof document.getElementById(reqInputs[i] + "_label").className != "undefined") document.getElementById(reqInputs[i] + "_label").className = "formReqLabel";
	                        if(document.all) reqField.onchange = function() { if(this.className == "reqField") { this.className = "formField"; } if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; } };
	                        else if(!document.all && document.getElementById) reqField.addEventListener("change",function() { this.className = "formField"; if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; } },false);
	                    }
	                    // NS 4 code
	                    // change value for input fields with "missing" values for NS 4
	                    if(document.layers)
	                    {
	                        reqField.value = 'requiredScript';
	                        reqField.onfocus = function() { if(this.value.toString().toLowerCase() == 'requiredScript') { this.value = ''; } };
	                    }
	                    emptyInputs = true;
	                }
	            }
	            else if((reqInputs[i].toString().indexOf("Email") != -1) && (tmpVal != "" && tmpVal != null && tmpVal != " ") && (tmpVal.indexOf("@") == -1 || tmpVal.indexOf(".") == -1))
	            {
	                // if the field's value is "invalid" (blank) or if it failed the check to see if it contained a "@" and a "." character (loose email address validation)
	                // then check if its the "Email" field (add more field names like: if(reqInputs[i] == "Email"|| reqInputs[i] == "SecondEmail" || reqInputs[i] == "CompanyEmail")
	                if(reqInputs[i].toString().indexOf("Email") != -1)
	                {
	                    // IE 4+ and NS 6 code
	                    // change border for input fields with "invalid" email values for IE 4+ and NS 6
	                   if(!document.layers)
	                    {
	                        if(typeof reqField.className != "undefined") reqField.className = "reqField";
	                        if(document.getElementById(reqField.id + "_label") && typeof document.getElementById(reqField.id + "_label").className != "undefined") document.getElementById(reqField.id + "_label").className = "formReqLabel";
	                        if(document.all) reqField.onchange = function() { if(this.className == "reqField") { this.className = "formField"; } if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; } };
	                        else if(!document.all && document.getElementById) reqField.addEventListener("change",function() { this.className = "formField"; if(document.getElementById(this.name.toString() + "_label") && typeof document.getElementById(this.name.toString() + "_label").className != "undefined" && document.getElementById(this.name.toString() + "_label").className == "formReqLabel") { document.getElementById(this.name.toString() + "_label").className = "formLabel"; } },false);
	                        if(!emptyInputs) emptyInputs = true;
	                   }
	                    // NS 4 code
	                    // change value for email input fields with "invalid" values for NS 4
	                    if(document.layers)
	                    {
	                        reqField.value = 'requiredScript';
	                        reqField.onfocus = function() { if(this.value.toString().toLowerCase() == 'requiredScript') { this.value = ''; } };
	                        if(!emptyInputs) emptyInputs = true;
	                    }
	                }
	                // do loose HTML stripping by replacing "<" and ">" characters with #&lt; and &gt;
	                if(tmpVal.indexOf("<") != -1 || tmpVal.indexOf(">") != -1)
	                {
	                    tmpVal = tmpVal.replace(/</g,"&lt;");
	                    tmpVal = tmpVal.replace(/>/g,"&gt;")
	                    reqField.value = tmpVal;
	                }
	            }
	            // end if(reqField)
	        }
	    }
	    // if there's no "invalid" entries in the requiredScript fields listed in the "hidden" requiredScript input field, SUBMIT the form.
	    if(!emptyInputs) formObj.submit();
	    else if(emptyInputs)
	    {
	        validationAlertTitle = "*****   ALERT: Missing Information   *****\n\n";
	        validationAlertString = (document.layers) ? validationAlertTitle + "In order to submit this form, please supply:\n\na valid entry for all items with a 'required' value.\n" + validationAlertString : validationAlertTitle + "In order to submit this form, please supply\n      a valid entry for all required items.\n         (items indicated by an asterisk)\n" + validationAlertString;
	        alert(validationAlertString);
	    }
	    return false;
	}
	return false;
}