if(typeof(window.external) != 'undefined' && document.attachEvent) {
      document.getElementsByName = function(name, tag) {
            if(!tag) tag = '*';
            var elems=document.getElementsByTagName(tag),x=elems.length,i,res=[];
            for(i=0;i<x;i++){
                  att = elems[i].getAttribute('name');
                  if(att == name) res.push(elems[i]);
            }
            return res;
      }
}


var floatingMenuId = 'BasketSummary';  
var footerElementId = 'footerbottom';  
var basketableElementId = 'basketable';

var floatingMenu =  
{  
    targetY: 10,  
  
    hasInner: typeof(window.innerWidth) == 'number',  
    hasElement: typeof(document.documentElement) == 'object'  
        && typeof(document.documentElement.clientWidth) == 'number',  
  
    menu:  
        $  
        ? $(floatingMenuId)  
        : document.all  
          ? document.all[floatingMenuId]  
          : document.layers[floatingMenuId],
          
    footer:
        $  
        ? $(floatingMenuId)  
        : document.all  
          ? document.all[floatingMenuId]  
          : document.layers[floatingMenuId],
          
    basket:
        $  
        ? $(basketableElementId)  
        : document.all  
          ? document.all[basketableElementId]  
          : document.layers[basketableElementId]
};  

function boxMinX()
{
  return findPosX(floatingMenu.basket) + floatingMenu.basket.offsetWidth + 5;
}

function boxMinY()
{
  return 170;
}

function boxMaxY()
{
  return parseInt(window.innerHeight) - floatingMenu.footer.innerHeight - floatingMenu.menu.innerHeight;
}

floatingMenu.move = function ()  
{  
    floatingMenu.menu.style.left = boxMinX() + 'px';  
    if (floatingMenu.nextY < boxMinY()) 
    {
      floatingMenu.menu.style.top = boxMinY() + 'px';  
    }
    else if (floatingMenu.nextY > boxMaxY())
    {
      floatingMenu.menu.style.top = boxMaxY() + 'px';  
    }
    else
    {
      floatingMenu.menu.style.top = floatingMenu.nextY + 'px';  
    }
}  
  
floatingMenu.computeShifts = function ()  
{  
    var de = document.documentElement;  
  
    floatingMenu.shiftY =   
        floatingMenu.hasInner  
        ? pageYOffset  
        : floatingMenu.hasElement  
          ? de.scrollTop  
          : document.body.scrollTop;  
    if (floatingMenu.targetY < 0)  
    {  
        if (floatingMenu.hasElement && floatingMenu.hasInner)  
        {  
            // Handle Opera 8 problems  
            floatingMenu.shiftY +=  
                de.clientHeight > window.innerHeight  
                ? window.innerHeight  
                : de.clientHeight  
        }  
        else  
        {  
            floatingMenu.shiftY +=  
                floatingMenu.hasElement  
                ? de.clientHeight  
                : document.body.clientHeight;  
        }  
    }  
}  
  
floatingMenu.calculateCornerY = function()  
{  
    if (floatingMenu.targetY != 'center')  
        return floatingMenu.shiftY + floatingMenu.targetY;  
  
    var height = parseInt(floatingMenu.menu.offsetHeight);  
  
    // Handle Opera 8 problems  
    var clientHeight =   
        floatingMenu.hasElement && floatingMenu.hasInner  
        && document.documentElement.clientHeight   
            > window.innerHeight  
        ? window.innerHeight  
        : document.documentElement.clientHeight  
  
    var cornerY =  
        floatingMenu.hasElement  
        ? (floatingMenu.hasInner    
           ? pageYOffset  
           : document.documentElement.scrollTop) +   
          (clientHeight - height)/2  
        : document.body.scrollTop +   
          (document.body.clientHeight - height)/2;  
    return cornerY;  
};  
  
floatingMenu.doFloat = function()  
{  
    var stepY;  
  
    floatingMenu.computeShifts();  
  
    var cornerY = floatingMenu.calculateCornerY();  
  
    var stepY = (cornerY - floatingMenu.nextY) * .1;  
    /*if (Math.abs(stepY) < .5)  
    {  
        stepY = cornerY - floatingMenu.nextY;  
    } */ 
  
    if (Math.abs(stepY) > 0)  
    {  
        floatingMenu.nextY += stepY;  
        floatingMenu.move();  
    }  
  
    //setTimeout('floatingMenu.doFloat()', 20); 
};  
  
