/*
    Product filtering functions and global vars for pages that contain category filter
    functionality.
    Copyright (C) 2000-2008 Kohler Company.    All Rights Reserved.
    Author: Dennis Spaag
    Date Created: May 20, 2008
*/

function switchTab(tab) {
    var position = 0;
    $(".tabs").children().each( function(i) {
        if ($(this).attr("id") == tab.attr("id")) {
            position = i;
        }
    });
    $("div[@id^='type-options-']").each(function(i) {
        if (i == position) {
            $(this).addClass("clearfix");
            $(this).removeClass("closed");
        } else {
            $(this).addClass("closed");
            $(this).removeClass("clearfix");
        }
    });
    $("#activeFilter").val(position);

    var hasWideClass = false;
    $("li[@id^='section_']").each(function() {
        hasWideClass = $(this).hasClass("wide");
        $(this).attr("class", "");
        if (hasWideClass) {
            $(this).addClass("wide");
        }
    });
    tab.addClass("here");
    $("li[@id^='section_']:last").addClass("last");

    disableFormTabs(position);
}

function resetFilterDropdowns(startingFrom) {
    if (typeof startingFrom == "undefined") { return; }
    var index = parseInt(startingFrom);
    if (isNaN(index)) { return; }

    var formData = "";
    var getUrl   = "getFilteredCategoryFilters.ktp?h=1";
    var business =  $("select#businessSelect option:selected").val();

    switch (index) {
        case 0:
            formData = "&business=" + business;
            getUrl = "getFilteredCategoryFiltersWithSections.ktp?h=1";
            break;
        case 1:
            formData = $("#productSearchForm").fastSerializeUrlString();
            break;

    }

    blockTimerId = setTimeout("blockCategoryFilterSelect()", 400);

    $.get("/ajax/products/" + getUrl + formData, function(html) {
         if (index == 0) {
             populateCategoryFilterSelectsWithSections(html, business);
             $("#activeFilter").val(0);
         } else {
             populateCategoryFilterSelects(html);
         }
     });

}

function disableFormTabs(position) {
    $("div[@id^='type-options-']").each(function(i) {
        $(this).children().children("select").each(function() {
            if (i != position) {
                $(this).attr("disabled", true);  
            } else if (! $(this).hasClass("disabled")) {
                $(this).attr("disabled", false);
            } 
        });
    });
}

function populateCategoryFilterSelects(html) {
    var position = parseInt($("#activeFilter").val());
    $("#type-options-" + position).html(html);
    addFilterSelectChangeEvents();
    unblockCategoryFilterSelect();

}

function populateCategoryFilterSelectsWithSections(html, business) {
    $("#types").html(html);
    addFormEvents();
    unblockCategoryFilterSelect();
    if (business != null && (business == 'kallista' || business == 'resigen')) {
        hideMiddleColumn();
    } else {
        unhideMiddleColumn();
    }
}

function hideMiddleColumn() {
    $("div[@class='mid last']").children().hide();
    $("div[@class='mid last'] * input:checkbox").removeAttr('checked');
}
function unhideMiddleColumn() {
    $("div[@class='mid last']").children().show();
}

function categoryFilterUpdate(formData) {
   blockTimerId = setTimeout("blockCategoryFilterSelect()", 400);

   $.get("/ajax/products/getFilteredCategoryFilters.ktp?h=1" + formData, function(html) {
        populateCategoryFilterSelects(html);
    });
}

function categoryFilterSubmit(formData) {
    window.location = "productList.ktp?" + formData;
	return false;
}

function addFilterSelectChangeEvents() {
    $("select.categoryFilterSelect").unbind("change");
    $("select.categoryFilterSelect").change(function() {
        if ($(this)[0].selectedIndex == 0) {
            return;
        }
        
        var elName = $(this).attr("name");
        if (elName == 'category') {
            $(this).siblings('name=subcategory').attr("disabled", true);
            $("select[id^='filterOpt']").attr("disabled", true);

        } else if (elName == 'subcategory') {
            $("select[id^='filterOpt']").attr("disabled", true);
        }

        return categoryFilterUpdate($("#productSearchForm").fastSerializeUrlString());
    });
}

function showHideSearchResults(position) {
    $(".srchresultsList").hide();
    $(".srchresultsList").each(function(i) {
        if (i == position) {
            $(this).show();
        }
    });
}


function setPageNumberToDefault() {
    $("input[name^=pg]:hidden").val("1");
}

function addFormEvents() {

    addFilterSelectChangeEvents();

    $("li[@id^='section_'] a").unbind("click");
    $("li[@id^='section_'] a").click(function() {
         switchTab($(this).parent());
    });

    disableFormTabs(0);

}

function blockCategoryFilterSelect() {
    $("#searchModule").block({
          message: '<h4 style="margin-bottom:4px;"><img src="/common/images/busy.gif" style="margin:4px 4px 0 0;" />  Please wait...</h4>'
        , css: { width: '160px' }
     });
    $('.blockUI').css('cursor', 'wait');
}

function unblockCategoryFilterSelect() {
    clearTimeout(blockTimerId);
    $("#searchModule").unblock();
    $('.blockUI').css('cursor', 'default');
}


