/* * Track — id of parent elenemt * Tracker — id of tracked element * OnUpdate — function whitch calls on each value change * OnComplete — function whitch calls on end of the drag * FingerOffset — distance between mouse pointer and corner tracker's edge * FormatNumbers — lead numders in hairlines with spaces * Min & Max — range of vaues * MinSpace — minimum difference between Min & Max * RoundTo — values will be rounded to this value * Margins — indent between Track & Tracker * AllowedValues — force Tracker to stick to the values * * OnUpdate — function whitch called each time, when Tracker moved * OnComplete — function whitch called when user stop draging */ String.prototype.reverse = function(){ splitext = this.split(""); revertext = splitext.reverse(); reversed = revertext.join(""); return reversed; } function trace(str) {/*document.getElementById("debug").innerHTML += str+"
";*/} function ThouthandTrim(size) { return size > 9000 ? "max" : size; } function classFilter(r,m,not){m = " " + m + " ";var tmp = [];for (var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(not ^ pass)tmp.push(r[i]);}return tmp;} function PriceFormat(price) { var rmptxt = new String(price).reverse(); var rettxt = ""; var p=0; for(var i=1;i<=rmptxt.length;i++) { if(p==3) rettxt+=" "; rettxt+=rmptxt.substring((i - 1), i); p = p==3?1:p+1; } return rettxt.reverse(); } function cDoubleTrackBar(Track, Tracker, Settings){ switch(typeof Track){case 'string': this.Track = document.getElementById(Track); break;case 'object': this.Track = Track; break;} switch(typeof Tracker){case 'string': this.Tracker = document.getElementById(Tracker); break;case 'object': this.Tracker = Tracker; break;} if (!Track || !Tracker) return false; this.OnUpdate = Settings.OnUpdate; this.OnComplete = Settings.OnComplete; this.FingerOffset = Settings.FingerOffset || 0; this.FormatNumbers = Settings.FormatNumbers || false; this.Min = Settings.Min || 0; this.Max = Settings.Max || 100; this.MinSpace = Settings.MinSpace || 0; this.RoundTo = Settings.RoundTo || 1; this.Margins = Settings.Margins || 0; this.AllowedValues = Settings.AllowedValues || false; this.Block = Settings.Block || false; this.Disabled = (typeof Settings.Disabled != 'undefined') ? Settings.Disabled : false; if (this.Min >= this.Max)this.Max = this.Min +1; this.MinPos = this.Min; this.MaxPos = this.Max; if (this.Max - this.Min < this.MinSpace)this.MinSpace = this.Max - this.Min; if (this.Max - this.Min < this.RoundTo) this.RoundTo = this.Max - this.Min; this.MinSpace = Math.ceil(this.MinSpace/this.RoundTo)*this.RoundTo; this.CenterPos = this.Max - this.Min; this.CenterPos = this.CenterPos / 2; this.W = this.Track.clientWidth || this.Track.offsetWidth; this.Track.style.width = (this.Track.clientWidth || this.Track.offsetWidth) + 'px'; this.OnTrackMouseDown = this.bindAsEventListener(this.TrackMouseDown); this.OnDocumentMouseMove = this.bindAsEventListener(this.DocumentMouseMove); this.OnDocumentMouseUp = this.bindAsEventListener(this.DocumentMouseUp); this.bindEvent(this.Track, 'mousedown', this.OnTrackMouseDown); this.TrackerLeft = 0; this.UpdateTracker(this.Track.offsetWidth + this.FingerOffset); if (typeof this.OnUpdate == 'function'){this.OnUpdate.call(this);}} cDoubleTrackBar.prototype = { TrackMouseDown: function(event){ this.TrackerLeft = this.Tracker.offsetLeft - this.Margins; this.TrackerRight = this.TrackerLeft + this.Tracker.offsetWidth; this.TrackerOffsets = this.getOffsets(this.Track); var X = event.clientX + document.documentElement.scrollLeft; X -= this.TrackerOffsets[0]; this.Left = Math.abs(this.TrackerLeft-X+this.Margins) <= Math.abs(this.TrackerRight-X+this.Margins); if (typeof this.Disabled == 'function') { if ( this.Disabled.call(this)) return true; } else if (this.Disabled) return true; this.UpdateTracker(X); this.bindEvent(document, 'mousemove', this.OnDocumentMouseMove); this.bindEvent(document, 'mouseup', this.OnDocumentMouseUp); return this.stopEvent(event); }, DocumentMouseMove: function(event){ this.UpdateTracker(event.clientX + document.documentElement.scrollLeft - this.TrackerOffsets[0]); return this.stopEvent(event); }, DocumentMouseUp: function(event) { this.unbindEvent(document, 'mousemove', this.OnDocumentMouseMove); this.unbindEvent(document, 'mouseup', this.OnDocumentMouseUp); if (typeof this.OnComplete == 'function') { this.OnComplete.call(this); } return this.stopEvent(event); }, UpdateTracker: function(X){ var _LogicWidth = this.Track.offsetWidth - this.Margins*2 - 1; var _minSpace = Math.floor(_LogicWidth*this.MinSpace/(this.Max-this.Min)); var _oldMin = this.MinPos; var _oldMax = this.MaxPos; X -= this.Margins; this.Left = false; if(this.Left) { X += this.FingerOffset; this.TrackerLeft = Math.max(0, Math.min(this.TrackerRight - _minSpace - 1, X)); this.MinPos = Math.round((this.Min + this.TrackerLeft*(this.Max-this.Min)/_LogicWidth) / this.RoundTo) * this.RoundTo; if (this.MinSpace >= this.MaxPos - this.MinPos) { this.MinPos = this.MaxPos - this.MinSpace; } if(this.AllowedValues) { this.TrackerLeft = Math.round(_LogicWidth*(this.MinPos - this.Min)/(this.Max - this.Min)); } } else { X -= this.FingerOffset; this.TrackerRight = Math.max(this.TrackerLeft + _minSpace + 1 , Math.min(_LogicWidth + 1, X)); this.MaxPos = Math.round((this.Min + (this.TrackerRight-1)*(this.Max-this.Min)/_LogicWidth) / this.RoundTo) * this.RoundTo; if (this.MinSpace >= this.MaxPos - this.MinPos) { this.MaxPos = this.MinPos + this.MinSpace; } if (this.AllowedValues) { this.TrackerRight = Math.round(_LogicWidth*(this.MaxPos - this.Min)/(this.Max - this.Min))+1; } } this.R = this.TrackerRight - this.TrackerLeft; this.L = this.Margins + this.TrackerLeft; this.Tracker.style.width = this.R + 'px'; this.Tracker.style.left = this.L + 'px'; if (typeof this.OnUpdate == 'function') if (!this.AllowedValues || (this.AllowedValues && (_oldMax!=this.MaxPos || _oldMin!=this.MinPos))) this.OnUpdate.call(this); }, AddHairline: function(pos){ var _Touch = this.Track.appendChild( document.createElement('div') ); var _LogicWidth = this.Track.offsetWidth - this.Margins*2 - 1; _Touch.style.left = this.Margins + _LogicWidth/(this.Max-this.Min)*(pos-this.Min) + 'px'; _Touch.className = 'touch'; var t = ThouthandTrim(this.FormatNumbers ? this.leadSpaces(pos) : pos).toString(); _Touch.innerHTML = "" + t + ""; }, AutoHairline: function(num){ if(num >= 1) this.AddHairline(this.Min); if (num >= 2) this.AddHairline(this.Max); if(this.Block) this.AddHairline(this.CenterPos); if (num >= 3) { num--; var diff = this.Max - this.Min; var roundTo = [10, 20, 50, 100, 250, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 250000, 500000, 1000000, 5000000, 10000000]; var DoRound = 1; for (var i=0; roundTo[i]; i++) { DoRound = roundTo[i]/10; if (roundTo[i]>diff) break; } for (var i=1; i0; i--) if ((l-i)%3==2) res = ' '+numb.charAt(i-1)+res; else res = numb.charAt(i-1)+res; return res; }, bindEvent: function(element, event, callBack){ if(element.addEventListener) { element.addEventListener(event, callBack, false); } else { element.attachEvent('on' + event, callBack); } }, unbindEvent:function(element, event, callBack){ if (element.removeEventListener) { element.removeEventListener(event, callBack, false); } else if(element.detachEvent) { element.detachEvent('on' + event, callBack); } }, bindAsEventListener:function(callBack){ var _object = this; return function(event){ return callBack.call(_object, event || window.event); } }, stopEvent: function (event){ if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.returnValue = false; event.cancelBubble = true; } return false; } } function dt_start() { var min = 0; var max = 10000; var TB1 = new cDoubleTrackBar('DoubleTrack-2', 'DoubleTrack-2-Tracker',{ OnUpdate: function(){ var el = document.getElementById('exatMaxAmountCtrl'); if (!el) { return; } if (this.MaxPos != max) { el.value = this.MaxPos; } else { el.value = ''; } if (el.onchange) { el.onchange(); } this.Tracker.style.backgroundPosition = -this.TrackerLeft + 'px center'; if (this.fix){for(var i=0;i