var Fader=Class.create();Fader.prototype={initialize:function(a,c,b){this.img=$(a);this.list=c;this.options=Object.extend({id:this.img.id,fadeInDuration:2.5,fadeOutDuration:1.5,displayDuration:2.5,autoSize:false,autoStart:true,attributes:[]},b||{});this.options.attributes.id=this.options.id;this.index=0;this.container=$(this.img.parentNode);this.loadedObserver=this.loaded.bind(this);this.fadeInObserver=this.fadeIn.bind(this);this.nextObserver=this.next.bind(this);if(this.options.autoStart){setTimeout(this.start.bind(this),this.options.displayDuration*1000)}},start:function(){this.stopped=false;this.next()},stop:function(){this.stopped=true;try{clearTimeout(this.timeout)}catch(a){}try{Effect.Queues.get(this.options.id).each(function(b){b.cancel()})}catch(a){}if(this.oldImg){this.img=this.oldImg;--this.index}Element.setOpacity(this.img,1)},next:function(){this.oldImg=this.img;if(this.stopped||this.list.length==0){return}++this.index;if(this.index>=this.list.length){this.index=0}this.img=Builder.node("img",this.options.attributes);Event.observe(this.img,"load",this.loadedObserver);this.img.src=this.list[this.index]},loaded:function(){Event.stopObserving(this.img,"load",this.loadedObserver);new Effect.Opacity(this.oldImg,{duration:this.options.fadeOutDuration,from:1,to:0,queue:{scope:this.options.id}});this.timeout=setTimeout(this.fadeInObserver,this.options.fadeOutDuration*1000)},fadeIn:function(){this.img.id=this.id;Element.setOpacity(this.img,0);if(this.options.autoSize){this.resize(this.img)}this.container.replaceChild(this.img,this.oldImg);this.oldImg=null;new Effect.Opacity(this.img,{duration:this.options.fadeInDuration,from:0,to:1,queue:{scope:this.options.id}});this.timeout=setTimeout(this.nextObserver,(this.options.fadeInDuration+this.options.displayDuration)*1000)},resize:function(b){var f=this.container.getDimensions();f.width-=parseInt(this.container.getStyle("padding-left"))+parseInt(this.container.getStyle("padding-right"))+parseInt(this.container.getStyle("border-left-width"))+parseInt(this.container.getStyle("border-right-width"));f.height-=parseInt(this.container.getStyle("padding-top"))+parseInt(this.container.getStyle("padding-bottom"))+parseInt(this.container.getStyle("border-top-width"))+parseInt(this.container.getStyle("border-bottom-width"));var c=f.width/b.width;var e=f.height/b.height;var a=b.width*e;var d=b.height*c;if(c>e){b.width=a;b.height=f.height}else{b.width=f.width;b.height=d}}};
