// the timeout for the menu
var timeout = 100;
var ua = navigator.userAgent.toLowerCase(); 
var isIE = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); 

// this function 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) {}")
		}
	}
}

// this function initialize the menu
function initAjaxMenu(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), 'mouseover', ajaxLoad);
            addAnEvent(lis.item(i), 'mouseout', timeoutHide);
            addAnEvent(lis.item(i), 'blur', timeoutHide);
            addAnEvent(lis.item(i), 'focus', show);
            $(lis.item(i)).data('status', 'empty');
            // 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) {}")
        }
    }
}

// hide the first ul element of the current element
function ajaxLoad() {
    showAjax(this);
    // start the timeout

    if ($('#' + this.id + ' ul.ajaxMenuHolder input[name=ajaxMenuId]').length && $(this).data('status') == 'empty') {

        $(this).data("status", "loaded");
        var pkCategory = $('#' + this.id + ' ul.ajaxMenuHolder input[name=ajaxMenuId]').val();

        //setTimeout("$('#" + this.id + " ul.ajaxMenuHolder').html('<li>nahrazuji</li>');", 2000);
        $('#' + this.id + ' ul.ajaxMenuHolder').load(
        '/exec/AjaxMenu.aspx',
        { cat: pkCategory },
        function (data) {  }
        );
    }
}

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 showAjax(obj) {//document.getElementById('ttt').value=this.tagName;
    if (typeof (Br) == 'object' && Br.IE6) {
        var ifr = document.getElementById('menuIframe_' + obj.getElementsByTagName('ul')[0].id.split('_')[1]);
        ifr.style.display = '';
        var pos = poziceElementu(obj.getElementsByTagName('ul')[0]);
        ifr.style.top = pos[1] + 'px';
        ifr.style.left = pos[0] + 'px';
        ifr.style.height = obj.getElementsByTagName('ul')[0].offsetHeight;
        ifr.style.width = obj.getElementsByTagName('ul')[0].offsetWidth;
    }
    // show the sub menu
    obj.getElementsByTagName('ul')[0].style.visibility = "visible";
    //if (document.all) ('hidden');

    obj.className = obj.className.replace(/sel/g, "");
    obj.className += " sel"; // pro zapamatovani nadrazeneho
    // clear the timeout
    try { if (eval("timeout" + obj.id)) eval("clearTimeout( timeout" + obj.id + ");"); } catch (e) { }
    try { hideAllOthersUls(obj) } catch (e) { };
}

// 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;
	}
}

