//Cart JavaScript functions

function isvalidemail(val,turnoffmessages)
{
   var periodpos = val.lastIndexOf(".");
   var atpos=val.indexOf("@");
   var headmsg="INCOMPLETE OR INVALID EMAIL ADDRESS\r\r";
   var errormsg="";
   if(val.length<5) { errormsg+="Email address is too short.\r"; }
   if(atpos<1 || atpos>periodpos) { errormsg+="The AT '@' symbol is missing or in the wrong position.\r"; }
   if (periodpos<3 || periodpos+1==val.length || periodpos==atpos+1) { errormsg+="A period '.' is missing or in wrong Place.\r"; }
   //alert("atpos="+atpos+"\rperiod pos="+periodpos)
   if(errormsg != "")
   {
      if(!turnoffmessages) { alert(headmsg+errormsg); }
      return false;
   }
   else { return true; }
}

function submitinfo(obj)
{
   var formobj=obj.form;
   var emailaddress=formobj.emailaddress.value;
   var postalcode = formobj.postalcode.value;
   if (isvalidemail(emailaddress))
   {
      if(postalcode.length < 5) { alert("Invalid postal / zip code"); return false; }
      else
      {
         if(validatecreditcard(obj))
         {
            formobj.mode.value = 'updateorderform';
            formobj.submit();
         }
      }
   }
   else { return false; }
}

   function pleasecall()
   {
      alert("\rPlease call us, regarding this item,\rat any of the following numbers:\r\rBoston (617) 424-0250\rWaltham (781) 890-9211\rWayland (508) 358-7282\r\rThank you");
   }
 
   function addtocart(pid)
   {
     if(!parseInt(pid)) { alert("[fn addtocart]\rpid was not numeric.\rAdd to cart process was aborted."); return false; }
     var formobj=document.cartform;
     formobj.pid.value=pid;
     formobj.mode.value="addtocart";
     formobj.submit();
   }
   
   function updatecart(obj)
   {
     
     var formobj=obj.form;
     if(formobj.shippingmethod)
      {
       var shipvalue=formobj.shippingmethod.options[formobj.shippingmethod.selectedIndex].value;
       if(shipvalue=="") { alert("Please select a shipping method"); return false; }
      }     
     
      formobj.mode.value="updatecart";
      formobj.submit();
    
   }
   
   function checkout()
   {
      window.location.href="checkout.html";
   }
   
   function checkoutverify()
   {
      window.location.href="checkout_verify.html";
   }

   function checkoutcomplete()
   {
      window.location.href="checkout_complete.html";
   }
   
   function printconfirmation()
   {
    if (window.print)
      {
        self.print()
      }
    else alert('To print, choose \"Print\" from the browser\' File menu')
   }
   
   
   function setexpdate(obj)
   {
      var formobj=obj.form;
      var monthobj=formobj.paymentexpirationmonth;
      var yearobj=formobj.paymentexpirationyear;
      formobj.paymentexpiration.value=monthobj.options[monthobj.selectedIndex].value + "/" + yearobj.options[yearobj.selectedIndex].value
      //alert(formobj.paymentexpiration.value);
   }
   
   
function validatecreditcard(obj)
{
   var formobj=obj.form;
   var cardtype=formobj.paymenttype.options[formobj.paymenttype.selectedIndex].value;
   var cardnumber=formobj.paymentnumber.value;
   var validnumber=isValidCardNumber(cardnumber);
   var validtype=isCardTypeCorrect(cardnumber,cardtype);
   //alert("validnumber="+validnumber+"validtype="+validtype);
   var returnvalue=false;
   if(validnumber && validtype) { returnvalue=true; }
   if((cardnumber.length < 14) || (cardtype.length < 4))
   { returnvalue=false; }
   if(!returnvalue) { alert("Your card type and number do not match or have an invalid number syntax.\rPlease review and try again."); }
   return returnvalue;
}
   
function isValidCardNumber(strNum) 
{
   //NOTE: overridden due to client complaint that a visa card was enetered that was valid but returned false in this check.
   return true;
   //end override
   
   var nCheck = 0;
   var nDigit = 0;
   var bEven  = false;   
   for (n = strNum.length - 1; n >= 0; n--) 
   {
      var cDigit = strNum.charAt (n);
      if (isDigit (cDigit))
      {
         var nDigit = parseInt(cDigit, 10);
         if (bEven)
         { if ((nDigit *= 2) > 9) { nDigit -= 9; } }
         nCheck += nDigit;
         bEven = ! bEven;
      }
      else if (cDigit != ' ' && cDigit != '.' && cDigit != '-')
      { return false; }
   }
   return (nCheck % 10) == 0;
}

function isDigit (c)
{
   var strAllowed = "1234567890";
   return (strAllowed.indexOf (c) != -1);
}

function isCardTypeCorrect(strNum, type)
{
   var nLen = 0;
   for (n = 0; n < strNum.length; n++)
   {
      if (isDigit (strNum.substring (n,n+1))) { ++nLen; }
   }
   //alert((strNum.substring(0,1) == '4')+"\rtype="+type+"\rnlen="+nLen)
   if (type == 'Visa') { return ((strNum.substring(0,1) == '4') && (nLen == 13 || nLen == 16)); }
   else if (type == 'Amex') { return ((strNum.substring(0,2) == '34' || strNum.substring(0,2) == '37') && (nLen == 15)); }
   else if (type == 'Master Card')
   return (
             (strNum.substring(0,2) == '51'
               || strNum.substring(0,2) == '52'
               || strNum.substring(0,2) == '53'
               || strNum.substring(0,2) == '54'
               || strNum.substring(0,2) == '55'
             )
             &&
             (nLen == 16)
          );
   else { return false; }
}

   