﻿var OptionsSelected = ''
var OptionsList = new Array();
var OptionsNames = new Array();
var pb_ProductType = '-1';
var pb_PriceMin = -1;
var pb_PriceMax = -1;
var pb_Brand = '-1';
var pb_OrderBy;
var pb_PageSize;
var pb_PageNumber; 
var pb_DisplayType;
var pb_Keywords = '';
var pb_SpecialOffer = -1;
var pb_Group = -1;
var CMSDesk = false;
var APCMS = '/Products';
var SpecialOfferQty = 1;
var PageFirstLoad = true;
var ProductOptionsPricesTextDefault = '';

var ProductWithOptionsID = -1;

var FilterList = new Array();

function FilterData(i, v)
{
    this.id = i;
    this.value = v;
}

function loadRelatedProducts(doc)
{
    //alert(doc);
    var xml = GetXMLObject(doc);
    var count = xml.childNodes[0].getAttribute('count')
    var preview = xml.childNodes[0].getAttribute('Preview')
    var AP = xml.childNodes[0].getAttribute('AliasPath')
    var LoadProductOptions = xml.childNodes[0].getAttribute('LoadProductOptions')
    if (count == 0)
    {
        document.getElementById('rwProducts').style.display = 'none';
        document.getElementById('rwProductsHeader').style.display = 'none';
        //document.getElementById('rwRelatedLink').style.display = 'none';
    }
    else
    {
        document.getElementById('rwProducts').style.display = 'block';
        document.getElementById('rwProductsHeader').style.display = 'block';
        //document.getElementById('rwRelatedLink').style.display = 'block';
        LoadProductsGrid(xml.childNodes[0].childNodes);
        if ((count*1) > (preview*1))
        {
            var table = document.createElement('table');
            table.style.width = '600px';
            table.cellspacing = '0';
            table.cellpadding = '0';
            table.border = '0px';
            var row = table.insertRow(table.rows.length);
            var cell = row.insertCell(0);
            cell.align = 'right';
            cell.innerHTML = '<a href="javascript:GetRandomAssociatedProducts(\''+ AP + '\', document.getElementById(\'hidExisting\').value, \'false\');">Show all related products</a>';
            document.getElementById('clProducts').appendChild(table);
            document.getElementById('clProducts').id = 'clProductsOld';
            cell.id = 'clProducts'
            
        }
    }
    //if (LoadProductOptions == 'true')
    //    sndReq('/xml/GetProductOptions.aspx?Target=Pop&ShowCancel=false&GetOptions=yes&ProductWithOptionsID=' + ProductWithOptionsID);
}

function LoadCustomFilters(fs, AP)
{
    var tbl = document.getElementById('tblRefineSearch');
    FilterList.length = 0;
    for (i=0; i<fs.length; i++)
    {
        var FilterName = fs[i].getAttribute("name");
        var ProductTypeFieldID = fs[i].getAttribute("ProductTypeFieldID");
        var ListLoc = FilterList.length;
        FilterList[ListLoc] = new FilterData(ProductTypeFieldID, '')
        
        var StartNum = 2;
        if (CMSDesk) StartNum = 3
        var rw = tbl.insertRow(StartNum);
        rw.setAttribute('id', 'rwCustomFilter' + ProductTypeFieldID);
        
        var cl = rw.insertCell(0);
        cl.className = 'RefineSearchHeader';
        cl.innerHTML = '';
        
        var o = '';
        if (CMSDesk)
            o = '<select onchange="ApplyCustomFilter(\'' + ProductTypeFieldID + '\', this.value, \'' + AP + '\');">';
            
        for (x=0; x<fs[i].childNodes.length; x++)
        {
            var value = getInnerText(fs[i].childNodes[x]);
            var cnt = fs[i].childNodes[x].getAttribute("count");
            var selected = fs[i].childNodes[x].getAttribute("selected");
            
            if (CMSDesk)
            {
                o += '<option value="' + value + '"';
                if (selected == 'true') 
                {
                    o += ' selected ';
                    FilterList[ListLoc] = new FilterData(ProductTypeFieldID, value);
                }
                
                o += '>' + value + ' (' + cnt + ')</option>';
            }
            else
            {
                if (selected == 'true')
                {
                    o += '<span class="RefineSearchSelectedItem">'  + value + ' (' + cnt + ')</span>';
                    FilterList[ListLoc] = new FilterData(ProductTypeFieldID, value);
                }
                else
                    o += '<a href="javascript:ApplyCustomFilter(\'' + ProductTypeFieldID + '\', \'' + value + '\', \'' + AP + '\');">' + value + ' (' + cnt + ')</a>';
                
                o += ',&nbsp;&nbsp;&nbsp;';
            }
        }
        if (CMSDesk)
            o += '</select>';
        else
            o = o.substring(0, o.length-19);

        cl.innerHTML = FilterName;
        cl = rw.insertCell(1);
        cl.className = 'RefineSearchLink';
        cl.innerHTML = o;
    }
}

function ApplyCustomFilter(id, value, AP)
{
    for (i=0; i<FilterList.length; i++)
    {
        if (FilterList[i].id == id)
        {
            FilterList[i] = new FilterData(id, value);
            break;
        }
    }
    GetProductBrowser(AP, 'yes');
}

