var Floom=new Class({Implements:[Events,Options],options:{prefix:'floom_',amount:24,animation:70,interval:8000,axis:'vertical',progressbar:false,captions:false,captionsFxOut:$empty,captionsFxIn:$empty,slidesBase:$empty,sliceFxIn:$empty,onSlideChange:$empty,onPreload:$empty},initialize:function(wrapper,slides,options){this.setOptions(options);wrapper=$(wrapper);this.slides=this.driver(slides);this.wrapper={el:wrapper,width:wrapper.getSize().x,height:wrapper.getSize().y};this.slices={els:[],width:(this.options.axis=='vertical'?this.wrapper.width/this.options.amount:this.wrapper.width).toInt(),height:(this.options.axis=='vertical'?this.wrapper.height:this.wrapper.height/this.options.amount).toInt()};this.current={slide:0,overlay:0,counter:0};this.preloadImgs=[];this.createStructure();},driver:function(slides){if($type(slides[0]).contains('element')){this.slidesEl=[];slides.each(function(slide){this.slidesEl.push({image:slide.get('src'),caption:slide.get('title')});},this);slides.destroy().empty();slides=this.slidesEl;}
return slides;},horizontal:function(){return{'background-position':'0 -'+(this.slices.height*this.current.counter)+'px'};},vertical:function(){return{'background-position':'-'+(this.slices.width*this.current.counter)+'px 0'};},createProgressbar:function(){this.progressbar=new Element('div',{'class':this.options.prefix+'progressbar','morph':{'duration':this.options.interval-(this.options.animation*this.options.amount),'transition':'linear'}});this.progressbar.inject(this.wrapper.el);},createCaptions:function(){this.captions=new Element('div',{'class':this.options.prefix+'caption','html':'caption','styles':{'opacity':0}});this.captions.inject(this.wrapper.el);},createStructure:function(){this.container=new Element('div',{'class':this.options.prefix+'container','styles':{'height':this.wrapper.height,'width':this.wrapper.width}});this.container.inject(this.wrapper.el);if(this.options.progressbar)this.createProgressbar();if(this.options.captions)this.createCaptions();this.preload();},createBlinds:function(idx){this.current.counter=idx;this.slices.els[idx]=new Element('div',{'class':this.options.prefix+'slice '+this.options.prefix+this.options.axis,'tween':{'duration':this.options.animation*4},'styles':$merge({'opacity':0,'width':this.slices.width,'height':this.slices.height,'background-image':'url('+this.options.slidesBase+this.slides[this.current.slide].image+')'},this[this.options.axis]())}).inject(this.container);this.slices.els[idx].morph($merge({'opacity':1},this.options.sliceFxIn));if(idx==this.options.amount-1)this.step.delay(this.options.animation,this);},preload:function(){this.slides.each(function(o){this.preloadImgs.push(this.options.slidesBase+o.image);},this);new Asset.images(this.preloadImgs,{onComplete:this.onPreload.bind(this)});},onPreload:function(){this.animateBlinds().periodical(this.options.interval,this);this.fireEvent('onPreload',this.slides[this.current.slide]);},animateBlinds:function(){this.current.slide++;if(this.current.slide==this.slides.length-1)this.current.slide=0;for(var idx=0;idx<this.options.amount;idx++){this.createBlinds.delay(this.options.animation*idx,this,idx);}
if(this.options.progressbar)this.progressbar.fade('out');if(this.options.captions){this.captions.morph($merge({'opacity':0},this.options.captionsFxOut));}
return this.animateBlinds;},step:function(){this.container.set('styles',{'background-image':'url('+this.options.slidesBase+this.slides[this.current.slide].image+')'});this.slices.els.each(function(slice){slice.destroy();});if(this.options.progressbar){var calculatedWidth=this.container.getSize().x-(this.progressbar.getStyles('margin-left')['margin-left'].toInt()*2);this.progressbar.morph({'width':[0,calculatedWidth]});this.progressbar.fade('in');}
if(this.options.captions){this.captions.set('html',this.slides[this.current.slide].caption);this.captions.morph($merge({'opacity':1},this.options.captionsFxIn));}
this.fireEvent('onSlideChange',this.slides[this.current.slide]);}});Element.implement({floom:function(slides,options){return new Floom(this,slides,options);}});
