$.fn.extend({
    initializeSortComponents: function() {
        return this.each(function() {
            $component = $(this);
            $button = $('button[data-sort-value]', $component);
            $choices = $('a[data-sort-value]', $component);

            $choices.on('click', function(e){
                e.preventDefault();

                var $src = $(this);
                var value = $src.attr('data-sort-value');
                var asc = $src.attr('data-sort-asc') == 'true';

                var currentValue = $button.attr('data-sort-value');
                var currentAsc = $button.attr('data-sort-asc') == 'true';
                if (currentValue == value && currentAsc == asc) {
                    return;
                }

                var content = $src.html();
                $button.attr('data-sort-value', value).attr('data-sort-asc', asc ? 'true' : 'false').html(content);
                
                $($button.attr('data-sort-target'))
                    .setParameter('sort', value)
                    .setParameter('desc', asc ? 'false' : 'true')
                    .attr('data-reload-page', 1)
                    .reloadData();
            });

            var value = $button.attr('data-sort-value');
            var asc = $button.attr('data-sort-asc');

            if (value.length > 0 && asc.length > 0) {
                var $selectedSort = $('a[data-sort-value=' + value + '][data-sort-asc=' + asc + ']', $component);
                $button.html($selectedSort.first().html());
            }
        });
    },
});

$(function(){
    $('.filters-sort').initializeSortComponents();
});