function getSpace(num){
  num=num.toString();
  if(num>=1000&&num<1000000){
    if(num<1000&&num>0){num=Math.round(num/10)*10;}
    if(num<10000&&num>1000){num=Math.round(num/100)*100;}
    if(num<100000&&num>10000){num=Math.round(num/1000)*1000;}
    if(num<1000000&&num>100000){num=Math.round(num/10000)*10000;}
    num=num.toString();
    num=num.substring(0,num.length-3)+"&nbsp;"+num.substring(num.length-3,num.length);
  }
  if(num>=1000000){
    var num2=num;
    if(num>=1000000&&num<=10000000){      
      num=Math.round(num/100000)/10;
      if(num.toString().length<2) num=num+".0";
      num=num.toString();
      num=num+"&nbsp;млн.";   
    }else{
      num=Math.round(num/1000000);
      num=num.toString();
      if(num.length>3) num=num.substr(0,num.length-3)+" "+num.substr(num.length-3,num.length);
      num=num+"&nbsp;млн."; 
    }

  }
  return num;
}

function spacer2000(num){
  num=num.toString()
  if(num.length>3){
	num=num.substr(0,num.length-3)+" "+num.substr(num.length-3,num.length);
  }
  if(num.length>7){
	num=num.substr(0,num.length-7)+" "+num.substr(num.length-7,num.length);
  }
  if(num.length>12){
	num=num.substr(0,num.length-12)+" "+num.substr(num.length-12,num.length);
  }
  return num;
}

$.fn.trackbar = function(op, id){
	op = $.extend({
		onMove: function(){},
		dual: true,
		width: 100, 
		leftLimit: 0,
		leftValue: 0,
		rightLimit: 100,
		rightValue: 100,
		//roundUp: 50,
		linear: false,
		k: 3.2,
		k2: 500,
		k3: 2000,
		k4: 5000,
		jq: this
	},op);
	$.trackbar.getObject(id).init(op);
}

$.trackbar = { // NAMESPACE
	archive : [],
	getObject : function(id) {
		if(typeof id == 'undefined')id = this.archive.length;
		if(typeof this.archive[id] == "undefined"){
			this.archive[id] = new this.hotSearch(id);
		}
		return this.archive[id];
	}
};

$.trackbar.hotSearch = function(id) { // Constructor
	// Vars
	this.id = id;
	
	this.leftWidth = 0; // px
	this.rightWidth = 0; // px
	this.width = 0; // px
	this.intervalWidth = 0; // px
	
	this.leftLimit = 0;
	this.leftValue = 0;
	this.rightLimit = 0;
	this.rightValue = 0;
	this.valueInterval = 0;
	this.widthRem = 6;
	this.valueWidth = 0;
	this.roundUp = 0;
	
	this.x0 = 0; this.y0 = 0;
	this.blockX0 = 0; 
	this.rightX0 = 0; 
	this.leftX0 = 0;
	// Flags
	this.dual = true;
	this.moveState = false;
	this.moveIntervalState = false;
	this.debugMode = true;
	this.clearLimits = false;
	this.clearValues = false;
	this.itWasMove = false;
	// Handlers
	this.onMove = null;
	// Nodes
	this.leftBlock = null;
	this.rightBlock = null;
	this.leftBegun = null;
	this.rightBegun = null;
	this.centerBlock = null;
	this.tickDiv = null;
	this.table = null;
}

