(function($){$.PaginationCalculator=function(maxentries,opts){this.maxentries=maxentries;this.opts=opts;};$.extend($.PaginationCalculator.prototype,{numPages:function(){return Math.ceil(this.maxentries/this.opts.items_per_page);},getInterval:function(current_page){var ne_half=Math.ceil(this.opts.num_display_entries/2);var np=this.numPages();var upper_limit=np-this.opts.num_display_entries;var start=current_page>ne_half?Math.max( Math.min(current_page-ne_half,upper_limit),0):0;var end=current_page>ne_half?Math.min(current_page+ne_half,np):Math.min(this.opts.num_display_entries,np);return{start:start,end:end};}});$.PaginationRenderers={};$.PaginationRenderers.defaultRenderer=function(maxentries,opts){this.maxentries=maxentries;this.opts=opts;this.pc=new $.PaginationCalculator(maxentries,opts);};$.extend($.PaginationRenderers.defaultRenderer.prototype,{createLink:function(page_id,current_page,appendopts){var lnk,np=this.pc.numPages();page_id=page_id<0?0:(page_id<np?page_id:np-1);appendopts=$.extend({text:page_id+1,classes:""},appendopts||{});if(page_id==current_page){lnk=$("<span class='current'>"+appendopts.text+"</span>");}else{lnk=$("<a>"+appendopts.text+"</a>").attr('href',this.opts.link_to.replace(/__id__/,page_id));}if(appendopts.classes){lnk.addClass(appendopts.classes);}lnk.data('page_id',page_id);return lnk;},appendRange:function(container,current_page,start,end){var i;for(i=start;i<end;i++){this.createLink(i,current_page).appendTo(container);}},getLinks:function(current_page,eventHandler){var begin,end,interval=this.pc.getInterval(current_page),np=this.pc.numPages(),fragment=$("<div class='pagination'></div>");if(this.opts.prev_text&&(current_page>0||this.opts.prev_show_always)){fragment.append(this.createLink(current_page-1,current_page,{text:this.opts.prev_text,classes:"prev"}));}if(interval.start>0&&this.opts.num_edge_entries>0){end=Math.min(this.opts.num_edge_entries,interval.start);this.appendRange(fragment,current_page,0,end);if(this.opts.num_edge_entries<interval.start&&this.opts.ellipse_text){jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(fragment);}}this.appendRange(fragment,current_page,interval.start,interval.end);if(interval.end<np&&this.opts.num_edge_entries>0){if(np-this.opts.num_edge_entries>interval.end&&this.opts.ellipse_text){jQuery("<span>"+this.opts.ellipse_text+"</span>").appendTo(fragment);}begin=Math.max(np-this.opts.num_edge_entries,interval.end);this.appendRange(fragment,current_page,begin,np);}if(this.opts.next_text&&(current_page<np-1||this.opts.next_show_always)){fragment.append(this.createLink(current_page+1,current_page,{text:this.opts.next_text,classes:"next"}));}$('a',fragment).click(eventHandler);return fragment;}});$.fn.pagination=function(maxentries,opts){opts=jQuery.extend({items_per_page:10,num_display_entries:10,current_page:0,num_edge_entries:0,link_to:"#",prev_text:"Prev",next_text:"Next",ellipse_text:"...",prev_show_always:true,next_show_always:true,renderer:"defaultRenderer",callback:function(){return false;}},opts||{});var containers=this,renderer,links,current_page;function pageSelected(evt){var links,current_page=$(evt.target).data('page_id');containers.data('current_page',current_page);links=renderer.getLinks(current_page,pageSelected);containers.empty();links.appendTo(containers);var continuePropagation=opts.callback(current_page,containers);if(!continuePropagation){if(evt.stopPropagation){evt.stopPropagation();}else{evt.cancelBubble=true;}}return continuePropagation;}current_page=opts.current_page;containers.data('current_page',current_page);maxentries=(!maxentries||maxentries<0)?1:maxentries;opts.items_per_page=(!opts.items_per_page||opts.items_per_page<0)?1:opts.items_per_page;if(!$.PaginationRenderers[opts.renderer]){throw new ReferenceError("Pagination renderer '"+opts.renderer+"' was not found in jQuery.PaginationRenderers object.");}renderer=new $.PaginationRenderers[opts.renderer](maxentries,opts);containers.each(function(){this.selectPage=function(page_id){pageSelected(page_id);};this.prevPage=function(){var current_page=containers.data('current_page');if(current_page>0){pageSelected(current_page-1);return true;}else{return false;}};this.nextPage=function(){var current_page=containers.data('current_page');if(current_page<numPages()-1){pageSelected(current_page+1);return true;}else{return false;}}});links=renderer.getLinks(current_page,pageSelected);containers.empty();links.appendTo(containers);opts.callback(current_page,containers);}})(jQuery);
