/*
	jQuery Paging plugin
	2008, Paul van Dam

	usage:

	$(function(){
		$('ul#pageable1').paging();

		$('ul#pageable2').paging({
			itemsPerPage: 10,
			elementType: 'div',
			prevText: 'vorige',
			nextText: 'volgende',
			selectedClass: 'selected',
			navClass: 'customnav',
			prevClass: 'prev',
			nextClass: 'next',
			disabledClass: 'disabled',
			addNav: 'before',
			showPageNumbers: false
		});
	}

	custom events:
	pagingBeforePageChange
	pagingAfterPageChange

*/

jQuery.fn.paging = function (options) {
	
	var opt = {
		itemsPerPage: 5,
		elementType: 'li',
		prevText: 'prev',
		nextText: 'next',
		selectedClass: 'selected',
		navClass: 'pagenav',
		prevClass: 'prev',
		nextClass: 'next',
		disabledClass: 'disabled',
		addNav: 'after', // 'after' or 'before'
		showPageNumbers: true
	};

	if (options) jQuery.extend(opt, options);

	if (opt.elementType == 'tr') opt.elementType = 'tbody>tr';

	return this.each (function () {

		var self = this;
		var pages = Math.ceil(jQuery('>'+opt.elementType,$(this)).length/opt.itemsPerPage);
		var currentPage = 1;
		
		if (pages > 1) {
			var html = '<a href="" class="'+opt.prevClass+'" rel="prev">'+opt.prevText+'</a>';
			if (opt.showPageNumbers) {
				for (var i=1; i<=pages; i++)
					html += '<a href="" rel="'+i+'">'+i+'</a>';
			}
			html += '<a href="" class="'+opt.nextClass+'" rel="next">'+opt.nextText+'</a>';
			var pagenav = $('<div class="'+opt.navClass+'">'+html+'</div>');
			
			if (opt.addNav == 'before')
				pagenav.insertBefore(jQuery(this));
			else
				pagenav.insertAfter(jQuery(this));

			jQuery('a',pagenav).click(function(){
				showPage(jQuery(this).attr('rel'));
				jQuery(this).blur();
				return false;
			});

			showPage(currentPage);
		}

		function showPage(nr) {
			jQuery(self).triggerHandler('pagingBeforePageChange');

			if (nr == 'next') {
				if (currentPage == pages) return;
				currentPage ++;
			} else if (nr == 'prev') {
				if (currentPage == 1) return;
				currentPage --;
			} else
				currentPage = nr;
			
			if (currentPage == 1)
				jQuery('a[rel=prev]',pagenav).addClass(opt.disabledClass);
			else
				jQuery('a[rel=prev]',pagenav).removeClass(opt.disabledClass);

			if (currentPage == pages)
				jQuery('a[rel=next]',pagenav).addClass(opt.disabledClass);
			else
				jQuery('a[rel=next]',pagenav).removeClass(opt.disabledClass);

			jQuery('>'+opt.elementType+':visible',self).hide();
			jQuery('>'+opt.elementType+':gt('+(((currentPage-1)*opt.itemsPerPage)-1)+'):lt('+opt.itemsPerPage+')',self).show();

			jQuery('a',pagenav).removeClass(opt.selectedClass);
			jQuery('a[rel='+currentPage+']',pagenav).addClass(opt.selectedClass);

			jQuery(self).triggerHandler('pagingAfterPageChange');
		};

	});
};