/* ===========================================================================
 *
 * JQuery Quick Pagination
 * Version 1.0.1
 * Quick and dirty pagination for pretty much any set of elements on the page.
 *
 * Author: Mark Perkins
 * Author email: mark@allmarkedup.com
 * For full documentation and more go to http://projects.allmarkedup.com/jquery_quick_paginate/
 *
 * ---------------------------------------------------------------------------
 *
 * LICENCE:
 *
 * Released under a MIT Licence. See licence.txt that should have been supplied with this file,
 * or visit http://projects.allmarkedup.com/jquery_quick_paginate/licence.txt
 *
 * ---------------------------------------------------------------------------
 * 
 * EXAMPLES OF USE:
 *
 * jQuery('.news_item').quickpaginate(); // would paginate all items on the page with the class of 'news_item'
 * 
 * jQuery('div#quick_slideshow img').quickpaginate(); // would paginate all img elements within the div with an id of 'quick_slideshow'
 *
 * // Paginate everything with the class of "news_item",
 * // 5 per 'page' and without the page counter.
 * jQuery('.news_item').quickpaginate( { perpage: 5, showcounter: false } ); 
 *
 * // Paginate all img elements and the element with the id of "info",
 * // with the prev/next/counter element appended to the element with the id of "pager_here"
 * jQuery('img, #info').quickpaginate({ pager : $("#pager_here") });
 *
 */

jQuery.fn.quickpaginate = function( settings ) {

	settings = jQuery.extend({
   
		perpage: 4,
		
		pager : null,
		
		showcounter : true,
		
		prev : "arrow2_left",

		next : "arrow2_right",
		
		pagenumber : "qp_pagenumber",
		
		totalnumber : "qp_totalnumber",
		
		counter : "qp_counter"

	}, settings);

	var cm;
	
	var total;
	
	var last = false;
	
	var first = true;
	
	var items = jQuery(this);
	
	var nextbut;
	
	var prevbut;
	
	var init = function()
	{
				
		items.fadeIn(500);
		
		total = items.size();
				
		if ( items.size() > settings.perpage )
		{
			items.filter(":gt("+(settings.perpage-1)+")").hide();
			
			cm = settings.perpage;
			
			setNav();
		}
	};
	
	var goPage = function(pagenum){
		pagenum = parseInt(pagenum, 10);
		var nm = (pagenum) * settings.perpage;
		items.hide();
		items.slice( nm - settings.perpage, nm).fadeIn(500);
		cm = nm;
		
		if ( cm == settings.perpage  )
			{
				first = true;
				prevbut.addClass("qp_disabled");
			}
		else 
			{
				first = false;
				prevbut.removeClass("qp_disabled");
			}
		if ( cm >= total  )
			{
				last = true;
				nextbut.addClass("qp_disabled");
			}
		else 
			{
				last = false;
				nextbut.removeClass("qp_disabled");
			}
		if ( settings.showcounter )
			{
				setNumbers(cm/settings.perpage);
			}
	}
	
	var goNext = function()
	{
		if ( !last )
		{
			goPage(cm/settings.perpage+1);
		}
	};
	
	var goPrev = function()
	{
		if ( !first )
		{
			goPage(cm/settings.perpage-1);
		}
	};
	
	var setNumbers = function(currpage)
	{
			$('.number').remove();
			var cnt="";
			for ( i = 0; i < Math.ceil(total / settings.perpage); i++) {
				if (i == currpage-1)
					cnt += "<span class='number'>" + formatPage(currpage) + "</span>";
				else
					cnt += "<a class='number'  href='javascript:void(0);'>" + formatPage(i + 1) + "</a>";
				if (i < Math.ceil(total / settings.perpage - 1))
					cnt +="<span class='number delimiter'>&#160;/&#160;</span>";
			}
			settings.pager.find("."+settings.prev).after( cnt );
			$('.number').each(function( intIndex ){
					if (!$(this).hasClass("delimiter")) {
						$(this).click( function() {
								goPage($(this).text());
								return false;
							}
						);
					}
			});
	}
	
	var formatPage = function(page) 
	{
		if (("" + page).length == 1) {
			return "0" + page;
		}
		return page;
	}
	
	var setNav = function()
	{
		if ( settings.pager === null )
		{	
			settings.pager = jQuery('<div class="qc_pager"></div>');
			items.eq( items.size() -1 ).after(settings.pager);
		}
		
		var pagerNav = $('<a class="'+settings.prev+'" href="#"></a><a class="'+settings.next+'" href="#"></a>');
		nextbut = settings.pager.find("."+settings.next);
		if (nextbut.size() == 0) 
			jQuery(settings.pager).append( pagerNav );
		
		if ( settings.showcounter )
		{
			setNumbers(1);
		}

		nextbut = settings.pager.find("."+settings.next);
			
		prevbut = settings.pager.find("."+settings.prev);
		
		nextbut.removeClass('qp_disabled');
		
		
		prevbut.addClass("qp_disabled");
		
		nextbut.click(function(){
			goNext();
			return false;
		});
		
		prevbut.click(function(){
			goPrev();
			return false;
		});
		
	};
	
	init(); // run the function
};