function loadProductBrowser(doc)
{
    //alert(doc);
    var xml = GetXMLObject(doc);
    
    ShowRRP = (xml.childNodes[0].getAttribute('ShowRRP') == 'true')
    
    ForceFilter = xml.childNodes[0].getAttribute('ForceFilter');
    
    var search = xml.childNodes[0].childNodes[0];
    var settings = xml.childNodes[0].childNodes[1];
    var StartNumber = settings.getAttribute('StartNumber');
    var EndNumber = settings.getAttribute('EndNumber');
    var TotalRecords = settings.getAttribute('TotalRecords');
    var currentpage = settings.getAttribute('currentpage');
    var PageSize = settings.getAttribute('PageSize');
    var DisplayMode = settings.getAttribute('DisplayMode');
    var TotalPages = settings.getAttribute('TotalPages');
    //var NoProducts = '<table align="center"><tr><td>No products found</td></tr></table>'
    var NoProducts = settings.getElementsByTagName('NoneFound')[0].firstChild.data;
    var AP = search.getAttribute("AliasPath");
    var keywords = search.getAttribute("Keywords");
    
    pb_DisplayType = DisplayMode;
    pb_PageSize = PageSize;
    pb_PageNumber = currentpage;
    pb_Keywords = keywords;
 
    var tbl = document.getElementById('tblRefineSearch');
    var rowremoved = true;
    while (rowremoved)
    {
        rowremoved = false;
        for (i=0; i<tbl.rows.length; i++)
        {
            if (tbl.rows[i].id.substr(0, 14) == 'rwCustomFilter')
            {
                tbl.deleteRow(i);
                rowremoved = true;
                break;
            }
        }
    }   
    
    if (!CMSDesk)
    {        
        document.getElementById('clListProductTypes').innerHTML =  buildRefineString(search.childNodes[0].getElementsByTagName('Type'), 'ProductType', AP);  

        if (document.getElementById('clListPrices')) document.getElementById('clListPrices').innerHTML =  buildRefineString(search.childNodes[1].getElementsByTagName('Price'), 'Price', AP);  
        if (document.getElementById('clListBrands')) document.getElementById('clListBrands').innerHTML =  buildRefineString(search.childNodes[2].getElementsByTagName('Brand'), 'Brand', AP);  
        if (document.getElementById('clListOrder')) document.getElementById('clListOrder').innerHTML =  buildRefineString(search.childNodes[3].getElementsByTagName('Order'), 'Order', AP);  
        if (document.getElementById('clListOffer')) document.getElementById('clListOffer').innerHTML =  buildRefineString(search.childNodes[4].getElementsByTagName('SpecialOffer'), 'SpecialOffer', AP);  
        if (document.getElementById('clListGroup')) document.getElementById('clListGroup').innerHTML =  buildRefineString(search.childNodes[5].getElementsByTagName('Group'), 'Group', AP);  
        
        LoadCustomFilters(search.childNodes[6].childNodes, AP);
        
        
        buildKeywords(pb_Keywords, AP);
        
        //document.getElementById('txtRefineKeywords').value = pb_Keywords;
        document.getElementById('txtRefineKeywords').value = '';
        //if ((document.getElementById('txtQuickSearch')) && (pb_Keywords != '')) document.getElementById('txtQuickSearch').value  = pb_Keywords;
        
        if (TotalPages==0) TotalPages = 1;
        
        //USE THIS BIT IF PAGE SIZES APPEAR IN DDL
        //document.getElementById('ddlPageSize').value = pb_PageSize;
        
        
        //USE THIS BIT IF PAGE SIZES APPEAR IN FILTER LIST, NOT AS DDL
        //______________________________________________________
        var pagesizes = document.getElementById('hidPageSizes').value;
        var plist = pagesizes.split(',');
        var sizes = '';
        
        for (i in plist)
        {
            if (plist[i] == pb_PageSize)
                sizes += '<span class="RefineSearchSelectedItem">' + plist[i] + '</span>';
            else
                sizes += '<a href="javascript:ChangeProductBrowsing(\'' + plist[i] + '\', \'PageSize\', \'' + AP + '\');">' + plist[i] + '</a>';
                
            sizes += ',&nbsp;&nbsp;&nbsp;'
        }
        sizes = sizes.substring(0, sizes.length-19);
        document.getElementById('clResultsPerPage').innerHTML = sizes;
        //____________________________________________________________
        
        document.getElementById('clResultsSummary').innerHTML = 'Showing <span class="ProductResultsSummaryNumbers">' + StartNumber + '-' + EndNumber + '</span> of <span class="ProductResultsSummaryNumbers">' + TotalRecords + '</span>';
        
        var p = BuildPaging(TotalPages, currentpage, 3, "...&nbsp;", "&nbsp;", AP)  
        document.getElementById('clPaging').innerHTML = p;
        document.getElementById('clPagingBottom').innerHTML = p;
        
        //imgG = document.getElementById('imgBrowseGrid');
        //imgL = document.getElementById('imgBrowseList');
        //imgSpc = document.getElementById('imgBrowseSpc');
            
        if (TotalRecords !=0)
        {
            //imgG.style.visibility = 'visible';
            //imgL.style.visibility = 'visible';
            //imgSpc.style.visibility = 'visible';
            var clView = document.getElementById('clViewType');
            if (DisplayMode.toLowerCase() == 'list')
            {
                //imgG.src = '/siteimages/productInfo/btn_grid.gif';
                //imgL.src = '/siteimages/productInfo/btn_list_over.gif';
                clView.innerHTML = '<span class="RefineSearchSelectedItem">Details list</span>,&nbsp;&nbsp;&nbsp;<a href="javascript:ChangeProductBrowsing(\'grid\', \'displaytype\', \'' + AP + '\')">Thumbnails</a>';
                LoadProductsList(xml.childNodes[0].childNodes[2].childNodes);
            }
            else
            {
                //imgG.src = '/siteimages/productInfo/btn_grid_over.gif';            
                //imgL.src = '/siteimages/productInfo/btn_list.gif';
                clView.innerHTML = '<a href="javascript:ChangeProductBrowsing(\'list\', \'displaytype\', \'' + AP + '\')">Details list</a>,&nbsp;&nbsp;&nbsp;<span class="RefineSearchSelectedItem">Thumbnails</span>';
                LoadProductsGrid(xml.childNodes[0].childNodes[2].childNodes);
            }
        }
        else
        {
            //imgG.style.visibility = 'hidden';
            //imgL.style.visibility = 'hidden';
            //imgSpc.style.visibility = 'hidden';
            document.getElementById('clProducts').innerHTML = NoProducts;
        }
        document.getElementById('txtRefineKeywords').value = '';
    }
    else
    {
        buildKeywords(pb_Keywords, AP);
        
        BuildRefineDDOptions(search.childNodes[0].getElementsByTagName('Type'), 'drpProductTypes');  
        BuildRefineDDOptions(search.childNodes[1].getElementsByTagName('Price'), 'drpPrice');  
        BuildRefineDDOptions(search.childNodes[2].getElementsByTagName('Brand'), 'drpBrand');  
        BuildRefineDDOptions(search.childNodes[3].getElementsByTagName('Order'), 'drpOrder');  
        BuildRefineDDOptions(search.childNodes[4].getElementsByTagName('SpecialOffer'), 'drpOffer');  
        BuildRefineDDOptions(search.childNodes[5].getElementsByTagName('Group'), 'drpGroup');  
        
        LoadCustomFilters(search.childNodes[6].childNodes, APCMS);
        custom = '';
        document.getElementById('txtKeyword').value = '';
    }
    
    xml = null;
        
    //need to assign the structure to this string
    custom = ''
    for (i=0; i<FilterList.length; i++)
    {
        if (FilterList[i].value != 'Show All')
            custom += FilterList[i].id + '___' + FilterList[i].value + '|||';
    }
    
    
    if (CMSDesk)
    {
        BuildPageLink('lnkPageLink', APCMS, custom);
        document.getElementById('PrimeProductBrowserSelector1_txtURL').value = document.getElementById('lnkPageLink').href;
    }
    else
    {
        BuildPageLink('lnkPageLink', AP, custom);
        document.getElementById('lnkPageLink1').href = document.getElementById('lnkPageLink').href;
        BuildRSSLink('lnkRSSLink', AP, custom);
        document.getElementById('lnkRSSLink1').href = document.getElementById('lnkRSSLink').href;
    }
        
    if (ForceFilter == 'open')
        initSlider('RefineSearch', 'open');
        
    if (ForceFilter == 'closed')
        initSlider('RefineSearch', 'closed');
        
    if (document.getElementById('divSliderContentHolder'))
            SlideHolderToChildSize('ContentHolder', 'clProducts');
}

function BuildRSSLink(cntrl, A, c)
{
    document.getElementById(cntrl).href = '/RSS.aspx?AP=' + A +
    '&Keywords=' + pb_Keywords +
    '&Brand=' + pb_Brand +
    '&PT=' + pb_ProductType +
    '&PrMin=' + pb_PriceMin +
    '&PrMax=' + pb_PriceMax +
    '&SO=' + pb_SpecialOffer +
    '&GR=' + pb_Group +
    '&OB=' + pb_OrderBy +
    '&OPTS=' + c;
}

function BuildPageLink(cntrl, A, c)
{
    document.getElementById(cntrl).href = A + '.aspx?' +
    'Keywords=' + pb_Keywords +
    '&Brand=' + pb_Brand +
    '&PT=' + pb_ProductType +
    '&PrMin=' + pb_PriceMin +
    '&PrMax=' + pb_PriceMax +
    '&SO=' + pb_SpecialOffer +
    '&GR=' + pb_Group +
    '&OB=' + pb_OrderBy +
    '&PS=' + pb_PageSize +
    '&PN=' + pb_PageNumber +
    '&DT=' + pb_DisplayType +
    '&OPTS=' + c;
}

