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/carousel_la.gif":"/images/carousel_l.gif"}else{$("next-arrow").src=a?"/images/carousel_ra.gif":"/images/carousel_r.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})}};