//=====================================================================||
//               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        = 'SGD ';
DisplayNotice         = true;
DisplayShippingColumn = false;
DisplayShippingRow    = true;
DisplayTaxRow         = true;
TaxRate               = 0.07;
TaxByRegion           = false;
TaxPrompt             = 'For tax purposes, please select if you are an Arizona resident before continuing';
TaxablePrompt         = 'Discount';
NonTaxablePrompt      = 'Other States';
MinimumOrder          = 10;
MinimumOrderPrompt    = 'Please order some products before checking out.\nAccessories alone cannot form an order.';
share		      = false;

//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 = true;


//=====================================================================||
//---------------------------------------------------------------------||
//    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.";
   strRemoveAll = "Click 'Ok' to remove ALL products from your shopping cart.";
   strTips = "You may change the quantity (Qty) or remove any items";   
   strILabel = "Product Id";
   strDLabel = "Product Name/Description";
   strQLabel = "Quantity";
   strPLabel = "Price";
   strSLabel = "Shipping";
   strRLabel = "Remove From Cart";
   strRButton= "Remove";
   strRAButton= "Remove All";
   strSUB    = "SUBTOTAL";
   strSHIP   = "SHIPPING";
   strTAX    = "TAX";
   strCURRENCY    = "SGD";
   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");
   iCurrency = GetCookie("Currency");

   if ( iNumberOrdered == null )
      iNumberOrdered = 0;
      
   if ( iCurrency != null )
      strCURRENCY = iCurrency;
      
   if ( thisForm.ID_NUM == null )
      strID_NUM    = "";
   else
      strID_NUM    = thisForm.ID_NUM.value;

   if(strID_NUM == "5607") {
	 if (!GetCookie("member")) {
	    SetCookie("member", 1, null, "/");
	    SetCookie("level", 25, null, "/");
	 }
   }

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

   if ( thisForm.CURR == null )
      strCURR     = "SGD";
   else
      strCURR     = thisForm.CURR.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.VP == null )
      strVP     = "0";
   else
      strVP     = thisForm.VP.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 = 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);
      Token5 = database.indexOf("|", Token4+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, Token5 );
      fields[6] = database.substring( Token5+1, database.length );
    
      if ( fields[0] == strID_NUM &&
           fields[2] == strPRICE  &&
           fields[3] == strNAME   &&
           fields[5] == strADDTLINFO	&&
           fields[6] == strVP
         ) {
         bAlreadyInCart = true;
         dbUpdatedOrder = strID_NUM    + "|" +
                          (parseInt(strQUANTITY)+parseInt(fields[1]))  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strADDTLINFO + "|" +
                          strVP;
         strNewOrder = "Order." + i;
         DeleteCookie(strNewOrder, "/");
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         notice = strQUANTITY + " " + strNAME + strAdded;
         break;
      }
   }


   if ( !bAlreadyInCart ) {
      iNumberOrdered++;
      
      if ( iNumberOrdered > 1 && 
           strCURRENCY != strCURR
         ) {
      	 notice = "Sorry, you cannot mix products sold in differenct country to the shopping cart.\nEach country carry different range of products and must be in the same order.\n\nCurrently in the shopping cart, products are in " + strCURRENCY + " currency.\nYou are trying to add an item in " + strCURR + " currency.";
      }
      else if ( iNumberOrdered > 13 ) {
         alert( strSorry );
         notice = strMaxReached;
      }
      else {
         dbUpdatedOrder = strID_NUM    + "|" + 
                          strQUANTITY  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strADDTLINFO + "|" +
                          strVP;

         strNewOrder = "Order." + iNumberOrdered;
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         SetCookie("NumberOrdered", iNumberOrdered, null, "/");
         notice = strQUANTITY + " " + strNAME + strAdded;
         SetCookie("Currency", strCURR, null, "/");
         if (( iNumberOrdered < 2 ) && ( strCURR == "SGD")) {notice += strCartNote;}

	 if(strID_NUM == "5607") { notice += strMemberPrice }
      }
   }

   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 debug(msg) {
	if (GetCookie ('debug')) alert(msg);
}	

//---------------------------------------------------------------------||
// 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 neg = "";
   if ((input * 1) < 0) { neg = "-"; input = (input * -1); }
   
   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(neg + dollars + "." + cents);
   

}

