
Object.extend(Control.Slider.prototype,{initialize:function(handle,track,options){var slider=this;if(Object.isArray(handle)){this.handles=handle.collect(function(e){return $(e)});}else{this.handles=[$(handle)];}
this.track=$(track);this.options=options||{};this.axis=this.options.axis||'horizontal';this.increment=this.options.increment||1;this.step=parseInt(this.options.step||'1');this.range=this.options.range||$R(0,1);this.value=0;this.values=this.handles.map(function(){return 0});this.spans=this.options.spans?this.options.spans.map(function(s){return $(s)}):false;this.options.startSpan=$(this.options.startSpan||null);this.options.endSpan=$(this.options.endSpan||null);this.restricted=this.options.restricted||false;this.restrictedBuffer=this.options.restrictedBuffer||0;this.smartChange=this.options.smartChange||false;this.maximum=this.options.maximum||this.range.end;this.minimum=this.options.minimum||this.range.start;this.alignX=parseInt(this.options.alignX||'0');this.alignY=parseInt(this.options.alignY||'0');this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?(this.handles[0].offsetHeight!=0?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,"")):(this.handles[0].offsetWidth!=0?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""));this.active=false;this.dragging=false;this.disabled=false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;if(this.allowedValues){this.minimum=this.allowedValues.min();this.maximum=this.allowedValues.max();}
this.eventMouseDown=this.startDrag.bindAsEventListener(this);this.eventMouseUp=this.endDrag.bindAsEventListener(this);this.eventMouseMove=this.update.bindAsEventListener(this);this.handles.each(function(h,i){i=slider.handles.length-1-i;slider.setValue(parseFloat((Object.isArray(slider.options.sliderValue)?slider.options.sliderValue[i]:slider.options.sliderValue)||slider.range.start),i);h.makePositioned().observe("mousedown",slider.eventMouseDown);});this.track.observe("mousedown",this.eventMouseDown);document.observe("mouseup",this.eventMouseUp);document.observe("mousemove",this.eventMouseMove);this.initialized=true;},setValue:function(sliderValue,handleIdx){if(!this.active){this.activeHandleIdx=handleIdx||0;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles();}
handleIdx=handleIdx||this.activeHandleIdx||0;if(this.initialized&&!this.dragging&&this.options.smartChange){distanceFromLowerHandle=this.range.end-this.range.start;distanceFromHigherHandle=this.range.end-this.range.start;distanceFromHandle=Math.abs(sliderValue-this.values[handleIdx]);if(handleIdx>0){distanceFromLowerHandle=Math.abs(sliderValue-this.values[handleIdx-1]);}
if(handleIdx<(this.handles.length-1)){distanceFromHigherHandle=Math.abs(sliderValue-this.values[handleIdx+1]);}
if(distanceFromLowerHandle<distanceFromHandle||distanceFromHigherHandle<distanceFromHandle){if(distanceFromLowerHandle<distanceFromHigherHandle){this.activeHandleIdx=handleIdx-1;}else{this.activeHandleIdx=handleIdx+1;}
handleIdx=this.activeHandleIdx;this.activeHandle=this.handles[this.activeHandleIdx];this.updateStyles();}}
if(this.initialized&&this.restricted){if((handleIdx>0)&&(sliderValue<(this.values[handleIdx-1]+this.restrictedBuffer)))
sliderValue=this.values[handleIdx-1]+this.restrictedBuffer;if((handleIdx<(this.handles.length-1))&&(sliderValue>(this.values[handleIdx+1]-this.restrictedBuffer)))
sliderValue=this.values[handleIdx+1]-this.restrictedBuffer;}
sliderValue=this.getNearestValue(sliderValue);this.values[handleIdx]=sliderValue;this.value=this.values[0];this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue);this.drawSpans();if(!this.dragging||!this.event)this.updateFinished();}})