function  vtest (mydoc) {
   var elem;
   var xname;
   var vval= new Array(); 
   var vlen = new Array();
   var vnam = new Array();
   var nchkd = 0;
   var reqflag = 0;
   var nform = document.forms.length;
// Gather all of the data
   for ( var x = 0;x < nform; x++) {
      for (var y = 0; y< document.forms[x].elements.length; y++) {
         var xtype = document.forms[x].elements[y].type;
         if ((document.forms[x].elements[y].type  == 'text') ||
            (document.forms[x].elements[y].type  == 'checkbox') || 
            (document.forms[x].elements[y].type  == 'textarea')) {
            var elname = document.forms[x].elements[y].name; 
            var xval = document.forms[x].elements[y].value; 
            vnam[elname] = elname;
            vval[elname] = xval; 
            vlen[elname] = xval.length; 
         }
         if (document.forms[x].elements[y].type  == 'checkbox') {
            cnam = document.forms[x].elements[y].name;
            if (document.forms[x].elements[y].checked  == true) {
               cval = document.forms[x].elements[y].checked;
               nchkd++;
               vval[cnam] = 1; 
               reqflag = 1;
            } else { 
               vval[cnam] = 0;

            }

         }
      }
   }
// DISPLAY FOR TESTING
//         alert ("showing array");
//         for (var i in vval) {
//                 alert ( vnam[i] + " equals " + vval[i] + " length " + vlen[i]); 
//         }

   var doyou;
   var phstat;  
   var emstat;  
   var maddr;
// TEST 0 Check for Hokey Addresses 
      maddr = vval['ADDR'];    
//      alert ('MADDR IS ' + maddr);
      if (maddr.indexOf("www") != -1) {
//      alert ("BAD ADDR");
      return false;
   }
      if (maddr.indexOf("http") != -1) {
//      alert ("BAD ADDR");
      return false;
   }
      if (maddr.indexOf("com") != -1) {
//      alert ("BAD ADDR");
      return false;
   }
//    alert ("ADDR OK");
// TEST 1 - REQUIRE A NAME IF A CHECKBOX IS ON
   if (vlen['NAME'] == 0 && reqflag == 1 ) {
      alert ("Please enter your name.");
      return false;
   }
// TEST 2 - REQUIRE AT LEAST ONE OF: AN ADDRESS, PHONE, OR EMAIL 
//   if (reqflag == 1  && vlen['PHONE'] == 0 && vlen['EMAIL'] == 0 && 
//      ( (vlen['ADDR'] == 0) || (vlen['CSZ'] == 0) ) ) {
//      alert ("Please enter either a phone number, a valid mail address or an email address. ");
//      return false;
//   }
// TEST 3 - TEST PHONE NUMBER
   phstat = phone_test(vval['PHONE']);  
   if (phstat == 0)  {                // Phone stat is bad
//      doyou = confirm("This looks like a bad phone--use it anyway? (OK=Yes Cancel=Stop and correct)");
//      if (doyou )  {
//                  alert ("You approved it");
//      } else  {
         alert ("Please correct the phone number.");
         return false; 
//      }
   }
// TEST 4  EMAIL ADDRESS
   emstat = email_test(vval['EMAIL']);  
   if (emstat == 0)  {                // If email stat is bad
//      doyou = confirm("This looks like a bad email address--use it anyway? (OK=Yes Cancel=Stop and correctNo)");
//      if (doyou  )  {
//         alert ("You approved it");
//      } else  {
         alert ("Please correct the email address.");
         return false; 
//      }             
   }
// TEST 5 MUST BE SOME REASON FOR DOING THIS
   if (nchkd  == 0 && vlen['COMMENTS'] == 0) {
      alert ("Please check at least one box or enter a comment. Thanks.");
      return false;
   }
// TEST 6 EMAIL REQUIRED FOR EMAIL NEWSLETTER 
   if (vlen['EMAIL'] == 0  && vval['C_EMAIL'] == 1) {
      alert ("You requested an email copy of the newsletter, but didn't enter an email address. Please correct. Thanks."); 
      return false;
   }
// TEST 7 MAIL ADDRESS REQUIRED FOR MAIL NEWSLETTER 
   if ((vval['C_MAIL'] == 1) && (vlen['ADDR'] == 0 || vlen['CSZ'] == 0))  {
      alert ("You requested we mail a copy of the newsletter to you, but didn't enter a full mailing address. Please correct. Thanks."); 
return false;
}

//TEST 8 MUST PROVIDE MAIL OR EMAIL ADDRESS FOR INFO
   if (( vval['C_INFO'] == 1) && ((vlen['EMAIL'] == 0)  && (vlen['CSZ'] == 0 || vlen['ADDR'] == 0))) {
      alert ("To receive information about us, please provide either a full mailing address or an email address.  Thanks."); 
      return false;
   }
//TEST 9 MUST PROVIDE PHONE NUMBER TO GET A CALL
   if (vval['C_CALL'] == 1 && vlen['PHONE'] == 0) {
      alert ("You requested a call, but did not provide a phone number. Please correct. Thanks."); 
      return false;
   }
//   alert ("All passed -- Submitting document");
   document.form1.submit();
}