function APChanged(newAP)
{
    APCMS = newAP;
    GetProductBrowser(APCMS, 'yes');
}

function BuildRefineDDOptions(collection, drpName)
{
    var drp = document.getElementById(drpName);
    drp.options.length = 0;
    for (i=0; i<collection.length; i++)
    {
        var item = collection[i];
        var selected = item.getAttribute("selected");
        var txt = item.getAttribute("text");
        var value = item.getAttribute("value");
        
        if ((drpName == 'drpOffer') || (drpName == 'drpGroup'))
            txt = getInnerText(item);
        
        txt = doReplace(txt, "ampis", "&");
        value = doReplace(value, "'", "\\'");

        
        drp.options[drp.options.length] = new Option(txt, value);
        if (selected == 'true')
        {
            drp.options[drp.options.length-1].selected = true;
            switch (drpName.toLowerCase()){
                case ('drpproducttypes'):
                    pb_ProductType = value;
                    break;
                case ('drpbrand'):
                    pb_Brand = value;
                    break;
                case ('drporder'):
                    pb_OrderBy = value;
                    break;
                case ('drpoffer'):
                    pb_SpecialOffer = value;
                    break;
                case ('drpgroup'):
                    pb_Group = value;
                    break;
                case ('drpprice'):
                    var pr = value.split(',');
                    pb_PriceMin = pr[0];
                    pb_PriceMax = pr[1];
                    break;
            }
        }
            
    }
}

function buildKeywords(kw, AP)
{
    var k = kw.split('|||||');
    var ret = '';
    var lnk = '';
    for (i in k)
    {
        if (k[i] != '')
        {
            lnk += k[i] + '|||||';
            if (CMSDesk)
                ret += '<a href=\'javascript:ChangeProductBrowsing("' + lnk + '","Keywordscl","' + APCMS + '");\' >' + k[i] + '</a> > ';
            else
                ret += '<a href=\'javascript:ChangeProductBrowsing("' + lnk + '","Keywordscl","' + AP + '");\' >' + k[i] + '</a> > ';
        }
    }
    
    if (ret != '') 
    {
        ret = ret.substr(0, ret.length-3);
        document.getElementById('spnWordLinks').innerHTML = ret + '<br>';
        if (CMSDesk)
            document.getElementById('spnClearKeywordsLink').innerHTML = '&nbsp;/&nbsp;<a href=\'javascript:ChangeProductBrowsing("","Keywordscl","' + APCMS + '");\' >clear keywords</a>';
        else
            document.getElementById('spnClearKeywordsLink').innerHTML = '&nbsp;/&nbsp;<a href=\'javascript:ChangeProductBrowsing("","Keywordscl","' + AP + '");\' >clear keywords</a>';
    }
    else
    {
        document.getElementById('spnWordLinks').innerHTML = '';
        document.getElementById('spnClearKeywordsLink').innerHTML = '';
    }
}

function BuildPaging(TotalPages, CurrentPage, EitherSide, Gap, Spacer, AP)
{
    var p = '';
    p += '<table width="100%" cellspacing="0" cellpadding="0" border="0"><tr><td align="left" width="15%">' 
    
    if (CurrentPage != 1)
        p += '<a href="Javascript:ChangeProductBrowsing(\'' + ((CurrentPage*1)-(1*1)) + '\', \'Page\', \'' + AP + '\')"><img src="' + jsImagePath + 'Browser/paging_prev.gif" border="0"></a>';
    else
        p += '<img src="' + jsImagePath + 'Browser/paging_prev_dis.gif" border="0">';
    
    p += '</td><td align="center" width="70%">';
    p += Spacer;
        
    p += AddPage(1, CurrentPage, AP) + Spacer;
       
    
    if (TotalPages <= (EitherSide+5))
    {
        //1, 2, 3, 4, 5
        for (i=2; i<TotalPages; i++)
            p+= AddPage(i, CurrentPage, AP) + Spacer;
    }
    else
    {
        if (CurrentPage < (EitherSide+3))
        {
            //1, 2, 3, 4 ... 10
            
            for (i=2; i<(EitherSide+4); i++)
                p+= AddPage(i, CurrentPage, AP) + Spacer;
            if (CurrentPage == (EitherSide+3)) 
            {
                for (x=1; x<=EitherSide; x++)
                    p+= AddPage((EitherSide+x+3), CurrentPage, AP) + Spacer;
            }
            p+= Gap;
        }
        else if (CurrentPage > (TotalPages-(EitherSide+2)))
        {
            //1...7, 8, 9, 10
            p+= Gap;
            if (CurrentPage == (TotalPages-(EitherSide+2))) 
            {
                for (x=1; x<=EitherSide; x++)
                    p+= AddPage((TotalPages-(EitherSide+(5-x))), CurrentPage, AP) + Spacer;
            }
            for (i=TotalPages-(EitherSide+2); i<TotalPages; i++)
                p+= AddPage(i, CurrentPage, AP) + Spacer;
        }
        else
        {
            //1...3, 4, 5...10
            p+= Gap;
            for (i=CurrentPage-EitherSide; i<((CurrentPage*1)+(EitherSide+1)); i++)
                p+= AddPage(i, CurrentPage, AP) + Spacer;
                
            p+= Gap;
        }
    }

    
    if (TotalPages != 1) p+= AddPage(TotalPages, CurrentPage, AP) + Spacer;
    
    p += '</td><td align="right" width="15%">' 
    if (CurrentPage != TotalPages)
        p += '<a href="Javascript:ChangeProductBrowsing(\'' + ((CurrentPage*1)+(1*1)) + '\', \'Page\', \'' + AP + '\')"><img src="' + jsImagePath + 'Browser/paging_nxt.gif" border="0"></a>'
    else
        p += '<img src="' + jsImagePath + 'Browser/paging_nxt_dis.gif" border="0">'
    p += '</td></tr></table>';
    return p
    
}

function AddPage(no, currentpage, AP)
{

    if (no == currentpage)
        return '<span class="ProductPagingSelected">' + no + '</span>';
    else
        return '<a href="Javascript:ChangeProductBrowsing(\'' + no  + '\', \'Page\', \'' + AP + '\')">' + no + '</a>';
}

//function ShowHideRefineSearch()
//{
//    var div = document.getElementById('divRefineSearch');
//    var divC = document.getElementById('divRefineSearchClosed');
//    //var img = document.getElementById('imgRefineSearch');
//    
//    if (div.style.display == 'block')
//    {
//        div.style.display = 'none';
//        divC.style.display = 'block';
//        //img.src = '/siteimages/productInfo/btn_refineResults_open.gif';
//        //img.onmouseout = function() {SetImagePath("imgRefineSearch", "/siteimages/productInfo/btn_refineResults_open.gif");};
//        //img.onmouseover = function() {SetImagePath("imgRefineSearch", "/siteimages/productInfo/btn_refineResults_open_over.gif");};
//    }
//    else
//    {
//        div.style.display = 'block';
//        divC.style.display = 'none';
//        //img.src = '/siteimages/productInfo/btn_refineResults_close.gif';
//        //img.onmouseout = function() {SetImagePath("imgRefineSearch", "/siteimages/productInfo/btn_refineResults_close.gif");};
//        //img.onmouseover = function() {SetImagePath("imgRefineSearch", "/siteimages/productInfo/btn_refineResults_close_over.gif");};
//    }
//}

