      // ShoppingBasket.js

      function ShoppingBasket() 
      {
         this.items = new Object();
         this.numItems = 0;
       this.deliveryCost = "0";
      }

      function ShoppingItem(itemRefId, itemNom, itemDesc, 
         itemPrice, itemQty)
      {
         this.itemRefId = itemRefId;
         this.itemNom = itemNom;
         this.itemDesc = itemDesc;
         this.itemPrice = itemPrice;
         this.itemQty = itemQty;
      }

      ShoppingItem.prototype.getItemRefId = function()
      {
         return this.itemRefId;
      }


      ShoppingItem.prototype.setItemRefId = function(itemRefId)
      {
         this.itemRefId = itemRefId;
      }

      ShoppingItem.prototype.getItemNom = function()
      {
         return this.itemNom;
      }

      ShoppingItem.prototype.setItemNom = function(itemNom)
      {
         this.itemNom = itemNom;
      }


      ShoppingItem.prototype.getItemDesc = function()
      {
         return this.itemDesc;
      }

      ShoppingItem.prototype.setItemDesc = function(itemDesc)
      {
         this.itemDesc = itemDesc;
      }


      ShoppingItem.prototype.getItemPrice = function()
      {
         return this.itemPrice;
      }

      ShoppingItem.prototype.setItemPrice = function(itemPrice)
      {
         this.itemPrice = Number(itemPrice);
      }


      ShoppingItem.prototype.getItemQty = function()
      {
         return this.itemQty;
      }

      ShoppingItem.prototype.setItemQty = function(itemQty)
      {
         this.itemQty = Number(itemQty);
      }

      ShoppingBasket.prototype.addItem = function(itemRefId, itemNom, 
         itemDesc, itemPrice, itemQty) 
      {
         if (typeof(this.items[itemRefId]) == "undefined")
         {
            this.items[itemRefId] = new 
              ShoppingItem(itemRefId,itemNom,itemDesc,itemPrice,itemQty);
            this.numItems++;
         }
         else
         {
            this.items[itemRefId].setItemQty(itemQty);
         }
      }

      ShoppingBasket.prototype.deleteItem = function(itemRefId)
      {
	
	if (typeof(this.items[itemRefId]) != "undefined")         
	{
		delete this.items[itemRefId];
        	this.numItems--;
	}
      }

      ShoppingBasket.prototype.fixDecimalPlaces = function 
         (fixNumber, decimalPlaces)
      {
         
	
	var lDiv = Math.pow(10,decimalPlaces);
         fixNumber = new String((Math.round(fixNumber * (lDiv)))/lDiv)

	 var zerosRequired;
	 var decimalPointLocation = fixNumber.lastIndexOf(".");
         if (decimalPointLocation == -1)
	 {
       		fixNumber = fixNumber + ".";
       		zerosRequired = decimalPlaces;
	}
	else
      	{
 		zerosRequired = decimalPlaces - (fixNumber.length - decimalPointLocation - 1);
       	}

         for (; zerosRequired > 0; zerosRequired--)
       	    fixNumber = fixNumber + "0";

         return fixNumber;

      }

      ShoppingBasket.prototype.getBasketHTML = function(isBasketUpdateable)
      {
         var basketHTML = "";
         if (isBasketUpdateable)
         {
            basketHTML = "<FORM name='basketForm'>";
         }
         basketHTML += "<TABLE border=0 frameborder=0 width=775 CELLSPACING='0' CELLPADDING=3><TR>";
         basketHTML += "<TD class='BasketHeading2'>Réf.</TD>";
         basketHTML += "<TD class='BasketHeading2'>Nom</TD>";
         basketHTML += "<TD class='BasketHeading2'>Description</TD>";
         basketHTML += "<TD class='BasketHeading2' ALIGN='center'>Prix</TD>";
         basketHTML += "<TD class='BasketHeading2' ALIGN='center'>Quantité</TD>";
         basketHTML += "<TD class='BasketHeading2' ALIGN='center'>Total</TD></TR>";
         var basketItem;
         var basketTotalCost = 0;
         var itemTotalCost = 0;
	 var the_string = "";

         for (basketItem in this.items)
         {
            // RefId
            basketHTML += "<TR><TD ALIGN='left' CLASS='RefId'>";
	    the_string=this.items[basketItem].getItemRefId();
            basketHTML += the_string.substring(0,3);
            basketHTML += "</TD>";

            // Nom
            basketHTML += "<TD ALIGN='left' CLASS='Nom'>";
            basketHTML += this.items[basketItem].getItemNom();
            basketHTML += "</TD>";

            // Description
            basketHTML += "<TD ALIGN='left' CLASS='Description'>";
            basketHTML += this.items[basketItem].getItemDesc();
            basketHTML += "</TD>";

            // Price
            basketHTML += "<TD ALIGN='center' CLASS='Price'>";
            basketHTML += this.items[basketItem].getItemPrice();
            basketHTML += "</TD>";

            // Qty
            basketHTML += "<TD ALIGN='center' CLASS='Price'>";

            if (isBasketUpdateable)
            {
               basketHTML += "<INPUT type=text size=2 maxlength=2 name='" + 
                  this.items[basketItem].getItemRefId() + "' ";
               basketHTML += "VALUE=" + this.items[basketItem].getItemQty();
               basketHTML += ">";
            }
            else
            {
               basketHTML += this.items[basketItem].getItemQty();
            }
            basketHTML += "</TD>";

            itemTotalCost = this.items[basketItem].getItemQty() * 
               this.items[basketItem].getItemPrice();

            basketTotalCost += itemTotalCost;

            // Total Item Price
            basketHTML += "<TD ALIGN='center' class='Price'>";
            basketHTML += this.fixDecimalPlaces(itemTotalCost, 2);
            basketHTML += "</TD>";

            basketHTML += "</TR>";
         }

         
         // Cost Summary
         basketHTML += "<TR><TD COLSPAN=5 ALIGN='right' "
            + "CLASS='BasketHeading' VALIGN='bottom' BGCOLOR='darkgray'>Sous total</TD>";
         basketHTML += "<TD ALIGN='center' CLASS='BasketSummary' VALIGN='bottom' BGCOLOR='darkgray'>" 
         basketHTML += this.fixDecimalPlaces(basketTotalCost,2);
        //  basketHTML += "</TD></TR>";
         //  basketHTML += "<TR><TD COLSPAN=5 ALIGN='right' "
            //  + "CLASS='BasketHeading'>Livraison</TD>";
        if (Number(this.deliveryCost)==0) 
        	basketHTML += "<TD ALIGN='center' class='BasketSummary'>" 
          	+ "-" + "</TD></TR>";
        else
        	basketHTML += "<TD ALIGN='center' class='BasketSummary'>" 
           	+ this.fixDecimalPlaces(Number(this.deliveryCost), 2) + "</TD></TR>";
         basketHTML += "<TR><TD COLSPAN=5 ALIGN='right' "
            + "CLASS='BasketHeading'>Total</TD>";
         basketHTML += "<TD ALIGN='center' CLASS='BasketSummary'>" 
         basketHTML += this.fixDecimalPlaces(basketTotalCost + 
				Number(this.deliveryCost), 2);
         basketHTML += "</TD></TR>";

         if (isBasketUpdateable)
         {
            basketHTML += "<TR><TD COLSPAN=6 VALIGN='bottom' BGCOLOR='darkgray'><div align='right'><span class='text'>Vous pouvez modifier les quantités, puis cliquer ";
            basketHTML += "<INPUT NAME='Submit' TYPE='submit' " 
               +"VALUE='Changer' ";
            basketHTML += "onClick='updateBasket()' ";
            basketHTML += "STYLE='background-color=\darkgray'>";
            basketHTML += "<BR>Pour effacer un produit, mettez 0 pour sa quantité" 
               +"</span></div></FORM></TD></TR></TABLE>";
         }
         return basketHTML;
      }

      ShoppingBasket.prototype.isEmpty = function()
      {
         if (this.numItems < 1)
         {
            return true;
         }
         else
         {
            return false;
         }
      }

      ShoppingBasket.prototype.setQty = function(itemRefId,itemQty)
      {
         if (itemQty < 1)
         {
            this.deleteItem(itemRefId);
         }
         else
         {
           this.items[itemRefId].setItemQty(itemQty);
         }
      }

      ShoppingBasket.prototype.updateBasketWithForm = function(basketForm)
      {
         var itemRefId;
         var numFormElements = basketForm.length;
         var basketFormElements = basketForm.elements;
         for (var elementIndex = 0; elementIndex < numFormElements; 
            elementIndex++)
         {
            if (basketFormElements[elementIndex].type == "text")
            {
               itemRefId = basketFormElements[elementIndex].name;
               itemQty = parseInt(basketFormElements[elementIndex].value);
               if (!isNaN(itemQty))
               {
                  this.setQty(itemRefId,itemQty);
               }
            }
         }
      }

      ShoppingBasket.prototype.saveBasket = function()
      {
         if (!this.isEmpty())
         {
            var basketDetails = "";
            var cookieExpires;

            for (basketItem in this.items)
            {
               basketDetails += this.items[basketItem].getItemRefId() + "`";
               basketDetails += this.items[basketItem].getItemNom() + "`";
               basketDetails += this.items[basketItem].getItemDesc() + "`";
               basketDetails += this.items[basketItem].getItemPrice() + "`";
               basketDetails += this.items[basketItem].getItemQty() + "¬";
            }

            basketDetails = 
               basketDetails.substring(0,basketDetails.length - 1);

            basketDetails = escape(basketDetails);
            var nowDate = new Date();
            nowDate.setMonth(nowDate.getMonth() + 3);
            cookieExpires = nowDate.toGMTString();

            document.cookie = "StanlowaPanier=" + basketDetails 
               + ";expires=" + cookieExpires + ";";
         }
         else
         {
            document.cookie = "StanlowaPanier= " 
               +";expires=1 Jan 2000 00:00:00";
         }
      }

      ShoppingBasket.prototype.getCookieValue = function(cookieName)
      {
         var cookieValue = document.cookie;
         var cookieRegExp = new RegExp("\\b" + cookieName + "=([^;]+)");
         cookieValue = cookieRegExp.exec(cookieValue);

         if (cookieValue != null)
         {
            cookieValue = cookieValue[1];
            cookieValue = unescape(cookieValue);
         }

         return cookieValue;
      }

      ShoppingBasket.prototype.loadBasket = function()
      {
         var basketItems;
         var basketItemNum;
         var itemDetail;
         var itemRefId = "";
         var itemNom = "";
         var itemDesc = "";
         var itemPrice = "";
         var itemQty = "";

         var basketDetails = this.getCookieValue("StanlowaPanier");
         if (basketDetails != null)
         {
            basketItems = basketDetails.split('¬');

            for (basketItemNum in basketItems)
            {
               basketItem = basketItems[basketItemNum];
               basketItem = basketItem.split('`');

               itemRefId = basketItem[0];
               itemNom = basketItem[1];
               itemDesc =basketItem[2];
               itemPrice = basketItem[3];
               itemQty = basketItem[4];
               this.addItem(itemRefId, itemNom,itemDesc,itemPrice, 
                  itemQty);
            }
         }
      }


