// jquery.pajinate.js - version 0.4
// A jQuery plugin for paginating through any number of DOM elements
// 
// Copyright (c) 2010, Wes Nolte (http://wesnolte.com)
// Liscensed under the MIT License (MIT-LICENSE.txt)
// http://www.opensource.org/licenses/mit-license.php
// Created: 2010-04-16 | Updated: 2010-04-26
// Corrected by Jeremy Huet 2011-10-20
(function($){$.fn.pajinate=function(options){var current_page='current_page';var items_per_page='items_per_page';var meta;var defaults={item_container_id:'.content',items_per_page:10,nav_panel_id:'.page_navigation',num_page_links_to_display:20,start_page:0,wrap_around:false,nav_label_first:'First',nav_label_prev:'Prev',nav_label_next:'Next',nav_label_last:'Last',nav_class_first:'first_link',nav_class_prev:'previous_link',nav_class_next:'next_link',nav_class_last:'last_link',show_first_last:true};var options=$.extend(defaults,options);var $item_container;var $page_container;var $items;var $nav_panels;var total_page_no_links;return this.each(function(){$page_container=$(this);$item_container=$(this).find(options.item_container_id);$items=$page_container.find(options.item_container_id).children();meta=$page_container;meta.data(current_page,0);meta.data(items_per_page,options.items_per_page);var total_items=$item_container.children().size();var number_of_pages=Math.ceil(total_items/options.items_per_page);var more='<span class="ellipse more">...</span>';var less='<span class="ellipse less">...</span>';var first=!options.show_first_last?'':'<a class="'+options.nav_class_first+'" href="">'+options.nav_label_first+'</a>';var last=!options.show_first_last?'':'<a class="'+options.nav_class_last+'" href="">'+options.nav_label_last+'</a>';var navigation_html=''
if(total_items>options.items_per_page){navigation_html+=first;navigation_html+='<a class="'+options.nav_class_prev+'" href="">'+options.nav_label_prev+'</a>'+less;var current_link=0;while(number_of_pages>current_link){navigation_html+='<a class="page_link" href="" longdesc="'+current_link+'">'+(current_link+1)+'</a>';current_link++;}
navigation_html+=more+'<a class="'+options.nav_class_next+'" href="">'+options.nav_label_next+'</a>';navigation_html+=last;}
$nav_panels=$page_container.find(options.nav_panel_id);$nav_panels.html(navigation_html).each(function(){$(this).find('.page_link:first').addClass('first');$(this).find('.page_link:last').addClass('last');});$nav_panels.children('.ellipse').hide();$nav_panels.find('.'+options.nav_class_prev).next().next().addClass('active_page');$items.hide();$items.slice(0,meta.data(items_per_page)).show();total_page_no_links=$page_container.children(options.nav_panel_id+':first').children('.page_link').size();options.num_page_links_to_display=Math.min(options.num_page_links_to_display,total_page_no_links);$nav_panels.children('.page_link').hide();$nav_panels.each(function(){$(this).children('.page_link').slice(0,options.num_page_links_to_display).show();});$page_container.find('.'+options.nav_class_first).click(function(e){e.preventDefault();movePageNumbersRight($(this),0);goto(0);});$page_container.find('.'+options.nav_class_last).click(function(e){e.preventDefault();var lastPage=total_page_no_links-1;movePageNumbersLeft($(this),lastPage);goto(lastPage);});$page_container.find('.'+options.nav_class_prev).click(function(e){e.preventDefault();showPrevPage($(this));});$page_container.find('.'+options.nav_class_next).click(function(e){e.preventDefault();showNextPage($(this));});$page_container.find('.page_link').click(function(e){e.preventDefault();goto($(this).attr('longdesc'));});goto(parseInt(options.start_page));toggleMoreLess();if(!options.wrap_around)
tagNextPrev();});function showPrevPage(e){new_page=parseInt(meta.data(current_page))-1;if($(e).siblings('.active_page').prev('.page_link').length==true){movePageNumbersRight(e,new_page);goto(new_page);}else if(options.wrap_around){goto(total_page_no_links-1);}};function showNextPage(e){new_page=parseInt(meta.data(current_page))+1;if($(e).siblings('.active_page').next('.page_link').length==true){movePageNumbersLeft(e,new_page);goto(new_page);}else if(options.wrap_around){goto(0);}};function goto(page_num){var ipp=meta.data(items_per_page);var isLastPage=false;start_from=page_num*ipp;end_on=start_from+ipp;$items.hide().slice(start_from,end_on).show();$page_container.find(options.nav_panel_id).children('.page_link[longdesc='+page_num+']').addClass('active_page').siblings('.active_page').removeClass('active_page');meta.data(current_page,page_num);toggleMoreLess();tagNextPrev();};function movePageNumbersLeft(e,new_p){var new_page=new_p;var $current_active_link=$(e).siblings('.active_page');if($current_active_link.siblings('.page_link[longdesc='+new_page+']').css('display')=='none'){$nav_panels.each(function(){$(this).children('.page_link').hide().slice(parseInt(new_page-options.num_page_links_to_display+1),new_page+1).show();});}}
function movePageNumbersRight(e,new_p){var new_page=new_p;var $current_active_link=$(e).siblings('.active_page');if($current_active_link.siblings('.page_link[longdesc='+new_page+']').css('display')=='none'){$nav_panels.each(function(){$(this).children('.page_link').hide().slice(new_page,new_page+parseInt(options.num_page_links_to_display)).show();});}}
function toggleMoreLess(){if(!$nav_panels.children('.page_link:visible').hasClass('last')){$nav_panels.children('.more').show();}else{$nav_panels.children('.more').hide();}
if(!$nav_panels.children('.page_link:visible').hasClass('first')){$nav_panels.children('.less').show();}else{$nav_panels.children('.less').hide();}}
function tagNextPrev(){if($nav_panels.children('.last').hasClass('active_page')){$nav_panels.children('.'+options.nav_class_next).add('.'+options.nav_class_last).addClass('no_more');}else{$nav_panels.children('.'+options.nav_class_next).add('.'+options.nav_class_last).removeClass('no_more');}
if($nav_panels.children('.first').hasClass('active_page')){$nav_panels.children('.'+options.nav_class_prev).add('.'+options.nav_class_first).addClass('no_more');}else{$nav_panels.children('.'+options.nav_class_prev).add('.'+options.nav_class_first).removeClass('no_more');}}};})(jQuery);