function moneyFormat2(input) {
   var neg = "";
   if ((input * 1) < 0) { neg = "-"; input = (input * -1); }
   
   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(neg + dollars);
   else
   	return(neg + 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 ) ) {
      showlightbox('Updating...');   
      database = GetCookie("Order." + RemOrder);
      Token0 = database.indexOf("|", 0);
      if(database.substring( 0, Token0 ) == "5607") {
	 if (GetCookie("member") == 1) {
	    DeleteCookie("member", "/");
	    DeleteCookie("level", "/");
	 }
      }
      
      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;
//      parent.frames['footer-cart'].window.location="footer-cart.html";
   }
}

function RemoveAllFromCart() {
   if ( confirm( strRemoveAll ) ) {
      showlightbox('Updating...');   
      NumberOrdered = GetCookie("NumberOrdered");
      for ( i=0; i < NumberOrdered; i++ ) {
         NewOrder = "Order." + (i);
         DeleteCookie(NewOrder, "/");
      }
      SetCookie ("NumberOrdered", 0, null, "/");
	 if (GetCookie("member") == 1) {
	    DeleteCookie("member", "/");
	    DeleteCookie("level", "/");
	 }
      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 {
      showlightbox('Updating...');
      
      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);
      Token5 = database.indexOf("|", Token4+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, Token5 );
      fields[6] = database.substring( Token5+1, database.length );

      dbUpdatedOrder = fields[0] + "|" +
                       NewQuantity + "|" +
                       fields[2] + "|" +
                       fields[3] + "|" +
                       fields[4] + "|" +
                       fields[5] + "|" +
                       fields[6];
      strNewOrder = "Order." + OrderItem;
      DeleteCookie(strNewOrder, "/");
      SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
      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 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( faccumulatedVP ) {
   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 fDiscount      = 0;    //Discount amount   
   var strTotal       = "";   //Total cost formatted as money
   var strTax         = "";   //Total tax formatted as money
   var strShipping    = "";   //Total shipping formatted as money
   var strDiscount    = "";
   var strOutput      = "";   //String to be written to page
   var strVP	      = 0;    // Volume Points
   var strVPmore	= "";
   var bDisplay       = true; //Whether to write string to the page (here for programmers)
   
   var fmPrice	      = 0;    // Discounted unit price
   var fmTotal         = 0;    //Total cost of order - discounted
   var fVP		= 0;	// Volume Points
   var member	      = "";
   var level          = "";
   var dfactor	      = 0;
   var dbracket = 500;
   var dincrease = 35;
   var  dnextlevel = 0;
   var thisorderVP = 0;
   var perm = "";
  
   if (!faccumulatedVP) faccumulatedVP = 0;

   iCurrency = GetCookie("Currency");
   if ( iCurrency != null ) strCURRENCY = iCurrency;
   MonetarySymbol = strCURRENCY + " ";
   if ( iCurrency == "RM" ) {
   	TaxRate = 0;
   	strTAX = "Goods & Service Tax";
   }
   
   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   member = GetCookie("member");
   level = GetCookie("level");
   maxlevel = GetCookie("maxlevel");

   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);
      if (!database) { 		// Oops, the item cookies must have expired! Reset quantity.
      		iNumberOrdered = 0;
      		SetCookie ("NumberOrdered", 0, null, "/");
      		break; 
      }

      Token0 = database.indexOf("|", 0);
      if(database.substring( 0, Token0 ) == "5607") {
      	if (!member) {
      		member = 1;
      		level = 25;
      		SetCookie ("member", 1, null, "/");
      		SetCookie ("level", 25, null, "/");
      	}
      }

   }

   if ( !level) level = 25;
   
   if (member) {
	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);
		Token5 = database.indexOf("|", Token4+1);

		fields = new Array;
		fields[1] = database.substring( Token0+1, Token1 );          // Quantity
		fields[6] = database.substring( Token5+1, database.length ); // Volume Points

		strVP = (parseInt(fields[1]) * parseFloat(fields[6]) );
		fVP += strVP;
	}

 	fVP = moneyFormat2(fVP);
	thisorderVP = fVP;
	fVP = moneyFormat2(parseFloat(faccumulatedVP) + parseFloat(fVP));
	var ordertype = "accumulated within 31 days";
	var tableimg = "<img src='/images/discount-level.gif' width=200 height=154 align=right hspace=5 vspace=0>";
	var timg = "";
	var left = "";

	if (level >= 30) { 
		dbracket = 99999;
//		if (fVP < 550 && level < 35) { dbracket = 425; dincrease = 35; dnextlevel = 550;}
//		if (fVP >= 550 && level < 38) { dbracket = 550; dincrease = 38; dnextlevel = 800;}
//		if (fVP >= 800 && level < 40) { dbracket = 800; dincrease = 40; dnextlevel = 1000;}
		if (fVP >= 500 && level < 35) { dbracket = 500; dincrease = 35; dnextlevel = 2000;}
		if (fVP >= 2000 && level < 42) { dbracket = 2000; dincrease = 42; dnextlevel = 4000;}
		if (fVP >= 4000 && level < 50) { dbracket = 4000; dincrease = 50; dnextlevel = 0;}	
	} else {
		if (fVP <500) perm = " permanently";
//		if ((fVP >= 425) && (fVP < 550)) {timg = tableimg; left = "style='text-align:left;'"; strVPmore = "<P><b>Note:</b><br>The 35% discount level between 425VP - 549VP is reserved for those who are already on this sliding scale. However, you may still get 38% discount (with 550VP) or more if it's placed in a <b>single order</b> this month.";}
//		if (thisorderVP < 500) strVPmore = "<P><b>Note:</b> The current order volume is <b>" + thisorderVP + "VP</b>. Try reaching 500VP or more in a <b>single order</b> to qualify for 35% discount immediately!";
//		if (thisorderVP >= 550) { dbracket = 550; dincrease = 38; dnextlevel = 800;}
//		if (thisorderVP >= 800) { dbracket = 800; dincrease = 40; dnextlevel = 1000;}
		if (thisorderVP >= 500) { dbracket = 500; dincrease = 35; dnextlevel = 2000;}
//		if (thisorderVP >= 2000) { dbracket = 2000; dincrease = 42; dnextlevel = 4000;}
//		if (thisorderVP >= 1000) { dbracket = 1000; dincrease = 42; dnextlevel = 4000;
//			if (thisorderVP < 4000) {timg = tableimg; left = "style='text-align:left;'"; strVPmore = "<P><B>Promotion!</B> Instead of requiring 2000VP to enjoy 42% discount, you will enjoy it at only 1000VP onwards!";}
//		}
		if (thisorderVP >= 4000) { dbracket = 4000; dincrease = 50; dnextlevel = 0;}	
//		if (thisorderVP >= 550) { ordertype = "(single order)"; fVP = thisorderVP;}
	}

	if (maxlevel && dincrease >= maxlevel && maxlevel > level) {
		dincrease = maxlevel;
		if (fVP >= dbracket) {
			level = dincrease;
			strOutput += "<DIV class=dashbox2 " + left + "><B>Congratulations!</B><P>With this order, the volume points is " + fVP + " VP</B>. ";
			strOutput += "The discount level has therefore been increased to <B>" + level + "%</B> below.";
			strOutput += " (Maximun discount shared limited to "+maxlevel+"%)";
			strOutput += "</DIV><P>";
		}
	} else if (fVP >= dbracket) {
		level = dincrease;
		strOutput += "<DIV class=dashbox2 " + left + "><B>Congratulations!</B>" + timg + "<P>With this order, points " + ordertype + " is greater than " + dbracket + " VP at <B>" + fVP + " VP</B>. ";
		strOutput += "The discount level has therefore been increased to <B>" + level + "%</B> below.";
		if (level == 30) strOutput += " This will be the minimum discount going forward!";
		if (dnextlevel > 0) strOutput += "<P><b>Tips:</b> You are only " + moneyFormat2(dnextlevel - fVP) + " VP away from the next higher discount level (" + dnextlevel + " VP). <small>(<a href='/discount.htm#table'>more info</a>)</small><BR>";
		strOutput += strVPmore + "</DIV><P>";
	} else 	if (fVP >= (parseInt(dbracket)*3)/4) {
		strOutput += "<DIV class=dashbox2><B>Tips:</B><BR>Volume points total with this order is <B>" + fVP + " VP</B>. It's reaching the next discount level at " + dbracket + " VP.";
		strOutput += " Consider adding more products or quantity to reach <B>" + dincrease + "%</B> discount level"+perm+". <small>(<a href='/discount.htm#table'>more info</a>)</small><BR>";
		if ((parseInt(dbracket) - fVP) < 3) { strOutput += "Herbalife accessories carry a small amount of volume points too. <small>(<a href='/herbalife/herbalife-accessories.htm'>browse accessories</a>)</small>"; }
		strOutput += "</DIV><P>";
	} else if (member == 1)
		strOutput += "<center>You will be accumulating <b>" + fVP + " VP</b> (volume points) with this order.<br>The volume points will be credited once payment is made.</center><p>";

   	fVP = 0;
   }

   if (member) {
	DisplayShippingColumn = true;
//	strSHIP = level + '% Membership Discount (Savings!)';
//	strSUB = 'Sub-Total';	
   }
   
   if ( bDisplay )
      strOutput += "<TABLE CLASS=\"nopcart\" width=100%><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>";

   if ( iNumberOrdered == 0 ) {
      strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>" + strEmptyCart + "</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);
      Token5 = database.indexOf("|", Token4+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, Token5 );          // Additional Information
      fields[6] = database.substring( Token5+1, database.length ); // Volume Points

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
      strVP = (parseInt(fields[1]) * parseFloat(fields[6]) );
      fVP += strVP;

      if (member) {
    	dfactor = 1.08 - (level/100);
        if (fields[4] == "0" || fields[4] == "")
        	fields[4] = (parseFloat(fields[2]) * dfactor / 1.08);
	fDiscount  -= (parseInt(fields[1]) * (parseFloat(fields[2]) - parseFloat(fields[4])) );
	fmTotal     += (parseInt(fields[1]) * parseFloat(fields[4]) );
        fTax        = (fmTotal * TaxRate);
      }
      else {
	// fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
        fTax        = (fTotal * TaxRate);
      }

      strTotal    = moneyFormat(fTotal);
      strTax      = moneyFormat(fTax);
      strShipping = moneyFormat(fShipping);
      strDiscount = moneyFormat(fDiscount);
