﻿// the timeout for the menu
var timeout = 500;
var ua = navigator.userAgent.toLowerCase(); 
var isIE = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 

// this fonction initialize the menu
function initMenu(treeId) {

	// get some element
	var menu = document.getElementById(treeId);
	if (!(menu)) { alert('Menu element "'+treeId+'" not found!'); return; }

	//priprava krycich iframu:
	if(typeof(Br)=='object' && Br.IE6)
	{
		var uls = menu.getElementsByTagName('ul');
		
		for(var i=0;i<uls.length;i++)
		{
			uls[i].id = 'menuUl_'+i ;
			
			var ifr = document.createElement("iframe");
			ifr.id = 'menuIframe_'+i;
			ifr.style.display = 'none';
			ifr.style.zIndex = '0';
			ifr.src = '';
			ifr.scrolling = 'no';
			ifr.frameBorder = '0';
			ifr.style.position = 'absolute';
			document.body.insertBefore(ifr,document.body.firstChild);			
		}
	}
  
	var lis = menu.getElementsByTagName('li');
        
  // i am searching for ul element in li element
	for ( var i=0; i<lis.length; i++ ) {            
		// is there a ul element ? This code creat a warning in mozilla ... Can
		// somebody help me ?
		if (lis.item(i).getElementsByTagName('ul').length > 0) {        
			// link events to list item
			if (document.all) {addAnEvent(lis.item(i),'keyup',show);}
			addAnEvent(lis.item(i),'mouseover',show);
			addAnEvent(lis.item(i),'mouseout',timeoutHide);
			addAnEvent(lis.item(i),'blur',timeoutHide);
			addAnEvent(lis.item(i),'focus',show);
			
			// ad an id to list item
			lis.item(i).id = treeId + "_li" + i;
			// creat a timeout variable for list item
			eval("try {timeout" + treeId + "_li" + i + " = false; } catch(e) {}")
		}
	}
}

function addAnEvent( target, eventName, functionName ) {
	// apply the method to IE
	if (isIE) {
		//target.attachEvent( 'on'+eventName, functionName ); // dont work properly with this
		eval('target.on'+eventName+'=functionName');
	}
	// apply the method to DOM compliant browsers
	else {
		target.addEventListener( eventName , functionName , true ); // true is important for Opera7
	}
}

// hide the first ul element of the current element
function timeoutHide() {
  // start the timeout
	try { eval( "timeout" + this.id + " = window.setTimeout('hideUlUnder( \"" + this.id + "\" )', " + timeout + " );"); } catch(e) {}
}

// hide the ul elements under the element identified by id
function hideUlUnder( id ) {   
	if (document.getElementById(id)) {
		document.getElementById(id).className = document.getElementById(id).className.replace(/sel/g,"");
		document.getElementById(id).getElementsByTagName('ul')[0].style.visibility = "hidden";
		
		if(typeof(Br)=='object' && Br.IE6)
		{
			document.getElementById('menuIframe_'+document.getElementById(id).getElementsByTagName('ul')[0].id.split('_')[1]).style.display='none';
		}
	}
}

// hide all ul around this list item
function hideAllOthersUls( currentLi ) {
	var ul = currentLi.parentNode;
	for ( var i=0; i<ul.childNodes.length; i++ ) {
		if ( ul.childNodes[i].id && ul.childNodes[i].id != currentLi.id ) {
			hideUlUnderLi( ul.childNodes[i] );
		}
	}
}

// hide all the ul wich are in the li element
function hideUlUnderLi( li ) {
	li.className = li.className.replace(/sel/g,"");
	var uls = li.getElementsByTagName('ul');
	for ( var i=0; i<uls.length; i++ ) {
		uls.item(i).style.visibility = "hidden";
		if(typeof(Br)=='object' && Br.IE6)
		{
			document.getElementById('menuIframe_'+uls.item(i).id.split('_')[1]).style.display='none';
		}
	}
} 

// show the first ul element found under this element
function show() {//document.getElementById('ttt').value=this.tagName;
	if(typeof(Br)=='object' && Br.IE6)
	{	
		var ifr = document.getElementById('menuIframe_'+this.getElementsByTagName('ul')[0].id.split('_')[1]);
		ifr.style.display = '';
		var pos = poziceElementu(this.getElementsByTagName('ul')[0]);
		ifr.style.top = pos[1]+'px';
		ifr.style.left = pos[0]+'px';
		ifr.style.height = this.getElementsByTagName('ul')[0].offsetHeight;
		ifr.style.width = this.getElementsByTagName('ul')[0].offsetWidth;
	}
	// show the sub menu
	this.getElementsByTagName('ul')[0].style.visibility = "visible";
	//if (document.all) ('hidden');
	
	this.className = this.className.replace(/sel/g,"");
	this.className+=" sel"; // pro zapamatovani nadrazeneho
  // clear the timeout
 	try { if (eval("timeout"+ this.id)) eval ( "clearTimeout( timeout"+ this.id +");" ); } catch(e) {} 
	try{hideAllOthersUls( this )} catch(e){};
}




function poziceElementu(el)
{
	if (el.offsetParent)
	{
		var vystup=new Array(el.offsetLeft,el.offsetTop);
		while(el=el.offsetParent)
		{
			vystup[0]+=el.offsetLeft;
			vystup[1]+=el.offsetTop;
		}
		return vystup;
	}
}

