(function($) {    $.extend({        tablesorterPager: new function() {
            function updatePageDisplay(c) {                var s = $(c.cssPageDisplay,c.container).val((c.page+1) + c.seperator + c.totalPages);               }
            function setPageSize(table,size) {                var c = table.config;                c.size = size;                c.totalPages = Math.ceil(c.totalRows / c.size);                c.pagerPositionSet = false;                moveToPage(table);                fixPosition(table);            }
            function fixPosition(table) {                var c = table.config;                if(!c.pagerPositionSet && c.positionFixed) {                    var c = table.config, o = $(table);                    if(o.offset) {                        c.container.css({                            top: o.offset().top + o.height() + 'px',                            position: 'absolute'                        });                    }                    c.pagerPositionSet = true;                }            }
            function moveToFirstPage(table) {                var c = table.config;                c.page = 0;                moveToPage(table);            }
            function moveToLastPage(table) {                var c = table.config;                c.page = (c.totalPages-1);                moveToPage(table);            }
            function moveToNextPage(table) {                var c = table.config;                c.page++;                if(c.page >= (c.totalPages-1)) {                    c.page = (c.totalPages-1);                }                moveToPage(table);            }
            function moveToPrevPage(table) {                var c = table.config;                c.page--;                if(c.page <= 0) {                    c.page = 0;                }                moveToPage(table);            }
            function moveToPage(table) {                var c = table.config;                if(c.page < 0 || c.page > (c.totalPages-1)) {                    c.page = 0;                }                renderTable(table,c.rowsCopy);            }
            function renderTable(table,rows) {                var c = table.config;                var l = rows.length;                var s = (c.page * c.size);                var e = (s + c.size);                if(e > rows.length ) {                    e = rows.length;                }
                var tableBody = $(table.tBodies[0]);                // clear the table body                $.tablesorter.clearTableBody(table);
                for(var i = s; i < e; i++) {                    //tableBody.append(rows[i]);                    var o = rows[i];                    var l = o.length;                    for(var j=0; j < l; j++) {                        tableBody[0].appendChild(o[j]);                    }                }                fixPosition(table,tableBody);                $(table).trigger("applyWidgets");                if( c.page >= c.totalPages ) {                    moveToLastPage(table);                }                updatePageDisplay(c);            }            this.appender = function(table,rows) {
                var c = table.config;                c.rowsCopy = rows;                c.totalRows = rows.length;                c.totalPages = Math.ceil(c.totalRows / c.size);
                renderTable(table,rows);            };            this.defaults = {                size: 10,                offset: 0,                page: 0,                totalRows: 0,                totalPages: 0,                container: null,                cssNext: '.next',                cssPrev: '.prev',                cssFirst: '.first',                cssLast: '.last',                cssPageDisplay: '.pagedisplay',                cssPageSize: '.pagesize',                seperator: "/",                positionFixed: true,                appender: this.appender            };
            this.construct = function(settings) {
                
                return this.each(function() {   
                    
                    config = $.extend(this.config, $.tablesorterPager.defaults, settings);
                    
                    var table = this, pager = config.container;
                
                    $(this).trigger("appendCache");
                    
                    config.size = parseInt($(".pagesize",pager).val());
                    
                    $(config.cssFirst,pager).click(function() {
                        moveToFirstPage(table);
                        return false;
                    });
                    $(config.cssNext,pager).click(function() {
                        moveToNextPage(table);
                        return false;
                    });
                    $(config.cssPrev,pager).click(function() {
                        moveToPrevPage(table);
                        return false;
                    });
                    $(config.cssLast,pager).click(function() {
                        moveToLastPage(table);
                        return false;
                    });
                    $(config.cssPageSize,pager).change(function() {
                        setPageSize(table,parseInt($(this).val()));
                        return false;
                    });
                });
            };
            
        }
    });
    // extend plugin scope
    $.fn.extend({
        tablesorterPager: $.tablesorterPager.construct
    });
    
})(jQuery);             