//      strShipping = fShipping + "<br>" + moneyFormat(fShipping);

      if ( bDisplay ) {
	 if ( member ) vp = "<BR><span class=smallgrey>(" + fields[6] + " VP)</span>"; else vp = "";

         strOutput += "<TR><TD CLASS=\"nopentry\" align=center nowrap>"  + fields[0] + vp +"</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 CLASS=\"nopentry\"><select class=input size=1 name=Q onChange=\"ChangeQuantity("+i+", this[selectedIndex].text);\">";
         for ( k = 1; k <= parseInt(fields[1]) + 20; k++ ) strOutput += "<option" + ((fields[1] == k)?" selected":"") + ">" + k + "</option>";
         strOutput += "</select></TD>";
         strOutput += "<TD CLASS=\"nopentry\" align=right>"+ moneyFormat(fields[2]) + "/ea</TD>";

         if ( DisplayShippingColumn ) {
            if ( parseFloat(fields[4]) != parseFloat(fields[2]) )
               strOutput += "<TD CLASS=\"nopentry\" align=right style=\"background-color: #FFFFA0\">"+ moneyFormat(fields[4]) + "/ea</TD>";
            else
               strOutput += "<TD CLASS=\"nopentry\" align=center>N/A</TD>";
         }

         if (member) {
         	strOutput += "<TD CLASS=\"nopentry\" ALIGN=CENTER><span class=smallgrey>" + moneyFormat(strVP) + " VP</span> <input type=button value=\" "+strRButton+" \" onClick=\"RemoveFromCart("+i+")\" class=\"nopbutton\"></TD></TR>";
         } else {
         	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=\"" + moneyFormat(fields[4]) + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
      }

   }
   fVP = moneyFormat2(fVP);

   if ( bDisplay ) {
      if (iNumberOrdered > 1) {
	      strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4 ALIGN=CENTER>"+strTips+"</TD>";
	      strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=CENTER><input type=button value=\" "+strRAButton+" \" onClick=\"RemoveAllFromCart()\" class=\"nopbutton\"></TD>";
	      strOutput += "</TR>";
      }   
      if (member) {
      		strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+strSUB+" ( "+MonetarySymbol+")</B></TD>";
      		strOutput += "<TD CLASS=\"noptotal\" ALIGN=RIGHT nowrap><B>" + strTotal + "</B><TD CLASS=\"noptotal\" ALIGN=RIGHT nowrap style=\"background-color: #FFFFA0\"><B>" + moneyFormat(fmTotal) + "</B></TD><TD CLASS=\"noptotal\" ALIGN=CENTER style=\"background-color: #FFFFA0\">" + fVP + " VP</TD>";
      } else {
      		strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strSUB+"</B></TD>";
      		strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B>" + MonetarySymbol + strTotal + "</B></TD>";
      }
      strOutput += "</TR>";

      if ( member ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+level+"% Membership Discount Level (Savings!)</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B>" + MonetarySymbol + strDiscount + "</B></TD>";
         strOutput += "</TR>";
      }
      
      if ( DisplayTaxRow || TaxByRegion ) {
         if ( TaxByRegion ) {
            strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strTAX+"</B></TD>";
            strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><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 += "</TR>";
         } else {
            strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strTAX+"</B></TD>";
            strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B>" + MonetarySymbol + strTax + "</B></TD>";
            strOutput += "</TR>";
         }
      }

      if ( DisplayShippingRow ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strSHIP+"</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B>" + MonetarySymbol + strShipping + "</B></TD>";
         strOutput += "</TR>";
      }

      if ( !TaxByRegion ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=4><B>"+strTOT+"</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT bgcolor='#99CCFF'><B>" + MonetarySymbol + moneyFormat(Math.round((fTotal + fDiscount + fTax)*20)/20) + "</B></TD>";
         strOutput += "</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(Math.round((fTotal + fShipping + fTax)*20)/20) + "\">";
         if (member) {
           strOutput += "<input type=hidden name=\"member\" value=\""+member+"\">";
           strOutput += "<input type=hidden name=\"fmTotal\" value=\""+ MonetarySymbol + moneyFormat(fmTotal) + "\">";
	 }         
      }
   }
   g_TotalCost = Math.round((fTotal + fShipping + fTax)*20)/20;

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

