Carousel=Class.create(Abstract,{initialize:function(A,D,B,C){this.scrolling=false;this.scroller=A;this.slides=D;this.controls=B;this.options=Object.extend({duration:1,frequency:3,controlClassName:"carousel-control",jumperClassName:"carousel-jumper"},C||{});this.slides.each(function(E,F){E._index=F});if(this.controls){this.controls.invoke("observe","click",this.click.bind(this))}if(this.options.auto){this.start();this.slides.invoke("observe","mouseover",this.pause.bind(this));this.slides.invoke("observe","mouseout",this.resume.bind(this))}},click:function(event){this.stop();var element=event.findElement("a");if(!element.hasClassName("disabled")){this.deactivateControls();if(element.hasClassName(this.options.controlClassName)){eval("this."+element.rel+"()")}else{if(element.hasClassName(this.options.jumperClassName)){this.moveTo(element,element.rel)}}}event.stop()},moveTo:function(B,C){if(this.options.beforeMove&&(typeof this.options.beforeMove=="function")){this.options.beforeMove()}if(this.controls&&this.options.selectedClassName){this.controls.each((function(E){E.removeClassName(this.options.selectedClassName)}).bind(this));B.addClassName(this.options.selectedClassName)}this.previous=this.current?this.current:this.slides[0];this.current=$(C);var D=this.scroller.cumulativeOffset();var A=this.current.cumulativeOffset();if(this.scrolling){this.scrolling.cancel()}this.scrolling=new Effect.SmoothScroll(this.scroller,{duration:this.options.duration,x:(A[0]-D[0]),y:(A[1]-D[1]),queue:{position:"end",limit:1,scope:this.scroller.id},afterFinish:(function(){if(this.controls){this.activateControls()}}).bind(this)});if(this.options.afterMove&&(typeof this.options.afterMove=="function")){this.options.afterMove()}return false},prev:function(){if(this.current){var A=this.current._index;var B=(A==0)?this.slides.length-1:A-1}else{var B=this.slides.length-1}this.moveTo(this.controls?this.controls[B]:false,this.slides[B])},next:function(){if(this.current){var B=this.current._index;var A=(this.slides.length-1==B)?0:B+1}else{var A=1}this.moveTo(this.controls?this.controls[A]:false,this.slides[A])},first:function(){var B=0;if(this.current){var A=this.current._index}this.moveTo(this.controls[B],this.slides[B])},last:function(){var B=(this.slides.length-1);if(this.current){var A=this.current._index}this.moveTo(this.controls[B],this.slides[B])},toggle:function(){if(this.previous){this.moveTo(this.controls[this.previous._index],this.slides[this.previous._index])}else{return false}},stop:function(){clearTimeout(this.timer)},start:function(){this.periodicallyUpdate()},pause:function(A){this.stop();this.activateControls()},resume:function(A){if(A){var B=A.relatedTarget||A.toElement;if(!B||(!this.slides.include(B)&&!this.slides.any(function(C){return B.descendantOf(C)}))){this.start()}}else{this.start()}},periodicallyUpdate:function(){if(this.timer!=null){clearTimeout(this.timer);this.next()}this.timer=setTimeout(this.periodicallyUpdate.bind(this),this.options.frequency*2000)},deactivateControls:function(){this.controls.invoke("addClassName","disabled")},activateControls:function(){this.controls.invoke("removeClassName","disabled")}});Effect.SmoothScroll=Class.create();Object.extend(Object.extend(Effect.SmoothScroll.prototype,Effect.Base.prototype),{initialize:function(B){this.element=$(B);var A=Object.extend({x:0,y:0,mode:"absolute"},arguments[1]||{});this.start(A)},setup:function(){if(this.options.continuous&&!this.element._ext){this.element.cleanWhitespace();this.element._ext=true;this.element.appendChild(this.element.firstChild)}this.originalLeft=this.element.scrollLeft;this.originalTop=this.element.scrollTop;if(this.options.mode=="absolute"){this.options.x-=this.originalLeft;this.options.y-=this.originalTop}},update:function(A){this.element.scrollLeft=this.options.x*A+this.originalLeft;this.element.scrollTop=this.options.y*A+this.originalTop}});