/* javascript from book examples modified for BI products


*/

var SubCat="";
var RecID="";
var vatRate = 17.5;

function doBasketPageHead(RecID)
{
  var pageText = "";
  pageText += ('<TABLE width="661" align="left"><TR><TD align="left"><p><font size="4"><B>Basket Contents</B></font></p><\/TD>');
  pageText += ('<TD align="right">');
  pageText += ('<\/TD><\/TR><\/TABLE><BR><BR>');

return pageText;
}

function ShoppingItem(itemRefId, itemSubCat, itemImgSrc, itemCat, itemPrice, itemQty)
{
  this.itemRefId = itemRefId;
  this.itemSubCat = itemSubCat;
  this.itemImgSrc = itemImgSrc;
  this.numItemLines = 0;
  this.itemPrice = new Array();
  this.itemPrice[itemCat] = Number(itemPrice);
  this.itemQty = new Array();
  this.itemQty[itemCat] = Number(itemQty);
}

ShoppingItem.prototype.getItemRefId = function()
{
  return this.itemRefId;
}

ShoppingItem.prototype.setItemRefId = function(itemRefId)
{
  this.itemRefId = itemRefId;
}

ShoppingItem.prototype.getItemSubCat = function()
{
  return this.itemSubCat;
}

ShoppingItem.prototype.setItemSubCat = function(itemSubCat)
{
  this.itemSubCat = itemSubCat;
}

ShoppingItem.prototype.getItemImgSrc = function()
{
  return this.itemImgSrc;
}

ShoppingItem.prototype.setItemImgSrc = function(itemImgSrc)
{
  this.itemImgSrc = itemImgSrc;
}

ShoppingItem.prototype.getItemPrice = function(itemCat)
{
  return this.itemPrice[itemCat];
}

ShoppingItem.prototype.setItemPrice = function(itemCat, itemPrice)
{
  this.itemPrice[itemCat] = Number(itemPrice);
}

ShoppingItem.prototype.getItemQty = function(itemCat)
{
  return this.itemQty[itemCat];
}

ShoppingItem.prototype.setItemQty = function(itemCat, itemQty)
{
  this.itemQty[itemCat] = Number(itemQty);
}

function ShoppingBasket() 
{
  this.items = new Object();
  this.numItems = 0;
  this.subTotal = "0";
  this.deliveryCost = "0";
  this.VAT = "0";
  this.totalCost = "0";
  this.address = new customerAddress();
  
}

function customerAddress()
{
    this.title = "";
    this.firstname = "";
    this.lastname = "";
    this.email = "";
    this.addr1 = "";
    this.addr2 = "";
    this.city = "";
    this.county = "";
    this.postcode = "";
    this.country = "";
}


ShoppingBasket.prototype.addItem = function(itemRefId,  
                                            itemSubCat, 
                                            itemImgSrc, 
							  itemCat,
                                            itemPrice, 
                                            itemQty) 
{
  if (itemImgSrc.substr(0,5) == "Daily")
  {	var indexRef = itemSubCat + itemImgSrc.substr(5,2); }
  else
  {
  var indexRef = itemImgSrc.replace(".jpg","");
  }
//alert("adding item **" + indexRef + "**" + itemImgSrc.substr(5,2));
  if (typeof(this.items[indexRef]) == "undefined")
  {
	// new RecID and itemLine
    this.items[indexRef] = new 
      ShoppingItem(indexRef, itemSubCat, itemImgSrc,itemCat,itemPrice,itemQty);
    this.items[indexRef].numItemLines++;
    this.numItems++;
  }
  else
  {
    if (typeof(this.items[indexRef].itemPrice[itemCat]) == "undefined")
    {
	// new line in existing image order
      this.items[indexRef].setItemPrice(itemCat,itemPrice)
      this.items[indexRef].setItemQty(itemCat,itemQty)
      this.items[indexRef].numItemLines++;
    }
    else
    {
	// update existing line in existing image order
    this.items[indexRef].setItemQty(itemCat,itemQty);
    }
  }
//  this.saveBasket();
}

ShoppingBasket.prototype.deleteItem = function(itemRefId, itemSubCat, itemCat)
{
  var indexRef = itemRefId;
  if (typeof(this.items[indexRef]) != "undefined")         
  {
    if (typeof(this.items[indexRef].itemQty[itemCat]) != "undefined")
    {
//alert("deleting " + itemRefId + "\'s " + itemCat);
      delete this.items[indexRef].itemQty[itemCat];
      delete this.items[indexRef].itemPrice[itemCat];
      this.items[indexRef].numItemLines--;
      if (this.items[indexRef].numItemLines == 0)
      { delete this.items[indexRef]; }
    this.numItems--;
    }
  }
}


