﻿var goalFilters = "";
var formFilters = "";
var familyFilters = "";
var itemsPerRow = 3;
var filterPresentCookieName = "EAS_Product_Configurator_Cookie";
var filterCookieName = "EAS_Product_Configurator_Filter_Cookie";
var defaultConfiguratorSearchText = "Product name";


var readFromCookie = false;

// sets up product configurator
$(document).ready(function() {
    $("input#configurator-search-box").val(defaultConfiguratorSearchText);
    
    $("input#configurator-search-box").focus(function() {
        if($(this).val() == defaultConfiguratorSearchText)
        {
            $(this).val('');
        }
    });
    
    $("input#configurator-search-box").blur(function() {
        if($(this).val() == '')
        {
            $(this).val(defaultConfiguratorSearchText);
        }
    });    
    
    $("input#configurator-search-button").click(function() {
        ConfiguratorSearch();
    });    

    //$("div#configurator > ul > li > ul").hide();

    $("div#configurator > ul > li > div").click(function() {
        $("ul", $(this).parent()).toggle();

        var src = ($("img", this).attr("src") === "/images/products-landing/configurator-filter-arrow-off.gif")
            ? "/images/products-landing/configurator-filter-arrow-on.gif"
            : "/images/products-landing/configurator-filter-arrow-off.gif";
        $("img", this).attr("src", src);
    });


    formatting();

    $("div.purple_bar:gt(0)").parent().addClass("product_family_section_margin");
    $("div.purple_bar:last").parent().removeClass("product_family_section_margin");

    $("#button-overlap").click(function() { buttonOverlapClick(false) });

    $("#button-overlap").hover(function() { buttonOverlapHover() }, function() { buttonOverlapHover() });

    $("div#configurator > ul > li > ul > li").each(function() {
        $(this).click(function() {
            $(this).toggleClass("selected");
            buildFilterLists();
            if (goalFilters.length > 0 || formFilters.length > 0 || familyFilters.length > 0) {
                showResults();
            }
            else {
                hideResults();
            }

            // filter by goal
            if (goalFilters.length > 0) {
                var filterArray = goalFilters.split("|");
                for (var i in filterArray) {
                    if (filterArray[i] != "") {
                        filter(filterArray[i]);
                    }
                }
                removeHiddenResults();
            }

            // filter by form
            $("div#results > div > div > ul > li").addClass("excluded");
            if (formFilters.length > 0) {
                var filterArray = formFilters.split("|");
                for (var i in filterArray) {
                    if (filterArray[i] != "") {
                        filterFromCurrentResults(filterArray[i]);
                    }
                }
                removeHiddenResults();
            }

            // filter by family
            $("div#results > div > div > ul > li").addClass("excluded");
            if (familyFilters.length > 0) {
                var filterArray = familyFilters.split("|");
                for (var i in filterArray) {
                    if (filterArray[i] != "") {
                        filterFromCurrentResults(filterArray[i]);
                    }
                }
                removeHiddenResults();
            }

            clearFormatting();
            formatting();

            filterOverlap();

            setFilterCookie();
        });
    });

    $("div#results").hide();

    if (goalFilters == null || goalFilters == "" || formFilters == null || formFilters == "" || familyFilters == null || familyFilters == "") {
        var routingFilter = $("div#configurator-left-pane > input").val();
        if (routingFilter.length > 0) {
            clickOnFilterValue(routingFilter);
        }
        else {
            var filterCookieValue = getFilterCookie();
            var filterArray = filterCookieValue.split("|");
            for (var i in filterArray) {
                if (filterArray[i] != "") {
                    clickOnFilterValue(filterArray[i]);
                }
            }
        }
    }

    //$("div#configurator > ul > li > ul").hide();
    $("div#configurator > ul > li > ul > li.selected").parent().show();

    readFromCookie = false;

    SetupCompare();

    FixImages();
});

function clickOnFilterValue(filter)
{
    var selector = "ul#filter > li > ul > li." + filter;
    $(selector).parent().parent().children("div").show();

    var src = ($("img", $(selector).parent().parent()).attr("src") === "/images/products-landing/configurator-filter-arrow-off.gif")
            ? "/images/products-landing/configurator-filter-arrow-on.gif"
            : "/images/products-landing/configurator-filter-arrow-off.gif";
    $("img", $(selector).parent().parent()).attr("src", src);
    
    $(selector).click();
}

