$.fn.extend({
    back: function() {
        return this.each(function() {
            var $item = $(this);
            var $current = $($item.attr('data-current'));
            var $previous = $($item.attr('data-previous'));
            var callback = $item.attr('data-callback');
    
            if (_.isUndefined(callback)) {
                $.switch($current, $previous);
            } else {
                $.switch($current, $previous, eval(callback));
            }
        });
    },

    enableTabs: function() {
        return this.each(function() {
            var $item = $(this);

            $links = $('.nav-link[data-target]', $item);
            $targets = Array();
            
            $links.each(function() {
                var $link = $(this);
                $target = $($link.attr('data-target'));
                $targets.push($target);

                if ($link.is('.active')) {
                    $target.show();
                } else {
                    $target.hide();
                }
            });

            $links.each(function() {
                var $link = $(this);

                $link.on('click', function() {
                    $links.removeClass('active');
                    for (var i=0; i<$targets.length; i++) {
                        $targets[i].hide();
                    }

                    $link.addClass('active');
                    $($link.attr('data-target')).show();
                });
            });
        });
    }
});

$(function(){
    // Back
    $(document).on('click', '.btn-back', function(e) {
        $(this).back();
        e.preventDefault();
    });

    // Pagination
    $(document).on('click', '.page-link', function(e) {
        e.preventDefault()

        var $link = $(this);
        var $parent = $link.closest('[data-reload-url]');

        var page = $link.attr('data-page');
        if (!_.isUndefined(page)) {
            $parent.attr('data-reload-page', page).reloadData();
            return
        }

        var rangeMin = parseInt($($link.closest('.page-item').prev('.page-item').children('.page-link')[0]).attr('data-page'), 10);
        var rangeMax = parseInt($($link.closest('.page-item').next('.page-item').children('.page-link')[0]).attr('data-page'), 10);

        var $select = $('<select></select>');
        for (var i = rangeMin; i <= rangeMax;) {
            $select.append('<option value="' + i +'">' + i +'</option>');
            if ((i-rangeMin < 10 && i % 10 != 0) || (rangeMax-i < 10 && i % 10 != 0)) {
                i++
            } else {
                i += 10
            }
        }

        $select.on('change', function() {
            var page = parseInt($select.val(), 10);
            $parent.attr('data-reload-page', page).reloadData();
        })

        $link.html($select);
    });

    $('.nav').enableTabs();
});