function phone_test (pn) {
   var i;              // for variable
   var nm = 0;         // number of numbers
   var pnc = 0;        // number of punctuation characters;
   var valpnc = '().-+';
   var valid  = 1;
   var pnl = pn.length;
   if (pnl == 0) { return 1 };     // Nothing is valid
//        alert ("into phone_test with " + pn + " -- pn length is " + pn.length);

   for (i=0;i<pn.length;i++) {
      var c = pn.charAt(i);
//            alert ("c is " + c);
      if ((c >= 0) && (c <=9)) {
         nm++; 
      } else {
         if (valpnc.indexOf(c) != -1) {
            pnc++;
         } else {
            valid = 0;
         }
      }
   }
//     alert ("digits = " + nm + " pnc = " + pnc );
   if ((nm !=7) && (nm != 10)) valid = 0;    // wrong number of digits;
   if (pnc > 4)  valid = 0;                //  Too many punctuation characters
//            alert ("phone validity is " + valid);
   return valid;  
}
function email_test (eml) {
   var elen = eml.length;
   var i;
   var val = 1;
   var ancnt = 0;
   var atcnt = 0;
   var dotcnt = 0;
   var valpnc = '-_.\@';
   var tchr;
   var x;
   if (elen == 0) return 1;   // No email -- that's okay
//   alert ("length of email is " + elen);
   for (i=0;i<elen;i++) {
      tchr  = eml.charAt(i);
      x = alNumCk (tchr);
      if ( x ) ancnt++;     // if it's alphanumeric 
//      if ( x ) alert (x + " is alpha num");     // if it's alphanumeric 
      if (tchr == '\@') atcnt++  // Need exactly one of these  -- should be @
//      if (tchr == '\@') alert ("it is an at");  // Need at least one of these
      if (tchr == '.') dotcnt++;   //At least one of these  -- should be period
//      if (tchr == '.') alert ("it is a dot");  // Need exactly one of these  -- should be @
//      if ((!x) && (valpnc.IndexOf(tchr) == -1)) {  
//         val = 0; 
//      } else {
//         alert ("Passed special character test");
//      }
   }
//   alert ("ancnt is " + ancnt + ", atcnt is " + atcnt + " and dotcnt is " + dotcnt);
   if (atcnt != 1) val = 0;
   if (dotcnt < 1) val = 0;
   if (ancnt < 10) val = 0;
//   alert ("email val--returning " + val);
   return val;
}


function alNumCk(theChar) {
//   alert ("into alnumck");
   if ((theChar < 48) || (theChar > 122) || 
      ((theChar > 57) && (theChar < 65)) || 
      ((theChar > 90) && (theChar < 97))   ) {
      return false;
   } else {
      return true;
   }
}

