var ship_texas = false;

function checkBilling(order)  {
   if (order.fname.value=="")  {
      alert("Please enter your first name");
      order.fname.focus();
      return false;
   }
   if (order.lname.value=="")  {
      alert("Please enter your last name");
      order.lname.focus();
      return false;
   }
   if (order.address1.value=="")  {
      alert("Please enter your billing address");
      order.address1.focus();
      return false;
   }
   if (order.city.value=="")  {
      alert("Please enter your city");
      order.city.focus();
      return false;
   }
   if (order.state.value=="" || order.state.value=="none") {
      alert("Please select a state");
      order.state.focus();
      return false;
   }
   if (order.zip.value=="")  {
      alert("Please enter your zipcode");
      order.zip.focus();
      return false;
   }
   var zip_filter=/[0-9]{5,5}/
   if (!(zip_filter.test(order.zip.value)))  {
      alert("The zipcode provided in the billing information is not a valid zipcode");
      order.zip.focus();
      return false;
   }
   if (order.phone.value=="")  {
      alert("Please enter your phone number. If you forget or lose your password, this helps us to reach you to verify your identity.");
      order.phone.focus();
      return false;
   }
   var phone_filter=/[0-9\s\)\(\.-]{7,30}/;
   if (!(phone_filter.test(order.phone.value)))  {
      alert("Please enter a valid phone number, using only and '(', ')', '.', '-' characters.  If you forget or lose your password, this helps us to reach you to verify your identity.");
      order.phone.focus();
      return false;
   }
   if (order.altemail.value=="")  {
      alert("Please provide an alternate email address. An order confirmation and your new account setup instructions will be emailed to this address.");
      order.altemail.focus();
      return false;
   }
   var email_str = order.altemail.value;
   if(!(emailCheck(email_str)))  {
      order.altemail.focus();
      return false;
   }
   if (!(order.altemail.value==order.altemail2.value)) {
      alert("Please enter the same alternate email twice and ensure they are the same.");
      order.altemail2.value="";
      order.altemail.focus();
      return false;
   }
   if (order.squestion.value=="" || order.squestion.value=="none") {
      alert("Please choose a Secret Question");
      order.squestion.focus();
      return false;
   }
   if (order.sanswer.value=="")  {
      alert("Please enter an answer to your Secret Question");
      order.sanswer.focus();
      return false;
   }
   if(!(order.tos(0).checked))  {
      alert("You must review and accept the Terms of Service before proceeding with your order.");
      order.tos(0).focus();
      return false;
   }
   if(!(order.aup(0).checked))  {
      alert("You must review and accept the Acceptable Use Policy before proceeding with your order.");
      order.aup(0).focus();
      return false;
   }
}

function checkEMailCheck(order) {

   if (order.email.value=="") {
      alert("Please enter an e-mail for us to check.");
      order.email.focus();
      return false;
   }
   var chemail=order.email.value;
//   alert(chemail.substring(chemail.length-1,chemail.length));
   if (chemail.length<2)  {
      alert("All e-mails must be at least 2 characters long.");
      order.email.focus();
      return false;
   }
   if (chemail.indexOf("@")>-1)  {
      alert("Just enter the part of the e-mail BEFORE the @ sign, and choose the e-mail domain from the drop down box.");
      order.email.focus();
      return false;
   }
   var email_filter="_-.0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
   if (email_filter.indexOf(chemail.charAt(0))<3)  {
      alert("The first character of your e-mail must be either a letter or a number.");
      order.email.focus();
      return false;
   }
   if (email_filter.indexOf(chemail.substring(chemail.length-1,chemail.length))<3)  {
      alert("The last character of your e-mail must be either a letter or a number.");
      order.email.focus();
      return false;
   }

   for (var loop=0; loop < chemail.length; loop++)
   {
      if (email_filter.indexOf(chemail.charAt(loop))<0)  {
         alert("Only numbers, letters, underscores, hyphens, and dots allowed in your e-mail name.");
         order.email.focus();
         return false;
      }
   }
   if (order.mdomain.value=="none")  {
      alert("Please select a domain.");
      order.mdomain.focus();
      return false;
   }
}


function checkTellAFriend(fwd)  {
   if (fwd.friendname.value=="")  {
      alert("Please enter your friend's name");
      fwd.friendname.focus();
      return false;
   }
   if (fwd.friendemail.value=="")  {
      alert("Please enter your friend's email address");
      fwd.friendemail.focus();
      return false;
   }
   var email_str = fwd.friendemail.value;
   if(!(emailCheck(email_str)))  {
      fwd.friendemail.focus();
      return false;
   }
   if (fwd.myname.value=="")  {
      alert("Please enter your name");
      fwd.myname.focus();
      return false;
   }
   if (fwd.myemail.value=="")  {
      alert("Please enter your email address");
      fwd.myemail.focus();
      return false;
   }
   email_str = fwd.myemail.value;
   if(!(emailCheck(email_str)))  {
      fwd.myemail.focus();
      return false;
   }
   if (fwd.mmessage.value=="")  {
      alert("Please enter some text in the Message box to email to your friend");
      fwd.mmessage.focus();
      return false;
   }
   return true;
}


