var cSyncLoop=new Class({Implements:[Options,Events],options:{period:5000,fadeDuration:1000,parallelCheck:true,doRandom:false,doRandomStart:false},initialize:function(loopsAry,options){this.setOptions(options);this.timer=null;this.period=this.options.period;this.loopsAry=loopsAry;if(this.loopsAry.length>0){if(this.options.parallelCheck){this.minValuesAryLength=999;this.loopsAry.each(function(loopEl){if(loopEl.values.length<this.minValuesAryLength){this.minValuesAryLength=loopEl.values.length}},this);if(this.minValuesAryLength<=0)this.minValuesAryLength=-1}else{this.minValuesAryLength=-1;}
this.turn=-1;this.setTweens();this.loadFirst();this.preloadAndStart();}},loadFirst:function(){this.turnNext();this.loopsAry.each(function(loopEl){$(loopEl.id).setStyle('opacity',0);});preloadAry=[];this.loopsAry.each(function(loopEl){var loopPos=this.turn%((this.minValuesAryLength>0)?this.minValuesAryLength:loopEl.values.length);if(loopEl.type=="img"){preloadAry.push(loopEl.values[loopPos]);}});var myImages=new Asset.images(preloadAry,{onComplete:function(){myChain.callChain();}});var myChain=new Chain();myChain.chain(function(){this.doReplacements();myChain.callChain();}.bind(this),function(){this.doFadeIn();}.bind(this));myChain.callChain();},preloadAndStart:function(){if(this.loopsAry.length>0){preloadAry=[];this.loopsAry.each(function(loopEl){if(loopEl.type=="img"){preloadAry.combine(loopEl.values);}});if(preloadAry.length>0){var myImages=new Asset.images(preloadAry,{onComplete:function(){this.log('Images Loaded: '+myImages.length);this.startTimer();}.bind(this)});}else{this.startTimer();}}},turnNext:function(){var lastturn=this.turn
if((this.options.doRandom)||((this.turn==-1)&&(this.options.doRandomStart))){do{this.turn=$random(0,100);}while((this.minValuesAryLength>1)&&(lastturn%this.minValuesAryLength)==(this.turn%this.minValuesAryLength))}
else this.turn++;},setTweens:function(){this.loopsAry.each(function(loopEl){$(loopEl.id).set('tween',{duration:this.options.fadeDuration});},this);},doFadeIn:function(){this.loopsAry.each(function(loopEl,i){$(loopEl.id).tween('opacity',1);});},doReplacements:function(){this.loopsAry.each(function(loopEl,i){var loopPos=this.turn%((this.minValuesAryLength>0)?this.minValuesAryLength:loopEl.values.length);switch(loopEl.type){case'text':$(loopEl.id).setProperty('text',loopEl.values[loopPos]);break;case'img':$(loopEl.id).getElement('img').setProperty('src',loopEl.values[loopPos]);break;case'html':$(loopEl.id).setProperty('html',loopEl.values[loopPos]);break;}},this);},action:function(){this.turnNext();if(this.loopsAry.length>0){var firstFadeOutWithChainClall=new Fx.Morph($(this.loopsAry[0].id),{duration:this.options.fadeDuration,onComplete:function(){myChain.callChain();}});var fadeOut=function(){firstFadeOutWithChainClall.start({opacity:0});this.loopsAry.each(function(loopEl,i){if(i!=0)$(loopEl.id).tween('opacity',0);});}.bind(this);var myChain=new Chain();myChain.chain(fadeOut,function(){this.doReplacements();myChain.callChain();}.bind(this),function(){this.doFadeIn();}.bind(this));myChain.callChain();}},stopTimer:function(){this.timer=$clear(this.timer);},startTimer:function(){if(!this.timer)this.timer=this.action.periodical(this.period,this);},log:function(msg){}});