ShoppingBasket.prototype.getBasketHTML = function(isBasketUpdateable)
{
  var basketHTML = "";
  var summaryHTML = "";
//  var firstItem = 0;

  if (!this.isEmpty())
  {
	// there are items to list and price up

  this.setDeliveryCost();

  if (isBasketUpdateable)
  {
      basketHTML = "<FORM name=\'basketForm\' id=\'basketForm\'>";
//alert(parent.location+ "**");
//      basketHTML += "<INPUT type=hidden name=\'XYZ" + parent.SubCat + "_" + parent.RecID +"\' ";
      basketHTML += "<INPUT type=hidden name=\'XYZ\' ";
      basketHTML += "VALUE=0>";
  }

  basketHTML += "<TABLE class=BasketTable style=\"border-top-style: solid\"><TR class=HeadTR>";
  basketHTML += "<TH class=BasketHeading width=\"200\">Image</TH>";
  basketHTML += "<TH class=BasketHeading width=\"164\">Type</TH>";
  basketHTML += "<TH class=BasketHeading width=\"100\" align=left>Price Each</TH>";
  basketHTML += "<TH class=BasketHeading width=\"75\">Quantity</TH>";
  basketHTML += "<TH class=BasketHeading width=\"100\" align=right>Total Price</TH></TR></TABLE>";

  var basketItem;
  var basketTotalCost = 0;
  var itemTotalCost = 0;
  var thumbnailSrc = "";

  for (basketItem in this.items)
  {
    // Description
    basketHTML += "<TABLE class=BasketTable style=\"border-top-style: solid\">"
    basketHTML += "<TR><TD width=\"200\" ALIGN=CENTER valign=top CLASS=ImgThumbnail";
    // find out how many item lines need spanning
	var numRows = 0;
	for (itemLine in this.items[basketItem].itemPrice)
	{
	  numRows++;
	}

    if (numRows > 1)
    {
      basketHTML += ' rowspan="' + numRows + '"';
    }

    thumbnailSrc = this.items[basketItem].getItemImgSrc();
    thumbnailSrc = thumbnailSrc.replace(".jpg","");

    basketHTML += "><P>";
    basketHTML += "<IMG src='" + thumbPath + this.items[basketItem].getItemSubCat() + thumbnailSrc +".jpg' border=1 style=\"border: 1 solid #FFFFFF\">";
    basketHTML += "<BR>";
    basketHTML += thumbnailSrc;
    basketHTML += "</P></TD>";


    for (itemLine in this.items[basketItem].itemPrice)
    {

    // Type
    basketHTML += "<TD width=\"40\" ALIGN=LEFT valign=middle CLASS=Type>";
    switch (itemLine)
    {
    case "pr96":
      basketHTML += '<A href=\"javascript:openPrintInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/p.gif\" alt=\"smaller prints96\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += '9\" x 6\" print';
      break;
    case "pr75":
      basketHTML += '<A href=\"javascript:openPrintInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/p.gif\" alt=\"smaller prints75\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += '7\" x 5\" print';
      break;
    case "pr812":
      basketHTML += '<A href=\"javascript:openMiniPosterInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/m.gif\" alt=\"mini-posters\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += '8\" x 12\" print';
      break;
    case "pr1015":
      basketHTML += '<A href=\"javascript:openMiniPosterInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/m.gif\" alt=\"mini-posters\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += '10\" x 15\" print';
      break;
    case "web":
      basketHTML += '<A href=\"javascript:openWebInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/www.gif\" alt=\"for use on websites\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += 'web rights';
      break;
    case "slide":
      basketHTML += '<A href=\"javascript:openSlideInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/s.gif\" alt=\"slide originals\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += '35mm slide';
      break;
    case "lrd":
      basketHTML += '<A href=\"javascript:openLRDInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/l.gif\" alt=\"low-res digital images\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += 'low res digital';
      break;
    case "hrd":
      basketHTML += '<A href=\"javascript:openHRDInfo();\"  target=\"_top\">';
      basketHTML += '<IMG SRC=\"images\/h.gif\" alt=\"for use on websites\" border=\"0\"><\/A>';
      basketHTML += "</TD><TD width=\"120\" ALIGN=LEFT valign=middle CLASS=Type><p>";
      basketHTML += 'high res digital';
      break;
    default:
      basketHTML += 'unknown type';
    }
    basketHTML += "</p></TD>";

    // Price
    basketHTML += "<TD width=\"100\" ALIGN=LEFT CLASS=Price>\£";
    basketHTML += this.fixDecimalPlaces(this.items[basketItem].getItemPrice(itemLine),2);
    basketHTML += "</TD>";
    // Qty
    basketHTML += "<TD width=\"75\" ALIGN=CENTER CLASS=Price>";

    if (isBasketUpdateable)
    {
      basketHTML += "<INPUT type=text size=2 maxlength=2 name='" + 
      this.items[basketItem].getItemSubCat() + "_" + 
      this.items[basketItem].getItemRefId() + "_" + itemLine + "' ";
//      alert( this.items[basketItem].getItemRefId() );
      basketHTML += "VALUE=" + this.items[basketItem].getItemQty(itemLine);
      basketHTML += ">";
    }
    else
    {
      basketHTML += this.items[basketItem].getItemQty(itemLine);
    }

    basketHTML += "</TD>";
    itemTotalCost = this.items[basketItem].getItemQty(itemLine) * 
      this.items[basketItem].getItemPrice(itemLine);

    basketTotalCost += itemTotalCost;
    // Total Item Price
    basketHTML += "<TD width=\"100\" ALIGN=RIGHT class=Price>\£";
    basketHTML += this.fixDecimalPlaces(itemTotalCost, 2);
    basketHTML += "</TD>";
    basketHTML += "</TR>";

	} // end of new line loop
  basketHTML += "</TABLE>";
  }

  this.subTotal = basketTotalCost;
  summaryHTML = this.doCostSummary(basketTotalCost);
  basketHTML += summaryHTML;

  if (isBasketUpdateable)
  {
    basketHTML += "<TABLE width=\"661\"><TR><TD align=\"right\"><p><BR>If you change the quantities, click ";
    basketHTML += "<INPUT NAME='Submit' TYPE='submit' " 
               +"VALUE='Update Quantities' ";
    basketHTML += "onClick='javascript: updateBasket();'>";
    basketHTML += "<BR>To remove an item, set its value to 0" 
               +"</p></TD></TR></TABLE></FORM>";
  }

  } // if numItems != 0

  return basketHTML;
}