function maySubmitForm() {

    // If not category selected do not submit
    if ($("select#businessSelect option:selected").val() == 'resigen') {
        return true;
    }

    if ($('select#businessSelect option:selected').val() == 'kohlernewproducts') {
        return false;
    }

    if ($("select#businessSelect option:selected").val() != 'resigen'
        && $("select[name=category]:enabled")[0].selectedIndex == 0
        && $("#keywordField").val().length > 0)
    {
        $("#productSearchForm").attr("action", "/onlinecatalog/productSearch.ktp?pageNumber=1");
        return true;
    }

    if ($("select[name=category]:enabled")[0].selectedIndex == 0) {
        return false;
    }
    try {
        if ($("select[name=subcategory]:enabled") && $("select[name=subcategory]:enabled")[0].selectedIndex == 0) {
            return false;
        }
    } catch(e) {}
    return true;

}

function saveSearch(name) {
    var getUrl   = "saveSearch.ktp?h=1";
    var returnTo = $("#savedSearchReturnToUrl").val() + "&activeFilter=" + $("#activeFilter").val();
    var formData = "&savedSearchName=" +  name + "&savedSearchUrl=" +
                   encodeURIComponent(returnTo);

    $.get("/ajax/user/" + getUrl + formData, function() {
        window.location = returnTo;
        return false; // for ie6
    });

}

function submitSearchRemoveForm() {
    var getUrl   = "removeSavedSearch.ktp?h=1";
    var formData = $("#savedSearchesForm").fastSerializeUrlString();
    var returnTo = $("#savedSearchReturnToUrl").val() + "&activeFilter=" + $("#activeFilter").val();
    formData += "&business=" +  $("select#businessSelect option:selected").val();

    $.get("/ajax/user/" + getUrl + formData, function() {
        window.location = returnTo;
        return false; // for ie6
     });

}


//
// bind methods to elements after DOM load
//
$(function() {

    addFormEvents();

    /* Form submit */
    $("#productSearchForm").submit(function() {

        if (maySubmitForm()) {
            setPageNumberToDefault();
            resetCompareCookies();
            return true;
        }

        return false;
    });
    

    /* Change of business */
    $("select#businessSelect").change(function() {
        var value = $("select#businessSelect option:selected").val();
        if (value != 'kohlernewproducts') {
            $("#secondAndThirdContainer").unblock();
            if (value != activeBusiness) {
                resetFilterDropdowns(0);
                activeBusiness = value;
            }
            $("#mainSearchSortBy").val("");
        } else {
            $("#secondAndThirdContainer").block({
                message: null
                , css: { cursor: 'default' }
            });
        }
    });

    try {
        var pos = parseInt($("#activeFilter").val());
        if ($("#activeFilter") && pos != 0) {
            $(".tabs").children().each( function(i) {
                if (i == pos) {
                    switchTab($(this));   
                }
            });
        }
    } catch (e) {}

    if ($("div.srchresults ul.tabs")) {
        $("div.srchresults ul.tabs li a").click(function() {
            $("div.srchresults ul.tabs li").removeClass("here");
            var pos = $("div.srchresults ul.tabs li a").index($(this)[0]);
            $(this).parent().addClass("here");
            showHideSearchResults(pos);
            $("#mainSearchSortBy").val("");
        });
    }
    var activeBusiness = $("select#businessSelect option:selected").val();
    if (activeBusiness == 'kallista' || activeBusiness == 'resigen') {
        hideMiddleColumn();
    }

    /* saved search field mngt */
    $("input[name=searchName]").each(function() {

        if ($(this).val() == "") {
            $(this).val(savedSearchDefaultText);
        }
        $(this).focus(function() {
            if($(this).val() == savedSearchDefaultText) {
                $(this).val("");
            }
        });
        $(this).blur(function() {
            if($(this).val() == "") {
                $(this).val(savedSearchDefaultText);
            }
        });
    });


    $("#search").submit(function () {
        var searchString = jQuery.trim($("#search input#textfield").val());
        if (searchString != searchDefaultText && searchString.length > 2) {
            return true;
        }
        return false;
        
    });

    $(".productSortBySelect").blur(function() {
        $("#mainSearchSortBy").val($(this).val());
        $("#productSearchForm").trigger('submit');
    });


    $("select.savedsearch").change(function() {
        if ($("select.savedsearch option:selected").val().length > 0) {
            window.location = $("select.savedsearch option:selected").val();
            return false;
        }
    });

    $(".saveButton").click(function() {

        var searchName = $(this).parent("li").children("input[name=searchName]:first");
        if (searchName.val() == searchDefaultText) {
            return;
        }
        if (searchName.val().length > 30) {
            alert("The name of the saved search is too long.  Please limit it to 30 characters");
            return;
        }
        saveSearch(searchName.val());

    });

    $("#removeFromSavedSearchLink").click(function() {
        var selected = $("#savedSearchesForm input[name=savedSearchIds]:checked");
        if (selected.length > 0) {
            submitSearchRemoveForm();
        }

    });

});

var savedSearchDefaultText = 'Name your search';
var searchDefaultText = 'Search Kohler Pro Products';
var blockTimerId = 0;
