/**
 * Klasa suwaka do ustawiania opcji
 * @param {Object} elem
 * @param {Object} options opcje suwaka przyjmuje::
 * 
 *    horizontal - jeżeli ma true to suwak jest poziomy, jeżeli false pionowy
 *    min - minimalny rozmiar w px domyślnie 0
 *    max - maksymalny rozmiar w px domyślnie 100
 *    min_val - minimalna wartość przypisywana do ukrytego inputa, domyślnie 0
 *    max_val - maksymalna wartosc przypisywana do ukrytego inputa, domyslnie 1.0
 *    tick_is_relative - jeżeli chwytak ma position relative bezpośrednio do tła należy ustawić na true (domyślna wartość) w przeciwnym przypadku jego położenie będzie osobno wyliczane
 *    tickoffset - przesunięcie ticka, jeżeli chwytak nie jest relative do kontenera z divem paska może być konieczne dostrojenie jego położenia
 */
function ruler(elem, options){
	
	//ustawienie domyślnych ustawień
	this.local_init = function(){
		this.horizontal = this.options.horizontal?true:false;
		this.vertical = !this.horizontal;
		this.tick_is_not_relative = this.options.tick_is_relative?false:true;
		this.min = this.options.min?this.options.min:0;
		this.max = this.options.max?this.options.max:100;
		this.min_val = this.options.min_val?this.options.min_val:0;
		this.max_val = this.options.max_val?this.options.max_val:1.0;
		this.tickoffset = this.options.tickoffset?this.options.tickoffset:0
		var elems = this.elem.getElementsByTagName('input');
		this.input = false;
		for(var i=0;i<elems.length && !this.input;i++){
			if(elems[i].type=='hidden')
				this.input = elems[i];
		}
		this.sdpos = null;
		this.parentpos = null;
		
		if (options.noparent) {
			sibilings = this.elem.parentNode.childNodes;
			this.parentNode = false;
			for (var i = 0; i < sibilings.length && (!this.parentNode); i++) {
				if (obtainClass(sibilings[i], options.noparent)) {
					this.parentNode = sibilings[i];
				}
			}
		}
		else 
			this.parentNode = this.elem.parentNode;
	}
	
	this.getValue = function(poz){
		return ((poz-this.min)/(this.max-this.min))*(this.max_val-this.min_val)+this.min_val;
	}
		
	this.getBoundary = function(val){
		if(val<this.min) return this.min;
		if(val>this.max) return this.max;
		return val;
	}	

	this.init(elem, options);
	this.local_init();

	this.move = function(x, y){
		if(!this.tick_is_not_relative)
			this.setTickPos(x,y);
		this.setParentSize(x,y);
		if(this.input)	this.input.value = this.getValue(this.getPos(x,y));
	}

	this.stopdrag = function(x,y){
	}
		
	if (this.horizontal) {
		this.setParentSize = function(x,y){
			this.parentNode.style.width = this.getPos(x,y)+'px';
		}
		
		this.setTickPos = function(x,y){
			this.elem.style.left = this.getBoundary((x-this.sdpos))+this.tickoffset + 'px';
		}
		
		this.getPos = function(x,y){
			
			return this.getBoundary( (x-this.sdpos))
		}
		
		this.startdrag = function(x,y){
			if(this.sdpos==null) this.sdpos=x;
			if(this.parentpos==null) this.parentpos=parseInt(this.parentNode.style.width);
			if(isNaN(this.parentpos)) this.parentpos=0;
			
		}	
	}
	else {
		this.setParentSize = function(x,y){
			this.parentNode.style.height = this.getPos(x,y)+'px';
		}
		
		this.setTickPos = function(x,y){
			this.elem.style.top = this.getBoundary(y-this.sdpos)+this.tickoffset + 'px';
		}
		
		this.getPos = function(x,y){
			return this.getBoundary(this.parentpos + (this.sdpos-y))
		}
		
		this.startdrag = function(x,y){
			if(this.sdpos==null) this.sdpos=y;
			if(this.parentpos==null) this.parentpos=parseInt(this.parentNode.style.height);
			if(isNaN(this.parentpos)) this.parentpos=0;
		}	
	}

	
}

ruler.prototype = new draggable;