//---------------------------------------------------------------------||
// 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 ) {
	   MinimumOrderPrompt += "\n\nIf you think this is an error, please call 67281739 or SMS 91732369\nThank You!";

	   iNumberOrdered = GetCookie("NumberOrdered");
	   if ( iNumberOrdered == null )
	      iNumberOrdered = 0;

	   for ( i = 1; i <= iNumberOrdered; i++ ) {
	      NewOrder = "Order." + i;
	      database = "";
	      database = GetCookie(NewOrder);

	      Token0 = database.indexOf("|", 0);
	      if(database.substring( 0, Token0 ) == "5607") {
		  MinimumOrderPrompt = "You can start to order some products at member's price now. We'll send the membership pack along with the products to you during delivery. Click on the Full Product List on the left menu and continue shopping by adding some products before you checkout.";
	      }
	   }

        alert( MinimumOrderPrompt );

       	var img = document.getElementById('bottomcart');
	img.src = "/acconly.php?g_TotalCost=" + g_TotalCost + "&MinimumOrder=" + MinimumOrder;
        return false;
      }
   }

//   if (!isValidEmail(theForm.login.value)) {
//   	alert("Please enter a valid email before checking out");
//   	return false;
//   }

   return true;
}


function isValidEmail(str) {
   return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
}

