/* Abstracted from dusty/category/categories.html */

/* jQuery selectors - these can vary from site to site and so can be declared as jQuery-syntax selectors in your page instead. */

var adminButtonsSelector    = adminButtonsSelector      || "button.admin";
var filterFieldSelector     = filterFieldSelector       || "#product-filter select";

var updateIndicatorSelector = updateIndicatorSelector   || "#update-indicator";
var productsWrapperSelector = productsWrapperSelector   || "#products-in-category";
var paginationSelector      = paginationSelector        || ".pagination";

$(function() {
    var filterFields    = $(filterFieldSelector);
    var adminButtons    = $(adminButtonsSelector);
    
    var updateIndicator = $(updateIndicatorSelector);
    var productsWrapper = $(productsWrapperSelector);
    var pagination      = $(paginationSelector);
    
    function postFilters()
    {
        var isFiltered  = false;
        var postData    = {filter: true};

        //Populate the post data from each field
        filterFields.each(function() {
            var name    = $(this).attr("name"), value = $(this).val();
            
            if (value) postData[name] = value;
            if (!this.options[0].selected) isFiltered = true;
        });
        
        //Don't allow product reordering or pagination if filtering is active
        if (isFiltered)
        {
            adminButtons.attr("disabled", "disabled");
			pagination.hide();
        }
        else
        {
            adminButtons.removeAttr("disabled");
			pagination.show();
        }
        
        updateIndicator.show();
        $.get(this.form.action, postData, function(data) {
            productsWrapper.html(data);
            updateIndicator.hide();
            
            //Make the products editable again
            if (typeof(makeModelsEditable) == 'function') makeModelsEditable();
        });
    }
    
    filterFields.change(postFilters);
    
    $(window).unload(function() { $(filterFields).get(0).form.reset() });
});