ShoppingBasket.prototype.getTotalIncDelivery = function()
{
   var basketTotalCost = 0;
   var basketItem;
   var itemTotalCost = 0;
   
   for (basketItem in this.items)
   {
      itemTotalCost = this.items[basketItem].getItemQty() * 
         this.items[basketItem].getItemPrice();
      basketTotalCost += itemTotalCost
   }

   basketTotalCost += Number(this.deliveryCost);
   basketTotalCost = this.fixDecimalPlaces(basketTotalCost,2);
   return basketTotalCost;

}

ShoppingBasket.prototype.getHiddenInputHTML = function()
{
   var hiddenInputHTML = "";
   var basketItem;
   
   for (basketItem in this.items)
   {
      // Ref
      hiddenInputHTML += "<INPUT TYPE='hidden' NAME='"; 
      hiddenInputHTML += this.items[basketItem].getItemRefId() + "_RefId'";
      hiddenInputHTML += " value=" + this.items[basketItem].getItemRefId();
      hiddenInputHTML += ">";

      // Nom
      hiddenInputHTML += "<INPUT TYPE='hidden' NAME='"; 
      hiddenInputHTML += this.items[basketItem].getItemNom() + "_Nom'";
      hiddenInputHTML += " value=" + this.items[basketItem].getItemNom();
      hiddenInputHTML += ">";

      // Qty
      hiddenInputHTML += "<INPUT TYPE='hidden' NAME='"; 
      hiddenInputHTML += this.items[basketItem].getItemQty() + "_Qty'";
      hiddenInputHTML += " value=" + this.items[basketItem].getItemQty();
      hiddenInputHTML += ">";
   }
   
   return hiddenInputHTML;
}

ShoppingBasket.prototype.clearBasket = function()
{
   this.items = new Object();
   this.numItems = 0;
   document.cookie = "StanlowaPanier= ;expires=1 Jan 2000 00:00:00";
}

ShoppingBasket.prototype.emailBasket = function()
      {
         var emailHTML = "Quantité / Description, ";
         var emailItem;
         var emailTotalCost = 0;
         var itemTotalCost = 0;
	 var the_string = "";

         for (emailItem in this.items)
         {
            // Qty
            emailHTML += this.items[emailItem].getItemQty();
	    emailHTML += "/ ";

            // RefId
	    the_string=this.items[emailItem].getItemRefId();
            emailHTML += the_string.substring(0,3);
	    emailHTML += ", ";

            // Nom
            emailHTML += this.items[emailItem].getItemNom();
	    emailHTML += ", ";

            // Description
            emailHTML += this.items[emailItem].getItemDesc();
	    emailHTML += ", ";

            itemTotalCost = this.items[emailItem].getItemQty() * 
               this.items[emailItem].getItemPrice();

            emailTotalCost += itemTotalCost;

         }

         
         // Cost Summary
//         emailHTML += this.fixDecimalPlaces(emailTotalCost,2);

         return emailHTML;
      }