/*Script: Floom.js - MooTools-based blinds slideshow;Version:1.0;License:MIT-style license;Copyright (c) 2009 [Oskar Krawczyk](http://nouincolor.com/)*/
var Floom=new Class({Implements:[Events,Options],options:{prefix:'floom_',amount:24,animation:70,interval:8000,axis:'vertical',progressbar:true,captions:true,captionsFxOut:{},captionsFxIn:{},slidesBase:'',sliceFxIn:{},onSlideChange:function(){},onPreload:function(){}},initialize:function(wrapper,slides,options){this.setOptions(options);wrapper=document.id(wrapper);this.slides=this.driver(slides);this.wrapper={el:wrapper,width:[parseInt(wrapper.getStyles('width')['width']),wrapper.getSize().x].pick(),height:[parseInt(wrapper.getStyles('height')['height']),wrapper.getSize().y].pick()};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:-1,overlay:0,counter:0};this.preloadImgs=[];this.createStructure()},driver:function(slides){if(typeOf(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)]}},vertical:function(){return{'background-position':[-(this.slices.width*this.current.counter),0]}},createProgressbar:function(){this.progressbar=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=Element('div',{'class':this.options.prefix+'caption','html':'caption','styles':{'opacity':0}});this.captions.inject(this.wrapper.el)},createStructure:function(){this.container=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]=Element('div',{'class':this.options.prefix+'slice '+this.options.prefix+this.options.axis,'morph':{'duration':this.options.animation*4},'styles':Object.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);new Fx.Morph(this.slices.els[idx]).start(Object.merge({'opacity':1},this.options.sliceFxIn));if(idx==this.options.amount-1){this.step.delay(this.options.animation*4,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){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(Object.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(Object.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)}});
