Pagination=Class.create({container:null,pageMask:null,pagesNav:null,prevArrow:null,nextArrow:null,itemsWrapper:null,items:[],totalPages:null,itemWidth:0,itemHeight:30,isPropagating:false,currentPage:1,previousPage:1,propagate:Prototype.emptyFunction,jump:Prototype.emptyFunction,stylesheet:"stylesheets/pagination.css",initialize:function(b,a){this.container=$(b);if(!this.container){throw (s2.fx.elementDoesNotExistError);return false}this.options=Object.extend({duration:0.5,transition:"easeInOutBack",startPage:1,itemsPerPage:1,orientation:"horizontal",circular:false,showPagesNav:true,showArrows:true,sync:false,onGoToPrevious:Prototype.emptyFunction,onGoToNext:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},a);this.onGoToPrevious=this.options.onGoToPrevious;this.onGoToNext=this.options.onGoToNext;this.onUpdate=this.options.onUpdate;this.render()},render:function(){this.container.addClassName("pagination");this.itemsWrapper=this.container.select(".items")[0];this.items=this.itemsWrapper.childElements();this.items.invoke("addClassName","paginitm");this.pageMask=new Element("div");this.itemsWrapper.wrap(this.pageMask);this.totalPages=Math.ceil(this.items.length/this.options.itemsPerPage);this.currentPage=(this.options.startPage<=this.totalPages)?this.options.startPage:1;if(this.options.orientation=="horizontal"){this.container.addClassName("horizontal");this.itemWidth=Math.ceil(this.container.getWidth()/this.options.itemsPerPage);this.items.invoke("setStyle",{width:this.itemWidth+"px"})}else{this.container.addClassName("vertical");this.itemHeight=Math.ceil(this.container.getHeight()/this.options.itemsPerPage);this.items.invoke("setStyle",{height:this.itemHeight+"px"})}if(this.items.length>this.options.itemsPerPage){if(this.options.showArrows){this.createArrows()}if(this.options.showPagesNav){this.createPagesNav()}this.jumpToPage(this.currentPage)}},createArrows:function(){this.arrows=new Element("div",{"class":"arrows"});this.prevArrow=new Element("a",{"class":"prevArrow",href:"#"}).update("<span>&lt;</span>");this.prevArrow.observe("click",function(a){a.stop();this.goToPrevious()}.bindAsEventListener(this));this.arrows.insert(this.prevArrow);this.nextArrow=new Element("a",{"class":"nextArrow",href:"#"}).update("<span>&gt;</span>");this.nextArrow.observe("click",function(a){a.stop();this.goToNext()}.bindAsEventListener(this));this.arrows.insert(this.nextArrow);this.container.insert(this.arrows)},createPagesNav:function(){this.nav=new Element("div",{"class":"pagesNav"});this.pagesNav=new Element("ul");for(var b=1;b<=this.totalPages;b++){var a=new Element("a",{href:"#"}).update("<span>"+b+"</span>");this.pagesNav.insert(new Element("li").update(a));$(a).observe("click",function(c,d){c.stop();if(d!=this.currentPage){this.goToPage(d)}}.bindAsEventListener(this,b))}this.nav.insert(this.pagesNav);this.container.insert(this.nav)},goToPrevious:function(){var a;if(this.isPropagating&&!this.options.sync){return}if(this.currentPage==1){if(this.options.circular){a=this.totalPages}else{return}}else{a=this.currentPage-1}this.goToPage(a);this.onGoToPrevious()},goToNext:function(){var a;if(this.isPropagating&&!this.options.sync){return}if(this.currentPage==this.totalPages){if(this.options.circular){a=1}else{return}}else{a=this.currentPage+1}this.goToPage(a);this.onGoToNext()},goToPage:function(a){if(this.isPropagating&&!this.options.sync){return}this.propagate(a);this.updateNav(a);this.onUpdate()},jumpToPage:function(a){this.jump(a);this.updateNav(a)},updateNav:function(a){this.previousPage=this.currentPage;this.currentPage=a;this.items[this.previousPage-1].removeClassName("currentPage");this.items[this.currentPage-1].addClassName("currentPage");if(this.options.showArrows){if((a==1)&&!this.options.circular){this.prevArrow.addClassName("disabled")}else{this.prevArrow.removeClassName("disabled")}if((a==this.totalPages)&&!this.options.circular){this.nextArrow.addClassName("disabled")}else{this.nextArrow.removeClassName("disabled")}}if(this.options.showPagesNav){this.pagesNav.childElements().each(function(c,b){if(b+1==a){c.addClassName("current")}else{c.removeClassName("current")}})}}});Pagination.Slider=Class.create(Pagination,{initialize:function($super,b,a){this.options=Object.extend({afterPropagation:Prototype.emptyFunction},a);$super(b,a);this.afterPropagation=this.options.afterPropagation;this.pageMask.addClassName("slider")},slideToPrevious:function(){this.goToPrevious()},slideToNext:function(){this.goToNext()},slideToPage:function(a){this.goToPage(a)},propagate:function(b){var a=0;if(this.options.orientation=="horizontal"){var c=(document.getElementsByTagName("html")[0].dir=="rtl")?"right:":"left:";a=c+((1-b)*this.options.itemsPerPage*this.itemWidth)+"px"}else{a="top:"+((1-b)*this.options.itemsPerPage*this.itemHeight)+"px"}this.itemsWrapper.morph(a,{before:function(){this.isPropagating=true}.bind(this),after:function(){this.isPropagating=false;this.afterPropagation()}.bind(this),duration:this.options.duration,transition:this.options.transition})},jump:function(b){var a=0;if(this.options.orientation=="horizontal"){var c=(document.getElementsByTagName("html")[0].dir=="rtl")?"right:":"left:";a=c+((1-b)*this.options.itemsPerPage*this.itemWidth)+"px"}else{a="top:"+((1-b)*this.options.itemsPerPage*this.itemHeight)+"px"}this.itemsWrapper.setStyle(a)},activateDrag:function(){this.container.observe("mousedown",function(a){a.stop();if(this.isPropagating){return}this.container.startX=a.clientX;this.container.startY=a.clientY;this.container.dragged=true}.bindAsEventListener(this));document.observe("mousemove",function(a){if(!this.container.dragged){return}dispX=a.clientX-this.container.startX;dispY=a.clientX-this.container.startX;this.itemsWrapper.setStyle("left:"+dispX+"px")}.bindAsEventListener(this));document.observe("click",function(a){this.container.dragged=false}.bindAsEventListener(this))}});Pagination.Fader=Class.create(Pagination,{initialize:function($super,b,a){$super(b,a);this.pageMask.addClassName("fader");this.items.invoke("setOpacity",0)},fadeToPrevious:function(){this.goToPrevious()},fadeToNext:function(){this.goToNext()},fadeToPage:function(a){this.goToPage(a)},propagate:function(a){new s2.fx.Parallel([new s2.fx.Morph(this.items[this.currentPage-1],{style:"opacity:0"}),new s2.fx.Morph(this.items[a-1],{style:"opacity:1"})],{before:function(){this.isPropagating=true}.bind(this),after:function(){this.isPropagating=false}.bind(this),duration:this.options.duration}).play()}});
