//
// Shopping Cart for www.trailrace.com.au
// Modified/Updated December 2009
// by Casey Benson (www.caseybenson.com)
// signin as Casey with usual password.
//
//=====================================================================||
//               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"></SCRIPT>                ||
//                                                                     ||
// 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         =false;
DisplayShippingColumn =false;
DisplayShippingRow    =true;
DisplayTaxRow         =false;
TaxRate               =0.00;
TaxByRegion           =false;
TaxPrompt             ='For tax purposes, please select if you are an Arizona resident before continuing';
TaxablePrompt         ='Arizona Residents';
NonTaxablePrompt      ='Other States';
MinimumOrder          =0.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;
bLanguageDefined      =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="Product Name/Description";
   strQLabel="Qty";
   strPLabel="Price";
   strSLabel="Shipping";
   strRLabel="Remove from Cart";
   strRButton="Remove";
   strSUB="SUBTOTAL";
   strSHIP="SHIPPING - (for Outside Australia please request)";
   strTAX="TAX";
   strTOT="TOTAL";
   strErrQty="Invalid Quantity.";
   strNewQty='Please enter new quantity:';
   bLanguageDefined=true; }
//---------------------------------------------------------------------||
// 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:     Cookie 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=GetCookie("NumberOrdered");
 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(strQUANTITY<0) strQUANTITY="1";
 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;
 strSHIPPING=9.95;
 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=1;i<=iNumberOrdered;i++) {
   NewOrder="Order."+i;
   database="";
   database=GetCookie(NewOrder);
   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;
     strNewOrder="Order."+i;
     DeleteCookie(strNewOrder,"/");
     SetCookie(strNewOrder,dbUpdatedOrder,null,"/");
     notice=strQUANTITY+" "+strNAME+strAdded; break; } }
 if(!bAlreadyInCart) { iNumberOrdered++;
 if(iNumberOrdered>12) alert(strSorry);
 else {
   dbUpdatedOrder=strID_NUM+"|"+ 
   strQUANTITY+"|"+
   strPRICE+"|"+
   strNAME+"|"+
   strSHIPPING+"|"+
   strADDTLINFO;
   strNewOrder="Order."+iNumberOrdered;
   SetCookie(strNewOrder,dbUpdatedOrder,null,"/");
   SetCookie("NumberOrdered",iNumberOrdered,null,"/");
   notice=strQUANTITY+" "+strNAME+strAdded; } }
   ScrTotal();
parent.m2.document.write('<script>window.history.back(1);</script>');
   if(DisplayNotice) alert(notice); }

//---------------------------------------------------------------------||
// FUNCTION:    getCookieVal                                           ||
// PARAMETERS:  offset                                                 ||
// RETURNS:     URL unescaped Cookie Value                             ||
// PURPOSE:     Get a specific value from a cookie                     ||
//---------------------------------------------------------------------||
function getCookieVal(offset) {
   var endstr=document.cookie.indexOf(";",offset);
   if(endstr==-1)
      endstr=document.cookie.length;
   return(unescape(document.cookie.substring(offset,endstr))); }
//---------------------------------------------------------------------||
// FUNCTION:    FixCookieDate                                          ||
// PARAMETERS:  date                                                   ||
// RETURNS:     date                                                   ||
// PURPOSE:     Fixes cookie date, stores back in date                 ||
//---------------------------------------------------------------------||
function FixCookieDate(date) {
   var base=new Date(0);
   var skew=base.getTime();
   date.setTime(date.getTime()-skew); }
//---------------------------------------------------------------------||
// FUNCTION:    GetCookie                                              ||
// PARAMETERS:  Name                                                   ||
// RETURNS:     Value in Cookie                                        ||
// PURPOSE:     Retrieves cookie from users browser                    ||
//---------------------------------------------------------------------||
function GetCookie(name) {
   var arg=name+"=";
   var alen=arg.length;
   var clen=document.cookie.length;
   var i=0;
   while(i<clen) {
      var j=i+alen;
      if(document.cookie.substring(i,j)==arg) return(getCookieVal(j));
      i=document.cookie.indexOf(" ",i)+1;
      if(i==0) break; }
   return(null); }
//---------------------------------------------------------------------||
// FUNCTION:    SetCookie                                              ||
// PARAMETERS:  name, value, expiration date, path, domain, security   ||
// RETURNS:     Null                                                   ||
// PURPOSE:     Stores a cookie in the users browser                   ||
//---------------------------------------------------------------------||
function SetCookie (name,value,expires,path,domain,secure) {
   document.cookie=name+"="+escape(value)+
                     ((expires)?"; expires="+expires.toGMTString():"")+
                     ((path)?"; path="+path:"")+
                     ((domain)?"; domain="+domain:"") +
                     ((secure)?"; secure":""); }