ShoppingBasket.prototype.doCostSummary = function(basketTotalCost)
{
  var outputHTML = "";
  
  // Cost Summary
  outputHTML += "<TABLE class=BasketTable style=\"border-top-style: solid\">";
  outputHTML += "<TR><TD width=\"551\" ALIGN=RIGHT class=BasketSummary "
  outputHTML += "style='padding-top: 10px'>";
  outputHTML += "Sub Total</TD>";
  outputHTML += "<TD width=\"100\" ALIGN='RIGHT' CLASS= "
             + "'BasketSummary' STYLE='padding-top: 10px'>\£";
  outputHTML += this.fixDecimalPlaces(basketTotalCost,2);
  outputHTML += "</TD></TR>";
  // Delivery Cost
  outputHTML += "<TR><TD width=\"551\" ALIGN=RIGHT "
             +"CLASS='BasketSummary'>Delivery</TD>";
  outputHTML += "<TD width=\"100\" ALIGN=RIGHT class=BasketSummary>\£" 
             + this.fixDecimalPlaces(this.deliveryCost,2) + "</TD></TR>";
  // VAT
  outputHTML += "<TR><TD width=\"551\" ALIGN=RIGHT "
             + "CLASS='BasketSummary'>VAT</TD>";
  outputHTML += "<TD width=\"100\" ALIGN=RIGHT class=BasketSummary>\£";
  outputHTML += this.fixDecimalPlaces((Math.round((basketTotalCost + Number(this.deliveryCost)) * 17.5)/100), 2);
  outputHTML += "</TD></TR>";
  // Total
//  alert(Math.round((basketTotalCost + Number(this.deliveryCost)) * 17.5));
  var total = basketTotalCost + Number(this.deliveryCost) + (Math.round((basketTotalCost + Number(this.deliveryCost)) * 17.5))/100;
  outputHTML += "<TR><TD width=\"551\" ALIGN=RIGHT "
             + "CLASS='BasketSummary'>Total</TD>";
  outputHTML += "<TD width=\"100\" ALIGN=RIGHT class=BasketSummary>\£";
  outputHTML += this.fixDecimalPlaces(total, 2);
  outputHTML += "</TD></TR></TABLE>";

  return outputHTML;
}


