﻿var ProductRow = 0;
var BasketMode = 'Basket';
var CustomerDiscountRow = 1;
var CustomerAccountSuspended = true;
var ShippingDiscountAppliedToCheckout = false;

function InvalidSpecialOfferItems(items)
{
    if (items.length > 0)
    {
        var Offers = '';
        var Products = '';
        for (i=0; i<items.length; i++)
        {
            if (items[i].getAttribute('Type') == 'Offer')
                Offers += getInnerText(items[i]) + '<br>';
            else
                Products += getInnerText(items[i]) + '<br>';
        }
        
        Offers = RemoveFromEnd(Offers, '<br>');
        Products = RemoveFromEnd(Products, '<br>');
        
        var plh = new Array();
        plh.length = 2;
        plh[0] = new DHTMLPlaceHolderValue('%%OffersList%%', Offers);
        plh[1] = new DHTMLPlaceHolderValue('%%ProductsList%%', Products);
        
        alertDHTMLPlaceHolders('SpecialOfferNoLongerValid', plh)
    }
}

function AddSelectedItem(qty, name, id, desc, ap, itemprice, price, offerprice, offername, offerid, IsProductWithOptions, BasketItemID, img, ItemAction, OfferLink)
{
    var tbl = document.getElementById('tblBasket')
    var rw = tbl.insertRow(ProductRow);
    rw.className = 'BasketItemRow';
    ProductRow++;
    
    var CellNo = 0;
    var cell = rw.insertCell(CellNo);

                
    if (BasketMode == 'Basket')
    {
        cell = rw.insertCell(CellNo);
        cell.className = 'BasketItemRemoveCell';
        cell.innerHTML = '<a href="javascript:RemoveBasketItem(\'' + id + '\')">' + BasketRemoveItemLink + '</a>';
        CellNo++;
    }
        
    cell = rw.insertCell(CellNo);
    CellNo++;
    cell.className = 'BasketItemImageCell';
    var link = '';
        
    if (ItemAction == 'product')
        link = ap + '.aspx'
    else if (ItemAction == 'dhtml')
        link = 'javascript:ShowProductDHTML(\'' + ap + '\');';
    else
        link = '';
 
    img = GetImageDisplay(img, link, name, 50, name);

    //img = '<table class="BasketImageHolder"><tr><td>' + img + '</td></tr></table>';
    cell.innerHTML = img
    cell = rw.insertCell(CellNo);
    CellNo++;   
    cell.className = 'BasketItemQuantityCell';
    cell.innerHTML = qty;
           
    cell = rw.insertCell(CellNo);
    CellNo++;
    cell.className = 'BasketItemProductCell';
    var nme = '';
    if (link == '')
        nme = name
    else
        nme = '<a href="' + link + '">' + name + '</a>';

    if (offername != '')
    { 

        if (OfferLink == 'true')
            offername = '<div><a href="/Products/Search.aspx?SO=' + offerid + '">' + offername + '</a></div>';
        else
            offername = '<div>' + offername + '</div>';

        //nme += '<div id="divProductSpecialOffer' + id + '">' + offername + '</div>';
        nme = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">' + nme + '</td></tr><tr>';
        nme += '<td class="AvailableOfferIndentCell" ><img src="' + jsImagePath + 'Checkout/indent_icon.jpg" /></td>';
        nme += '<td class="AvailableOfferOfferCell">' + offername + '</td></tr></table>';
    }

    cell.innerHTML = nme;
    cell = rw.insertCell(CellNo);
    CellNo++;
    cell.className = 'BasketItemEachCell';
    cell.innerHTML = itemprice;
    cell = rw.insertCell(CellNo);
    CellNo++;
    cell.className = 'BasketItemLineTotalCell';
    cell.id = 'clBasketItemLineTotal' + id;
     
    if (offerprice == '£0.00')  offerprice = 'Free';
      
    if (price == offerprice)
        cell.innerHTML = price;
    else
    {
        cell.innerHTML = '<table cellpadding="0" cellspacing="0"><tr><td class="AvailableOfferPriceCell">' + price + '</td></tr>' 
        + '<tr><td class="AvailableOfferOfferPriceCell">' + offerprice + '</td></tr></table>'
    }
        

    rw = tbl.insertRow(ProductRow);
    ProductRow++;
    rw.className = 'BasketSeparatorRow';
    cell = rw.insertCell(0);
    
}

function AddAvailableFreeItem(qty, name, id, desc, ap, itemprice, price, offerprice, offername, offerid, IsProductWithOptions, BasketItemID, ItemAction, OfferLink)
{
    var plink;
    if (ItemAction == 'product')
        plink = ap + '.aspx'
    else if (ItemAction == 'dhtml')
        plink = 'javascript:ShowProductDHTML(\'' + ap + '\');';
    else
        plink = '';

    var addlink = '';
    if (IsProductWithOptions == 'True')
        addlink = '<a href="javascript:AddBasketFreeItemWithOptions(\'' + id + '\', \'' + qty + '\', \'' + offerid + '\')">' + BasketAddAvailableOfferItem + '</a>';
    else
        addlink = '<a href="javascript:AddBasketFreeItem(\'' + id + '\', \'' + qty + '\', \'' + offerid + '\')">' + BasketAddAvailableOfferItem + '</a>';

    if (offername != '')
    {
        if (OfferLink == 'true')
            offername = '<div><a href="/Products/Search.aspx?SO=' + offerid + '">' + offername + '</a></div>';
        else
            offername = '<div>' + offername + '</div>';
    }
    
    if (offerprice == '£0.00')
        offerprice = 'Free';

    var html = '<table border="0" class="AvailableOfferItemsTable" cellspacing="2" cellpadding="0"><tr>';
    html += '<td class="AvailableOfferQtyCell">' + qty + 'x</td>';
    html += '<td class="AvailableOfferProductCell" colspan="2"><a href="' + plink + '">' + name + '</a></td>';
    html += '<td class="AvailableOfferLinePriceCell">' + itemprice + '</td>';
    html += '<td class="AvailableOfferPriceCell">' + price + '</td><td></td></tr>';
    
    html += '<tr><td></td>';
    html += '<td class="AvailableOfferIndentCell" ><img src="' + jsImagePath + 'Checkout/indent_icon.jpg" /></td>';
    html += '<td class="AvailableOfferOfferCell">' + offername + '</td>';
    html += '<td></td>';
    html += '<td class="AvailableOfferOfferPriceCell">' + offerprice + '</td>';
    html += '<td class="AvailableOfferAddCell">' + addlink  + '</td>';
    html += '</tr></table>';
    
    var tbl = document.getElementById('tblRewardItems')
    var rw = tbl.insertRow(tbl.rows.length);
    var cl = rw.insertCell(0);
    cl.className = 'AvailableOfferItemsCell';
    cl.innerHTML = html;
}

