/* these functions are required by the front end of the site */


function changeSizes()
  {
    //Blue:xsmall - 10|44#small - 12|55#Large - 16|66

    //get selected color
    var colorobj = document.getElementById("colorselector");
    
    var sizecheck = jQuery("#colorselector option:selected").attr("sizing");
    if(sizecheck == "none")
      return true;
    
    var ccolor = colorobj.value;
    var ct = ccolor.split(":");
    var scolor = ct[0];
    var csizes = ct[1];
    var allsizes = csizes.split("#");

    //allsizes = sortSizes(allsizes);

    //change the size options to the sizes available
    sizeobj = document.getElementById("sizeselector");

    //sizeobj = document.buyform.elements[sindex];

    sizeobj.length = allsizes.length;
    for(var i=0; i < allsizes.length; i++)
      {
        sizeobj[i].text = allsizes[i];
        sizeobj[i].value = allsizes[i];
      }
  }
  
  
  
/* cart functions */
/*
 TODO: improve these functions.  we can do all of this a lot easier with jquery
*/

  cureditid  = "";
  
  jQuery(document).ready(function() {
    jQuery(".modifylink").attr("href", "javascript:void(0);");
    jQuery(".modifylink").click( function () {
      
      var curidname = jQuery(this).attr("id");
      
      //curidname will look like modify5  .. use a regexp to get the number
      var re = /\d{1,}/
      var resultArray = re.exec(curidname);

      //now put together the itemid and fetch the prod info.  (the number also represents the cart position)
      idname = "item" + resultArray[0];
      
      getProdInfo(idname, resultArray[0]);
      
    });
  });

  function getProdInfo(idname,cartpos)
    {
      //cureditid = idname;
      idname = '#' + idname;
      jQuery.get("/wp-content/plugins/wpsf/wpsf_ajax.php", { wpsf_action: "cart", cartaction: "getItem", ci: cartpos }, function(data) {
        jQuery(idname).html(data);
      });
    }
    
  function changeCartSizes(pos)
    {
      //var colorobj = document.getElementById("colorselector");
      colorid = "colorselector" + pos;
      sizeid = "sizeselector" + pos;
      //alert(colorid);
      
      var sizecheck = jQuery(colorid + " option:selected").attr("sizing");
      if(sizecheck == "none")
        return true;
        
      var colorobj = document.getElementById(colorid);
      
      var ccolor = colorobj.value;
      var ct = ccolor.split(":");
      var scolor = ct[0];
      var csizes = ct[1];
      
      //alert(scolor);
      
      var allsizes = csizes.split("#");

      //allsizes = sortSizes(allsizes);

      //change the size options to the sizes available
      sizeobj = document.getElementById(sizeid);

      //sizeobj = document.buyform.elements[sindex];

      sizeobj.length = allsizes.length;
      for(var i=0; i < allsizes.length; i++)
        {
          sizeobj[i].text = allsizes[i];
          sizeobj[i].value = allsizes[i];
        }
    }


      var submitted = false;

      var TAXTABLE = new Array();
      TAXTABLE["NM"] = .079375;

      jQuery(function($) {
        
        updateform();
      });

      function updateform()
        {
          if(document.getElementById("shippinginfo"))
            {
              updateshipinfo();
              //must do this first.
              //changeShipMethodField();
              //changeShipType();
            }


          if(document.getElementById("mcart"))
            {
              updateprices(gtotal);
            }
        }

      function validateForm1()
        {
          var errormsg = "";

          var pass = false;

          if(document.orderform.Ecom_BillTo_Postal_Name_First.value == "")
            errormsg += "Please enter your Billing First Name.\n";
          else
            pass = true;

          if(document.orderform.Ecom_BillTo_Postal_Name_Last.value == "")
            errormsg += "Please enter your Billing Last Name.\n";
          else
            pass = true;

          if(document.orderform.Ecom_BillTo_Postal_Street_Line1.value == "")
            errormsg += "Please enter your Billing Street Address.\n";
          else
            pass = true;

          if(document.orderform.Ecom_BillTo_Postal_City.value == "")
            errormsg += "Please enter your Billing City.\n";
          else
            pass = true;

          zip = document.orderform.Ecom_BillTo_Postal_PostalCode.value;
          if(zip.length < 5)
            errormsg += "Please enter a valid Billing Zip Code.\n";
          else
            pass = true;

          if(document.orderform.Ecom_BillTo_Postal_StateProv.selectedIndex == 0)
            errormsg += "Please choose a valid Billing State.\n";
          else
            pass = true;

          if(errormsg != "")
             {
               pass = false;

               alert(errormsg);
               return pass;
             }
          else
            return pass;
        }


    function updateprices(gtotal)
     {
      tax = 0.00;

      total = 0.00;

      var subtotal = 0.00;

      subtotal = gtotal;

      bstate = document.orderform.Ecom_BillTo_Postal_StateProv.value;

      state = document.orderform.Ecom_ShipTo_Postal_StateProv.value;

      scountry = document.orderform.Ecom_BillTo_Postal_CountryCode.value;

      if(state == "AK" || state == "HI")
        {
          changeShipType("AKHIGuamPR");
        }
      else if((scountry == "United States"))
        {
          changeShipType('feg');

          for(i=0; i < document.orderform.shipmethod.length; i++)
            {
              if(document.orderform.shipmethod[i].checked)
                {
                  changeShipType(document.orderform.shipmethod[i].value);
                }
            }
        }

      //calculate shipping
      tshipping = parseFloat(document.orderform.shipping.value);

      document.orderform.shippingprice.value = presentValue(tshipping);

      //calculate tax
      //state = document.orderform.state.value;
      bstate = bstate.toUpperCase();
      if(TAXTABLE[bstate])
        {
          tax = subtotal * TAXTABLE[bstate];
        }

      document.orderform.tax.value = presentValue(tax);
      document.orderform.grandtotal.value = presentValue(tshipping + subtotal + tax);

      document.orderform.shippingprice2.value = presentValue(tshipping);
      document.orderform.tax2.value = presentValue(tax);
      document.orderform.grandtotal2.value = presentValue(tshipping + subtotal + tax);

     }


    function presentValue(value)
      {
      if (value > 0.00)
        {
        if (value < 1.00)
          {
          dollars = 0;
          cents = Math.round(value * 100.0);
          }

        else
          {
          dollars = parseInt(value);
          cents = Math.round((value - dollars) * 100.0);
          }

        if (cents >= 100)
          {
          dollars ++;
          cents -= 100;
          }

        if (cents == 0)
          cents = '00';

        else if (cents < 10)
          {
          cents = '0' + cents;
          }

        newString = '$' + dollars + '.' + cents;
        return (newString);
        }

      else
        return ('$0.00');
      }

    function validateForm2()
      {
        //updateprices(gtotal);

    		umonth = parseInt(document.orderform.Ecom_Payment_Card_ExpDate_Month[document.orderform.Ecom_Payment_Card_ExpDate_Month.selectedIndex].value);
    		uyear = parseInt(document.orderform.Ecom_Payment_Card_ExpDate_Year[document.orderform.Ecom_Payment_Card_ExpDate_Year.selectedIndex].text);

    		udate = new Date(uyear, umonth);

    		cdate = new Date();

        //check for po box, apo or fpo addresses
        //var re = /\bPO Box\b|\bFPO\b|\bAPO\b/gi
        //result = re.exec(document.orderform.streetaddress.value);
        //result2 = re.exec(document.orderform.streetaddress2.value);
        //result3 = re.exec(document.orderform.city.value);

        //if((result != null) || (result2 != null) || (result3 != null))
          //{
            //alert('We\re sorry.  At this time we do not ship to PO Boxes, APO/FPO addresses, or overseas.  You\'re order has not been placed at this time.');
            //return false;
          //}


        if(udate.getTime() < cdate.getTime())
    			{
    				alert("Please enter a valid credit card expiration date.");
            document.orderform.Ecom_Payment_Card_ExpDate_Month.focus();
    				return false;
    			}
        else if(validateCard(document.orderform.Ecom_Payment_Card_Number.value, document.orderform.Ecom_Payment_Card_Type[document.orderform.Ecom_Payment_Card_Type.selectedIndex].value))
          {
            //can this keep people from double/triple submitting?
            if(!submitted)
              submitted = true;

            if(submitted)
              return true;
            else
              return false;
          }
        else
          {
            alert("Please enter a valid credit card number. Make sure you have chosen the correct credit card type.");
            document.orderform.Ecom_Payment_Card_Number.focus();
            return false;
          }
      }


      function updateshipinfo()
        {
          var shipbox = document.getElementById("shipbox");

          if(document.orderform.shipaddressneeded.checked)
            shipbox.style.display = "none";
          else
            shipbox.style.display = "block";

          if(document.orderform.shipaddressneeded.checked)
            {
              document.orderform.Ecom_ShipTo_Postal_Name_First.value = document.orderform.Ecom_BillTo_Postal_Name_First.value;
              document.orderform.Ecom_ShipTo_Postal_Name_Last.value = document.orderform.Ecom_BillTo_Postal_Name_Last.value;
              //document.orderform.ship_company.value = document.orderform.company.value;
              document.orderform.Ecom_ShipTo_Postal_Street_Line1.value = document.orderform.Ecom_BillTo_Postal_Street_Line1.value;
              //document.orderform.ship_streetaddress2.value = document.orderform.streetaddress2.value;
              document.orderform.Ecom_ShipTo_Postal_City.value = document.orderform.Ecom_BillTo_Postal_City.value;
              document.orderform.Ecom_ShipTo_Postal_PostalCode.value = document.orderform.Ecom_BillTo_Postal_PostalCode.value;
              //document.orderform.ship_homephone.value = document.orderform.homephone.value;

              document.orderform.Ecom_ShipTo_Postal_StateProv.selectedIndex = document.orderform.Ecom_BillTo_Postal_StateProv.selectedIndex;
              //document.orderform.ship_province.value = document.orderform.province.value;
              document.orderform.Ecom_ShipTo_Postal_CountryCode.selectedIndex = document.orderform.Ecom_BillTo_Postal_CountryCode.selectedIndex;
            }
          else
            {
              document.orderform.Ecom_ShipTo_Postal_Name_First.value = "";
              document.orderform.Ecom_ShipTo_Postal_Name_Last.value = "";
              //document.orderform.ship_company.value = document.orderform.company.value;
              document.orderform.Ecom_ShipTo_Postal_Street_Line1.value = "";
              //document.orderform.ship_streetaddress2.value = document.orderform.streetaddress2.value;
              document.orderform.Ecom_ShipTo_Postal_City.value = "";
              document.orderform.Ecom_ShipTo_Postal_PostalCode.value = "";
              //document.orderform.ship_homephone.value = document.orderform.homephone.value;

              document.orderform.Ecom_ShipTo_Postal_StateProv.selectedIndex = 0;
              //document.orderform.ship_province.value = document.orderform.province.value;
              document.orderform.Ecom_ShipTo_Postal_CountryCode.selectedIndex = 0;
            }


          //updateprices(gtotal);

        }

    function validateCard(cardNumber, cardType)
    {
      var isValid = false;
      var ccCheckRegExp = /[^\d ]/;
      isValid = !ccCheckRegExp.test(cardNumber);

      if (isValid)
      {
        var cardNumbersOnly = cardNumber.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;

        switch(cardType)
        {
          case "MC":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^5[1-5]/;
            break;

          case "VI":
            lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
            prefixRegExp = /^4/;
            break;

          case "AE":
            lengthIsValid = (cardNumberLength == 15);
            prefixRegExp = /^3(4|7)/;
            break;

          case "DI":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^6/;
            break;

          default:
            prefixRegExp = /^$/;
            //alert("Card type not found");
        }

        prefixIsValid = prefixRegExp.test(cardNumbersOnly);
        isValid = prefixIsValid && lengthIsValid;
      }

      if (isValid)
      {
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;

        for (digitCounter = cardNumberLength - 1; 
          digitCounter >= 0; 
          digitCounter--)
        {
          checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
          digitCounter--;
          numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
          for (var productDigitCounter = 0;
            productDigitCounter < numberProduct.length; 
            productDigitCounter++)
          {
            checkSumTotal += 
              parseInt(numberProduct.charAt(productDigitCounter));
          }
        }

        isValid = (checkSumTotal % 10 == 0);
      }

      return isValid;
    }
   