//Created By: Chris Campbell
//www.particletree.com
function attachFormHandlers() {
   var form = document.getElementById('form1');
   if (document.getElementsByTagName && form) {
      var objInput = document.getElementsByTagName('input');
      for (var iCounter=0; iCounter<objInput.length; iCounter++) {
         var sReq = objInput[iCounter].className.split(' ')[1];
         var sLoc = objInput[iCounter].className.split(' ')[3];
         objInput[iCounter].onblur = function(){return attach(this);}
         if (sReq == "required") { document.getElementById(sLoc).innerHTML = "Required"; }
      }
      form.onsubmit = function(){return validate();}
   }
}

var gContinue = true;
function attach(objInput) {
   sVal = objInput.value; //get value inside of input field
   var sFeedBack; //feedback is the feedback message sent back to the user
   gContinue = true;
   sRules = objInput.className.split(' '); // get all the rules from the input box classname
   sValidate = sRules[0]; //validate means we will validate the field
   sRequired = sRules[1]; // required means field is required
   sTypeCheck = sRules[2]; //typecheck are additional validation rules (ie. email, phone, date)
   sFeedbackLoc = sRules[3]; //feedbackLoc is the td id where feedback is sent to.
   sFeedback = validateRequired (sRequired, sVal, sTypeCheck); //validateRequired() checks if it is required and then sends back feedback
   if (gContinue) {
      switch (sTypeCheck) {
         case "date":
            sFeedback = validateDate(sVal);
            break;
         case "email":
            sFeedback = validateEmail(sVal);
            break;
         case "phone":
            sFeedback = validatePhone(sVal);
            break;
         case "zip":
            sFeedback = validateZip(sVal);
            break;
         case "name":
            sFeedback = validateName(sVal);
            break;
         case "numeric":
            sFeedback = validateNumeric(sVal);
            break;
      }
   }
   // after validation is complete return the feedback
   if (sFeedbackLoc) {
      feedBackLoc = document.getElementById(sFeedbackLoc);
      if (sFeedback != 'Thank You') { //error
         feedBackLoc.style.background = "#FCC";
         feedBackLoc.style.color = "red";
      } else { //valid
         feedBackLoc.style.background = "#CFC";
         feedBackLoc.style.color = "black";
      }
      feedBackLoc.innerHTML = sFeedback;
   }
}

function validateRequired(sRequired, sVal, sTypecheck) {
   if (sRequired == "required") {
      if (sVal == "") {
         gContinue = false;
         return  "Required";
      } else if (sTypecheck == "none") {
         return "Thank You";
      }
   }
}

function validateDate(sVal) {
   var regex=/(((0[13578]|10|12)([-.\/])(0[1-9]|[12][0-9]|3[01])([-.\/])(\d{4}))|((0[469]|11)([-.\/])([0][1-9]|[12][0-9]|30)([-.\/])(\d{4}))|((2)([-.\/])(0[1-9]|1[0-9]|2[0-8])([-.\/])(\d{4}))|((2)(\.|-|\/)(29)([-.\/])([02468][048]00))|((2)([-.\/])(29)([-.\/])([13579][26]00))|((2)([-.\/])(29)([-.\/])([0-9][0-9][0][48]))|((2)([-.\/])(29)([-.\/])([0-9][0-9][2468][048]))|((2)([-.\/])(29)([-.\/])([0-9][0-9][13579][26])))/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid Date"; }
}

function validateEmail(sVal) {
   var regex=/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid Email Address"; }
}

function validatePhone(sVal) {
   var regex=/^(\d{3}-\d{3}-\d{4})*$/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid Phone Number"; }
}

function validateZip(sVal) {
   var regex=/(^(?!0{5})(\d{5})(?!-?0{4})(-?\d{4})?$)/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid ZipCode"; }
}

function validateName(sVal) {
   var regex=/^([a-zA-z\s-']{4,32})$/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid Name"; }
}

function validateNumeric(sVal) {
   var regex=/^(\d|-)?(\d|,)*\.?\d*$/;
   if (regex.test(sVal)) { return "Thank You"; }
   else { return "Invalid Number"; }
}

var gErrors = 0;
function validate() {
   var tables;
   tables = document.getElementsByTagName('div')
   for (i=0; i<tables.length; i++) {
      if (tables[i].className == "rules") {
         if (tables[i].innerHTML == 'Thank You' || tables[i].innerHTML == '' ) { //valid
            tables[i].style.color = '#000000';
         } else { //error
            gErrors = gErrors + 1;
            tables[i].style.color = '#ff0000';
         }
      }
   }
   if (gErrors > 0){
      alert ("Please make sure all fields are properly completed.  Errors are marked in red!");
      gErrors = 0;
      return false;
   } else {
      return true; //submit the form
   }
}