function LoadFreeItems(items, ItemAction, OfferLink)
{
    var tbl = document.getElementById('tblRewards');
    var RewardAdded = false;
    if (items.length == 0)
    {
        if (tbl) tbl.style.display = 'none';
    }
    else
    {
        //var cl;
        if (BasketMode == 'Basket') 
        {
            tbl.style.display = 'block';
            cl = document.getElementById('clRewards');
            cl.innerHTML = '';
        }
            
        //var tbl1 = document.getElementById('tblBasket')
        
        if (BasketMode == 'Basket') 
        {
            tbl = document.createElement('table');
            tbl.id = 'tblRewardItems';
            tbl.cellSpacing = 5;
            cl.appendChild(tbl);
        }
        
        for (i=0; i<items.length; i++)
        {
            var IsInBasket = items[i].getAttribute("IsInBasket");
            var Name = items[i].getAttribute("Name");
            Name = doReplace(Name, 'ampis', '&');
            var ProductID = items[i].getAttribute("ProductID");
            var Qty = items[i].getAttribute("Quantity");
            var Desc = items[i].getAttribute("Description");
            var AP = items[i].getAttribute("Path");
            var ItemPrice = items[i].getAttribute("ItemPrice");
            var Price = items[i].getAttribute("Price");
            var OfferPrice = items[i].getAttribute("OfferPrice");
            var OfferName = items[i].getAttribute("OfferName");
            var SpecialOfferID = items[i].getAttribute("SpecialOfferID");
            var Stock = items[i].getAttribute("Stock");
            var Image = items[i].getAttribute("Image");
            var IsProductWithOptions = items[i].getAttribute("IsProductWithOptions");
            var BasketItemID = items[i].getAttribute("BasketItemID");
            IsInBasket = (IsInBasket == 'True');
            //RewardAdded = !IsInBasket;
            
            var rw;
            if (IsInBasket)
            {
                AddSelectedItem(Qty, Name, ProductID, Desc, AP, ItemPrice, Price, OfferPrice, OfferName, SpecialOfferID, IsProductWithOptions, BasketItemID, Image, ItemAction, OfferLink)
            }
            else
            {
                if (BasketMode == 'Basket')  
                {
                    //rw = tbl.insertRow(tbl.rows.length);
                    RewardAdded = true;
                    AddAvailableFreeItem(Qty, Name, ProductID, Desc, AP, ItemPrice, Price, OfferPrice, OfferName, SpecialOfferID, IsProductWithOptions, BasketItemID, ItemAction, OfferLink)
                }
            }
            
//            if ((BasketMode == 'Basket') || (IsInBasket))
//            {
//                cl = rw.insertCell(0);
//                
//                var link = '';
//            
//                if (ItemAction == 'product')
//                    link = AP + '.aspx'
//                else if (ItemAction == 'dhtml')
//                    link = 'javascript:ShowProductDHTML(' + ProductID + ');';
//                else
//                    link = '';
//                
//                
//                Image = GetImageDisplay(Image, link, Name, 50, Name);
//                cl.align = 'center';
//                cl.innerHTML = Image
//                cl = rw.insertCell(1);
//                cl.align = 'center';
//                cl.innerHTML = Qty ;
//                cl = rw.insertCell(2);
//                
//                var nme = '';
//                if (link == '')
//                    nme += Name
//                else
//                    nme += '<a href="' + link + '">' + Name + '</a>';
//                   
//                if (OfferName != '')
//                {
//                    if (OfferLink == 'true')
//                        nme += '<div><a href="/Products/Search.aspx?SO=' + SpecialOfferID + '">' + OfferName + '</a></div>';
//                    else
//                        nme += '<div>' + OfferName + '</div>';
//                }
//                cl.innerHTML = nme;
//                
//                cl = rw.insertCell(3);
//                cl.innerHTML = ItemPrice;
//                cl = rw.insertCell(4);
//                
//                
//                var opText = OfferPrice;
//                if (opText == '£0.00') opText = 'Free';
//                
//                if (OfferPrice == Price)
//                    cl.innerHTML = opText;
//                else
//                    cl.innerHTML = '<span style="text-decoration:line-through">' + Price + '</span><br>' + opText;
//                
//                cl = rw.insertCell(5);
//                if (BasketMode == 'Basket')
//                {
//                    if (!IsInBasket)
//                    {
//                        if (IsProductWithOptions == 'True')
//                            cl.innerHTML = '<a href="javascript:AddBasketFreeItemWithOptions(\'' + ProductID + '\', \'' + Qty + '\', \'' + SpecialOfferID + '\')">Add</a>';
//                        else
//                            cl.innerHTML = '<a href="javascript:AddBasketFreeItem(\'' + ProductID + '\', \'' + Qty + '\', \'' + SpecialOfferID + '\')">Add</a>';
//                    }
//                    else
//                        cl.innerHTML = '<a href="javascript:RemoveBasketFreeItem(\'' + BasketItemID + '\')">' + BasketRemoveItemLink + '</a>';
//                }
//            }
        }
    }
    if ((BasketMode == 'Basket') && (!RewardAdded))
    {
        tbl = document.getElementById('tblRewards');
        tbl.style.display = 'none';
    }
}

function LoadSpecialOffers(x, CustomerSpecificDiscount, CustomerSpecificDiscountPercentage, DealerDiscountText, ShowDealerDiscountPercentage)
{
    //var clTarget = document.getElementById('clBasketDiscount');
    //clTarget.innerHTML = '';
    //var tbl = document.createElement('table');
    //clTarget.appendChild(tbl);
    //tbl.border='0';
    //tbl.width = '100%';
    var tbl = document.getElementById('tblTotalTable');
    
    for (r = tbl.rows.length-1; r>=0; r--)
    {
        if (tbl.rows[r].id.substr(0, 13) == 'rwBasketOffer')
            tbl.deleteRow(r);
    }
    
    var AboveText = x.getAttribute("Above");
    var MaximumVouchers = x.getAttribute("MaximumVouchers");
    var vouchercount = 0;
    ShippingDiscountAppliedToCheckout = false;
    for (i=0; i<x.childNodes.length; i++)
    {
        var SpecialOfferID = x.childNodes[i].getAttribute("SpecialOfferID");
        var Type = x.childNodes[i].getAttribute("Type");
        var DiscountValue = x.childNodes[i].getAttribute("DiscountValue");
        var Description = x.childNodes[i].getAttribute("Description");
        var AppliedToLineItem = x.childNodes[i].getAttribute("AppliedToLineItem")
        var VoucherCode = '';
        var row = tbl.insertRow(tbl.rows.length);
        row.id = 'rwBasketOffer' + SpecialOfferID;
        var cell = row.insertCell(0);
        cell.className = 'BasketTotalLeftCell';
        if (SpecialOfferID != "SHIPPING")
            cell.innerHTML = '<span class="BasketSpecialOfferTagText">OFFER:</span>&nbsp;&nbsp;' + Description;
        else
        {
            ShippingDiscountAppliedToCheckout = true;
            cell.innerHTML = Description;
        }
            
        if (Type == 'Voucher')
        {
            vouchercount++;
            VoucherCode = x.childNodes[i].getAttribute("VoucherCode");
            cell.innerHTML += '&nbsp;&nbsp;-&nbsp;&nbsp;<span class="BasketSpecialOfferDisplay">' + VoucherCode + '</span>';
            cell.innerHTML += '<span class="BasketSpecialOfferRemoveText">&nbsp;&nbsp;(<a href="javascript:RemoveVoucherCode(\''+ VoucherCode + '\');">' + BasketVoucherRemoveLink + '</a>)</span>';
        }
        
        //if ((Type == 'Voucher') && (BasketMode == 'Basket'))
        //{
        //    vouchercount++;
        //    VoucherCode = x.childNodes[i].getAttribute("VoucherCode");
        //    cell.innerHTML = '<a href="javascript:RemoveVoucherCode(\''+ VoucherCode + '\');">' + BasketVoucherRemoveLink + '</a>&nbsp;&nbsp;' + Description + ':&nbsp;' + VoucherCode;
        //}
        cell = row.insertCell(1);
        cell.id = 'clBasketOfferValue' + SpecialOfferID;
        if (AppliedToLineItem != 'True')
        {
            cell.className = 'BasketSpecialOfferDiscountValueTextWithPadding';
            cell.innerHTML = DiscountValue;
//            if (Type == 'Voucher')
//            {
//                cell.innerHTML += '<span class="BasketSpecialOfferRemoveText">&nbsp;&nbsp;(<a href="javascript:RemoveVoucherCode(\''+ VoucherCode + '\');">' + BasketVoucherRemoveLink + '</a>)</span>';
//            }
        }
        else
        {
            cell.className = 'BasketTotalRightCell';
            cell.innerHTML = AboveText;
        }
    }
    
    if ((BasketMode == 'Basket') && ((vouchercount < MaximumVouchers) || (MaximumVouchers == -1)))
    {
        if (!document.getElementById('BasketAddVoucherRow'))
        {
            //Add the voucher add textbox
            tbl = document.getElementById('tblAddVoucher');
            tbl.style.display = 'block';
            var row = tbl.insertRow(tbl.rows.length);
            var cell = row.insertCell(0);
            cell.style.height = '5px';
            row = tbl.insertRow(tbl.rows.length);
            row.id = 'BasketAddVoucherRow';
            cell = row.insertCell(0);
            cell.className = 'BasketAddVoucherCell';
            var inner = 'Redeem a voucher code:&nbsp;&nbsp;<span style="font-weight:normal"><input type="text" id="txtAddVoucher">&nbsp;&nbsp;<a href="javascript:AddVoucherCode()">' + BasketVoucherAddLink + '</a></span>';
            cell.innerHTML = inner;
        }
    }
    
    if (CustomerSpecificDiscount != '£0.00')
    {
        var disc = DealerDiscountText;
        var cell1;
        var cell2;
        if (ShowDealerDiscountPercentage == 'true')
            disc += '<span class="BasketSpecialOfferDisplay"> (' + CustomerSpecificDiscountPercentage + ')</span>';
            
        if (document.getElementById('rwCustomerSpecificDiscount'))
        {
            cell1 = document.getElementById('clCustomerSpecificDiscount1');
            cell2 = document.getElementById('clCustomerSpecificDiscount2');
        }
        else
        {
            var totaltable = document.getElementById('tblTotalTable');
            var row1 = totaltable.insertRow(CustomerDiscountRow); //Insert below VAT row;
            row1.id = 'rwCustomerSpecificDiscount';
            cell1 = row1.insertCell(0);
            cell1.id = 'clCustomerSpecificDiscount1';
            cell2 = row1.insertCell(1);
            cell2.id = 'clCustomerSpecificDiscount2';
        }
        cell1.className = 'BasketTotalLeftCell';
        cell2.className = 'BasketTotalRightCell';
        cell1.innerHTML = disc;
        cell2.innerHTML = '<span class="BasketSpecialOfferDiscountValueText">-' + CustomerSpecificDiscount + '</span>';
        //cell2.innerHTML = '-' + CustomerSpecificDiscount + '';
    }
}