function buttonOverlapClick(turnOffOverlap)
{
    if (turnOffOverlap)
    {
        src = "/images/products-landing/button-see-overlapping-results-off.gif";
    }
    else
    {
        var src = ($("#button-overlap").attr("src") === "/images/products-landing/button-see-overlapping-results-off.gif")
            ? "/images/products-landing/button-see-overlapping-results-on.gif"
            : "/images/products-landing/button-see-overlapping-results-off.gif";
    }
    $("#button-overlap").attr("src", src);

    filterOverlap();
}

//        function buttonOverlapHover()
//        {
//            var src = ($("#button-overlap").attr("src") === "/images/products-landing/button-see-overlapping-results-on.gif")
//                    ? "/images/products-landing/button-see-overlapping-results-off.gif"
//                    : "/images/products-landing/button-see-overlapping-results-on.gif";
//            
//            $("#button-overlap").attr("src", src);
//        }

function overlapTagsExist()
{
    buttonOverlapClick(false);
    var overlapCount = $("div#results > div > div > ul > li.result-product > div.overlaping").size();
    buttonOverlapClick(true);
    return overlapCount;
    
}

function buildFilterLists()
{
    goalFilters = "";
    formFilters = "";
    familyFilters = "";
    filterCount = 0;

    // goalFilters
    $("div#configurator > ul > li > ul.goal > li.selected").each(function()
    {
        var filterValue = $(this).attr('class').split(' ').slice(0, 1);                
        if (goalFilters.indexOf(filterValue) == -1)
        {
            goalFilters += filterValue + "|";
            filterCount++;
        }
    });

    // formFilters
    $("div#configurator > ul > li > ul.form > li.selected").each(function()
    {
        var filterValue = $(this).attr('class').split(' ').slice(0, 1);
        if (formFilters.indexOf(filterValue) == -1)
        {
            formFilters += filterValue + "|";
            filterCount++;
        }
    });

    // familyFilters
    $("div#configurator > ul > li > ul.family > li.selected").each(function()
    {
        var filterValue = $(this).attr('class').split(' ').slice(0, 1);
        if (familyFilters.indexOf(filterValue) == -1)
        {
            familyFilters += filterValue + "|";
            filterCount++;
        }
    });  
    
    if (filterCount <= 1)
    {
        buttonOverlapClick(true);
        $("#button-overlap").hide();
    }
    else
    {
        if (overlapTagsExist() > 0)
        {
            $("#button-overlap").show();
        }
        else
        {
            $("#button-overlap").hide();
        }
    }
    
    ResetItemsToCompare();
    UpdateCompareLinks();
}

function setFilterCookie()
{
    if (!readFromCookie)
    {
        var now = new Date();
        now.setUTCMinutes(now.getUTCMinutes() + 10);
        
        document.cookie = filterPresentCookieName + "=true; expires=" + now.toUTCString() + "; path=/";
        
        var concatFilters = goalFilters + formFilters + familyFilters;
        document.cookie = filterCookieName + "=" + escape(concatFilters) + "; expires=" + now.toUTCString() + "; path=/";
    }
}

function getFilterCookie()
{
    var cookiesPresent = false;
    var cookieValue = "";
    
    if (document.cookie.length > 0)
    {
        c_start = document.cookie.indexOf(filterPresentCookieName + "=");
        if (c_start != -1)
        {
            c_start = c_start + filterPresentCookieName.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;

            cookiesPresent = document.cookie.substring(c_start, c_end);
        }
        
        c2_start = document.cookie.indexOf(filterCookieName + "=");
        if (c2_start != -1)
        {
            c2_start = c2_start + filterCookieName.length + 1;
            c2_end = document.cookie.indexOf(";", c2_start);
            if (c2_end == -1) c2_end = document.cookie.length;

            cookieValue = document.cookie.substring(c2_start, c2_end);
        }

        if (cookiesPresent && cookieValue.length > 0) 
        {
            readFromCookie = true;
            return unescape(cookieValue);
        }
    }
    return "";
}

function clearFormatting()
{
    $("div.product_list_container ul > li.no_right_border").removeClass("no_right_border");
    $("div.product_list_container ul > li > div.margin_top").removeClass("margin_top");
    $("div.product_list_container ul > li.no_bottom_border").removeClass("no_bottom_border");
}