$.trackbar.hotSearch.prototype = {
// Const
	ERRORS : {
		1 : "Object initialization error",
		2 : "Left slider was not found",
		3 : "Right slider was not found",
		4 : "Left resize area was not found",
		5 : "Right resize area was not found",
		9 : "Center click area was not found"
	},
	LEFT_BLOCK_PREFIX : "leftBlock",
	RIGHT_BLOCK_PREFIX : "rightBlock",
	LEFT_BEGUN_PREFIX : "leftBegun",
	RIGHT_BEGUN_PREFIX : "rightBegun",
	CENTER_BLOCK_PREFIX : "centerBlock",
	TABLE_PREFIX : "fctable_",
	TICKDIV_PREFIX : "tickdiv_",
// Methods
	// Default
	gebi : function(id) {
		return this.jq.find('#'+id)[0];
	},
	addHandler : function(object, event, handler, useCapture) {
		if (object.addEventListener) {
			object.addEventListener(event, handler, useCapture ? useCapture : false);
		} else if (object.attachEvent) {
			object.attachEvent('on' + event, handler);
		} else alert(this.errorArray[9]);
	},
	defPosition : function(event) { 
		var x = y = 0; 
		if (document.attachEvent != null) {
			x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; 
			y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop; 
		} 
		if (!document.attachEvent && document.addEventListener) { // Gecko 
			x = event.clientX + window.scrollX; 
			y = event.clientY + window.scrollY; 
		} 
		return {x:x, y:y}; 
	},
	absPosition : function(obj) { 
		var x = y = 0; 
		while(obj) { 
			x += obj.offsetLeft; 
			y += obj.offsetTop; 
			obj = obj.offsetParent; 
		} 
		return {x:x, y:y}; 
	},
	// Common
	debug : function(keys) {
		if (!this.debugMode) return;
		var mes = "";
		for (var i = 0; i < keys.length; i++) mes += this.ERRORS[keys[i]] + " : ";
		mes = mes.substring(0, mes.length - 3);
		alert(mes);
	},
	init : function(hash) {
		try {
			for (var i in hash) this[i] = hash[i];
			// 
			if (this.leftValue < this.leftLimit) this.leftValue = this.leftLimit;
			if (this.rightValue > this.rightLimit) this.rightValue = this.rightLimit;
			// HTML Write
			this.jq.html('<div class="tickdiv" id="'+this.TICKDIV_PREFIX+this.id+'"></div><table id="'+this.TABLE_PREFIX+this.id+'" ' + (this.width ? ' style="width:'+this.width+'px;"' : '') + 'class="trackbar" onSelectStart="return false;">\
				<tr>\
					<td class="l"><div id="leftBlock"><span></span><span class="limit"></span><img id="leftBegun" ondragstart="return false;" src="/imgtrackbar/b_l.gif" width="5" height="17" alt="" /></div></td>\
					<td class="c" id="centerBlock"></td>\
					<td class="r"><div id="rightBlock"><span></span><span class="limit"></span><img id="rightBegun" ondragstart="return false;" src="/imgtrackbar/b_r.gif" width="5" height="17" alt="" /></div></td>\
				</tr>\
			</table>');
			// Is all right?
			if (this.onMove == null) {
				this.debug([1,8]);
					return;
			}
			// ---
			this.leftBegun = this.gebi(this.LEFT_BEGUN_PREFIX);
			if (this.leftBegun == null) {this.debug([1,2]); return;}

			this.rightBegun = this.gebi(this.RIGHT_BEGUN_PREFIX);
			if (this.rightBegun == null) {this.debug([1,3]); return;}

			this.leftBlock = this.gebi(this.LEFT_BLOCK_PREFIX);
			if (this.leftBlock == null) {this.debug([1,4]); return;}

			this.rightBlock = this.gebi(this.RIGHT_BLOCK_PREFIX);
			if (this.rightBlock == null) {this.debug([1,5]); return;}

			this.centerBlock = this.gebi(this.CENTER_BLOCK_PREFIX);
			if (this.centerBlock == null) {this.debug([1,9]); return;}
			
			this.table = this.gebi(this.TABLE_PREFIX + this.id);
			this.tickDiv = this.gebi(this.TICKDIV_PREFIX + this.id);
			// Set default
			this.valueWidth = this.width - 2 * this.widthRem;
			this.rightValue = hash.rightValue || this.rightLimit;
			this.leftValue = hash.leftValue || this.leftLimit;
			if (!this.dual) this.rightValue = this.leftValue;
			this.valueInterval = this.rightLimit - this.leftLimit;
			
			if(this.linear!=true){
			  this.leftWidth = parseInt((this.leftValue - this.leftLimit) / this.valueInterval * this.valueWidth) + this.widthRem;
			}else{
			  this.k1=this.leftLimit;
			  this.k5=this.rightLimit;
			  if(this.leftValue >= this.k1 && this.leftValue < this.k2){
			    this.leftWidth=parseInt((this.leftValue-this.k1)/(this.k2-this.k1)*(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k2 && this.leftValue < this.k3){
			    this.leftWidth=parseInt((this.leftValue-this.k2)/(this.k3-this.k2)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k3 && this.leftValue < this.k4){
			    this.leftWidth=parseInt((this.leftValue-this.k3)/(this.k4-this.k3)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/2))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k4){
			    this.leftWidth=parseInt((this.leftValue-this.k4)/(this.k5-this.k4)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth-(this.valueWidth/4)) )) + this.widthRem;
			  }
			}
			if(this.leftValue<=this.leftLimit) this.leftWidth=this.widthRem;
			if(this.linear!=true){
			  this.rightWidth = this.valueWidth - parseInt((this.rightValue - this.leftLimit) / this.valueInterval * this.valueWidth) + this.widthRem;
			}else{
			  this.k1=this.leftLimit;
			  this.k5=this.rightLimit;
			  if(this.rightValue >= this.k1 && this.rightValue < this.k2){
			    this.rightWidth=parseInt((this.rightValue-this.k1)/(this.k2-this.k1)*(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k2 && this.rightValue < this.k3){
			    this.rightWidth=parseInt((this.rightValue-this.k2)/(this.k3-this.k2)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k3 && this.rightValue < this.k4){
			    this.rightWidth=parseInt((this.rightValue-this.k3)/(this.k4-this.k3)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/2))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k4){
			    this.rightWidth=parseInt((this.rightValue-this.k4)/(this.k5-this.k4)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth-(this.valueWidth/4)) )) + this.widthRem;
			  }
			  this.rightWidth=this.valueWidth-this.rightWidth+this.widthRem+this.widthRem;

			}

			  if(this.leftWidth>this.valueWidth){this.leftWidth=this.valueWidth+this.widthRem}
			  
			if(this.rightValue>=this.rightLimit) this.rightWidth=this.widthRem;
			// Set limits
			if (!this.clearLimits) {
				this.leftBlock.firstChild.nextSibling.innerHTML = this.leftLimit;
				this.rightBlock.firstChild.nextSibling.innerHTML = this.rightLimit;
			}
			// Do it!
			this.setCurrentState();
			this.drawTicks();
			this.onMove();
			// Add handers
			var _this = this;
			this.addHandler (
				document,
				"mousemove",
				function(evt) {
					if (_this.moveState) _this.moveHandler(evt);
					if (_this.moveIntervalState) _this.moveIntervalHandler(evt);
				}
			);
			this.addHandler (
				document,
				"mouseup",
				function(e) {
				    if((_this.moveState=="left"&&_this.leftWidth<=_this.widthRem)||(_this.moveState=="right"&&_this.rightWidth<=_this.widthRem)||(e.target!=_this.centerBlock&&_this.moveIntervalState==true)){
					  _this.itWasMove = false;
				    }
					_this.moveState = false;
				    _this.moveIntervalState = false;	
				}
			);
			this.addHandler (
				this.leftBegun,
				"mousedown",
				function(evt) {
					evt = evt || window.event;
					if (evt.preventDefault) evt.preventDefault();
					evt.returnValue = false;
					_this.moveState = "left";
					_this.x0 = _this.defPosition(evt).x;
					_this.blockX0 = _this.leftWidth;
				}
			);
			this.addHandler (
				this.rightBegun,
				"mousedown",
				function(evt) {
					evt = evt || window.event;
					if (evt.preventDefault) evt.preventDefault();
					evt.returnValue = false;
					_this.moveState = "right";
					_this.x0 = _this.defPosition(evt).x;
					_this.blockX0 = _this.rightWidth;
				}
			);
			this.addHandler (
				this.centerBlock,
				"mousedown",
				function(evt) {
					evt = evt || window.event;
					if (evt.preventDefault) evt.preventDefault();
					evt.returnValue = false;
					_this.moveIntervalState = true;
					_this.intervalWidth = _this.width - _this.rightWidth - _this.leftWidth;
					_this.x0 = _this.defPosition(evt).x;
					_this.rightX0 = _this.rightWidth; 
					_this.leftX0 = _this.leftWidth;
				}
			),
			
			this.addHandler (
				this.centerBlock,
				"click",
				function(evt) {
					if (!_this.itWasMove) _this.clickMove(evt);
					_this.itWasMove = false;
				}
			);
			
			this.addHandler (
				this.leftBlock,
				"click",
				function(evt) {
					if (!_this.itWasMove)_this.clickMoveLeft(evt);
					_this.itWasMove = false;
				}
			);
			this.addHandler (
				this.rightBlock,
				"click",
				function(evt) {
					if (!_this.itWasMove)_this.clickMoveRight(evt);
					_this.itWasMove = false;
				}
			);
		} catch(e) {this.debug([1]);}
	},
	drawTicks : function() {
	    if(this.linear!=true){
	    if (this.showBigTicks) for (var i = 1; i <= this.bigTicks; i++) this.tickDiv.innerHTML += '<div style="left:'+(this.widthRem + i * this.valueWidth / (this.bigTicks + 1))+'px" class="tick"><span>' + getSpace(parseInt(this.leftLimit + i * this.valueInterval / (this.bigTicks + 1))) + '</span></div>';
	    }else{
	    var tt=new Array();
	    tt[1]=this.k2;
	    tt[2]=this.k3;
	    tt[3]=this.k4;
		if (this.showBigTicks) for (var i = 1; i <= this.bigTicks; i++) this.tickDiv.innerHTML += '<div style="left:'+(this.widthRem + i * this.valueWidth / (this.bigTicks + 1))+'px" class="tick"><span>' + getSpace(tt[i]) + '</span></div>';
		}
				
		if (this.showSmallTicks) for (i = 1; i <= (this.smallTicks + 1) * (this.bigTicks + 1) - 1; i++) this.tickDiv.innerHTML += '<div style="left:'+(this.widthRem + i * this.valueWidth / ((this.smallTicks + 1) * (this.bigTicks + 1)))+'px" class="stick"></div>';
	},
	clickMoveRight : function(evt) {
		evt = evt || window.event;
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		var x = this.defPosition(evt).x - this.absPosition(this.rightBlock).x;
		var w = this.rightBlock.offsetWidth;
		if (x <= 0 || w <= 0 || w < x || (w - x) < this.widthRem) return;
		this.rightWidth = (w - x);
		this.rightCounter();

		this.setCurrentState();
		this.onMove();
	},
	clickMoveLeft : function(evt) {
		evt = evt || window.event;
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		var x = this.defPosition(evt).x - this.absPosition(this.leftBlock).x;
		var w = this.leftBlock.offsetWidth;
		if (x <= 0 || w <= 0 || w < x || x < this.widthRem) return;
		this.leftWidth = x;
		this.leftCounter();

		this.setCurrentState();
		this.onMove();
	},
	clickMove : function(evt) {
		evt = evt || window.event;
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		var x = this.defPosition(evt).x - this.absPosition(this.centerBlock).x;
		var w = this.centerBlock.offsetWidth;
		if (x <= 0 || w <= 0 || w < x) return;
		if (x >= w / 2) {
			this.rightWidth += (w - x);
			this.rightCounter();
		} else {
			this.leftWidth += x;
			this.leftCounter();
		}
		this.setCurrentState();
		this.onMove();
	},
	setCurrentState : function() {
		this.leftBlock.style.width = this.leftWidth + "px";
		if (!this.clearValues) this.leftBlock.firstChild.innerHTML = (!this.dual && this.leftWidth > this.width / 2) ? "" : this.leftValue;
		if(!this.dual) {
			var x = this.leftBlock.firstChild.offsetWidth;
			this.leftBlock.firstChild.style.right = (this.widthRem * (1 - 2 * (this.leftWidth - this.widthRem) / this.width) - ((this.leftWidth - this.widthRem) * x / this.width)) + 'px';
		}
		this.rightBlock.style.width = this.rightWidth + "px";
		if (!this.clearValues) this.rightBlock.firstChild.innerHTML = (!this.dual && this.rightWidth >= this.width / 2) ? "" : this.rightValue;
		if(!this.dual) {
			var x = this.rightBlock.firstChild.offsetWidth;
			this.rightBlock.firstChild.style.left = (this.widthRem * (1 - 2 * (this.rightWidth - this.widthRem) / this.width) - ((this.rightWidth - this.widthRem) * x / this.width)) + 'px';
		}
	},
	/* OLD setCurrentState : function() {
		this.leftBlock.style.width = this.leftWidth + "px";
		this.leftBlock.firstChild.innerHTML = (!this.dual && this.leftWidth > this.width / 2) ? "" : this.leftValue;
		this.rightBlock.style.width = this.rightWidth + "px";
		this.rightBlock.firstChild.innerHTML = (!this.dual && this.rightWidth >= this.width / 2) ? "" : this.rightValue;
	},*/
	moveHandler : function(evt) {
		this.itWasMove = true;
		evt = evt || window.event;
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		if (this.moveState == "left") {
			this.leftWidth = this.blockX0 + this.defPosition(evt).x - this.x0;
			this.leftCounter();
		}
		if (this.moveState == "right") {
			this.rightWidth = this.blockX0 + this.x0 - this.defPosition(evt).x;
			this.rightCounter();
		};
		this.setCurrentState();
		this.onMove();
	},
	moveIntervalHandler : function(evt) {
		this.itWasMove = true;
		evt = evt || window.event;
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		var dX = this.defPosition(evt).x - this.x0;
		if (dX > 0) {
			this.rightWidth = this.rightX0 - dX > this.widthRem ? this.rightX0 - dX : this.widthRem;
			this.leftWidth = this.width - this.rightWidth - this.intervalWidth;
		} else {
			this.leftWidth = this.leftX0 + dX > this.widthRem ? this.leftX0 + dX : this.widthRem;
			this.rightWidth = this.width - this.leftWidth - this.intervalWidth;
		}
		this.rightCounter();
		this.leftCounter();
		this.setCurrentState();
		this.onMove();
	},
	updateRightValue : function(rightValue) {
		try {
			this.rightValue = parseInt(rightValue);
			this.rightValue = this.rightValue < this.leftLimit ? this.leftLimit : this.rightValue;
			this.rightValue = this.rightValue > this.rightLimit ? this.rightLimit : this.rightValue;
			if (this.dual) {
				this.rightValue = this.rightValue < this.leftValue ? this.leftValue : this.rightValue;
			} else this.leftValue = this.rightValue;
			if(this.linear!=true){
			  this.rightWidth = this.valueWidth - parseInt((this.rightValue - this.leftLimit) / this.valueInterval * this.valueWidth) + this.widthRem;
			}else{
			  this.k1=this.leftLimit;
			  this.k5=this.rightLimit;
			  if(this.rightValue >= this.k1 && this.rightValue < this.k2){
			    this.rightWidth=parseInt((this.rightValue-this.k1)/(this.k2-this.k1)*(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k2 && this.rightValue < this.k3){
			    this.rightWidth=parseInt((this.rightValue-this.k2)/(this.k3-this.k2)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k3 && this.rightValue < this.k4){
			    this.rightWidth=parseInt((this.rightValue-this.k3)/(this.k4-this.k3)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/2))) + this.widthRem;
			  }
			  if(this.rightValue >= this.k4){
			    this.rightWidth=parseInt((this.rightValue-this.k4)/(this.k5-this.k4)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth-(this.valueWidth/4)) )) + this.widthRem;
			  }
			  this.rightWidth=this.valueWidth-this.rightWidth+this.widthRem+this.widthRem;
			}
			this.rightWidth = isNaN(this.rightWidth) ? this.widthRem : this.rightWidth;
			if (!this.dual) this.leftWidth = this.width - this.rightWidth;
			this.setCurrentState();
		} catch(e) {}
	},
	rightCounter : function() {
		if (this.dual) {
			this.rightWidth = this.rightWidth > this.width - this.leftWidth ? this.width - this.leftWidth : this.rightWidth;
			this.rightWidth = this.rightWidth < this.widthRem ? this.widthRem : this.rightWidth;
			
			if(this.rightWidth - this.widthRem!=0){
			var sqv=Math.pow(Math.pow(this.rightLimit,1/this.k) / (this.valueWidth+6)*(this.valueWidth+6 - (this.rightWidth - this.widthRem)),this.k)+this.leftLimit;
			
			if(parseInt(sqv)>this.rightLimit){
			  this.rightValue=this.rightLimit;
			}else{
			  if(this.linear!=true){
			    this.rightValue = this.leftLimit + this.valueInterval - parseInt((this.rightWidth - this.widthRem) / this.valueWidth * this.valueInterval);
			  }else{
			    this.k1=this.leftLimit;
			    this.k5=this.rightLimit;
			    var wd = this.valueWidth-this.rightWidth+this.widthRem;
			    var oneSize=parseInt(Math.round(this.valueWidth/4));
			    if(wd<=oneSize){
			      this.rightValue = this.k1 - this.leftLimit + parseInt(wd*((this.k2-this.k1+this.leftLimit)/oneSize));
			    }
			    if(wd<=parseInt(this.valueWidth/2)&&wd>oneSize){
			      this.rightValue = this.k2 + parseInt((wd-oneSize)*((this.k3-this.k2)/oneSize));
			    }
			    if(wd<=parseInt(this.valueWidth-oneSize)&&wd>parseInt(this.valueWidth/2)){
			      this.rightValue = this.k3 + parseInt((wd-(oneSize*2))*((this.k4-this.k3)/oneSize));
			    }
			    if(wd<=this.valueWidth&&wd>parseInt(this.valueWidth-oneSize)){
			      this.rightValue = this.k4 + parseInt((wd-(oneSize*3))*((this.k5-this.k4)/oneSize));
			    }
			  }
			  //Rounding
			  if(this.rightValue>100&&this.rightValue<2000) this.rightValue=Math.round(this.rightValue/10)*10;
			  if(this.rightValue>2000&&this.rightValue<5000) this.rightValue=Math.round(this.rightValue/50)*50;
			  if(this.rightValue>5000&&this.rightValue<100000) this.rightValue=Math.round(this.rightValue/100)*100;
			  if(this.rightValue>100000&&this.rightValue<10000000) this.rightValue=Math.round(this.rightValue/1000)*1000;
			  if(this.rightValue>10000000&&this.rightValue<1000000000) this.rightValue=Math.round(this.rightValue/10000)*10000;
			  
			  if (this.rightValue > this.rightLimit) this.rightValue = this.rightLimit;
			}
			}else{
			  this.rightValue=this.rightLimit;
			}
			if (this.roundUp) this.rightValue = parseInt(this.rightValue / this.roundUp) * this.roundUp;
			if (this.leftWidth + this.rightWidth >= this.width) this.rightValue = this.leftValue;
		} else {
			this.rightWidth = this.rightWidth > (this.width - this.widthRem) ? this.width - this.widthRem : this.rightWidth;
			this.rightWidth = this.rightWidth < this.widthRem ? this.widthRem : this.rightWidth;
			this.leftWidth = this.width - this.rightWidth;
			this.rightValue = this.leftLimit + this.valueInterval - parseInt((this.rightWidth - this.widthRem) / this.valueWidth * this.valueInterval);
			if (this.roundUp) this.rightValue = parseInt(this.rightValue / this.roundUp) * this.roundUp;
			this.leftValue = this.rightValue;
		}
		this.updateRightValue(this.rightValue);
		//this.rightValue=spacer2000(this.rightValue);
	},
	updateLeftValue : function(leftValue) {
		try {
			this.leftValue = parseInt(leftValue);
			this.leftValue = this.leftValue < this.leftLimit ? this.leftLimit : this.leftValue;
			this.leftValue = this.leftValue > this.rightLimit ? this.rightLimit : this.leftValue;
			if (this.dual) {
			  this.leftValue = this.rightValue < this.leftValue ? this.rightValue : this.leftValue;
			} else this.rightValue = this.leftValue;
			if(this.linear!=true){
			  this.leftWidth = parseInt((this.leftValue - this.leftLimit) / this.valueInterval * this.valueWidth) + this.widthRem;
			}else{
			  this.k1=this.leftLimit;
			  this.k5=this.rightLimit;
			  if(this.leftValue >= this.k1 && this.leftValue < this.k2){
			    this.leftWidth=parseInt((this.leftValue-this.k1)/(this.k2-this.k1)*(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k2 && this.leftValue < this.k3){
			    this.leftWidth=parseInt((this.leftValue-this.k2)/(this.k3-this.k2)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/4))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k3 && this.leftValue < this.k4){
			    this.leftWidth=parseInt((this.leftValue-this.k3)/(this.k4-this.k3)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth/2))) + this.widthRem;
			  }
			  if(this.leftValue >= this.k4){
			    this.leftWidth=parseInt((this.leftValue-this.k4)/(this.k5-this.k4)*(Math.round(this.valueWidth/4))+(Math.round(this.valueWidth-(this.valueWidth/4)) )) + this.widthRem;
			  }
			}	
			this.leftWidth = isNaN(this.leftWidth) ? this.widthRem : this.leftWidth;
			if (!this.dual) this.rightWidth = this.width - this.leftWidth;
			this.setCurrentState();
		} catch(e) {}
	},
	leftCounter : function() {
		if (this.dual) {
			this.leftWidth = this.leftWidth > this.width - this.rightWidth ? this.width - this.rightWidth : this.leftWidth;
			this.leftWidth = this.leftWidth < this.widthRem ? this.widthRem : this.leftWidth;
			this.leftValue = this.leftLimit + parseInt((this.leftWidth - this.widthRem) / this.valueWidth * this.valueInterval);
			
			if(this.leftWidth - this.widthRem!=0){
			var sqv=Math.pow(Math.pow(this.rightLimit,1/this.k) / (this.valueWidth+6) * (this.leftWidth),this.k)+this.leftLimit;
			
			if(parseInt(sqv)<this.leftLimit){
			  this.leftValue=this.leftLimit;
			}else{
			  if(this.linear!=true){
			    this.leftValue = this.leftLimit + parseInt((this.leftWidth - this.widthRem) / this.valueWidth * this.valueInterval);
			  }else{
			    this.k1=this.leftLimit;
			    this.k5=this.rightLimit;
			    var wd = this.leftWidth-this.widthRem;
			    var oneSize=parseInt(Math.round(this.valueWidth/4));
			    if(wd<=oneSize){
			      this.leftValue = this.k1 - this.leftLimit + parseInt(wd*((this.k2-this.k1+this.leftLimit)/oneSize));
			    }
			    if(wd<=parseInt(this.valueWidth/2)&&wd>oneSize){
			      this.leftValue = this.k2 + parseInt((wd-oneSize)*((this.k3-this.k2)/oneSize));
			    }
			    if(wd<=parseInt(this.valueWidth-oneSize)&&wd>parseInt(this.valueWidth/2)){
			      this.leftValue = this.k3 + parseInt((wd-(oneSize*2))*((this.k4-this.k3)/oneSize));
			    }
			    if(wd<=this.valueWidth&&wd>parseInt(this.valueWidth-oneSize)){
			      this.leftValue = this.k4 + parseInt((wd-(oneSize*3))*((this.k5-this.k4)/oneSize));
			    }
			  }
			  //Rounding
			  if(this.leftValue>100&&this.leftValue<2000) this.leftValue=Math.round(this.leftValue/10)*10;
			  if(this.leftValue>2000&&this.leftValue<5000) this.leftValue=Math.round(this.leftValue/50)*50;
			  if(this.leftValue>5000&&this.leftValue<100000) this.leftValue=Math.round(this.leftValue/100)*100;
			  if(this.leftValue>100000&&this.leftValue<10000000) this.leftValue=Math.round(this.leftValue/1000)*1000;
			  if(this.leftValue>10000000&&this.leftValue<1000000000) this.leftValue=Math.round(this.leftValue/10000)*10000;
			  
			  if (this.leftValue < this.leftLimit) this.leftValue = this.leftLimit;
			  
			}
			}else{
			  this.leftValue=this.leftLimit;
			}
			this.updateLeftValue(this.leftValue);
			if (this.roundUp) this.leftValue = parseInt(this.leftValue / this.roundUp) * this.roundUp;
			if (this.leftWidth + this.rightWidth >= this.width) this.leftValue = this.rightValue;
		} else {
			this.leftWidth = this.leftWidth > (this.width - this.widthRem) ? this.width - this.widthRem : this.leftWidth;
			this.leftWidth = this.leftWidth < this.widthRem ? this.widthRem : this.leftWidth;
			this.rightWidth = this.width - this.leftWidth;
			this.leftValue = this.leftLimit + parseInt((this.leftWidth - this.widthRem) / this.valueWidth * this.valueInterval);
			if (this.roundUp) this.leftValue = parseInt(this.leftValue / this.roundUp) * this.roundUp;
			this.rightValue = this.leftValue;
		}
		//this.leftValue=spacer2000(this.leftValue);
	}
}