//---------------------------------------------------------------------||
// FUNCTION:    CheckoutCart                                           ||
// PARAMETERS:  Null                                                   ||
// RETURNS:     Product Table Written to Document                      ||
// PURPOSE:     Draws current cart product table on HTML page for      ||
//              checkout.                                              ||
//---------------------------------------------------------------------||
function CheckoutCart( fVP, fpostage, newgst ) {
   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 fDiscount      = 0;    //Discount amount   
   var strTotal       = "";   //Total cost formatted as money
   var strTax         = "";   //Total tax formatted as money
   var strShipping    = "";   //Total shipping formatted as money
   var strDiscount    = "";
   var strOutput      = "";   //String to be written to page
   var strVP	      = 0;    // Volume Points
   var bDisplay       = true; //Whether to write string to the page (here for programmers)
   var strPP          = "";   //Payment Processor Description Field

   var fmPrice	      = 0;    // Discounted unit price
   var fmTotal         = 0;    //Total cost of order - discounted
//   var fVP		= 0;	// Volume Points
   var member	      = "";
   var level          = "";
   var dfactor	      = 0;
   var dbracket = 500;
   var dincrease = 35;
   var ftotalVP = 0;

debug('here: CheckoutCart');

   if (!fVP) fVP = 0;
   fShipping = fpostage;
   TaxRate = newgst;

   iCurrency = GetCookie("Currency");
   if ( iCurrency != null ) strCURRENCY = iCurrency;
   MonetarySymbol = strCURRENCY + " ";
   if ( iCurrency == "RM" ) {
   	TaxRate = 0;
   	strTAX = "Goods & Service Tax";
   }
   
   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

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


   member = GetCookie("member");
   level = GetCookie("level");
   if (!level) level = 25;
   maxlevel = GetCookie("maxlevel");
   
   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + i;
      database = "";
      database = GetCookie(NewOrder);

      Token0 = database.indexOf("|", 0);
      if(database.substring( 0, Token0 ) == "5607") if (!member) member = 1;
   }

