/*
JAVASCRIPT for SMALLPARTS.COM
Scope: Browse Page ONLY
for QA: jaricks@amazon.com
*/

$(function() {
    $.expr[':'].icontains = function(obj, index, meta, stack) {
        return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
    };

    $(".refinementFilter").keyup(function() {
        var parentId = $(this).parent(".refinementBin").attr("id");
        var val = $.trim($(this).val());
        if (val) {
            var hideSelector = "#" + parentId + " li:not(:icontains('" + val + "'))";
            var showSelector = "#" + parentId + " li:icontains('" + val + "')";
            $(hideSelector).hide();
            $(showSelector).show();
        } else {
            var selector = "#" + parentId + " li";
            $(selector).show();
        }
    });

    $("#searchRefinements .refinementToggle").click(function () {
        toggleRefinement($(this).parents(".refinementBin"), false);
    });

    $("#searchRefinements .visualPickerRefinementToggle").click(function () {
        toggleVisualPickerRefinement($(this).parents(".refinementBin"), false);
    });

    $("#searchRefinements .materialRefinementToggle").click(function () {
        toggleMaterialRefinement($(this).parents(".refinementBin"), false);
    });

    if ($.browser.msie) {
        $('.refinementValue input:checkbox').click(function () {
            this.blur();
            this.focus();
        });
    }

    var collapsed = readCookie("collapsedSelectors");
    if (collapsed) {
        var split = collapsed.split(",");
        $.each(split, function(index, selector) {
            if (selector) {
                toggleRefinement($("#" + selector), true);
            }
        });
    }

    collapsed = readCookie("visualPickerCollapsedSelectors");
    if (collapsed) {
        var split = collapsed.split(",");
        $.each(split, function(index, selector) {
            if (selector) {
                toggleVisualPickerRefinement($("#" + selector), true);
            }
        });
    }

    collapsed = readCookie("materialCollapsedSelectors");
    if (collapsed) {
        var split = collapsed.split(",");
        $.each(split, function(index, selector) {
            if (selector) {
                toggleMaterialRefinement($("#" + selector), true);
            }
        });
    }
});

function toggleMaterialRefinement(element, ignoreCookie) {
    var parentDiv = $(element);
    var valuesElement = parentDiv.find(".refinementValues");
    var messageElement = parentDiv.find(".refinementNoSelectionContainer");
    var notSel = valuesElement.find('.refinementValue:not(.selectedValue)');
    var selectedElements = valuesElement.find(".selectedValue a.checkTrigger");

    if ($("#selectedMaterial").length == 0) {
        messageElement.toggle();

        valuesElement.toggle();
        parentDiv.toggleClass("collapsedRefinement materialCollapsedRefinement");
    } else {
        valuesElement.toggle();
        if (valuesElement.is(":visible")) {
            $(parentDiv).find("materialRefinementValues").remove();
        } else {
            var newDiv = $("<div class='materialRefinementValues refinementValues'></div>");
            var ul = $("<ul class='refinementValuesContainer'></ul>");
            ul.appendTo(newDiv);

            var cloned = selectedElements.clone(true);
            cloned.each(function(index, clonedElement) {
                var newLi = $("<li class='refinementValue selectedValue'></li>");
                newLi.appendTo(ul);
                $(clonedElement).appendTo(newLi);
            });

            newDiv.appendTo(parentDiv);
            parentDiv.toggleClass("materialCollapsedRefinement");
        }
    }

    if (!ignoreCookie) {
        if (!parentDiv.hasClass("materialCollapsedRefinement")) {
            var collapsed = readCookie("materialCollapsedSelectors");
            createCookie("materialCollapsedSelectors", collapsed.replace(new RegExp(parentDiv.attr("id"), "g"), ""));
        } else {
            var collapsed = readCookie("materialCollapsedSelectors");
            createCookie("materialCollapsedSelectors", collapsed ? collapsed + "," + parentDiv.attr("id") : parentDiv.attr("id"));
        }
    }

    parentDiv.find(".materialRefinementToggle").blur();

    return false;
}

