﻿
var selectedElementLength;
var isLogInit = false;
var matrixTable = {}
var selectAllButtons = {};
var getQuoteButtons = {};
var titleID = {};
var prm = {};
$(document).ready(function()
{
    matrixTable = $('table.matrixTable');
    getQuoteButtons = $('.getQuoteButton');
    selectedElementLength = $('.selectedProducts').find('li').length;
    selectAllButtons = $('#selectAll, #selectAllBottom');
    prm = Sys.WebForms.PageRequestManager.getInstance();

    $('#matrixTools').accordion('activate', 1);
    $.cn.checkAll('.matrixGroup',
        {
            button: '#selectAll'
        });
    $.cn.checkAll('.matrixGroup',
        {
            button: '#selectAllBottom'
        });
    $('.blurredPrice').tooltip(
        {
            track: true,
            delay: 0,
            showURL: false,
            showBody: " - ",
            extraClass: "roundedToolTip",
            fixPNG: true,
            top: 8,
            left: -74
        });
    $(matrixTable).find('td.spec:not(has:(a))').each(function(i, spec)
    {
        $(spec).html(wbr($(spec).text(), 14));
    });
    $(matrixTable).find('input:checkbox').live('click', selectProduct);
    $(matrixTable).find('input:checkbox').each(function(i, element)
    {
        //$(element).click(function() { alert('clicken') });
        if ($(element).is(':checked'))
        {
            var ids = $(this).parents().attr('class').split('$');
            configureQuoteLink(ids[0], 'add');
        }
    });

    prm.add_endRequest(itemSelected);
    selectAllButtons.click(configureGetQuoteAll);
    function configureGetQuoteAll()
    {
        $(matrixTable).find('input:checkbox').each(function(i, element)
        {
            var ids = $(this).parents().attr('class').split('$');
            if ($(element).is(':checked'))
            {
                configureQuoteLink(ids[0], 'add');
                selectAllButtons.text('Select None');
            }
            else
            {
                configureQuoteLink(ids[0], 'remove');
                selectAllButtons.text('Select All');
            }
        });
    }
    function itemSelected(sender, args)
    {
        var newLength = $('.selectedProducts').find('li').length;
        if (selectedElementLength < newLength)
        {
            $('.selectedProducts').find('li:last').css(
                {
                    display: 'none'
                }).slideDown('slow');
        }
        else
            if (selectedElementLength > newLength)
        {

        }

        tb_init($('.logMessage'))
        isLogInit = true;
        selectedElementLength = newLength;
    }
    function selectProduct(e)
    {
        var productName = $(this).parents('tr:parent').find('a:eq(0)').clone();
        var productTitle = $(this).parents('tr:parent').find('a:eq(0)').attr('title');
        var productLink = $(this).parents('tr:parent').find('a:eq(0)').attr('href');
        var productId = $(this).parents('tr:parent').find('span[name=items]').attr('class');
        var isChecked = $(this).parents('tr:parent').find('input:checkbox').is(':checked');

        //not sure why this is here
        //var newSelectedProductDiv = $('#divSelectedItem').clone();
        var newRemoveLink = $('#linkRemoveSelectedItem').clone();
        newRemoveLink.css('visibility', 'visible');

        if (isChecked)
        {
            configureQuoteLink(productId, 'add');
        }
        else
        {
            configureQuoteLink(productId, 'remove');
        }

        var tempArray = new Array();

        if (productLink != null)
        {
            $('.accordion').accordion("activate", 2);

            var prodVendor = productId.split("$");

            UpdateSelectedItems(prodVendor[0], !isChecked, prodVendor[1], productTitle);
        }
    }
    function configureQuoteLink(id, action)
    {

        getQuoteButtons.each(function(index, button)
        {
            var hrefValue = button.attributes['href'].value + '';
            var productId = id.split('$')[0];
            var isfirst = false;

            if (hrefValue.indexOf('&fi=') > -1)
            {

                hrefValue = hrefValue.replace(hrefValue.substr(hrefValue.indexOf('&fi='), hrefValue.length), '');
            }


            if (action === 'add')
            {
                if (hrefValue.indexOf('&ci=') == -1)
                {
                    hrefValue += '&ci=';
                    isfirst = true;
                }

                if (isfirst)
                {
                    hrefValue += productId;
                }
                else
                {
                    hrefValue += ',' + productId;
                }

            }
            else
            {
                //remove
                if (hrefValue.indexOf(productId + '') != -1)
                {
                    hrefValue = hrefValue.replace(productId + ',', '');
                    hrefValue = hrefValue.replace(productId, '');
                }
                if (hrefValue.charAt(hrefValue.length - 1) === '=')
                {
                    hrefValue = hrefValue.replace('&ci=', '');
                }
                if (hrefValue.charAt(hrefValue.length - 1) === ',')
                {
                    hrefValue = hrefValue.substr(0, hrefValue.length - 1);
                }
            }

            var fiVals = '';
            $(document).ready(function()
            {
                matrixTable.find("tr[class]").each(function()
                {
                    var titleID = $(this).attr('class');
                    if (titleID.indexOf('featured') > -1)
                    {
                        $(this).find('input:checkbox').each(function(i, element)
                        {
                            var ids = $(this).parents().attr('class').split('$');
                            if ($(element).attr('checked'))
                            {
                                var ids = $(this).parents().attr('class').split('$');
                                if (fiVals == '')
                                {
                                    fiVals += ids[0];
                                }
                                else
                                {
                                    fiVals += ',' + ids[0];
                                }
                            }
                        });
                    }
                });
            });

            hrefValue += '&fi=' + fiVals;
            button.attributes['href'].value = hrefValue;
        });
    }
    prepareCompression();
});
function removeSelectedItem(productId, sender)
{
    $(sender).parents('li').slideUp('slow');
    $('.matrixTable').find('input:checkbox').each(function(i, element)
    {
        var ids = $(this).parents().attr('class').split('$');

        if (ids[0] === productId)
        {
            $(element).attr('checked', '');
        }
    });
    UpdateSelectedItems(productId, true, 0, '');
}
function wbr(str, num)
{
    return str.replace(RegExp("([\\w\\)\\,\\'\\.\\/\\(\\-]{" + num + "})([\\w\\)\\,\\'\\.\\/\\(\\-])", "g"), function(all, text, character)
    {
        return text + "<wbr /><span class='wbr'></span>" + character;
    });
}