function AddVoucherCode()
{
    var code = document.getElementById('txtAddVoucher').value;
    sndReq('/XML/BasketFunctions.aspx?Action=AddVoucherCode&VoucherCode=' + code);
}

function RemoveVoucherCode(code)
{
    sndReq('/XML/BasketFunctions.aspx?Action=RemoveVoucherCode&VoucherCode=' + code);
}

function UpdateBasketTotals(v)
{
    var x = GetXMLObject(v).childNodes[0]; 
    SetBasketPageTotals(x.getAttribute("DiscountValue"), x.getAttribute("ProductTotal"), x.getAttribute("DeliveryCost"), x.getAttribute("TotalCost"), x.getAttribute("TaxCost"))
}

function BasketItemChanged(v)
{
    //alert(v);
    var x = GetXMLObject(v); 
    
    var ProductID = x.childNodes[0].getAttribute("ProductID");
    var LinePrice = x.childNodes[0].getAttribute("LinePrice");
    var ShowRemove = x.childNodes[0].getAttribute("ShowRemove");
    var DiscountedPrice = x.childNodes[0].getAttribute("DiscountPrice");
    
    var ItemsCount = x.childNodes[0].childNodes[1].getAttribute("ItemsCount");
    var ProductTotal = x.childNodes[0].childNodes[1].getAttribute("ProductTotal");
    var MinOrderValue = x.childNodes[0].childNodes[1].getAttribute("MinOrderValue");
    var MaxOrderValue = x.childNodes[0].childNodes[1].getAttribute("MaxOrderValue");
    var DiscountValue = x.childNodes[0].childNodes[1].getAttribute("DiscountValue");
    var DeliveryCost = x.childNodes[0].childNodes[1].getAttribute("DeliveryCost");
    var TotalCost = x.childNodes[0].childNodes[1].getAttribute("TotalCost");
    var TaxCost = x.childNodes[0].childNodes[1].getAttribute("TaxCost");
    var MaxSpendInTime = x.childNodes[0].childNodes[1].getAttribute("MaxSpendInTime");
    var MaxSpendTimeLimit = x.childNodes[0].childNodes[1].getAttribute("MaxSpendTimeLimit");
    var MaxSpendSpentSoFar = x.childNodes[0].childNodes[1].getAttribute("MaxSpendSpentSoFar");
    CheckAllowedOrderValues(TotalCost, MinOrderValue, MaxOrderValue, MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar);
    
    var CustomerSpecificDiscount = x.childNodes[0].getAttribute("CustomerSpecificDiscount");
    var CustomerSpecificDiscountPercentage = x.childNodes[0].getAttribute("CustomerSpecificDiscountPercentage");

    var DealerDiscountText = x.childNodes[0].getAttribute("DealerDiscountText");
    var ShowDealerDiscountPercentage = x.childNodes[0].getAttribute("ShowDealerDiscountPercentage");

    LoadDeliveryMethodList(x.childNodes[0].childNodes[0].childNodes, x.childNodes[0].getAttribute("DeliveryMethodID"), x.childNodes[0].getAttribute("NoDeliveryMethods"))
    LoadSpecialOffers(x.childNodes[0].childNodes[2], CustomerSpecificDiscount, CustomerSpecificDiscountPercentage, DealerDiscountText, ShowDealerDiscountPercentage);
    
    var cell = document.getElementById('clBasketItemLineTotal' + ProductID)
    if (LinePrice == DiscountedPrice)
            cell.innerHTML = LinePrice;
        else
            cell.innerHTML = '<span style="text-decoration:line-through">' + LinePrice + '</span><br>' + DiscountedPrice;

    SetHeaderBasketData(ItemsCount, TotalCost);
    SetBasketPageTotals(DiscountValue, ProductTotal, DeliveryCost, TotalCost, TaxCost);
    if (ShowRemove == 'true')
       alertDHTML('BasketValueSetToZero');
}