//---------------------------------------------------------------------||
// FUNCTION:    DeleteCookie                                           ||
// PARAMETERS:  Cookie name, path, domain                              ||
// RETURNS:     null                                                   ||
// PURPOSE:     Removes a cookie from users browser.                   ||
//---------------------------------------------------------------------||
function DeleteCookie(name,path,domain) {
   if(GetCookie(name)) {
      document.cookie=name+"="+((path)?"; path="+path:"")+
         ((domain)?"; domain="+domain:"")+"; expires=Thu, 01-Jan-70 00:00:01 GMT"; } }
//---------------------------------------------------------------------||
// 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) {
   if(confirm(strRemove)) {
      NumberOrdered=GetCookie("NumberOrdered");
      for(i=RemOrder;i<NumberOrdered;i++ ) {
         NewOrder1="Order."+(i+1);
         NewOrder2="Order."+(i);
         database=GetCookie(NewOrder1);
         SetCookie(NewOrder2,database,null,"/"); }
      NewOrder="Order."+NumberOrdered;
      SetCookie("NumberOrdered",NumberOrdered-1,null,"/");
      DeleteCookie(NewOrder,"/");
      location.href=location.href; }
   if(iNumberOrdered==0) { temp=window.history.back(1); }
   ScrTotal(); }

//---------------------------------------------------------------------||
// 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 {
      if(NewQuantity<1) NewQuantity=1;
      NewOrder="Order."+OrderItem;
      database="";
      database=GetCookie(NewOrder);
      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];
      strNewOrder="Order."+OrderItem;
      DeleteCookie(strNewOrder,"/");
      SetCookie(strNewOrder,dbUpdatedOrder,null,"/");
      location.href=location.href; }
   ScrTotal(); }

//---------------------------------------------------------------------||
// 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 fillin 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=GetCookie("NumberOrdered");
// I CASEY put this in so no empty cart will be used........
   if(iNumberOrdered==null) iNumberOrdered=0;
   if(iNumberOrdered<1) { temp=window.history.back(2); }
   if(bDisplay)
      strOutput="<table width='100%' class='nopcart' cellspacing=0 border=0><tr>"+
        "<td width='90px' class=\"nopheader\"><B>"+strILabel+"</B></td>"+
        "<td class=\"nopheader\"><B>"+strDLabel+"</B></td>"+
        "<TD width='60px' align='center' CLASS=\"nopheader\"><B>"+strQLabel+"</B></td>"+
        "<TD width='60px' align='center' CLASS=\"nopheader\"><B>"+strPLabel+"</B></td>"+
         (DisplayShippingColumn?"<td class=\"nopheader\"><B>"+strSLabel+"</B></td>":"")+
        "<TD width='125px' align='center' CLASS=\"nopheader\"><B>"+strRLabel+"</B></td></tr>";
   if(iNumberOrdered==0) {
      strOutput+="<tr><td valign=\"top\" colspan=6 id=\"emptycart\"><center><br /><b>";
      strOutput+="Your cart is empty </b><br /><br /></center></td></tr>"; }
   for(i=1;i<=iNumberOrdered;i++) {
      NewOrder="Order."+i;
      database="";
      database=GetCookie(NewOrder);
      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);          // Product Name/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]) );
// Steve wanted 1 shipping cost for the full total no matter on how many items.........
      if(fShipping>"9.95") fShipping=9.95;
