var Carousel=Class.create();Carousel.prototype={initialize:function(_1){this.carouselElemID=_1;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 _2="carousel-list";this.carouselList=document.getElementsByClassName(_2,$(_1))[0];this._init();},destroy:function(){Event.stopObserving(this.options.prevElementID,"click",this.prevScroll);Event.stopObserving(this.options.nextElementID,"click",this.nextScroll);},scrollTo:function(_3){var _4=this.options.scrollInc;this.ignoreNoMoreImages=true;if(_3>this.currentIndex){this.options.scrollInc=_3-this.currentIndex;this._nextScroll(this);}else{this.options.scrollInc=this.currentIndex-_3;this._prevScroll(this);}this.options.scrollInc=_4;},_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(_5){if(this.animRunning!="none"||this.currentIndex==0){return;}var _6=this.options.scrollInc;if(this.currentIndex-_6<0){_6=this.currentIndex;}this._scroll(_6);return false;},_nextScroll:function(_7){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(_8,nb){if(this.options.url&&!this.requestIsRunning){this.requestIsRunning=true;if(this.options.ajaxHandler){this.options.ajaxHandler(this,"before");}var _a="start="+_8+"&nb="+nb;if(this.options.ajaxParameters!=null){_a+="&"+this.options.ajaxParameters;}new Ajax.Request(this.options.url,{parameters:_a,onComplete:this.onComplete,onFailure:this.onFailure});}},_onComplete:function(_b){this.requestIsRunning=false;this.carouselList.innerHTML+=_b.responseText;var _c=this.options.size;this.options.size=this.carouselList.getElementsByTagName("li").length;var _d=this.options.size-_c;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=_d!=this.options.scrollInc;}else{this.ignoreNoMoreImages=false;}if(_d>0){this._scroll(-_d,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(_e){this.requestIsRunning=false;},_animDone:function(_f){if(this.options.animHandler){this.options.animHandler(this.carouselElemID,"after",this.animRunning);}this.animRunning="none";if(this.animAfterFinish){this.animAfterFinish(_f);}},_updateButtonStateHandler:function(_10,_11){if(this.options.buttonStateHandler){this.options.buttonStateHandler(_10,_11);}},_scroll:function(_12,_13){this.animRunning=_12>0?"prev":"next";if(this.options.animHandler){this.options.animHandler(this.carouselElemID,"before",this.animRunning);}new Effect.MoveBy(this.carouselList,0,_12*this.elementSize,this.options.animParameters);this.currentIndex-=_12;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,(_13?false:enable));},_getLiElementSize:function(){var li=$(this.carouselList.getElementsByTagName("li")[0]);this.elementSize=li.getDimensions().width+parseFloat(li.getStyle("margin-left"))+parseFloat(li.getStyle("margin-right"));}};