//=====================================================================
//  TOWeb Shopcart (c)2008 Lauyan.com - All rights reserved
//=====================================================================
SHIPPINGDETAILS       = false;

MonetarySymbol        = ' €';
DecimalSymbol         = ',';
MonetarySymbolFirst   = false;
DisplayNotice         = true;
DisplayShippingColumn = true;
DisplayShippingRow    = true;
DisplayTaxRow         = false;
TaxRate               = 0.00;
DefaultTaxRate        = 0.00;
TaxIncluded           = false;
EnableTaxPerCountry   = false;
MinimumOrder          = 0.00;
MaximumOrder          = 0.00;
MinimumOrderWeight    = 0.00;
MaximumOrderWeight    = 0.00;
InitialShippingAmount = 0.00;
WeightUnit            = '';
DefaultCountry        = 'FR=France';
UseRebate             = true;
DisplayOrderRebate    = false;
RebateIgnoreCase  	  = true;
TaxOnShipping         = 0;

CurrentShipment       = 0;

shipments 			  = new Array();

// PayPal fields parameters
PPOutputItemId        = 'item_number_';	// 'ID_';
PPOutputItemQuantity  = 'quantity_';
PPOutputItemPrice     = 'amount_';		// 'PRICE_';
PPOutputItemName      = 'item_name_';	// 'NAME_';
PPOutputItemShipping  = 'SHIPPING_';
PPOutputItemAddtlInfo = 'os0_';			// 'ADDTLINFO_';

// standard fields parametes
OutputItemId          = 'i';		// 'item_number_';
OutputItemQuantity    = 'q';		// 'quantity_'
OutputItemPrice       = 'a';		// 'amount_';
OutputItemName        = 'n';		// 'item_name';
OutputItemShipping    = 's';		// 'SHIPPING_'
OutputItemAddtlInfo   = 'o';		// 'os0_';				
OutputOrderSubtotal   = 'subtotal';			
OutputOrderShipping   = 'shipping';		
OutputOrderShipment   = 'shiptype';		
OutputOrderTax1       = 'tax1';
OutputOrderTax2       = 'tax2';
OutputOrderTotal      = 'TOTAL';

// Internal constants
AppendItemNumToOutput  = true;
HiddenFieldsToCheckout = true;
MaxItemPerOrder        = 15;
  
htmlExt                = '.html';
CatalogPath            = new Array("","","","","","../moteursbrushles1/page","../moteurbrushlesse/page","../escbrushless/page","../combospacks-fly/page","../turbinebrushless/page","../servos/page","","../chargeurslipo/page","","../helicopterselec1/page","../helicopterselect/page","","","../radios40mhz24ghz/page","","","../occasions/index","../chequecadeau/index","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","../recepteursquartz/page","../recepteursquart1/page","../recepteursquart2/page","../recepteurs/page","../recepteur24ghz/page","","","../avions17/page","../avionspourdebuta/page","../jet17/page","../avionsindoor17/page","../ailesdelta/page","../avionsepp/page","../microavionindoo1/page","","../helicesgwssf/page","../helicesapchspeed/page","../helicesgwssf1/page","../helicesmultipale/page","../helicesreverse/page","../batterieslipo37v/page","../batteries74v/page","../batteries74vnano/page","../batterieslipo148/page","../batteries111v/page","../propsaverportehe/page","../divers/page","../guignolscharnier/page","../visserie/page","../rouestrains/page","../moduleselectroni/page","../moduleselectron1/page","../prises/page","../accessoires/page","../autocollants/page","../colles/page","../adapteurs/page","../rallonges/page","","","","","","","","../findestock/index","","../venteflash/index","../venteflash1/index","../venteflash2/index","../venteflashpackfl/index","../helicopterselec2/index","../moteurf3p/page","../moteursjets/page","../moteursbrushless/page","");
DisplayItemLinks       = true;	

g_TotalCost = 0;
g_TotalWeight = 0;
g_SubTotalCost = 0;

function initArray() 
{
	this.length = initArray.arguments.length;
	for (var i = 0; i < this.length; i++)
		this[i] = initArray.arguments[i];
}

function hasCountry( cc ) 
{
  if( this.countries == 'ALL' || cc == 'ALL' )
    return true;
  return ( this.countries.indexOf( cc ) >= 0 );
}

function getFixedShippingAmount( price ) 
{
  if( this.fixed_limits == 0 )
  	return 0;
  var shippingamount = this.fixed_amounts[0];
  if( this.fixed_limits[0] > 0 || this.fixed_amounts[0] > 0 )
    for( var i=0; i<this.fixed_limits.length; i++ )
      if( this.fixed_limits[i] > 0 && price >= this.fixed_limits[i] )
        shippingamount = this.fixed_amounts[i];
  return shippingamount;	
}

function getWeightShippingAmount( weight ) 
{
  if( this.weight_limits == 0 )
  	return 0;
  var shippingamount = this.weight_amounts[0];
  if( this.weight_limits[0] > 0 || this.weight_amounts[0] > 0 )
    for( var i=0; i<this.weight_limits.length; i++ )
      if( this.weight_limits[i] > 0 && weight >= this.weight_limits[i] )
        shippingamount = this.weight_amounts[i];
  return shippingamount;	
}

function createShipment( sname, sdesc, svatrate, scountries ) 
{
  this.name = sname;
  this.desc = sdesc;
  this.vatrate = svatrate;
  this.countries = scountries;
  this.fixed_limits  = 0;
  this.fixed_amounts = 0;
  this.weight_limits = 0;
  this.price_amounts = 0;
  this.hasCountry = hasCountry;
  this.getFixedShippingAmount = getFixedShippingAmount;
  this.getWeightShippingAmount = getWeightShippingAmount;
}

function CalculateFixedShipping()
{
	var fShipping      = 0; 
	var iNumberOrdered = GetCookie("NumberOrdered");
	if( iNumberOrdered == null )
		iNumberOrdered = 0;
	for( var i=1; i<=iNumberOrdered; i++) 
	{
		var NewOrder = "Order." + i;
		var 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] = RemoveUnsafeChars( database.substring( Token2+1, Token3 ) );          // Product Name/Description
		fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
		fShipping += (parseInt(fields[1]) * parseFloat(fields[4]) );
	}
	return fShipping;
}

function getParam(paramName)
{
	var SelfURL = document.location.href;
	var paramIndex = SelfURL.indexOf("?");    
	if (paramIndex <= -1)
		return "";
	var paramStr = SelfURL.substr(paramIndex+1, 4096);
	if( paramStr == "" )
		return "";
	if( paramStr.charAt(0) == "?" )
		paramStr = paramStr.substr(1);
	arg = (paramStr.split("&"));
	for( i=0; i<arg.length; i++ ) 
	{
		arg_values = arg[i].split("=")
		if( unescape(arg_values[0]) == paramName ) 
		{
			ret = unescape(arg_values[1]);  // IE 5.0 and older does not have decodeURI
			return ret;
		}
	}
	return "";
}

