﻿/*
 * jQuery Table Paging plug-in
 *
 * Copyright (c) 2007 E-wave web design
 *   http://www.ewave.com.au/
 *
 * Licensed under the GPL license:
 *   http://www.gnu.org/licenses/gpl.html
 *
 * @requires jQuery v 1.2.1 or later
 * @requires jQuery.cookie (used to save last page number)
 * @name	paging
 * @usage		$('#tableid').paging({
 *		rec_per_page : 20,	
 *		goto_class : "goto",
 *		first_class : "first",
 *		previous_class : "previous",
 *		next_class : "next",
 *		last_class : "last",
 *		page_num	 : "page"
 * });
 * 
 * HTML
 * <table id="tableid">
 * <thead>
 * <th>h1</th><th>h2</th><th>h3</th><th>h4</th><th>h5</th><th>h6</th>
 * </thead>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * <tr><td>data 1</td><td>data 2</td><td>data 3</td><td>data 4</td><td>data 5</td><td>data 6</td></tr>
 * </table>
 * <table><tr><td class="first">First</td><td class="previous">Prev</td><td scope="col">
 * 		<input name="page" type="text" id="page" size="10" maxlength="10" /></td>
 *  	<td class="goto">Go to Page</td><td class="next">Next</td><td class="last">Last</td></tr></table>
 *
 * Special attributes
 * rec_per_page - number of records per page
 * 
 * @param String goto_class
 * 	element that call the goto page function
 * 
 * @param String first_class
 * 	element that call the first page function
 * 
 * @param String previous_class
 * 	element that call the previous page function
 * 
 * @param String next_class
 * 	element that call the next page function
 * 
 * @param String last_class
 * 	element that call the last page function
 *  
 * @param String page_num
 * 	element that display current page number
 *  
 */
(function() { 
	jQuery.fn.paging = function(settings) {


	settings = jQuery.extend({
		version				: '1.0',
		rec_per_page 	: 20,	
		goto_class 		: "goto",
		first_class 	: "paging-first",
		previous_class : "paging-previous",
		next_class 		: "paging-next",
		last_class 		: "paging-last",
 		page_num	 		: "paging-page",
		cookie		 		: "paging-page"
	}, settings);
	
	var iTable = this;
	var maxPage;
	var rows = new Array();
	
	init();
	
	$("." + settings["first_class"]).click( function () {first();});
	$("." + settings["previous_class"]).click( function () {previous();});
	$("." + settings["next_class"]).click( function () {next();});
	$("." + settings["last_class"]).click( function () {last();});
	$("." + settings["goto_class"]).click( function () {goto();});
		
	function init() {	
		$("." + settings["first_class"]).attr("title", 'Go To First Page.'); 
		$("." + settings["previous_class"]).attr("title", 'Previous Page.'); 
		$("." + settings["next_class"]).attr("title", 'Next Page.'); 
		$("." + settings["last_class"]).attr("title", 'Go To Last Page.'); 
		$("." + settings["goto_class"]).attr("title", 'Go To Page.'); 
		//store table in memory
		rows = iTable.find('tr.paging').get();
		
		var currentPage = $.cookie(settings["cookie"] + 'pageNum');
		if (isNaN(currentPage) || parseInt(currentPage) < 1 )
			currentPage = 1;
			
		total_rec = iTable.find('tr.paging').length;
		maxPages = Math.ceil(total_rec / settings["rec_per_page"]);
		
		gotoPage(currentPage);
	}

	function first() { 
		gotoPage(1);
	}

	function previous() { 
		var currentPage = parseInt($('#' + settings["page_num"]).val());
		gotoPage(currentPage - 1);
	}

	function next() { 
		var currentPage = parseInt($('#' + settings["page_num"]).val());
		currentPage++;
		gotoPage(currentPage);
	}

	function last() { 
		gotoPage(maxPages);
	}

	function goto() { 
		var currentPage = parseInt($('#' + settings["page_num"]).val());
		gotoPage(currentPage);
	}
	
	function gotoPage(val) { 
		var currentPage = val;
			
		if (currentPage < 1)	currentPage = 1;
		if (currentPage > maxPages)	currentPage = maxPages;

		from_line = (settings["rec_per_page"] * (currentPage - 1)) + 1;
		to_line = parseInt(from_line) + (settings["rec_per_page"] - 1 );
		to_line = (to_line > total_rec)?total_rec:to_line;
		
		iTable.find("tr.paging").hide();
				
		for(i=from_line - 1;i< to_line;i++)
				$(rows[i]).show();

		setPageNum (currentPage);

		$.cookie(settings["cookie"] + 'pageNum', currentPage, { expires: 1 });
	}

	function setPageNum (page) {
		$('.' + settings["page_num"]).val(page + ' / ' + maxPages);
	}
}
})(jQuery);   