    //=====================================================================||
    //               NOP Design JavaScript Shopping Cart                   ||
    //                                                                     ||
    // For more information on SmartSystems, or how NOPDesign can help you ||
    // Please visit us on the WWW at http://www.nopdesign.com              ||
    //                                                                     ||
    // Javascript portions of this shopping cart software are available as ||
    // freeware from NOP Design.  You must keep this comment unchanged in  ||
    // your code.  For more information contact FreeCart@NopDesign.com.    ||
    //                                                                     ||
    // JavaScript Shop Module, V.4.4.0                                     ||
    //=====================================================================||

    //---------------------------------------------------------------------||
    //                       Global Options                                ||
    //                      ----------------                               ||
    // Shopping Cart Options, you can modify these options to change the   ||
    // the way the cart functions.                                         ||
    //                                                                     ||
    // Language Packs                                                      ||
    // ==============                                                      ||
    // You may include any language pack before nopcart.js in your HTML    ||
    // pages to change the language.  Simply include a language pack with  ||
    // a script src BEFORE the <SCRIPT SRC="nopcart.js">... line.          ||
    //  For example: <SCRIPT SRC="language-en.js">                         ||
    //                                                                     ||
    // Options For Everyone:                                               ||
    // =====================                                               ||
    // * MonetarySymbol: string, the symbol which represents dollars/euro, ||
    //   in your locale.                                                   ||
    // * DisplayNotice: true/false, controls whether the user is provided  ||
    //   with a popup letting them know their product is added to the cart ||
    // * DisplayShippingColumn: true/false, controls whether the managecart||
    //   and checkout pages display shipping cost column.                  ||
    // * DisplayShippingRow: true/false, controls whether the managecart   ||
    //   and checkout pages display shipping cost total row.               ||
    // * DisplayTaxRow: true/false, controls whether the managecart        ||
    //   and checkout pages display tax cost total row.                    ||
    // * TaxRate: number, your area's current tax rate, ie: if your tax    ||
    //   rate was 7.5%, you would set TaxRate = 0.075                      ||
    // * TaxByRegion: true/false, when set to true, the user is prompted   ||
    //   with TaxablePrompt to determine if they should be charged tax.    ||
    //   In the USA, this is useful to charge tax to those people who live ||
    //   in a particular state, but no one else.                           ||
    // * TaxPrompt: string, popup message if user has not selected either  ||
    //   taxable or nontaxable when TaxByRegion is set to true.            ||
    // * TaxablePrompt: string, the message the user is prompted with to   ||
    //   select if they are taxable.  If TaxByRegion is set to false, this ||
    //   has no effect. Example: 'Arizona Residents'                       ||
    // * NonTaxablePrompt: string, same as above, but the choice for non-  ||
    //   taxable people.  Example: 'Other States'                          ||
    // * MinimumOrder: number, the minium dollar amount that must be       ||
    //   purchased before a user is allowed to checkout.  Set to 0.00      ||
    //   to disable.                                                       ||
    // * MinimumOrderPrompt: string, Message to prompt users with when     ||
    //   they have not met the minimum order amount.                       ||
    //                                                                     ||
    // Payment Processor Options:                                          ||
    // ==========================                                          ||
    // * PaymentProcessor: string, the two digit payment processor code    ||
    //   for support payment processor gateways.  Setting this field to    ||
    //   anything other than an empty string will override your OutputItem ||
    //   settings -- so please be careful when receiving any form data.    ||
    //   Support payment processor gateways are:                           ||
    //    * Authorize.net (an)                                             ||
    //    * Worldpay      (wp)                                             ||
    //    * LinkPoint     (lp)
    //                                                                     ||
    // Options For Programmers:                                            ||
    // ========================                                            ||
    // * OutputItem<..>: string, the name of the pair value passed at      ||
    //   checkouttime.  Change these only if you are connecting to a CGI   ||
    //   script and need other field names, or are using a secure service  ||
    //   that requires specific field names.                               ||
    // * AppendItemNumToOutput: true/false, if set to true, the number of  ||
    //   each ordered item will be appended to the output string.  For     ||
    //   example if OutputItemId is 'ID_' and this is set to true, the     ||
    //   output field name will be 'ID_1', 'ID_2' ... for each item.       ||
    // * HiddenFieldsToCheckout: true/false, if set to true, hidden fields ||
    //   for the cart items will be passed TO the checkout page, from the  ||
    //   ManageCart page.  This is set to true for CGI/PHP/Script based    ||
    //   checkout pages, but should be left false if you are using an      ||
    //   HTML/Javascript Checkout Page. Hidden fields will ALWAYS be       ||
    //   passed FROM the checkout page to the Checkout CGI/PHP/ASP/Script  ||
    //---------------------------------------------------------------------||

    //Options for Everyone:
    MonetarySymbol        = '$';
    DisplayNotice         = true;
    DisplayShippingColumn = false;
    DisplayShippingRow    = false;
    DisplayTaxRow         = true;
    TaxRate               = 0.931;
    TaxByRegion           = true;
    //TaxPrompt             = 'For tax purposes, please select if you are a subjected to Local Tax  before continuing';
	TaxPrompt             = 'Please select if you would prefer the values in USD or CAD before continuing.';
    TaxablePrompt         = 'in USD';
    NonTaxablePrompt      = 'in CAD';
    MinimumOrder          = 50.00;
    MinimumOrderPrompt    = 'Your order is below our minimum order, please order more before checking out.';

    //Payment Processor Options:
    PaymentProcessor      = '';

    //Options for Programmers:
    OutputItemId          = 'ID_';
    OutputItemQuantity    = 'QUANTITY_';
    OutputItemPrice       = 'PRICE_';
    OutputItemName        = 'NAME_';
    OutputItemShipping    = 'SHIPPING_';
    OutputItemAddtlInfo   = 'ADDTLINFO_';
    OutputOrderSubtotal   = 'SUBTOTAL';
    OutputOrderShipping   = 'SHIPPING';
    OutputOrderTax        = 'TAX';
    OutputOrderTotal      = 'TOTAL';
    AppendItemNumToOutput = true;
    HiddenFieldsToCheckout = false;


    //=====================================================================||
    //---------------------------------------------------------------------||
    //    YOU DO NOT NEED TO MAKE ANY MODIFICATIONS BELOW THIS LINE        ||
    //---------------------------------------------------------------------||
    //=====================================================================||


    //---------------------------------------------------------------------||
    //                      Language Strings                               ||
    //                     ------------------                              ||
    // These strings will not be used unless you have not included a       ||
    // language pack already.  You should NOT modify these, but instead    ||
    // modify the strings in language-**.js where ** is the language pack  ||
    // you are using.                                                      ||
    //---------------------------------------------------------------------||
    if ( !bLanguageDefined ) {
       strSorry  = "I'm Sorry, your cart is full, please proceed to checkout.";
       strAdded  = " added to your shopping cart.";
       strRemove = "Click 'Ok' to remove this product from your shopping cart.";
       strILabel = "Product Id";
       strDLabel = "Description";
       strQLabel = "Quantity";
       strPLabel = "Price";
       strSLabel = "Shipping";
       strRLabel = "Remove From Cart";
       strRButton= "Remove";
       strSUB    = "SUBTOTAL";
       strSHIP   = "SHIPPING";
       strTAX    = "V.A.T.";
       strTOT    = "TOTAL";
       strErrQty = "Invalid Quantity.";
       strNewQty = 'Please enter new quantity:';
       strCEmpty = 'Your cart is empty';
       bLanguageDefined = true;
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    Read / write Cart data                                 ||
    // PARAMETERS:  None                                                   ||
    // RETURNS:     Cart content                                           ||
    // PURPOSE:     Manages the Cart content onto the hidden frame         ||
    //---------------------------------------------------------------------||

    function GetCart(ArrNum) {
      return parent.CartData.CartArray[ArrNum]
    }

    function SetCart(ArrNum,CartVal) {
      parent.CartData.CartArray[ArrNum] = CartVal
    }

    function NumCart() {
      return parent.CartData.CartArray.length;
    }

    function DelCart(ArrNum) {
      parent.CartData.CartArray.splice(ArrNum,1)
    }

    function CleanCart() {
      parent.CartData.CartArray.splice(0,parent.CartData.CartArray.length);
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    CKquantity                                             ||
    // PARAMETERS:  Quantity to                                            ||
    // RETURNS:     Quantity as a number, and possible alert               ||
    // PURPOSE:     Make sure quantity is represented as a number          ||
    //---------------------------------------------------------------------||
    function CKquantity(checkString) {
       var strNewQuantity = "";
       for ( i = 0; i < checkString.length; i++ ) {
          ch = checkString.substring(i, i+1);
          if ( (ch >= "0" && ch <= "9") || (ch == '.') )
             strNewQuantity += ch;
       }

       if ( strNewQuantity.length < 1 )
          strNewQuantity = "1";

       return(strNewQuantity);
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    AddToCart                                              ||
    // PARAMETERS:  Form Object                                            ||
    // RETURNS:     Value to user's browser, with prompt                  ||
    // PURPOSE:     Adds a product to the user's shopping cart             ||
    //---------------------------------------------------------------------||
    function AddToCart(thisForm) {
       var iNumberOrdered = 0;
       var bAlreadyInCart = false;
       var notice = "";
       iNumberOrdered = NumCart();
       if ( iNumberOrdered == null )
          iNumberOrdered = 0;

       if ( thisForm.ID_NUM == null )
          strID_NUM    = "";
       else
          strID_NUM    = thisForm.ID_NUM.value;

       if ( thisForm.QUANTITY == null )
          strQUANTITY  = "1";
       else
          strQUANTITY  = thisForm.QUANTITY.value;

       if ( thisForm.PRICE == null )
          strPRICE     = "0.00";
       else
          strPRICE     = thisForm.PRICE.value;

       if ( thisForm.NAME == null )
          strNAME      = "";
       else
          strNAME      = thisForm.NAME.value;

       if ( thisForm.SHIPPING == null )
          strSHIPPING  = "0.00";
       else
          strSHIPPING  = thisForm.SHIPPING.value;

       if ( thisForm.ADDITIONALINFO == null ) {
          strADDTLINFO = "";
       } else {
          strADDTLINFO = thisForm.ADDITIONALINFO[thisForm.ADDITIONALINFO.selectedIndex].value;
       }
       if ( thisForm.ADDITIONALINFO2 != null ) {
          strADDTLINFO += "; " + thisForm.ADDITIONALINFO2[thisForm.ADDITIONALINFO2.selectedIndex].value;
       }
       if ( thisForm.ADDITIONALINFO3 != null ) {
          strADDTLINFO += "; " + thisForm.ADDITIONALINFO3[thisForm.ADDITIONALINFO3.selectedIndex].value;
       }
       if ( thisForm.ADDITIONALINFO4 != null ) {
          strADDTLINFO += "; " + thisForm.ADDITIONALINFO4[thisForm.ADDITIONALINFO4.selectedIndex].value;
       }

       //Is this product already in the cart?  If so, increment quantity instead of adding another.
       for ( i = 0; i < iNumberOrdered; i++ ) {
          database = "";
          database = GetCart(i);

          Token0 = database.indexOf("|", 0);
          Token1 = database.indexOf("|", Token0+1);
          Token2 = database.indexOf("|", Token1+1);
          Token3 = database.indexOf("|", Token2+1);
          Token4 = database.indexOf("|", Token3+1);

          fields = new Array;
          fields[0] = database.substring( 0, Token0 );
          fields[1] = database.substring( Token0+1, Token1 );
          fields[2] = database.substring( Token1+1, Token2 );
          fields[3] = database.substring( Token2+1, Token3 );
          fields[4] = database.substring( Token3+1, Token4 );
          fields[5] = database.substring( Token4+1, database.length );

          if ( fields[0] == strID_NUM &&
               fields[2] == strPRICE  &&
               fields[3] == strNAME   &&
               fields[5] == strADDTLINFO
             ) {
             bAlreadyInCart = true;
             dbUpdatedOrder = strID_NUM    + "|" +
                              (parseInt(strQUANTITY)+parseInt(fields[1]))  + "|" +
                              strPRICE     + "|" +
                              strNAME      + "|" +
                              strSHIPPING  + "|" +
                              strADDTLINFO;
             SetCart(i,dbUpdatedOrder);
             notice = strQUANTITY + " " + strNAME + strAdded;
             break;
          }
       }


       if ( !bAlreadyInCart ) {

             dbUpdatedOrder = strID_NUM    + "|" +
                              strQUANTITY  + "|" +
                              strPRICE     + "|" +
                              strNAME      + "|" +
                              strSHIPPING  + "|" +
                              strADDTLINFO;

            SetCart(iNumberOrdered,dbUpdatedOrder);

             notice = strQUANTITY + " " + strNAME + strAdded;
       }

       if ( DisplayNotice )
          alert(notice);

    NumberThisItem(thisForm)
    return false

    }

    //---------------------------------------------------------------------||
    // FUNCTION:    MoneyFormat                                            ||
    // PARAMETERS:  Number to be formatted                                 ||
    // RETURNS:     Formatted Number                                       ||
    // PURPOSE:     Reformats Dollar Amount to #.## format                 ||
    //---------------------------------------------------------------------||
    function moneyFormat(input) {
       var dollars = Math.floor(input);
       var tmp = new String(input);

       for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
          if ( tmp.charAt(decimalAt)=="." )
             break;
       }

       var cents  = "" + Math.round(input * 100);
       cents = cents.substring(cents.length-2, cents.length)
               dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;

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

       return(dollars + "." + cents);
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    RemoveFromCart                                         ||
    // PARAMETERS:  Order Number to Remove                                 ||
    // RETURNS:     Null                                                   ||
    // PURPOSE:     Removes an item from a users shopping cart             ||
    //---------------------------------------------------------------------||
    function RemoveFromCart(RemOrder) {
          DelCart(RemOrder)
    location.href=location.href;
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    ChangeQuantity                                         ||
    // PARAMETERS:  Order Number to Change Quantity                        ||
    // RETURNS:     Null                                                   ||
    // PURPOSE:     Changes quantity of an item in the shopping cart       ||
    //---------------------------------------------------------------------||
    function ChangeQuantity(OrderItem,NewQuantity) {
       if ( isNaN(NewQuantity)) {
          alert( strErrQty );
    } else {

          NewOrder = "Order." + OrderItem;
          database = "";
          database = GetCart(OrderItem)

          Token0 = database.indexOf("|", 0);
          Token1 = database.indexOf("|", Token0+1);
          Token2 = database.indexOf("|", Token1+1);
          Token3 = database.indexOf("|", Token2+1);
          Token4 = database.indexOf("|", Token3+1);

          fields = new Array;
          fields[0] = database.substring( 0, Token0 );
          fields[1] = database.substring( Token0+1, Token1 );
          fields[2] = database.substring( Token1+1, Token2 );
          fields[3] = database.substring( Token2+1, Token3 );
          fields[4] = database.substring( Token3+1, Token4 );
          fields[5] = database.substring( Token4+1, database.length );

          dbUpdatedOrder = fields[0] + "|" +
                           NewQuantity + "|" +
                           fields[2] + "|" +
                           fields[3] + "|" +
                           fields[4] + "|" +
                           fields[5];
          SetCart(OrderItem,dbUpdatedOrder);
          location.href=location.href;     

       }
    }


    //---------------------------------------------------------------------||
    // FUNCTION:    GetFromCart                                            ||
    // PARAMETERS:  Null                                                   ||
    // RETURNS:     Product Table Written to Document                      ||
    // PURPOSE:     Draws current cart product table on HTML page          ||
    //              **DEPRECATED FUNCTION, USE ManageCart or Checkout**    ||
    //---------------------------------------------------------------------||
    function GetFromCart( fShipping ) {
       ManageCart( );
    }


    //---------------------------------------------------------------------||
    // FUNCTION:    RadioChecked                                           ||
    // PARAMETERS:  Radio button to check                                  ||
    // RETURNS:     True if a radio has been checked                       ||
    // PURPOSE:     Form filling validation                                 ||
    //---------------------------------------------------------------------||
    function RadioChecked( radiobutton ) {
       var bChecked = false;
       var rlen = radiobutton.length;
       for ( i=0; i < rlen; i++ ) {
          if ( radiobutton[i].checked )
             bChecked = true;
       }   
       return bChecked;
    }


    //---------------------------------------------------------------------||
    // FUNCTION:    QueryString                                            ||
    // PARAMETERS:  Key to read                                            ||
    // RETURNS:     value of key                                           ||
    // PURPOSE:     Read data passed in via GET mode                       ||
    //---------------------------------------------------------------------||
    QueryString.keys = new Array();
    QueryString.values = new Array();
    function QueryString(key) {
       var value = null;
       for (var i=0;i<QueryString.keys.length;i++) {
          if (QueryString.keys[i]==key) {
             value = QueryString.values[i];
             break;
          }
       }
       return value;
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    QueryString_Parse                                      ||
    // PARAMETERS:  (URL string)                                           ||
    // RETURNS:     null                                                   ||
    // PURPOSE:     Parses query string data, must be called before Q.S.   ||
    //---------------------------------------------------------------------||
    function QueryString_Parse() {
       var query = window.location.search.substring(1);
       var pairs = query.split("&"); for (var i=0;i<pairs.length;i++) {
          var pos = pairs[i].indexOf('=');
          if (pos >= 0) {
             var argname = pairs[i].substring(0,pos);
             var value = pairs[i].substring(pos+1);
             QueryString.keys[QueryString.keys.length] = argname;
             QueryString.values[QueryString.values.length] = value;
          }
       }
    }


    //---------------------------------------------------------------------||
    // FUNCTION:    ManageCart                                             ||
    // PARAMETERS:  Null                                                   ||
    // RETURNS:     Product Table Written to Document                      ||
    // PURPOSE:     Draws current cart product table on HTML page          ||
    //---------------------------------------------------------------------||
    function ManageCart( ) {
       var iNumberOrdered = 0;    //Number of products ordered
       var fTotal         = 0;    //Total cost of order
       var fTax           = 0;    //Tax amount
       var fShipping      = 0;    //Shipping amount
       var strTotal       = "";   //Total cost formatted as money
       var strTax         = "";   //Total tax formatted as money
       var strShipping    = "";   //Total shipping formatted as money
       var strOutput      = "";   //String to be written to page
       var bDisplay       = true; //Whether to write string to the page (here for programmers)

       iNumberOrdered = NumCart();
       if ( iNumberOrdered == null )
          iNumberOrdered = 0;

		  
		  
       if ( bDisplay )
	         strOutput = "<TABLE CLASS=\"nopcart\"><TR>" +
                  "<TD CLASS=\"nopheader\"><B>"+strILabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
                  "<TD CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
                  (DisplayShippingColumn?"<TD CLASS=\"nopheader\"><B>"+strSLabel+"</B></TD>":"") +
                  "<TD CLASS=\"nopheader\"><B>"+strRLabel+"</B></TD></TR>"; 
		
		/*
		  strOutput = "<table id=\"myCartTable\"><thead><tr><th></th>" +
			                      "<th>"+strILabel+"</th>" +
			                      "<th>"+strDLabel+"</th>" +
			                      "<th>"+strQLabel+"</th>" +
			                      "<th>"+strPLabel+"</th>" +
			                      (DisplayShippingColumn?"<th>"+strSLabel+"</th>":"") +
			                      "<th>"+strRLabel+"</th></tr></thead><tbody>";
								  */
       if ( iNumberOrdered == 0 ) {
			//strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>"+strCEmpty+"</B><BR><BR></CENTER></TD></TR>";
			strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>Your cart is empty</B><BR><BR></CENTER></TD></TR>";
			bDisplay = false;
			strOutput += "</table>";  
	  

 /*  			 strOutput += "<tr><td colspan=\"7\" class=\"alertText\"><center>"+strCEmpty+"</center></td></tr>";
         bDisplay = false;
         strOutput += "</tbody></table>";	 */	
       }

       for ( i = 0; i < iNumberOrdered; i++ ) {
          database = GetCart(i);

          Token0 = database.indexOf("|", 0);
          Token1 = database.indexOf("|", Token0+1);
          Token2 = database.indexOf("|", Token1+1);
          Token3 = database.indexOf("|", Token2+1);
          Token4 = database.indexOf("|", Token3+1);

          fields = new Array;
          fields[0] = database.substring( 0, Token0 );                 // Product ID
          fields[1] = database.substring( Token0+1, Token1 );          // Quantity
          fields[2] = database.substring( Token1+1, Token2 );          // Price
          fields[3] = database.substring( Token2+1, Token3 );          // Description
          fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
          fields[5] = database.substring( Token4+1, database.length ); //Additional Information

          fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
          fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
          fTax        = (fTotal * TaxRate);
          strTotal    = moneyFormat(fTotal);
          strTax      = moneyFormat(fTax);
          strShipping = moneyFormat(fShipping);

          if ( bDisplay ) {
             //strOutput += "<tr><th></th><td>"  + fields[0] + "</td>";
			strOutput += "<TR><TD CLASS=\"nopentry\">"  + fields[0] + "</TD>";

             if ( fields[5] == "" )
                strOutput += "<td CLASS=\"nopentry\">"  + fields[3] + "</td>";
             else
                strOutput += "<td CLASS=\"nopentry\">"  + fields[3] + " - "+ fields[5] + "</td>";

             strOutput += "<td CLASS=\"nopentry\"><input type=\"text\" name=\"Q\" class=\"formBox\" size=\"2\" value=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this.value);\"></td>";
             strOutput += "<td CLASS=\"nopentry\">"+ MonetarySymbol + moneyFormat(fields[2]) + "/ea</td>";

             if ( DisplayShippingColumn ) {
                if ( parseFloat(fields[4]) > 0 )
                   strOutput += "<td CLASS=\"nopentry\">"+ MonetarySymbol + moneyFormat(fields[4]) + "/ea</td>";
                else
                   strOutput += "<td CLASS=\"nopentry\">N/A</td>";
             }

             //strOutput += "<td><input type=\"image\" src\=\"..\/_img\/btn\/btn_remove.gif\" value=\" "+strRButton+" \" onClick=\"RemoveFromCart("+i+")\"></td></tr>";
			          strOutput += "<TD CLASS=\"nopentry\" ALIGN=CENTER><input type=button value=\" "+strRButton+" \" onClick=\"RemoveFromCart("+i+")\" class=\"nopbutton\"></TD></TR>";

          }

          if ( AppendItemNumToOutput ) {
             strFooter = i;
          } else {
             strFooter = "";
          }
          if ( HiddenFieldsToCheckout ) {
             strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
          }

       }
	   
	   //END FOR LOOP
		

       if ( bDisplay ) {
          strOutput += "<tr><th>"+strSUB+"</th>";
          strOutput += "<td></td><td></td><td></td><td colspan=3>" + MonetarySymbol + strTotal + "</td>";
          strOutput += "</tr>";

          if ( DisplayShippingRow ) {
             strOutput += "<tr><th>"+strSHIP+"</th>";
             strOutput += "<td></td><td></td><td></td><td colspan=3>" + MonetarySymbol + strShipping + "</td>";
             strOutput += "</tr>";
          }

          if ( DisplayTaxRow || TaxByRegion ) {
             if ( TaxByRegion ) {
                //strOutput += "<tr><th>"+strTAX+"</th>";
				strOutput += "<tr><th>CURRENCY</th>";
                strOutput += "<td></td><td></td><td></td><td colspan=3>";
                strOutput += "<input type=radio name=\""+OutputOrderTax+"\" value=\"" + strTax + "\">";
                strOutput += TaxablePrompt + ": " + MonetarySymbol + strTax;
                strOutput += "<BR><input type=radio name=\""+OutputOrderTax+"\" value=\"0.00\" >";
                //strOutput += NonTaxablePrompt + ": " + MonetarySymbol + "0.00";
				strOutput += NonTaxablePrompt + ": " + MonetarySymbol + strTotal;
                strOutput += "</td>";
                strOutput += "</tr>";
             } else {
                strOutput += "<tr><th>"+strTAX+"</th>";
                strOutput += "<td colspan=5>" + MonetarySymbol + strTax + "</td>";
                strOutput += "</tr>";
             }
          }

          if ( !TaxByRegion ) {
             strOutput += "<tr><th>"+strTOT+"</th>";
             strOutput += "<td colspan=5>" + MonetarySymbol + moneyFormat((fTotal + fShipping + fTax)) + "</td>";
             strOutput += "</tr>";
			 strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strTOT+"</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2><B>" + MonetarySymbol + moneyFormat((fTotal + fShipping + fTax)) + "</B></TD>";
         strOutput += "</TR>";
          }
          //strOutput += "<tr><th></th><td colspan=6><center><input type\=\"image\" src\=\"..\/_img\/btn\/btn_checkout.gif\" border=\"0\"></center></td></tr>";
		  strOutput += "</table>";
		  strOutput +="<BR><BR><INPUT TYPE=IMAGE SRC=\"./images/checkout.gif\" BORDER=0>"

          if ( HiddenFieldsToCheckout ) {
             strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ MonetarySymbol + strTotal + "\">";
             strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ MonetarySymbol + strShipping + "\">";
             strOutput += "<input type=hidden name=\""+OutputOrderTax+"\"      value=\""+ MonetarySymbol + strTax + "\">";
             strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormat((fTotal + fShipping + fTax)) + "\">";
			
          }
       }
       g_TotalCost = (fTotal + fShipping + fTax);
	   g_CAD = fTotal;
       document.write(strOutput);
       document.close();
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    ValidateCart                                           ||
    // PARAMETERS:  Form to validate                                       ||
    // RETURNS:     true/false                                             ||
    // PURPOSE:     Validates the managecart form                          ||
    //---------------------------------------------------------------------||
    var g_TotalCost = 0;
	var g_CAD = 0;
    function ValidateCart( theForm ) {
       if ( TaxByRegion ) {
          if ( !RadioChecked(eval("theForm."+OutputOrderTax)) ) {
             alert( TaxPrompt );
             return false;
          }
       }

       if ( MinimumOrder >= 0.01 ) {
          if ( g_CAD < MinimumOrder ) {
             alert( MinimumOrderPrompt );
             return false;
          }
       }

       return true;
    }

    //---------------------------------------------------------------------||
    // FUNCTION:    CheckoutCart                                           ||
    // PARAMETERS:  Null                                                   ||
    // RETURNS:     Product Table Written to Document                      ||
    // PURPOSE:     Draws current cart product table on HTML page for      ||
    //              checkout.                                              ||
    //---------------------------------------------------------------------||
    function CheckoutCart( ) {
       var iNumberOrdered = 0;    //Number of products ordered
       var fTotal         = 0;    //Total cost of order
       var fTax           = 0;    //Tax amount
       var fShipping      = 0;    //Shipping amount
       var strTotal       = "";   //Total cost formatted as money
       var strTax         = "";   //Total tax formatted as money
       var strShipping    = "";   //Total shipping formatted as money
       var strOutput      = "";   //String to be written to page
       var bDisplay       = true; //Whether to write string to the page (here for programmers)
       var strPP          = "";   //Payment Processor Description Field

       iNumberOrdered = NumCart();
       if ( iNumberOrdered == null )
          iNumberOrdered = 0;

       if ( TaxByRegion ) {
          QueryString_Parse();
          fTax = parseFloat( QueryString( OutputOrderTax ) );
          strTax = moneyFormat(fTax);
       }


	   
       if ( bDisplay )

          strOutput =   "<p><b>Check Out Information:</font></b><P>" +
						"NOTE: DO NOT press back or refresh until completed, doing so will erase your shopping cart information!" +
						"<br><br><table CLASS=\"nopcart\" cellpadding=\"2\"><thead><tr>" +
						"<TD CLASS=\"nopheader\"><B>"+strILabel+"</B></TD>" +
						"<TD CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
						"<TD CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
						"<TD CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
						(DisplayShippingColumn?"<TD CLASS=\"nopheader\"><B>"+strSLabel+"</B></TD>":"");
						/*                "<th>"+strILabel+"</th>" +
                      "<th>"+strDLabel+"</th>" +
                      "<th>"+strQLabel+"</th>" +
                      "<th>"+strPLabel+"</th>" +
                      (DisplayShippingColumn?"<th>"+strSLabel+"</th>":"") +
                      "</tr></thead>";
	*/				  
				  
	          if ( iNumberOrdered == 0 ) {
			//strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>"+strCEmpty+"</B><BR><BR></CENTER></TD></TR>";
			strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>Your cart is empty</B><BR><BR></CENTER></TD></TR>";
			bDisplay = false;
			strOutput += "</table>";  
	  

       }				  

       for ( i = 0; i < iNumberOrdered; i++ ) {

          database = "";
          database = GetCart(i);

          Token0 = database.indexOf("|", 0);
          Token1 = database.indexOf("|", Token0+1);
          Token2 = database.indexOf("|", Token1+1);
          Token3 = database.indexOf("|", Token2+1);
          Token4 = database.indexOf("|", Token3+1);

          fields = new Array;
          fields[0] = database.substring( 0, Token0 );                 // Product ID
          fields[1] = database.substring( Token0+1, Token1 );          // Quantity
          fields[2] = database.substring( Token1+1, Token2 );          // Price
          fields[3] = database.substring( Token2+1, Token3 );          // Description
          fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
          fields[5] = database.substring( Token4+1, database.length ); //Additional Information

          fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
          fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
          if ( !TaxByRegion ) fTax = (fTotal * TaxRate);
          strTotal    = moneyFormat(fTotal);
          if ( !TaxByRegion ) strTax = moneyFormat(fTax);
          strShipping = moneyFormat(fShipping);

          if ( bDisplay ) {
             strOutput += "<tbody><tr><td CLASS=\"nopentry\">"  + fields[0] + "</td>";

             if ( fields[5] == "" )
                strOutput += "<td CLASS=\"nopentry\">"  + fields[3] + "</td>";
             else
                strOutput += "<td CLASS=\"nopentry\">"  + fields[3] + " - "+ fields[5] + "</td>";

             strOutput += "<td CLASS=\"nopentry\">" + fields[1] + "</td>";
             strOutput += "<td CLASS=\"nopentry\">"+ MonetarySymbol + moneyFormat(fields[2]) + "/ea</td>";

             if ( DisplayShippingColumn ) {
                if ( parseFloat(fields[4]) > 0 )
                   strOutput += "<td CLASS=\"nopentry\">"+ MonetarySymbol + moneyFormat(fields[4]) + "/ea</td>";
                else
                   strOutput += "<td CLASS=\"nopentry\">N/A</td>";
             }

             strOutput += "</tr>";
          }

          if ( AppendItemNumToOutput ) {
             strFooter = i;
          } else {
             strFooter = "";
          }
          if ( PaymentProcessor != '' ) {
             //Process description field for payment processors instead of hidden values.
             //Format Description of product as:
             // ID, Name, Qty X
             strPP += fields[0] + ", " + fields[3];
             if ( fields[5] != "" )
                strPP += " - " + fields[5];
             strPP += ", Qty. " + fields[1] + "\n";
          } else {
             strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
             strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
          }

       }

       if ( bDisplay ) {
		  //added    +conversion area      
		  if (!fTax == 0.00)  {	
			
			//fToTal = fTax;
			//strTax = 0.00;
			strTotal = strTax;
/*		  
		  strOutput += "<tr></tr><tr><th>"+strSUB+"</th>";
          strOutput += "<td></td><td></td><td></td><td>" + MonetarySymbol + strTotal + "</td>";
          strOutput += "</tr>";

          if ( DisplayShippingRow ) {
             strOutput += "<tr><th>"+strSHIP+"</th>";
             strOutput += "<td></td><td></td><td></td><td>" + MonetarySymbol + strShipping + "</td>";
             strOutput += "</tr>";
          }



	          if ( DisplayTaxRow || TaxByRegion ) {
	             strOutput += "<tr><th>"+strTAX+"</th>";
	             strOutput += "<td></td><td></td><td></td><td>" + MonetarySymbol + strTax + "</td>";
	             strOutput += "</tr>";
	          }*/
		 }
          if (!fTax == 0.00){
		  strOutput += "<tr><th>"+strTOT+" in USD</th>";	
          strOutput += "<td></td><td></td><td></td><td>" + MonetarySymbol + moneyFormat(fTax) + "</td>";
          strOutput += "</tr>";		  
		  }
		  else {
		  strOutput += "<tr><th>"+strTOT+" in CAD</th>";
		  strOutput += "<td></td><td></td><td></td><td>" + MonetarySymbol + moneyFormat((fTotal + fShipping + fTax)) + "</td>";
          strOutput += "</tr>";
		  
		  }
          strOutput += "</tbody></table>";

         
          if ( PaymentProcessor == 'an') {
             //Process this for Authorize.net WebConnect
             strOutput += "<input type=hidden name=\"x_Version\" value=\"3.0\">";
             strOutput += "<input type=hidden name=\"x_Show_Form\" value=\"PAYMENT_FORM\">";
             strOutput += "<input type=hidden name=\"x_Description\" value=\""+ strPP + "\">";

			 
             strOutput += "<input type=hidden name=\"x_Amount\" value=\""+ moneyFormat((fTotal + fShipping + fTax)) + "\">";
          } else if ( PaymentProcessor == 'wp') {
             //Process this for WorldPay
             strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
             strOutput += "<input type=hidden name=\"amount\" value=\""+ moneyFormat((fTotal + fShipping + fTax)) + "\">";
          } else if ( PaymentProcessor == 'lp') {
             //Process this for LinkPoint         
             strOutput += "<input type=hidden name=\"mode\" value=\"fullpay\">";
             strOutput += "<input type=hidden name=\"chargetotal\" value=\""+ moneyFormat((fTotal + fShipping + fTax)) + "\">";
             strOutput += "<input type=hidden name=\"tax\" value=\""+ MonetarySymbol + strTax + "\">";
             strOutput += "<input type=hidden name=\"subtotal\" value=\""+ MonetarySymbol + strTotal + "\">";
             strOutput += "<input type=hidden name=\"shipping\" value=\""+ MonetarySymbol + strShipping + "\">";
             strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
          } else {
		  
             strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ MonetarySymbol + strTotal + "\">";
             strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ MonetarySymbol + strShipping + "\">";
             strOutput += "<input type=hidden name=\""+OutputOrderTax+"\"      value=\""+ MonetarySymbol + strTax + "\">";
			 
			 if (!fTax == 0.00){
			 strOutput += "<font color=white><input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormat(fTax) + " USD\"></font>";
			 }
			 else {
			 strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormat((fTotal + fShipping + fTax)) + " CAD\">";
			 }					  
          }
		  //include billing/shipping information
		  strOutput += 	"<br><br>Please fill out the following information below to complete your order." +
						"<br><p><b>Billing Information:</font></b><P><TABLE class=\"blacktext\">" +
						"<TR><TD>Name:    </TD><TD><input type=\"text\" size=\"18\" name=\"b_first\"> <input type=\"text\" size=\"15\" name=\"b_last\"></TD></TR>" +
						"<TR><TD>Address: </TD><TD><input type=\"text\" size=\"37\" name=\"b_addr\"> </TD></TR>" +
						"<TR><TD>Address: </TD><TD><input type=\"text\" size=\"37\" name=\"b_addr2\"></TD></TR>" +
						"<TR><TD>City:    </TD><TD><input type=\"text\" size=\"21\" name=\"b_city\"> </TD></TR>" +
						"<TR><TD>State:   </TD><TD><input type=\"text\" size=\"1\"  name=\"b_state\"> </TD></TR>" +
						"<TR><TD>Zip:     </TD><TD><input type=\"text\" size=\"5\"  name=\"b_zip\"></TD></TR>" +
						"<TR><TD>Phone:   </TD><TD><input type=\"text\" size=\"37\" name=\"b_phone\"></TD></TR>" +
						"<TR><TD>Fax:     </TD><TD><input type=\"text\" size=\"37\" name=\"b_fax\"></TD></TR>" +
						"<TR><TD>Email:   </TD><TD><input type=\"text\" size=\"37\" name=\"b_email\"> </TD></TR>" +
						"</TABLE><p><b>Shipping Information (if different than billing):</font></b><P>" +
						"<TABLE class=\"blacktext\">" +
						"<TR><TD>Name:    </TD><TD><input type=\"text\" size=\"18\" name=\"s_first\"> <input type=\"text\" size=\"15\" name=\"s_last\"></TD></TR>" +
						"<TR><TD>Address: </TD><TD><input type=\"text\" size=\"37\" name=\"s_addr\"> </TD></TR>" +
						"<TR><TD>Address: </TD><TD><input type=\"text\" size=\"37\" name=\"s_addr2\"></TD></TR>" +
						"<TR><TD>City:    </TD><TD><input type=\"text\" size=\"21\" name=\"s_city\"> </TD></TR>" +
						"<TR><TD>State:   </TD><TD><input type=\"text\" size=\"1\"  name=\"s_state\"> </TD></TR>" +
						"<TR><TD>Zip:     </TD><TD><input type=\"text\" size=\"5\"  name=\"s_zip\"></TD></TR>" +
						"<TR><TD>Phone:   </TD><TD><input type=\"text\" size=\"37\" name=\"s_phone\"></TD></TR>" +
						"<TR><TD>Fax:     </TD><TD><input type=\"text\" size=\"37\" name=\"s_fax\"></TD></TR>" +
						"<TR><TD>Email:   </TD><TD><input type=\"text\" size=\"37\" name=\"s_email\"> </TD></TR>" +
						"</TABLE><p><b>Comments/Special Instructions:<P>" +
						"<TEXTAREA NAME=\"comment\" ROWS=6 COLS=40></TEXTAREA></font><p>" +
						"<input type=submit Value=\"Submit Order\"> <INPUT type=RESET value=\"  Clear Form  \"></p></center></FORM></blockquote>";
		  
       }

       document.write(strOutput);
       document.close();
    CleanCart();
    }

    //=====================================================================||
    //               END NOP Design SmartPost Shopping Cart                ||
    //=====================================================================||

    //---------------------------------------------------------------------||
    // FUNCTION: Print_total                                               ||
    // PARAMETERS: true/false if you want MonetarySymbol added to string   ||
    // RETURNS: Total cost currently racked up by shopper                  ||
    // PURPOSE: Aesthetics                                                 ||
    //---------------------------------------------------------------------||
    function Print_total(bSymbol) {
    var strOutput = ""; //String to be written to page
    var strTotal = ""; //Total cost formatted as money
    var fTotal = 0;
    var iNumberOrdered = 0; //Number of products ordered

    iNumberOrdered = NumCart();
    if ( iNumberOrdered == null )
    iNumberOrdered = 0;

    for ( i = 0; i < iNumberOrdered; i++ ) {

    NewOrder = "Order." + i;
    database = "";
    database = GetCart(i);

    Token0 = database.indexOf("|", 0);
    Token1 = database.indexOf("|", Token0+1);
    Token2 = database.indexOf("|", Token1+1);
    Token3 = database.indexOf("|", Token2+1);
    Token4 = database.indexOf("|", Token3+1);

    fields = new Array;
    fields[0] = database.substring( 0, Token0 ); // Product ID
    fields[1] = database.substring( Token0+1, Token1 ); // Quantity
    fields[2] = database.substring( Token1+1, Token2 ); // Price
    fields[3] = database.substring( Token2+1, Token3 ); // Description
    fields[4] = database.substring( Token3+1, Token4 ); // Weight
    fields[5] = database.substring( Token4+1, database.length ); //Additional Information

    fTotal += (parseInt(fields[1]) * parseFloat(fields[2]) );
    }
    strTotal = moneyFormat(fTotal);
    strOutput+=strTotal;
    if ( bSymbol )
       strOutput = MonetarySymbol + strOutput
    document.write(strOutput);
    }

    //---------------------------------------------------------------------||
    // FUNCTION: Print_total_products                                      ||
    // PARAMETERS: true/false if you want "item(s)" added to string        ||
    // RETURNS: Total cost currently racked up by shopper                  ||
    // PURPOSE: Aesthetics                                                 ||
    //---------------------------------------------------------------------||
    function Print_total_products(bVerbose) {
    var strOutput = ""; //String to be written to page
    var fTotal = 0;
    var iNumberOrdered = 0; //Number of products ordered

      iNumberOrdered = NumCart();
    if ( iNumberOrdered == null )
    iNumberOrdered = 0;

    for ( i = 0; i < iNumberOrdered; i++ ) {

    NewOrder = "Order." + i;
    database = "";
    database = GetCart(i);

    Token0 = database.indexOf("|", 0);
    Token1 = database.indexOf("|", Token0+1);
    Token2 = database.indexOf("|", Token1+1);
    Token3 = database.indexOf("|", Token2+1);
    Token4 = database.indexOf("|", Token3+1);

    fields = new Array;
    fields[0] = database.substring( 0, Token0 ); // Product ID
    fields[1] = database.substring( Token0+1, Token1 ); // Quantity
    fields[2] = database.substring( Token1+1, Token2 ); // Price
    fields[3] = database.substring( Token2+1, Token3 ); // Description
    fields[4] = database.substring( Token3+1, Token4 ); // Weight
    fields[5] = database.substring( Token4+1, database.length ); //Additional Information

    fTotal += (parseInt(fields[1]));
    }

    strOutput+=fTotal;
    if ( bVerbose ) {
       if (fTotal == 1) {
          strOutput+=" </span> item</a></p>"
       }
       else {
          strOutput+=" </span> items</a></p>"
       }
    }
    document.write(strOutput);
    }

    //---------------------------------------------------------------------||
    // FUNCTION: Cart_is_empty                                             ||
    // PARAMETERS: none                                                    ||
    // RETURNS: Total true if cart is empty, false otherwise               ||
    // PURPOSE: Aesthetics                                                 ||
    //---------------------------------------------------------------------||
    function Cart_is_empty( ) {
       iNumInCart = NumCart();
       if ( iNumInCart == null ) iNumInCart = 0;
       if ( iNumInCart == 0 ) return true;
       return false;
    }

    //===================================================================================
