I took over this website a little while back. The order form will only update the first three products, and that's only if I comment out the getTaxRate function. It doesn't update the Final Total either. I've made some attempt at getting it to work but ended up pulling my hair out. I'm not too familiar with javascript, but it seems like the code was written poorly. I would appreciate any help.

Here is the form: Link

Here is the Javascript:
Code:
// @@@@@ SALES ORDER SCRIPTS Start @@@@@
/*
        Return Codes
        -------------------------
        0  - Success
        1  - Error: Check sum failed
        10 - Error: Too Few digits
        11 - Error: Invalid Prefix
        12 - Error: Incorrect Number of digits
        13 - Error: Unsupported card type
      */
      function validateCCard( nCardNum, strCardType)
      {
        // returns 0 if valid, positive number if invalid.
        nTotal = 1*0;
        nOff = 1*0;

        nNumber = "";

        // Remove any non-numeric values from this number.
        for( i = 0; i < nCardNum.length; i++ )
      		if ( nCardNum.charAt(i) >= "0" && nCardNum.charAt(i) <= "9" )
            nNumber = nNumber + nCardNum.charAt(i);

        nFirstNum = "" + nNumber.charAt(0);
        nSecondNum = "" + nNumber.charAt(1);
        nThirdNum = "" + nNumber.charAt(2);
        nFirstTwoDigits = nFirstNum + nSecondNum;
        nFirstFourDigits = nFirstTwoDigits + nThirdNum + nNumber.charAt(3);

        if ( strCardType == "MasterCard" )
        {
          if ( nFirstNum != "5" || nSecondNum < "1" || nSecondNum > "5" )
            return 11;      // invalid prefix

          if(nNumber.length != 16)
            return 12;      // Incorrect number of digits
        }
        else if(strCardType == "Visa")
        {
          if(nFirstNum != "4")
            return 11;      // invalid prefix

          if(nNumber.length != 13 && nNumber.length != 16)
            return 12;      // Incorrect number of digits
        }
        else if(strCardType == "American Express")
        {
          if(nFirstNum != "3" || (nSecondNum != "4" && nSecondNum != "7"))
            return 11;      // invalid Prefix

          if(nNumber.length != 15)
            return 12;      // Incorrect number of digits
        }
        else if(strCardType == "Discover")
        {
          if( nFirstFourDigits != "6011" )
            return 11;      // invalid prefix.

          if( nNumber.length != 16 )
            return 12;      // Incorrect number of digits
        }
        else if(strCardType == "Diner''s Club")
        {
          if ( nFirstTwoDigits != "36" && nFirstTwoDigits != "38" &&
              (nFirstTwoDigits != "30" || (nThirdNum < "0" || nThirdNum > "5")))
          {
            return 11;      // invalid prefix.
          }
          if ( nNumber.length != 14 )
            return 12;      // Incorrect number of digits
        }
        else
          return 13;  // Card type not supported

        // No card is less than 13 characters
        if ( nNumber.length < 13 )
          return 10;

        // now check the credit card suffix and length vs. the type

        // do the checksum
        for ( loc = nNumber.length - 2; loc >= 0; loc -= 2 )
        {
          nTotal += 1 * nNumber.charAt(loc +1);
          nOff = nNumber.charAt(loc) * 2;
    	    if ( nOff > 9 )
    	      nTotal += 1;
    	    nTotal += (nOff % 10);
        }

        if( nNumber.length % 2 > 0 )
          nTotal += 1 * nNumber.charAt(0);

        if ( ( nTotal % 10 ) != 0 )
          return 1; // Checksum failure

        return 0; // Okey Dokey!
     }
      function formatCurrency(nAmount)
      {
         //-- Returns passed number as string in $xxx,xxx.xx format.
         nAmount=eval(nAmount)
         workNum=Math.abs((Math.round(nAmount*100)/100));workStr=""+workNum
         if (workStr.indexOf(".")==-1){workStr+=".00"}
         dStr=workStr.substr(0,workStr.indexOf("."));dNum=dStr-0
         pStr=workStr.substr(workStr.indexOf("."))
         while (pStr.length<3){pStr+="0"}

         //--- Adds comma in thousands place.
         if (dNum>=1000)
         {
            dLen=dStr.length
            dStr=parseInt(""+(dNum/1000))+","+dStr.substring(dLen-3,dLen)
         }

         //-- Adds comma in millions place.
         if (dNum>=1000000)
         {
            dLen=dStr.length
            dStr=parseInt(""+(dNum/1000000))+","+dStr.substring(dLen-7,dLen)
         }
         retval = dStr + pStr
         //-- Put numbers in parentheses if negative.
         if (nAmount<0) {retval="("+retval+")"}
         return "$"+retval
      }

      function getTaxRate()
      {
        // Need to get the correct tax rate based upon what State.
        // Get the state the user is shipping to.        
       /* nStateIDX = document.formSalesOrder.elements["BillingState"].selectedIndex;
        strState = document.formSalesOrder.elements["BillingState"].options[nStateIDX].value;
        nTaxRate = 0.00;
        if ( strState == "MI - Michigan" )
        {
         // If the selected state is 'MI - Michigan' then return the correct tax
          nTaxRate = 6.000000;
        }
        return nTaxRate/100;*/
      }
      function getShippingRate()
      {
        // Shipping is a fixed percentage rate
        var nRate = 0.000000/100;
        return nRate;
      }

      function updateTotal()
      {
        var dSubtotal = 0.00;
        var dShipping = 0.00;
        var dTax = 0.00;
        var dTotal = 0.00;

        dTaxRate = getTaxRate();

        var itemQuantity = ["QTY_1_TxTrayLW_DS","QTY_2_TxTrayThumb_DS","QTY_3_TxTrayHW_DS","QTY_4_TxTrayKT_DS","QTY_5_TxTrayLW","QTY_6_TxTrayThumb" , "QTY_7_TxTrayHW" , "QTY_8_TxTrayKT" , "QTY_9_DS_Retrofit" , "QTY_10_DS"];
        var itemTotal = ["TOTAL_1_TxTrayLW_DS","TOTAL_2_TxTrayThumb_DS","TOTAL_3_TxTrayHW_DS","TOTAL_4_TxTrayKT_DS","TOTAL_5_TxTrayLW",	"TOTAL_6_TxTrayThumb" , "TOTAL_7_TxTrayHW" , "TOTAL_8_TxTrayKT" , "TOTAL_9_DS_Retrofit" , "TOTAL_10_DS"];
        var itemPrice = ["PRICE_1_TxTrayLW_DS","PRICE_2_TxTrayThumb_DS","PRICE_3_TxTrayHW_DS","PRICE_4_TxTrayKT_DS","PRICE_5_TxTrayLW",	"PRICE_6_TxTrayThumb" , "PRICE_7_TxTrayHW" , "PRICE_8_TxTrayKT" , "PRICE_9_DS_Retrofit" , "PRICE_10_DS"];

		for(var iCnt=0;iCnt<itemQuantity.length;iCnt++){


	        // Get the quantity for item 'Product 3'
	        nSelIDX = 0;

	        nSelIDX = document.formSalesOrder.elements[itemQuantity[iCnt]].selectedIndex;
	        nQty = Number(document.formSalesOrder.elements[itemQuantity[iCnt]].options[nSelIDX].value);
	        // Update the line total for this item.
	        // Product subtotal = Quantity * Price
	        dProdSub = 0.00;
	        dProdSub = nQty * document.formSalesOrder.elements[itemPrice[iCnt]].value;
	        document.formSalesOrder.elements[itemTotal[iCnt]].value = formatCurrency(dProdSub);

	        // Form subtotal
	        dSubtotal += dProdSub;
	    }

        // Update the TOTAL for the form.
        if ( nQty != 0 )
        {
          dTax += dProdSub * dTaxRate;
          dShipping = (getShippingRate()*dSubtotal);
        }

        dTotal = dSubtotal + dTax + dShipping;
        document.formSalesOrder.elements["editSubtotal"].value=formatCurrency(dSubtotal);
//        document.formSalesOrder.elements["editSH"].value=formatCurrency(dShipping);
        document.formSalesOrder.elements["editTax"].value=formatCurrency(dTax);
        document.formSalesOrder.elements["editTotal"].value=formatCurrency(dTotal);
      }


// @@@@@ SALES ORDER SCRIPTS End @@@@@