ShoppingBasket.prototype.isEmpty = function()
{
  if (this.numItems < 1)
  {
    return true;
  }
  else
  {
    return false;
  }
}

ShoppingBasket.prototype.setQty = function(itemRefId, itemSubCat, itemCat, itemQty)
{
  var singleItems = 'weblrdhrdslide';
  var indexRef = itemRefId;
  if (itemQty < 1)
  {
    this.deleteItem(itemRefId, itemSubCat, itemCat);
  }
  else
  {
    if (singleItems.indexOf(itemCat) != -1)
	{
	  this.items[indexRef].setItemQty(itemCat, 1);
	}
    else
	{
	  this.items[indexRef].setItemQty(itemCat, itemQty);
	}
  }
}

ShoppingBasket.prototype.updateBasketWithForm = function(basketForm)
{
  var itemStr;
  var itemStrArray;
  var itemRefId;
  var itemSubCat;
  var itemLine;
//alert("got here ubwf");
  var numFormElements = basketForm.length;
  var basketFormElements = basketForm.elements;
  for (var elementIndex = 0; elementIndex < numFormElements; elementIndex++)
  {
    if (basketFormElements[elementIndex].type == "text")
    {
      itemStr = basketFormElements[elementIndex].name;
//alert(itemStr);
	itemStrArray = itemStr.split(/_/);
	itemSubCat = itemStrArray[0];
	itemRefId = itemStrArray[1];
	itemLine = itemStrArray[2];
//alert ("**" + itemRefId + "**" + itemLine);
      itemQty = parseInt(basketFormElements[elementIndex].value);
      if (!isNaN(itemQty))
      {
        this.setQty(itemRefId, itemSubCat, itemLine, itemQty);
      }
    }
  }
  
}

ShoppingBasket.prototype.saveBasket = function()
{
  if (!this.isEmpty())
  {
    var basketDetails = "";
    var cookieExpires;

    for (basketItem in this.items)
    {
	for (itemCat in this.items[basketItem].itemPrice)
      {
      basketDetails += this.items[basketItem].getItemRefId() + "`";
      basketDetails += this.items[basketItem].getItemSubCat() + "`";
      basketDetails += this.items[basketItem].getItemImgSrc() + "`";
      basketDetails += this.items[basketItem].numItemLines + "`";
      basketDetails += itemCat + "`";
      basketDetails += this.items[basketItem].getItemPrice(itemCat) + "`";
      basketDetails += this.items[basketItem].getItemQty(itemCat) + "¬";
//alert(basketItem + " " + itemCat);
      }
    }

    basketDetails = basketDetails.substring(0,basketDetails.length - 1);
//alert(basketDetails);
    basketDetails = escape(basketDetails);

    var nowDate = new Date();
    nowDate.setMonth(nowDate.getMonth() + 3);
    cookieExpires = nowDate.toGMTString();
    var cookieStr = "fwkBasket=" + basketDetails 
      + ";expires=" + cookieExpires + ";";

    document.cookie = cookieStr;
//      alert("cookie saved " + cookieStr);
//    cookieStr = self.document.cookie;
//      alert("cookie saved2 " + cookieStr);
  }
  else
  {
    document.cookie = "fwkBasket= " 
      +";expires=1 Jan 2000 00:00:00;";
//      alert("cookie not saved");
  }
}

ShoppingBasket.prototype.getCookieValue = function(cookieName)
{
  var cookieValue = document.cookie;
  var cookieRegExp = new RegExp("\\b" + cookieName + "=([^;]+)");
  cookieValue = cookieRegExp.exec(cookieValue);

  if (cookieValue != null)
  {
//alert(cookieValue);
    cookieValue = cookieValue[1];
    cookieValue = unescape(cookieValue);
  }
//alert(cookieValue);
  return cookieValue;
}