function BasketItemRemoved(v)
{
    var x = GetXMLObject(v); 
    
    var ProductID = x.childNodes[0].getAttribute("ProductID");
    
    var ItemsCount = x.childNodes[0].childNodes[1].getAttribute("ItemsCount");
    var ProductTotal = x.childNodes[0].childNodes[1].getAttribute("ProductTotal");
    var MinOrderValue = x.childNodes[0].childNodes[1].getAttribute("MinOrderValue");
    var MaxOrderValue = x.childNodes[0].childNodes[1].getAttribute("MaxOrderValue");
    var DiscountValue = x.childNodes[0].childNodes[1].getAttribute("DiscountValue");
    var DeliveryCost = x.childNodes[0].childNodes[1].getAttribute("DeliveryCost");
    var TotalCost = x.childNodes[0].childNodes[1].getAttribute("TotalCost");
    var TaxCost = x.childNodes[0].childNodes[1].getAttribute("TaxCost");
    var MaxSpendInTime = x.childNodes[0].childNodes[1].getAttribute("MaxSpendInTime");
    var MaxSpendTimeLimit = x.childNodes[0].childNodes[1].getAttribute("MaxSpendTimeLimit");
    var MaxSpendSpentSoFar = x.childNodes[0].childNodes[1].getAttribute("MaxSpendSpentSoFar");
    CheckAllowedOrderValues(TotalCost, MinOrderValue, MaxOrderValue, MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar);
    
    var CustomerSpecificDiscount = x.childNodes[0].getAttribute("CustomerSpecificDiscount");
    var CustomerSpecificDiscountPercentage = x.childNodes[0].getAttribute("CustomerSpecificDiscountPercentage");
    
    var DealerDiscountText = x.childNodes[0].getAttribute("DealerDiscountText");
    var ShowDealerDiscountPercentage = x.childNodes[0].getAttribute("ShowDealerDiscountPercentage");
    
    SetHeaderBasketData(ItemsCount, TotalCost);
    SetBasketPageTotals(DiscountValue, ProductTotal, DeliveryCost, TotalCost, TaxCost);
    
    var tbl = document.getElementById('tblBasket');
    var rw = document.getElementById('rwBasket' + ProductID);
    tbl.deleteRow(rw.sectionRowIndex);
        
    if (ItemsCount > 0)
    {
        LoadDeliveryMethodList(x.childNodes[0].childNodes[0].childNodes, x.childNodes[0].getAttribute("DeliveryMethodID"), x.childNodes[0].getAttribute("NoDeliveryMethods"));
        LoadSpecialOffers(x.childNodes[0].childNodes[3], CustomerSpecificDiscount, CustomerSpecificDiscountPercentage, DealerDiscountText, ShowDealerDiscountPercentage);
    }
    else
        SetEmptyBasket(getInnerText(x.childNodes[0].childNodes[2]));
}

function BasketItemAdded(ret)
{
    var x = GetXMLObject(ret); 
    
    var ProductID = x.childNodes[0].getAttribute("ProductID");
    var ShowAlert = x.childNodes[0].getAttribute("AlertOnAddToBasket");
    var NewQuantity = x.childNodes[0].getAttribute("Quantity");
    
    if (document.getElementById('clProductGridItemBtm' + ProductID))
    {
        var cl = document.getElementById('clProductGridItemBtm' + ProductID);
        cl.innerHTML = NewQuantity + inBasketGridSuffix;
        cl = document.getElementById('imgProductGridItemTop' + ProductID);
        if (cl)
        {
            cl.src = jsImagePath + 'Browser/grid/Grid_border_added_top.gif';
            
            cl = document.getElementById('clProductGridItemBg' + ProductID);
            cl.style.backgroundImage = 'url(' + jsImagePath + 'Browser/grid/grid_border_added_bg.gif)';
            cl = document.getElementById('clProductGridItemBtm' + ProductID);
            cl.style.backgroundImage = 'url(' + jsImagePath + 'Browser/grid/grid_border_added_btm.gif)';
        }
        //if (cl) cl.className = 'ProductGridTableInBasket';
    }
    
    if (document.getElementById('clProductListItemBtm' + ProductID))
    {
        var cl = document.getElementById('clProductListItemBtm' + ProductID);
        cl.innerHTML = NewQuantity + inBasketGridSuffix;
        cl = document.getElementById('imgProductListItemTop' + ProductID);
        if (cl)
        {
            cl.src = jsImagePath + 'Browser/list/list_border_added_top.gif';
            
            cl = document.getElementById('clProductListItemBg' + ProductID);
            cl.style.backgroundImage = 'url(' + jsImagePath + 'Browser/list/list_border_added_bg.gif)';
            cl = document.getElementById('clProductListItemBtm' + ProductID);
            cl.style.backgroundImage = 'url(' + jsImagePath + 'Browser/list/list_border_added_btm.gif)';
        }
    }
    
    SetHeaderBasketData(x.childNodes[0].childNodes[0].getAttribute("ItemsCount"), x.childNodes[0].childNodes[0].getAttribute("TotalCost"));
    if (ShowAlert == 'true')
        confirmDHTML('ItemAddedToBasket', 'document.location = "/checkout/basket.aspx";', '');
}

function SetHeaderBasketData(cnt, val)
{
    var clProceed = document.getElementById('clCheckoutProceed');
    if (cnt == 0) 
    {
        val = Currency + '0.00';
        if (clProceed) clProceed.style.display = 'none';
    }
    else
    {
        if (clProceed) clProceed.style.display = 'block';
    }
    document.getElementById('spnHeaderBasketCount').innerHTML = cnt;
    document.getElementById('spnHeaderBasketTotal').innerHTML = val;
}

function SetBasketPageTotals(Discounted, ProductTotal, DeliveryCost, TotalCost, TaxCost)
{
    if (document.getElementById('clBasketDiscountValue'))
        document.getElementById('clBasketDiscountValue').innerHTML = Discounted; 
        
    if (document.getElementById('clTaxTotal'))
        document.getElementById('clTaxTotal').innerHTML = TaxCost;
         
    document.getElementById('clBasketProductTotal').innerHTML = ProductTotal; 
    document.getElementById('clBasketTotalCost').innerHTML = '<b>' + TotalCost + '</b>'; 
}

function LoadBasketItemsList()
{
    document.getElementById('clBasketContents').style.textAlign = 'left';
    document.getElementById('clBasketContents').innerHTML = '<br><img src="' + jsImagePath + 'loading.gif"><br><br>';
    sndReq('/XML/BasketFunctions.aspx?Action=GetBasketItems&Mode=' + BasketMode);
}