floatingMenu.addEvent = function(element, listener, handler)  
{  
    if(typeof element[listener] != 'function' ||   
       typeof element[listener + '_num'] == 'undefined')  
    {  
        element[listener + '_num'] = 0;  
        if (typeof element[listener] == 'function')  
        {  
            element[listener + 0] = element[listener];  
            element[listener + '_num']++;  
        }  
        element[listener] = function(e)  
        {  
            var r = true;  
            e = (e) ? e : window.event;  
            for(var i = element[listener + '_num'] -1; i >= 0; i--)  
            {  
                if(element[listener + i](e) == false)  
                    r = false;  
            }  
            return r;  
        }  
    }  
    for(var i = 0; i < element[listener + '_num']; i++)  
        if(element[listener + i] == handler)  
            return;  
    element[listener + element[listener + '_num']] = handler;  
    element[listener + '_num']++;  
};  
  
floatingMenu.init = function()  
{  
    floatingMenu.initSecondary();  
    setInterval('floatingMenu.doFloat()', 30); 
	//floatingMenu.doFloat();  
};  

function floatBox()
{  
    floatingMenu.doFloat();  
};  

floatingMenu.initSecondary = function()  
{  
    floatingMenu.computeShifts();  
    floatingMenu.nextY = floatingMenu.calculateCornerY();  
    floatingMenu.move();  
}  
  
if (document.layers)  
{
    floatingMenu.addEvent(window, 'onload', floatingMenu.init);  
}
else  
{  
    floatingMenu.init();  
    floatingMenu.addEvent(window, 'onload', floatingMenu.initSecondary);  
} 
document.body.onresize = floatBox;
  