debug('member : '+member);
   
   if (member) {
	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);
		Token5 = database.indexOf("|", Token4+1);

		fields = new Array;
		fields[1] = database.substring( Token0+1, Token1 );          // Quantity
		fields[6] = database.substring( Token5+1, database.length ); // Volume Points

		strVP = (parseInt(fields[1]) * parseFloat(fields[6]) );
		fVP += strVP;
	}
	fVP = moneyFormat2(fVP);
	thisorderVP = fVP;

debug('fVP: '+fVP);

	if (level >= 30) { 
		dbracket = 99999;
//		if (fVP < 550 && level < 35) { dbracket = 425; dincrease = 35; dnextlevel = 550;}
//		if (fVP >= 550 && level < 38) { dbracket = 550; dincrease = 38; dnextlevel = 800;}
//		if (fVP >= 800 && level < 40) { dbracket = 800; dincrease = 40; dnextlevel = 1000;}
		if (fVP >= 500 && level < 35) { dbracket = 500; dincrease = 35; dnextlevel = 2000;}
		if (fVP >= 2000 && level < 42) { dbracket = 2000; dincrease = 42; dnextlevel = 4000;}
		if (fVP >= 4000 && level < 50) { dbracket = 4000; dincrease = 50; dnextlevel = 0;}	
	} else {
//		if (thisorderVP >= 550) { dbracket = 550; dincrease = 38; dnextlevel = 800;}
//		if (thisorderVP >= 800) { dbracket = 800; dincrease = 40; dnextlevel = 1000;}
//		//if (thisorderVP >= 1000) { dbracket = 1000; dincrease = 42; dnextlevel = 4000;}
		if (thisorderVP >= 500) { dbracket = 500; dincrease = 35; dnextlevel = 2000;}
		if (thisorderVP >= 2000) { dbracket = 2000; dincrease = 42; dnextlevel = 4000;}		
		if (thisorderVP >= 4000) { dbracket = 4000; dincrease = 50; dnextlevel = 0;}	
//		if (thisorderVP >= 550) { ordertype = "(single order)"; fVP = thisorderVP;}
	}

	if (maxlevel && dincrease >= maxlevel && maxlevel > level) {
		dincrease = maxlevel;
		if (fVP >= dbracket) level = dincrease;
	}
	
	if (fVP >= dbracket) {
		level = dincrease;
		//strOutput += "<DIV class=dashbox2>";
		//strOutput += "Discount level has been increased to <B>" + level + "%</B> for this order.";
		//strOutput += "</DIV><P>";
	}
	ftotalVP = fVP;
	fVP = 0;
   }

   if (member) {
	DisplayShippingColumn = true;
//	strSHIP = level + '% Membership Discount (Savings!)';
//	strSUB = 'Sub-Total';
   }

   if ( bDisplay )
      strOutput += "<TABLE CLASS=\"nopcart\" width=100% style=\"WORD-BREAK:BREAK-ALL;\"><TR>" +
                  "<TD CLASS=\"nopheader\"><B>Item ID</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>":"") +
                  "</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);
      Token5 = database.indexOf("|", Token4+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, Token5 );          // Additional Information
      fields[6] = database.substring( Token5+1, database.length ); // Volume Points

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
      strVP = (parseInt(fields[1]) * parseFloat(fields[6]) );
      fVP += strVP;

//      fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );

      if (member) {
    	dfactor = 1.08 - (level/100);
        if (fields[4] == "0" || fields[4] == "")
        	fields[4] = (parseFloat(fields[2]) * dfactor / 1.08);
	fDiscount  -= (parseInt(fields[1]) * (parseFloat(fields[2]) - parseFloat(fields[4])) );
	fmTotal     += (parseInt(fields[1]) * parseFloat(fields[4]) );
        fTax        = (fmTotal * TaxRate);
      }
      else {
	// fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
        fTax        = (fTotal * TaxRate);
      }

//      if ( !TaxByRegion ) fTax = (fTotal * TaxRate);
      strTotal    = moneyFormat(fTotal);