function LoadBasket(doc)
{
    //alert(doc);
    //document.write(doc);
    document.getElementById('clBasketContents').style.textAlign = 'center';
    var xml = GetXMLObject(doc); 
    //alert('1');
    var DiscountValue = xml.childNodes[0].getAttribute("DiscountValue");
    //alert('2');
    var ProductTotal = xml.childNodes[0].getAttribute("ProductTotal");
    var MinOrderValue = xml.childNodes[0].getAttribute("MinOrderValue");
    var MaxOrderValue = xml.childNodes[0].getAttribute("MaxOrderValue");
    var DeliveryMethodID = xml.childNodes[0].getAttribute("DeliveryMethodID");
    var ItemsCount = xml.childNodes[0].getAttribute("ItemsCount");
    var TotalCost = xml.childNodes[0].getAttribute("TotalCost");
    var MaxSpendInTime = xml.childNodes[0].getAttribute("MaxSpendInTime");
    var MaxSpendTimeLimit = xml.childNodes[0].getAttribute("MaxSpendTimeLimit");
    var MaxSpendSpentSoFar = xml.childNodes[0].getAttribute("MaxSpendSpentSoFar");
    CheckAllowedOrderValues(TotalCost, MinOrderValue, MaxOrderValue, MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar);
    SetHeaderBasketData(ItemsCount, TotalCost);
    var TaxCost = xml.childNodes[0].getAttribute("TaxCost");
    var DeliveryCost = xml.childNodes[0].getAttribute("DeliveryCost");
    var CustomerSpecificDiscount = xml.childNodes[0].getAttribute("CustomerSpecificDiscount");
    var CustomerSpecificDiscountPercentage = xml.childNodes[0].getAttribute("CustomerSpecificDiscountPercentage");
    var DeliveryDiscountMessageThreshold = xml.childNodes[0].getAttribute("DeliveryDiscountMessageThreshold");
    
    var CountryName = xml.childNodes[0].getAttribute("CountryName");
    var CountryID = xml.childNodes[0].getAttribute("CountryID");
    var PricesIncludeTax = xml.childNodes[0].getAttribute("PricesIncludeTax");
    
    var BasketItemLinkAction = xml.childNodes[0].getAttribute("BasketItemLinkAction");
    var CheckoutItemLinkAction = xml.childNodes[0].getAttribute("CheckoutItemLinkAction");
    var BasketSpecialOfferAsLink = xml.childNodes[0].getAttribute("BasketSpecialOfferAsLink");
    var CheckoutSpecialOfferAsLink = xml.childNodes[0].getAttribute("CheckoutSpecialOfferAsLink");
    var DealerDiscountText = xml.childNodes[0].getAttribute("DealerDiscountText");
    var ShowDealerDiscountPercentage = xml.childNodes[0].getAttribute("ShowDealerDiscountPercentage");
    
    
    var CustomerSpecificDeliveryDiscountMinimum = xml.childNodes[0].getAttribute("ShippingDiscountRequirement");
    var CustomerSpecificDeliveryDiscountAmount = xml.childNodes[0].getAttribute("ShippingDiscountAmount");
    var ShippingDiscountRequirementIncludesTax = xml.childNodes[0].getAttribute("ShippingDiscountRequirementIncludesTax");
     
    var ItemAction = CheckoutItemLinkAction;
    var OfferAction = CheckoutSpecialOfferAsLink
    
    
    if (BasketMode == 'Basket')
    {
        ItemAction = BasketItemLinkAction;
        OfferAction = BasketSpecialOfferAsLink
    }
    
    if (xml.childNodes[0].childNodes[0].childNodes.length > 0)
    {
        LoadBasketItems(xml.childNodes[0].childNodes[0].childNodes, DiscountValue, ProductTotal, TotalCost, TaxCost, CountryName, CountryID, DeliveryCost, PricesIncludeTax, ItemAction, OfferAction);
        LoadDeliveryMethodList(xml.childNodes[0].childNodes[1].childNodes, DeliveryMethodID, xml.childNodes[0].childNodes[1].getAttribute("NoDeliveryMethods"));
        LoadSpecialOffers(xml.childNodes[0].childNodes[3], CustomerSpecificDiscount, CustomerSpecificDiscountPercentage, DealerDiscountText, ShowDealerDiscountPercentage);
        LoadFreeItems(xml.childNodes[0].childNodes[4].childNodes, ItemAction, OfferAction);
        InvalidSpecialOfferItems(xml.childNodes[0].childNodes[5].childNodes);

        if ((BasketMode == 'Checkout') && (!ShippingDiscountAppliedToCheckout) && (CustomerSpecificDeliveryDiscountAmount*1 != 0))
        {

            //Check wether to add "Spend X more for free delivery"
            var MinValToDisplay = CustomerSpecificDeliveryDiscountMinimum * ((100-DeliveryDiscountMessageThreshold)/100)
            
            var totaltest = ProductTotal.substring(1) * 1;
            if (ShippingDiscountRequirementIncludesTax.toLowerCase() == 'true')
            {
                totaltest += (TaxCost.substring(1) * 1);
            }
            if (MinValToDisplay < totaltest)
            {
                var LeftToSpend = CustomerSpecificDeliveryDiscountMinimum - totaltest;
                //DisplayMessage
                var msg = '';
                if ((CustomerSpecificDeliveryDiscountAmount*1) >= 100)
                    msg = document.getElementById('divShipingDiscountMessageFree').innerHTML;
                else
                    msg = document.getElementById('divShipingDiscountMessageDiscount').innerHTML;
                    
                msg = doReplace(msg, '%%SPENDMORE%%', '£' + LeftToSpend.toFixed(2));
                msg = doReplace(msg, '%%DISCOUNTPERCENTAGE%%', (CustomerSpecificDeliveryDiscountAmount*1).toFixed(2) + '%');
                var tbl = document.getElementById('tblTotalTable');
                var row = tbl.insertRow(tbl.rows.length);
                row.id = 'rwShippingDiscountAvailable'
                var cell = row.insertCell(0);
                cell.colSpan = 2;
                cell.className = 'CheckoutShippingDiscountMessage';
                //cell.style.width = '100%';
                cell.innerHTML = msg;
                
            }
        }
        
        //DeliveryDiscountMinimumValue
        //OrderValue
        //ProductTotal
    }
    else
        SetEmptyBasket(getInnerText(xml.childNodes[0].childNodes[2]));
}

function SetEmptyBasket(content)
{
    document.getElementById('clBasketContents').innerHTML = content;
    document.getElementById('clBasketTotalCost').innerHTML = '£0.00';
}

function LoadDeliveryMethodList(methods, DeliveryMethodID, Error)
{
    lst = document.getElementById('drpDelivery');
    lst.options.length = 0;
    lst.disabled = false;
    if (methods.length > 0)
    {
        for (i=0; i<methods.length; i++)
        {
            var nme = methods[i].getAttribute("DisplayName");
            var price = methods[i].getAttribute("Price");
            var id = methods[i].getAttribute("DeliveryMethodID");
            var txt = nme 
            txt += ': £' + price;
            lst.options[lst.options.length] = new Option(txt, id)
            if (DeliveryMethodID == id) lst.options[lst.options.length-1].selected = true;
        }
    }
    else
    {
        lst.disabled = true;
        lst.options[0] = new Option(Error, '-1');
    }
}

var DontUpdate = false;

function BasketQtyTextBoxBlur(ID)
{
    var txt = document.getElementById('txtQty' + ID)
    var qty = (1 * txt.value);
    if ((trim(txt.value) == '') || (qty == 0))
    {
        DontUpdate = false;
        txt.value = '1';
        BasketQtyChanged(ID, true);
    }
}

function CheckAllowedOrderValues(OrderTotal, MinTotal, MaxTotal, MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar)
{
    OrderTotal = OrderTotal.substring(1)*1;
    if (BasketMode != 'Checkout') return;
    //alert(MaxSpendSpentSoFar + ' ' + OrderTotal + ' ' + MaxSpendInTime);
    //Need to check - MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar
    
    var clError = document.getElementById('clContinueError');
    

    
    var tblError = document.getElementById('tblContinueError');
    var tblPayment = document.getElementById('tblPayment');
    
    if (CustomerAccountSuspended)
    {
        tblError.style.display = 'block';
        tblPayment.style.display = 'none';
        return;
    }
    MaxTotal = MaxTotal*1;
    MinTotal = MinTotal*1;
    
        
    if ((OrderTotal > MaxTotal) && (MaxTotal > 0))
    {
        tblError.style.display = 'block';
        tblPayment.style.display = 'none';
        var h = document.getElementById('divMaxExceededContent').innerHTML;
        var exceededby = OrderTotal - MaxTotal;
        h = doReplace(h, '%%EXCEEDEDBY%%', exceededby.toFixed(2))
        h = doReplace(h, '%%MAXORDERVALUE%%', '£' + MaxTotal.toFixed(2))
        clError.innerHTML = h;
        return;
    }
        
    if (OrderTotal < MinTotal)
    {
        tblError.style.display = 'block';
        tblPayment.style.display = 'none';
        var h = document.getElementById('divMinNotMetContent').innerHTML;
        var spendmore = MinTotal - OrderTotal;
        h = doReplace(h, '%%SPENDMORE%%', '£' + spendmore.toFixed(2))
        h = doReplace(h, '%%MINORDERVALUE%%', '£' + MinTotal.toFixed(2))
        clError.innerHTML = h;
        return;
    }
    
    MaxSpendInTime = MaxSpendInTime*1;
    if (((MaxSpendSpentSoFar*1) + (OrderTotal*1) > MaxSpendInTime) && (MaxSpendInTime > 0))
    {
        tblError.style.display = 'block';
        tblPayment.style.display = 'none';
        var tl = MaxSpendTimeLimit;
        TimePeriod =  tl + ' hours';
        tl = (tl/24) + '';
        if (tl.split('.').length == 1)
            TimePeriod = tl + ' days';
        var h = document.getElementById('divMaxSpendContent').innerHTML;
        h = doReplace(h, '%%MAXSPENDINTIME%%', '£' + MaxSpendInTime.toFixed(2))
        h = doReplace(h, '%%MAXSPENDTIMELIMIT%%', TimePeriod)
        clError.innerHTML = h;
        return;
    }
    
    tblError.style.display = 'none';
    tblPayment.style.display = 'block';
}