// .=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.
      fTax       =(fTotal*TaxRate);
      strTotal   =moneyFormat(fTotal);
      strTax     =moneyFormat(fTax);
      strShipping=moneyFormat(fShipping);
      if(bDisplay) {
         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]+" - <I>"+ fields[5]+"</I></td>";
         strOutput+="<TD align='center' CLASS=\"nopentry\"><input type='text' name=Q size=2 value=\""+fields[1]+"\" onChange=\"ChangeQuantity("+i+", this.value);\"></td>";
         strOutput+="<TD align=\"right\" CLASS=\"nopentry\">"+ MonetarySymbol+moneyFormat(fields[2])+"</td>";
         if(DisplayShippingColumn) {
            if(parseFloat(fields[4]) > 0 )
               strOutput+="<td class=\"nopentry\">"+ MonetarySymbol+moneyFormat(fields[4])+"</td>";
            else
               strOutput+="<td class=\"nopentry\">N/A</td>";  }
         strOutput+="<TD width='20' 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]+"\">";
      } }
   if(bDisplay) {
      strOutput+="<tr class=\"noptotal\"><td class=\"noptotal\" COLSPAN=2><B>"+strSUB+"</B></td>";
      strOutput+="<TD align=\"right\" CLASS=\"noptotal\" COLSPAN=2><B>"+MonetarySymbol+strTotal+"</B></td>";
      strOutput+="<td></td></tr>";
      if(DisplayShippingRow) {
         strOutput+="<tr class=\"noptotal\"><td class=\"noptotal\" COLSPAN=2><B>"+strSHIP+"</B></td>";
         strOutput+="<TD align=\"right\" CLASS=\"noptotal\" COLSPAN=2><B>"+MonetarySymbol+strShipping+"</B></td>";
         strOutput+="<td></td></tr>"; }
      if(DisplayTaxRow||TaxByRegion) {
         if(TaxByRegion) {
            strOutput+="<tr class=\"noptotal\"><td class=\"noptotal\" COLSPAN=2><B>"+strTAX+"</B></td>";
            strOutput+="<TD align=\"right\" CLASS=\"noptotal\" COLSPAN=2><B>";
            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+="</B></td>";
            strOutput+="<td></td></tr>";
         } else {
            strOutput+="<tr class=\"noptotal\"><td class=\"noptotal\" COLSPAN=2><B>"+strTAX+"</B></td>";
            strOutput+="<TD align=\"right\" CLASS=\"noptotal\" COLSPAN=2><B>"+MonetarySymbol+strTax+"</B></td>";
            strOutput+="<td></td></tr>"; } }
      if(!TaxByRegion) {
         strOutput+="<tr class=\"noptotal\"><td class=\"noptotal\" COLSPAN=2><B>"+strTOT+"</B></td>";
         strOutput+="<TD align=\"right\" CLASS=\"noptotal\" COLSPAN=2><B>"+MonetarySymbol+moneyFormat((fTotal+fShipping+fTax))+"</B></td>";
         strOutput+="<td></td></tr>"; }
      strOutput+="</TABLE>";
      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);
   document.write(strOutput);
   ScrTotal();
 temp=window.history.back(1);
 }

