Ojay.Paginator=new JS.Class({include:[Ojay.Observable,JS.State],extend:{CONTAINER_CLASS:"paginator",PAGE_CLASS:"page",ITEM_CLASS:"item",SCROLL_TIME:0.5,DIRECTION:"horizontal",EASING:"easeBoth",makePageElement:function(B,A){var C=Ojay(Ojay.HTML.div({className:this.PAGE_CLASS}));C.setStyle({"float":"left",width:B+"px",height:A+"px",margin:"0 0 0 0",padding:"0 0 0 0",border:"none"});return C}},initialize:function(B,A){this._selector=B;this._elements={};A=this._options=A||{};A.scrollTime=A.scrollTime||this.klass.SCROLL_TIME;A.direction=A.direction||this.klass.DIRECTION;A.easing=A.easing||this.klass.EASING;A.looped=!!A.looped;A.infinite=!!A.infinite;this.setState("CREATED")},getInitialState:function(){return{page:1}},changeState:function(B,C,A){if(B.page!==undefined){this._handleSetPage(B.page,C,A)}return this},getHTML:function(){var F=this._elements,D=this._options;if(F._container){return F._container}var B=Ojay(Ojay.HTML.div({className:this.klass.CONTAINER_CLASS}));B.addClass(this._options.direction);var E=D.width,A=D.height,C;if(D.rows||D.columns){C=this.getItems();if(D.rows){A=(D.rows*C.getHeight())+"px"}if(D.columns){E=(D.columns*C.getWidth())+"px"}}B.setStyle({width:E,height:A,overflow:"hidden",padding:"0 0 0 0",border:"none",position:"relative"});return F._container=B},getDirection:function(){return this._options.direction},isLooped:function(){return !!this._options.looped||!!this._options.infinite},getContainer:function(){return this.getHTML()},getSubject:function(){return this._elements._subject||undefined},getRegion:function(){if(!this._elements._container){return undefined}return this._elements._container.getRegion()},getTotalOffset:function(){var A=(this._options.direction=="vertical")?"getHeight":"getWidth";return this.getRegion()[A]()*(this._numPages-1)},getItems:function(){var A=this._elements;if(!A._subject){return undefined}if(A._items){return A._items}A._items=A._subject.children(this._options.selector);A._items.setStyle({margin:"0 0 0 0"});return A._items},getPages:function(){if(this._numPages){return this._numPages}var A=this.getItems();if(!A){return undefined}if(A.length===0){return 0}var B=this.getRegion(),C=A.at(0).getRegion();this._itemWidth=C.getWidth();this._itemHeight=C.getHeight();this._itemsPerCol=(B.getWidth()/this._itemWidth).floor()||1;this._itemsPerRow=(B.getHeight()/this._itemHeight).floor()||1;this._itemsPerPage=this._itemsPerRow*this._itemsPerCol;this._numPages=(A.length/this._itemsPerPage).ceil();if(this._options.grouping!==false){this._groupItemsByPage()}return this._numPages},_groupItemsByPage:function(){var B=this.getRegion(),D=B.getWidth(),A=B.getHeight(),E=this._itemsPerPage,C=this._elements._items.toArray();this._elements._pages=[];this._numPages.times(function(G){var F=C.slice(G*E,(G+1)*E);var H=this.klass.makePageElement(D,A);F.forEach(H.method("insert"));this._elements._pages.push(H);this._elements._subject.insert(H.node)},this);this._dummyPage=this.klass.makePageElement(D,A)},getCurrentPage:function(){return this._currentPage||undefined},pageForItem:function(B){if(!this._numPages){return undefined}var A=this._elements._items.length;if(B<1||B>A){return undefined}return((B-1)/this._itemsPerPage).floor()+1},addControls:function(A){if(this.inState("CREATED")||!/^(?:before|after)$/.test(A)){return undefined}var B=new this.klass.Controls(this);this.getContainer().insert(B.getHTML().node,A);return B},states:{CREATED:{setup:function(){var C=this._elements._subject=Ojay(this._selector).at(0);if(!C.node){return this}var B=this.getHTML();C.insert(B.node,"after");B.insert(C.node);C.setStyle({padding:"0 0 0 0",border:"none",position:"absolute",left:0,right:0});var A=this._numPages=this.getPages(),F=this.getRegion();var D=(this._options.direction=="vertical")?{width:F.getWidth()+"px",height:(A*F.getHeight()+1000)+"px"}:{width:(A*F.getWidth()+1000)+"px",height:F.getHeight()+"px"};C.setStyle(D);var E=this.getInitialState();this.setState("READY");if(this._currentPage===undefined){this._currentPage=E.page}this._handleSetPage(this._currentPage);return this},setPage:function(A){this._currentPage=Number(A);return this}},READY:{setPage:function(B,C,A){B=Number(B);if(this._options.looped&&B<1){B+=this._numPages}if(this._options.looped&&B>this._numPages){B-=this._numPages}if(!this.isLooped()&&(B==this._currentPage||B<1||B>this._numPages)){return this}this.changeState({page:B},C,A);return this},_handleSetPage:function(B,C,A){this.setScroll(this.getTotalOffset()*(B-1)/(this._numPages-1),{animate:true},C,A)},incrementPage:function(){var A=this._options.infinite&&(this._currentPage==this._numPages),B=this._elements._pages[0];if(A){this._elements._subject.insert(B,"bottom").insert(this._dummyPage,"top")}return this.setPage(this._currentPage+1,function(){if(!A){return }this._dummyPage.remove();this._elements._subject.insert(B,"top");this.setScroll(0,{animate:false,silent:true})},this)},decrementPage:function(){var B=this._options.infinite&&(this._currentPage==1),D=(this._options.direction=="vertical")?"marginTop":"marginLeft",C=this._elements._pages[this._numPages-1],A={};if(B){this._elements._subject.insert(C,"top");A[D]=(-this.getTotalOffset()/(this._numPages-1))+"px";this._elements._subject.setStyle(A)}return this.setPage(this._currentPage-1,function(){if(!B){return }this._elements._subject.insert(C,"bottom");A[D]=0;this._elements._subject.setStyle(A);this.setScroll(1,{animate:false,silent:true})},this)},snapToPage:function(A){this.setScroll((this._currentPage-1)/(this._numPages-1),{animate:A!==false,silent:true});return this},focusItem:function(C){var B=this.pageForItem(C);if(!B){return this}var A=this._elements._items.at(C-1);this.notifyObservers("focusitem",C,A);this.setPage(B);this._elements._items.removeClass("focused");A.addClass("focused");return this},setScroll:function(D,J,H,I){var A=this._options.direction,B=this._numPages,G=this.getTotalOffset(),C;if(D>=0&&D<=1){D=D*G}this._elements._items.removeClass("focused");J=J||{};if(J.animate&&YAHOO.util.Anim){this.setState("SCROLLING");C=(A=="vertical")?{top:{to:-D}}:{left:{to:-D}};this._elements._subject.animate(C,this._options.scrollTime,{easing:this._options.easing})._(function(K){K.setState("READY");if(H){H.call(I||null)}},this)}else{C=(A=="vertical")?{top:(-D)+"px"}:{left:(-D)+"px"};this._elements._subject.setStyle(C)}var F=D/G;if(F<0){F=1}if(F>1){F=0}if(!J.silent){this.notifyObservers("scroll",F,G)}var E=(B*F).ceil()||1;if(E!=this._currentPage){this._currentPage=E;this.notifyObservers("pagechange",E);if(E==1){this.notifyObservers("firstpage")}if(E==B){this.notifyObservers("lastpage")}}return this}},SCROLLING:{}}});Ojay.AjaxPaginator=new JS.Class(Ojay.Paginator,{initialize:function(B,A){this.callSuper();this._options.urls=this._options.urls.map(function(C){return{_url:C,_loaded:false}})},getItems:function(){var B=this._elements;if(B._items){return B._items}if(!B._subject){return undefined}var C=this._options.urls;if(!C.length){return undefined}C.length.times(function(D){var E=Ojay(Ojay.HTML.div({className:this.klass.ITEM_CLASS}));B._subject.insert(E.node,"bottom")},this);var A=this.callSuper();A.fitToRegion(this.getRegion());return A},pageLoaded:function(A){return !!(this._options.urls[A-1]||{})._loaded},loadPage:function(D,E,C){if(this.pageLoaded(D)||this.inState("CREATED")){return this}var B=this._options.urls[D-1],A=this;this.notifyObservers("pagerequest",B._url);Ojay.HTTP.GET(B._url,{},{onSuccess:function(F){F.insertInto(A._elements._items.at(D-1));B._loaded=true;A.notifyObservers("pageload",B._url,F);if(typeof E=="function"){E.call(C||null)}}});return this},states:{READY:{_handleSetPage:function(B){var C=this._options.urls.length;if(B>C){B-=C}if(B<1){B+=C}if(this.pageLoaded(B)){return this.callSuper()}var A=this.method("callSuper");this.setState("REQUESTING");this.loadPage(B,function(){this.setState("READY");A()},this)}},REQUESTING:{}}});Ojay.Paginator.extend({Controls:new JS.Class({extend:{CONTAINER_CLASS:"paginator-controls",PREVIOUS_CLASS:"previous",NEXT_CLASS:"next",PAGE_LINKS_CLASS:"pages"},initialize:function(A){this._paginator=A;this._elements={}},getHTML:function(){if(this._paginator.inState("CREATED")){return null}var D=this._elements,A=this.klass,E=this._paginator;if(D._container){return D._container}D._container=Ojay(Ojay.HTML.div({className:A.CONTAINER_CLASS},function(F){D._previous=Ojay(F.div({className:A.PREVIOUS_CLASS},"Previous"));D._pageLinks=Ojay(F.div({className:A.PAGE_LINKS_CLASS},function(G){D._pages=[];E.getPages().times(function(I){var H=D._pages[I]=Ojay(G.span(String(I+1)));H.on("mouseover").addClass("hovered");H.on("mouseout").removeClass("hovered")})}));D._next=Ojay(F.div({className:A.NEXT_CLASS},"Next"))}));D._previous.on("click")._(E).decrementPage();D._next.on("click")._(E).incrementPage();D._pageLinks.on("click",Ojay.delegateEvent({span:function(F,G){E.setPage(F.node.innerHTML)}}));var B=[D._previous,D._next];B.forEach(it().on("mouseover").addClass("hovered"));B.forEach(it().on("mouseout").removeClass("hovered"));E.on("pagechange",function(G,F){this._highlightPage(F);B.forEach(it().removeClass("disabled"))},this);var C=E.getCurrentPage();this._highlightPage(C);if(!E.isLooped()){E.on("firstpage")._(D._previous).addClass("disabled");E.on("lastpage")._(D._next).addClass("disabled");if(C==1){D._previous.addClass("disabled")}if(C==E.getPages()){D._next.addClass("disabled")}}D._container.addClass(E.getDirection());return D._container},_highlightPage:function(A){this._elements._pages.forEach({removeClass:"selected"});this._elements._pages[A-1].addClass("selected")},getPreviousButton:function(){if(this._paginator.inState("CREATED")){return null}return this._elements._previous},getNextButton:function(){if(this._paginator.inState("CREATED")){return null}return this._elements._next},getPageButtons:function(){if(this._paginator.inState("CREATED")){return null}return this._elements._pageLinks}})})