function LoadBasketItems(items, DiscountValue, ProductTotal, TotalCost, TaxCost, CountryDisplayName, CountryID, DeliveryCost, PricesIncludeTax, ItemAction, OfferLink)
{
    var cl = document.getElementById('clBasketContents');
    cl.innerHTML = '<img align="left" src="' + jsImagePath + 'loading.gif">';    
    var table = document.createElement('table');
    table.cellPadding = 0;
    table.cellSpacing=0;
    table.id = 'tblBasket';
    table.width = '660';
    table.border = '0';
    for (i=0; i< items.length; i++)
    {
        var Name = items[i].getAttribute("Name");
        Name = doReplace(Name, 'ampis', '&');
        var ProductID = items[i].getAttribute("ProductID");
        var Qty = items[i].getAttribute("Quantity");
        //var Desc = items[i].getAttribute("Description");
        var SKU = items[i].getAttribute("SKU");
        var AP = items[i].getAttribute("Path");
        var Price = items[i].getAttribute("Price");
        var LinePrice = items[i].getAttribute("LinePrice");
        var Stock = items[i].getAttribute("Stock");
        var Image = items[i].getAttribute("Image");
        var Desc = getInnerText(items[i].childNodes[0]);
        
        //OFFERS????
        var Offers = getInnerText(items[i].childNodes[1].childNodes[0]);
        var DiscountedPrice = items[i].childNodes[1].childNodes[0].getAttribute("DiscountedPrice")
                
        //??????????
        var row = table.insertRow(table.rows.length);
        row.id = 'rwBasket' + ProductID;
        row.className = 'BasketItemRow';
        var CellNo = 0;
        var cell = row.insertCell(CellNo);

                
        if (BasketMode == 'Basket')
        {
            cell = row.insertCell(CellNo);
            cell.className = 'BasketItemRemoveCell';
            cell.innerHTML = '<a href="javascript:RemoveBasketItem(\'' + ProductID + '\')">' + BasketRemoveItemLink + '</a>';
            CellNo++;
        }
        
        
        cell = row.insertCell(CellNo);
        CellNo++;
        cell.className = 'BasketItemImageCell';
        var link = '';
        
        if (ItemAction == 'product')
            link = AP + '.aspx'
        else if (ItemAction == 'dhtml')
            link = 'javascript:ShowProductDHTML(\'' + AP + '\');';
        else
            link = '';
            
        Image = GetImageDisplay(Image, link, Name, 50, Name);
        //Image = '<table class="BasketImageHolder"><tr><td>' + Image + '</td></tr></table>';
        cell.innerHTML = Image
        cell.style.paddingTop = '5px';
        cell.style.paddingBottom = '5px';
        cell = row.insertCell(CellNo);
        CellNo++;
        
        cell.className = 'BasketItemQuantityCell';
        if (BasketMode == 'Basket')
            cell.innerHTML = '<input maxlength="' + ProductQuantityBoxMaximumLength + '" style="width:30px; text-align:center" type="text" onkeyup="BasketQtyChanged(' + ProductID + ', false, event)" onblur="BasketQtyTextBoxBlur(' + ProductID + ')" onkeypress="return BasketQtyTextBoxKeyPress(event, ' + ProductID + ')" id="txtQty' + ProductID + '" value="' + Qty + '">';
        else
            cell.innerHTML = Qty;
            
        cell = row.insertCell(CellNo);
        CellNo++;
        if (BasketMode == 'Basket')
            cell.className = 'BasketItemProductCell';
        else
            cell.className = 'BasketItemProductCellCheckout';
        var nme = '';
        if (link == '')
            nme += Name
        else
            nme += '<a href="' + link + '">' + Name + '</a>';
                
                
                
        if (Offers != '')
        {    
            //if (OfferLink == 'true')
            //    Offers = '<div><a href="/Products/Search.aspx?SO=' + offerid + '">' + Offers + '</a></div>';
            //else
            //    Offers = '<div>' + Offers + '</div>';

        //nme += '<div id="divProductSpecialOffer' + id + '">' + offername + '</div>';
            nme = '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">' + nme + '</td></tr><tr>';
            nme += '<td class="AvailableOfferIndentCell" ><img src="' + jsImagePath + 'Checkout/indent_icon.jpg" /></td>';
            nme += '<td class="AvailableOfferOfferCell">' + Offers + '</td></tr></table>';
        }
        //if (Offers != '')
        //{ 
        //    nme += '<div id="divProductSpecialOffer' + ProductID + '">' + Offers + '</div>';
        //}
        
        cell.innerHTML = nme;
        cell = row.insertCell(CellNo);
        CellNo++;
        cell.className = 'BasketItemEachCell';
        cell.innerHTML = Price;
        cell = row.insertCell(CellNo);
        CellNo++;
        cell.className = 'BasketItemLineTotalCell';
        cell.id = 'clBasketItemLineTotal' + ProductID;
        
        if (LinePrice == DiscountedPrice)
            cell.innerHTML = LinePrice;
        else
            cell.innerHTML = '<span style="text-decoration:line-through">' + LinePrice + '</span><br>' + DiscountedPrice;
        

        row = table.insertRow(table.rows.length);
        row.className = 'BasketSeparatorRow';
        cell = row.insertCell(0);
    }
    cl.innerHTML = '';
    cl.appendChild(table);
    var row, cell
    ProductRow = table.rows.length;

    
    table = document.createElement('table');
    table.id = 'tblTotalTable';
    table.className = 'BasketTotalsTable';
    cl.appendChild(table);
    //ProductTotal Row
    row = table.insertRow(table.rows.length);
    cell = row.insertCell(0);
    cell.className = 'BasketTotalLeftCell';
    cell.style.paddingTop = '10px';
    cell.innerHTML = BasketSubTotalCaption;
    cell = row.insertCell(1);
    cell.className = 'BasketTotalRightCell';
    cell.style.paddingTop = '10px';
    cell.id = 'clBasketProductTotal';
    cell.innerHTML = ProductTotal;
    
    
    //Tax Row
    if (PricesIncludeTax == 'false')
    {
        row = table.insertRow(table.rows.length);
        cell = row.insertCell(0);
        cell.className = 'BasketTotalLeftCell';
        cell.innerHTML = BasketTaxCaption;
        cell = row.insertCell(1);
        cell.className = 'BasketTotalRightCell';
        cell.id = 'clTaxTotal';
        cell.innerHTML = TaxCost;
        CustomerDiscountRow = 2;
    }
    
    CustomerDiscountRow = 2;
    
    //Delivery Row
    row = table.insertRow(table.rows.length);
    if (BasketMode == 'Basket') 
    {
        cell = row.insertCell(0);
        cell.style.paddingBottom = '20px';
        cell.className = 'BasketTotalLeftCell';
        cell.id = 'clBasketDeliveryCountry';
        FillBasketCountryCell(cell, CountryID, CountryDisplayName);
        cell = row.insertCell(1);
        cell.style.paddingBottom = '20px';
        cell.className = 'BasketTotalRightCell';
        cell.id = 'clBasketDeliveryCost';
        cell.innerHTML = '<select id="drpDelivery" onchange="BasketChangeDeliveryMethod()"></select>'
    }      
    else
    {
        row = table.insertRow(table.rows.length);
        cell = row.insertCell(0);
        cell.style.paddingBottom = '20px';
        cell.className = 'BasketTotalLeftCell';
        cell.innerHTML = 'Delivery method:&nbsp;&nbsp;<select id="drpDelivery" onchange="CheckoutChangeDeliveryMethod()"></select>';
        cell = row.insertCell(1);
        cell.style.paddingBottom = '20px';
        cell.className = 'BasketTotalRightCell';
        cell.id = 'clCheckoutDeliveryCost';
        cell.innerHTML = DeliveryCost;
    }
    
    table = document.createElement('table');
    table.cellPadding = 0;
    table.cellSpacing = 3;
    table.id = 'tblAddVoucher';
    table.align = 'right';
    table.className = 'BasketAddVoucherTable';
    table.style.display = 'none';
    cl.appendChild(table);
        
    
    //Discount row
    //row = table.insertRow(table.rows.length);
    //cell = row.insertCell(0);
    //cell.id = 'clBasketDiscount';
    //cell.style.paddingTop = '20px';
    //cell.style.paddingBottom = '20px';
    //cell.colSpan = 2;
    //cell.style.width = '660px';
    
    //Total Row
    //row = table.insertRow(table.rows.length);
    //cell = row.insertCell(0);
    //cell.className = 'BasketTotalLeftCell';
    //cell.innerHTML = BasketTotalCaption;
    //cell = row.insertCell(1);
    //cell.className = 'BasketTotalRightCell';
    //cell.id = 'clBasketTotalCost';
    //cell.innerHTML = '<b>' + TotalCost + '</b>';
    var c = document.getElementById('clBasketTotalCost')
    c.innerHTML = TotalCost;
    
}


