/*

slideSet (version 0.9) by Riki "Fczbkk" Fridrich, 2004
http://www.fczbkk.com/, mailto:riki@fczbkk.com

Tento skript mozes volne pouzit a modifikovat bez povolenia.
Budem rad, ak mi o tom das vediet, pripadne mi posles URL stranky, kde
ho pouzivas. Ak sa ti podari ho nejako vylepsit, rozsirit alebo v nom
najdes a opravis nejaku chybu, budem ti vdacny, ak ma o tom budes informovat.

Aktualnu verziu tohto skriptu vzdy najdes na adrese:
http://www.fczbkk.com/js/slide_set/

Pozadovane kniznice:
- dom						http://www.fczbkk.com/js/dom/

*/

/*
TODO:
- poriadne to pretestovat v Safari a zistit, na com sa to seka (skript funguje, ale hrozne divne)
- kontrola vstupnych udajov pri inicializacii
- vylepsit moznost umiestnit slider mimo policko (vyriesilo by to problem so Safari)
- poriesit zrusenie oznacovania obsahu dokumentu pri tahani slideru mimo policko
*/

slideSet = {
	
	// default
	increment : 1,
	sensitivity : 10,
	
	// icon
	icon : "slide_set.gif",
	
	// vars
	startingPoint : null,
	startingValue : null,
	activeElm : null,
	
	init : function (elm, increment, sensitivity, min, max, icon) {
		if (elm) {
			// TODO: kontrola typu elementu
			
			if (!increment) {increment = slideSet.increment;}
			if (!sensitivity) {sensitivity = slideSet.sensitivity;}
			if (!icon) {icon = slideSet.icon;}
			
			// ak policko uz ma ikonu, odstranime ju
			if (elm.slideSetIcon) {
				var oldIcon = elm.slideSetIcon;
				oldIcon.parentNode.removeNode(oldIcon);
			}
			
			// vytvorime ikonu
			// pozn.: Ikona nemoze byt obrazok, robi to problemy pri odchytavani eventu. Vhodnejsi by bol DIV.
			var newIcon = document.createElement("div");
			newIcon.style.width = "15px";
			newIcon.style.height = "15px";
			newIcon.style.backgroundImage = "url(" + icon + ")";
			newIcon.style.cursor = "n-resize";

			newIcon.slideSetElm = elm;
			elm.slideSetElm = elm;
			
			elm.slideSetIncrement = increment;
			elm.slideSetSensitivity = sensitivity;
			elm.slideSetMin = min;
			elm.slideSetMax = max;
			// zavesime na ikonu akcie
			evt.add(newIcon, "mousedown", slideSet.start);
			evt.add(elm, "mousedown", slideSet.start);
			
			// pripojime ikonu za policko
//			elm.parentNode.appendChild(newIcon);

		}
		return false;
	},
	
	start : function(e) {
		e = evt.fix(e);
		evt.add(document, "mouseup", slideSet.end);
		evt.add(document, "mousemove", slideSet.move);
		
		var elm = e.target.slideSetElm;
		if (elm) {
			slideSet.activeElm = elm;
			slideSet.startingPoint = e.clientY;
			slideSet.startingValue = elm.value;
//			debug("starting point: " + slideSet.startingPoint);
			return true;
		}
		return false;
	},
	
	end : function(e) {
		e = evt.fix(e);
		evt.remove(document, "mouseup", slideSet.end);
		evt.remove(document, "mousemove", slideSet.move);
		slideSet.setValue(e.clientY);
//		debug("starting point: " + slideSet.startingPoint + "<br />skoncil som: " + e.clientY);
	},
	
	move : function(e) {
		e = evt.fix(e);
		slideSet.setValue(e.clientY);
//		debug("starting point: " + slideSet.startingPoint + "<br />hybem sa: " + e.clientY);
	},
	
	setValue : function(pos) {
		var elm = slideSet.activeElm;
		var pnt = slideSet.startingPoint;
		var val = slideSet.startingValue;
		// TODO: validacia vstupov
		if (isNaN(val)) {
			val = 0;
		}
		var newVal = 0;
		newVal = (val * 1) - (Math.round((pos - pnt) / elm.slideSetSensitivity) * elm.slideSetIncrement);
		if (!isNaN(elm.slideSetMax) && (newVal > elm.slideSetMax)) {newVal = elm.slideSetMax;}
		if (!isNaN(elm.slideSetMin) && (newVal < elm.slideSetMin)) {newVal = elm.slideSetMin;}
		elm.value = newVal;
	},
	
	nothing : function(e) {
		e = evt.fix(e);
		e.preventDefault();
	}
	
}

function debug(txt) {
	document.getElementById("debug").innerHTML = txt;
}