(function($) {
    var bar1 = '<a href=""><img src="/static/button_previous.gif" alt="Prev"/></a><a href=""><img src="/static/button_next.gif" alt="Next"></a>';
    var bar2 = '<select><option value="5">5</option><option value="10">10</option><option value="15">15</option><option value="20">20</option></select>  <input type="text" size="3" />';
    
    $.fn.pagtable = function(settings) {
        var options = {
            perpag: 5,       // număr implicit de rânduri/pagină
            navcss: 'navcss' // clasă CSS pentru elementele barei de navigare
        };
        $.extend(options, settings);

        var perpag = parseInt(options.perpag);
        var crtpag = 1; // pagina curentă
        
        var rows = $('tbody:first', this).children(':not(:has(th))');
        var pages = Math.ceil((rows.length) / perpag); // numărul de pagini

        var nav = $('<p class="' + options.navcss + '">' + bar2 + '<span>' + pages + '</span> ' + bar1 + '</p>').insertAfter($(this)); 
        
        $(nav).find('a:first').click(function() { // pentru Prev (pagina precedentă)
            if(crtpag > 1) {
                crtpag --;
                showPage(crtpag);
            }
            return false; // evită propagarea nativă a 'click'-ului
        });            

        $(nav).find('a:last').click(function() { // pentru Next (pagina următoare)
            if(crtpag < pages) {
                crtpag ++;
                showPage(crtpag);
            }
            return false;
        });

        var gopag = $(nav).find('input:first'); // referă INPUT-ul de indicare a unei pagini

        $(gopag).keyup(function() { // când se tastează un număr de pagină în INPUT-ul furnizat
            var n = parseInt($(this).val()); // aici 'this' referă INPUT-ul (nu tabelul)
            if(n >= 1 && n <= pages) {
                crtpag = n;
                showPage(crtpag);
            }
        });            

        $(nav).find('select:first').change(function() { // SELECTarea numărului de rânduri/pagină
            perpag = parseInt($(this).val());
            var n = rows.length;
            if(perpag <= n) {
                pages = Math.ceil(n / perpag);
                crtpag = 1;
                $(gopag).next('span:first').text(pages);
                showPage(crtpag);
            }
            this.blur(); // previne schimbarea accidentală (la click pe o tastă-săgeată)
        });
        
        function showPage(pag) { 
            var from = (pag - 1) * perpag,
                to = from + perpag - 1;
            for(var i = 0; i < rows.length; i++) // maschează rândurile din TBODY neindexate from..to
                rows[i].style.display = (i < from || i > to) ? 'none' : '';
            $(gopag).val(pag); // actualizează INPUT-ul care indică pagina curentă
        };

        showPage(crtpag); // redă prima pagină şi bara de navigare
        return $(this);    
    };

})(jQuery);