function FillBasketCountryCell(cell, CountryID,CountryDisplayName)
{
    cell.innerHTML = '<a href="javascript:ChangeBasketCountry(\'' + CountryID + '\')">' + CountryDisplayName + ' delivery</a>';
}

function LoadBasketCountriesList(doc)
{
    var xml = GetXMLObject(doc);
    var CurrentCountryID = xml.childNodes[0].getAttribute("CurrentCountryID");
    var cell = document.getElementById('clBasketDeliveryCountry');
    cell.innerHTML = '<select id="drpBasketCountry" onchange="SetBasketCountry(\'' + CurrentCountryID + '\');"></select>';
    
    var drp = document.getElementById('drpBasketCountry');
    drp.options.length = 0;
    
    for (i=0; i<xml.childNodes[0].childNodes.length; i++)
    {
        var CountryID = xml.childNodes[0].childNodes[i].getAttribute("id");
        var CountryName = xml.childNodes[0].childNodes[i].getAttribute("CountryName");
        drp.options[drp.options.length] = new Option(CountryName, CountryID);
        if (CountryID == CurrentCountryID)
            drp.options[drp.options.length-1].selected = true;
    }
    drp.options[drp.options.length] = new Option('Other...', '-1');
}

function LoadBasketCountry(doc)
{
    //alert(doc);
    //need to do something with the offers
    var xml = GetXMLObject(doc);
    cell = document.getElementById('clBasketDeliveryCountry');
    FillBasketCountryCell(cell, xml.childNodes[0].getAttribute("CountryID"), xml.childNodes[0].getAttribute("CountryName"));

    var methods = xml.childNodes[0].childNodes[0].childNodes;
    var Error = xml.childNodes[0].childNodes[0].getAttribute("NoDeliveryMethods")

    LoadDeliveryMethodList(methods, xml.childNodes[0].getAttribute("DeliveryMethodID"), Error);
    
    var ItemsCount = xml.childNodes[0].childNodes[1].getAttribute("ItemsCount");
    var ProductTotal = xml.childNodes[0].childNodes[1].getAttribute("ProductTotal");
    var MinOrderValue = xml.childNodes[0].childNodes[1].getAttribute("MinOrderValue");
    var MaxOrderValue = xml.childNodes[0].childNodes[1].getAttribute("MaxOrderValue");
    var DiscountValue = xml.childNodes[0].childNodes[1].getAttribute("DiscountValue");
    var DeliveryCost = xml.childNodes[0].childNodes[1].getAttribute("DeliveryCost");
    var TotalCost = xml.childNodes[0].childNodes[1].getAttribute("TotalCost");
    var TaxCost = xml.childNodes[0].childNodes[1].getAttribute("TaxCost");
    var MaxSpendInTime = xml.childNodes[0].childNodes[1].getAttribute("MaxSpendInTime");
    var MaxSpendTimeLimit = xml.childNodes[0].childNodes[1].getAttribute("MaxSpendTimeLimit");
    var MaxSpendSpentSoFar = xml.childNodes[0].childNodes[1].getAttribute("MaxSpendSpentSoFar");
    CheckAllowedOrderValues(TotalCost, MinOrderValue, MaxOrderValue, MaxSpendInTime, MaxSpendTimeLimit, MaxSpendSpentSoFar);
    
    var CustomerSpecificDiscount = xml.childNodes[0].childNodes[1].getAttribute("CustomerSpecificDiscount");
    var CustomerSpecificDiscountPercentage = xml.childNodes[0].childNodes[1].getAttribute("CustomerSpecificDiscountPercentage");
    var DealerDiscountText = xml.childNodes[0].childNodes[1].getAttribute("DealerDiscountText");
    var ShowDealerDiscountPercentage = xml.childNodes[0].childNodes[1].getAttribute("ShowDealerDiscountPercentage");
    
    var offers = xml.childNodes[0].childNodes[2];
    LoadSpecialOffers(offers, CustomerSpecificDiscount, CustomerSpecificDiscountPercentage, DealerDiscountText, ShowDealerDiscountPercentage);

    SetBasketPageTotals(DiscountValue, ProductTotal, DeliveryCost, TotalCost, TaxCost);

}

function SetBasketCountry(CountryID)
{
    var drp = document.getElementById('drpBasketCountry');
    if (drp.value == '-1')
    {
        alertDHTML('BasketShipToOtherCountry'); 
        for (i=0; i<drp.options.length; i++)
        {
            if (drp.options[i].value == CountryID)
            {
                drp.options[i].selected = true;
                break;
            }
        }
    }
    else
    {
        ShowWorkingTax();
        ShowWorkingTotal();
        ShowWorkingDealerShipping();
        ShowWorkingDealer();
        sndReq('/XML/BasketFunctions.aspx?Action=UpdateCountry&CountryID=' + drp.value);
    }
}

function ChangeBasketCountry(CurrentCountryID)
{
    sndReq('/XML/BasketFunctions.aspx?Action=GetCountries&CurrentCountryID=' + CurrentCountryID);
}