function BuildPrice(price, rrp, customerspecific)
{
    var str = '';
    var added = false;
    if (customerspecific < price)
    {
        str = '<span class="PriceCrossedTitle">Site Price:&nbsp;&nbsp;</span><span class="PriceCrossed">' + Currency + price + '</span><br>';// + Currency + customerspecific;
        added = true;
        price = customerspecific;
    }
    //else
     //   str += Currency + price;
    
    var vPrice = price * 1;
    var vRRP = rrp * 1;
    if ((ShowRRP) && (vPrice < vRRP))
    {
        added = true;
        str = '<span class="PriceCrossedTitle">RRP:&nbsp;&nbsp;</span><span class="PriceCrossed">' + Currency + rrp + '</span><br>' + str;
    }   
    
    if (added)
        str += '<div style="padding-top:8px">' + Currency + price + '</div>';
    else
        str += Currency + price;

    return str;
}


function GetOfferTable(o, disp)
{
    var st = '<table border="0" class="Product' + disp + 'Offer" cellpadding="0" cellspacing="0" ';
    var stylestart = 'width:auto; text-align:center';;
    if (disp == 'DHTML') 
    {
        st += 'style="width:100%"';
        disp = 'Detail';
        stylestart = 'width:100%; text-align:left';
    }
    st +='>';
    var ret = st;
    for (x=0; x< o.length; x++)
    {
        if (o[x].getAttribute('Display' + disp) == 'True')
        {
            ret += '<tr>';
            img = o[x].getAttribute(disp + 'Image')
            if (img != '')
            {
                ret += '<td style="width:1px; text-align:right; padding-right:5px"><img src="/getfile/';
                ret += img;
                ret += '/Offer.aspx" /></td>';
            }
            ret += '<td style="' + stylestart + '; padding-left:5px; padding-right:5px" ';
            if (img == '') ret += 'colspan="2"';
            ret += ' >' + o[x].getAttribute('DisplayName');
            ret += '</td>';
            ret += '</tr>';
        }
    }
    if (ret != st)
        ret += '</table>';
    else
        ret = '';
    //alert(ret);
    return ret;
  
}

function LoadProductsGrid(ps)
{
    var Template = document.getElementById('hidLayoutGrid').innerHTML;
    //var TemplateRec = document.getElementById('hidLayoutGridRecommended').innerHTML;
    //var TemplateProm = document.getElementById('hidLayoutGridPromotion').innerHTML;
    var Columns = document.getElementById('hidGridItemsPerRow').value;
    var col = 0
    var table = document.createElement('table');
    //table.width = '647';
    //table.width = '630';
    table.style.width = '100%';
    table.cellspacing = '0';
    table.cellpadding = '0';
    table.border = '0px';
    table.style.borderWidth = '0px';
    var per = 100/Columns;
    var row = table.insertRow(table.rows.length);
    
    for (i=0; i< ps.length; i++)
    {
        //s += ps[i].getAttribute("Name") + '<br>';
        var sName = doReplace(ps[i].getAttribute("ShortName"), 'ampis', '&');
        //alert(sName);
        var Name = doReplace(ps[i].getAttribute("Name"), 'ampis', '&');
        var Price = BuildPrice(ps[i].getAttribute("Price"), ps[i].getAttribute("RRP"), ps[i].getAttribute("CustomerSpecificPrice"));
        var ProductID = ps[i].getAttribute("ProductID");
        var Image = ps[i].getAttribute("Image");
        var AP = ps[i].getAttribute("AliasPath");
        var Stock = ps[i].getAttribute("StockText");
        var SKU = ps[i].getAttribute("SKU");
        //var Description = doReplace(ps[i].getAttribute("Description"), 'ampis', '&');
        var Description = getInnerText(ps[i].childNodes[0]);
        //Description = '';
        var Accred1 = ps[i].getAttribute("AccredLogo1");
        var Accred2 = ps[i].getAttribute("AccredLogo2");
        var Gallery = ps[i].getAttribute("ImageGallery");
        var Recommened = ps[i].getAttribute("Recommended");
        var Quantity = ps[i].getAttribute("QtynBasket");
        var HasOptions = ps[i].getAttribute("HasOptions");
        var Offers;
        if(ps[i].childNodes[1])
            Offers = GetOfferTable(ps[i].childNodes[1].childNodes, 'Grid');

        var current = Template;
        //if (Recommened.toLowerCase() == "true") current = TemplateRec
        
        if (document.getElementById('hidExisting')) document.getElementById('hidExisting').value += ProductID + ',';
        
        nGallery = ''
        if (Image != '')
            nGallery = '<div id="divEnlargeImage' + ProductID + '"><a href="javascript:ShowImage(\'' + doReplace(sName, '&', 'ampis') + '\', \'' + Image + '\')"><img alt="Enlarge Image" border="0" src="' + jsImagePath + 'Browser/grid/grid_enlarge.gif"></a></div>&nbsp;&nbsp;' 
            
        if (Gallery != '')
            nGallery += '<a href="javascript:ShowGallery(\'' + doReplace(sName, '&', 'ampis') + '\', \'' + Gallery + '\')"><img alt="View Product Gallery" border="0" src="' + jsImagePath + 'Browser/grid/grid_gallery.gif.gif"></a>' 
        
        Gallery = nGallery
 
        //Image = GetImageDisplay(Image, AP + '.aspx', Name, 150, 'More Info');
        Image = GetImageDisplay(Image, AP + '.aspx', Name, 110, 'More Info', ProductID);
        
        if (HasOptions == '1') ProductID = 'O' + ProductID;
            
        current = doReplace(current, '%%ProductName%%', sName);
        current = doReplace(current, '%%Price%%', Price);        
        current = doReplace(current, '%%ProductID%%', ProductID);
        current = doReplace(current, '%%Image%%', Image);        
        current = doReplace(current, '%%Path%%', AP);
        current = doReplace(current, '%%Stock%%', Stock);        
        current = doReplace(current, '%%SKU%%', SKU);
        current = doReplace(current, '%%Description%%', Description); 
        current = doReplace(current, '%%Offers%%', Offers);
        //current = doReplace(current, '%%Accreditation1%%', Accred1);
        //current = doReplace(current, '%%Accreditation2%%', Accred2);
        current = doReplace(current, '%%Gallery%%', Gallery);
        current = doReplace(current, '%%HasOptions%%', HasOptions);
        
        var QtyString = '';
        var cellstyle = 'ProductListTable';
        var TopBorder = jsImagePath + 'Browser/grid/grid_border_top.gif';
        var BgBorder = jsImagePath + 'Browser/grid/grid_border_bg.gif';
        var BottomBorder = jsImagePath + 'Browser/grid/grid_border_btm.gif';
        
        if (Quantity != 0) 
        {
            QtyString = Quantity + inBasketGridSuffix;
            cellstyle = 'ProductListTableInBasket';
            TopBorder = jsImagePath + 'Browser/grid/grid_border_added_top.gif';
            BgBorder = jsImagePath + 'Browser/grid/grid_border_added_bg.gif';
            BottomBorder = jsImagePath + 'Browser/grid/grid_border_added_btm.gif';
        }
        current = doReplace(current, '%%TopBorderImage%%', TopBorder);
        current = doReplace(current, '%%BackgroundBorderImage%%', BgBorder);
        current = doReplace(current, '%%BottomBorderImage%%', BottomBorder);
        current = doReplace(current, '%%BrowserCellStyle%%', cellstyle);
        current = doReplace(current, '%%BasketQuantity%%', QtyString);
        
        //var QtyString = '';
        //var cellstyle = 'ProductGridTable';
        //if (Quantity != 0) 
        //{
        //    QtyString = '<div style="padding-top:5px; padding-bottom:10px">' + Quantity + inBasketGridSuffix + '</div>';
        //    cellstyle = 'ProductGridTableInBasket';
        //}
        //alert(current);
        //current = doReplace(current, '%%BrowserCellStyle%%', cellstyle);
        //current = doReplace(current, '%%BasketQuantity%%', QtyString);
        
        if (col == Columns)
        {
            row = table.insertRow(table.rows.length);
            col = 0;
        }
        var cell = row.insertCell(col);
        cell.innerHTML = current;
        //cell.width = '210';
        cell.style.width = per + '%';
        cell.align = 'center';
        cell.vAlign = 'top';
        col++;
    } 
    while (col < Columns)
    {
        var cell = row.insertCell(col);
        cell.innerHTML = '';
        //cell.width = '200';
        cell.style.width = per + '%';
        col++;
    }
    document.getElementById('clProducts').innerHTML = '';
    document.getElementById('clProducts').appendChild(table);
}

