/*

listCroper (version 1.0) by Riki "Fczbkk" Fridrich, 2003
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/list_croper/

Pozadovane kniznice:
- dom						http://www.fczbkk.com/js/dom/

*/

/*
TODO:
- komentare
- moznost kustomizacie pri inicializacii
- zaciatok / koniec
*/

listCroper = {
	
	displayedItems :	1,
	step :				1,
	arrowClass :		"listCroperArrows",
	upArrow :			{
							img : "pic/up.gif",
							text : "Up",
							title : "Move page up",
							position : false
	},
	downArrow :			{
							img : "pic/down.gif",
							text : "Down",
							title : "Move page down",
							position : true
	},
	
	init : function (elm) {
		if (elm && elm.tagName && ((elm.tagName.toLowerCase() == "ol") || (elm.tagName.toLowerCase() == "ul"))) {
			
			elm.listCroperDetails = {
				actualPosition : 0
			};
			
			// vytvorime drziak sipiek
			var arrowHolder = document.createElement("div");
			arrowHolder.className = listCroper.arrowClass;

			// pridame posuvne sipky
			if (listCroper.upArrow.position == listCroper.downArrow.position) {
				var holder = elm.parentNode.insertBefore(arrowHolder.cloneNode(true), (listCroper.upArrow.position) ? elm.nextSibling : elm);
				elm.listCroperDetails.downArrow = listCroper.insertArrow(listCroper.downArrow, holder, elm, true);
				elm.listCroperDetails.upArrow = listCroper.insertArrow(listCroper.upArrow, holder, elm, false);
			} else {
				var upHolder = elm.parentNode.insertBefore(arrowHolder.cloneNode(true), (listCroper.upArrow.position) ? elm.nextSibling : elm);
				var downHolder = elm.parentNode.insertBefore(arrowHolder.cloneNode(true), (listCroper.downArrow.position) ? elm.nextSibling : elm);
				elm.listCroperDetails.downArrow = listCroper.insertArrow(listCroper.downArrow, downHolder, elm, true);
				elm.listCroperDetails.upArrow = listCroper.insertArrow(listCroper.upArrow, upHolder,elm, false);
			}
			
			var list = elm.getElementsByTagName("li");
			for (var i = 0; i < list.length; i++) {
				list[i].style.display = (i < listCroper.displayedItems) ? "block" : "none";
			}
			
			elm.listCroperDetails.upArrow.style.visibility = "hidden";
			
			return true;
			
		}
		return false;
	},
	
	insertArrow : function (arrow, holder, list, direction) {
		if (arrow && holder && list) {
			var arrowLink = document.createElement("a");
			arrowLink.href = "javascript:void(0);";
			arrowLink.title = arrow.title;
			arrowLink.listCroperDetails = {
				list :		list,
				direction :	direction
			}
			
			if (arrow.img) {
				// vytvorime obrazkovy odkaz
				var img = document.createElement("img");
				img.src = arrow.img;
				img.alt = arrow.text;
				arrowLink.appendChild(img);
			} else {
				// vytvorime textovy odkaz
				arrowLink.appendChild(document.createTextNode(arrow.text));
			}
			
			evt.add(arrowLink, "click", (document.all) ? function() {listCroper.moveList(arrowLink)} : listCroper.moveList);
			
			holder.appendChild(arrowLink);
			return arrowLink;
		}
		return false;
	},
	
	moveList : function (elm) {
		if (!document.all) {elm = this;}
		if (elm.listCroperDetails) {
			var items = elm.listCroperDetails.list.getElementsByTagName("li");
			var step = (elm.listCroperDetails.direction) ? listCroper.step : 0 - listCroper.step;
			var newPosition = elm.listCroperDetails.list.listCroperDetails.actualPosition + step;
			if (newPosition + listCroper.displayedItems > items.length) {newPosition = items.length - listCroper.displayedItems;}
			if (newPosition < 0) {newPosition = 0;}
			
			for (var i = 0; i < items.length; i++) {
				items[i].style.display = ((i >= newPosition) && (i < newPosition + listCroper.displayedItems)) ? "block" : "none";
			}
			
			elm.listCroperDetails.list.listCroperDetails.actualPosition = newPosition;
			elm.listCroperDetails.list.listCroperDetails.upArrow.style.visibility = (newPosition == 0) ? "hidden" : "visible";
			elm.listCroperDetails.list.listCroperDetails.downArrow.style.visibility = (newPosition == items.length - listCroper.displayedItems) ? "hidden" : "visible";
			
			return true;
		}
		return false;
	}
	
}
