
var timeouts = {};

var showMoreHandler = function (e) {
    var self = e.relatedTarget.$element;
    var $self = $(self);
    var options = e.relatedTarget.options;
    var elements = $('.js-filtercontent-showmore').filter('[data-filter-observer="#' + $self.attr('id') + '"]');

    if (elements.length > 0) {
        //var lastElement = $self.find('.js-filtercontent-item:visible:last');
        var lastElement = $self.find('.js-filtercontent-item').not('.hidden').last();

        lastElement.find('.filtercontent-product-inner').prepend(elements);
        if (options.itemsLeft > 0) {
            elements.removeClass('hidden');
        } else {
            elements.addClass('hidden');
            $self.append(elements);
        }
    }
}

var loadMoreHandler = function (e) {
    var $this = $(this);
    var $target = $($this.attr('data-target'));
    if (!$target.hasClass('js-filtercontent')) {
        return;
    }
    $target.filtercontent('showMore');
}


/* set show more handler */
$(document).on('paginated.bm.filterContent', showMoreHandler);


/* configure filter obeserver */
$(document).on('updated.bm.filterObserver', function (e) {
    var self = e.relatedTarget.$element;
    var filterGroups = e.relatedTarget.options.filter;


    var trigger = $('.js-filtertrigger').filter('[data-observer="#' + $(self).attr('id') + '"]');
    trigger.filtertrigger({filter: filterGroups});

    var taglisting = $('.js-filtertags').filter('[data-observer="#' + $(self).attr('id') + '"]');
    taglisting.filtertags({filter: filterGroups});


    var elements = $('.js-filtercontent').filter('[data-observer="#' + $(self).attr('id') + '"]');
    elements.filtercontent({filter: filterGroups});
});

/* show/hide filtertags */
$('.js-filtertags').closest('.js-filtertags-wrapper').hide();
$('.js-filtertags').on('hasItems.bm.filtertags isEmpty.bm.filtertags', function(e) {
    var $parent = $(this).closest('.js-filtertags-wrapper');
    if ($parent.length >0 ){
        if (e.type == 'hasItems'){
            $parent.show();
        } else {
            $parent.hide();
        }
    }
})

/* hide filter blocks if empty */
$('.js-filtercontent-item').on('updated.bm.filterContent', '.js-filtercontent', function(e) {
    var $self       = $(this);
    var $parent     = $self.closest('.js-filtercontent-item');
    var $counter    = $parent.data('itemCounter');
    var currentId   = $self.attr('id');
    var currentCount = e.relatedTarget.options.itemCount;
    if (!$counter) {
        $counter = {};
    }
    if (!$counter[currentId]) {
        $counter[currentId] = 0;
    }

    $counter[currentId] = currentCount;

    var _counter = 0;
    $.each($counter, function(){
        _counter += this;
    });

    $parent.data('itemCounter', $counter);
    var empty = (_counter <= 0);

    if (timeouts[currentId]) {
        clearTimeout(timeouts[currentId]);
    }
    if (currentCount <= 0){
        $self.addClass('is--empty')
            .prev().addClass('is--empty');
    } else {
        $self.removeClass('is--empty')
            .prev().removeClass('is--empty');
    }

     timeouts[currentId] = setTimeout(function(){
     if (empty){
     $parent.addClass('is--empty');
     } else {
     $parent.removeClass('is--empty');
     }
     }, 250);
});

/* debugger */
/*
 $(document).on('updated.bm.filterObserver', '#filterStorage', function (e) {
     var filterGroups = e.relatedTarget.options.filter;
     var $html = $('<p />');
     $.each(filterGroups, function (key, value) {
         var values = value.split(',');
         console.log(values);
         $.each(values, function(){

             var newValue = $('[data-filter-type="'+key+'"]').filter('[data-filter-show="'+this+'"]').data('filter-value');
             $html.append('<span>' + key + ':' + newValue + '</span>');
         })
         $html.append('<span>' + key + ':' + value + '</span>');
     })
     $('#filterStorage-debug').html($html);
 })
*/



$(document).ready(function () {

    $('.js-filterObserver').filterobserver();
    $('.js-filtercontent').filtercontent();
    $('.js-filtertrigger').filtertrigger();
    $('.js-filtertags').filtertags();
    $('.js-filtercontent-showmore').click(loadMoreHandler);

});