//      if ( !TaxByRegion ) strTax = moneyFormat(fTax);
      strTax = moneyFormat(fTax);
      strShipping = moneyFormat(fShipping);
      strDiscount = moneyFormat(fDiscount);

      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] + "<br>- <I>"+ fields[5] + "</I></TD>";

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

         if ( DisplayShippingColumn ) {
            if ( parseFloat(fields[4]) != parseFloat(fields[2]) )
               strOutput += "<TD CLASS=\"nopentry\" align=right style=\"background-color: #FFFFA0\">"+ moneyFormat(fields[4]) + "/ea</TD>";
            else
               strOutput += "<TD CLASS=\"nopentry\" align=center>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=\"" + moneyFormat(fields[4]) + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
      } 

   }
   
   fVP = moneyFormat2(fVP);

   if ( bDisplay ) {
      strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+strSUB+" ( "+MonetarySymbol+")</B></TD>";
      if (member) {
      		strOutput += "<TD CLASS=\"noptotal\" ALIGN=RIGHT nowrap><B>" + strTotal + "</B><TD CLASS=\"noptotal\" ALIGN=RIGHT nowrap style=\"background-color: #FFFFA0\"><B>" + moneyFormat(fmTotal) + "</B></TD>";
      } else {
      		strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT nowrap><B>" + MonetarySymbol + strTotal + "</B></TD>";
      }
      strOutput += "</TR>";

      if ( member ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>Volume Points</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" ALIGN=CENTER style=\"background-color: #FFFFA0\">" + fVP + " VP</TD><TD CLASS=\"noptotal\"></TD>";
         strOutput += "</TR>";
      }

      if ( member ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+level+"% Membership Discount Level (Savings!)</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B>" + MonetarySymbol + strDiscount + "</B></TD>";
         strOutput += "</TR>";
      }
      
      if ( DisplayTaxRow || TaxByRegion ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+strTAX+"</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B><span id='gststr'>" + MonetarySymbol + strTax + "</span></B></TD>";
         strOutput += "</TR>";
      }

      if ( DisplayShippingRow ) {
         strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+strSHIP+"</B></TD>";
         strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><B><span id='postage'>" + MonetarySymbol + strShipping + "</span></B></TD>";
         strOutput += "</TR>";
      }

      strOutput += "<TR><TD CLASS=\"noptotal\" COLSPAN=3><B>"+strTOT+"</B></TD>";
      strOutput += "<TD CLASS=\"noptotal\" COLSPAN=2 ALIGN=RIGHT bgcolor='#99CCFF'><B><span id='total'>" + MonetarySymbol + moneyFormat(Math.round((fTotal + fShipping + fDiscount + fTax)*20)/20) + "</span></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(Math.round((fTotal + fShipping + fTax)*20)/20) + "\">";
      } else if ( PaymentProcessor == 'wp') {
         //Process this for WorldPay
         strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
         strOutput += "<input type=hidden name=\"amount\" value=\""+ moneyFormat(Math.round((fTotal + fShipping + fTax)*20)/20) + "\">";
      } else if ( PaymentProcessor == 'lp') {
         //Process this for LinkPoint         
         strOutput += "<input type=hidden name=\"mode\" value=\"fullpay\">";
         strOutput += "<input type=hidden name=\"chargetotal\" value=\""+ moneyFormat(Math.round((fTotal + fShipping + fTax)*20)/20) + "\">";
         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 id=\""+OutputOrderShipping+"\" name=\""+OutputOrderShipping+"\" value=\""+ MonetarySymbol + strShipping + "\">";
         strOutput += "<input type=hidden name=\""+OutputOrderTax+"\"      value=\""+ MonetarySymbol + strTax + "\">";
         strOutput += "<input type=hidden id=\""+OutputOrderTotal+"\" name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormat(Math.round((fTotal + fDiscount + fShipping + fTax)*20)/20) + "\">";
// alert("fTotal:"+fTotal + "\nfDiscount:"+fDiscount + "\nfShipping:"+fShipping );
         strOutput += "<input type=hidden id=\"chargetotal\" name=\"chargetotal\" value=\""+ moneyFormat(Math.round((fTotal + fDiscount + fShipping + fTax)*20)/20 ) + "\">";
         strOutput += "<input type=hidden id=\"gst\" name=\"gst\" value=\""+ moneyFormat(fTax) + "\">";
         
         if (member) {
           strOutput += "<input type=hidden name=\"member\" value=\""+member+"\">";
           strOutput += "<input type=hidden name=\"level\" value=\""+level+"\">";
           strOutput += "<input type=hidden name=\"vp\" value=\""+ fVP +"\">";
           strOutput += "<input type=hidden name=\"totalvp\" value=\""+ ftotalVP +"\">";
           strOutput += "<input type=hidden name=\"fmTotal\" value=\""+ MonetarySymbol + moneyFormat(fmTotal) + "\">";
           strOutput += "<input type=hidden name=\"DISCOUNT\" value=\""+ MonetarySymbol + strDiscount + "\">";
	 }
      }
   }

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


