/*
Copyright (c) 2007-2008 the OTHER media Limited
Licensed under the BSD license, http://ojay.othermedia.org/license.html
Version: master-330f055948442ee55c30a7aaed9713f8a6df363e
Build:   min
*/

Ojay.Paginatable=new JS.Module('Ojay.Paginatable',{include:[Ojay.Observable,JS.State],getInitialState:function(){return{page:1}},changeState:function(a,b,c){if(a.page!==undefined)this._a(a.page,b,c);return this},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._5||undefined},getRegion:function(){if(!this._0._7)return undefined;return this._0._7.getRegion()},getCurrentPage:function(){return this._3||undefined},addControls:function(a){if(this.inState('CREATED')||!/^(?:before|after)$/.test(a))return undefined;var b=new Ojay.Paginator.Controls(this);this.getContainer().insert(b.getHTML().node,a);return b},states:{CREATED:{setPage:function(a){this._3=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._3||a<1||a>this._2))return this;this.changeState({page:a},b,c);return this}}}});Ojay.Paginator=new JS.Class('Ojay.Paginator',{include:Ojay.Paginatable,extend:{CONTAINER_CLASS:'paginator',PAGE_CLASS:'page',ITEM_CLASS:'item',SCROLL_TIME:0.5,PUSH_FADE_TIME:0.7,PUSH_SLIDE_TIME:0.3,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._e=a;this._0={};b=this._1=b||{};b.scrollTime=b.scrollTime||this.klass.SCROLL_TIME;b.pushFade=b.pushFade||this.klass.PUSH_FADE_TIME;b.pushSlide=b.pushSlide||this.klass.PUSH_SLIDE_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')},getHTML:function(){var a=this._0,b=this._1;if(a._7)return a._7;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._7=c},getTotalOffset:function(){var a=(this._1.direction=='vertical')?'getHeight':'getWidth';return this.getRegion()[a]()*(this._2-1)},getCurrentOffset:function(){return this._o},getItems:function(){var a=this._0;if(!a._5)return undefined;if(a._4)return a._4;a._4=a._5.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._p=c.getWidth();this._q=c.getHeight();this._f=(b.getHeight()/this._q).floor()||1;this._g=(b.getWidth()/this._p).floor()||1;this._c=this._g*this._f;this._2=(a.length/this._c).ceil();if(this._1.grouping!==false)this._r();return this._2},_r:function(){var e=this.getRegion(),d=e.getWidth(),f=e.getHeight(),g=this._c,j=this._0._4.toArray();this._0._6=[];this._2.times(function(a){var b=j.slice(a*g,(a+1)*g);var c=this.klass.makePageElement(d,f);b.forEach(c.method('insert'));this._0._6.push(c);this._0._5.insert(c.node)},this);this._j=this.klass.makePageElement(d,f)},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},states:{CREATED:{setup:function(){var a=this._0._5=Ojay(this._e).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,top: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._3===undefined)this._3=f.page;this._a(this._3);return this}},READY:{_a: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._3==this._2),b=this._0._6[0];if(a)this._0._5.insert(b,'bottom').insert(this._j,'top');return this.setPage(this._3+1,function(){if(!a)return;this._j.remove();this._0._5.insert(b,'top');this.setScroll(0,{animate:false,silent:true})},this)},decrementPage:function(){var a=this._1.infinite&&(this._3==1),b=(this._1.direction=='vertical')?'marginTop':'marginLeft',c=this._0._6[this._2-1],e={};if(a){this._0._5.insert(c,'top');e[b]=(-this.getTotalOffset()/(this._2-1))+'px';this._0._5.setStyle(e)}return this.setPage(this._3-1,function(){if(!a)return;this._0._5.insert(c,'bottom');e[b]=0;this._0._5.setStyle(e);this.setScroll(1,{animate:false,silent:true})},this)},snapToPage:function(a){this.setScroll((this._3-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 c=c||{},f=this._1.direction,g=c._s||this._1.scrollTime,j=this._2,h=this.getTotalOffset(),i=new JS.MethodChain(),m;if(b>=0&&b<=1)b=b*h;this._0._4.removeClass('focused');c=c||{};if(c.animate&&YAHOO.util.Anim){this.setState('SCROLLING');m=(f=='vertical')?{top:{to:-b}}:{left:{to:-b}};this._0._5.animate(m,g,{easing:this._1.easing})._(function(a){a.setState('READY');i.fire(d||a);if(e)e.call(d||null)},this)}else{m=(f=='vertical')?{top:(-b)+'px'}:{left:(-b)+'px'};this._0._5.setStyle(m)}var k=b/h;if(k<0)k=1;if(k>1)k=0;this._o=b;if(!c.silent)this.notifyObservers('scroll',k,h);var l=(j*k).ceil()||1;if(l!=this._3){this._3=l;this.notifyObservers('pagechange',l);if(l==1)this.notifyObservers('firstpage');if(l==j)this.notifyObservers('lastpage')}return(c.animate&&YAHOO.util.Anim)?i:this},push:function(a,b){b=(b===undefined)?this._2-1:b;var c=(b===this._2-1);if(c)this._d();a=Ojay(a).setStyle({margin:'0 0 0 0'});var e=this._0._6[c?this._2-1:b];e.insert(a,'bottom');this.notifyObservers('itemadd');var d=this._0._4;if(c)[].push.call(d,a.node);return this},pop:function(b){b=(b===undefined)?this._2-1:b;var c=(b===this._2-1);var e=this._0._6[b],d=Ojay(e.children().toArray().pop());this.notifyObservers('itemremove');if(!c)return d.remove();this._0._4=this._0._4.filter(function(a){return a.node!==d.node});if(c)this._d();return d.remove()},shift:function(b){b=(b===undefined)?0:b;var c=(b===0);var e=this._0._6[b],d=e.children().at(0);this.notifyObservers('itemremove');if(!c)return d.remove();for(var f=1;f<this._2;f++)this.push(this.shift(f),f-1);this._0._4=this._0._4.filter(function(a){return a.node!==d.node});this._d();return d.remove()},unshift:function(a,b){if(typeof b=='object'&&b.animate)return this._t(a);b=(b===undefined)?0:b;var c=(b===0);if(c)this._d();a=Ojay(a).setStyle({margin:'0 0 0 0'});var e=this._0._6[b];e.insert(a,'top');this.notifyObservers('itemadd');if(!c)return this;for(var d=1;d<this._2;d++)this.unshift(this.pop(d-1),d);var f=this._0._4;[].unshift.call(f,a.node);return this},_t:function(a){if((this._1.direction=='vertical'&&this._g>1)||(this._1.direction=='horizontal'&&this._f>1))throw new Error('Cannot perform animated push/unshift onto a Paginator with more than one column and row');var b=Ojay(a).setStyle({opacity:0});var c=this.getCurrentOffset(),e=(this._1.direction=='vertical')?this._f:this._g,d=c-this.getTotalOffset()/(e*(this.getPages()-1));return this.setScroll(d,{animate:true,_s:this._1.pushSlide}).unshift(b).setScroll(c)._(b).animate({opacity:{to:1}},this._1.pushFade)._(this)},_d:function(){var a=this._0._4.length,b=this._2,c=this._c,e=b*c;if(a==e)this._u();if(a==e-c)this._v()},_u:function(){var a=this.getRegion(),b=this.klass.makePageElement(a.getWidth(),a.getHeight());this._0._5.insert(b,'bottom');this._0._6.push(b);this._2+=1;var c=(this._3-1)/(this._2-1);this.notifyObservers('pagecreate');this.notifyObservers('scroll',c,this.getTotalOffset())},_v:function(){this._0._6.pop().remove();if(this._3==this._2){this._3-=1;this.notifyObservers('pagechange',this._3)}this._2-=1;var a=(this._3-1)/(this._2-1);if(a==1)this.setScroll(1,{animate:true,silent:true});this.notifyObservers('pagedestroy');this.notifyObservers('scroll',a,this.getTotalOffset())}},SCROLLING:{}}});Ojay.AjaxPaginator=new JS.Class('Ojay.AjaxPaginator',Ojay.Paginator,{initialize:function(b,c){this.callSuper();this._1.urls=this._1.urls.map(function(a){return{_h:a,_k:false}})},getItems:function(){var c=this._0;if(c._4)return c._4;if(!c._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}));c._5.insert(b.node,'bottom')},this);var d=this.callSuper();d.fitToRegion(this.getRegion());return d},pageLoaded:function(a){return!!(this._1.urls[a-1]||{})._k},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._h);Ojay.HTTP.GET(d._h,{},{onSuccess:function(a){a.insertInto(f._0._4.at(b-1));d._k=true;f.notifyObservers('pageload',d._h,a);if(typeof c=='function')c.call(e||null)}});return this},states:{READY:{_a: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('Ojay.Paginator.Controls',{extend:{CONTAINER_CLASS:'paginator-controls',PREVIOUS_CLASS:'previous',NEXT_CLASS:'next',PAGE_LINKS_CLASS:'pages'},initialize:function(a){this._8=a;this._0={};this._8.on('pagecreate')._(this)._w();this._8.on('pagedestroy')._(this)._x()},getHTML:function(){if(this._8.inState('CREATED'))return null;var d=this._0,f=this.klass,g=this._8;if(d._7)return d._7;var j=this;d._7=Ojay(Ojay.HTML.div({className:f.CONTAINER_CLASS},function(e){d._b=Ojay(e.div({className:f.PREVIOUS_CLASS},'Previous'));d._i=Ojay(e.div({className:f.PAGE_LINKS_CLASS},function(c){d._6=[];g.getPages().times(function(a){var b=d._6[a]=j._l(a+1);c.concat(b.node)})}));d._9=Ojay(e.div({className:f.NEXT_CLASS},'Next'))}));d._b.on('click')._(g).decrementPage();d._9.on('click')._(g).incrementPage();d._i.on('click',Ojay.delegateEvent({span:function(a,b){g.setPage(a.node.innerHTML)}}));var h=[d._b,d._9];h.forEach(it().on('mouseover').addClass('hovered'));h.forEach(it().on('mouseout').removeClass('hovered'));g.on('pagechange',function(a,b){this._m(b);h.forEach(it().removeClass('disabled'))},this);var i=g.getCurrentPage();this._m(i);if(!g.isLooped()){g.on('firstpage')._(d._b).addClass('disabled');g.on('lastpage')._(d._9).addClass('disabled');if(i==1)d._b.addClass('disabled');if(i==g.getPages())d._9.addClass('disabled')}d._7.addClass(g.getDirection());return d._7},_l:function(a){var b=Ojay(Ojay.HTML.span(String(a)));b.on('mouseover').addClass('hovered');b.on('mouseout').removeClass('hovered');return b},_w:function(){var a=this._l(this._8.getPages());this._0._6.push(a);this._0._i.insert(a,'bottom');this._0._9.removeClass('disabled')},_x:function(){this._0._6.pop().remove();var a=this._8;if(a.isLooped())return;if(a.getCurrentPage()==a.getPages())this._0._9.addClass('disabled')},_m:function(a){this._0._6.forEach({removeClass:'selected'});this._0._6[a-1].addClass('selected')},getPreviousButton:function(){if(this._8.inState('CREATED'))return null;return this._0._b},getNextButton:function(){if(this._8.inState('CREATED'))return null;return this._0._9},getPageButtons:function(){if(this._8.inState('CREATED'))return null;return this._0._i}})});Ojay.FilmStrip=new JS.Class('Ojay.FilmStrip',{include:Ojay.Paginatable,initialize:function(a,b){this._e=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')},getHTML:function(){var a=this._0,b=this._1;if(a._7)return a._7;var c=Ojay(Ojay.HTML.div({className:this.klass.CONTAINER_CLASS}));c.addClass(this._1.direction);var e=this.getDimensions(),d=(this.getDirection()=='vertical'),f=d?e.width+'px':b.width,g=d?b.height:e.height+'px';c.setStyle({width:f,height:g,overflow:'hidden',padding:'0 0 0 0',border:'none',position:'relative'});return a._7=c},getItems:function(){if(this._4)return this._4;return this._4=this._0._5.children().map(function(a){return new this.klass.Item(this,a)},this)},getTotalOffset:function(){var a=this.getRegion(),b=this.getDimensions();return this.getDirection()=='vertical'?b.height-a.getHeight():b.width-a.getWidth()},getDimensions:function(){var b=(this.getDirection()=='vertical'),c=0,e=0;this.getItems().forEach(function(a){if(b){c=Math.max(c,a.getWidth());e+=a.getHeight()}else{c+=a.getWidth();e=Math.max(e,a.getHeight())}});return{width:c,height:e}},getPages:function(){return this._2=this.getItems().length},_y:function(){if(this._n)return this._n.slice();var e=(this.getDirection()=='vertical'),d=e?'getHeight':'getWidth',f=[0];this.getItems().forEach(function(a){var b=a[d](),c=f[f.length-1];f.push(c+b)});return(this._n=f).slice()},_z:function(){var c=[];this._y().reduce(function(a,b){c.push((a+b)/2);return b});return c}.traced(),states:{CREATED:{setup:function(){var a=this._0._5=Ojay(this._e).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,top:0});var c=this.getDimensions();var e=(this._1.direction=='vertical')?{width:c.width+'px',height:(c.height+1000)+'px'}:{width:(c.width+1000)+'px',height:c.height+'px'};a.setStyle(e);var d=this.getInitialState();this.setState('READY');if(this._3===undefined)this._3=d.page;this._a(this._3);return this}},READY:{focusItem:function(a){this.setPage(this._4.indexOf(a)+1);return this},incrementPage:function(){return this.setPage(this._3+1)},decrementPage:function(){return this.setPage(this._3-1)},_a:function(a,b,c){var e=(this.getDirection()=='vertical'),d=e?'getHeight':'getWidth',f=this.getRegion()[d]()/2,g=this._z()[a-1]-f;if(a!==this._3){this.notifyObservers('pagechange',a);if(a==1)this.notifyObservers('firstpage');if(a==this.getPages())this.notifyObservers('lastpage')}this._3=a;this.setScroll(g,{animate:true},b,c)},setScroll:function(a,b,c,e){var d=this.getRegion(),f=(this.getDirection()=='vertical'),g=f?'getHeight':'getWidth',j=d[g]()/2,h=this.getTotalOffset();if(a>=0&&a<=1)a=a*h;if(this._1.overshoot===false){a=Math.max(a,0);a=Math.min(a,h)}var i={};i[f?'top':'left']={to:-a};this._0._5.animate(i,this._1.scrollTime,{easing:this._1.easing});return this}}},extend:{CONTAINER_CLASS:'filmstrip',PAGE_CLASS:'item',SCROLL_TIME:0.5,DIRECTION:'horizontal',EASING:'easeBoth',Item:new JS.Class({initialize:function(a,b){this._C=b;var c=b.getRegion();this._A=c.getWidth();this._B=c.getHeight();this._D=a;b.on('click')._(a).focusItem(this)},getWidth:function(){return this._A},getHeight:function(){return this._B}})}});