/*
*   Author: Tim Willison
*   requiredfield.js
*   Form Validation
*   Tested in all browsers including IE6
*   Remember to include css for .invalid inputs
*   Add class 'reqd' to required fields.
*/

function trim(sString) {
   while (sString.substring(0,1) == ' ') {
      sString = sString.substring(1, sString.length);
   }
   while (sString.substring(sString.length-1, sString.length) == ' ') {
      sString = sString.substring(0,sString.length-1);
   }
   return sString;
}

window.onload = initForm;

function initForm() {
    for (var i=0; i<document.forms.length; i++) {
      var form = document.forms[i];
      form.onsubmit = function() {return validForm(this);}
    }
}

function validForm(form) {
    var allGood = true;
    var allTags = form.getElementsByTagName("*");
    
    for (var i=0; i<allTags.length; i++) {
        if(!validTag(allTags[i])) {
            allGood=false;
        }
    }
    return allGood;
    
    
    function validTag(thisTag) {
        var outClass = "";
        var allClasses = thisTag.className.split(" ");
        
        for(var j=0; j<allClasses.length; j++) {
            outClass += validBasedOnClass(allClasses[j]) + " ";
        }
    
        thisTag.className = outClass;
        
        if(outClass.indexOf("invalid") > -1) {
            thisTag.focus();
            if(thisTag.nodeName == "INPUT" || thisTag.nodeName == "TEXTAREA") {
                thisTag.select();
            }
            return false;
        }
        return true;
        
        function validBasedOnClass(thisClass) {
            var classBack = "";
            
            switch(thisClass) {
                case "":
                case "invalid":
                    break;
                case "reqd":
                    var v = trim(thisTag.value);
                    if(allGood && v == "") {
                        classBack = "invalid ";
                    }
                    classBack += thisClass;
                    break;
                default:
                    classBack += thisClass;
            }
            return classBack;
        }
        
        function crossCheck(inTag, otherFieldID) {
            if (!document.getElementById(otherFieldID))
                return false;
            return (inTag.value == document.getElementById(otherFieldID).value);
        }
    }
}