function BasketChangeDeliveryMethod()
{
    ShowWorkingTotal();
    ShowWorkingDealerShipping();
    var DeliveryMethodID = document.getElementById('drpDelivery').value;
    sndReq('/XML/BasketFunctions.aspx?Action=UpdateDeliveryMethod&DeliveryMethodID=' + DeliveryMethodID);
}

function CheckoutChangeDeliveryMethod()
{
    ShowWorkingTotal();
    var DeliveryMethodID = document.getElementById('drpDelivery').value;
    sndReq('/XML/BasketFunctions.aspx?Action=UpdateDeliveryMethod&DeliveryMethodID=' + DeliveryMethodID + '&Mode=Checkout');
}

function RemoveBasketItem(ID)
{
    var yes = "doBasketItemRemove('" + ID + "');"
    confirmDHTML('RemoveFromBasket', yes, '');
}

function doBasketItemRemove(ID)
{
    ShowBasketWorkingMessages(ID);
    ShowWorkingTax();
    ShowWorkingTotal();
    sndReq('/XML/BasketFunctions.aspx?Action=RemoveBasketItem&RemoveProductID=' + ID);
}

var CanContinueWithQtyUpdate = true;

function BasketQtyTextBoxKeyPress(e, ID)
{
    CanContinueWithQtyUpdate = true;
    var key = window.event ? e.keyCode : e.which;
    var keychar = String.fromCharCode(key);
   
    if ((key!=8) && (key!=46))
    {
        if (document.getElementById('txtQty' + ID).value.length >= ProductQuantityBoxMaximumLength)  CanContinueWithQtyUpdate = false;
    }
    
    if (!isInteger(keychar) && (key!=8) && (key!=0))
    {
        //need to remove focus from the textbox
        document.getElementById('txtQty' + ID).blur();
        DontUpdate = true;
        alertDHTML('IntegerValuesOnly');
        return false;
    }
    return true;
}



function BasketQtyChanged(ID, ShowRemoveError, e)
{
    if (e != null)
    {
        var key = window.event ? e.keyCode : e.which;
        if ((key >= 9) && (key <=45)) DontUpdate = true;
        if ((key==8) || (key==46)) CanContinueWithQtyUpdate = true;
    }
    
    var qty = document.getElementById('txtQty' + ID).value;
    var rem = '&ShowRemove=false';
    if (ShowRemoveError)
        rem = '&ShowRemove=true';
        
    if ((qty != 0) && (!DontUpdate) && (CanContinueWithQtyUpdate))
    {
        ShowBasketWorkingMessages(ID)
        ShowWorkingTax();
        ShowWorkingTotal();
        sndReq('/XML/BasketFunctions.aspx?Action=UpdateQuantity&EditProductID=' + ID + '&Qty=' + qty + rem, 'BasketItemQtyChange' + ID);
    }    
    DontUpdate = false;
}

function ShowBasketWorkingMessages(ID)
{
    var c = doReplace(BasketWorkingContent, '%%jsImagePath%%', jsImagePath);
    SetContentIfExists('clBasketItemLineTotal' + ID, c);
    SetContentIfExists('clBasketDiscountValue', c);
    SetContentIfExists('clBasketProductTotal', c);
    ShowWorkingDealerShipping();
    ShowWorkingDealer();
    ShowWorkingTax();
}

function ShowWorkingTax()
{
    SetContentIfExists('clTaxTotal', doReplace(BasketWorkingContent, '%%jsImagePath%%', jsImagePath));
}

function ShowWorkingTotal()
{
    SetContentIfExists('clBasketTotalCost', doReplace(BasketWorkingTotalContent, '%%jsImagePath%%', jsImagePath));
}

function ShowWorkingDealer()
{
    SetContentIfExists('clCustomerSpecificDiscount2', doReplace(BasketWorkingContent, '%%jsImagePath%%', jsImagePath));
}

function ShowWorkingDealerShipping()
{
    SetContentIfExists('clBasketOfferValueSHIPPING', doReplace(BasketWorkingContent, '%%jsImagePath%%', jsImagePath));
}

function SetContentIfExists(cl, content)
{
    if (document.getElementById(cl)) document.getElementById(cl).innerHTML = content;
}

function AddItemToBasket(productID, HasOptions)
{
    if (HasOptions == '1')
    {
        ProductWithOptionsID = productID.substr(1);
        div = document.getElementById('divPopupMask');
        SetOpacity('divPopupMask', 0);
        div.style.visibility = 'visible';
        div.style.top = 0;
        div.style.left = 0;
        var qty = 1;//document.getElementById('txtQty' + productID).value;
        StartMask('divProductOptionsPopup')
        
        sndReq('/xml/GetProductOptions.aspx?target=Pop&ShowCancel=true&Qty=' + qty + '&GetOptions=yes&ProductWithOptionsID=' + ProductWithOptionsID);
        //var OptionHolder = document.getElementById('divProductOptionsPopup');
    }
    else
        InternalBasketAdd(productID, 1);
}

function AddToBasketWithQtyStatic(productID)
{
    InternalBasketAdd(productID, document.getElementById('txtQtyStatic').value);
}

function AddToBasketWithQty(productID)
{   
    if (productID.substr(0, 1) == 'O')
    {
        AddItemToBasket(productID, 1)
    }
    else
        InternalBasketAdd(productID, document.getElementById('txtQty' + productID).value);
}

function InternalBasketAdd(productID, qty)
{
    if (!ShopOpen)
        alertDHTML(ShopClosedMessage);
    else
    {
        //do the add to basket
        if (!isInteger(qty))
            qty = 1;
        sndReq('/XML/BasketFunctions.aspx?AddProductID=' + productID + '&Quantity=' + qty);
    }
}

function AddToBasketWithOptionsSO(soid)
{
    var qty = document.getElementById('txtQty').value;
    sndReq('/XML/BasketFunctions.aspx?AddFreeProductWithOptionsID=' + ProductWithOptionsID + '&Quantity=' + qty + '&Options=' + OptionsSelected + '&SpecialOfferID=' + soid);
    CancelProductOptionsPopup('Pop');
}
    

function AddToBasketWithOptions(Target)
{
    if (!ShopOpen)
        alertDHTML(ShopClosedMessage);
    else
    {
        var qty = document.getElementById('txtQty' + Target).value;
        if (!isInteger(qty))
            qty = 1;
            
        sndReq('/XML/BasketFunctions.aspx?AddProductWithOptionsID=' + ProductWithOptionsID + '&Quantity=' + qty + '&Options=' + OptionsSelected);
    }
    if (Target != 'Static')
        CancelProductOptionsPopup('Pop');
}
    

function AddBasketFreeItemWithOptions(id, qty, soid)
{
    ProductWithOptionsID = id;
    div = document.getElementById('divPopupMask');
    SetOpacity('divPopupMask', 0);
    div.style.visibility = 'visible';
    div.style.top = 0;
    div.style.left = 0;
    StartMask('divProductOptionsPopup');
    SpecialOfferQty = qty;
    sndReq('/xml/GetProductOptions.aspx?target=Pop&ShowCancel=true&GetOptions=yes&ProductWithOptionsID=' + id + '&Quantity=' + qty + '&SpecialOfferID=' + soid);
}

function AddBasketFreeItem(id, qty, soid)
{
    sndReq('/XML/BasketFunctions.aspx?AddBasketFreeItemID=' + id + '&Quantity=' + qty + '&SpecialOfferID=' + soid);
}

function RemoveBasketFreeItem(id)
{
    sndReq('/XML/BasketFunctions.aspx?RemoveBasketItemID=' + id);
}
