// JavaScript Document

/*******************************************************************************************************************************
	hiDeSign s.r.o. 2005 project ENTRE 
	import Trinity Workflow ( developed by hiDeSign ) >>> menu.xml >>> MENU obj.
	revision: 1.1c 16.02.05
*******************************************************************************************************************************/

var pullDownMenus = null;
var rootItemsCount = null;
var subMenuCount = 0;
var tableMenu = new Array();
var absoluteY = 130;
var activeMainItem = null;

// -----------------------------

function detectMozilla() {
	var mozillaDetected;
	var browserApp = navigator.appName;
	if (browserApp != "Microsoft Internet Explorer") mozillaDetected = true; else mozillaDetected = false;
	return mozillaDetected;
}

function getLeft( obj ) {
	var intLeft = 0;
	while (obj.tagName != 'BODY') {
		intLeft += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return intLeft;
}
function getTop( obj ) {
	var intTop = 0;
	while (obj.tagName != 'BODY') {
		intTop += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return intTop;
}

/****************************************************************************************************************************/
<!-- transform XML ******************************************************************************************************* -->

// *** revize pro menu level 0,1 >> zrusena funkce hasFirstChild()

function walkXML(objXML_,menuCount) {
	if(objXML_ == null) return null;
 	// obejdeme pripadne mezery v XML
 	while( objXML_ != null && objXML_.nodeType != 1)
	objXML_ = objXML_.nextSibling;
 	if(objXML_ == null) return null;
 	var count = 0;
 	// definuje dalsi pole
 	menu = new Array();
 	menu[menuCount] = new Array();
 	menu[menuCount].menuItems = new Array();
 	while(objXML_ != null) {
  		menu[menuCount].menuItems[count] = new Array();
   		// ziskani hodnot parametru tagu
    	id = objXML_.attributes.getNamedItem('id').nodeValue;
    	itemName = objXML_.attributes.getNamedItem('itemName').nodeValue;
    	href = objXML_.attributes.getNamedItem('href').nodeValue.replace(/\$/,'&');
    	// v pripade, ze existuje dalsi podmenu, potom subMenu bude mit 
    	// hodnotu tohoto dalsiho menu:		
		// *** zrusena definice podminky: if(hasFirstChild(objXML_)) { >> a nahrazena >>
    	if(objXML_.firstChild) {		
      		subMenu = subMenuCount + 1;
      		subMenuCount ++;									
    	} else {
		//alert (objXML_.firstChild);
			subMenu = null;			
		}
    	// ulozi hodnoty do pole
    	menu[menuCount].menuItems[count].itemName = itemName;
    	menu[menuCount].menuItems[count].itemUrl = href;
    	menu[menuCount].menuItems[count].id = id;
		menu[menuCount].menuItems[count].subMenu = subMenu;
    	// vola se s parametrem dalsiho uzlu 
    	walkXML(objXML_.firstChild,menu.length);
    	objXML_ = objXML_.nextSibling;
		// opet obchazime prazdne mezery
		while( objXML_ != null && objXML_.nodeType != 1) objXML_ = objXML_.nextSibling;
    	count++;
  	}
}

function setRelations() {
 	menu[0].parentMenu = null; //  nastavi parentMenu rootovych polozek na NULL
 	for (var i = 0; i < pullDownMenus; i++) {
  		for (var k = 0; k < menu[i].menuItems.length; k++) {
   			if (menu[i].menuItems[k].subMenu != null) {
    			menu[menu[i].menuItems[k].subMenu].parentMenu = i;
    			menu[menu[i].menuItems[k].subMenu].parentItem = k;
   			}
  		}
 	}
}

function handler(objXML_) {
	if (window.ActiveXObject) {
		objXML_ = objXML_.firstChild;
  		objXML_ = objXML_.nextSibling;
  		objXML_ = objXML_.firstChild;
	}
	if (document.implementation && document.implementation.createDocument) objXML_ = objXML_.firstChild.firstChild.nextSibling;
  	walkXML(objXML_,0);
  	rootItemsCount = menu[0].menuItems.length;
	pullDownMenus = menu.length;
 	createTables();
}

function loadXML(url, handler) {
 	<!-- MOZILLA -->
  	if (document.implementation && document.implementation.createDocument) {
  		var xmldoc = document.implementation.createDocument("", "", null);
    	xmldoc.onload = function() { handler(xmldoc) }
    	xmldoc.load(url);
 	}
  	<!-- Internet EXPLORER -->
  	else if (window.ActiveXObject) {
   		var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
   		xmldoc.onreadystatechange = function() {
      		if (xmldoc.readyState == 4)
      		handler(xmldoc);
  		}
   		xmldoc.load(url);
  	}
}

function createMenu() {
// 	menu = new Array();
	// prepsat statickou cestu souboru na RELATIVNI !!!!!!!!!!!!
 	loadXML("xml_menu_export.php?mode=menu", handler);
}

/****************************************************************************************************************************/
<!-- design, events ****************************************************************************************************** -->

function hideAllMenus() { for (var n = 1; n < pullDownMenus; n ++) tableMenu[n].className = 'tableMenuClassHide' }
function hideAllRootItems() { for (var n = 0; n < menu[0].menuItems.length; n ++) tableMenu[0].rows[n].cells[0].className = '' }
function moveMenu() {
	// tato funkce je volana prostrednictvim udalosti onResize v <BODY>
	for (var i = 1; i < pullDownMenus; i ++) tableMenu[i].style.left = (tableMenu[0].rows[0].cells[0].offsetLeft + getLeft(document.getElementById("menuBox")) + 173) + 'px';
}

function createTables() {
 	setRelations();	
	// ROOT ------------------------------------------------------------------------------------------------------------------
 	var menuIndex = 0;
	var dynamickyNazev = "tableMenu_" + menuIndex;
	// rootMenu settings
	tableMenu[0] = document.createElement("TABLE");
	tableMenu[0].setAttribute("id", "menu");
	tableMenu[0].setAttribute("border", "0");
	tableMenu[0].setAttribute("cellPadding", "0");
	tableMenu[0].setAttribute("cellSpacing", "0");
	document.getElementById("menuBox").appendChild(tableMenu[0]);
	// --------------------------------------------
	var oRow;
 	var oCell;
	oRow = document.getElementById("menu").insertRow(0);
 	for (var i = 0; i < rootItemsCount; i++) {
  		oCell = oRow.insertCell(i);
  		oCell.innerHTML = menu[0].menuItems[i].itemName;
  		oCell.numOfSubmenu = i;
  		// udalosti OVER a OUT pro kazde TD v root menu
  		oCell.cisloRootPolozky = i;
  		// EVENTS root polozek
	   oCell.className = 'off';
      oCell.setAttribute("class", "off");
		oCell.onclick = function() {
   			if (menu[0].menuItems[this.cisloRootPolozky].itemUrl != '')
    			document.location.href = menu[0].menuItems[this.cisloRootPolozky].itemUrl;
  		}


      oCell.onmouseover = function() {
			this.className = 'on';
  		}
		oCell.onmouseout = function() {
			this.className = 'off';
  		}
	}
   oCell = oRow.insertCell(i);
   oCell.innerHTML = '&nbsp;';
   oCell.className = 'last';

   oRow = document.getElementById("menu").insertRow(1);
  	oCell = oRow.insertCell(0);
  	oCell.innerHTML = '&nbsp;';
	oCell.setAttribute("colSpan", "8");
	// MOZILLA ;-)
	oCell.setAttribute("style", "background-color: #f0e9e2; height: 19px;");
   // IE
	oStyle = oCell.getAttribute("style");
	oStyle.backgroundColor = '#f0e9e2';
	oStyle.height = '19px';
	// rootItemHeight je presna vyska root polozky, dulezita pozdeji pri vypoctu horniho a dolniho okraje subMenus
	tableMenu[0].rootItemHeight = oCell.clientHeight;

	// SUB MENUS -------------------------------------------------------------------------------------------------------------
	// **********-------------------------------------------------------------------------------------------------------------
 	menuIndex = 1;
 	var rootItemIndex = 0;
 	var casovac;
 	var someItemIsOn = false;
 	for (var k = 1; k < pullDownMenus; k ++) {
  		menuIndex = k;
  		tableMenu[menuIndex] = document.createElement("TABLE");
  		dynamickyNazev = "tableMenu_" + menuIndex;
		tableMenu[menuIndex].pocetPolozek = menu[menuIndex].menuItems.length;
		tableMenu[menuIndex].parentMenu = menu[menuIndex].parentMenu;
		tableMenu[menuIndex].setAttribute("id", dynamickyNazev);
		tableMenu[menuIndex].setAttribute("border", "0");
		tableMenu[menuIndex].setAttribute("cellPadding", "0");
		tableMenu[menuIndex].setAttribute("cellSpacing", "0");
		document.body.appendChild(tableMenu[menuIndex]);
		tableMenu[menuIndex].className = 'tableMenuClassHide';
		tableMenu[menuIndex].style.zIndex = 30;
  		//*********************************************************
  		// nastaveni udalosti vcetne casovace pro cela menu
		tableMenu[menuIndex].thisMenu = menuIndex;
		tableMenu[menuIndex].onmouseout = function() {
			var volaniFunkce = "hideMenu(" + this.thisMenu + ")";
   			this.casovac = window.setTimeout(volaniFunkce, 30);
  		}
  		tableMenu[menuIndex].onmouseover = function() { window.clearTimeout(this.casovac) }
  		this.hideMenu = function(cisloMenu) {   			
			// podminka zjisti, jestli je subMenu opusteno mimo, nebo se kurzor nachazi zpet na parent Item
			if (activeMainItem != menu[cisloMenu].parentItem) {
	    		tableMenu[0].rows[menu[cisloMenu].parentItem].cells[0].className = '';
				tableMenu[cisloMenu].className = 'tableMenuClassHide';
			}
  		}
  		//*********************************************************	
  		// nastaveni souradnic jednotlivych subMenu
  		if (menu[menuIndex].parentMenu == 0) {		
   			// nastavi se x-ova souradnice stejna jako pozice TD menuBox + width ( 175px )
   			tableMenu[menuIndex].style.left = (tableMenu[0].rows[rootItemIndex].cells[0].offsetLeft + getLeft(document.getElementById("menuBox")) + 173) + 'px';
			tableMenu[menuIndex].style.top = getTop(document.getElementById("menuBox")) + (menu[menuIndex].parentItem * 29) + 'px';
   			rootItemIndex ++;
		}
  		for (var i = 0; i < menu[menuIndex].menuItems.length; i++) {
   			oRow = tableMenu[menuIndex].insertRow(i);  	
   			oCell = oRow.insertCell(0);
			// pokud se jedna o prvni nebo posledni TD v subMenu, zvysi okraje
   			if (i == 0) {
				tableMenu[menuIndex].firstTD = oCell;
				oCell.style.paddingBottom = '5px';
			}
			if (i == menu[menuIndex].menuItems.length - 1) {
				tableMenu[menuIndex].lastTD = oCell;
				oCell.style.paddingTop = '5px';
			}
			//
   			oCell.innerHTML = menu[menuIndex].menuItems[i].itemName;
   			oCell.numOfSubmenu = menu[menuIndex].menuItems[i].subMenu;
   			// totoMenu a tatoPolozka se stavaji vlastnostmi kazde ITEM
   			oCell.totoMenu = menuIndex;
   			oCell.tatoPolozka = i;
   			// odkaz polozky
			
			// *** events submenu 
			oCell.onclick = function() {
    			if (menu[this.totoMenu].menuItems[this.tatoPolozka].itemUrl != '') 
     			document.location.href = menu[this.totoMenu].menuItems[this.tatoPolozka].itemUrl;
			}
   			oCell.onmouseover = function() {
				someItemIsOn = true;
				this.className = 'on';
				// po kontaktu s jakoukoli polozkou subMenu se nastavi hodnota aktivni main Item na null
				activeMainItem = null;
   			}
   			oCell.onmouseout = function() {
    			someItemIsOn = false;
    			this.className = '';
   			}
  		}
		// upravi delku tabulky podle nejdelsi polozky tak, aby bylo dost mista i pro verzi ON - bold
		tableMenu[menuIndex].style.width = tableMenu[menuIndex].clientWidth * 1.2;
		// ***
		// upravi horni a dolni okraj (firstTD a lastTD) tak, aby vyska subMenu korespondovala s vyskou root polozek
		var vyskaSubmenu = tableMenu[menuIndex].clientHeight;
		var vyskaRootItem = tableMenu[0].rootItemHeight;
		var mezera = 2;
		var m = (vyskaSubmenu + mezera) / (vyskaRootItem + mezera);
		if (m != Math.floor(m)) {
			// vysku subMenu je treba upravit
			var q = Math.ceil((vyskaSubmenu + mezera) / (vyskaRootItem + mezera))
			q = ((q * (vyskaRootItem + mezera)) - mezera) - vyskaSubmenu;
			tableMenu[menuIndex].firstTD.style.paddingTop =  (Math.floor(q / 2) + 5) + 'px';
			tableMenu[menuIndex].lastTD.style.paddingBottom = (Math.ceil(q / 2) + 5) + 'px';
		}
		// ***
 	}
}