function LoadProductsList(ps)
{
    var Template = document.getElementById('hidLayoutList').innerHTML;
    //var TemplateRec = document.getElementById('hidLayoutListRecommended').innerHTML;
    //var TemplateProm = document.getElementById('hidLayoutListPromotion').innerHTML;

    var table = document.createElement('table');
    //table.width = '655';
    table.width = '100%';
    table.border = '0';
    table.align='center';
    table.cellPadding = 0;
    table.cellSpacing = 0;
    
    
    for (i=0; i< ps.length; i++)
    {
        //s += ps[i].getAttribute("Name") + '<br>';
        var Name = doReplace(ps[i].getAttribute("Name"), 'ampis', '&');
        var sName = doReplace(ps[i].getAttribute("ShortName"), 'ampis', '&');
        //alert(sName);
        var Price = BuildPrice(ps[i].getAttribute("Price"), ps[i].getAttribute("RRP"), ps[i].getAttribute("CustomerSpecificPrice"));
        var ProductID = ps[i].getAttribute("ProductID");
        var Image = ps[i].getAttribute("Image");
        var AP = ps[i].getAttribute("AliasPath");
        var Stock = ps[i].getAttribute("StockText");
        var SKU = ps[i].getAttribute("SKU");
        //var Description = doReplace(ps[i].getAttribute("Description"), 'ampis', '&');
        var Description = getInnerText(ps[i].childNodes[0]);
        //var Accred1 = ps[i].getAttribute("AccredLogo1");
        //var Accred2 = ps[i].getAttribute("AccredLogo2");
        //var AccredD1 = ps[i].getAttribute("AccredDesc1");
        //var AccredD2 = ps[i].getAttribute("AccredDesc2");
        var Gallery = ps[i].getAttribute("ImageGallery");
        var Recommened = ps[i].getAttribute("Recommended");
        var Quantity = ps[i].getAttribute("QtynBasket");
        var HasOptions = ps[i].getAttribute("HasOptions");
        if (HasOptions == '1') ProductID = 'O' + ProductID;
        var current = Template;
        //if (Recommened.toLowerCase() == "true") current = TemplateRec
        
        var Offers = GetOfferTable(ps[i].childNodes[1].childNodes, 'List');
        
        //if (Accred1 != "")
        //    Description += "<br><br><img alt='" + AccredD1 + "' src='/getfile/" + Accred1 + "/AccredLogo.aspx?MaxSideSize=50' />&nbsp;&nbsp;";

        //if (Accred2 != "")
        //    Description += "<img alt='" + AccredD2 + "' src='/getfile/" + Accred2 + "/AccredLogo.aspx?MaxSideSize=50' />";
        
        nGallery = ''
        if ((Image != '') && (Gallery == ''))
            nGallery = '<div id="divEnlargeImage' + ProductID + '"><a href="javascript:ShowImage(\'' + doReplace(sName, '&', 'ampis') + '\', \'' + Image + '\')"><img alt="Enlarge Image" border="0" src="' + jsImagePath + 'Browser/list/list_enlarge.gif"></a></div>&nbsp;&nbsp;' 
               
        if (Gallery != '')
            nGallery += '<a href="javascript:ShowGallery(\'' + doReplace(sName, '&', 'ampis') + '\', \'' + Gallery + '\')"><img alt="View Product Gallery" border="0" src="' + jsImagePath + 'Browser/list/list_gallery.gif"></a>' 
        
        Gallery = nGallery
              
        Image = GetImageDisplay(Image, AP + '.aspx', Name, 150, 'More Info', ProductID); 
        
        current = doReplace(current, '%%ProductName%%', Name);
        current = doReplace(current, '%%Price%%', Price);        
        current = doReplace(current, '%%ProductID%%', ProductID);
        current = doReplace(current, '%%Image%%', Image);        
        current = doReplace(current, '%%Path%%', AP);
        current = doReplace(current, '%%Stock%%', Stock);        
        current = doReplace(current, '%%SKU%%', SKU);
        current = doReplace(current, '%%Description%%', Description); 
        current = doReplace(current, '%%Offers%%', Offers);      
        //current = doReplace(current, '%%Accreditation1%%', Accred1);
        //current = doReplace(current, '%%Accreditation2%%', Accred2);
        current = doReplace(current, '%%Gallery%%', Gallery);
        current = doReplace(current, '%%HasOptions%%', HasOptions);
        
        var QtyString = '';
        var cellstyle = 'ProductListTable';
        var TopBorder = jsImagePath + 'Browser/list/list_border_top.gif';
        var BgBorder = jsImagePath + 'Browser/list/list_border_bg.gif';
        var BottomBorder = jsImagePath + 'Browser/list/list_border_btm.gif';
        
        if (Quantity != 0) 
        {
            QtyString = Quantity + inBasketGridSuffix;
            cellstyle = 'ProductListTableInBasket';
            TopBorder = jsImagePath + 'Browser/list/list_border_added_top.gif';
            BgBorder = jsImagePath + 'Browser/list/list_border_added_bg.gif';
            BottomBorder = jsImagePath + 'Browser/list/list_border_added_btm.gif';
        }
        current = doReplace(current, '%%TopBorderImage%%', TopBorder);
        current = doReplace(current, '%%BackgroundBorderImage%%', BgBorder);
        current = doReplace(current, '%%BottomBorderImage%%', BottomBorder);
        current = doReplace(current, '%%BrowserCellStyle%%', cellstyle);
        current = doReplace(current, '%%BasketQuantity%%', QtyString);
        //alert(current);
        
        var row = table.insertRow(table.rows.length);
        var cell = row.insertCell(0)
        cell.innerHTML = current;
        cell.align = 'center';
        cell.width= '655'
        
    } 
    document.getElementById('clProducts').innerHTML = '';
    document.getElementById('clProducts').appendChild(table);
}


function SearchTextKeyPressed(txt, ev)
{
    if (ev.keyCode==13) DoQuickSearch(txt.id);
}

function SearchTextBlur(txt)
{
    if (txt.value == '')
        txt.value = 'enter keywords';
}

function SearchTextGetFocus(txt)
{
    if (txt.value == 'enter keywords')
        txt.value = '';
}

function DoQuickSearch(txt)
{
    var search = document.getElementById(txt).value;
    if (search == 'enter keywords') search = '';
    
    document.location = '/products/search.aspx?keywords=' + search;
}