ShoppingBasket.prototype.loadBasket = function()
{
  var basketItems;
  var basketItemNum;
  var itemDetail;
  var itemRefId = "";
  var itemSubCat = "";
  var itemImgSrc = "";
  var numItemLines = "";
  var itemCat = "";
  var itemPrice = "";
  var itemQty = "";

  var basketDetails = this.getCookieValue("fwkBasket");
  if (basketDetails != null)
  {
    basketItems = basketDetails.split('¬');

    for (basketItemNum in basketItems)
    {
      basketItem = basketItems[basketItemNum];
      basketItem = basketItem.split('`');

      itemRefId = basketItem[0];
      itemSubCat = basketItem[1];
      itemImgSrc = basketItem[2];
      numItemLines = basketItem[3];
      itemCat = basketItem[4];
      itemPrice = basketItem[5];
      itemQty = basketItem[6];

//alert("load; " + itemRefId + ":" + itemSubCat + ":" + itemImgSrc + ":" + itemPrice + ":" + itemCat + ":" + itemQty);
      this.addItem(itemRefId, itemSubCat, itemImgSrc, itemCat, itemPrice, itemQty);
    }
  }
  
  this.updateTotals();
  
}

ShoppingBasket.prototype.getTotalExcDelivery = function()
{
  var basketTotalCost = 0;
  var basketItem;
  var itemTotalCost = 0;

  for (basketItem in this.items)
  {
    for (itemLine in this.items[basketItem].itemPrice)
    {
    itemTotalCost = this.items[basketItem].getItemQty(itemLine) * 
      this.items[basketItem].getItemPrice(itemLine);
    basketTotalCost += itemTotalCost;
    }
  }

  basketTotalCost = this.fixDecimalPlaces(basketTotalCost,2);
  this.subTotal = basketTotalCost;
  return basketTotalCost;
}

ShoppingBasket.prototype.setDeliveryCost = function()
{
    var deliveryCost = 0;
    var postItems = new Array(0,0,0,0, 0,0,0,0);
    
    for (basketItem in this.items)
    {
	for (itemCat in this.items[basketItem].itemPrice)
      {
        itemQty = this.items[basketItem].getItemQty(itemCat);
        switch (itemCat)
        {
        case "web":
//            document.write ("Web Rights");
            postItems[0]++;
            break;
        case "lrd":
//            document.write ("Low Res Digital");
            postItems[1]++;
            break;
        case "hrd":
//            document.write ("High Res Digital");
            postItems[2]++;
            break;
        case "slide":
//            document.write ("35mm Slide");
            postItems[3]++;
            break;
        case "pr75":
//            document.write ("7\"x5\" print");
            postItems[4] += parseInt(itemQty);
            break;
        case "pr96":
//            document.write ("9\"x6\" print");
            postItems[5] += parseInt(itemQty);
            break;
        case "pr812":
//            document.write ("8\"x12\" mini-poster");
            postItems[6] += parseInt(itemQty);
            break;
        case "pr1015":
//            document.write ("10\"x15\" mini-poster");
            postItems[7] += parseInt(itemQty);
            break;
        default:
//            document.write ("&nbsp;");
        }
      
      }
    }

    deliveryCost = calcDelivery(postItems);
    
    this.deliveryCost = deliveryCost;
}

ShoppingBasket.prototype.updateTotals = function()
{
    this.getTotalExcDelivery();
    this.setDeliveryCost();
    this.VAT = this.fixDecimalPlaces((Math.round((Number(this.subTotal) + Number(this.deliveryCost)) * vatRate)/100), 2) ;
    this.totalCost = String(Number(this.subTotal) + Number(this.deliveryCost) + Number(this.VAT));
}

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 += ">";

    // Qty
    hiddenInputHTML += "<INPUT TYPE='hidden' NAME='"; 
    hiddenInputHTML += this.items[basketItem].getItemRefId() + "_Qty'";
    hiddenInputHTML += " value=" + this.items[basketItem].getItemQty();
    hiddenInputHTML += ">";
  }

  return hiddenInputHTML;
}

ShoppingBasket.prototype.clearBasket = function()
{
  this.items = new Object();
  this.numItems = 0;
  document.cookie = "fwkBasket= ;expires=1 Jan 2000 00:00:00";
//alert(window.name);
  var mainWin = window.frames[0];
  mainWin.location = "view_basket.htm";

}

ShoppingBasket.prototype.emptyBasket = function()
{
  this.items = new Object();
  this.numItems = 0;
  document.cookie = "fwkBasket= ;expires=1 Jan 2000 00:00:00";
//alert("emptying basket");
}


