/*
+---------------------------+
|  UL drop-down menu v 1.1  |
|  (c)2004, design by wiki  |
|  url:  http://wiki.d2.cz  |
+---------------------------+
*/

var startJS = false,
    cssLink = document.createElement('link');

cssLink.setAttribute('rel', 'stylesheet');
cssLink.type = 'text/css';
cssLink.href = '/css/menu.css';

if (document.getElementsByTagName("head")[0].appendChild(cssLink)) {
    startJS = true;
}

function styl() {
	if (!startJS) return false;
	if (!document.styleSheets) return true;
	return !document.styleSheets[0].disabled;
}

IE=(navigator.appName=="Microsoft Internet Explorer")?true:false;
if (IE) {
	s=navigator.appVersion;
	a = s.indexOf("MSIE");
	b = s.indexOf(";",a);
	IEversion = parseFloat(s.substring(a+4,b));
}

/*-[ menu ]--------------------------------------------------*/

var menuCloseDelay = 400;

var objMenu = new Array();
var lastEl = "";
var lastLevel = 0;
var lastA = "";
var closeOkay = true;
var cMenuTimer = null;
var clicked = false;


if (document.getElementById && styl()) {
	//window.onload = postDrawMenu;
	document.onmousemove = findMenu;
}


function postDrawMenu() {
	goDOMmenu(document.getElementsByTagName("body")[0].childNodes)
}

function goDOMmenu(el,inmenu,intree,inonclick){
	var i;
	for(i = 0; i<el.length; i++){
		if (el[i].tagName!=null && el[i].tagName.toLowerCase()=="ul") {
			if (hasClassName(el[i], "menu")) {
				inmenu = true;
				if (hasClassName(el[i], "onclick")) inonclick = true;
			}
			if (hasClassName(el[i], "tree")) intree = true;
			if (inmenu) {
				var lp = document.createElement("li");
				lp.className="last";
				el[i].appendChild(lp);
				
				if (!hasClassName(el[i], "menu")) {
					ap = el[i].parentNode.getElementsByTagName("a");
					if (ap.length > 0) {
						var dart = document.createElement("span");
						dart.className="menu-dart";
						//ap[0].appendChild(dart);
						ap[0].insertBefore(dart,ap[0].firstChild);
						if (inonclick)
							ap[0].onclick=menuOnClick;
					}
				}
			}

			if (intree) {
				if (!hasClassName(el[i], "tree")) {
					ap = el[i].parentNode.getElementsByTagName("a");
					if (ap.length > 0) {
						var dart = document.createElement("span");
						dart.className="menu-dart";
						//ap[0].appendChild(dart);
						ap[0].insertBefore(dart,ap[0].firstChild);
						ap[0].onclick=treeOnClick;
					}
				}
			}
			
		}
		if (intree && el[i].tagName!=null && el[i].tagName.toLowerCase()=="a") {
			el[i].onmouseover=treeOnOver;
			el[i].onmouseout=treeOnOut;
		}

		if (el[i].childNodes.length>0){
			goDOMmenu(el[i].childNodes,inmenu,intree,inonclick);
		}
	}
}

function findMenu(event) {
	evnt = eval((document.all)?"window.event.srcElement":"event.target");
	if (evnt != lastEl) {
		ul = evnt;
		var level = 0;
		while (ul = findParentTagName(ul,"ul")) {
			level++;
			if (hasClassName(ul,"menu")) break;
			ul = ul.parentNode;
		};
		
		if (lastA) {
			removeClassName(lastA,"over");
			lastA = "";
		}

		if (ul) {

			if (evnt.tagName.toLowerCase() != "ul") {

				noTimerClose();

				if (objMenu.length > level-1) {
					hideMenu(level-1);
				}
				
				if (li = findParentTagName(evnt,"li")) {
					a_a = li.getElementsByTagName("a");
					if (a_a.length > 0) {
						a = a_a[0];
						if (!hasClassName(a,"over")) {
							addClassName(a,"over");
							lastA = a;
						}
					}
					
					if (hasClassName(ul,"onclick")) {
						if (clicked) openMenu(li);
					}
					else openMenu(li);

				}
			}		
		}
		else {
			timeHideMenu();
		}
	lastEl = evnt;
	}
}

function openMenu(li) {
	ul_a = li.getElementsByTagName("ul");
	if (ul_a.length > 0) {
		ul = ul_a[0];
		if (!hasClassName(ul,"show")) {
			addClassName(ul,"show");
			putIframe(ul);
			addClassName(a,"open");
			objMenu[objMenu.length]=ul;
		}
	}

}

function hideMenu(level) {
 	if (arguments.length == 0) level = 0;
	while (objMenu.length > level) {
		popped = objMenu[objMenu.length-1];
		objMenu = objMenu.slice(0,objMenu.length-1);
		removeIframe(popped);
		removeClassName(popped,"show");
		li = popped.parentNode;
		a_a = li.getElementsByTagName("a");
		if (a_a.length > 0) {
			a = a_a[0];
			if (hasClassName(a,"open")) {
				removeClassName(a,"open");
			}
		}
	}
}

