function validate() {
 var str = "";
 var elements = document.getElementsByTagName('input');
 patterns = new Array();
 patterns["namePattern"] ="[^A-Za-z -.,]+";
 patterns["companyNamePattern"] = "[^A-Za-z0-9 -.,]+";
 patterns["addressPattern"] = "[^A-Za-z0-9 -.,]+";
 patterns["emailPattern"] = "[^A-Za-z0-9-._@]+";
 patterns["zipPattern"] = "[^0-9]+";
 patterns["phonePattern"] = "[^0-9]+";
 patterns["urlPattern"] = "[^A-Za-z0-9_-.]";
 patterns["datePattern"] = "[^0-9/]+";
 patterns["gradePattern"] = "[^0-9K]+;"

 // loop through all input elements in form
 for(var i = 0; i < elements.length; i++) {

   // check if element is mandatory; ie has a pattern  
   var pattern = elements.item(i).getAttribute('pattern');
   var required = elements.item(i).getAttribute('required');
   var value = elements.item(i).value;
	
   if(required != null) {
	 if(elements.item(i).getAttribute('required') == 'yes' && value.length == 0)
	 str += "Please fill out the " + elements.item(i).name +" field\n";   
	   
   }
   if (pattern != null) {
    

     // validate the value of this element, using its defined pattern
     var offendingChar = value.match(patterns[pattern]);

     // if an invalid character is found or the element was left emtpy
     if(offendingChar != null && value.length > 0) {

       // add up all error messages
       str += "Found this illegal value: '" + offendingChar + "' in " +elements.item(i).name + "\n";

       // notify user by changing background color, in this case to red
       elements.item(i).style.background = "yellow";  
	   elements.item(i).focus();
     }
	
   }
 }  

 if (str != "") {
   // do not submit the form
   alert("ERROR ALERT!!\n" +str);  
   return false;
 } else {
   // form values are valid; submit
   return true;
 }
}