var ExinitFX=new Class({Implements:[Events,Options,Chain],items:[],startIndex:1,currentIndex:0,prevIndex:0,totalItems:0,autoPlay:false,direction:1,timer:null,processor:null,options:{ID:0,dom:false,domSelector:'',enableFX:true,controlFX:true,itemsVisible:1,itemsToProcess:1,height:null,width:800,slideVertical:false,showPrevNext:false,showTabs:false,showAnnounce:false,showPlayPause:false,showCounter:false,duration:300,direction:1,autoTrigger:false,triggerInterval:5000,mouseWheelNav:false,startIndex:null,transition:Fx.Transitions.linear,additionalPrevNextButtons:false,additionalNextButtonClass:'exinitFXadditionalNext',additionalPrevButtonClass:'exinitFXadditionalPrev'},ID:0,overallContainer:'exinitFXouter',processedContainer:'exinitFXinner',itemsContainer:'exinitFXitems',itemsSelector:'exinitFXitem',navigation:{next:'exinitFXnext',prev:'exinitFXprev'},tabsContainerClass:'exinitFXtabsContainer',tabsULClass:'exinitFXtabs',counterClass:'exinitFXcounter',announceOuterContainerClass:'exinitFXannounceOuter',announceOuter2ContainerClass:'exinitFXannounceOuter2',announceContainerClass:'exinitFXannounce',announce:{next:'exinitFXnextTitle',prev:'exinitFXprevTitle'},playPauseContainerClass:'exinitFXpausePlayContainer',playPauseClass:'exinitFXpausePlay',headers:null,effects:{},controlFXduration:100,initialize:function(options){this.setOptions(options);if(this.options.ID){this.ID=this.options.ID;}if(this.options.overallContainer){this.overallContainer=this.options.overallContainer;}if(this.options.processedContainer){this.processedContainer=this.options.processedContainer;}if(this.options.itemsContainer){this.itemsContainer=this.options.itemsContainer;}if(this.options.dom){this.grabItemsFromDom();}if($(this.itemsContainer)){this.items=$(this.itemsContainer).getElements('.'+this.itemsSelector);}if(this.items.length<=this.options.itemsVisible){return;}this.addEvent('change',this.onChange);this.currentIndex=0;this.direction=this.options.direction;if(this.options.startIndex&&this.options.startIndex>0&&this.options.startIndex<this.items.length){this.startIndex=this.options.startIndex;}if(this.options.itemsToProcess==1){this.options.itemsToProcess=1;}if(this.options.controlFXduration){this.controlFXduration=this.options.controlFXduration;}this.nextID=this.navigation.next+'_'+this.ID;this.prevID=this.navigation.prev+'_'+this.ID;this.nextTitleID=this.announce.next+'_'+this.ID;this.prevTitleID=this.announce.prev+'_'+this.ID;this.counterID=this.counterClass+'_'+this.ID;this.initializeDimensions();this.initializeHeaders();this.initializeControls();this.initializeItems();this.initializeContainer();this.start();if(this.startIndex>1){this.process(this.startIndex-1,true,true);}if(this.options.autoTrigger){this.autoPlay=true;this.play(true);}this.callChain();},start:function(){},previous:function(manual){this.processor='previous';var index=(this.currentIndex-this.options.itemsToProcess+1>0?this.currentIndex-this.options.itemsToProcess:this.items.length-this.options.itemsToProcess);this.process(index,manual);return false;},next:function(manual){this.processor='next';var index=(this.currentIndex+this.options.itemsToProcess-1<this.items.length-1?this.currentIndex+this.options.itemsToProcess:0);this.process(index,manual);return false;},scrollTo:function(index){this.processor='scrollTo';this.process(index,true);return false;},preProcess:function(index,manual){if(manual){this.stop();}this.prevIndex=this.currentIndex;this.currentIndex=index;this.previousIndex=this.currentIndex+(this.currentIndex>0?-1:this.items.length-1);this.nextIndex=this.currentIndex+(this.currentIndex<this.items.length-1?1:1-this.items.length);this.processControlEffects(0);},process:function(index,manual,noFX){if(!noFX||noFX=='undefined'||noFX==null){noFX=!this.options.enableFX;}if(index!=this.currentIndex){this.chain(function(){this.preProcess(index,manual);this.callChain();});if(this.options.controlFX){this.wait(this.controlFXduration);}this.chain(function(){this.doProcess(noFX);this.callChain();});this.wait(this.options.duration);this.chain(function(){this.postProcess(manual);});this.callChain();}},doProcess:function(noFX){},postProcess:function(manual){if(manual){this.stop();}this.update();if(manual&&this.autoPlay){this.play(true);}this.processControlEffects(1);},processControlEffects:function(to){if(this.options.controlFX&&this.effects){if(this.effects[this.nextID]){this.effects[this.nextID].start(to);}if(this.effects[this.prevID]){this.effects[this.prevID].start(to);}if(this.effects[this.nextTitleID]){this.effects[this.nextTitleID].start(to);}if(this.effects[this.prevTitleID]){this.effects[this.prevTitleID].start(to);}if(this.effects[this.counterID]){this.effects[this.counterID].start(to);}}},update:function(){if(this.options.showTabs){this.updateTabs();}if(this.options.showCounter){this.updateCounter();}if(this.options.showAnnounce){this.updateAnnounce();}},play:function(wait){this.stop();this.isPlaying=true;if(!wait){switch(this.direction){case 1:this.next(false);break;case-1:this.previous(false);break;}}switch(this.direction){case 1:this.timer=this.next.periodical(this.options.triggerInterval,this,false);break;case-1:this.timer=this.previous.periodical(this.options.triggerInterval,this,false);break;}},stop:function(){this.isPlaying=false;$clear(this.timer);},initializeDimensions:function(){this.itemWidth=parseInt(this.options.width);if(typeof(this.itemWidth)=='number'&&this.itemWidth+''=='NaN'){this.itemWidth=0;this.items.each(function(item){var iWidth=parseInt(item.getStyle('width'));if(iWidth>this.itemWidth){this.itemWidth=iWidth;}}.bind(this));this.options.width=this.itemWidth;}this.itemHeight=parseInt(this.options.height);if(typeof(this.itemHeight)=='number'&&this.itemHeight+''=='NaN'){this.itemHeight=0;this.items.each(function(item){var iHeight=parseInt(item.getStyle('height'));if(iHeight>this.itemHeight){this.itemHeight=iHeight;}}.bind(this));this.options.height=this.itemHeight;}},initializeHeaders:function(){this.headers=new Array();var tmpHeaders=window['headers_'+this.ID];this.items.each(function(item,i){if(tmpHeaders&&tmpHeaders[i]){this.headers[i]=tmpHeaders[i];}else if(item.getElement('h1')){this.headers[i]=item.getElement('h1').get('text');}else{this.headers[i]='';}}.bind(this));},initializeControls:function(){if(this.options.showPrevNext){this.initializePrevNextButtons();}if(this.options.additionalPrevNextButtons){this.initializeAdditionalPrevNextButtons();}if(this.options.showTabs){this.initializeTabs();}if(this.options.showCounter){this.initializeCounter();}if(this.options.showAnnounce){this.initializeAnnounce();}if(this.options.showPlayPause){this.initializePlayPauseButton();}},initializeItems:function(){var styles=new Hash();styles.include('width',this.itemWidth);styles.include('height',this.itemHeight);this.items.each(function(item){item.setStyles(styles);if(this.options.autoTrigger){this.assignAutoTriggerEvents(item);}}.bind(this));},initializeContainer:function(){var overallStyles=new Hash();overallStyles.include('position','relative');overallStyles.include('width',this.itemWidth);$(this.overallContainer).setStyles(overallStyles);var processedStyles=new Hash();processedStyles.include('position','relative');processedStyles.include('overflow','hidden');processedStyles.include('width',this.itemWidth);processedStyles.include('height',this.itemHeight);$(this.processedContainer).setStyles(processedStyles);var itemStyles=new Hash();itemStyles.include('position','relative');itemStyles.include('width',this.itemWidth);itemStyles.include('height',this.itemHeight);$(this.itemsContainer).setStyles(itemStyles);},initializePrevNextButtons:function(){if(this.items.length<=this.options.itemsVisible){return;}this.prevButton=new Element('div',{'id':this.prevID,'class':this.navigation.prev});this.nextButton=new Element('div',{'id':this.nextID,'class':this.navigation.next});if(this.prevButton){this.prevButton.inject($(this.overallContainer),'bottom');this.prevButton.addEvent('click',this.previous.pass(true,this));this.effects[this.prevID]=new Fx.Tween(this.prevButton,{property:'opacity',duration:this.controlFXduration});}if(this.nextButton){this.nextButton.inject($(this.overallContainer),'top');this.nextButton.addEvent('click',this.next.pass(true,this));this.effects[this.nextID]=new Fx.Tween(this.nextButton,{property:'opacity',duration:this.controlFXduration});}},initializeAdditionalPrevNextButtons:function(){if(this.items.length<=this.options.itemsVisible){return;}this.additionalPrevButtons=$$('.'+this.options.additionalPrevButtonClass);this.additionalNextButtons=$$('.'+this.options.additionalNextButtonClass);for(var i=0;i<this.additionalPrevButtons.length;i++){this.additionalPrevButtons[i].addEvent('click',this.previous.pass(true,this));}for(var j=0;j<this.additionalPrevButtons.length;j++){this.additionalNextButtons[j].addEvent('click',this.next.pass(true,this));}},initializeTabs:function(){this.tabsContainer=new Element('div',{'class':this.tabsContainerClass});if(this.tabsContainer){this.tabsContainer.inject($(this.overallContainer),'top');this.tabsUL=new Element('ul',{'class':this.tabsULClass});if(this.tabsUL){this.tabsUL.inject(this.tabsContainer,'top');var i=0;this.tabs=[];this.items.each(function(item){this.tabs[i]=new Element('li');this.tabs[i].inject(this.tabsUL,'bottom');var anchor=new Element('a',{'href':this.getPanelLink(i)});anchor.set('html',this.headers[i]);anchor.inject(this.tabs[i],'top');anchor.addEvent('click',this.scrollTo.pass(i,this));i++;}.bind(this));this.updateTabs();var breaker=new Element('div',{'style':'padding: 0; margin: 0; height: 0px; clear: both;'});breaker.inject(this.tabsContainer,'bottom');}}},initializeCounter:function(){this.counter=new Element('div',{'id':this.counterID,'class':this.counterClass});if(this.counter){this.counter.inject($(this.overallContainer),'bottom');this.effects[this.counterID]=new Fx.Tween(this.counter,{property:'opacity',duration:this.controlFXduration});this.updateCounter(this.startIndex);}},initializeAnnounce:function(){this.announceOuterContainer=new Element('div',{'class':this.announceOuterContainerClass});if(this.announceOuterContainer){this.announceOuterContainer.inject($(this.overallContainer),'bottom');this.announceOuter2Container=new Element('div',{'class':this.announceOuter2ContainerClass});if(this.announceOuter2Container){this.announceOuter2Container.inject(this.announceOuterContainer,'bottom');this.announceContainer=new Element('div',{'class':this.announceContainerClass});if(this.announceContainer){this.announceContainer.inject(this.announceOuter2Container,'bottom');this.nextTitle=new Element('div',{'id':this.nextTitleID,'class':this.announce.next});if(this.nextTitle){this.nextTitle.inject(this.announceContainer,'top');this.nextTitle.addEvent('click',this.next.pass(true,this));this.effects[this.nextTitleID]=new Fx.Tween(this.nextTitle,{property:'opacity',duration:this.controlFXduration});}this.prevTitle=new Element('div',{'id':this.prevTitleID,'class':this.announce.prev});if(this.prevTitle){this.prevTitle.inject(this.announceContainer,'bottom');this.prevTitle.addEvent('click',this.previous.pass(true,this));this.effects[this.prevTitleID]=new Fx.Tween(this.prevTitle,{property:'opacity',duration:this.controlFXduration});}this.updateAnnounce();}}}},initializePlayPauseButton:function(){this.pausePlayContainer=new Element('div',{'class':this.playPauseContainerClass});if(this.pausePlayContainer){this.pausePlayContainer.inject($(this.overallContainer),'bottom');this.pausePlay=new Element('div',{'class':this.playPauseClass});if(this.pausePlay){this.pausePlay.inject(this.pausePlayContainer,'top');if(this.options.autoTrigger){this.pausePlay.addClass('play').set('title','Playing. Click to pause.');}else{this.pausePlay.addClass('play pause').set('title','Paused. Click to start.');}this.pausePlay.addEvent('click',function(event){new Event(event).stop();if(this.isPlaying){this.pausePlay.addClass('pause').set('title','Paused. Click to start.');this.autoPlay=false;this.stop();}else{this.pausePlay.removeClass('pause').set('title','Playing. Click to pause.');this.autoPlay=true;this.play(true);}}.bind(this));}}},assignAutoTriggerEvents:function(item){if(item){item.addEvent('mouseenter',function(){if(this.autoPlay){this.stop(true);}}.bind(this));item.addEvent('mouseleave',function(){if(this.autoPlay){this.play(true);}}.bind(this));};},updateTabs:function(){var i=0;this.tabs.each(function(tab){if(i==this.currentIndex){tab.addClass('current');}else{tab.removeClass('current');}i++;}.bind(this));},updateCounter:function(){if(this.counter){this.counter.set('html',((this.currentIndex+1)+' / '+this.items.length));}},updateAnnounce:function(){var prev=this.currentIndex-1<0?this.items.length-1:this.currentIndex-1;var next=this.currentIndex+1>=this.items.length?0:this.currentIndex+1;if(this.prevTitle){this.prevTitle.set('html','« '+this.headers[prev]);}if(this.nextTitle){this.nextTitle.set('html',this.headers[next]+' »');}},getPanelLink:function(index){return'#'+this.ID+'_'+(index+1);},grabItemsFromDom:function(){var container=$$(this.options.selector);if(container){var items=container[0].getChildren();if(items){for(var i=0;i<items.length;i++){var item=new Element('div',{'class':this.itemsSelector});var removedElement=items[i].dispose();removedElement.inject(item,'top');item.inject($(this.itemsContainer),'bottom');}}container.dispose();}}});