function getBasket()
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('GetBasket'), repaintBasket, _da1, _ha1);
  sendData.sendPostData();
}  
function removeBasketBundle(basketBundleId)
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('RemoveBasketBundle',setRequestParams), removeBasketBundleRow, _da1, _ha1);
  sendData.sendPostData();
  
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("basketbundleid",basketBundleId); 
  }
  function removeBasketBundleRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage)) repaintBasket(responseXmlNode); 
  }
}
function updateBasketBundleQuantity(basketBundleId,textbox)
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('UpdateBasketBundleQuantity',setRequestParams), updateBasketBundleQuantityRow, _da1, _ha1);
  sendData.sendPostData();
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("basketbundleid",basketBundleId); 
    XmlNode.CDATASectionNode("quantity",textbox.value); 
  }
  function updateBasketBundleQuantityRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage)) repaintBasket(responseXmlNode);
  }
}
function updateCurrency(curencyDropDown)
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('UpdateCurrency',setRequestParams), updateCurrencyRow, _da1, _ha1);
  sendData.sendPostData();
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("currency",curencyDropDown.options[curencyDropDown.selectedIndex].value); 
  }
  function updateCurrencyRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage))  repaintBasket(responseXmlNode);
  }
}
function updateShippingCountry(countryDropDown)
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('UpdateShippingCountry',setRequestParams), updateShippingCountryRow, _da1, _ha1);
  sendData.sendPostData();
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("country",countryDropDown.options[countryDropDown.selectedIndex].value); 
  }
  function updateShippingCountryRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage))  repaintBasket(responseXmlNode);
  }
}
function updateShippingMethod(shippingDropDown)
{
  if (_deliveryServiceChanged) return;
  
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('UpdateShippingMethod',setRequestParams), updateShippingMethodRow, _da1, _ha1);
  sendData.sendPostData();
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("shipping",shippingDropDown.value); 
  }
  function updateShippingMethodRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage)) repaintBasket(responseXmlNode);
  }
}
function focusVoucher()
{
    var _voucherElemnt = $('voucher');
    if (_voucherElemnt) 
    {
      if (_voucherElemnt.value == 'Type your voucher here')
      {
        _voucherElemnt.value = '';
      }
      _voucherElemnt.style.color = '#000';
    }
}
function setupVoucher()
{
    var _voucherElemnt = $('voucher');
    if (_voucherElemnt) 
    {
      if (_voucherElemnt.value == '')
      {
        _voucherElemnt.value = 'Type your voucher here';
        _voucherElemnt.style.color = '#ccc';
      }
      else
      {
        _voucherElemnt.style.color = '#000';
      }
    }
}
function addVoucher()
{
  focusVoucher();
  var voucherEl = $("voucher");
  setVoucher(voucherEl.value);
}
function removeVoucher()
{
  setVoucher('');
}
function setVoucher(voucherCode)
{
  var sendData = new ajaxRequest('/basketprocesor.asp', AjaxFormatRequest('AddVoucher',setRequestParams), addVoucherRow, _da1, _ha1);
  sendData.sendPostData();
  function setRequestParams(XmlNode)
  {
    XmlNode.CDATASectionNode("voucher",voucherCode); 
  }
  function addVoucherRow(responseXmlNode,errorMessage)
  {
    if (!AjaxDisplayError(errorMessage)) repaintBasket(responseXmlNode);
  }
}
function repaintBasket(responseXmlNode,errorMessage)
{  
    if ((!AjaxDisplayError(errorMessage)) && (responseXmlNode))
    {
      //refresh basket
      var totalExVatEl = $("totalExVat");
      var vatEl = $("vat");
      var totalPriceEl = $("totalPrice");
      var totalIncVatEl = $("totalIncVat");
      var basketNode = responseXmlNode.getElementsByTagName("basket")[0];
      var shippingcountryNode = responseXmlNode.getElementsByTagName("shippingcountry")[0];      
      var voucherNode = basketNode.getElementsByTagName("voucher")[0];
      var currencyNode = basketNode.getElementsByTagName("currency")[0];
      var amount = parseFloat(GetChildNodeValue(basketNode,"amount").replace(/,/, "."));
      var vat = parseFloat(GetChildNodeValue(basketNode,"vat").replace(/,/, "."));
      var shippingPrice = parseFloat(GetChildNodeValue(basketNode, "shippingamount").replace(/,/, "."));      
      if (GetChildNodeValue(shippingcountryNode, "vatchargeable") == '0')
      {
        vat = 0.00;
      }      
      var discountvalue = parseFloat(GetChildNodeValue(basketNode, "discountamount").replace(/,/, "."));
      var discountvat = parseFloat(GetChildNodeValue(basketNode, "discountvat").replace(/,/, "."));
      var total = amount + vat + shippingPrice - discountvalue - discountvat;
      totalExVatEl.innerHTML = parseFloat(amount).toFixed(2);
      vatEl.innerHTML = parseFloat(vat).toFixed(2);
      totalPriceEl.innerHTML = parseFloat(total).toFixed(2);
      totalIncVatEl.innerHTML = totalPriceEl.innerHTML;
      
      var basketweightrowEl = $("basketweightrow");
      if (GetChildNodeValue(basketNode, "existsdeliveryprice") == '1')
      {
        //exists delivery price      
        basketweightrowEl.style.display = "none";
      }
      else
      {
        //no delivery price      
        basketweightrowEl.style.display = "";
      }
      
      if (GetChildNodeValue(basketNode, "bundlescount") != '0')
      {      
        var bundleList = basketNode.getElementsByTagName("basketbundle");
        if ((bundleList) && (bundleList.length > 0))
        {
          var basketcontenttableEl = $("basketcontenttable");          
          var bundlerows = basketcontenttableEl.getElementsByTagName("tr"); 
          
          if (bundlerows.length > 0)
          {
            for (var rowindex=0;rowindex<bundlerows.length;rowindex++)
            {
              if (bundlerows[rowindex].getAttribute("tag") == "bbrow")
              {
                bundlerows[rowindex].setAttribute("processed", "0");
              }
            }
          }
		  
          for (var b=0;b<bundleList.length;b++)
          {
            //refresh bundle
            var bundleNode = bundleList[b];            
            var bundleRow = $("bb_" + GetChildNodeValue(bundleNode, "id"));
            if (bundleRow)
            {
              // refresh current bundle row
              bundleRow.removeAttribute("processed");
              var bbpriceEl = $("bbprice_" + GetChildNodeValue(bundleNode, "id"));
              var bbtotalEl = $("bbtotal_" + GetChildNodeValue(bundleNode, "id"));
              
              bbpriceEl.innerHTML = parseFloat(GetChildNodeValue(bundleNode, "price").replace(/,/, ".")).toFixed(2);
              bbtotalEl.innerHTML = parseFloat(GetChildNodeValue(bundleNode, "amount").replace(/,/, ".")).toFixed(2);              
              //refresh bundle items
              var itemList = bundleNode.getElementsByTagName("item");
              if ((itemList) && (itemList.length > 0))
              {
                for (var i=0;i<bundleList.length;i++)
                {
                  // refresh item
                }
              }
            }
            else
            {
              //append new bundle row
            }            
          }          
          //remove not processed bundle rows
          if (bundlerows.length > 0)
          {
            for (var rowindex=bundlerows.length-1;rowindex>=0;rowindex--)
            {
              if ((bundlerows[rowindex].getAttribute("tag") == "bbrow") && (bundlerows[rowindex].getAttribute("processed") == "0"))
              {
                basketcontenttableEl.deleteRow(bundlerows[rowindex].rowIndex);
              }
            }
          }
          
          // discount
          var discountrowEl = $("discountrow");
          var discountEl = $("discount");
          if (discountvalue != 0)
          {
            discountrowEl.style.backgroundImage = "none";
			discountrowEl.style.display = "";
            discountEl.innerHTML = parseFloat(discountvalue + discountvat).toFixed(2);
          }
          else
          {
            
            discountrowEl.style.backgroundImage = "none";
			discountrowEl.style.display = "none";
            discountEl.innerHTML = "";
          }
          
          // voucher
          var voucherAddBtnEl = $("voucherAddBtn");
          var voucherRemBtnEl = $("voucherRemBtn");
          var voucherEl = $("voucher");
          if (GetChildNodeValue(voucherNode, "code") != "")
          {
            voucherAddBtnEl.style.verticalAlign = "middle";
			voucherAddBtnEl.style.display = "none";
			voucherRemBtnEl.style.verticalAlign = "middle";
			voucherRemBtnEl.style.display = "inline";
            voucherEl.value = GetChildNodeValue(voucherNode, "code");
          }
          else
          {
            voucherAddBtnEl.style.verticalAlign = "middle";
			voucherAddBtnEl.style.display = "inline";
			voucherRemBtnEl.style.verticalAlign = "middle";
			voucherRemBtnEl.style.display = "none";
            voucherEl.value = "";
          }
          
          //display basket
          var basketbodyEl = $("basketbody");
          basketbodyEl.style.display = "";
          var emptybasketbodyEl = $("emptybasketbody");
          emptybasketbodyEl.style.display = "none";
        }
      }
      else
      {
        //no bundles display empty basket
        var basketbodyEl = $("basketbody");
        basketbodyEl.style.display = "none";
        var emptybasketbodyEl = $("emptybasketbody");
        emptybasketbodyEl.style.display = "";
      }
    }
  
  
    //Is Adult Product Present in the basket
      var payPalOrEl  = $("payPalOr");
      var payPalImgEl = $("payPalImg");

      if (GetChildNodeValue(basketNode, "isAdultProductPresent") == '1')
      {
        //adult product present - hide pay pal  
        payPalOrEl.style.display = "none";
        payPalImgEl.style.display = "none";
      }
      else
      {
        //no adult product - we can display pay pal      
        payPalOrEl.style.display = "";
        payPalImgEl.style.display = "inline";
      }
      if (currencyNode)
      {
        var currency_GBPEl = $("currency_GBP");
        var currency_EUREl = $("currency_EUR");
        var currency_USDEl = $("currency_USD");

        var currencyISO = GetChildNodeValue(currencyNode, "code");
        if (currencyISO == "GBP")
        {
            currencyISO = "£";
            currency_GBPEl.style.display = '';
            currency_EUREl.style.display = 'none';
            currency_USDEl.style.display = 'none';
        }
        else if (currencyISO == "EUR")
        {
            currencyISO = "€";
            currency_GBPEl.style.display = 'none';
            currency_EUREl.style.display = '';
            currency_USDEl.style.display = 'none';
        }
        else if (currencyISO == "USD")
        {
            currencyISO = "$";
            currency_GBPEl.style.display = 'none';
            currency_EUREl.style.display = 'none';
            currency_USDEl.style.display = '';
        }
        
        var currencyLabels = document.getElementsByName("l__c", "span");
        for (var i=0;i<currencyLabels.length;i++)
        {
            currencyLabels[i].innerHTML = currencyISO;
        }
      }
    var deliveryservicesNode = basketNode.getElementsByTagName("deliveryservices")[0];
    if (deliveryservicesNode){
        _deliveryServiceChanged = true;
        var deliveryservicesNodeList = deliveryservicesNode.getElementsByTagName("deliveryservice");
        if ((deliveryservicesNodeList) && (deliveryservicesNodeList.length > 0)) {
            var shippingmethodNode = basketNode.getElementsByTagName("shippingmethod")[0];
            var selectedDeliveryService = GetChildNodeValue(shippingmethodNode, "id");
            for (var i=0;i<deliveryservicesNodeList.length;i++)
            {
                var _deliveryID = GetChildNodeValue(deliveryservicesNodeList[i], "id")
                var _elDeliveryTR = $("delivery_row_" + _deliveryID);
                var _visible = GetChildNodeValue(deliveryservicesNodeList[i], "visible");
                if (_visible == 1) {
                    _elDeliveryTR.style.display = '';
                }
                else {
                    _elDeliveryTR.style.display = 'none';
                }
                _elDeliveryTR.style.backgroundImage = 'none';
                $("shippingPrice_" + _deliveryID).innerHTML = parseFloat(GetChildNodeValue(deliveryservicesNodeList[i], "cost").replace(/,/, ".")).toFixed(2);
                $("ShippingID_" + _deliveryID).checked = (selectedDeliveryService == _deliveryID);
            }
        }
        _deliveryServiceChanged = false;
    }
    setupVoucher();
  
    return 0;            
}