function buildRefineString(collection, type, AP)
{
    var s = '';
    for (i=0; i<collection.length; i++)
    {
        var item = collection[i];
        var selected = item.getAttribute("selected");
        var txt = item.getAttribute("text");
        var value = item.getAttribute("value");
        
        if ((type == 'SpecialOffer') || (type == 'Group'))
            txt = getInnerText(item);
        
        txt = doReplace(txt, "ampis", "&");
        value = doReplace(value, "'", "\\'");

        if (selected == 'true')
        {
            s += '<span class="RefineSearchSelectedItem">' + txt + '</span>';
            switch (type.toLowerCase()){
                case ('producttype'):
                    pb_ProductType = value;
                    break;
                case ('brand'):
                    pb_Brand = value;
                    break;
                case ('order'):
                    pb_OrderBy = value;
                    break;
                case ('specialoffer'):
                    pb_SpecialOffer = value;
                    break;
                case ('group'):
                    pb_Group = value;
                    break;
                case ('price'):
                    var pr = value.split(',');
                    pb_PriceMin = pr[0];
                    pb_PriceMax = pr[1];
                    break;
            }
        }
        else
            s += '<a href="javascript:ChangeProductBrowsing(\'' + value + '\', \'' + type + '\', \'' + AP + '\');">' + txt + '</a>';
            
        s += ',&nbsp;&nbsp;&nbsp;';
    }
    s = s.substring(0, s.length-19);
    return s;
}

function PageSizeChanged(ddl, AP)
{
    ChangeProductBrowsing(ddl.value, 'pagesize', AP);
}

function SetBrowserToTop()
{
    if (!ScrollAfterAjaxPaging)
        document.location.hash = 'clResultsSummary';
}

function ChangeProductBrowsing(value, changewhat, AP)
{
    
    switch (changewhat.toLowerCase()){
        case ('producttype'):
            pb_ProductType = value;
            FilterList.length = 0;
            pb_PageNumber = 1;
            break;
        case ('brand'):
            pb_Brand = value;
            pb_PageNumber = 1;
            break;
        case ('order'):
            pb_OrderBy = value;
            pb_PageNumber = 1;
            break;
        case ('page'):
            pb_PageNumber = value;
            SetBrowserToTop()
            break;
        case ('pagesize'):
            pb_PageSize = value;
            pb_PageNumber = 1;
            break;
        case ('price'):
            var pr = value.split(',');
            pb_PriceMin = pr[0];
            pb_PriceMax = pr[1];
            pb_PageNumber = 1;
            break;
        case ('displaytype'):
            pb_DisplayType = value;
            break;
        case ('specialoffer'):
            pb_SpecialOffer = value;
            pb_PageNumber = 1;
            break;
        case ('group'):
            pb_Group = value;
            pb_PageNumber = 1;
            break;
        case ('keywords'):
            nv =  trim(removeBadChars(value));
            if (nv != '') pb_Keywords += '|||||' + nv;
            pb_PageNumber = 1;
            break;
        case ('keywordscl'):
            pb_Keywords = trim(value);
            pb_PageNumber = 1;
            break;
        }
        
        GetProductBrowser(AP, 'yes');
        if (ScrollAfterAjaxPaging)
            ScrollToObject('clJumpTo', '', '');
        //else
            //GetProductBrowser(AP, 'yes');
}


function GetRandomAssociatedProducts(alias, existing, LoadProductOptions)
{
    document.getElementById('clProducts').innerHTML = '<br><img align="left" src="' + jsImagePath + 'loading.gif"><br><br><br>';    
    sndReq('/XML/GetAssociatedProducts.aspx?AliasPath=' + alias + '&Existing=' + existing + '&LoadProductOptions=' + LoadProductOptions);    
}

function GetProductBrowser(alias, fromJS, filterStatus)
{
    if (!filterStatus) filterStatus = '';
    if (!CMSDesk)
    {
        document.getElementById('clProducts').innerHTML = '<br><img align="left" src="' + jsImagePath + 'loading.gif"><br><br><br>';
        document.getElementById('clPagingBottom').innerHTML = '&nbsp;';
    }
    
    var vars = '';
    if (fromJS =='yes')
    {
        //Load custom filters
        var custom = ''
        for (i=0; i<FilterList.length; i++)
        {
            if (FilterList[i].value != 'Show All')
                custom += FilterList[i].id + '___' + FilterList[i].value + '|||'
        }
        
        pb_Brand = doReplace(pb_Brand, "\\'", "'");
        pb_ProductType = doReplace(pb_ProductType, "\\'", "'");
        vars += '&ProductType=' + pb_ProductType;
        vars += '&PriceMin=' + pb_PriceMin;
        vars += '&PriceMax=' + pb_PriceMax;
        vars += '&Brand=' + pb_Brand;
        vars += '&OrderBy=' + pb_OrderBy;
        vars += '&PageSize=' + pb_PageSize;
        vars += '&PageNumber=' + pb_PageNumber;
        vars += '&DisplayMode=' + pb_DisplayType;
        vars += '&SpecialOffer=' + pb_SpecialOffer;
        vars += '&Group=' + pb_Group;
        vars += '&Custom=' + custom;
        vars += '&Keywords=' + pb_Keywords;
    }
    sndReq('/XML/GetProductBrowser.aspx?AliasPath=' + alias + '&FromJS=' + fromJS + vars + '&ForceFilter=' + filterStatus);
}

