function fix(e) {
	if (typeof e == 'undefined') e = window.event;
	if (typeof e.target == 'undefined') e.target = e.srcElement;
	if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
	if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;

	if (!e.preventDefault) e.preventDefault = function() {
		e.returnValue = false;
	}
	return e;
}

function prettySelectBox () {
 var parent = this;
 var ieHeight = -1;

	this.over = function(e) {
		e = fix(e);
		li = e.target;
		Element.removeClassName(parent.ul.selected, 'hover');
		Element.addClassName(li, 'hover');
	}

	this.out = function(e) {
		e = fix(e);
		li = e.target;
		if ((parent.ul.selected!=li)&&(Element.hasClassName(li, 'hover'))) Element.removeClassName(li, 'hover');
	}

	this.hide = function(e) {
		e = fix(e);
		var ul = document.getElementsByTagName('UL');
		if (e.target.parentNode != parent.ul) {
			if (parent.ul.unpacked) {
				// pro IE
				if (ieHeight!=-1) {parent.ul.style.height = ieHeight;} else {parent.ul.style.overflow = 'hidden';}
				parent.ul.unpacked = false;
				Element.removeClassName(parent.ul, 'prettySelectOpened');
			}
		}
	}

	this.action = function(e) {
		e = fix(e);
		li = e.target;

		if (parent.ul.unpacked == false) {
			if (ieHeight!=-1) {parent.ul.style.height = 'auto';} else {parent.ul.style.overflow = 'visible';}
			parent.ul.unpacked = true;
			Element.addClassName(parent.ul, 'prettySelectOpened');
		}
		else {
			if (ieHeight!=-1) {parent.ul.style.height = ieHeight;} else {parent.ul.style.overflow = 'hidden';}
			parent.ul.unpacked = false;
			Element.removeClassName(parent.ul, 'prettySelectOpened');
			if (li.order >= 0) {
				parent.ul.firstChild.firstChild.nodeValue = li.firstChild.nodeValue;
				parent.select.selectedIndex = li.order;
				if (parent.select.onchange) parent.select.onchange();
				Element.removeClassName(li.selected, 'hover');
				parent.ul.selected = li;
				Element.addClassName(parent.ul.selected, 'hover');
				if (parent.selectedClass) {Element.removeClassName(parent.ul.firstChild, parent.selectedClass); parent.selectedClass = false;}
				if (parent.select[li.order].className!="") {
					parent.selectedClass = parent.select[li.order].className;
					Element.addClassName(parent.ul.firstChild, parent.selectedClass);
				}

				/* fix pro skryti "vybrane" polozky ze seznamu */
				var listItems = parent.ul.getElementsByTagName('LI');
				for (i = 0; i < listItems.length; i++) {
					Element.removeClassName(listItems[i], 'hide');
					Element.removeClassName(listItems[i], 'last');
				}

				var lastLi = listItems.length - 1;
				if (li.order == (lastLi-1)) {
					lastLi = lastLi - 1;
				}

				Element.addClassName(listItems[lastLi], 'last');
				Element.addClassName(listItems[li.order + 1], 'hide');
			}
		}
	}

	this.create = function(select) {
		if (document.createElement && document.createTextNode) {
			var o = select.getElementsByTagName('OPTION');
			parent.ul = document.createElement('UL');
			parent.select = select;

			/* hack kvuli korektnimu zobrazovani segmentSelectu */
			if (select.name == "segmentSelect") {
				var firstOption = 0;
				var secondOption = 1;
			} else {
				var firstOption = 1;
				var secondOption = 2;
			}

			for (var i = firstOption; i < o.length ;i++) {
				if (i == firstOption) {
					var li = document.createElement('LI');
					var t = document.createTextNode(o[select.selectedIndex].text);
					li.className = 'first';
					li.order = -1;
					li.appendChild(t);
					if (o[select.selectedIndex].className!="") {
						Element.addClassName(li, o[select.selectedIndex].className);
						parent.selectedClass = o[select.selectedIndex].className;
					}
					else {
						parent.selectedClass = false;
					}
					parent.ul.appendChild(li);
					Event.observe(li, "click", parent.action);
				}

				Element.addClassName(o[select.selectedIndex], 'hide');

				if (i == secondOption) {
					Element.addClassName(li,"second");
				}
				var li = document.createElement('LI');
				li.order = i;
				var t = document.createTextNode(o[i].text);
				li.appendChild(t);
				parent.ul.appendChild(li);
				Element.addClassName(li, o[i].className);
				Event.observe(li, "click", parent.action);
				Event.observe(li, "mouseover", parent.over);
				Event.observe(li, "mouseout", parent.out);
			}
			parent.ul.selected = li;
			Element.addClassName(parent.ul.selected, 'last');
			parent.ul.className = select.className;
			parent.ul.unpacked  = false;
			//document.getElementsByTagName("body")[0].appendChild(parent.ul);
			Element.addClassName(parent.ul,'prettySegmentSelect');
			var holder = document.getElementById(select.id+"Holder");
			holder.style.position = "relative";
			Element.addClassName(holder,'fixPrettyHolder');
			holder.appendChild(parent.ul);
			Event.observe(document , "click", parent.hide);
			// schova select
			var left = fixOffsetLeft(select);
			var top = fixOffsetTop(select);
			parent.ul.style.top = top;
			parent.ul.style.left = left;
			select.style.visibility = "hidden";
			select.style.display = "none";
			if (parseInt(parent.ul.style.height) > 0) {ieHeight = parent.ul.style.height;} // pro IE, v tom blbne hover pri overflow: visible;
		}
 }
}

// tyto dve funkce napsal Peter-Paul Koch viz http://www.quirksmode.org/js/findpos.html
function fixOffsetLeft(obj) {var curleft = 0;if (obj.offsetParent){while(obj.offsetParent) {curleft+=obj.offsetLeft;obj=obj.offsetParent;}}else if (obj.x)	curleft += obj.x;return curleft;}
function fixOffsetTop(obj)  {var curtop = 0; if (obj.offsetParent){while (obj.offsetParent){curtop +=obj.offsetTop; obj=obj.offsetParent;}}else if (obj.y) curtop += obj.y;return curtop;}


function initSelectBox() {
	var selects = document.getElementsByTagName("select");
	for (i = 0 ; i < selects.length ; i++) {
		if (Element.hasClassName(selects[i],'prettySelect')) {
			selects[i].selectBox = new prettySelectBox();
			selects[i].selectBox.create(selects[i]);
		}
	}
}
/*
<!-- monitoring
__ETN_.O.K.__
// monitoring -->
*/