ShoppingBasket.prototype.doEmptyBasketText = function()
{
  var pageText = "";
  pageText = "<BR><H3>Your basket is empty.</H3>";

  return pageText;
}

ShoppingBasket.prototype.viewBasket = function()
{
  if (parent.RecID == "undefined")
  {
    parent.RecID = 0;
  }
  var mainWin = window.frames[0];
  mainWin.location = "view_basket.htm";
}


ShoppingBasket.prototype.transmitBasket = function( webAddress )
{
  var basketHTML = "";
  var basketItem;

  for (basketItem in this.items)
  {

    for (itemLine in this.items[basketItem].itemPrice)
    {
      basketHTML += "?&" + 
      this.items[basketItem].getItemSubCat() + "_" + 
      this.items[basketItem].getItemRefId() + "_" + 
      this.items[basketItem].getItemImgSrc() + ".jpg_" +
      this.items[basketItem].getItemPrice(itemLine) + "_" + itemLine;
      basketHTML += "=" + this.items[basketItem].getItemQty(itemLine);
    }
  }

//alert(basketHTML);
//alert(self.location.href);
var newURL = webAddress + basketHTML;
self.location.href= newURL;

}

ShoppingBasket.prototype.receiveBasket = function()
{
  var itemStr;
  var itemStrArray;
  var itemRefId;
  var itemPrice;
  var itemSubCat;
  var itemImgSrc;
  var itemCat;
//  var numFormElements = basketForm.length;


  var infoPassed = location.search;
//alert("rx:"+infoPassed);

  infoPassed = infoPassed.replace(/\+/g, " ");
  infoPassed = unescape(infoPassed);
  infoPassed = infoPassed.replace(/\&/, "");
  infoPassed = infoPassed.replace(/\?/g, "");
  infoPassed = infoPassed.replace(/\//g, "");
//alert("rx:"+infoPassed);

  var basketElements = infoPassed.split(/&/);
//alert(basketElements[0] + "**\n" + basketElements[1]);
  for (elementIndex in basketElements)
  {
//alert(elementIndex);
    part = basketElements[elementIndex].split(/=/);
//alert ("**" + part[0] + "**" + part[1]);

    itemStr = part[0];
    itemStrArray = itemStr.split(/_/);
    itemSubCat = itemStrArray[0];
    itemRefId = itemStrArray[1];
    itemImgSrc = itemStrArray[2];
//    alert(itemImgSrc);
    itemPrice = itemStrArray[3];
    itemCat = itemStrArray[4];
    itemQty = parseInt(part[1]);
//    alert("rx:" + itemRefId + ":" + itemSubCat + ":" + itemImgSrc + ":" + itemPrice + ":" + itemCat + ":" + itemQty);
    this.addItem(itemRefId, itemSubCat, itemImgSrc, itemCat, itemPrice, itemQty);

  }

}

ShoppingBasket.prototype.recordBasketDetails = function( basketID )
{
  var basketHTML = "";
  var basketItem;
  var ItemSubCat = "";
  var BasketDetails = window.frames[0].document.getElementById('BasketDetails');
  var itemNum = 0;

  for (basketItem in this.items)
  {

    for (itemLine in this.items[basketItem].itemPrice)
    {
      itemNum++;
      ItemSubCat = this.items[basketItem].getItemSubCat();
      ItemSubCat = ItemSubCat.substr(0, ItemSubCat.length - 1);

      BasketDetails.BasketID.value =  basketID;
      BasketDetails.ItemSubCat.value =  ItemSubCat;
      BasketDetails.ItemRefId.value =  this.items[basketItem].getItemRefId();
      BasketDetails.ItemType.value =  itemLine;
      BasketDetails.ItemPrice.value =  this.items[basketItem].getItemPrice(itemLine);
      BasketDetails.ItemQty.value =  this.items[basketItem].getItemQty(itemLine);

      BasketDetails.action = "http://www.fireworkphotography.co.uk/recordBasket.php";
      BasketDetails.method = "post";
      BasketDetails.target = "phpFrame2";
      BasketDetails.submit();

      wait(1000);

//      alert("Recording Basket " + basketID + " Item " + itemNum + "\nPicture: " + BasketDetails.ItemRefId.value +
//            " Size: " + itemLine + " Quantity: " + BasketDetails.ItemQty.value);
    }
  }
}

function wait ( msecs )
{
    var nowTime = new Date;
    var i = 0;
//    alert("start time " + nowTime.toTimeString() + " " + msecs);
    
    while (new Date().getTime() < (nowTime.getTime() + msecs))
    {
        i++;
    }
    
//    alert("end time " + new Date().toTimeString());

}



ShoppingBasket.prototype.recordBasketTotals = function( basketID, status )
{
//    alert("self:" + self.name);
//    alert("window.frames[0]:" + window.frames[0].name);
  var BasketSummary = window.frames[0].document.getElementById('BasketSummary');

//      alert(BasketSummary);
      BasketSummary.BasketID.value =  basketID;
//      alert("here");
      BasketSummary.SubTotal.value =  dp2(this.subTotal);
//      alert("here2");
      BasketSummary.Delivery.value =  dp2(this.deliveryCost);
      BasketSummary.VAT.value =  dp2(this.VAT);
      BasketSummary.Total.value =  dp2(this.totalCost);
      BasketSummary.Status.value =  status;

      BasketSummary.action = "http://www.fireworkphotography.co.uk/recordSummary.php";
      BasketSummary.method = "post";
      BasketSummary.target = "phpFrame";
      BasketSummary.submit();

}

ShoppingBasket.prototype.updateBasketStatus = function( basketID, status )
{
  var BasketSummary = window.frames[0].document.getElementById('BasketSummary');

      BasketSummary.BasketID.value =  basketID;
      BasketSummary.Status.value =  status;

      BasketSummary.action = "http://www.fireworkphotography.co.uk/updateStatus.php";
      BasketSummary.method = "post";
      BasketSummary.target = "phpFrame";
      BasketSummary.submit();

}

function calcDelivery (postItems)
{
    deliveryCost = 0;

    if (postItems[0] != 0)
    { deliveryCost += 0.50;} // web rights - flat rate 50p to cover certificate

    if (postItems[1] != 0)
    {   deliveryCost += 2.55;
        deliveryCost += (2.00 * Math.floor(postItems[1] / 20));   // For every 20 slides, add 2.00
    }
    
    if (postItems[2] != 0)
    {   deliveryCost += 2.95;
        deliveryCost += (2.00 * Math.floor(postItems[2] / 50));   // For every 50 lrd, add 2.00
    }
    
    if (postItems[3] != 0)
    {   deliveryCost += 2.95;
        deliveryCost += (2.00 * Math.floor(postItems[3] / 20));   // For every 20 hrd, add 2.00
    }
    
/*    if (postItems[4] != 0)
    {   deliveryCost += 1.25;
        deliveryCost += (1.25 * Math.floor(postItems[3] / 50));   // For every 50 pr75, add 1.25
    }
*/
    
    if ((postItems[5] != 0) | (postItems[4] != 0))
    {   deliveryCost += 1.66;
        deliveryCost += (1.66 * Math.floor((postItems[5] + postItems[4]) / 40));   // For every 30 pr95, add 1.95
    }
    
    if ((postItems[6] != 0) | (postItems[7] != 0))
    {   deliveryCost += 3.25;
        deliveryCost += (3.25 * Math.floor((postItems[6] + postItems[7]) / 5));   // For every 5 pr812, add 3.25
    }
    
//    if (postItems[7] != 0)
//    {   deliveryCost += 4.75;
//        deliveryCost += (4.75 * Math.floor(postItems[7] / 5));   // For every 5 pr1015, add 4.75
//    }
    
    return deliveryCost;
}

/////////////////

//Maths presentation functions

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;
}

