/**
RocketValidation for form verifacation.
To use this validator add this to your form: onSubmit="return checkForm(this);"
and thid to your header: <script language="JavaScript" src="Rvalidate.js"></script>
within your form set fields as needed:
zp="true"  for zipcode
phn="true"  for phone numbers
optional="true"  for fields that are not required
eml="true"    for email
ccnum="true" for credit card number
exmonth="true" for expiration month
exyear="true" for expiration year
*/

function checkForm(frm){
   var e;
   var msg;
   var empty_fields = "";
   var malformed_fields = "";
   var missingChecks = "";
   var haveCheck = true;
   
   var emon = -1;
   var eyr = -1;
   //alert(window.document.forms[0].txtSZip.optional + window.document.forms[0].cmbState.optional);
   /*for(var i = 0; i < frm.length; i++){
      e = frm.elements[i];
      if(e.type.indexOf("check")>-1){
         haveCheck = false;
         break;
      }
   }*/
   for(var i = 0; i < frm.length; i++){
      e = frm.elements[i];
      //if(e.phn) {alert (e.name);}
      if ((e.type.indexOf("select")>-1) && (e.value == "XX")&& !e.optional)
        empty_fields += "\n          " + e.name;
      if ((!haveCheck)&& (e.type.indexOf("check")>-1)){
          if(e.checked)
            haveCheck = true;
      }//end if
      if ((e.type == "text") ||  (e.type == "textarea")){
         if (((e.value == null) || (e.value == "") || isblank(e.value))&& !e.optional) {
               empty_fields += "\n          " + e.name;
         } else if (e.phn && e.value.length > 0){
            if(!IsPhone(e.value)){
               malformed_fields +="\n     " + e.name +" Format should be: 555-555-5555";
            }//end if
         } else if(e.eml){
            if(!IsEmail(e.value)){
               malformed_fields +="\n     " + e.name +" Format should be: user@domain.ext";
            }//end if
         } else if(e.zp && e.value.length > 0){
            if(!IsZip(e.value)){
               malformed_fields +="\n     " + e.name +" Format should be: 12345 or 123456789 or 12345-1234";
            }//end if
         } else if (e.ccnum) {
            if (!IsCreditCard(e.value)) {
               malformed_fields +="\n     " + e.name.substring(3, e.name.length) +" Format should be: 4444-4444-4444-4444";
            }//end if
         }//end if
      } else if (e.type == "select-one") {
         if (e.exmonth) {
            emon = e.value;
         } else if (e.exyear) {
            eyr = e.value;
         }//end if
      }//if
   }//next i
   
   if (emon > -1 && eyr > -1) {
      if (!IsCreditCardExpired(emon, eyr))
         malformed_fields +="\n     Expiration Date: " + emon + "/" + eyr + " has expired";
   }//end if

   if (!empty_fields && !malformed_fields && haveCheck)
      return true;
   else {
      msg  = "______________________________________________________\n\n"
      msg += "The form was not submitted because of the following error(s).\n";
      msg += "Please correct these error(s) and re-submit.\n";
      msg += "______________________________________________________\n\n"

      if(empty_fields){
         msg += "- The following required field(s) are missing:"
                + empty_fields + "\n";
      }
      if (malformed_fields){
         msg += "- The following field(s) have formatting issues:" +  malformed_fields +"\n";
      }
      if (!haveCheck){
         msg += "\n- Please check one of the listed prefixes Mr., Mrs...";
      }
      alert(msg);
      return false;
   }
}
function IsZip(val) {
      if (val.length != 5 && val.length != 9 && val.length != 10) return false;
      if (val.length == 5 || val.length == 9) {
         if (isNaN(val)) return false;
      } else {
         if (isNaN(val.substring(0,5))) return false;
         else if (val.substring(5,6) != "-") return false;
         else if (isNaN(val.substring(6,10))) return false;
      }//end if
      return true;
   }
   
function IsCreditCard(s) {

      var v = "0123456789";
      var w = "";
      for (i=0; i < s.length; i++) {
         x = s.charAt(i);
         if (v.indexOf(x,0) != -1)
         w += x;
      }
      // validate number
      j = w.length / 2;
      if (j < 6.5 || j > 8 || j == 7) return false;
      k = Math.floor(j);
      m = Math.ceil(j) - k;
      c = 0;
      for (i=0; i<k; i++) {
         a = w.charAt(i*2+m) * 2;
         c += a > 9 ? Math.floor(a/10 + a%10) : a;
      }
      for (i=0; i<k+m; i++) {c += w.charAt(i*2+1-m) * 1;}
      return (c%10 == 0);

}

   function IsCreditCardExpired(month, year) {
      var today = new Date();
      if (year < today.getFullYear())
         return false;
      else if (year == today.getFullYear()) {
         if (month < (today.getMonth() + 1))
            return false;
      }//end if
      return true;
   }

function IsPhone(val) {

   var temp = val.replace(/[\-\ ]/g, '');
   if ((isNaN(temp)) || (temp.length != 10) ) {
      return false;
   }
   return true;

}
function IsEmail(val){
   var emailFilter=/^.+@.+\..{2,3}$/;
   if (!(emailFilter.test(val))) {return false;}
   return true;
}

function isblank(str)
{
    for(var i = 0; i < str.length; i++) {
        var c = str.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}//end blank