function loadProductOptions(doc)
{
    //alert(doc);
    var xml = GetXMLObject(doc);
    var tbl = document.createElement('table');
    
    var firstId = -1;
    
    var ShowCancel = xml.childNodes[0].getAttribute('ShowCancel');
    var Target = xml.childNodes[0].getAttribute('Target');
    var SpecialOfferID = xml.childNodes[0].getAttribute('SpecialOfferID');
    var qty = xml.childNodes[0].getAttribute('Quantity');
    
    OptionsSelected = '';
    OptionsList.length = 0;
    OptionsNames.length = 0;
    
    var ProductName = getInnerText(xml.childNodes[0].childNodes[1].childNodes[0]);
    document.getElementById('clProductOptionsTitle').innerHTML = ProductName + '&nbsp;-&nbsp;Product&nbsp;Options';
    
    for (i=0; i<xml.childNodes[0].childNodes[0].childNodes.length; i++)
    {
        var node = xml.childNodes[0].childNodes[0].childNodes[i];
        var id = node.getAttribute("id");
        if (i == 0) firstId = id;
        var nme = getInnerText(node);
        var rw = tbl.insertRow(tbl.rows.length);
        var cl = rw.insertCell(0);
        cl.setAttribute('id', 'cl1Option' + Target + id);
        cl = rw.insertCell(1);
        cl.setAttribute('id', 'cl2Option' + Target + id);
        cl.className = 'ProductOptionsCaption';
        cl.innerHTML = nme + ':';
        cl = rw.insertCell(2);
        cl.className = 'ProductOptionsDropDownCell';
        cl.setAttribute('id', 'cl3Option' + Target + id);
        var drp = document.createElement('select');
        drp.className = 'ProductOptionsDropDownList';
        drp.setAttribute('id', 'drpProductOption' + Target + id);
        
        if (i != 0) 
        {
            drp.setAttribute('disabled', 'true');
            drp.options[0] = new Option('Then select ' + nme,'-1');
        }
        else
        {
            drp.options[0] = new Option('First select ' + nme,'-1');
        }
        OptionsList[OptionsList.length] = drp;
        OptionsNames[OptionsNames.length] = nme;
        cl.appendChild(drp);
    }
    
    var rw = tbl.insertRow(tbl.rows.length);
    var cl = rw.insertCell(0);
    cl = rw.insertCell(1);
    cl.className = 'ProductOptionsCaption';
    cl.innerHTML = 'Quantity:'; 
    cl = rw.insertCell(2);
    cl.className = 'ProductOptionsDropDownCell';
    //var t = '<input readonly type="text" style="width:30px; text-align:center" id="txtQty' + Target + '" value="';
    var t = '<input maxlength="' + ProductQuantityBoxMaximumLength + '"  type="text" style="width:30px; text-align:center" id="txtQty' + Target + '" value="';
    
    var Offers, RRP, SitePrice, CustomerPrice, VatIncluded;
    Offers = getInnerText(xml.childNodes[0].childNodes[1].childNodes[1]);
    RRP = xml.childNodes[0].childNodes[1].getAttribute('RRP');
    SitePrice = xml.childNodes[0].childNodes[1].getAttribute('Price');
    CustomerPrice = xml.childNodes[0].childNodes[1].getAttribute('CustomerSpecificPrice');
    VatIncluded = true;
    
    var p = BuildProductOptionsPricesHTML(Offers, RRP, SitePrice, CustomerPrice, VatIncluded)
    ProductOptionsPricesTextDefault = p;
    document.getElementById('clProductOptionsPrices' + Target).innerHTML = p;
    
    if (SpecialOfferID == -1)
        t += qty;
    else
        t += SpecialOfferQty;
    
    t += '">'
    cl.innerHTML = t
    
    //var UD = '&nbsp;&nbsp;<a href="javascript:TextBoxValueUpDown(\'txtQty\', 1)">Up</a>';
    //UD += '&nbsp;&nbsp;<a href="javascript:TextBoxValueUpDown(\'txtQty\', -1)">Down</a>';
    
    
    //Need to know whether or not to enable these buttons.....
    
    if (SpecialOfferID == -1)
    {
        var spnUD = document.createElement('span');
        var UD = '<img src="' + jsImagePath + 'up_dwn.gif" usemap="#UpDownScrollMap' + Target +  '" border="0" valign="middle">';
        spnUD.innerHTML = UD
        cl.appendChild(spnUD);
    }
    
    //rw = tbl.insertRow(tbl.rows.length);
    //cl = rw.insertCell(0);
    //cl.colSpan = 3;
    document.getElementById('clProductOptionsAddButton' + Target).innerHTML = doReplace(WithOptionsAddLinkDisabled, '%%jsImagePath%%', jsImagePath);
    //var links = '<span id="spnAddLink' + Target + '">' + WithOptionsAddLinkDisabled  + '</span>';
    //if (ShowCancel == 'true')
    //    links += '&nbsp;&nbsp;<a href="javascript:CancelProductOptionsPopup(\'' + Target + '\')">Cancel</a>'
    //cl.innerHTML = links
    
    
    //document.getElementById('clPopupBasketOptions').appendChild(tbl);

    document.getElementById('clPopupBasketOptions' + Target).appendChild(tbl);
    
    LoadNextDropdownOptionValues(firstId, SpecialOfferID, Target);
    
    PopupRelocate('divProductOptionsPopup', true) 
}

function BuildProductOptionsPricesHTML(Offers, RRP, SitePrice, CustomerPrice, VatIncluded)
{
    var ret = '<table style="width:100%">';
    if (Offers != '')
        ret += '<tr><td class="ProductOptionsOffers">' + Offers + '</td></tr>';
        
    ret += '<tr><td class="ProductOptionsPrice">';
    ret += BuildPrice(SitePrice, RRP, CustomerPrice)
    ret += '</td></tr>';
    ret += '</table>';
    return ret;
}

function LoadNextDropdownOptionValues(optionID, SpecialOfferID, Target)
{
    //alert('/xml/GetProductOptions.aspx?Target=' + Target +'&GetOptionValues=yes&ProductOptionID=' + optionID + '&SelectedOptions=' + OptionsSelected + '&SpecialOfferID=' + SpecialOfferID);  
    sndReq('/xml/GetProductOptions.aspx?Target=' + Target +'&GetOptionValues=yes&ProductOptionID=' + optionID + '&SelectedOptions=' + OptionsSelected + '&SpecialOfferID=' + SpecialOfferID);  
}

function ProductOptionDDChanged(CurrentOptionID, NextOptionID, SpecialOfferID, Target)
{
    //if (document.getElementById('drpProductOption' + Target + CurrentOptionID).value == '-1')
    document.getElementById('clProductOptionsAddButton' + Target).innerHTML = doReplace(WithOptionsAddLinkDisabled, '%%jsImagePath%%', jsImagePath);
    document.getElementById('clProductOptionsPrices' + Target).innerHTML = ProductOptionsPricesTextDefault;
    
    if (document.getElementById('drpProductOption' + Target + CurrentOptionID).options.length != 0)
    {
        var NextFound = false;
        var CurrentFound = false;
        OptionsSelected = '';
        
        for (i=0; i<OptionsList.length; i++)
        {   
            var id = OptionsList[i].id.substr(16 + Target.length)         
            if (NextFound)
            {
                OptionsList[i].disabled = true;
                OptionsList[i].options.length = 0;
                OptionsList[i].options[OptionsList[i].options.length] = new Option('Then select ' + OptionsNames[i], '-1');
            }
            else
            {
                if (OptionsList[i].value != '-1')
                {
                    if (!CurrentFound)
                        OptionsSelected += id + '|' + OptionsList[i].value + ';';
                }
                else
                    NextFound = true;
                    
                if (CurrentOptionID == id) CurrentFound = true;
                OptionsList[i].disabled = false;
            }
            
            
            if (id == NextOptionID)
               NextFound = true;
        }
        
        if (NextFound)
        {
            if (NextOptionID != 'fin')
            {
                document.getElementById('drpProductOption' + Target + NextOptionID).disabled = true;
                
                if (document.getElementById('drpProductOption' + Target + CurrentOptionID).value != '-1')
                    LoadNextDropdownOptionValues(NextOptionID, SpecialOfferID, Target);
            }
            else
            {
                if (document.getElementById('drpProductOption' + Target + CurrentOptionID).value != -1)
                {
                    GetSpecificProductOptionProductDetails(Target, SpecialOfferID)
                    if (SpecialOfferID == -1)
                        document.getElementById('clProductOptionsAddButton' + Target).innerHTML = doReplace(doReplace(WithOptionsAddLink, '%%Target%%', Target), '%%jsImagePath%%', jsImagePath);
                    else
                        document.getElementById('clProductOptionsAddButton' + Target).innerHTML = '<a href="javascript:AddToBasketWithOptionsSO(\'' + SpecialOfferID + '\');">' + doReplace(WithOptionsAddLinkSpecialOffer, '%%jsImagePath%%', jsImagePath) + '</a>';
                }
            }
        }
        else
        {
            if (document.getElementById('drpProductOption' + Target + CurrentOptionID).value != -1)
            {
                GetSpecificProductOptionProductDetails(Target, SpecialOfferID)
                if (SpecialOfferID == -1)
                    document.getElementById('clProductOptionsAddButton' + Target).innerHTML = doReplace(doReplace(WithOptionsAddLink, '%%Target%%', Target), '%%jsImagePath%%', jsImagePath);
                else
                    document.getElementById('clProductOptionsAddButton' + Target).innerHTML = '<a href="javascript:AddToBasketWithOptionsSO(\'' + SpecialOfferID + '\');">' + doReplace(WithOptionsAddLinkSpecialOffer, '%%jsImagePath%%', jsImagePath) + '</a>';
            }
        }
    }
}

function GetSpecificProductOptionProductDetails(Target, soid)
{
    sndReq('/XML/GetProductOptions.aspx?Target=' + Target +'&GetProductDetails=yes&ProductWithOptionsID=' + ProductWithOptionsID + '&SelectedOptions=' + OptionsSelected);
}