var _deliveryServiceChanged = false;

function _da1(){toggleAnimation(1,true);}
function _ha1(){toggleAnimation(1,false);}

function toggleAnimation(section,display)
{
  var imgEl = $('animation' + section);
  if (display)
  {
    imgEl.setAttribute('src','/gfx/checkout/loader_small.gif');
  }
  else
  {
    imgEl.setAttribute('src','/gfx/checkout/icon_help.gif');
  }
}

var difference=1000;
var usedControls=[];
function useControl(control)
{
  var _setted=false;
  for (var i=0;i<usedControls.length;i++)
  {
    if ((usedControls[i]) && (usedControls[i].id==control.id))
    {
      usedControls[i].lastuse=new Date().getTime();
      _setted=true;
      break;
    }
  }
  if (!_setted)
  {
    usedControls[usedControls.length]={"id":control.id, "lastuse":new Date().getTime()};
  }
}
function unuseControl(id)
{
  var _setted=false;
  for (var i=0;i<usedControls.length;i++)
  {
    if ((usedControls[i]) && (usedControls[i].id==id))
    {
      delete usedControls[i];
      break;
    }
  }
}
function getUnusedControlId()
{
  var _nowtime=new Date().getTime();
  for (var i=0;i<usedControls.length;i++)
  {
    if ((usedControls[i]) && ((_nowtime-usedControls[i].lastuse) > difference))
    {
      return usedControls[i].id;
    }
  }
  return null;
}
function invokeAjaxOnControl(id)
{
  var _element=$(id);
  if ((_element) && (_element.onchange) && (typeof(_element.onchange) == "function"))
  {
    _element.onchange();
  }
}
function processControls()
{
  var _id=getUnusedControlId();
  if (_id != null)
  {
    unuseControl(_id);
    invokeAjaxOnControl(_id);
  }
}
setInterval('processControls()', 1000); 