function toggleVisualPickerRefinement(element, ignoreCookie) {
    var parentDiv = $(element);
    var valuesElement = parentDiv.find(".refinementValues");
    var messageElement = parentDiv.find(".refinementNoSelectionContainer");
    var notSel = valuesElement.find('.refinementValue:not(.selectedValue)');
    var selectedElements = valuesElement.find(".selectedValue");

    if (selectedElements.length == 0) {
        messageElement.toggle();

        valuesElement.toggle();
        parentDiv.toggleClass("collapsedRefinement visualPickerCollapsedRefinement");
    } else {
        valuesElement.toggle();
        if (valuesElement.is(":visible")) {
            $(parentDiv).find("visualPickerRefinementValues").remove();
        } else {
            var newDiv = $("<div class='visualPickerRefinementValues refinementValues'></div>");
            var ul = $("<ul></ul>");
            ul.appendTo(newDiv);
            var lastNewLi = $("<li></li>");
            lastNewLi.appendTo(ul);

            var cloned = selectedElements.clone(true);
            cloned.each(function(index, clonedElement) {
                $(clonedElement).appendTo(lastNewLi);
                if (index > 0 && (index % 4 == 0)) {
                    lastNewLi = $("<li></li>");
                    lastNewLi.appendTo(ul);
                }
            });

            newDiv.appendTo(parentDiv);
            parentDiv.toggleClass("visualPickerCollapsedRefinement");
        }
    }

    if (!ignoreCookie) {
        if (!parentDiv.hasClass("visualPickerCollapsedRefinement")) {
            var collapsed = readCookie("visualPickerCollapsedSelectors");
            createCookie("visualPickerCollapsedSelectors", collapsed.replace(new RegExp(parentDiv.attr("id"), "g"), ""));
        } else {
            var collapsed = readCookie("visualPickerCollapsedSelectors");
            createCookie("visualPickerCollapsedSelectors", collapsed ? collapsed + "," + parentDiv.attr("id") : parentDiv.attr("id"));
        }
    }

    parentDiv.find(".visualPickerRefinementToggle").blur();

    return false;
}

function toggleRefinement(element, ignoreCookie) {
    var parentDiv = $(element);
    var valuesElement = parentDiv.find(".refinementValues");
    var messageElement = parentDiv.find(".refinementNoSelectionContainer");
	var notSel = valuesElement.find('.refinementValue:not(.selectedValue)');
    var selectedElements = valuesElement.find(".selectedValue");
    if (selectedElements.length == 0) {
        messageElement.toggle();
    }
    if (!ignoreCookie) {
        if (parentDiv.hasClass("collapsedRefinement")) {
            var collapsed = readCookie("collapsedSelectors");
            createCookie("collapsedSelectors", collapsed.replace(new RegExp(parentDiv.attr("id"), "g"), ""));
        } else {
            var collapsed = readCookie("collapsedSelectors");
            createCookie("collapsedSelectors", collapsed ? collapsed + "," + parentDiv.attr("id") : parentDiv.attr("id"));
        }

    }
    parentDiv.find(".visualPickerRefinementToggle").blur();
	notSel.toggle();
    parentDiv.toggleClass("collapsedRefinement");
    return false;
}

function clearRefinement(selector, value, submit, reftag) {
    if (value) {
        $(selector + " input:checkbox[value='" + value + "']").attr('checked', false);
        $(selector + " input.refinementState[value='" + value + "']").remove();
    } else {
        $(selector + " input:checkbox").attr('checked', false);
        $(selector + " input.refinementState").remove();
    }
    if (submit) {
        eraseCookie("collapsedSelectors");
        submitSearchForm(true, reftag);
    }
}

function submitSearchForm(gotToFirstPage, reftag) {
    if (gotToFirstPage) {
        $('#pageIndex').val("1");
    }

    if (reftag) {
        $('#reftag').val(reftag);
    }

    var scroll = getPageScroll();
    appendToSearchForm("x", scroll[0], false);
    appendToSearchForm("y", scroll[1], false);

    $("#searchForm").submit();
    return false;
}

function appendToSearchForm(name, value, submit) {
    var input = $("<input type='hidden' >");
    $("#searchForm").append(input);

    input.attr({
        'name' : name,
        'value' : value
    });

    if (submit) {
        submitSearchForm(true);
    }
}

$(function() {
    $("#browseContainer .learnMore").each(function(index, element) {
        element  = $(element);
        var href = element.attr("href");
        var index = href.indexOf("/help");
        var param = href.substring(index);
        href = href.substring(0, index) + "/simplehelp?helpUrl=" + param;
        $(element).amazonPopoverTrigger({
            skin: "default",
            destination :  href,
            followLink: false,
            closeEventInclude: "CLICK_OUTSIDE"
        });
    });
});

