/* (c) LoopNet Slider Version 2.9 */
LNJS.__slider=true;if(!LNJS.Widget)LNJS.Widget={};LNJS.Widget.Slider=Class.create();LNJS.Widget.Slider.prototype=({initialize:function(handle,track,options){var slider=this;this.__className="LNJS.Widget.Slider";if(handle instanceof Array){this.handles=handle.collect(function(e){return $(e);});}else{this.handles=[$(handle)];}if(LNJS.isNull(this.handles))throw LNJS.Err("LNJS.Widget.Slider requires handle element(s)!");this.track=$(track);if(LNJS.isNull(this.track))throw LNJS.Err("LNJS.Widget.Slider requires a track element!");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.options.dohover=this.options.dohover||false;this.options.doselected=this.options.doselected||false;this.options.spanoffset=this.options.spanoffset||0;this.restricted=this.options.restricted||false;if(this.options.readinside){this.options.handleHACK=this.options.handleHACK||{left:{left:-2,right:0},width:{left:3,right:+10}};}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.initlen();this.active=false;this.dragging=false;this.disabled=false;this.trackDisabled=this.options.trackDisabled||false;if(this.options.disabled)this.setDisabled();this.allowedValues=this.options.values?this.options.values.sortBy(LNJS.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.eventMouseOver=this.onMouseOver.bindAsEventListener(this);this.eventMouseOut=this.onMouseOut.bindAsEventListener(this);this.handles.each(function(h,i){i=slider.handles.length-1-i;slider.setValue(parseFloat((slider.options.sliderValue instanceof Array?slider.options.sliderValue[i]:slider.options.sliderValue)||slider.range.start),i);Element.makePositioned(h);Event.observe(h,"mousedown",slider.eventMouseDown);if(slider.options.dohover){Event.observe(h,"mouseover",slider.eventMouseOver);Event.observe(h,"mouseout",slider.eventMouseOut);}});if(!this.trackDisabled)Event.observe(this.track,"mousedown",this.eventMouseDown);Event.observe(document,"mouseup",this.eventMouseUp);Event.observe(document,"mousemove",this.eventMouseMove);},dispose:function(){var slider=this;if(!this.trackDisabled)Event.stopObserving(this.track,"mousedown",this.eventMouseDown);Event.stopObserving(document,"mouseup",this.eventMouseUp);Event.stopObserving(document,"mousemove",this.eventMouseMove);this.handles.each(function(h){Event.stopObserving(h,"mousedown",slider.eventMouseDown);if(slider.options.dohover===true){Event.stopObserving(h,"mouseover",slider.eventMouseOver);Event.stopObserving(h,"mouseout",slider.eventMouseOut);}Element.purge(h);});Element.purge(this.track);this.handles=null;this.track=null;},initlen:function(){this.trackLength=this.maximumOffset()-this.minimumOffset();this.handleLength=this.isVertical()?this.handles[0].offsetHeight:this.handles[0].offsetWidth;},setDisabled:function(){this.disabled=true;},setEnabled:function(){this.disabled=false;},getNearestValue:function(value){if(this.allowedValues){if(value>=this.allowedValues.max())return(this.allowedValues.max());if(value<=this.allowedValues.min())return(this.allowedValues.min());var offset=Math.abs(this.allowedValues[0]-value);var newValue=this.allowedValues[0];this.allowedValues.each(function(v){var currentOffset=Math.abs(v-value);if(currentOffset<=offset){newValue=v;offset=currentOffset;}});return newValue;}if(value>this.range.end)return this.range.end;if(value<this.range.start)return this.range.start;return value;},setValue:function(sliderValue,handleIdx,skipFinish){if(!this.active){this.activeHandle=this.handles[handleIdx];this.activeHandleIdx=handleIdx;this.setSelectedStyle();}handleIdx=handleIdx||this.activeHandleIdx||0;if(this.__initialized&&this.restricted){if(this.options.readinside){other=this.values[handleIdx-1]||this.values[handleIdx+1];if((handleIdx>0)&&(Math.round(sliderValue)<=(Math.round(this.values[handleIdx-1]+1)))){sliderValue=this.values[handleIdx-1];sliderValue++;}if((handleIdx<(this.handles.length-1))&&((Math.ceil(sliderValue)+1)>=Math.round(this.values[handleIdx+1]))){sliderValue=this.values[handleIdx+1];sliderValue--;}}else{if((handleIdx>0)&&(sliderValue<this.values[handleIdx-1]))sliderValue=this.values[handleIdx-1];if((handleIdx<(this.handles.length-1))&&(sliderValue>this.values[handleIdx+1]))sliderValue=this.values[handleIdx+1];}}sliderValue=this.getNearestValue(sliderValue);this.values[handleIdx]=sliderValue;this.value=this.values[0];if(!isNaN(sliderValue))this.handles[handleIdx].style[this.isVertical()?'top':'left']=this.translateToPx(sliderValue);this.setLabels();this.drawSpans(handleIdx);if(!skipFinish&&(!this.dragging||!this.event))this.updateFinished();},setValueBy:function(delta,handleIdx){this.setValue(this.values[handleIdx||this.activeHandleIdx||0]+delta,handleIdx||this.activeHandleIdx||0);},translateToPx:function(value){val=Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(value-this.range.start));if((this.activeHandleIdx<(this.handles.length-1))&&this.options.readinside)val-=this.handleLength;return val+"px";},translateToValue:function(offset){if((this.activeHandleIdx<(this.handles.length-1))&&this.options.readinside)offset+=this.handleLength;val=((offset/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start);return val;},getRange:function(range){var v=this.values.sortBy(LNJS.K);range=range||0;return $R(v[range],v[range+1]);},minimumOffset:function(){return(this.isVertical()?this.alignY:this.alignX);},maximumOffset:function(){return(this.isVertical()?this.track.offsetHeight-this.alignY:this.track.offsetWidth-this.alignX);},isVertical:function(){return(this.axis=='vertical');},drawSpans:function(handleIdx){var slider=this;if(this.spans)$R(0,this.spans.length-1).each(function(r){slider.setSpan(slider.spans[r],slider.getRange(r),handleIdx);});if(this.options.startSpan)this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value),handleIdx);if(this.options.endSpan)this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum),handleIdx);},setSpan:function(span,range,handleIdx){if(this.isVertical()){span.style.top=this.translateToPx(range.start+this.options.spanoffset);span.style.height=this.translateToPx(range.end-range.start);}else{if(this.options.readinside&&this.options.handleHACK){span.style.left=this.translateToPx(range.start+(handleIdx>0?this.options.handleHACK.left.left:this.options.handleHACK.left.right)+this.options.spanoffset);span.style.width=this.translateToPx((range.end+(handleIdx>0?this.options.handleHACK.width.left:this.options.handleHACK.width.right))-range.start);}else{span.style.left=this.translateToPx(range.start+this.options.spanoffset);span.style.width=this.translateToPx(range.end-range.start);}}},setSelectedStyle:function(){if(!this.options.doselected)return;this.handles.each(function(h){Element.removeClassName(h,'selected');});Element.addClassName(this.activeHandle,'selected');},setOnDragStyles:function(){slider=this;if(this.options.spanondragclass&&this.spans)this.spans.each(function(s){Element.addClassName(s,slider.options.spanondragclass);});if(this.options.labelondragclass&&this.labels)Element.addClassName(this.labels[this.activeHandleIdx],slider.options.labelondragclass);},setLabels:function(setall){if(!this.options.valuelabel)return;var slider=this;if(!this.labels){if(this.options.valuelabel instanceof Array){this.labels=this.options.valuelabel.collect(function(e){return $(e);});}else{this.labels=[$(this.options.valuelabel)];}}if(!this.labels)return;if(this.__initialized&&this.activeHandleIdx&&!setall){Element.innerHTML(this.labels[this.activeHandleIdx],(slider.options.valueformat)?slider.options.valueformat[Math.round(slider.values[this.activeHandleIdx])]:slider.values[this.activeHandleIdx]);}else{this.labels.each(function(h,i){Element.innerHTML(h,(slider.options.valueformat)?slider.options.valueformat[Math.round(slider.values[i])]:slider.values[i]);});}},onMouseOver:function(event){Element.addClassName(Event.findElement(event,'DIV'),'hover');},onMouseOut:function(){this.handles.each(function(h){Element.removeClassName(h,'hover');});},startDrag:function(event){if(Event.isLeftClick(event)){if(!this.disabled){this.active=true;var handle=Event.element(event);var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=null;if(handle==this.track){offsets=Position.cumulativeOffset(this.track);this.event=event;this.setValue(this.translateToValue((this.isVertical()?pointer[1]-offsets[1]:pointer[0]-offsets[0])-(this.handleLength/2)));offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}else{while((this.handles.indexOf(handle)==-1)&&handle.parentNode)handle=handle.parentNode;this.activeHandle=handle;this.activeHandleIdx=this.handles.indexOf(this.activeHandle);this.setSelectedStyle();this.setOnDragStyles();offsets=Position.cumulativeOffset(this.activeHandle);this.offsetX=(pointer[0]-offsets[0]);this.offsetY=(pointer[1]-offsets[1]);}}if(this.__initialized&&this.options.onStartDrag)this.options.onStartDrag(this);Event.stop(event);}},update:function(event){if(this.active){if(!this.dragging)this.dragging=true;this.draw(event);if(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);if(this.__initialized&&this.options.onUpdate)this.options.onUpdate(this);Event.stop(event);}},draw:function(event){var pointer=[Event.pointerX(event),Event.pointerY(event)];var offsets=Position.cumulativeOffset(this.track);pointer[0]-=this.offsetX+offsets[0];pointer[1]-=this.offsetY+offsets[1];this.event=event;this.setValue(this.translateToValue(this.isVertical()?pointer[1]:pointer[0]));if(this.__initialized&&this.options.onSlide)this.options.onSlide(this.values.length>1?this.values:this.value,this);},endDrag:function(event){if(this.active&&this.dragging){this.finishDrag(event,true);Event.stop(event);}var slider=this;if(this.options.spanondragclass&&this.spans)this.spans.each(function(s){Element.removeClassName(s,slider.options.spanondragclass);});if(this.options.labelondragclass&&this.labels)Element.removeClassName(this.labels[this.activeHandleIdx],slider.options.labelondragclass);this.active=false;this.dragging=false;if(this.__initialized&&this.options.onEndDrag)this.options.onEndDrag(this);},finishDrag:function(event,success){this.active=false;this.dragging=false;this.updateFinished();},updateFinished:function(){if(this.__initialized&&this.options.onChange)this.options.onChange(this.values.length>1?this.values:this.value,this);this.event=null;}});