function formatting()
{
    $("div.product_list_container").each(function()
    {
        $("ul > li:nth-child(3n)", this).addClass("no_right_border");
        $("ul > li:gt(2) > div", this).addClass("margin_top");
        var itemCount = $("ul > li", this).size();
        if (itemCount <= 3)
        {
            $("ul > li", this).addClass("no_bottom_border");
        }
        else
        {
            var rows = parseInt(itemCount / itemsPerRow);

            if ((itemCount % itemsPerRow) > 0)
            {
                rows++;
            }
            var itemsToSelect = ((rows - 1) * itemsPerRow) - 1;
            $("ul > li:gt(" + itemsToSelect + ")", this).addClass("no_bottom_border");
        }
    });
}

function hideResults() 
{
    $("div#all-products").show();
    $("div#results").hide();
}

function showResults()
{
    $("div#all-products").hide();
    $("div#results").show();

    $("div#results > div > div > ul > li").remove();

    $("div.product_list_container > ul > li").each(function() 
    {
        $(this).clone(true).appendTo("div#results > div > div > ul");
    });

    $("div#results > div > div > ul > li").addClass("excluded");
}

function filterOverlap()
{
    var src = $("#button-overlap").attr("src");

    $("div#results > div > div > ul > li.result-product > div").removeClass("overlaping");

    if (src.toString().indexOf("on.gif") > -1)
    {
        $("div#results > div > div > ul > li.result-product > div").addClass("overlaping");

        var concatFilters = goalFilters + formFilters + familyFilters;
        var filterArray = concatFilters.split("|");
        for (var i in filterArray)
        {
            if (filterArray[i] != "")
            {
                filterOverlapingResults(filterArray[i]);
            }
        }
    }

}

function filterOverlapingResults(tag)
{
    $("div#results > div > div > ul > li").each(function()
    {
        var item = $(this).hasClass(tag);
        
        if (!item)
        {
            $("div", this).removeClass("overlaping");
        }
    });
}

function filter(tag)
{
    $("div#results > div > div > ul > li").each(function()
    {
        var item = $(this).hasClass(tag);
        if (item)
        {
            $(this).removeClass("excluded").show();
        }
    });
}

function filterFromCurrentResults(tag)
{
    $("div#results > div > div > ul > li").each(function()
    {   
        var item = $(this).hasClass(tag);
        if (item)
        {
            $(this).removeClass("excluded").show();
        }
    });
}

function removeHiddenResults()
{
    $("div#results > div > div > ul > li.excluded").remove();

    var count = $("div#results > div > div > ul > li:visible").size();
    $("div#results > div > h2").html("results (" + count + ")");
}

function showOverlappingResults()
{
    $(".result-product > div").addClass("overlapping");
}

function FixImages()
{
    $("div.product_list_container a > img").ifixpng();
    $("div#configurator").ifixpng();
    $("div#configurator-bottom > ul#promos img").ifixpng();
}

/* Products Compare */

var compareHiddenField = $("input[type=hidden]#productstocompare");
var maxItemsToCompare = 4;
var maxNumberOfItemsMessage = 'You may only compare up to 4 products.';
var minNumberOfItemsMessage = 'You must select at least 2 products to compare.';

function SetupCompare()
{   
    ResetItemsToCompare();
    UpdateCompareLinks();

    $("input.compare_item_checkbox").click(function(){
        var checked = $(this).is(":checked");
    
        if((GetItemsToCompareCount() == maxItemsToCompare) && checked)
        {
            $(this).attr('checked', false);
            alert(maxNumberOfItemsMessage);       
        }
        else
        {   
            var seoTitle = $(this).attr("itemseotitle");
            ProcessItemToCompare(checked, seoTitle);      
        }  
    });
}

function ProcessItemToCompare(checked, itemTitle)
{
    UpdateItemsToCompareList(checked, itemTitle);
    RenderItemsToCompare();
    UpdateCompareLinks();
}

function UpdateItemsToCompareList(checked, itemTitle)
{
    var currentItems = $(compareHiddenField).val();
    
    if(checked) // add item
    {
        if(currentItems == "")
        {
            $(compareHiddenField).val(itemTitle);
        }
        else
        {
            $(compareHiddenField).val(currentItems + '|' + itemTitle);
        }
    }   
    else
    {
        var itemArr = ItemsToCompareAsArray();

        for(var i = 0; i < itemArr.length; i++)
        {
            if(itemArr[i] == itemTitle)
            {
                itemArr.splice(i, 1);
                break;
            }
        }
        
        var joinedArray = itemArr.join('|');
    
        $(compareHiddenField).val(joinedArray);
    }
}

