function isCreditCard(st) { // from Netscape
  var sum=0, mul=1, l=st.length;
  for (i=0; i<l; i++){
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit, 10)*mul;
    if (tproduct>9)
      sum += (tproduct%10) + 1;
    else
      sum += tproduct;
    mul ^= 3; // flip low 2 bits.
  }
  if ((sum%10)==0)
    return true;
  else
    return false;
}

function verifyCC(cInput,t) {
  var v = cInput.value;
  var st = "";
  var Ok = false;
  if (t=="C") {  //Check
    return true; // nothing to validate...
  }
//  if (cInput.value == "testcardnumber") return true;
  for (i=0;i<v.length;i++) if (v.charAt(i)>="0"&&v.charAt(i)<="9") st += v.charAt(i);
  if (st.length < 13 || st.length > 16) {
    return false;
  }
  if (t=="M") {//MasterCard
    if (st.substring(0,2)>"50" && st.substring(0,2)<"56") Ok = true;
  } else if (t=="V") { //VISA
    if (st.charAt(0)=="4" && (st.length==16 || st.length==13)) Ok = true;
  } else if (t=="A") { //American Express
    if (st.length==16 && st.charAt(0)=="3" && (st.charAt(1)=="4"|| st.charAt(1)=="7")){;} Ok = true;
  } else if (t=="DI") { //Discover
    if (st.length==16 && st.substring(0,4)=="6011") Ok = true;
  } else if (t=="DC") { //Diner's Club
    if (st.charAt(0)=="3") {
      if (st.charAt(1)=="6" || st.charAt(1)=="8") Ok = true;
      else if (st.substring(1,3)<"06") Ok = true;
    }
  } else if (t=="E") { //enRoute
    if (st.length==15 && (st.substring(0,4)=="2014" || st.substring(0,4)=="2149")) return true;
  } else if (t=="J") { //JCB
    if (st.charAt(0)=="3" && st.length==16) Ok = true;
    else if (st.length==15 && (st.substring(0,4)=="2131" || st.substring(0,4)=="1800")) Ok = true;
  } else {
    return false;
  }
  if (Ok && isCreditCard(st)) {
    cInput.value = st;
    return true;
  } else {
    return false;
  }
}
function validateum(form) {
  var Valid = true;
  var eMail, len, pos, undefined;
  eMail = document.forms[form]['Email'].value;
  len = eMail.length;
  pos = eMail.indexOf("@");
  if (pos == 0 || pos == len || pos == -1 || eMail.indexOf(".",pos) == -1 ) {
    document.forms[form]['Email'].focus();
    alert("That does not seem to be a valid e-mail address.\nOne is required.");
  } else {
    st = document.forms[form]['First'].value;
    if ( st.length < 2 ) {
      document.forms[form]['First'].focus();
      alert("First name is required.");
    } else {
      st = document.forms[form]['Last'].value;
      if ( st.length < 2 ) {
        document.forms[form]['Last'].focus();
        alert("Last name is required.");
      } else {
        st = document.forms[form]['Add1'].value;
        if ( st.length < 2 ) {
          document.forms[form]['Add1'].focus();
          alert("Address is required.");
        } else {
          st = document.forms[form]['City'].value;
          if ( st.length < 2 ) {
            document.forms[form]['City'].focus();
            alert("City name is required.");
          } else {
            st = document.forms[form]['Zip'].value;
            if ( st.length < 5 ) {
              document.forms[form]['Zip'].focus();
              alert("A valid Zip code is required.");
            } else {
	      st = false;
	      for (var R = 0; R < document.forms[form]['Location'].length; R++) {
	        if ( document.forms[form]['Location'][R].checked ) {
		  st = true;
		}
	      }
	      if ( !st ) {
		alert("You must choose a location.");
              } else {
                st = document.forms[form]['StartDate'].value;
                if ( st.length < 2 ) {
                   document.forms[form]['StartDate'].focus();
                  alert("Please enter a date for beginning class.");
                } else {
  	          st = false;
	          for (var R = 0; R < document.forms[form]['Session'].length; R++) {
	            if ( document.forms[form]['Session'][R].checked ) {
		      st = true;
		    }
	          }
  	          if ( !st ) {
		    alert("You must choose a Session.");
                  } else {
                    var tYpe = document.forms[form]['Ptype'].selectedIndex;
                    var Type = document.forms[form]['Ptype'][tYpe].value;
                    if (Type == "C") return true;
                    var good = verifyCC(document.forms[form]['CCnum'],Type);
                    if ( good ) {
                      var sI = document.forms[form]['CCyear'].selectedIndex;
                      var year = document.forms[form]['CCyear'][sI].value;
                      var mo = document.forms[form]['CCmon'].selectedIndex;
                      var now = new Date();
                      if ( year > now.getFullYear() ) return true;
                      if ( year == now.getFullYear()
                           && mo >= now.getMonth()) return true;
                      alert("Expiration date is past.");
                      document.forms[form]['CCmon'].focus();
                    } else {
                      alert("Invalid Credit Card Number");
                      document.forms[form]['CCnum'].focus();
                    }
                  }
		}
              }
	    }
	  }
        }
      }
    }
  }
  return false;
}
function validater(form) {
  var Valid = true;
  var eMail, len, pos;
  eMail = document.forms[form]['Tyme'].value;
  len = eMail.length;
  pos = eMail.indexOf("@");
  if (pos == 0 || pos == len || pos == -1 || eMail.indexOf(".",pos) == -1 ) {
    document.forms[form]['Tyme'].focus();
    alert("That does not seem to be a valid e-mail address.\nOne is required.");
  } else {
    st = document.forms[form]['Name'].value;
    if ( st.length < 2 ) {
      document.forms[form]['Name'].focus();
      alert("Name is required.");
    } else {
      st = document.forms[form]['Addr'].value;
      if ( st.length < 2 ) {
        document.forms[form]['Addr'].focus();
        alert("Address is required.");
      } else {
        st = document.forms[form]['City'].value;
        if ( st.length < 2 ) {
          document.forms[form]['City'].focus();
          alert("City name is required.");
        } else {
          st = document.forms[form]['State'].value;
          if ( st.length < 2 ) {
            document.forms[form]['State'].focus();
            alert("State code is required.");
          } else {
            st = document.forms[form]['Zip'].value;
            if ( st.length < 5 ) {
              document.forms[form]['Zip'].focus();
              alert("A valid Zip code is required.");
            } else {
              st = document.forms[form]['Phone'].value;
              if ( st.length < 7 ) {
                document.forms[form]['Phone'].focus();
                alert("A valid Phone Number is required.");
              } else {
                return true;
              }
            }
          }
        }
      }
    }
  }
  return false;
}
