$('table.paginated').each(function () {
var pages = Math.ceil($table.find("tr:not(:has(th))").length / itemsPerPage);
$table.bind('repaginate', function () {
if ($table.next().hasClass("pager"))
pager = $table.next().empty(); else
pager = $('<div class="pager" style="padding-top: 20px; direction:ltr; " align="center"></div>');
$('<button class="pg-goto"></button>').text(' « First ').bind('click', function () {
$table.trigger('repaginate');
$('<button class="pg-goto"> « Prev </button>').bind('click', function () {
$table.trigger('repaginate');
var startPager = currentPage > 2 ? currentPage - 2 : 0;
var endPager = startPager > 0 ? currentPage + 3 : 5;
startPager = pages - 5; if (startPager < 0)
for (var page = startPager; page < endPager; page++) {
$('<span id="pg' + page + '" class="' + (page == currentPage ? 'pg-selected' : 'pg-normal') + '"></span>').text(page + 1).bind('click', {
currentPage = event.data['newPage'];
$table.trigger('repaginate');
$('<button class="pg-goto"> Next » </button>').bind('click', function () {
if (currentPage < pages - 1)
$table.trigger('repaginate');
$('<button class="pg-goto"> Last » </button>').bind('click', function () {
$table.trigger('repaginate');
if (!$table.next().hasClass("pager"))
pager.insertAfter($table);
'tbody tr:not(:has(th))').hide().slice(currentPage * itemsPerPage, (currentPage + 1) * itemsPerPage).show();
$table.trigger('repaginate');
var pager = document.querySelector('.pager');
pager.insertBefore(csvExport, pager.querySelector(':first-child'));
csvExport.style.float = 'left';