//---------------------------------------------------------------------||
// FUNCTION:    ValidateCart                                           ||
// PARAMETERS:  Form to validate                                       ||
// RETURNS:     true/false                                             ||
// PURPOSE:     Validates the managecart form                          ||
//---------------------------------------------------------------------||
var g_TotalCost=0;
function ValidateCart(theForm) {
   if(TaxByRegion) {
      if(!RadioChecked(eval("theForm."+OutputOrderTax)) ) {
         alert(TaxPrompt);
         return false; } }
   if(MinimumOrder>=0.01) {
      if(g_TotalCost<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=GetCookie("NumberOrdered");
// CASEY put this in so no empty cart will be used........
   if(iNumberOrdered<1) iNumberOrdered=0;
   if(iNumberOrdered==null) iNumberOrdered=0;
   if(iNumberOrdered<1) { window.close(); return false; }
   if(TaxByRegion) {
      QueryString_Parse();
      fTax=parseFloat(QueryString(OutputOrderTax));
      strTax=moneyFormat(fTax); }
   if(bDisplay)
      strOutput="<TABLE width=500px CLASS=\"nopcart\" cellspacing=0><tr>"+
      "<td width=75px align='center' class=\"nopheader\"><B>"+strILabel+"</B></td>"+
      "<td class=\"nopheader\"><B>"+strDLabel+"</B></td>"+
      "<TD width=15px align='center' CLASS=\"nopheader\"><B>"+strQLabel+"</B></td>"+
      "<TD width=45px align='right' CLASS=\"nopheader\"><B>"+strPLabel+"</B></td>"+
       (DisplayShippingColumn?"<td class=\"nopheader\"><b>"+strSLabel+"</b></td>":"")+"</tr>";
   for(i=1;i<=iNumberOrdered;i++) {
      NewOrder="Order."+i;
      database="";
      database=GetCookie(NewOrder);
      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);           // Product Name/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]) );
// Steve wanted 1 shipping cost for the full total no matter on how many items.........
      if(fShipping>9.95) fShipping=9.95;
// .=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.
      if(!TaxByRegion) fTax=(fTotal*TaxRate);
      strTotal   =moneyFormat(fTotal);
      if(!TaxByRegion) strTax=moneyFormat(fTax);
      strShipping=moneyFormat(fShipping);
      if(bDisplay) {
         strOutput+="<tr><td align='left' class=\"nopentry\">" +fields[0]+"</td>";
         if(fields[5]=="")
            strOutput+="<td align='left' class=\"nopentry\">" +fields[3]+"</td>";
         else
            strOutput+="<TD align='left' CLASS=\"nopentry\">" +fields[3]+" - <I>"+ fields[5]+"</I></td>";
         strOutput+="<TD align=center CLASS=\"nopentry\">"+fields[1]+"</td>";
         strOutput+="<TD align=right CLASS=\"nopentry\">"+ MonetarySymbol+moneyFormat(fields[2])+"</td>";
         if(DisplayShippingColumn ) {
            if(parseFloat(fields[4])>0 )
               strOutput+="<TD align=right CLASS=\"nopentry\">"+ MonetarySymbol+moneyFormat(fields[4])+"</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) {
      strOutput+="<tr><td class=\"noptotalX\" COLSPAN=2><B>"+strSUB+"</B></td>";
      strOutput+="<TD align=right CLASS=\"noptotalX\" COLSPAN=2><B>"+MonetarySymbol+strTotal+"</B></td>";
      strOutput+="</tr>";
      if(DisplayShippingRow ) {
         strOutput+="<tr><td class=\"noptotalX\" COLSPAN=2><B>"+strSHIP+"</B></td>";
         strOutput+="<TD align=right CLASS=\"noptotalX\" COLSPAN=2><B>"+MonetarySymbol+strShipping+"</B></td>";
         strOutput+="</tr>"; }
      if(DisplayTaxRow || TaxByRegion ) {
         strOutput+="<tr><td class=\"noptotalX\" COLSPAN=2><B>"+strTAX+"</B></td>";
         strOutput+="<TD align=right CLASS=\"noptotalX\" COLSPAN=2><B>"+MonetarySymbol+strTax+"</B></td>";
         strOutput+="</tr>"; }
      strOutput+="<tr><td class=\"noptotalX\" COLSPAN=2><B>"+strTOT+"</B></td>";
      strOutput+="<TD align=right CLASS=\"noptotalX\" COLSPAN=2><B>"+MonetarySymbol+moneyFormat((fTotal+fShipping+fTax))+"</B></td>";
      strOutput+="</tr>";
      strOutput+="</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+"\">";
         strOutput+="<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+MonetarySymbol+moneyFormat((fTotal+fShipping+fTax))+"\">";
      } }
   document.write(strOutput);
   document.close(); }

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

//---------------------------------------------------------------------||
// Extra by me if it works.                                            ||
// FUNCTION:    Show Cart Totals                                       ||
// RETURNS:     Null                                                   ||
//---------------------------------------------------------------------||
function ScrTotal() {
var iNumberOrdered=0;    //Number of products ordered
var count         =0;    //reCount the order
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 strftot       ="";   //Total plus Shipping string
var strOutput     ="";   //String to be written to page
iNumberOrdered=GetCookie("NumberOrdered");
if(iNumberOrdered==null) iNumberOrdered=0;
for(i=1;i<=iNumberOrdered;i++) {
   ++count;
   NewOrder="Order."+i;
   database="";
   database=GetCookie(NewOrder);
   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);           // Product Name/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]));
// Steve wanted 1 shipping cost for the full total no matter on how many items.........
   if(fShipping>"9.95") fShipping=9.95; }
fTax       =(fTotal*TaxRate);
strTotal   =moneyFormat(fTotal);
strTax     =moneyFormat(fTax);
strShipping=moneyFormat(fShipping);
strftot    =moneyFormat(fTotal+fShipping);
strOutput+='<table id="scart"';
strOutput+=' width="140px" height="50px" cellspacing="0" cellpadding="0">';
strOutput+='<tr style="font-size:1em;">';
strOutput+='<td width="70px" align="right">Cart Items:</td>';
strOutput+='<td align="right"><input type="readonly" value='+count+' size=';
strOutput+='"6" style="font-size:.75em;text-align:right;"></td></tr>';
strOutput+='<tr style="font-size:1em;"><td width="70px" align="right">Total:&nbsp;$</td>';
strOutput+='<td align="right"><input type="readonly" value='+strftot+' size=';
strOutput+='"6" style="font-size:.75em;text-align:right;"></td></tr></table>';
javascript:parent.m2.document.write(strOutput);
// document.close();
 }

//---------------------------------------------------------------------||
// Clear the Cart after Submit                                         ||
//---------------------------------------------------------------------||
function cleanCart(){
   var iNumberOrdered=GetCookie("NumberOrdered");
   if(iNumberOrdered==null){ iNumberOrdered=0; }
   for(i=1;i<=iNumberOrdered;i++) {
         NewOrder="Order."+i;
         DeleteCookie(NewOrder,"/"); }
   DeleteCookie("NumberOrdered","/");
   SetCookie(0,0,null,"/"); }
