/*
* 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