function CheckForm( theform )
{
	var bMissingFields = false;
	var strFields = "";
	var b1 = theform.b_first.value;
	var b2 = theform.b_last.value;
	var s1 = theform.s_first.value;
	var s2 = theform.s_last.value;

	iCurrency = GetCookie("Currency");
	if ( iCurrency != null ) strCURRENCY = iCurrency;


	if( theform.b_first.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: First Name\n";
	}
	if( theform.b_last.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: Last Name\n";
	}
	if( theform.b_addr.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: Address\n";
	}
	if( theform.b_state.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: State\n";
	}
	if( theform.b_zip.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: Zipcode\n";
	}
	if( theform.b_phone.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: Phone\n";
	}
	if( theform.b_email.value == '' ){
		bMissingFields = true;
		strFields += "     Billing: Email\n";
	}
	
	if (share || strCURRENCY != "SGD" || theform.s_addr.value != ''
		|| theform.s_first.value != '' || theform.s_last.value != ''
		|| theform.s_zip.value != ''
		|| theform.s_phone.value != '' || theform.s_email.value != ''
	
	) {
		if( theform.s_first.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: First Name\n";
		}
		if( theform.s_last.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: Last Name\n";
		}
		if( theform.s_addr.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: Address\n";
		}
		if( theform.s_state.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: State\n";
		}
		if( theform.s_zip.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: Zipcode\n";
		}
		if( theform.s_phone.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: Phone\n";
		}
		if( theform.s_email.value == '' ){
			bMissingFields = true;
			strFields += "     Delivery: Email\n";
		}
	}
	
	if( theform.s_state.selectedIndex == 0 ){
	//	var pselect = theform.dperiod.options[theform.dperiod.selectedIndex].value;

	//	if (pselect == 'Other Period') {
			if( theform.ddate.selectedIndex == 0 ){
				bMissingFields = true;
				strFields += "     Preferred Delivery Date\n";
			}
			if( theform.dtime.selectedIndex == 0 ){
				bMissingFields = true;
				strFields += "     Preferred Delivery Time\n";
			}
			if( theform.dinstruct.selectedIndex == 0 ){
				bMissingFields = true;
				strFields += "     Preferred Delivery Instruction\n";
			}

	//	} else if (pselect == 'Select Period') {
	//		bMissingFields = true;
	//		strFields += "     Preferred Delivery Date & Time\n";			
	//	}
	}

	theform.b_first.value = Capital(theform.b_first.value);
	theform.b_last.value = Capital(theform.b_last.value);
	theform.s_first.value = Capital(theform.s_first.value);
	theform.s_last.value = Capital(theform.s_last.value);

	if (	theform.s_first.value == theform.b_first.value &&
		theform.s_last.value == theform.b_last.value &&
		theform.s_addr.value == theform.b_addr.value &&
		theform.s_addr2.value == theform.b_addr2.value &&
		theform.s_city.value == theform.b_city.value &&
		theform.s_state.value == "Singapore" &&
		theform.s_zip.value == theform.b_zip.value &&
		theform.s_phone.value == theform.b_phone.value &&
		theform.s_email.value == theform.b_email.value )
	{
		theform.s_first.value = "";
		theform.s_last.value = "";
		theform.s_addr.value = "";
		theform.s_addr2.value = "";
		theform.s_city.value = "";
		theform.s_zip.value = "";
		theform.s_phone.value = "";
		theform.s_email.value = "";		
	}

	if( bMissingFields ) {
		alert( "I'm sorry, but you must provide the following field(s) before continuing:\n" + strFields );
		return false;
	}

//	showlightbox('Submitting Order...');
	return true;
}


function Capital(xx) {
	var yy = xx.split(" ");
	for (x=0; x<yy.length; x++) {
		yy[x] = yy[x].substring(0, 1).toUpperCase()+yy[x].substring(1);
	};
	xx = yy.join(" ");
	return (xx);
};



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