//---------------------------------------------------------------------
// FUNCTION:    AddMonetarySymbol
// RETURNS:     string with the MonetarySymbol added in first/last position
//---------------------------------------------------------------------
function AddMonetarySymbol(strVal) 
{
	var strsym = "";
	if (MonetarySymbolFirst) 
		strsym = MonetarySymbol + strVal;
	else	
		strsym = strVal + MonetarySymbol;
	return(strsym);
}

//---------------------------------------------------------------------
// FUNCTION:    CKquantity
// PARAMETERS:  Quantity 
// RETURNS:     Quantity as a number, and possible alert 
// PURPOSE:     Make sure quantity is represented as a number 
//---------------------------------------------------------------------
function CKquantity(checkString) 
{
	var strNewQuantity="";
	for(var i=0; i<checkString.length; i++) 
	{
		var 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:  Item 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 = "";
	var bNoQtyAllowed = false;
	iNumberOrdered = GetCookie("NumberOrdered");

	if( thisForm.STATUS.value == 6 ) //out of order status
	{
		alert( strAddToCartError + " " + catstatusnames[6] );
		return false;
	}
	
	if ( iNumberOrdered == null )
		iNumberOrdered = 0;

	if ( thisForm.USC == null )
		strShipCoeff = "";
	else
		strShipCoeff = thisForm.USC.value;

		if ( thisForm.ID_NUM == null )
		strID_NUM    = "";
	else
		strID_NUM    = thisForm.ID_NUM.value;
		
	if ( thisForm.QUANTITY == null )
	{
		strQUANTITY  = "1";
		bNoQtyAllowed = true;
	}   
	else
	{
		strQUANTITY  = thisForm.QUANTITY.value;
		if( strQUANTITY <= 0 )
		{
			alert( strErrQty );
			thisForm.QUANTITY.value = "1";
			return;
		}
		bNoQtyAllowed = false;
	}
	if ( thisForm.PRICE == null )
		strPRICE     = "0.00";
	else
		strPRICE     = thisForm.PRICE.value;

	if ( thisForm.NAME == null )
		strNAME      = "";
	else
		strNAME      = thisForm.NAME.value;

	if ( thisForm.SHIPPING == null )
		strSHIPPING  = "0.00";
	else
		strSHIPPING  = thisForm.SHIPPING.value;

	if ( thisForm.ADDITIONALINFO == null ) {
		strADDTLINFO = "";
	} else {
		var s = thisForm.ADDITIONALINFO[thisForm.ADDITIONALINFO.selectedIndex].value;
		s = s.split('^');
		strADDTLINFO = s[0];
	}
	if ( thisForm.ADDITIONALINFO2 != null ) {
		var s = thisForm.ADDITIONALINFO2[thisForm.ADDITIONALINFO2.selectedIndex].value;
		s = s.split('^');
		strADDTLINFO += "; " + s[0];
	}
	if ( thisForm.ADDITIONALINFO3 != null ) {
		var s = thisForm.ADDITIONALINFO3[thisForm.ADDITIONALINFO3.selectedIndex].value;
		s = s.split('^');
		strADDTLINFO += "; " + s[0];
	}
	if ( thisForm.ADDITIONALINFO4 != null ) {
		var s = thisForm.ADDITIONALINFO4[thisForm.ADDITIONALINFO4.selectedIndex].value;
		s = s.split('^');
		strADDTLINFO += "; " + s[0];
	}

	var qtyMax = -1;

	if( bNoQtyAllowed ) 
	{
		qtyMax = 1;
	}
	else if ( thisForm.QTYMAX && thisForm.QTYMAX.value >= 0 )
	{
			qtyMax = parseInt( thisForm.QTYMAX.value );
	}
	if( qtyMax > 0 )
		strADDTLINFO += "|qty=" + qtyMax;
			
   //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[6] == strADDTLINFO
         ) 
      {
         bAlreadyInCart = true;
				 
         if ( !bNoQtyAllowed )
         {
					 var nqty = parseInt(strQUANTITY) + parseInt(fields[1]);
					 if( qtyMax >= 0 && nqty > qtyMax )
					 {
							alert( strQtyMaxError + " " + qtyMax + " ( " + fields[3] + " )" );
							return;
					 }
           dbUpdatedOrder = strID_NUM    + "|" +
                          nqty  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strShipCoeff + "|" +
                          strADDTLINFO;
           strNewOrder = "Order." + i;
           DeleteCookie(strNewOrder, "/");
           SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
           notice = strQUANTITY + " " + strNAME + " " + strAdded;
         }
				 else
	         notice = strNAME + " " + strAdded;
         break;
      }
   }

   if ( !bAlreadyInCart ) 
   {
      iNumberOrdered++;

			if( qtyMax >= 0 && strQUANTITY > qtyMax )
			{
				alert( strQtyMaxError + " " + qtyMax + " ( " + strNAME + " )" );
				return;
			}
			
      if ( iNumberOrdered > MaxItemPerOrder )
         alert( strSorry );
      else 
      {
         dbUpdatedOrder = strID_NUM    + "|" + 
                          strQUANTITY  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strSHIPPING  + "|" +
                          strShipCoeff + "|" +
                          strADDTLINFO;

         strNewOrder = "Order." + iNumberOrdered;
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         SetCookie("NumberOrdered", iNumberOrdered, null, "/");
         if( !bNoQtyAllowed ) 
	         notice = strQUANTITY + " " + strNAME + " " + strAdded;
	     else
	         notice = strNAME + " " + strAdded;
      }
   }
   if ( DisplayNotice && notice != "" )
      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, decsep) 
{
	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.length == 1 )
		cents = "0" + cents;
	if( (decsep == null) || (decsep == "") )
	 return(dollars + DecimalSymbol + cents);
	return(dollars + '.' + cents);
}
function taxFormat(input) {
   input = Math.round(input*100*1000) / 1000;
   return input;
}
//---------------------------------------------------------------------
// 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;
	}
}
//---------------------------------------------------------------------
// FUNCTION:    CleanShopcart
// PURPOSE:     delete shopcart cookies
//---------------------------------------------------------------------
function CleanShopcart() 
{
	DeleteCookie( "NumberOrdered", "/" );  
	DeleteCookie( "rebate", "/" );
	DeleteCookie( "OrderId", "/" );
}
//---------------------------------------------------------------------
// 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( NewQuantity.value == "" || isNaN(NewQuantity.value) ) {
		alert(strErrQty);
	} else 
	{
		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 );

		var qty = fields[6].split("|qty=");
		if( qty.length>0 && parseInt(NewQuantity.value)>parseInt(qty[1]) )
		{
			NewQuantity.focus();
			alert( strQtyMaxError + " " + qty[1] + " ( " + fields[3] + " )" );
			NewQuantity.value = qty[1];
			return;
		}
		dbUpdatedOrder = fields[0] + "|"+NewQuantity.value + "|" +fields[2] + "|" +fields[3] + "|" +fields[4] + "|" +fields[5] + "|" +fields[6];
		strNewOrder = "Order." + OrderItem;
		DeleteCookie(strNewOrder, "/");
		SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
		location.href=location.href;      
	}
}
//---------------------------------------------------------------------
// FUNCTION:    getUniqueId
// PARAMETERS:  Null
// RETURNS:     a 11 character unique Id (time based) 
//---------------------------------------------------------------------
function getUniqueId()
{
	var retval = '';
	var ConvArray = new initArray(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
	var tmpnum, i = 0;
	var value = new Date().getTime();
	var intnum = parseInt(value,10);
	if (isNaN(intnum)) {
		retval = 'NaN';
	} else 
	{
		while (intnum > 0.9)
		{
			i++;
			tmpnum = intnum;
			// cancat return string with new digit:
			retval = ConvArray[tmpnum % 16] + retval;  
			intnum = Math.floor(tmpnum / 16);
			if(i > 100)
			{
				// break infinite loops
				retval = 'NaN';
				break;
			}
		}
	}
	return retval;
}

function GetAdditionalCountryShipping( cncode )
{
  if( cncode != "" )
  {
	var as = "";    
	var ss = as.split(";");
	for( var i=0; i<ss.length; i+=2 )
	{
		  if( ss[i] == cncode )
			return eval( ss[i+1] );
	} 
  }
  return 0.00;
}

function GetCountryShippingVAT( cncode, defvalue )
{
  if( cncode != "" )
  {
	var as = "";    
	var ss = as.split(";");
	for( var i=0; i<ss.length; i+=2 )
	{
		  if( ss[i] == cncode )
			return eval( ss[i+1] );
	} 
  }
  return defvalue;
}

// Shipment values
shipments[0] = new createShipment("LETTRE PRIORITAIRE / LETTRE MAX ET COLISSIMO","",0.0,"FR")
shipments[0].weight_limits   = new initArray(10.000,30.000,50.000,100.000,200.000,250.000,300.000,500.000,1000.000,2000.000,3000.000,4000.000,5000.000,8000.000);
shipments[0].weight_amounts  = new initArray(1.75,1.90,2.50,3.00,3.50,3.75,4.00,5.90,7.00,7.90,8.50,10.00,12.00,13.00);
shipments[1] = new createShipment(" LETTER OR COLISSIMO INTERNATIONAL EMS","COLISSIMO INTERNATIONAL EMS&#160;  2 / 5 WORKING DAYS",0.0,"DE AD AT BE HR DK ES FI GR GP GF HU IE IT LU MQ MU YT MD MC MN MS MZ MM NP NA NR NI NE NG NU NO NC NZ NL PL PF PT CZ RE RO GB SI SK SE CH UA VA YU")
shipments[1].fixed_limits   = new initArray(10.00,30.00,50.00,100.00,200.00,250.00,300.00,500.00,1000.00,2000.00,3000.00,4000.00);
shipments[1].fixed_amounts  = new initArray(2.20,2.50,2.70,3.00,4.00,4.50,5.00,6.50,17.90,19.45,23.05,26.65);
shipments[1].weight_limits   = new initArray(10.000,30.000,50.000,100.000,200.000,250.000,300.000,500.000,1000.000,1500.000,2000.000,3000.000,4000.000,5000.000);
shipments[1].weight_amounts  = new initArray(2.20,2.50,2.70,3.00,4.00,4.50,5.00,5.50,6.90,9.00,19.45,23.05,26.65,36.65);

//---------------------------------------------------------------------
// FUNCTION:    GetShipmentPrice
// PARAMETERS:  country code (cc) and shipment index (n)
// RETURNS:     shipment price according to the g_SubTotalCost and g_TotalWeight of the order
//---------------------------------------------------------------------
function GetShipmentPrice(cc, n)
{
	var shipmentprice = 0.0;
  if( shipments.length > 0 ) 
  {
    if( !n || n >= shipments.length )
      n = 0;
    if( shipments[n].hasCountry( cc ) )
		{
//	    shipmentprice = shipments[n].getFixedShippingAmount( g_SubTotalCost ) + shipments[n].getWeightShippingAmount( g_TotalWeight );	
			var fixed = shipments[n].getFixedShippingAmount( g_SubTotalCost );
			var weight = 0;
			if( g_TotalWeight > 0 )	// correctif 3.16 pour le cas où le poids total est vide où on considère à présent qu'on applique aucun frais de port
				weight = shipments[n].getWeightShippingAmount( g_TotalWeight );
			if( ( fixed == 0.0 && shipments[n].fixed_limits && shipments[n].fixed_limits.length > 1 ) ||
			    ( weight == 0.0 && shipments[n].weight_limits && shipments[n].weight_limits.length > 1 ) ) {
			  // free shipping price reached (because at least 2 limits defined and a zero value returned)
				shipmentprice = 0.0;
			} else
				shipmentprice = fixed + weight;
		}
  }	
	return shipmentprice;
}
//---------------------------------------------------------------------
// FUNCTION:    GetShipmentVAT
// PARAMETERS:  shipment index (n)
// RETURNS:     shipment VAT rate
//---------------------------------------------------------------------
function GetShipmentVAT(n)
{
	var shipmentvat = 0.0;
  if( shipments.length > 0 ) 
  {
    if( n == null || n >= shipments.length )
      n = 0;
	  if( n < 0 ) {
			shipmentvat = TaxRate;
		} else if( shipments[n] ) 
			shipmentvat = shipments[n].vatrate;
  }	
	return shipmentvat;
}
//---------------------------------------------------------------------
// FUNCTION:    generateCountryShipments
// PARAMETERS:  country code (cc) and selected shipment index (shipmentsel)
// RETURNS:     string containing the HTML code of shipments' choices
//---------------------------------------------------------------------
function generateCountryShipments(cc, shipmentsel)
{
  var html = "", bHasShipment = false, i;
  var fixedship = CalculateFixedShipping();
  if( shipments.length >= 1 ) // at least one shipment has in order to be defined to display anything
  {		
		if( !cc || cc == "" ) cc = DefaultCountry; 
		cc = cc.substring(0,2);	
		// if only one shipment is defined with all countries by default (i.e. a V2 website) then we return a non-empty result (a white space char  in order not to display this shipment name & info but just the "continue" button for V2 user compatibility
		if( shipments.length == 1 && shipments[0].countries == 'ALL' ) 
			return " ";
			
		if( !shipmentsel || shipmentsel >= shipments.length )
			shipmentsel = 0;
		if( !(shipments[shipmentsel].hasCountry( cc )) )
		{
			for(i=0; i<shipments.length; i++)
				if( shipments[i].hasCountry( cc ) )
				{
					shipmentsel = i;
					break;
				}
		}
		
	html += '<table border="0" cellpadding="0" cellspacing="2"><tr><td colspan="2">&nbsp;</td></tr>';
	for(i=0; i<shipments.length; i++)
      if( shipments[i].hasCountry( cc ) )
      {
        var totalshipping = shipments[i].getFixedShippingAmount( g_SubTotalCost ) + shipments[i].getWeightShippingAmount( g_TotalWeight );
		html += '<tr><td valign="top"><input type="radio" name="'+OutputOrderShipment+'" value="' + i + '" onclick="javascript:RefreshShippingPrice(' + i + ')" ';		
        if( i == shipmentsel ) 
				{ 
					html += 'checked'; 
					CurrentShipment = i;
					bHasShipment = true;
				}
		if( SHIPPINGDETAILS ) {
			html += '></td><td><b>' + shipments[i].name + '</b> (' + AddMonetarySymbol(moneyFormat(totalshipping)) + 
															     ' + ' + AddMonetarySymbol(moneyFormat(fixedship)) + 
															     ' + ' + AddMonetarySymbol(moneyFormat(GetAdditionalCountryShipping(cc))) + 
																')<br>' + shipments[i].desc + '</td></tr>';
		} else
			html += '></td><td><b>' + shipments[i].name + '</b> (' + AddMonetarySymbol(moneyFormat(totalshipping+fixedship+GetAdditionalCountryShipping(cc))) + ')<br>' + shipments[i].desc + '</td></tr>';
      }
		html += '<tr><td colspan="2">&nbsp;</td></tr></table>';
  }
	if( !bHasShipment ) 
		html = "";
  return html;
}
//---------------------------------------------------------------------
// FUNCTION:    RemoveUnsafeChars
// PARAMETERS:  string
// RETURNS:     string without any double quotes
//---------------------------------------------------------------------
function RemoveUnsafeChars(str)
{
  if( str != null )
    return str.replace( '\"', '\'\'' );		// replace double quotes with two simple quotes
  return null;
}
//---------------------------------------------------------------------
// FUNCTION:    crpt
// PARAMETERS:  string to crypt (str) & lowercase flag (lwc)
// RETURNS:     md5 encryption of a string
//---------------------------------------------------------------------
function crpt(str,lwc) 
{ 
	var res="";	if( lwc ) str = str.toLowerCase();
	if( typeof hex_md5 != "undefined" )
		res = hex_md5( str );
  return res;
}
	 
function GetCouponIndex(name)
{
	var cp = name;
	if( cp == null || name == "" )
		cp = GetCookie( "rebate" );
	if( cp )
	{
		var aCpnName = new initArray('3ddb201a9d95a8a988e2c5ba0ae0545b','d49b5e7b7b89f94aa07b18795ac9ed1a','83125a3956a105c4914ec2460e8650b4','fd9025e5e52304b012fcdb884e2f45de','96825d4cebb7b9176184cd6eff6c16e9','14e90c57e858de14d734f0ee216e0908');
		for( var i=0; i<aCpnName.length; i++ )
		  if( aCpnName[i] == crpt( cp, RebateIgnoreCase, 4 ) )
			  return i;
	}
	return -1;
}

function GetCouponPrice()
{
	var aCpnPrice = new initArray(7.00,7.00,7.90,10.00,5.00,13.00);
	var i = GetCouponIndex();
	if( i >= 0 )
	  return aCpnPrice[ i ];
	return 0.0;
}

function ChangeCoupon()
{
	var scouponval = "";
    var elt = document.getElementById("rebate");
	if( elt )
       scouponval = elt.value;
	if( scouponval != "" )
	{
		var i = GetCouponIndex( scouponval );
		if( i < 0 )
		{
				alert(strRebateError);
				elt.focus();
				return false;
		}
		SetCookie( "rebate", scouponval );
	}
	else
	{
		SetCookie( "rebate", scouponval );
		DeleteCookie( "rebate", "/" );
	}
	// recalc & update
  location.href=location.href;      
}
//---------------------------------------------------------------------
// 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 fTax2          = 0;    //Shipping Tax amount
	var fShipping      = InitialShippingAmount;    //Shipping amount
	var fShippingWeight = 0;   //Shipping weight
	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 fCoupon 			 = 0.0;  // MODIF REBATE
	var sif, strREF="";
	var qtyMax = -1;

	SetCookie("OrderId", getUniqueId(), null, "/");

	iNumberOrdered = GetCookie("NumberOrdered");
	if( iNumberOrdered == null )
		iNumberOrdered = 0;

	if( bDisplay )
		strOutput = "<center><TABLE CLASS=\"nopcart\"><TR>" +
								"<TD CLASS=\"nopheader\"><B>"+strILabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
								(DisplayShippingColumn?"<TD CLASS=\"nopheader\"><B>"+strSLabel+"</B></TD>":"") +
								"<TD CLASS=\"nopheader\"><B>"+strRLabel+"</B></TD></TR>";

	if ( iNumberOrdered == 0 ) {
		strOutput += "<TR><TD COLSPAN=6 CLASS=\"nopentry\"><CENTER><BR><B>" + strEmptyCart + "</B><BR><BR></CENTER></TD></TR>";
	}
	g_TotalWeight = 0.0;
	g_SubTotalCost = 0.0;

	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 ); 				 //Shipping weight
		fields[6] = database.substring( Token5+1, database.length ); //Additional Information		

		sif = fields[0].split('^');
		if( sif.length > 1 )
			strREF = sif[1];
		else
			strREF = sif[0];
	
