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