var ExinitFX=new Class({Implements:[Events,Options,Chain],ID:0,initialized:false,isSynchronized:false,remoteControl:false,currentIndex:0,previousIndex:0,nextIndex:0,totalItems:0,processor:null,processing:false,items:[],synchronizedInstances:[],startIndex:1,itemsVisible:1,itemsToProcess:1,autoPlay:false,direction:1,controlFXduration:100,timer:null,effects:{},headers:{},sliderObj:null,overallContainerID:'exinitFXouter',processedContainerID:'exinitFXinner',itemsContainerID:'exinitFXitems',itemsSelectorID:'exinitFXitem',navigationClasses:{next:'exinitFXnext',prev:'exinitFXprev'},announceClasses:{next:'exinitFXnextTitle',prev:'exinitFXprevTitle'},announceOuterContainerClass:'exinitFXannounceOuter',announceOuter2ContainerClass:'exinitFXannounceOuter2',announceContainerClass:'exinitFXannounce',tabsContainerClass:'exinitFXtabsContainer',tabsULClass:'exinitFXtabs',sliderClass:'exinitFXslideControl',counterClass:'exinitFXcounter',playPauseContainerClass:'exinitFXpausePlayContainer',playPauseClass:'exinitFXpausePlay',nextID:'',prevID:'',nextTitleID:'',prevTitleID:'',counterID:'',sliderID:'',options:{ID:0,dom:false,domSelector:'',enableFX:true,controlFX:true,itemsVisible:1,itemsToProcess:1,height:null,width:800,slideVertical:false,showPrevNext:false,showTabs:false,showSlider:false,showAnnounce:false,showPlayPause:false,showCounter:false,duration:300,direction:1,autoTrigger:false,triggerInterval:5000,mouseWheelNav:false,startIndex:null,synchronizeWith:false,transition:Fx.Transitions.linear,additionalPrevNextButtons:false,additionalNextButtonClass:'exinitFXadditionalNext',additionalPrevButtonClass:'exinitFXadditionalPrev'},previousItem:function(manual){if(!this.processing){this.processor='previous';var index=(this.currentIndex-this.itemsToProcess+1>0?this.currentIndex-this.itemsToProcess:this.items.length-this.itemsToProcess);this.process(index,manual);if(this.remoteControl){this.synchronizedInstances.each(function(syncID){eval('if(typeof exinitFX_'+syncID+' != "undefined") { exinitFX_'+syncID+'.processor = "previous"; exinitFX_'+syncID+'.process(index, manual); }');}.bind(this));}}
return false;},nextItem:function(manual){if(!this.processing){this.processor='next';var index=(this.currentIndex+this.itemsToProcess-1<this.items.length-1?this.currentIndex+this.itemsToProcess:0);this.process(index,manual);if(this.remoteControl){this.synchronizedInstances.each(function(syncID){eval('if(typeof exinitFX_'+syncID+' != "undefined") { exinitFX_'+syncID+'.processor = "next"; exinitFX_'+syncID+'.process(index, manual); }');}.bind(this));}}
return false;},scrollTo:function(to){if(!this.processing){this.processor='scrollTo';this.process((to-1),true);if(this.remoteControl){this.synchronizedInstances.each(function(syncID){eval('if(typeof exinitFX_'+syncID+' != "undefined") { exinitFX_'+syncID+'.processor = "scrollTo"; exinitFX_'+syncID+'.process((to - 1), true); }');}.bind(this));}}
return false;},pause:function(){if(typeof this.pausePlay!='undefined'){this.pausePlay.addClass('pause').set('title','Paused. Click to start.');}
this.autoPlay=false;this.stopPlaying();return false;},play:function(){if(typeof this.pausePlay!='undefined'){this.pausePlay.removeClass('pause').set('title','Playing. Click to pause.');}
this.autoPlay=true;this.continuePlaying(true);return false;},start:function(){},doProcess:function(noFX){},initialize:function(options){this.setOptions(options);if(this.options.ID){this.ID=this.options.ID;}
if(this.options.overallContainer){this.overallContainerID=this.options.overallContainer;}
if(this.options.processedContainer){this.processedContainerID=this.options.processedContainer;}
if(this.options.itemsContainer){this.itemsContainerID=this.options.itemsContainer;}
this.nextID=this.navigationClasses.next+'_'+this.ID;this.prevID=this.navigationClasses.prev+'_'+this.ID;this.nextTitleID=this.announceClasses.next+'_'+this.ID;this.prevTitleID=this.announceClasses.prev+'_'+this.ID;this.counterID=this.counterClass+'_'+this.ID;this.sliderID=this.sliderClass+'_'+this.ID;if(typeof exinitFXsynchronized!='undefined'&&exinitFXsynchronized.contains(this.ID)){this.isSynchronized=true;}
if(this.isSynchronized){this.options.showTabs=false;this.options.showCounter=false;this.options.showAnnounce=false;this.options.autoTrigger=false;this.synchronizedInstances=[];}else{if(this.options.synchronizeWith){var syncd=new String(this.options.synchronizeWith);this.synchronizedInstances=syncd.split(',');}}
this.remoteControl=(!this.isSynchronized&&this.synchronizedInstances.length>0);if(this.options.dom){this.grabItemsFromDom();}
if(document.id(this.itemsContainerID)){this.items=document.id(this.itemsContainerID).getElements('.'+this.itemsSelectorID);}
if(this.items.length<this.options.itemsVisible){return;}
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.itemsVisible>0){this.itemsVisible=this.options.itemsVisible;}
if(this.options.itemsToProcess>0){this.itemsToProcess=this.options.itemsToProcess;}
if(this.options.controlFXduration){this.controlFXduration=this.options.controlFXduration;}
this.initializeDimensions();this.initializeHeaders();if(!this.isSynchronized){this.initializeControls();}
this.initializeItems();this.initializeContainer();this.initialized=true;this.start();var hash=window.location.hash.substring(1);if(hash){var hashparts=hash.split('_');if(hashparts.length==2&&hashparts[0]==this.ID){this.startIndex=hashparts[1];}}
if(this.startIndex>1){this.process(this.startIndex-1,true,true);if(this.remoteControl){this.synchronizedInstances.each(function(syncID){eval('if(typeof exinitFX_'+syncID+' != "undefined") { exinitFX_'+syncID+'.('+(this.startIndex-1)+', true, true); }');}.bind(this));}}
if(this.options.autoTrigger){this.autoPlay=true;this.continuePlaying(true);}
this.callChain();},preProcess:function(index,manual,noFX){this.processing=true;if(this.remoteControl){this.synchronizedInstances.each(function(syncID){eval('if(typeof exinitFX_'+syncID+' != "undefined" && !exinitFX_'+syncID+'.synchronizedBy){ '+' exinitFX_'+syncID+'.synchronizedBy = '+this.ID+';'+' exinitFX_'+syncID+'.options.autoTrigger = false;'+' exinitFX_'+syncID+'.options.duration = '+this.options.duration+';'+' exinitFX_'+syncID+'.options.direction = '+this.options.direction+';'+' exinitFX_'+syncID+'.options.startIndex = '+this.options.startIndex+';'+' exinitFX_'+syncID+'.controlFXduration = '+this.controlFXduration+';'+' exinitFX_'+syncID+'.start();'+'}');}.bind(this));}
if(manual){this.stopPlaying();}
this.previousIndex=this.currentIndex;this.currentIndex=index;this.nextIndex=this.currentIndex+(this.currentIndex<this.items.length-1?1:1-this.items.length);this.processControlEffects(0,noFX);},process:function(index,manual,noFX){if(index>(this.items.length-1)){return;}
if(this.initialized){if(typeof noFX=='undefined'){noFX=!this.options.enableFX;}
if(index!=this.currentIndex){this.chain(function(){this.preProcess(index,manual,noFX);this.callChain();});if(!noFX&&this.options.controlFX){this.wait(this.controlFXduration);}
this.chain(function(){this.doProcess(noFX);this.callChain();});if(!noFX){this.wait(this.options.duration);}
this.chain(function(){this.postProcess(manual,noFX);});this.callChain();}}},postProcess:function(manual,noFX){if(manual){this.stopPlaying();}
this.update();if(manual&&this.autoPlay){this.continuePlaying(true);}
this.processControlEffects(1,noFX);this.processing=false;},processControlEffects:function(to,noFX){if(noFX){if(this.prevButton)this.prevButton.fade((to==1?'show':'hide'));if(this.nextButton)this.nextButton.fade((to==1?'show':'hide'));if(this.prevTitle)this.prevTitle.fade((to==1?'show':'hide'));if(this.nextTitle)this.nextTitle.fade((to==1?'show':'hide'));if(this.counter)this.counter.fade((to==1?'show':'hide'));if(this.pausePlay)this.pausePlay.fade((to==1?'show':'hide'));if(this.slider)this.slider.fade((to==1?'show':'hide'));}else{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);}
if(this.effects[this.sliderID]){this.effects[this.sliderID].start(to);}
if(this.effects['pausePlay']){this.effects['pausePlay'].start(to);}}}},update:function(){if(this.options.showTabs){this.updateTabs();}
if(this.options.showSlider){this.updateSlider();}
if(this.options.showCounter){this.updateCounter();}
if(this.options.showAnnounce){this.updateAnnounce();}},continuePlaying:function(wait){this.stopPlaying();this.isPlaying=true;if(!wait){switch(this.direction){case 1:this.nextItem(false);break;case-1:this.previousItem(false);break;}}
switch(this.direction){case 1:this.timer=this.nextItem.periodical(this.options.triggerInterval,this,false);break;case-1:this.timer=this.previousItem.periodical(this.options.triggerInterval,this,false);break;}},stopPlaying:function(){this.isPlaying=false;$clear(this.timer);},assignAutoTriggerEvents:function(item){if(item){item.addEvent('mouseenter',function(){if(this.autoPlay){this.stopPlaying(true);}}.bind(this));item.addEvent('mouseleave',function(){if(this.autoPlay){this.continuePlaying(true);}}.bind(this));}},getPanelLink:function(index){return'#'+this.ID+'_'+(index+1);},grabItemsFromDom:function(){document.id(this.itemsContainerID).empty();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.itemsSelectorID});var removedElement=items[i].dispose();removedElement.inject(item,'top');item.inject(document.id(this.itemsContainerID),'bottom');}}
container.dispose();}},updateTabs:function(){var i=0;this.tabs.each(function(tab){if(i==this.currentIndex){tab.addClass('current');}else{tab.removeClass('current');}
i++;}.bind(this));},updateSlider:function(){if(!this.slides){this.sliderObj.set(this.currentIndex+1);}
this.slides=false;},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','&laquo; '+this.headers[prev]);}
if(this.nextTitle){this.nextTitle.set('html',this.headers[next]+' &raquo;');}},initializeDimensions:function(){this.itemWidth=parseInt(this.options.width);this.itemHeight=parseInt(this.options.height);},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.showSlider){this.initializeSlider();}
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);document.id(this.overallContainerID).setStyles(overallStyles);var processedStyles=new Hash();processedStyles.include('position','relative');processedStyles.include('width',this.itemWidth);processedStyles.include('height',this.itemHeight);document.id(this.processedContainerID).setStyles(processedStyles);var itemStyles=new Hash();itemStyles.include('position','relative');itemStyles.include('width',this.itemWidth);itemStyles.include('height',this.itemHeight);document.id(this.itemsContainerID).setStyles(itemStyles);},initializePrevNextButtons:function(){this.prevButton=new Element('div',{'id':this.prevID,'class':this.navigationClasses.prev});this.nextButton=new Element('div',{'id':this.nextID,'class':this.navigationClasses.next});if(this.prevButton){this.prevButton.inject(document.id(this.overallContainerID),'bottom');this.effects[this.prevID]=new Fx.Tween(this.prevButton,{property:'opacity',duration:this.controlFXduration});this.prevButton.addEvent('click',this.previousItem.pass(true,this));}
if(this.nextButton){this.nextButton.inject(document.id(this.overallContainerID),'top');this.effects[this.nextID]=new Fx.Tween(this.nextButton,{property:'opacity',duration:this.controlFXduration});this.nextButton.addEvent('click',this.nextItem.pass(true,this));}},initializeAdditionalPrevNextButtons:function(){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.previousItem.pass(true,this));}
for(var j=0;j<this.additionalPrevButtons.length;j++){this.additionalNextButtons[j].addEvent('click',this.nextItem.pass(true,this));}},initializeTabs:function(){this.tabsContainer=new Element('div',{'class':this.tabsContainerClass});if(this.tabsContainer){this.tabsContainer.inject(document.id(this.overallContainerID),'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');if(i==0){this.tabs[i].addClass('first');}else if(i==this.items.length-1){this.tabs[i].addClass('last');}
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+1,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');}}},initializeSlider:function(){this.slider=new Element('div',{'id':this.sliderID,'class':this.sliderClass});if(this.slider){var knob=new Element('div',{'id':this.sliderID+'_knob','class':this.sliderClass+'_knob'});if(knob){knob.inject(this.slider,'bottom');}
this.slider.set('styles',{'width':(20*this.items.length)})
this.slider.inject(document.id(this.overallContainerID),'bottom');this.sliderDbg=new Element('div',{'id':this.sliderID+'_debug','class':this.sliderClass+'_debug'});if(this.sliderDbg){this.sliderDbg.inject(this.overallContainerID,'bottom');this.sliderDbg.set('html',this.startIndex);}
this.effects[this.sliderID]=new Fx.Tween(this.slider,{property:'opacity',duration:this.controlFXduration});var sliderOptions={steps:this.items.length,initialStep:this.startIndex,range:[1,this.items.length],offset:1,onChange:function(step){this.slides=true;this.scrollTo(step);this.sliderDbg.set('html',step);}.bind(this)};this.sliderObj=new Slider(this.slider,document.id(this.sliderID+'_knob'),sliderOptions);}},initializeCounter:function(){this.counter=new Element('div',{'id':this.counterID,'class':this.counterClass});if(this.counter){this.counter.inject(document.id(this.overallContainerID),'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(document.id(this.overallContainerID),'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.announceClasses.next});if(this.nextTitle){this.nextTitle.inject(this.announceContainer,'top');this.nextTitle.addEvent('click',this.nextItem.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.announceClasses.prev});if(this.prevTitle){this.prevTitle.inject(this.announceContainer,'bottom');this.prevTitle.addEvent('click',this.previousItem.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(document.id(this.overallContainerID),'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.pause();}else{this.play();}}.bind(this));this.effects['pausePlay']=new Fx.Tween(this.pausePlay,{property:'opacity',duration:this.controlFXduration});}}}});