function RenderItemsToCompare()
{
    var containingList = $("ul.products_compare_items");
    $(containingList).empty();
    
    if(GetItemsToCompareCount() > 0)
    {
        var thumbWidth = '23';
	    var thumbHeight = '24';

        var itemArray = ItemsToCompareAsArray();
        
        for(var i = 0; i < itemArray.length; i++)
        {
            var selector = "li.result-product span.compare input.compare_item_checkbox[itemseotitle=" + itemArray[i] + "]";
        
            var listItem = $(selector).first().parent().parent();   
            
            var productImage = $(listItem).find("img").first().clone();
            
            if($.browser.msie && $.browser.version <= 6)
            {
                //undo pngfix;
                var originalSrc = $(productImage).css("filter");
                if (originalSrc.match(/src=["']?(.*\.png([?].*)?)["']?/i)) { // get img source from filter
				    originalSrc = RegExp.$1;
			    }
                $(containingList).append("<li><img class=\"unfixed_png\" src=\"" + originalSrc + "\" /></li>");
                $("img.unfixed_png").ifixpng();
                
                var f = $("img.unfixed_png").css("filter");
                f = f.replace('sizingMethod=image', 'sizingMethod=scale');
                $("img.unfixed_png").css("filter", f);
                
                $("img.unfixed_png").removeClass("unfixed_png");
            }
            else
            {            
                $(containingList).append($("<li />").wrapInner(productImage)); 
            }
        }
        
        if(itemArray.length < 4)
        {
            for(var f = 0; f < (4 - itemArray.length); f++)
            {
                $(containingList).append("<li />");
            } 
        }
    }
    else 
    {
        $(containingList).append("<li /><li /><li /><li />");
    }
    
    
}

function ResetItemsToCompare()
{
    $(compareHiddenField).val("");
    $("input[type=checkbox].compare_item_checkbox").attr('checked', false);
    RenderItemsToCompare();
}

function UpdateCompareLinks()
{
    var count = GetItemsToCompareCount();
    if(count >= 2 && count <= 4)
    {
        $("a.products_compare_button").unbind("click");
        $("a.products_compare_button").attr("href", BuildCompareLink());
    }
    else
    {    
        $("a.products_compare_button").unbind("click");
        $("a.products_compare_button").click(function() {
            alert(minNumberOfItemsMessage);
        });
        $("a.products_compare_button").removeAttr("href");
    }
}

function BuildCompareLink()
{
    var baseUrl = "/products/compare/";
    var parameter = $(compareHiddenField).val();    
    parameter = parameter.replace(/\|/gi, ';');        
    var fullUrl = encodeURI(baseUrl + parameter);
    
    return fullUrl ;
}

function GetItemsToCompareCount()
{
    if($(compareHiddenField).val() == "")
    {
        return 0;
    }
    else
    {
        return ItemsToCompareAsArray().length;
    }
}

function ItemsToCompareAsArray()
{
    return $(compareHiddenField).val().split('|');
}

/* configurator search */

function ConfiguratorSearch()
{
    $("ul#filter li.selected").click();

    showResults();
    
    var searchText = $("input#configurator-search-box").val();
    
    if(searchText == undefined || searchText == '' || searchText == defaultConfiguratorSearchText)
    {
        alert("Please enter one or more search terms.");
        return;
    }
    else
    {
        searchText = $.trim(searchText); // trim
        searchText = searchText.replace(/[ ]{2,}/g, ' '); // reduce multiple spaces to one
        var searchTerms = searchText.replace(/ /g, '|').split('|');
        var searchRegex = new Array();
        
        for(var i = 0; i < searchTerms.length; i++)
        {
            searchRegex[i] = new RegExp(searchTerms[i], "i"); 
        }        
        
        var isMatch;    
            
        $("#results .product_list_container ul > li").each(function() 
        {
            var searchData = $(this).find("input.product_search_data").first().val();
        
            isMatch = true;
            
            for(var i = 0; i < searchRegex.length; i++)
            {
                if(!searchRegex[i].test(searchData))
                {
                    isMatch = false;
                    break;
                }                
            }
            
            if(isMatch) {
                $(this).removeClass("excluded");
            }
        });
        
        removeHiddenResults();
        clearFormatting();
        formatting();
        $("#button-overlap").hide();
    }
}