function checkCreditCard(order) {

    var data = order;
    var userInfo = "";
    var now = new Date();
    var month = now.getMonth()+1;
    var year = now.getYear();    // gives 2005
    card_type = data.credit_card.value;
    exp_month_index = data.month.selectedIndex;
    exp_year_index = data.year.selectedIndex;

    if (data.credit_card.value=="none") {
        alert("You have not selected a credit card type");
        data.credit_card.focus();
        return false;
    }

    if (data.card_number.value == "") {
        alert("You have not filled in the Credit Card Number");
        data.card_number.focus();
        return false;
    }

    if (data.card_name.value == "") {
        alert("Please provide your name exactly as it appears on your credit card");
        data.card_name.focus();
        return false;
    }

    if (data.month.value=="none") {
        alert("You have not selected an expiration date");
        data.month.focus();
        return false;
    }

    if (data.year.value=="none") {
        alert("You have not selected an expiration date");
        data.year.focus();
        return false;
    }

    if (data.card_code.value=="") {
        alert("You must provide your credit card security code");
        data.card_code.focus();
        return false;
    }

    var credit_filter1=/[0-9\s]{16,19}/;
    var credit_filter2=/[0-9]{13,16}/;
    
		
	  charset = "0123456789";
		card_num_hold = data.card_number.value;
		var card_num = "";
	  for (var i=0;i<card_num_hold.length;i++) {
		   c = card_num_hold.substr(i,1);
		   if (charset.indexOf(c)!= -1) {
         card_num += c;
		   }
    }


    if (!validateCCNum(card_type,card_num) || !LuhnCheck(card_num)) {
      alert("Credit card number is not valid or you have selected incorrect type of credit card");
	    return false;    
	  }

    if (data.month.value < month && data.year.value <= year) {
      alert("Your Card has Expired");
      data.month.focus();
      return false;
    }            
    if(data.year.value < year) {
      alert("Your Card has Expired");
      data.year.focus();
      return false;
    }
    alert("Your transaction is being processed. Please do not click on the Submit, Continue, or Back button as this may cause your account to be billed more than once.");
    return true;


}


function validateCCNum(cardType,cardNum)
{
	var result = false;
	cardType = cardType.toUpperCase();

	
	var cardLen = cardNum.length;
	var firstdig = cardNum.substring(0,1);
	var seconddig = cardNum.substring(1,2);
	var first4digs = cardNum.substring(0,4);
	switch (cardType)
	{
		case "VISA":
			result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
			break;
		case "AMEX":
			var validNums = "47";
			result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
		case "MASTERCARD":
			var validNums = "12345";
			result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
			break;
		case "DISCOVER":
			result = (cardLen == 16) && (first4digs == "6011");
			break;
		case "DINERS":
			var validNums = "068";
			result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
			break;
	}
	return result;
}

function LuhnCheck(str) 
{
  var result = true;

  var sum = 0; 
  var mul = 1; 
  var strLen = str.length;
  
  for (i = 0; i < strLen; i++) 
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
    
  return result;
}


function clearorder(form)
{
   form.fname.value="";
   form.lname.value="";
   form.address1.value="";
   form.address2.value="";
   form.city.value="";
   form.state.selectedIndex=0;
   form.zip.value="";
   form.phone.value="";
   form.altemail.value="";
   form.referred.value="";
   form.tos.checked=false;
   form.fname.focus();
}


function clearcard(form) 
{   
    form.reset();
    form.credit_card.focus();
}

function clearreferral(form) 
{   
    form.friendname.value="";
    form.friendemail.value="";
    form.myname.value="";
    form.myemail.value="";
    form.copyme.checked=false;
    form.mmessage.value="I came across this site and I thought you might enjoy it – it is MailMine.net and they provide email with personalized addresses, like Jake@WildcatsBaseball.net, Jenn@PoodleLover.net  and over 1000 more! And they even have two-character usernames available, like TJ@Hip1.net. That is way better than your basic timothy22341@genericmail.net.";
    form.thedomain.value="";
    form.friendname.focus();
}

// Array Function

function makeArray() {
var args = makeArray.arguments;
    for (var i = 0; i < args.length; i++) {
    this[i] = args[i];
    }
this.length = args.length;
}


function emailCheck (emailStr) 
{
    var emailPat=/^(.+)@(.+)$/
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
    var validChars="\[^\\s" + specialChars + "\]"
    var quotedUser="(\"[^\"]*\")"
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
    var atom=validChars + '+'
    var word="(" + atom + "|" + quotedUser + ")"
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

    var matchArray=emailStr.match(emailPat)
    if (matchArray==null) 
    {
	    alert("Email address is not of proper format.\n(Example:johndoe@isp.com)")
	    return false
    }
    var user=matchArray[1]
    var domain=matchArray[2]

    if (user.match(userPat)==null) 
    {
        alert("Email address is not of proper format.\n(Example:johndoe@isp.com)")
        return false
     }

    var IPArray=domain.match(ipDomainPat)
    if (IPArray!=null) 
    {
	  for (var i=1;i<=4;i++) 
	  {
	    if (IPArray[i]>255) 
	    {
	        alert("Email address is not of proper format.\n(Example:johndoe@isp.com)")
		    return false
	    }
      }
      return true
   }

   // Domain is symbolic name
   var domainArray=domain.match(domainPat)
   if (domainArray==null) 
   {
	   alert("Email address is not of proper format.\n(Example:johndoe@isp.com)")
       return false
   }

   var atomPat=new RegExp(atom,"g")
   var domArr=domain.match(atomPat)
   var len=domArr.length
   if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
   {
       alert("The Email address must end in a three-letter domain, or two letter country.")
       return false
   }

   if (len<2) 
   {
       alert("Email address is not of proper format.\n(Example:johndoe@isp.com)")
       return false
   }

return true;
}

