/**
 * Copyright (c) 2009 Christian Zenker (christian.zenker@599media.de)
 * MIT-License
 **/
var CzTabs=new Class({options:{show:0,delay:10000,delayOnMouseOver:0,delayCrossFade:200,idMainBox:"cztabs",idMainItems:"cztabs-items",metaItem:"li",metaItemLink:"a.cztabs-item-meta",idMainContent:"cztabs-content",classContainer:"cztabs-container",classNoFollowLink:"cztabs-item-link-jsblock",classAjaxLoader:"cztabs-ajax-loading",classToggleActive:"cztabs-selected",classLoadContent:"cztabs-load",ajaxUrls:[],preloadContent:true,maxTries:5,onTabCreate:function(a,b,c){b.setStyles({opacity:0,visibility:"hidden"})},onShow:function(a,b,c,d){if(this.slowBrowser){a.addClass("cztabs-selected");b.setStyles({visibility:"visible",opacity:1})}else{a.addClass.delay(this.options.delayCrossFade,a,"cztabs-selected");b.fade("in")}},onHide:function(a,b,c,d){if(this.slowBrowser){a.removeClass("cztabs-selected");b.setStyles({visibility:"hidden",opacity:0})}else{a.removeClass.delay(this.options.delayCrossFade,a,"cztabs-selected");b.fade("out")}},onRequest:function(a,b,c){b.addClass(this.options.classAjaxLoader)},onComplete:function(a,b,c,d){b.removeClass(this.options.classAjaxLoader)},onFailure:function(a,b,c,d){b.removeClass(this.options.classAjaxLoader)}},initialize:function(b,a){this.setOptions(a);this.element=$(b);this.current=0;this.selected=null;this.delay=this.options.delay;this.delayOnMouseOver=this.options.delayOnMouseOver;this.build();if(this.options.preloadContent){this.ajaxPreloader()}if((Browser.Engine.trident&&Browser.Engine.version<5)||(Browser.Engine.webkit&&Browser.Engine.version<500)){this.slowBrowser=true}else{this.slowBrowser=false}},build:function(){this.entries=[];var a=0;var c=0;var b=0;$(this.options.idMainItems).getElements(this.options.metaItem).each(function(d){var e=(d.hasClass(this.options.classLoadContent)?this.options.ajaxUrls[c++]:$$("."+this.options.classContainer)[b++]);this.addTab(e,d,a);a++},this);this.count=a;if(this.entries.length){this.select(this.options.show,this.delay);this.current=this.options.show}},addTab:function(e,a,d){if($type(e)=="string"&&!$(e)){var c=e}var b=$(e)||new Element("div");this.entries.push({container:b.addClass(this.options.classContainer).inject($(this.options.idMainContent)).addEvents({mouseenter:this.onContainerMouseEnter.bindWithEvent(this,[this.entries.length]),mouseleave:this.onContainerMouseLeave.bindWithEvent(this,[this.entries.length])}),toggle:$(a).addEvents({click:this.killEvents.bindWithEvent(this,[this.entries.length]),mouseenter:this.onMouseEnter.bindWithEvent(this,[this.entries.length]),mouseleave:this.onMouseLeave.bindWithEvent(this,[this.entries.length])}),url:c||null,idLoading:false,numTry:0});this.fireEvent("onTabCreate",[a,b,d]);a.getElements("a."+this.options.classNoFollowLink).each(function(f){f.addEvent("click",function(g){g.preventDefault()})});return this},onMouseEnter:function(a,b){if(this.selected==b){this.prepareTimer(b+1,this.delayOnMouseOver)}else{this.select(b,this.delayOnMouseOver)}},onMouseLeave:function(a,b){if(this.selected==b){this.prepareTimer(b+1,this.delay)}else{this.select(b,this.options.delay)}},onContainerMouseEnter:function(a,b){this.prepareTimer(b+1,this.delayOnMouseOver)},onContainerMouseLeave:function(a,b){this.prepareTimer(b+1,this.delay)},killEvents:function(){this.delay=0;this.delayOnMouseOver=0},ajaxPreloader:function(){var a=0;this.entries.each((function(b){if(b.url){var c=[b.toggle,b.container,a];this.ajaxLoad(a,c,-1)}a++}).bind(this))},ajaxLoad:function(a,c,b){if(this.entries[a].numTry>this.options.maxTries||this.entries[a].isLoading){return false}this.entries[a].isLoading=true;this.entries[a].numTry++;new Request({method:"get",url:this.entries[a].url,onRequest:this.fireEvent.pass(["onRequest",c],this),onFailure:function(d){this.entries[a].isLoading=false;this.fireEvent.pass(["onFailure",c.extend([b])],this);if(b>=0){this.select(a+1,b)}}.bind(this),onComplete:function(d){if(d!=undefined){this.entries[a].loaded=true;this.entries[a].isLoading=false;this.entries[a].container.empty().set("html",d);this.fireEvent("onComplete",c.extend([b]));if(b>=0){this.select(a,b)}}}.bind(this)}).send()},select:function(a,b){if(a>=this.count){a=a%this.count}if(this.selected==a||!this.entries[a]){return this}var c=this.entries[a];var e=[c.toggle,c.container,a];if(this.selected!==null){var d=this.entries[this.selected];if(this.ajax&&this.ajax.running){this.ajax.cancel()}e.concat([d.toggle,d.container,this.selected])}if(c.url&&!c.loaded&&!c.isLoading){this.ajaxLoad(a,e,b)}else{if(this.selected!==null){this.fireEvent("onHide",[d.toggle,d.container,this.selected,a])}this.fireEvent("onShow",e.extend([this.selected]));this.selected=a;this.prepareTimer(this.selected+1,b)}return this},prepareTimer:function(a,b){$clear(this.timer);if(b>0){if(a>=this.count){a=a%this.count}this.timer=this.select.delay(b,this,[a,this.options.delay])}}}).implement(new Events,new Options);
