function Slider(elemId, min, max, val){
	var d=document;
	this.min = min;
	this.max = max;
	this.value= val?val:min;
	this.parent = d.getElementById(elemId);
	
	this.onChange = function(value){console.info(value);};
	
	this.rowWidth = 88;
	this.buttonWidth = 5; //kes@ + 1px (border)
	
	this.init = function(){
		this.body = d.createElement('div');
		this.body.className = 'sliderBody';
		this.row = d.createElement('div');
		this.row.className = 'sliderRow';
		this.button = d.createElement('div');
		this.button.className = 'sliderButton';
		this.layer =  d.createElement('div');
		this.layer.className = 'sliderLayer';
		
		var l = (this.value-this.min) / 
				(this.max-this.min) * this.rowWidth;
		
		this.button.style.left = (l+this.buttonWidth) + 'px';
		
		this.attachEvents();
		
		this.body.appendChild(this.row);
		this.body.appendChild(this.button);
		this.body.appendChild(this.layer);
		this.parent.appendChild(this.body);
		this.parent.slider=this; //Kpcnum enq DOMin
	};
	this.getE = function(bln){ //getEventHandler for s.isClicked
		return function(e){
			var s = this.parentNode.parentNode.slider;
			if(!s) s=this.parentNode.slider;
			s.isClicked = bln;
		}
	};
	this.attachEvents = function(){
		this.layer.onmousedown = this.getE(true);
		this.layer.onmouseup = this.getE(false);
		this.layer.onmouseout = this.getE(false);
		
		this.layer.f = function(e){
			e = e ? e:window.event;
			var s = this.parentNode.parentNode.slider;
			
			if(e.type=="mousemove" && !s.isClicked) return false;
			s.moveTo(e.layerX?e.layerX:e.offsetX);
		};
		this.layer.onmousemove = this.layer.f;
		this.layer.onclick = this.layer.f;
	};
	this.determineValue = function(){
		var l = this.getStyle(this.button, 'left');
		var k = l/(this.body.offsetWidth-2*this.buttonWidth);
		this.value = Math.round(min + k*(max-min));
		
		this.onChange(this.value);
	};
	this.moveTo = function(x){
		var l = x - this.buttonWidth; //border
		var mx = this.body.offsetWidth - 2*this.buttonWidth;
		
		if(l>mx) l=mx;
		if(l<0) l=0;
		this.button.style.left = l + 'px';
		
		this.determineValue();
	};
	
	this.init();
}

Slider.prototype.getStyle = function(el,s){
	return Math.round( parseFloat(el.style[s])*100 ) / 100;
};

/*
	this.changeStyle = function(el, s, v, measure){
		var a = this.getStyle(el, s);
		el.style[s] = a + v + measure;;
	};
*/