function UpdateSelectedItems(productId, remove, vendorId, productTitle)
{
    var lurl = location.href;
    var surl = "/UserSelection.ashx";
    if (lurl.indexOf("localhost") > -1)
    {
        surl = "/biocompare/UserSelection.ashx";
    }

    $.ajax(
        {
            type: "POST",
            url: surl,
            data: "productId=" + productId + "&remove=" + remove + "&vendorId=" +
            vendorId +
            "&productTitle=" +
            productTitle,
            success: function(result)
            {
                $("#selectionContainer").empty();

                $("#selectionContainer").html(result);

            },
            error: function(XMLHttpRequest)
            {

            }
        });
}
function openSkus(event)
{

    $(event.currentTarget).attr('title', "Hide Items").removeClass('plus').addClass('minus');
}
function closeSkus(event)
{
    $(event.currentTarget).attr('title', "Show All Items").removeClass('minus').addClass('plus');
}
function toggleDisplayOfChildren(toggleButton)
{
    var row = toggleButton.data('row').element;
    var keys = toggleButton.data('row').keys;
    toggleButton.data('relatedRows').toggle();
    for (var i = 0; i < keys.length; i++)
    {
        var currentCell = row.find('td:eq(' + keys[i] + ')');
        if (currentCell.hasClass('firstTime'))
        {
            currentCell.data('html', currentCell.html());
            currentCell.removeClass('firstTime');
        }
        if (currentCell.hasClass('visible'))
        {
            currentCell.find(':checked').attr('checked', '');
            currentCell.data('html', currentCell.html());
            currentCell.html('&nbsp;');
        }
        else
        {
            currentCell.html(currentCell.data('html'));
        }
        currentCell.toggleClass('visible');
    }
    toggleButton.data('relatedRows').find(':checked').attr('checked', '');
}
function setToolTip(domElement)
{
    $(domElement).tooltip(
        {
            track: true,
            delay: 0,
            opacity: 0.95,
            showURL: false,
            showBody: " - ",
            extraClass: "roundedToolTip",
            fixPNG: true,
            top: 8,
            left: -74
        });
}
function prepareCompression()
{
    var columnCount = 0;
    //Fix for jump in width when opening compression
    matrixTable.find('th').each(function(i, domElement)
    {
        $(domElement).width($(domElement).width());
        columnCount++
    });
    //Add Featured Product Headers
    matrixTable.find('tr.featured:eq(0)').removeClass('first').addClass('second').before('<tr class="featuredHeader first"><td colspan="' + (columnCount - 1) + '">Featured Items</td><td class="checkBox"></td></tr>');
    if (matrixTable.find('tr.featured:eq(0)').length > 0)
    {
        matrixTable.find('tr:gt(2):not(.featured):not(.additionalSpec):first').addClass('regular').before('<tr class="featuredFooter"><td colspan="' + (columnCount - 1) + '">&nbsp;</td><td class="checkBox"></td></tr>');
    }
    matrixTable.find('span.openSku').each(function(i, domElement)
    {
        setToolTip(domElement);
        var relatedRows = [];
        var multipleSpecColumnKeys = [];
        var parentRow = $(domElement).parents('tr');
        parentRow.nextAll().each(function(j, domElement2)
        {
            var itemClass = $(domElement2).attr("class");
            if (itemClass.indexOf('comp-') > -1)
            {
                var itemID = itemClass.slice((itemClass.indexOf("comp-") + 5), itemClass.indexOf("-id"));
            }
            if (multipleSpecColumnKeys.length < 1)
            {
                $(domElement2).find('td').each(function(k, domElement3)
                {
                    if ($(domElement3).hasClass('spec') && $(domElement3).hasClass('compressedData') || $(domElement3).hasClass('price') || $(domElement3).hasClass('checkBox'))
                    {
                        multipleSpecColumnKeys.push(k);
                        parentRow.find('td:eq(' + k + ')').addClass('visible firstTime');
                    }
                })
            }
            if ($(domElement2).hasClass('additionalSpecFirst'))
            {
                return false;
            }
            if (itemID === $(domElement).attr('rel'))
            {
                relatedRows.push(domElement2);
            }
            else
            {
                return false;
            }
        });
        parentRow.find('.skuCount').text(relatedRows.length);
        $(domElement).data('relatedRows', $(relatedRows)).data('row', { 'element': parentRow, 'keys': multipleSpecColumnKeys });
        $(domElement).toggle(function(event)
        {
            openSkus(event);
            setToolTip(event.currentTarget);
            toggleDisplayOfChildren($(event.currentTarget));
            return false;
        }, function(event)
        {
            closeSkus(event);
            setToolTip(event.currentTarget);
            toggleDisplayOfChildren($(event.currentTarget));
            return false;
        });
    })
}

