var Crossfade=Class.create();Crossfade.prototype={loaded:false,initialize:function(g,a){var e=this,c,d;this.elm=$(g);this.counter=0;this.prevSlide=null;var f={};for(t in Crossfade.Transition){var b=Crossfade.Transition[t];if(b.className&&this.elm.hasClassName(b.className)){f={transition:b};break}}this.options=Object.extend(Object.clone(Crossfade.defaults),Object.extend(a||{},f));this.options.interval=Math.max(2,this.options.interval);this.elm.makePositioned();this.slides=this.elm.immediateDescendants();if(this.options.random||this.elm.hasClassName(this.options.randomClassName)){this.slides.sort(function(i,h){return e.rndm(-1,1)})}if(this.elm.id){c=$(this.elm.id+"-next");d=$(this.elm.id+"-previous");if(c){Event.observe(c,"click",this.next.bind(this))}if(d){Event.observe(d,"click",this.previous.bind(this))}}this.loadSlide(this.slides[0],function(){e.options.transition.prepare(e)});this.loadSlide(this.slides[1]);if(this.options.autoStart){setTimeout(this.start.bind(this),this.rndm((this.options.interval-1)*1000,(this.options.interval+1)*1000))}},start:function(){this.ready=true;this.cycle();return this.timer=new PeriodicalExecuter(this.cycle.bind(this),this.options.interval)},stop:function(){this.options.transition.cancel(this);this.timer.stop()},next:function(){this.options.transition.cancel(this);this.cycle()},previous:function(){this.options.transition.cancel(this);this.cycle(-1)},cycle:function(b){if(!this.ready){return}this.ready=false;b=(b===-1)?b:1;var d=this,a,e,c,f;a=this.slides[this.counter];this.counter=this.loopCount(this.counter+b);if(this.counter==0){this.loaded=true}e=this.slides[this.counter];this.loadSlide(e,d.options.transition.cycle(a,e,d));if(!this.loaded){this.loadSlide(this.slides[this.loopCount(this.counter+1)])}},loadSlide:function(b,g){var a=[],d=this,c,e,f;g=typeof g==="function"?g:function(){};f=function(){g();d.ready=true};b=$(b);a=Selector.findChildElements(b,[this.options.imageLoadSelector]);if(a.length&&a[0].href!==""){c=document.createElement("img");c.className="loadimage";c.onload=f;c.src=a[0].href;a[0].parentNode.replaceChild(c,a[0])}else{a=[];a=Selector.findChildElements(b,[this.options.ajaxLoadSelector]);if(a.length&&a[0].href!==""){new Ajax.Updater(b,a[0].href,{method:"get",onComplete:f})}else{f()}}},loopCount:function(a){if(a>=this.slides.length){a=0}else{if(a<0){a=this.slides.length-1}}return a},rndm:function(b,a){return Math.floor(Math.random()*(a-b+1)+b)},timer:null,effect:null,ready:false};Crossfade.Transition={};Crossfade.Transition.Switch={className:"transition-switch",cycle:function(c,b,a){a.slides.without(b).each(function(d){$(d).hide()});$(b).show()},cancel:function(a){},prepare:function(a){a.slides.each(function(c,b){$(c).setStyle({display:(b===0?"block":"none")})})}};Crossfade.Transition.Crossfade={className:"transition-crossfade",cycle:function(d,c,a){var b=a.options;a.effect=new Effect.Parallel([new Effect.Fade(d,{sync:true}),new Effect.Appear(c,{sync:true})],{duration:b.duration,queue:"Crossfade",afterFinish:function(){a.slides.without(c).each(function(e){$(e).setStyle({opacity:0})})}})},cancel:function(a){if(a.effect){a.effect.cancel()}},prepare:function(a){a.slides.each(function(c,b){$(c).setStyle({opacity:(b===0?1:0),visibility:"visible"})})}};Crossfade.Transition.FadeOutFadeIn={className:"transition-fadeoutfadein",cycle:function(d,c,a){var b=a.options;a.effect=new Effect.Fade(d,{duration:b.duration/2,afterFinish:function(){a.effect=new Effect.Appear(c,{duration:b.duration/2});a.slides.without(c).each(function(e){$(e).setStyle({opacity:0})})}})},cancel:function(a){if(a.effect){a.effect.cancel()}},prepare:function(a){a.slides.each(function(c,b){$(c).setStyle({opacity:(b===0?1:0),visibility:"visible"})})}};Effect.DoNothing=Class.create();Object.extend(Object.extend(Effect.DoNothing.prototype,Effect.Base.prototype),{initialize:function(){this.start({duration:0})},update:Prototype.emptyFunction});Crossfade.Transition.FadeOutResizeFadeIn={className:"transition-fadeoutresizefadein",cycle:function(d,c,a){var b=a.options;a.effect=new Effect.Fade(d,{duration:(b.duration-1)/2,afterFinish:function(){a.slides.without(c).each(function(i){$(i).setStyle({opacity:0})});var h=[c.getWidth(),c.getHeight()];var f=Selector.findChildElements(c,["img.loadimage"]);if(f.length&&f[0].offsetWidth&&f[0].offsetHeight){h[0]+=h[0]<f[0].offsetWidth?f[0].offsetWidth:0;h[1]+=h[1]<f[0].offsetHeight?f[0].offsetHeight:0}var e=[a.elm.getWidth(),a.elm.getHeight()];var g=[(e[0]>0&&h[0]>0?h[0]/e[0]:1)*100,(e[1]>0&&h[1]>0?h[1]/e[1]:1)*100];a.effect=new Effect.Parallel([(g[0]===100?new Effect.DoNothing():new Effect.Scale(a.elm,g[0],{sync:true,scaleY:false,scaleContent:false})),(g[1]===100?new Effect.DoNothing():new Effect.Scale(a.elm,g[1],{sync:true,scaleX:false,scaleContent:false}))],{duration:1,queue:"FadeOutResizeFadeIn",afterFinish:function(){a.effect=new Effect.Appear(c,{duration:(b.duration-1)/2})}})}})},cancel:function(a){if(a.effect){a.effect.cancel()}},prepare:function(a){var b=[$(a.slides[0]).getWidth(),$(a.slides[0]).getHeight()];a.elm.setStyle({width:b[0]+"px",height:b[1]+"px"});a.slides.each(function(d,c){$(d).setStyle({opacity:(c===0?1:0),visibility:"visible"})})}};Crossfade.defaults={autoLoad:true,autoStart:true,random:false,randomClassName:"random",selectors:[".crossfade"],imageLoadSelector:"a.loadimage",ajaxLoadSelector:"a.load",interval:5,duration:2,transition:Crossfade.Transition.Crossfade};Crossfade.setup=function(a){Object.extend(Crossfade.defaults,a)};Crossfade.load=function(){if(Crossfade.defaults.autoLoad){Crossfade.defaults.selectors.each(function(a){$$(a).each(function(b){return new Crossfade(b)})})}};if(window.FastInit){FastInit.addOnLoad(Crossfade.load)}else{Event.observe(window,"load",Crossfade.load)};