function timeHideMenu() {
    if(!closeOkay) {
        closeOkay=true;
        cMenuTimer=setTimeout("closeMenu()",menuCloseDelay);
    }
}

function closeMenu() {
    clearTimeout(cMenuTimer);
    hideMenu();
    closeOkay=false;
	clicked = false;
}

function noTimerClose() {
	closeOkay = false;
	clearTimeout(cMenuTimer);
}


function findParentTagName(el,name) {
	while (el !=null && el.parentNode != null && el.tagName.toLowerCase() != name) {
		el = el.parentNode;
	}
	if (el !=null && el.parentNode != null)	return el;
	else return false;
}


function menuOnClick() {
	return menuClick(this);
}

function menuClick(evnt) {
	evnt.blur();
	clicked=true;
	
	if (li = findParentTagName(evnt,"li")) openMenu(li);


	return false;
}

/*-----------------------------------------------------------*/

function treeOnClick() {
	return treeClick(this);
}

function treeClick(el) {
	if (li = findParentTagName(el,"li")) {
		ul_a = li.getElementsByTagName("ul");
		if (ul_a.length > 0) {
			ul = ul_a[0];
			if (!hasClassName(ul,"show")) {
				addClassName(ul,"show");
				addClassName(el,"open");
			}
			else {
				removeClassName(ul,"show");
				removeClassName(el,"open");
			}
		}
	}
	return false;
}

function treeOnOver() {
	treeOver(this);
}

function treeOnOut() {
	treeOut(this);
}

function treeOver(el) {
	addClassName(el,"over");
}

function treeOut(el) {
	removeClassName(el,"over");
}

function treeDOM(el,collapse) {
	var i;
	for(i = 0; i<el.length; i++){
		if (el[i].tagName!=null && el[i].tagName.toLowerCase()=="ul") {
			a_a = el[0].parentNode.getElementsByTagName("a");
			if (a_a.length > 0) {
				a = a_a[0];
				if (collapse) {
					removeClassName(a,"open");
					removeClassName(el[i],"show");
				}
				else {
					if (!hasClassName(a,"open")) addClassName(a,"open");
					if (!hasClassName(el[i],"show")) addClassName(el[i],"show");
				}
			}
		}
		if (el[i].childNodes.length>0){
			treeDOM(el[i].childNodes,collapse);
		}
	}
}

function treeCollapse(el,collapse) {
	ul=findParentTagName(el,"div").getElementsByTagName("ul");
	if (ul.length > 0) {
		treeDOM(ul[0].childNodes,collapse);
	}
	return false;
}



function putIframe (ul) {
	if (IE) {
		if (IEversion >= 5.5) {
			var iframe=document.createElement("iframe");
			iframe.frameBorder="0";
			iframe.style.width=ul.offsetWidth+"px";
			iframe.style.height=ul.offsetHeight+"px";
			iframe.style.left=ul.offsetLeft+"px";
			iframe.style.top=ul.offsetTop+"px";
			ul.parentNode.insertBefore(iframe,ul);
		}
		else {
			windowed_element_visibility("SELECT",-1,ul);
			windowed_element_visibility("OBJECT",-1,ul);
		}
	}
}

function removeIframe (ul) {
	if (IE) {
		if (IEversion >= 5.5) {
			iframe = ul.parentNode.getElementsByTagName("iframe");
			ul.parentNode.removeChild(iframe[0]);
		}
		else {
			windowed_element_visibility("SELECT",+1,ul);
			windowed_element_visibility("OBJECT",+1,ul);
		}
	}
}


function windowed_element_visibility(tagName, change, menu) {
if (document.all) {
	var els = document.getElementsByTagName(tagName)
	var i
	var rect = new element_rect(menu)
	var elsLength = els.length;
	for (i=0; i < elsLength; i++)
	{
		var el = els.item(i)
		if (elements_overlap(el, rect))
		{
			if (el.visLevel)
				el.visLevel += change
			else
				el.visLevel = change
			if (el.visLevel == -1 && change == -1)
			{
				el.visibilitySave = el.style.visibility;
				el.style.visibility = "hidden";
			}
			else if (el.visLevel == 0 && change == +1)
			{
				el.style.visibility = el.visibilitySave;
			}
		}
	}
}
}

function element_rect(el)
{
	var left = 0
	var top = 0
	this.width = el.offsetWidth
	this.height = el.offsetHeight
	while (el)
	{
		left += el.offsetLeft
		top += el.offsetTop
		el = el.offsetParent
	}
	this.left = left;
	this.top = top;
}

function elements_overlap(el, rect)
{
	var r = new element_rect(el);
	return ((r.left < rect.left + rect.width) && (r.left + r.width > rect.left) && (r.top < rect.top + rect.height) && (r.top + r.height > rect.top))
}

