/*
+---------------------------+
|  UL drop-down menu v 1.1  |
|  (c)2004, design by wiki  |
+---------------------------+
*/

if (document.getElementById) {
	/* MZ: application/xhtml+xml IE: text/html 
	if (document.styleSheets[0].cssRules) {
		//document.styleSheets[0].insertRule("@import url('css/menu.css');",0);
	}
	else if (document.styleSheets[0].rules) {
		//document.styleSheets[0].addImport("css/menu.css",0);
	}
	*/
	/* OPERA: text/html*/
	//document.write('<link rel="stylesheet" type="text/css" href="css/menu.css" media="screen"/>');

}

function styl() {

	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 cTimer = null;
var clicked = false;


if (document.getElementById && styl()) {
	window.onload = postDrawMenu;
	document.onmousemove = findMenu;
}


function postDrawMenu() {
	goDOM(document.getElementById("leftmenu").childNodes);
}

function goDOM(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="add-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="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="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){
			goDOM(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;
        cTimer=setTimeout("doTimeClose()",menuCloseDelay);
    }
}

function doTimeClose() {
    clearTimeout(cTimer);
    hideMenu();
    closeOkay=false;
	clicked = false;
}

function noTimerClose() {
	closeOkay = false;
	clearTimeout(cTimer);
}


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;
}

/*-[ class manage ]------------------------------------------*/

function hasClassName (el, name) {
	var i, list;

	list = el.className.split(" ");
	for (i = 0; i < list.length; i++)
	if (list[i] == name) return true;
	return false;
};

function removeClassName (el, name, c) {
	var i, j, curList, newList;
	if (el.className == "") return;

	newList = new Array();
	curList = el.className.split(" ");
	j=0;
	for (i = 0; i < curList.length; i++) 
		if (curList[i] != name) 
			newList[i-j]=curList[i];
	    else j++;
	if (c!=1)el.className = newList.join(" ");
	else return newList.join(" ");
};


function addClassName (el, name) {
	if ((el.className == "") || (el.className == " ")) el.className = name;
	else el.className += " " + name;
};

/*-----------------------------------------------------------*/

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))
}
