var Carousel=Class.create();Carousel.prototype={initialize:function(B){this.carouselElemID=B;this.options=Object.extend({numVisible:4,scrollInc:3,animParameters:{},buttonStateHandler:null,animHandler:null,ajaxHandler:null,initDoneHandler:null,queue:"carousel",size:0,prevElementID:"prev-arrow",nextElementID:"next-arrow",ajaxParameters:null,url:null},arguments[1]||{});this.initDone=false;this.animRunning="none";this.requestIsRunning=false;this.animAfterFinish=this.options.animParameters.afterFinish;Object.extend(this.options.animParameters,{afterFinish:this._animDone.bind(this),queue:{position:"end",scope:this.options.queue}});this.prevScroll=this._prevScroll.bindAsEventListener(this);this.nextScroll=this._nextScroll.bindAsEventListener(this);this.onComplete=this._onComplete.bindAsEventListener(this);this.onFailure=this._onFailure.bindAsEventListener(this);Event.observe(this.options.prevElementID,"click",this.prevScroll);Event.observe(this.options.nextElementID,"click",this.nextScroll);var A="carousel-list";this.carouselList=document.getElementsByClassName(A,$(B))[0];this.options.size=$(this.carouselList.getElementsByTagName("li")).length;this._init()},destroy:function(){Event.stopObserving(this.options.prevElementID,"click",this.prevScroll);Event.stopObserving(this.options.nextElementID,"click",this.nextScroll)},scrollTo:function(A){var B=this.options.scrollInc;this.ignoreNoMoreImages=true;if(A>this.currentIndex){this.options.scrollInc=A-this.currentIndex;this._nextScroll(this)}else{this.options.scrollInc=this.currentIndex-A;this._prevScroll(this)}this.options.scrollInc=B},_init:function(){this.currentIndex=0;if(this.options.url){this._request(this.currentIndex,this.options.numVisible)}else{this._getLiElementSize();this._updateButtonStateHandler(this.options.prevElementID,false);this._updateButtonStateHandler(this.options.nextElementID,this.options.size>this.options.numVisible)}},_prevScroll:function(A){if(this.animRunning!="none"||this.currentIndex==0){return }var B=this.options.scrollInc;if(this.currentIndex-B<0){B=this.currentIndex}this._scroll(B);return false},_nextScroll:function(A){if(this.animRunning!="none"){return false}if(this.currentIndex+this.options.numVisible+this.options.scrollInc<=this.options.size){this._scroll(-this.options.scrollInc)}else{this.nbInCache=this.options.size-(this.currentIndex+this.options.numVisible);if(this.options.url&&this.noMoreImages==false){this._request(this.currentIndex+this.options.numVisible+this.nbInCache,this.options.scrollInc-this.nbInCache)}else{if(this.nbInCache>0){this._scroll(-this.nbInCache)}}}return false},_request:function(C,A){if(this.options.url&&!this.requestIsRunning){this.requestIsRunning=true;if(this.options.ajaxHandler){this.options.ajaxHandler(this,"before")}var B="start="+C+"&nb="+A;if(this.options.ajaxParameters!=null){B+="&"+this.options.ajaxParameters}new Ajax.Request(this.options.url,{parameters:B,onComplete:this.onComplete,onFailure:this.onFailure})}},_onComplete:function(A){this.requestIsRunning=false;this.carouselList.innerHTML+=A.responseText;var B=this.options.size;this.options.size=this.carouselList.getElementsByTagName("li").length;var C=this.options.size-B;if(this.initDone==false){this._getLiElementSize();this.currentIndex=0;this.initDone=true;if(this.options.initDoneHandler){this.options.initDoneHandler(this)}this._updateButtonStateHandler(this.options.prevElementID,false);this._updateButtonStateHandler(this.options.nextElementID,this.options.size==this.options.numVisible);this.noMoreImages=this.options.size<this.options.numVisible}else{if(!this.ignoreNoMoreImages){this.noMoreImages=C!=this.options.scrollInc}else{this.ignoreNoMoreImages=false}if(C>0){this._scroll(-C,this.noMoreImages)}else{if(this.nbInCache>0){this._scroll(-this.nbInCache,true)}this._updateButtonStateHandler(this.options.nextElementID,false)}}if(this.options.ajaxHandler){this.options.ajaxHandler(this,"after")}},_onFailure:function(A){this.requestIsRunning=false},_animDone:function(A){if(this.options.animHandler){this.options.animHandler(this.carouselElemID,"after",this.animRunning)}this.animRunning="none";if(this.animAfterFinish){this.animAfterFinish(A)}},_updateButtonStateHandler:function(A,B){if(this.options.buttonStateHandler){this.options.buttonStateHandler(A,B)}},_scroll:function(B,A){this.animRunning=B>0?"prev":"next";if(this.options.animHandler){this.options.animHandler(this.carouselElemID,"before",this.animRunning)}new Effect.MoveBy(this.carouselList,0,B*this.elementSize,this.options.animParameters);this.currentIndex-=B;this._updateButtonStateHandler(this.options.prevElementID,this.currentIndex!=0);if(this.options.url&&this.noMoreImages==false){enable=true}else{enable=(this.currentIndex+this.options.numVisible<this.options.size)}this._updateButtonStateHandler(this.options.nextElementID,(A?false:enable))},_getLiElementSize:function(){var A=$(this.carouselList.getElementsByTagName("li")[0]);this.elementSize=A.getDimensions().width+parseFloat(A.getStyle("margin-left"))+parseFloat(A.getStyle("margin-right"))}};function buttonStateHandler(B,A){if(B=="prev-arrow"){$("prev-arrow").src=A?"images/left3-enabled.gif":"images/left3-disabled.gif"}else{$("next-arrow").src=A?"images/right3-enabled.gif":"images/right3-disabled.gif"}}function animHandler(B,A,D){var C=$(B).down(".carousel-clip-region");if(A=="before"){Effect.Fade(C,{to:0.3,queue:{position:"end",scope:"carousel"},duration:0.2})}if(A=="after"){Effect.Fade(C,{to:1,queue:{position:"end",scope:"carousel"},duration:0.2})}}