// {		 3.1 qty bugfix
//		bNoQtyUpdate = ( fields[6].indexOf("|qty=1", 0) >= 0 );
// }
		k = fields[6].indexOf("|qty=", 0);
		if(k >= 0)
		{
			qtyMax = parseInt( fields[6].substring( k+5 ) );
			fields[6] = fields[6].substring( 0, k );
		}	
// {		 3.1 qty bugfix
		bNoQtyUpdate = ( qtyMax == 1 );
// }
		fTotal += (parseInt(fields[1]) * parseFloat(fields[2]) );
		fShipping += (parseInt(fields[1]) * parseFloat(fields[4]) );
		if( fields[5] && fields[5].length > 0 )
		{
			fShippingWeight += (parseInt(fields[1]) * parseFloat(fields[5]) );
			g_TotalWeight = fShippingWeight;
		}
		g_SubTotalCost = fTotal;

		// TAX on shipping
		if( TaxOnShipping <= 0.0 || TaxOnShipping == TaxRate )
		{
			if( TaxOnShipping == TaxRate )
				fTax = fTotal + fShipping
			else
				fTax = fTotal;

			if( TaxIncluded )
				fTax = fTax - fTax / ( 1.00 + TaxRate )
			else
				fTax = (fTax * TaxRate);
			fTax2 = 0.0;
		}
		else
		{
			if( TaxIncluded )
			{
				fTax = fTotal - fTotal / ( 1.00 + TaxRate );
				fTax2 = fShipping - fShipping / ( 1.00 + TaxOnShipping );
			}
			else
			{
				fTax = (fTotal * TaxRate);
				fTax2 = (fShipping * TaxOnShipping);
			}
		}
		strTotal    = moneyFormat(fTotal, '.');
		strTax      = moneyFormat(fTax, '.');
		strShipping = moneyFormat(fShipping, '.');
		if( bDisplay ) 
		{
			if( DisplayItemLinks ) 
			{
				var url = "";
				var pidx ="";
				database = sif[0];
				Token0 = database.indexOf("-", 0);
				url = CatalogPath[ eval( database.substring( 0, Token0 ) ) - 1 ];

				// remove leading zeros (JS bug with eval)
				pidx = database.substring( Token0+1, database.length );
				while( pidx.substring( 0, 1 ) == '0' )
						pidx = pidx.substring( 1, database.length );
				Token0 = eval( pidx );
				if( (Token0 > 1) || (url.substring( url.length - 4 ) == "page" ) )
					url += pidx;
				url += htmlExt;
				strOutput += "<TR><TD CLASS=\"nopentry\">"  + strREF + "</TD><TD CLASS=\"nopentry\"><a href=\"" + url + "\">" + fields[3] + "</a>";
			}
			else
				strOutput += "<TR><TD CLASS=\"nopentry\">"  + strREF + "</TD><TD CLASS=\"nopentry\">" + fields[3];
			
			if( fields[6] != "" )
			 strOutput += " - <I>"+ fields[6] + "</I></TD>";
			strOutput += "</TD>";

			if( !bNoQtyUpdate )
				strOutput += "<TD CLASS=\"nopentry\" align=\"center\"><INPUT TYPE=TEXT NAME=Q SIZE=2 VALUE=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this);\"></TD>";
			else
				strOutput += "<TD CLASS=\"nopentry\" align=\"center\">" + fields[1] + "</TD>";
			strOutput += "<TD CLASS=\"nopentry\">"+ AddMonetarySymbol(moneyFormat(fields[2])) + strPerItem +"</TD>";

			if ( DisplayShippingColumn ) 
			{
				if ( parseFloat(fields[4]) > 0 )
					strOutput += "<TD CLASS=\"nopentry\">"+ AddMonetarySymbol(moneyFormat(fields[4])) + strPerItem +"</TD>";
				else if( parseFloat(fields[5]) > 0 && WeightUnit != "" )
				{
					var sx = parseInt(fields[1]) * parseFloat(fields[5]);
					strOutput += "<TD CLASS=\"nopentry\">" + sx + WeightUnit + "</TD>";
				}
				else
					strOutput += "<TD CLASS=\"nopentry\">" + strNotApplicable + "</TD>";
			}
			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=\"" + strREF + "\">";
			 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=\"" + RemoveUnsafeChars( fields[3] ) + "\">";
			 strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
			 strOutput += "<input type=hidden name=\"" + "USC" + strFooter + "\" value=\"" + fields[5] + "\">";
			 strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[6] + "\">";
		}
	}
 
 	if( UseRebate )
	{
		fCoupon = GetCouponPrice();
		if( fCoupon < 0 )
			fCoupon = -1 * (fTotal + fShipping + fTax + fTax2 ) * fCoupon;
	}
	g_TotalCost = (fTotal + fShipping + fTax + fTax2 - fCoupon);
	g_SubTotalCost = fTotal;
	g_TotalShipping = fShipping;
	 
	if ( bDisplay ) 
	{
		// strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=4><B>"+strSUB+"&nbsp;</B></TD>";
		// strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2><B>" + AddMonetarySymbol(moneyFormat(fTotal)) + "</B></TD>";
		// strOutput += "</TR>";
		if ( false ) { //DisplayShippingRow ) {
			 strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=4><B>"+strSHIP+"&nbsp;</B></TD>";
			 strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2><B>" + AddMonetarySymbol(moneyFormat(fShipping)) + "</B></TD>";
			 strOutput += "</TR>";
		}
		if ( false ) { // DisplayTaxRow ) {
			 strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=4><B>"+strTAX+"&nbsp;</B></TD>";
			 strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2><B>" + AddMonetarySymbol(moneyFormat(fTax)) + "</B></TD>";
			 strOutput += "</TR>";
		}
		strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=4><B>"+strTOT+"&nbsp;</B></TD>";
	//      strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2><B>" + AddMonetarySymbol(moneyFormat(g_TotalCost)) + "</B></TD>";
		strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2><B>" + AddMonetarySymbol(moneyFormat(fTotal)) + "</B></TD>";
		strOutput += "</TR>";
		strOutput += "</TABLE></center>";

		if( UseRebate && iNumberOrdered > 0 )
		{
			strOutput += "<center><br><table cellspacing=0 cellpadding=0 border=0><tr><td>";
			var s = GetCookie( "rebate" );
			if( s == null )
				s = "";
			strOutput += ""+strRebateFormLabel+"&nbsp;</td><td><input type=\"input\" name=\"rebate\" onChange=\"ChangeCoupon()\" id=\"rebate\" value=\"" + s + "\">";
			strOutput += "<input class=\"nopbutton\" name=\"cvalidate\" onclick=\"ChangeCoupon()\" type=\"button\" value=\"OK\">";

			if( fCoupon > 0 )
			{
				fCoupon = GetCouponPrice();
				if( fCoupon < 0 )
				{
					fCoupon = fCoupon * 100;
					strOutput += "</tr><tr><td>&nbsp;</td><td align='left'>"+strRebateTotal+" : <b>"+fCoupon+"%</b>";
				}
				else
					strOutput += "</tr><tr><td>&nbsp;</td><td align='left'>"+strRebateTotal+" : <b>"+AddMonetarySymbol(moneyFormat(fCoupon))+"</b>";
			}
			strOutput += "</td></tr></table></center>";
		}

		if ( HiddenFieldsToCheckout ) 
		{
			 strOutput += "<input type=\"hidden\" name=\""+OutputOrderShipping+"\" value=\""+ moneyFormat(fShipping, '.') + "\">";
//         	strOutput += "<input type=\"hidden\" name=\"shipping2\" value=\""+ moneyFormat(fShipping, '.') + "\">";
			 strOutput += "<input type=\"hidden\" name=\""+OutputOrderTotal+"\"    value=\""+ moneyFormat(g_TotalCost, '.') + "\">";
		}
	}
	document.write(strOutput);
	//	 alert( 'weight=' + g_TotalWeight + ' / amount = ' + g_SubTotalCost );
	document.close();
}
/*
function DisplayBillingInfo() {
   var strOutput = GetCookie("OrderComment");
   document.open();
   if (!strOutput) {
      document.writeln( "<p>" + strNoComment + "</p>" );
   } else
   {
      document.writeln( "<p>" + strOutput + "</p>" );
      document.writeln( "<input type=hidden name=\"comment\"    value=\""+ strOutput + "\">" );
   }
   document.close();
}

function GetOrderAmount( excludeShipping )
{
  var amount = "";
  if( excludeShipping == 1 ) {
    amount = GetCookie("OrderSubtotal");
  } else
  	amount = GetCookie("OrderTotal");
  return( amount );
}
*/
//---------------------------------------------------------------------
// FUNCTION:    ValidateCart
// PARAMETERS:  Form to validate
// RETURNS:     true/false
// PURPOSE:     Validates the managecart form
//---------------------------------------------------------------------
function ValidateCart( theForm ) 
{
	if( MinimumOrder >= 0.01 ) {
		if( g_TotalCost < MinimumOrder ) {
			alert( MinimumOrderPrompt );
			return false;
		}
	}
	if( MaximumOrder >= 0.01 ) {
		if( g_TotalCost > MaximumOrder ) {
			alert( MaximumOrderPrompt );
			return false;
		}
	}
	if( MinimumOrderWeight >= 0.01 ) {
		if( g_TotalWeight < MinimumOrderWeight ) {
			alert( MinimumOrderWeightPrompt );
			return false;
		}
	}
	if( MaximumOrderWeight >= 0.01 ) {
		if( g_TotalWeight > MaximumOrderWeight ) {
			alert( MaximumOrderWeightPrompt );
			return false;
		}
	}
	if( UseRebate )	{
		if( theForm.rebate ) 
		{
			var s = theForm.rebate.value;
			if ( s != null && s != "" && strRebateError != "" )
			{	
				if( GetCouponIndex( s ) < 0 ) {
					alert(strRebateError);
					return false;
				}
				else if( g_TotalCost < MinimumOrder ) {
					alert( MinimumOrderPrompt );
					return false;
				}
			}					
		}
	}
	SetCookie("OrderTotal", theForm.TOTAL.value, null, "/");	
  return true;
}
//---------------------------------------------------------------------
// FUNCTION:    CheckoutCart
// PARAMETERS:  Null
// RETURNS:     Product Table Written to Document
// PURPOSE:     Draws current cart product table on HTML checkout page
//---------------------------------------------------------------------
function CheckoutCart( bHide, paypalcart, bcalc ) 
{
	var iNumberOrdered = 0;    //Number of products ordered
	var fTotal         = 0;    //Total cost of order
	var fTax           = 0;    //Tax amount
	var fTax2          = 0;    //Shipping Tax amount
	var fShipping      = InitialShippingAmount;    //Shipping amount
	var fShippingWeight = 0;   // Shipping weight
	var strTotal       = "";   //Total cost formatted as money
	var strTax         = "";   //Total tax formatted as money
	var strTax2        = "";   //Shipping tax formatted as money
	var strShipping    = "";   //Total shipping formatted as money
	var strOutput      = "";   //String to be written to page
	var strPP          = "";   //Payment Processor Description Field
	var bDisplay 	  = (bHide != true);
	var fCoupon      = 0;		// MODIF REBATE
	var sif, strREF="";
	var couponInfo = "";
	
	g_TotalWeight = 0.0;
	g_SubTotalCost = 0.0;
	iNumberOrdered = GetCookie("NumberOrdered");
	if( iNumberOrdered == null )
		iNumberOrdered = 0;
	if( bDisplay )
		strOutput = "<TABLE CLASS=\"nopcart\"><TR>" +
								"<TD CLASS=\"nopheader\"><B>"+strILabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strDLabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strQLabel+"</B></TD>" +
								"<TD CLASS=\"nopheader\"><B>"+strPLabel+"</B></TD>" +
								(DisplayShippingColumn?"<TD CLASS=\"nopheader\"><B>"+strSLabel+"</B></TD>":"") +
								"</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] = RemoveUnsafeChars( database.substring( Token2+1, Token3 ) );          // Product Name/Description
		fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
		fields[5] = database.substring( Token4+1, Token5 );          // Shipping Cost
		fields[6] = RemoveUnsafeChars( database.substring( Token5+1, database.length ) ); //Additional Information
		fields[6] = fields[6].split("|qty=")[0]; // remove quantity flag info (use only to indicate that quantity is fixed to 1)

		sif = fields[0].split('^');
		if( sif.length > 1 )
			strREF = sif[1];
		else
			strREF = sif[0];
		
		fTotal += (parseInt(fields[1]) * parseFloat(fields[2]) );
		fShipping += (parseInt(fields[1]) * parseFloat(fields[4]) );
		if( fields[5] && fields[5].length > 0 )
			fShippingWeight += (parseInt(fields[1]) * parseFloat(fields[5]) );

		if( bDisplay ) 
		{
			 strOutput += "<TR><TD CLASS=\"nopentry\">"  + strREF + "</TD>";
			 if( fields[6] == "" )
					strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + "</TD>";
			 else
					strOutput += "<TD CLASS=\"nopentry\">"  + fields[3] + " - <I>"+ fields[6] + "</I></TD>";
			 
			 strOutput += "<TD CLASS=\"nopentry\">" + fields[1] + "</TD>";
			 strOutput += "<TD CLASS=\"nopentry\">"+ AddMonetarySymbol(moneyFormat(fields[2])) + strPerItem +"</TD>";
			 if( DisplayShippingColumn ) 
			 {
					if( parseFloat(fields[4]) > 0 )
						 strOutput += "<TD CLASS=\"nopentry\">"+ AddMonetarySymbol(moneyFormat(fields[4])) + strPerItem +"</TD>";
					else if( parseFloat(fields[5]) > 0 && WeightUnit != "" )
					{
						 var sx = parseInt(fields[1]) * parseFloat(fields[5]);
						 strOutput += "<TD CLASS=\"nopentry\">" + sx + WeightUnit + "</TD>";
					}
					else
						 strOutput += "<TD CLASS=\"nopentry\">" + strNotApplicable + "</TD>";
			 }
			 strOutput += "</TR>";
		}

		if ( AppendItemNumToOutput )
			 strFooter = i;
		else
			 strFooter = "";

		strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemId:OutputItemId) + strFooter + "\" value=\"" + strREF + "\">";
		strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemQuantity:OutputItemQuantity) + strFooter + "\" value=\"" + fields[1] + "\">";
		strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemPrice:OutputItemPrice) + strFooter + "\" value=\"" + fields[2] + "\">";
		strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemName:OutputItemName) + strFooter + "\" value=\"" + RemoveUnsafeChars(fields[3]) + "\">";
		strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemShipping:OutputItemShipping) + strFooter + "\" value=\"" + fields[4] + "\">";
		if( bHide && fields[6] != "" ) // Paypal
		{
			strOutput += "<input type=hidden name=\"" + ((paypalcart)?PPOutputItemAddtlInfo:OutputItemAddtlInfo) + strFooter + "\" value=\"" + fields[6] + "\">";
			strOutput += "<input type=hidden name=\"on0_" + strFooter + "\" value=\"Info\">";
		}
	}

	g_TotalWeight = fShippingWeight;
	g_SubTotalCost = fTotal;

	// rebate
	if( UseRebate )
	{
		fCoupon = GetCouponPrice();
		if( fCoupon < 0 ) // negative means a rebate percentage that we need to convert to a rebate amount
		{
			couponInfo = "" + (-100 * fCoupon) + "% ";
			fCoupon = -1 * fTotal * fCoupon;
		}
		g_SubTotalCost -= fCoupon;

	}
	if( DisplayTaxRow ) 
	{
		// TAX on shipping
		if( TaxOnShipping <= 0.0 || TaxOnShipping == TaxRate )
		{
			if( TaxOnShipping == TaxRate )
				fTax = g_SubTotalCost + fShipping
			else
				fTax = g_SubTotalCost;

			if( TaxIncluded )
				fTax = fTax - fTax / ( 1.00 + TaxRate )
			else
				fTax = (fTax * TaxRate);
			fTax2 = 0.0;
		}
		else
		{
			if( TaxIncluded )
			{
				fTax = g_SubTotalCost - g_SubTotalCost / ( 1.00 + TaxRate );
				fTax2 = fShipping - fShipping / ( 1.00 + TaxOnShipping );
			}
			else
			{
				fTax = (g_SubTotalCost * TaxRate);
				fTax2 = (fShipping * TaxOnShipping);
			}
		}
	}
	strTax = moneyFormat(fTax, '.');
	strTax2 = moneyFormat(fTax2, '.');
	strShipping = moneyFormat(fShipping, '.');
	if( paypalcart )
	 strOutput += "<input type=hidden name=\"shipping_1\" value=\"" + strShipping + "\">";

	if( UseRebate && fCoupon > 0.0 ) // rebate amount valid
	{
		var s = GetCookie( "rebate" );
		if( DisplayOrderRebate )
			couponInfo += "(" + s + ")";
		if( s == null )
			s = "";
		s = moneyFormat(fCoupon,'.') + "(" + s + ")";
		if( !paypalcart )
			strOutput += "<input type=\"hidden\" name=\"rebate\" value=\"" + s + "\">";
	}
	if( bDisplay ) 
	{
		// Order SUBTOTAL and associated Taxes
		var lblSub = ""+strSUB+"&nbsp;";
		var valSub = ""+AddMonetarySymbol(moneyFormat(fTotal));			

		if( UseRebate && fCoupon > 0 )
		{
			lblSub += "<BR>"+strRebateTotal+"&nbsp;"+couponInfo+"&nbsp;";
			valSub += "<BR>- " + AddMonetarySymbol(moneyFormat(fCoupon));
			if( DisplayTaxRow && !TaxIncluded && fTax > 0 ) 
			{
				strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>"+lblSub+"</TD><TD align='right' CLASS=\"noptotal\" COLSPAN='2'>"+valSub+"</TD></TR>";
				strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>" + strSUB2 + "&nbsp;";
				strOutput += "<BR>" + strTAX + " (" + taxFormat(TaxRate) + "%)&nbsp;</TD>";
				strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN=2>" + AddMonetarySymbol(moneyFormat(g_SubTotalCost));
				strOutput += "<BR>" + AddMonetarySymbol(moneyFormat(fTax)) +"</TD>";
				strOutput += "</TR>";
			}			
			else
				strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>"+lblSub+"</TD><TD align='right' CLASS=\"noptotal\" COLSPAN='2'>"+valSub+"</TD></TR>";
		}	
		else
		{
			if( DisplayTaxRow && !TaxIncluded && fTax > 0 ) 
			{
				lblSub += "<BR>"+strTAX+" ("+taxFormat(TaxRate)+"%)&nbsp;";
				valSub += "<BR>"+AddMonetarySymbol(moneyFormat(fTax));
			}			
			strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>"+lblSub+"</TD><TD align='right' CLASS=\"noptotal\" COLSPAN='2'>"+valSub+"</TD></TR>";
		}
		// SHIPPING total and associated Taxes			
		lblSub = "";
		valSub = "";			
		if( DisplayShippingRow ) 
		{
			lblSub += ""+strSHIP+"&nbsp;";
			valSub += ""+AddMonetarySymbol(moneyFormat(fShipping));
		}
		if( DisplayTaxRow && !TaxIncluded && fTax2 > 0 ) 
		{
			if( DisplayShippingRow )
			{
				lblSub += "<BR>";
				valSub += "<BR>";			
			}
			lblSub += ""+strTAX+" ("+taxFormat(TaxOnShipping)+"%)&nbsp;";
			valSub += ""+AddMonetarySymbol(moneyFormat(fTax2));
		}
		if( lblSub != "" )
			strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>"+lblSub+"</TD><TD align='right' CLASS=\"noptotal\" COLSPAN='2'>"+valSub+"</TD></TR>";
		
		// TOTAL
		strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3><B>"+strTOT+"&nbsp;</B></TD>";
		if( TaxIncluded ) {
			strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN='2'><B>" + AddMonetarySymbol(moneyFormat((fTotal + fShipping - fCoupon))) + "</B></TD>";
		} else
			strOutput += "<TD align='right' CLASS=\"noptotal\" COLSPAN='2'><B>" + AddMonetarySymbol(moneyFormat((fTotal + fShipping + fTax + fTax2 - fCoupon))) + "</B></TD>";
		strOutput += "</TR>";

		// Taxes included
		if( DisplayTaxRow && TaxIncluded )
		{
			if( fTax > 0 || fTax2 > 0 )
			{
				var lblTaxes = "", valTaxes = "";
				if( fTax > 0 ) 
				{
					lblTaxes += "" + strTAX + " (" + taxFormat(TaxRate) + "%)&nbsp;";
					valTaxes += AddMonetarySymbol(moneyFormat(fTax));
				}
				if( fTax2 > 0 ) 
				{
					if( fTax > 0 )
					{
						lblTaxes += "<BR>";
						valTaxes += "<BR>";
					}
					lblTaxes += ""+strTAX+" ("+taxFormat(TaxOnShipping)+"%)&nbsp;";
					valTaxes += AddMonetarySymbol(moneyFormat(fTax2));
				}
				strOutput += "<TR><TD align='right' CLASS=\"noptotal\" COLSPAN=3>" + lblTaxes + "</TD><TD align='right' CLASS=\"noptotal\" COLSPAN='2'>" + valTaxes + "</TD>";
			}
		}
		strOutput += "</TABLE>";
	}

  strTotal = moneyFormat(fTotal - fCoupon, '.'); // MODIF REBATE
	strOutput += "<input type=\"hidden\" name=\""+OutputOrderSubtotal+"\" value=\""+ strTotal + "\">";
  strOutput += "<input type=\"hidden\" name=\""+OutputOrderShipping+"\" value=\""+ strShipping + "\">";
	strOutput += "<input type=\"hidden\" name=\""+OutputOrderShipment+"\" value=\""+ CurrentShipment + "\">"; 
	if( DisplayTaxRow && !TaxIncluded )
	{
	  if( fTax > 0 || fTax2 > 0 )
		{
		  if(paypalcart) {
				strOutput += "<input type=\"hidden\" name=\"tax_cart\" value=\""+ moneyFormat(fTax+fTax2, '.') +"\">";
			} else
				strOutput += "<input type=\"hidden\" name=\"tax\" value=\""+ moneyFormat(fTax+fTax2, '.') +"\">";
		  if( fTax > 0 )
				strOutput += "<input type=\"hidden\" name=\""+OutputOrderTax1+"\" value=\""+ moneyFormat(fTax, '.') + "(" + ( TaxRate * 100 ) + "%)\">";
		  if( fTax2 > 0 )
				strOutput += "<input type=\"hidden\" name=\""+OutputOrderTax2+"\" value=\""+ moneyFormat(fTax2, '.') +"("+ ( TaxOnShipping * 100 ) + "%)\">";
		}
	}
  strOutput += "<input type=\"hidden\" name=\""+OutputOrderTotal+"\" value=\""+ moneyFormat(g_TotalCost, '.') + "\">";
  if( !bcalc )
	{
		document.open();
		document.write(strOutput);
		document.close();
		//return strOutput;
	}

	g_TotalCost = fTotal + fShipping - fCoupon;	// MODIF REBATE
	if( !TaxIncluded )
		g_TotalCost += ( fTax + fTax2 );	
	g_SubTotalCost = fTotal;
	g_TotalShipping = fShipping;
	return g_TotalCost;
}
//---------------------------------------------------------------------
// FUNCTION:    showElement
// PARAMETERS:  HTML object (e) & boolean show flag (bshow)
// PURPOSE:     Show or Hide an HTML object
//---------------------------------------------------------------------
function showElement(e, bshow)
{
  if( e ) {
    if( bshow ) {
   	  e.style.visibility='visible'; 
      e.style.display='block';
    } else {
      e.style.visibility='hidden';
      e.style.display='none';
    }
  }
}
//---------------------------------------------------------------------
// FUNCTION:    DisplayItemInfo
// PARAMETERS:  item index (nid) & types/size/colors (a1/a2/a3) & show flags
// PURPOSE:     Display info of a  catalog item 
//---------------------------------------------------------------------
function DisplayItemInfo( nid, a1, a2, a3, bshowstock, bshowref, bshowqty )
{
  var e,s,t,nx,idx,i, ok = a1 >=0 && a2 >=0 && a3 >=0;
	var bshowqty = 0;
	if( ok )
	{
	  var asel = new Array;
	  asel[0] = 0;  
	  asel[1] = (a1>0)?0:-1;  
	  asel[2] = (a2>0)?0:-1;
	  asel[3] = (a3>0)?0:-1;  
	    
	  for( i=1; i<=3; i++ )
	  if( asel[i] >= 0 )
		{	
		  e = document.getElementById( nid + '-' + i );
	    if ( e ) {
				s = e.value.split('^');
				if( s[1] )
	 	      asel[ i ] = parseInt(s[1],10);
	 	  }
	  }
	  idx = 0.0;
		//alert('color=' + asel[1] + ' size=' + asel[2] + ' type=' + asel[3]);
	  if ( asel[1] >= 0 ) {
		  if( asel[2] >= 0 ) {
		    if( asel[3] >= 0 ) {
	        idx = asel[1] + (a1 * asel[2]) + (a2 * a1 * asel[3]);
	      } else
	        idx = asel[1] + (a1 * asel[2]);
		  } else {
		    if( asel[3] >= 0 ) {
	        idx = asel[1] + (a1 * asel[3]);
	      } else
	        idx = asel[1];
	    }
	  } else {
		if( asel[2] >= 0 ) {
	    if( asel[3] >= 0 ) {
	      idx = asel[2] + (a2 * asel[3]);
	    } else
	      idx = asel[2];
		} else
		  idx = asel[3];
	  }
	  s = nid.split('-');
	  nx = parseInt(s[1],10) - 1; // get item index
	  for( i=0; i<catprices[nx].length; i++ ) 
	  {  
	    e = document.getElementById( nid + '-p' + i );
	    if( e ) 
	      showElement( e, (i == idx) ); 
	    e = document.getElementById( nid + '-s' + i );
	    if( e )       
			  showElement( e, (i == idx) ); 
	  }
	  e = document.getElementById( nid + '-price' );
	  if( e )
	    e.value = catprices[nx][idx];
	  e = document.getElementById( nid + '-ship' );
	  if( e ) {
	    e.value = catshippings[nx][idx];
		} else {
	    e = document.getElementById( nid + '-weight' );
	    if( e )
	      e.value = catshippings[nx][idx];
		}
	  e = document.getElementById( nid + '-ref' );
	  if( e )
	    e.value = ''+nid+'^'+catreferences[nx][idx];
	  e = document.getElementById( nid + '-qtymax' );
	  if( e )
			e.value = catquantities[nx][idx];
	  e = document.getElementById( nid + '-status' );
	  if( e )
			e.value = catstatus[nx][idx];
	}
  e = document.getElementById( nid + '-qtyinfo' );
  if ( e )
	{
		var info = "", qty;
    if( bshowref == 1 )
		{		
			if( ok )
				info += "<div style='margin:0;padding:0'>" + strReferenceLabel + " " + catreferences[nx][idx] + "</div>";
			else
				info += "<div style='margin:0;padding:0'>" + strReferenceLabel + " " + (document.getElementById( nid + '-ref' ).value).split('^')[1] + "</div>";
		}
		if( bshowstock == 1 )
		{
			if( bshowqty == 1 )
			{
				if( ok ) 
					qty = catquantities[nx][idx];
				else
					qty = parseInt( document.getElementById( nid + '-qtymax' ).value );
				if( qty > 0 )
					info += "<div style='margin:0;padding:0'>" + strStockQuantityLabel + " " + qty + "</div>";
			}
			if( ok ) 
				qty = catstatus[nx][idx];
			else
				qty = parseInt( document.getElementById( nid + '-status' ).value );
			if( qty > 0 )
			{
			  info += "<table border='0' cellspacing='0' cellpadding='0'><tr>";
				if( strStockStatusLabel != "" )
					info += "<td style='padding:2px 0 0 0'>"+strStockStatusLabel+"&nbsp;</td>";
				info += "<td valign='center' style='padding:2px 4px 0px 0'><img border='0' src='../_frame/stock-" + qty + ".gif'";
				if( catstatusnames[qty] )
				{
					info += " title='" + catstatusnames[qty] + "' alt='" + catstatusnames[qty] + "' />";
					info += "</td><td style='padding:2px 0 0 0'>" + catstatusnames[qty];
				}
				else
				  info += " />";
				info += "</td></tr></table>";
			}
		}
		if( info != "" )
			info = "<div style='padding:0;margin:2px 0 2px 0'>" + info + "</div>";
		e.innerHTML = info;
	}
}

function SubmitWithEnterKey(event) 
{
  if (event.keyCode == 13) 
  {
    var e = document.getElementById('subm');
    if( e )
	  e.focus();
	return false;
  }
  return true;
}

