<!--
// editcheck.js - Form validation
//
// Written by Dan Bailey - Data Design Group, Inc.  2004
// www.ddginc-usa.com
// See www.ddginc-usa.com/editcheckdoc.htm for documentation.
//
// frm - optional, edit check specific frm, or all forms
// itm - optional, edit check the specific item, or all items.
function valforms(frm,itm)
{
var i
var j
for (j=0;j < document.forms.length; j++ ) { // for each form
  if (frm && document.forms[j]!=frm) continue; // if frm specified, only look at it
  for (i=0;i < document.forms[j].length; i++ ) {  // for each field
     if (itm && document.forms[j].elements[i] != itm) continue; // if itm specified, only look at it
     var editstr = document.forms[j].elements[i].getAttribute('editcheck');
     if ((editstr) && (editstr.length>0)) {

         // break up edit string into command
         var cmds = editstr.split(";");
         var fld = document.forms[j].elements[i];

         for (var k=0;k< cmds.length; k++ ) {
             var cmdarr = cmds[k].split("=");
             cmdarr[0] = cmdarr[0].toLowerCase();
             var msg=""
             if (cmdarr.length>2) 
                msg=cmdarr[2];

             switch (cmdarr[0]) {
                case "req" : 
                  if ((cmdarr.length==1)||(cmdarr.length>1 && cmdarr[1].toUpperCase().charAt(0)=="Y")) {
                     if (fld.value.replace(/\s/g,"")==""){
                        if (!msg || !msg.length)
                               msg=fld.name.toUpperCase().replace(/_/g," ") + " is required!";
                        window.alert(msg);
                        fld.focus();
                        return false;
                     }
                   }
                   break;

               case "type" : 
                   switch (cmdarr[1].toLowerCase()) {

                       case "integer" :
                       case "int" : {
                           if (fld.value.length>0 && (isNaN(fld.value))||(fld.value.indexOf(".")>0)){
                              if (!msg || !msg.length)
                                 msg = fld.name.toUpperCase().replace(/_/g," ") + " should be an integer!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           } // if
                           break;
                        } // int

                       case "num" :
                       case "number" :
                        case "float" : 
                           if (fld.value.length>0 && isNaN(fld.value)) {
                              if (!msg || !msg.length)
                                 msg = fld.name.toUpperCase().replace(/_/g," ") + " should be numeric!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           } // if
                           break; // int

                       case "date" : 
                           if (!msg || !msg.length) 
                              msg = fld.name.toUpperCase().replace(/_/g," ") + " should be a date in MM/DD/YY" + ((fld.size>=10 || fld.maxlength>=10)?"YY":"") + " format!";
                           var aDateParts = fld.value.split('/');
	                   if (aDateParts.length != 3)  aDateParts = fld.value.split('-');
	                   if (aDateParts.length == 3 && !isNaN(aDateParts[0]) && !isNaN(aDateParts[1]) && !isNaN(aDateParts[2])
                               && aDateParts[0] && aDateParts[1] && aDateParts[2]) {
                              if (aDateParts[2].length == 2)  {
                                  if (parseInt(aDateParts[2],10)< 20)
                                     aDateParts[2] = "20" + aDateParts[2];
                                  else
                                     aDateParts[2] = "19" + aDateParts[2];
                                  if (fld.size>=10 || fld.maxlength>=10)
                                     fld.value =  aDateParts[0] + "/" + aDateParts[1] + "/" + aDateParts[2];
                              }
		              if (    parseInt(aDateParts[0],10) < 1 || parseInt(aDateParts[0],10) > 12
                                   || parseInt(aDateParts[1],10) < 1 || parseInt(aDateParts[1],10) > 31
                                   || (parseInt(aDateParts[0],10) ==4 && parseInt(aDateParts[1],10) >30 )
                                   || (parseInt(aDateParts[0],10) ==6 && parseInt(aDateParts[1],10) >30 )
                                   || (parseInt(aDateParts[0],10) ==9 && parseInt(aDateParts[1],10) >30 )
                                   || (parseInt(aDateParts[0],10) ==11 && parseInt(aDateParts[1],10) >30 )
                                   || parseInt(aDateParts[2],10) < 1000 || parseInt(aDateParts[2],10) > 2200
                                   || (parseInt(aDateParts[0],10)==2 && parseInt(aDateParts[1],10)>(((parseInt(aDateParts[2],10) % 4 == 0) && ((!(parseInt(aDateParts[2],10) % 100==0))||(parseInt(aDateParts[2],10)%400==0))) ? 29:28))
                                 ) 
                              {
                                   window.alert(msg);
                                   fld.focus();
                                   fld.select();
                                   return false;
                              }
	                   }
	                   else	if (fld.value.length>0) {
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           }
                           break; // date


                       case "alphabetic": 
                       case "alpha":  
                         if(fld.value.length>0 && fld.value.search("[^A-Z a-z]") >= 0) { 
                              if (!msg || !msg.length)
                                 msg = "Only alphabetic characters allowed!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                         }//if                             

                        break; //alpha 

                       case "alphanumeric": 
                       case "alphanum":  { 
                         if(fld.value.length>0 && fld.value.search("[<>]") >= 0) { 
                              if (!msg || !msg.length)
                                 msg = "Specials characters(< >) are not allowed!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                         }//if                             

                        break; 
                       }//alphabetic
					   //code ssss
					   case "phonenew":  { 
                         if(fld.value.length>0 && fld.value.search("[^-)+( 0-9]") >= 0) { 
                              if (!msg || !msg.length)
                                 msg = "Please enter valid Number!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                         }//if                             

                        break; 
                       }//alphabetic

                       case "email" : 
                           var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
                           if (fld.value.length>0 && re.test(fld.value) == false) {
                              if (!msg || !msg.length)
                                 msg = "Not a valid email address!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           }
                           break; // case email
						   
						   case "test" : 
                           var reg=new RegExp("<");
                           if (fld.value.length>0 && reg.test(fld.value) == true) {
							   if (!msg || !msg.length)
                              msg = "(<) is not allowed!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           }
                           break;
						   

                       case "zipcode" : 
                       case "zip" : 
                           var re = /(^\d{5}$)|(^\d{5}-*\d{4}$)/;
                           if (fld.value.length>0 && re.test(fld.value) == false) {
                              if (!msg || !msg.length)
                                 msg = "Not a valid zip code!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                           }
                           break; // case zip

                       case "phonenum": 
                       case "phone": 
                            if(fld.value.length>0 && !(fld.value.match(/^[ ]*[(]{0,1}[ ]*[0-9]{3,3}[ ]*[)]{0,1}[-]{0,1}[ ]*[0-9]{3,3}[ ]*[-]{0,1}[ ]*[0-9]{4,4}[ ]*$/))) {
                              if (!msg || !msg.length)
                                 msg = "Not a valid phone #!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                             }
                         break; // phone

                       case "ssn": 
                            if(fld.value.length>0 && !(fld.value.match(/^\d{3}-?\d{2}-?\d{4}$/))) {
                              if (!msg || !msg.length)
                                 msg = "Not a valid Social Security Number!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                             }
                         break; // phone

                       case "state": 
                            if (fld.value.length>0 && !(fld.value.toUpperCase().match(/^AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP$/))) {
                              if (!msg || !msg.length)
                                 msg = "Not a valid U.S. State abbreviation!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                             }
                         break; // state   

                       default:  // regular expression
                         var re = new RegExp(cmdarr[1],'gi');
                         if (fld.value.length>0 && re.test(fld.value) == false) {
                              if (!msg || !msg.length)
                                 msg = fld.name.toUpperCase().replace(/_/g," ") + " does not meet validation criteria!";
                              window.alert(msg);
                              fld.focus();
                              fld.select();
                              return false;
                         }
                         break; // default case, custom type via regular expression

                   } // switch
                   break; // case "type"

               case "maxlength" : 
               case "maxlen" : 
                   if(fld.value.length && fld.value.length>0 && (fld.value.length > eval(cmdarr[1]))) {
                         if (!msg || !msg.length)
                             msg = "Maximum length of " + fld.name.toUpperCase().replace(/_/g," ") + " is " + cmdarr[1] + " characters!";
                         window.alert(msg);
                         fld.focus();
                         fld.select();
                         return false;
                   }
                   break;

               case "minlenth" :                
               case "minlen" : 
                   if(fld.value.length && fld.value.length>0 && (fld.value.length < eval(cmdarr[1]))) {
                         if (!msg || !msg.length)
                             msg = "Minimum length of " + fld.name.toUpperCase().replace(/_/g," ") + " is " + cmdarr[1] + " characters!";
                         window.alert(msg);
                         fld.focus();
                         fld.select();
                         return false;
                   }
                   break;

               case "eval" : 
                   if(!(eval(cmdarr[1]))) {
                         if (!msg || !msg.length)
                             msg = fld.name.toUpperCase().replace(/_/g," ") + " does not meet validation!";
                         window.alert(msg);
                         fld.focus();
                         fld.select();
                         return false;
                   }
                   break; // minval

               case "minvalue" :           
               case "minval" : 
                   if(fld.value.length && fld.value.length>0 && (eval(fld.value) < eval(cmdarr[1]))) {
                         if (!msg || !msg.length)
                             msg = "Miminum value of " + fld.name.toUpperCase().replace(/_/g," ") + " is " + cmdarr[1] + "!";
                         window.alert(msg);
                         fld.focus();
                         fld.select();
                         return false;
                   }
                   break; // minval

               case "maxvalue" : 
               case "maxval" : 
                   if(fld.value.length && fld.value.length>0 && (eval(fld.value) > eval(cmdarr[1]))) {
                         if (!msg || !msg.length)
                             msg = "Maximum value of " + fld.name.toUpperCase().replace(/_/g," ") + " is " + cmdarr[1] + "!";
                         window.alert(msg);
                         fld.focus();
                         fld.select();
                         return false;
                   }
                   break; // maxval


               case "cvt" : 
                   var cmd
                   if (fld.value.length && fld.value.length>0) {
                       for (var n=0;n<cmdarr[1].length;n++) {
                          cmd=cmdarr[1].toUpperCase().charAt(n);  // one-letter command codes
                          switch (cmd) {
                              case "U" : // uppercase
                                 if (fld.value!=fld.value.toUpperCase())
                                     fld.value=fld.value.toUpperCase();
                                 break;
                              case "L" : // lowercase
                                 if (fld.value!=fld.value.toLowerCase())
                                     fld.value=fld.value.toLowerCase();
                                 break;
                              case "T" :  // trim spaces leading and trailing
                                 if (fld.value != fld.value.replace(/^\s+/g,'').replace(/\s+$/g,''))
                                    fld.value = fld.value.replace(/^\s+/g,'').replace(/\s+$/g,'');
                                 break;
                              case "]" :  // trim trailing spaces
                                 if (fld.value != fld.value.replace(/\s+$/g,''))
                                    fld.value = fld.value.replace(/\s+$/g,'') ;
                                 break;
                              case "[" : // trim leading spaces 
                                 if (fld.value != fld.value.replace(/^\s+/g,'')) 
                                    fld.value = fld.value.replace(/^\s+/g,'') ;
                                 break;
                              case "C" : // crunch multiple spaces into one space
                                 if (fld.value != fld.value.replace(/\s+/g,' '))
                                    fld.value = fld.value.replace(/\s+/g,' ') ;
                                 break;
                              case "~" : // remove punctuation
                                 if (fld.value != fld.value.replace(/[\W_]/g,''))
                                    fld.value = fld.value.replace(/[\W_]/g,'') ;
                                 break;

                          } // switch command character
                      } // for n each command character
                   } // if
                   break;  // case cvt

             } // switch
         } // for k
     } // if editcheck
  } // for i each field
}// for j each form
return true;
}

//-->

