// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007 // Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ function K2Slider(handle, track, options) { var self = this; this.handle = jQuery(handle); this.track = jQuery(track); this.options = options || {}; this.value = this.options.value || 0; this.maximum = this.options.maximum || 1; this.minimum = this.options.minimum || 0; this.trackLength = this.track.width(); this.handleLength = this.handle.width(); this.handle.css('position', 'absolute'); this.active = false; this.dragging = false; this.setValue(this.value); this.handle.mousedown(function(event) { self.active = true; var pointer = self.pointerX(event); var offset = self.track.offset(); self.setValue( self.translateToValue( pointer-offset.left-(self.handleLength/2) ) ); var offset = self.handle.offset(); self.offsetX = (pointer - offset.left); }); this.track.mousedown(function(event) { var offset = self.track.offset(); var pointer = self.pointerX(event); self.setValue( self.translateToValue( pointer-offset.left-(self.handleLength/2) ) ); }); jQuery(document).mouseup(function(event){ if (self.active && self.dragging) { self.active = false; self.dragging = false; self.updateFinished(self); } self.active = false; self.dragging = false; }); jQuery(document).mousemove(function(event){ if (self.active) { if (!self.dragging) self.dragging = true; self.draw(event); // fix AppleWebKit rendering if (navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0); } }); this.initialized = true; }; K2Slider.prototype.getNearestValue = function(value) { if (value > this.maximum) return this.maximum; if (value < this.minimum) return this.minimum; return value; }; K2Slider.prototype.setValue = function(value) { this.value = this.getNearestValue(value); this.handle.css('left', this.translateToPx(this.value)); if (!this.dragging || !this.event) this.updateFinished(this); }; K2Slider.prototype.setValueBy = function(delta) { this.setValue(this.value + delta); }; K2Slider.prototype.translateToPx = function(value) { return Math.round( ((this.trackLength-this.handleLength)/(this.maximum-this.minimum)) * (value - this.minimum)) + "px"; }; K2Slider.prototype.translateToValue = function(offset) { return Math.round( ((offset/(this.trackLength-this.handleLength) * (this.maximum-this.minimum)) + this.minimum)); }; K2Slider.prototype.draw = function(event) { var pointer = this.pointerX(event); var offset = this.track.offset(); pointer -= this.offsetX + offset.left; this.event = event; this.setValue( this.translateToValue(pointer) ); if (this.initialized && this.options.onSlide) this.options.onSlide(this.value); }; K2Slider.prototype.updateFinished = function(self) { if (self.initialized && self.options.onChange) self.options.onChange(self.value); self.event = null; }; K2Slider.prototype.pointerX = function(event) { return event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); }; K2Slider.prototype.isLeftClick = function(event) { return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1))); };