//<script>
  function validint(num){
    if(num=='' || !num) return true;
    for(var i=0;i<num.length;i++){
      var c=num.substring(i,i+1);
      if(String("01234567890.-").indexOf(c)==-1){
        return false
      }
    }
    return true
  }

  function validnum(num){
    if(num=='' || !num) return true;
    for(var i=0;i<num.length;i++){
      var c=num.substring(i,i+1);
      if(String("01234567890.-").indexOf(c)==-1){
        return false
      }
    }
    return true
  }

  function validatecard(cc){                            /* validate checksum for creditcard    */                                                                           
    var cc_digits="";                                   /* counter for number of digits in card  */               
    var i, tmp,mult = 1, sum = 0,len = cc.length;
    if(len==0) return true;
    if(len<15) return false;
    cc_digits = 0;
    for (i = len-1; i > -1; i--){
      C=cc.substring(i,i+1)
      if(String("0123456789").indexOf(C)==-1)continue;  /* skip non-digits*/
      cc_digits++;
      tmp = Number(C) * mult;
      if (tmp > 9)tmp = tmp - 9;
      sum = sum + tmp;
      mult = (mult == 2) ? 1 : 2;
    }
    var bResult=((sum % 10) ? false : true);            /* make sure it's divisible by 10*/
    return bResult;

  }                                                                           


function TFormValidator(formname){
  this.formname=formname
  this.Validate=Validate


  
  function validphone(phone){
    if(phone=='') return true;
    var t='';
    for(var i=0;i<phone.length;i++){
      var c=phone.substring(i,i+1);
      if(String("01234567890").indexOf(c)>=0){
        t=t+c;
      } else {
        if(String('()- ').indexOf(c)==-1) return false
      }
    }
    if(t.length<10) return false;
    return true
  }
  


  function findElembyKeyname(key){
    var FormRef=document.forms[formname];
    var elements=FormRef.elements;
    for(var i=0;i<elements.length;i++){
      var ename=elements[i].name;
      var x=ename.indexOf('_');
      if(x>0){
        var etype=ename.substr(0,x);
        var ekey=ename.substr(x+1,ename.length-x-1);
        if (ekey.toLowerCase()==key.toLowerCase()){
          return elements[i]
        }
      }
    }     
  }
  

  function getFieldValue(el){
    switch (el.type){
      case 'text':
        return el.value;
        break;        
      case 'select-one':
        return el.value;
        break      
      case 'password':
        return el.value;
        break      
    }
  }
  function highlightField(el){
//    el.parentNode.style.borderColor='white';
//    el.parentNode.style.borderStyle='dashed';
//    el.parentNode.style.borderWidth='1px';
    el.focus();
  }

  function checkrequired(keys){
    kArr=keys.split(',');
    var bad=false;
    for(var i=0;i<kArr.length;i++){
      var el=findElembyKeyname(kArr[i]);
      if(el){
        switch (el.type){
          case 'text':
            if(getFieldValue(el)=='') bad=true;
            break
          case 'select-one':
            if(getFieldValue(el)=='-1') bad=true;
            break            
        }
      }
      if(bad){
        highlightField(el);
        alert('Required information missing');              
        return false;
      }

    }
    return true;
  }
   
  function validemail(email){
    if(email=='') return true;
    if(email.indexOf('@')==-1) return false;
    if(email.indexOf('.')==-1) return false;
    return true;
  }   
  
  function validpassword(password){
    if(!password) return false;
    if (password.length<5) return false;
    for(var i=0;i<password.length;i++){
      var c=password.substring(i,i+1);
      if(String('`~!@#$%^&*()_-+={}[]|\\:;\'"<>?,./ ').indexOf(c)>=0) return false
    }
    return true;
  }
  
  function Validate(){
    var FormRef=document.forms[formname];
    if(!FormRef){
      alert('Cannot validate form');
      return false;
    }
    var elements=FormRef.elements;
    var req=elements['alt_requiredfields'];
    if (req){
      if(!checkrequired(req.value)) return false
    } 
    for(i=0;i<elements.length;i++){
      if (elements[i].name){
      var ename=elements[i].name;
      var x=ename.indexOf('_');
      if(x>0){
        var etype=ename.substr(0,x);
        var ekey=ename.substr(x+1,ename.length-x-1);
        if(etype!=''){
          switch (etype.toLowerCase()){
            case 'int':
              if(!validint(getFieldValue(elements[i]))){
                alert('Invalid numeric value.  Only digits, period and minus are alowed.');
                elements[i].focus();
                return false;              
              }
            case 'str':
              break
            case 'cc':
              if(!validatecard(getFieldValue(elements[i]))){
                alert('Invalid credit card number.  Use only digits, no spaces please.');
                elements[i].focus();
                return false;
              }
              break
            case 'phn':
              if(!validphone(getFieldValue(elements[i]))){
                alert('Invalid phone number.  Use format (###) ###-####');
                elements[i].focus();
                return false;
              }
              break                
            case 'eml':
              if(!validemail(getFieldValue(elements[i]))){
                alert('Invalid email address.  Be sure to include your full email address including domain name.');
                elements[i].focus();
                return false;
              }
              break
            case 'pass':
              if(!validpassword(getFieldValue(elements[i]))&&ekey.toLowerCase()!='confirm'){
                alert('Invalid password.  Passwords must be at least 5 characters long and contain no punctuation or spaces.');
                elements[i].focus();
                return false;
              } else {
                var conf=findElembyKeyname('confirm');
                if(conf){
                  if(getFieldValue(elements[i])!=getFieldValue(conf)){
                    alert('Password and confirmation do not match.  Be sure they are entered exactly the same.');
                    elements[i].focus();
                  }
                }
              }
              break
          }
        }
      }
      }
    }    
    return true
  }
  
  

}