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