function Pager(tableName, itemsPerPage) {
    this.tableName = tableName;
    this.itemsPerPage = itemsPerPage;
    this.currentPage = 1;
    this.maxPages = 5;
    this.pages = 0;
    this.inited = false;
    this.showRecords = function(from, to) {        
        var rows = document.getElementById(tableName).rows;
        // i starts from 1 to skip table header row
        for (var i = 0; i < rows.length; i++) {
            if (i < from || i > to)  
                rows[i].style.display = 'none';
            else
                rows[i].style.display = '';
        }
    }
    
    this.showPage = function(pageNumber) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}
    	var oldPage = this.currentPage
    	this.currentPage = pageNumber;
    	var fromPg = this.currentPage + 1 - Math.ceil(this.maxPages/2);
      if (fromPg < 1)
        fromPg = 1;
      var toPg = fromPg + this.maxPages - 1;
      if (toPg > this.pages){
        toPg = this.pages;
        fromPg = toPg - this.maxPages + 1;
        if (fromPg < 1)
          fromPg = 1;
  	  }
      this.showPageNav('pager', 'pageNavPosition', fromPg, toPg);

      var oldPageAnchor = document.getElementById('pg'+oldPage);
      if (oldPageAnchor != null)
        oldPageAnchor.className = 'greenNav small navigation_box nav';
      
      this.currentPage = pageNumber;
      var newPageAnchor = document.getElementById('pg'+this.currentPage);
      if (newPageAnchor != null)
        newPageAnchor.className = 'redNav small navigation_box nav';
      
      var from = (pageNumber - 1) * itemsPerPage;
      var to = from + itemsPerPage - 1;
      this.showRecords(from, to);
    }   
    
    this.prev = function() {
        if (this.currentPage > 1)
            this.showPage(this.currentPage - 1);
    }
    
    this.next = function() {
        if (this.currentPage < this.pages) {
            this.showPage(this.currentPage + 1);
        }
    }                        
    
    this.init = function() {
        var rows = document.getElementById(tableName).rows;
        var records = (rows.length); 
        this.pages = Math.ceil(records / itemsPerPage);
        this.inited = true;
    }

    this.showPageNav = function(pagerName, positionId, fromPg, toPg) {
    	if (! this.inited) {
    		alert("not inited");
    		return;
    	}
    	var element = document.getElementById(positionId);
    	element.style.display = '';
    	var leftNav = '<span onclick="' + pagerName + '.prev();" class="greenNav small navigation_box nav">&#171</span>';
    	if (fromPg == this.currentPage)
        leftNav = '';
    	var pagerHtml = leftNav;
    	var itersMax = this.maxPages;
    	if (this.maxPages > this.pages)
        itersMax = this.pages;
      for (var page = 1; page <= itersMax; page++) 
          pagerHtml += '<span id="pg' + (page + fromPg - 1) + '" class="greenNav small navigation_box nav" onclick="' + pagerName + '.showPage(' + (page + fromPg - 1) + ');">' + (page + fromPg - 1) + '</span>';
      var rightNav = '<span onclick="'+pagerName+'.next();" class="greenNav small navigation_box nav">&#187;</span>';
      if (toPg == this.currentPage)
        rightNav = '';
      pagerHtml += rightNav;
      
      element.innerHTML = pagerHtml;
    }
    
    this.hidePageNav = function(positionId) {
      document.getElementById(positionId).style.display = 'none';
    }
}