function dp2 (numValue)
{
    var strTemp = "";
    numValue = Math.round(numValue * 100);
    strTemp = numValue.toString();
    strTemp = strTemp.substr(0,strTemp.length-2) + "." + strTemp.substr(strTemp.length-2,strTemp.length);
    if (numValue < 100) { strTemp = "0" + strTemp; }
    return strTemp;
}

function lz (numValue, zeros)
{
    var i = 0;
    var strTemp = "";
    strTemp = numValue.toString();

    for (i=1; zeros - strTemp.length; i++)
    {
        strTemp = "0" + strTemp;
    }
    return strTemp;
}

////////////////////

ShoppingBasket.prototype.CheckoutSummaryHTML = function ( basketID )
{
    var summaryHTML = "";
    var itemPrice = 0;
    var itemQty = 0;
    var itemTotalCost = 0;
    var numItems = 0;

    summaryHTML += "<table border=1 width=425 cellspacing=0 cellpadding=2 style=\"margin-left: 20\">";
    summaryHTML += "<tr><td width=425 align=center colspan=6 bgcolor=\"#C0C0C0\">";
    summaryHTML += "<p align=left><b><font size=2 color=\"#000080\">Basket:&nbsp;" + lz(basketID,7);
    summaryHTML += "</font></b></td></tr>";
    summaryHTML += "<tr><td width=25 align=center><font size=1>Line</font></td>";
    summaryHTML += "<td width=80><font size=1>Title</font></td>";
    summaryHTML += "<td width=160><font size=1>Format</font></td>";
    summaryHTML += "<td width=50 align=right><p align=right><font size=1>Price per</font></td>";
    summaryHTML += "<td width=30 align=center><p align=center><font size=1>Qty</font></td>";
    summaryHTML += "<td width=80 align=right><p align=right><font size=1>Total</font></td>";
    summaryHTML += "</tr>";
    

    for (basketItem in this.items)
    {
        summaryHTML += "<tr>";
        thumbnailSrc = this.items[basketItem].getItemImgSrc();
        thumbnailSrc = thumbnailSrc.replace(".jpg","");

    	for (itemLine in this.items[basketItem].itemPrice)
    	{
    	    summaryHTML += "<td width=25 align=center><font size=1>" + (numItems +1) + '</font></td>';
    	    summaryHTML += "<td width=80><font size=1>" + thumbnailSrc + '</font></td>';
    	    
    	    summaryHTML += "<td width=160><font size=1>";

            switch (itemLine)
            {
            case "web":
                summaryHTML += "Web Rights";
                break;
            case "lrd":
                summaryHTML += "Low Res Digital";
                break;
            case "hrd":
                summaryHTML += "High Res Digital";
                break;
            case "slide":
                summaryHTML += "35mm Slide";
                break;
            case "pr75":
                summaryHTML += "7\"x5\" print";
                break;
            case "pr96":
                summaryHTML += "9\"x6\" print";
                break;
            case "pr812":
                summaryHTML += "8\"x12\" mini-poster";
                break;
            case "pr1015":
                summaryHTML += "10\"x15\" mini-poster";
                break;
            default:
                summaryHTML += "&nbsp;";
            }
            
            itemPrice = this.items[basketItem].getItemPrice(itemLine);
            itemQty = this.items[basketItem].getItemQty(itemLine);
            itemTotalCost = this.items[basketItem].getItemQty(itemLine) * 
                            this.items[basketItem].getItemPrice(itemLine);

            summaryHTML += "</font></td>";
            summaryHTML += "<td width=50 align=right><font size=1>£" + dp2(itemPrice) + '</font></td>';
            summaryHTML += "<td width=30 align=center><font size=1>" + itemQty + '</font></td>';
            summaryHTML += "<td width=80 align=right><font size=1>£" + dp2(itemTotalCost) + '</font></td>';
            summaryHTML += "</TR>";

          numItems++;
            
        }
    
    }

summaryHTML += "</TABLE>";

summaryHTML += "<table border=1 width=168 cellspacing=0 cellpadding=2 style=\"margin-left: 277\">";
summaryHTML += "<tr><td width=88 align=right bgcolor=\"#C0C0C0\"><font size=2><B>SubTotal</B></font></td>";
summaryHTML += "<td width=80 align=right bgcolor=\"#C0C0C0\"><font size=2><B>£" + dp2(this.subTotal) + "</B></font></td></tr>";
summaryHTML += "<tr><td width=88 align=right><font size=1>P&P</font></td>";
summaryHTML += "<td width=80 align=right><font size=1>£" + dp2(this.deliveryCost) + "</font></td></tr>";
summaryHTML += "<tr><td width=88 align=right><font size=1>VAT</font></td>";
summaryHTML += "<td width=80 align=right><font size=1>£" + dp2(this.VAT) + "</font></td></tr>";
summaryHTML += "<tr><td width=88 align=right bgcolor=\"#000000\"><b><font color=\"#FFFFFF\" size=2>Total</font></b></td>";
summaryHTML += "<td width=80 align=right bgcolor=\"#000000\"><font color=\"#FFFF00\" size=2><B>£" + dp2(this.totalCost);
summaryHTML += "</B></font></td></tr></table>";

return summaryHTML;
    
}
