/*
Copyright (c) 2007-2008 the OTHER media Limited
Licensed under the BSD license, http://ojay.othermedia.org/license.html
Version: 0.3.0
Build:   min
*/
// @require ojay/core-min
// @require ojay/pkg/http-min

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(a,b){var c=Ojay(Ojay.HTML.div({className:this.PAGE_CLASS}));c.setStyle({'float':'left',width:a+'px',height:b+'px',margin:'0 0 0 0',padding:'0 0 0 0',border:'none'});return c}},initialize:function(a,b){this._i=a;this._0={};b=this._1=b||{};b.scrollTime=b.scrollTime||this.klass.SCROLL_TIME;b.direction=b.direction||this.klass.DIRECTION;b.easing=b.easing||this.klass.EASING;b.looped=!!b.looped;b.infinite=!!b.infinite;this.setState('CREATED')},getInitialState:function(){return{page:1}},changeState:function(a,b,c){if(a.page!==undefined)this._b(a.page,b,c);return this},getHTML:function(){var a=this._0,b=this._1;if(a._6)return a._6;var c=Ojay(Ojay.HTML.div({className:this.klass.CONTAINER_CLASS}));c.addClass(this._1.direction);var e=b.width,d=b.height,f;if(b.rows||b.columns){f=this.getItems();if(b.rows)d=(b.rows*f.getHeight())+'px';if(b.columns)e=(b.columns*f.getWidth())+'px'}c.setStyle({width:e,height:d,overflow:'hidden',padding:'0 0 0 0',border:'none',position:'relative'});return a._6=c},getDirection:function(){return this._1.direction},isLooped:function(){return!!this._1.looped||!!this._1.infinite},getContainer:function(){return this.getHTML()},getSubject:function(){return this._0._3||undefined},getRegion:function(){if(!this._0._6)return undefined;return this._0._6.getRegion()},getTotalOffset:function(){var a=(this._1.direction=='vertical')?'getHeight':'getWidth';return this.getRegion()[a]()*(this._2-1)},getItems:function(){var a=this._0;if(!a._3)return undefined;if(a._4)return a._4;a._4=a._3.children(this._1.selector);a._4.setStyle({margin:'0 0 0 0'});return a._4},getPages:function(){if(this._2)return this._2;var a=this.getItems();if(!a)return undefined;if(a.length===0)return 0;var b=this.getRegion(),c=a.at(0).getRegion();this._j=c.getWidth();this._k=c.getHeight();this._l=(b.getWidth()/this._j).floor()||1;this._m=(b.getHeight()/this._k).floor()||1;this._c=this._m*this._l;this._2=(a.length/this._c).ceil();if(this._1.grouping!==false)this._n();return this._2},_n:function(){var e=this.getRegion(),d=e.getWidth(),f=e.getHeight(),g=this._c,h=this._0._4.toArray();this._0._7=[];this._2.times(function(a){var b=h.slice(a*g,(a+1)*g);var c=this.klass.makePageElement(d,f);b.forEach(c.method('insert'));this._0._7.push(c);this._0._3.insert(c.node)},this);this._e=this.klass.makePageElement(d,f)},getCurrentPage:function(){return this._5||undefined},pageForItem:function(a){if(!this._2)return undefined;var b=this._0._4.length;if(a<1||a>b)return undefined;return((a-1)/this._c).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 a=this._0._3=Ojay(this._i).at(0);if(!a.node)return this;var b=this.getHTML();a.insert(b.node,'after');b.insert(a.node);a.setStyle({padding:'0 0 0 0',border:'none',position:'absolute',left:0,right:0});var c=this._2=this.getPages(),e=this.getRegion();var d=(this._1.direction=='vertical')?{width:e.getWidth()+'px',height:(c*e.getHeight()+1000)+'px'}:{width:(c*e.getWidth()+1000)+'px',height:e.getHeight()+'px'};a.setStyle(d);var f=this.getInitialState();this.setState('READY');if(this._5===undefined)this._5=f.page;this._b(this._5);return this},setPage:function(a){this._5=Number(a);return this}},READY:{setPage:function(a,b,c){a=Number(a);if(this._1.looped&&a<1)a+=this._2;if(this._1.looped&&a>this._2)a-=this._2;if(!this.isLooped()&&(a==this._5||a<1||a>this._2))return this;this.changeState({page:a},b,c);return this},_b:function(a,b,c){this.setScroll(this.getTotalOffset()*(a-1)/(this._2-1),{animate:true},b,c)},incrementPage:function(){var a=this._1.infinite&&(this._5==this._2),b=this._0._7[0];if(a)this._0._3.insert(b,'bottom').insert(this._e,'top');return this.setPage(this._5+1,function(){if(!a)return;this._e.remove();this._0._3.insert(b,'top');this.setScroll(0,{animate:false,silent:true})},this)},decrementPage:function(){var a=this._1.infinite&&(this._5==1),b=(this._1.direction=='vertical')?'marginTop':'marginLeft',c=this._0._7[this._2-1],e={};if(a){this._0._3.insert(c,'top');e[b]=(-this.getTotalOffset()/(this._2-1))+'px';this._0._3.setStyle(e)}return this.setPage(this._5-1,function(){if(!a)return;this._0._3.insert(c,'bottom');e[b]=0;this._0._3.setStyle(e);this.setScroll(1,{animate:false,silent:true})},this)},snapToPage:function(a){this.setScroll((this._5-1)/(this._2-1),{animate:a!==false,silent:true});return this},focusItem:function(a){var b=this.pageForItem(a);if(!b)return this;var c=this._0._4.at(a-1);this.notifyObservers('focusitem',a,c);this.setPage(b);this._0._4.removeClass('focused');c.addClass('focused');return this},setScroll:function(b,c,e,d){var f=this._1.direction,g=this._2,h=this.getTotalOffset(),i;if(b>=0&&b<=1)b=b*h;this._0._4.removeClass('focused');c=c||{};if(c.animate&&YAHOO.util.Anim){this.setState('SCROLLING');i=(f=='vertical')?{top:{to:-b}}:{left:{to:-b}};this._0._3.animate(i,this._1.scrollTime,{easing:this._1.easing})._(function(a){a.setState('READY');if(e)e.call(d||null)},this)}else{i=(f=='vertical')?{top:(-b)+'px'}:{left:(-b)+'px'};this._0._3.setStyle(i)}var j=b/h;if(j<0)j=1;if(j>1)j=0;if(!c.silent)this.notifyObservers('scroll',j,h);var k=(g*j).ceil()||1;if(k!=this._5){this._5=k;this.notifyObservers('pagechange',k);if(k==1)this.notifyObservers('firstpage');if(k==g)this.notifyObservers('lastpage')}return this}},SCROLLING:{}}});Ojay.AjaxPaginator=new JS.Class(Ojay.Paginator,{initialize:function(b,c){this.callSuper();this._1.urls=this._1.urls.map(function(a){return{_d:a,_f:false}})},getItems:function(){var c=this._0;if(c._4)return c._4;if(!c._3)return undefined;var e=this._1.urls;if(!e.length)return undefined;e.length.times(function(a){var b=Ojay(Ojay.HTML.div({className:this.klass.ITEM_CLASS}));c._3.insert(b.node,'bottom')},this);var d=this.callSuper();d.fitToRegion(this.getRegion());return d},pageLoaded:function(a){return!!(this._1.urls[a-1]||{})._f},loadPage:function(b,c,e){if(this.pageLoaded(b)||this.inState('CREATED'))return this;var d=this._1.urls[b-1],f=this;this.notifyObservers('pagerequest',d._d);Ojay.HTTP.GET(d._d,{},{onSuccess:function(a){a.insertInto(f._0._4.at(b-1));d._f=true;f.notifyObservers('pageload',d._d,a);if(typeof c=='function')c.call(e||null)}});return this},states:{READY:{_b:function(a){var b=this._1.urls.length;if(a>b)a-=b;if(a<1)a+=b;if(this.pageLoaded(a))return this.callSuper();var c=this.method('callSuper');this.setState('REQUESTING');this.loadPage(a,function(){this.setState('READY');c()},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._8=a;this._0={}},getHTML:function(){if(this._8.inState('CREATED'))return null;var d=this._0,f=this.klass,g=this._8;if(d._6)return d._6;d._6=Ojay(Ojay.HTML.div({className:f.CONTAINER_CLASS},function(e){d._9=Ojay(e.div({className:f.PREVIOUS_CLASS},'Previous'));d._g=Ojay(e.div({className:f.PAGE_LINKS_CLASS},function(c){d._7=[];g.getPages().times(function(a){var b=d._7[a]=Ojay(c.span(String(a+1)));b.on('mouseover').addClass('hovered');b.on('mouseout').removeClass('hovered')})}));d._a=Ojay(e.div({className:f.NEXT_CLASS},'Next'))}));d._9.on('click')._(g).decrementPage();d._a.on('click')._(g).incrementPage();d._g.on('click',Ojay.delegateEvent({span:function(a,b){g.setPage(a.node.innerHTML)}}));var h=[d._9,d._a];h.forEach(it().on('mouseover').addClass('hovered'));h.forEach(it().on('mouseout').removeClass('hovered'));g.on('pagechange',function(a,b){this._h(b);h.forEach(it().removeClass('disabled'))},this);var i=g.getCurrentPage();this._h(i);if(!g.isLooped()){g.on('firstpage')._(d._9).addClass('disabled');g.on('lastpage')._(d._a).addClass('disabled');if(i==1)d._9.addClass('disabled');if(i==g.getPages())d._a.addClass('disabled')}d._6.addClass(g.getDirection());return d._6},_h:function(a){this._0._7.forEach({removeClass:'selected'});this._0._7[a-1].addClass('selected')},getPreviousButton:function(){if(this._8.inState('CREATED'))return null;return this._0._9},getNextButton:function(){if(this._8.inState('CREATED'))return null;return this._0._a},getPageButtons:function(){if(this._8.inState('CREATED'))return null;return this._0._g}})});