function loadProductOptionSpecificData(doc)
{
    var xml = GetXMLObject(doc);
    var Target = xml.childNodes[0].getAttribute("Target");
    var SpecialOfferID = xml.childNodes[0].getAttribute("SpecialOfferID");
    var Offers, RRP, SitePrice, CustomerPrice, VatIncluded;
    Offers = getInnerText(xml.childNodes[0].childNodes[1]);
    RRP = xml.childNodes[0].getAttribute('RRP');
    SitePrice = xml.childNodes[0].getAttribute('Price');
    CustomerPrice = xml.childNodes[0].getAttribute('CustomerSpecificPrice');
    VatIncluded = true;
    document.getElementById('clProductOptionsPrices' + Target).innerHTML = BuildProductOptionsPricesHTML(Offers, RRP, SitePrice, CustomerPrice, VatIncluded);
}

function loadProductOptionValues(doc)
{
    var xml = GetXMLObject(doc);
    var Target = xml.childNodes[0].getAttribute("Target");
    var OptionID = xml.childNodes[0].getAttribute("optionID");
    var OptionName = xml.childNodes[0].getAttribute("optionName");
    var order = xml.childNodes[0].getAttribute("displayOrder");
    var SpecialOfferID = xml.childNodes[0].getAttribute("SpecialOfferID");
    var NextID = xml.childNodes[0].getAttribute("NextID");
    var drp = document.getElementById('drpProductOption' + Target + OptionID)
    drp.options.length = 0;
    if (order == 0)
        drp.options[drp.options.length] = new Option('First select ' + OptionName, '-1');
    else
        drp.options[drp.options.length] = new Option('Then select ' + OptionName, '-1');

    for (i=0; i<xml.childNodes[0].childNodes.length; i++)
    {
        var node = getInnerText(xml.childNodes[0].childNodes[i]);
        drp.options[drp.options.length] = new Option(node, node);
    }
    drp.onchange = function () { ProductOptionDDChanged(OptionID, NextID, SpecialOfferID, Target); }
    drp.disabled = false;
}

function CancelProductOptionsPopup(Target)
{
    if (document.getElementById('divProductOptionsPopup'))
    {
        FadingDirection =-1;
        setTimeout('FadeInOut("divPopupMask", 60, 100, "")', FadeSpeed);
        div = document.getElementById('divProductOptionsPopup');
        div.style.visibility = 'hidden'; 
        document.getElementById('clPopupBasketOptions' + Target).innerHTML = ''; 
    }
}

function GetProductReview(start)
{
    sndReq('/XML/GetProductReviews.aspx?ProductID=' + ReviewProductID + '&hasoptions=' + ReviewProductHasOptions + '&start=' + start);
}

function LoadProductReviews(doc)
{
    //alert(doc);
    var cl = document.getElementById('clReviews');
    cl.innerHTML = 'Loading...';
    var table = document.createElement('table');
    table.style.width = '100%';
    table.cellpadding = "0";
    table.cellspacing = "0";
    
    var xml = GetXMLObject(doc).childNodes[0].childNodes[0];
    var total = xml.getAttribute('total');
    var start = xml.getAttribute('start');
    var PerPage = xml.getAttribute('PerPage');
    var Average = xml.getAttribute('Average');
    var people = 'people';
    
    if (total > 0)
    {
        if (total == 1) people = 'person';
        
        document.getElementById('clAverageRating').innerHTML = 'Currently rated <img src="' + jsImagePath + 'Reviews/' + Average + 'star.gif" /> by ' + total + ' ' + people;
        
        var paging = '';
        if (start == 0)
            paging += '<img src="' + jsImagePath + 'Reviews/leftArrow_dis.gif">';
        else
        {
            var ns = start - PerPage;
            if (ns < 0) ns = 0;
            paging += '<a href="javascript:GetProductReview(' + ns + ')"><img border="0" src="' + jsImagePath + 'Reviews/leftArrow.gif"></a>'
        }
        var fin = (start*1)+(PerPage*1);
        if (fin > total) fin = total;
        paging += '&nbsp;&nbsp;&nbsp;';
        paging += 'showing <b>' + ((start*1)+1) + '-' + (fin) + '</b> of <b>' + total + '</b>';
        paging += '&nbsp;&nbsp;&nbsp;';
        
        if ((start*1) + (PerPage*1) >= total)
            paging += '<img src="' + jsImagePath + 'Reviews/rightArrow_dis.gif">';
        else
        {
            var ns = (start*1) + (PerPage*1);
            if ((ns*1) + (PerPage*1) > total) ns = total - PerPage;
            paging += '<a href="javascript:GetProductReview(' + ns + ')"><img border="0" src="' + jsImagePath + 'Reviews/rightArrow.gif"></a>'
        }
        
        document.getElementById('clReviewPaging').innerHTML = paging;
        
        for (i=0; i<xml.childNodes.length; i++)
        {
            var rw = table.insertRow(table.rows.length);
            var cl1 = rw.insertCell(0);
            var Rating = xml.childNodes[i].getAttribute('Rating');
            var Date = xml.childNodes[i].getAttribute('Date');
            var name = '<b>' + getInnerText(xml.childNodes[i].childNodes[0]) + '</b>';
            var location = getInnerText(xml.childNodes[i].childNodes[1]);
            var comments = getInnerText(xml.childNodes[i].childNodes[2]);
            
            if (location != '')
                name += ', ' + location;
                
            var h = '<table cellpadding="0" cellspacing="0" style="width:100%"><tr><td class="ProductDetailsReviewHeader">By ' + name + ' on ' + Date + '&nbsp;&nbsp;&nbsp;<img src="' + jsImagePath + 'Reviews/' + Rating + 'star.gif" /></td></tr>';
            h += '<tr><td class="ProductDetailsReviewComments">' + comments + '</td></tr></table>'
            
            cl1.innerHTML = h;
        }
    }
    else
    {
        document.getElementById('clAverageRating').innerHTML = '';
        document.getElementById('clReviewPaging').innerHTML = '';
        var rw = table.insertRow(table.rows.length);
        var cl1 = rw.insertCell(0);
        cl1.innerHTML = getInnerText(GetXMLObject(doc).childNodes[0].childNodes[1]);
    }
    cl.innerHTML = '';
    cl.appendChild(table);
}

function AddReview()
{
    initMask();
    StartMask('divProductReviewPopup');
}

function SubmitReview(RatingID)
{
    PageIsValid = true;
    checkTextBoxIsValid('txtReviewerName', 'name', 'clValReviewerName');
    checkTextBoxIsValid('txtReviewComments', 'comments', 'clValReviewComments');
    var rating = document.getElementById(RatingID + '_txtValue').value;
    if (rating*1 == 0)
    {
        document.getElementById(RatingID + '_spnCurrent').className = 'FormValidation';
        PageIsValid = false;
    }
    if (PageIsValid)
    {
	    CancelReview();
        sndReq('/XML/SaveReview.aspx?ProductID=' + ReviewProductID + 
        '&ProductHasOptions=' + ReviewProductHasOptions + 
        '&CustomerID=' + ReviewCustomerID + 
        '&Name=' + document.getElementById('txtReviewerName').value + 
        '&Email=' + document.getElementById('txtReviewerEmail').value + 
        '&Location=' + document.getElementById('txtReviewerLocation').value + 
        '&Rating=' + rating + 
        '&Comments=' + doReplace(document.getElementById('txtReviewComments').value, '&', '[ampis]'));
        document.getElementById('txtReviewComments').value = '';
    }
}