/*
Copyright (c) 2007-2010 the OTHER media Limited
Licensed under the BSD license, http://ojay.othermedia.org/license.html
Version: 0.4-ac83c062adc896f1717bd7b043650a1a52bc9936
Build:   min
*/

Ojay.Tabs=new JS.Class('Ojay.Tabs',{include:[Ojay.Observable,JS.State],initialize:function(b,a){this._1=b;a=a||{};a.toggleSelector=a.toggleSelector||this.klass.TOGGLE_SELECTOR;a.togglesClass=a.togglesClass||this.klass.TOGGLES_CLASS;a.switchTime=a.switchTime||this.klass.SWITCH_TIME;a.togglesPosition=a.togglesPosition||this.klass.INSERT_POSITION;this._2=a;this.setState('CREATED')},getInitialState:function(){return{tab:1}},changeState:function(b,a){if(b.tab!==undefined)this._7(b.tab,a);return this},states:{CREATED:{setup:function(){this._1=Ojay(this._1);this._0=this._1.parents().at(0);this._8();this._9();this._b();return this},_8:function(){this._3=[];var d=this,e=d._2;var g=Ojay(Ojay.HTML.ul({className:e.togglesClass},function(f){d._1.children(e.toggleSelector).forEach(function(b,a){var c=Ojay(f.li()).addClass('toggle-'+(a+1));c.setContent(b.node.innerHTML);if(a===0)c.addClass('first');if(a===d._1.length-1)c.addClass('last');d._3.push(c);b.remove();c.on('click')._(d).setPage(a+1)})}));if(typeof this._2.width!='undefined')g.setStyle({width:this._2.width});this._1.parents().at(0).insert(g,this._2.togglesPosition)},_9:function(){var a=this,c=a._2;this._5=this._1.map(function(b){return new this.klass.Tab(this,b)},this);if(c.width&&c.height)this._0.setStyle({height:c.height})},_b:function(){this.setState('READY');var c=this.getInitialState();this._7(c.tab,{animate:false});this.on('pagechange',function(b,a){b._c(a-1)})}},READY:{setPage:function(b,a){this.changeState({tab:b},a);return this},_7:function(a,c){a-=1;if(a>=this._5.length)a=0;if(this._6==a)return;if((c||{}).silent!==false)this.notifyObservers('pagechange',a+1);if(typeof this._6=='undefined'){this._6=a;this._5[a].show(c);this._c(a)}else{this.setState('ANIMATING');this._5[this._6].hide(c)._(function(b){b._6=a;b._5[a].show(c)._(b).setState('READY')},this)}},_c:function(b){this._3.forEach({removeClass:'selected'});this._3[b].addClass('selected')}},ANIMATING:{}},extend:{TOGGLE_SELECTOR:'.toggle',TOGGLES_CLASS:'toggles',SWITCH_TIME:0.2,INSERT_POSITION:'before',Tab:new JS.Class('Ojay.Tabs.Tab',{initialize:function(b,a){this._0=a,this._a=b;this._0.hide().setStyle({opacity:0});if(this._a._2.height)this._0.setStyle({position:'absolute',top:0,left:0})},hide:function(b){var a=new JS.MethodChain();if((b||{}).animate!==false){a.animate({opacity:{to:0}},this._a._2.switchTime)}else{a.setStyle({opacity:0})}a.hide()._(this);return a.fire(this._0)},show:function(b){var a=new JS.MethodChain().show();if((b||{}).animate!==false){a.animate({opacity:{to:1}},this._a._2.switchTime)}else{a.setStyle({opacity:1})}a._(this);return a.fire(this._0)}})}});Ojay.AjaxTabs=new JS.Class('Ojay.AjaxTabs',Ojay.Tabs,{initialize:function(b,a,c){this.callSuper(b,c);this._0=a},pageLoaded:function(b){return!!this._d[b-1]},loadPage:function(a,c,f){if(this.pageLoaded(a)||this.inState('CREATED'))return this;var d=this._4[a-1].href,e=this;this.notifyObservers('pagerequest',d);Ojay.HTTP.GET(d,{},{onSuccess:function(b){b.insertInto(e._1[a-1]);e._d[a-1]=true;e.notifyObservers('pageload',d,b);if(typeof c=='function')c.call(f||null)}});return this},states:{CREATED:{setup:function(){this._4=Ojay(this._1);this._d=this._4.map(function(){return false});this._0=Ojay(this._0);this._8();this._9();this._b();return this},_8:function(){this._3=[];this._4.forEach(function(b,a){b.addClass('toggle-'+(a+1));if(a===0)b.addClass('first');if(a===this._4.length-1)b.addClass('last');this._3.push(b);b.on('click',Ojay.stopDefault)._(this).setPage(a+1)},this)},_9:function(){this._0.setContent('');this._4.forEach(function(b,a){var c=Ojay.HTML.div({className:this.klass.TAB_CLASS});this._0.insert(c)},this);this._1=this._0.children();this.callSuper()}},READY:{_7:function(b){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:{}},extend:{TAB_CLASS:'tab',fromLinks:function(b,a,c){return new this(b,a,c)}}});
