var dhtmlMenuObj;   // Reference to the menu div
var currentZIndex = 1000;
var liIndex = 0;
var visibleMenus = new Array();
var activeMenuItem = false;
var timeBeforeAutoHide = 1200; // Microseconds from mouse leaves menu to auto hide.
var dhtmlMenu_arrow = ''; // indicare un path per l'immagine freccetta nei sottomenu

var MSIE = navigator.userAgent.indexOf('MSIE')>=0?true:false;
var navigatorVersion = navigator.appVersion.replace(/.*?MSIE ([0-9]\.[0-9]).*/g,'$1')/1;
var menuBlockArray = new Array();
var menuParentOffsetLeft = false;


function getStyle(el,property)
{
	if (document.defaultView && document.defaultView.getComputedStyle)
	{
		var retVal = null;
		var comp = document.defaultView.getComputedStyle(el, '');
		if (comp)
		{
			retVal = comp[property];
			if(!retVal)
			{
				var comp = document.defaultView.getComputedStyle(el, null);
				retVal = comp.getPropertyCSSValue(property);
			}
		}

		if(retVal==null) retVal='';

		return el.style[property] || retVal;
	}

	if (document.documentElement.currentStyle && MSIE)
	{
		var value = el.currentStyle ? el.currentStyle[property] : null;
		return ( el.style[property] || value );
	}

	return el.style[property];
}

function getTopPos(inputObj)
{
	var origInputObj = inputObj;
	var returnValue = inputObj.offsetTop;

	if(inputObj.tagName=='LI' && inputObj.parentNode.className=='menuBlock1')
	{
		var aTag = inputObj.getElementsByTagName('A')[0];

		// fix PeP 20091226:
		// aggiungo +20px per baco Chrome/Safari
		// 20px = 70px - 50px [(#dhtmlMenu.height) - (#dhtmlMenu li a.dropdown padding-top)]
		if(aTag)
		{
			if(navigatorVersion<=6 && MSIE)
			{
				returnValue += aTag.parentNode.offsetHeight;
			}
			else
			{
				returnValue += aTag.parentNode.offsetHeight + 20;
			}
		}
	}

	var topOfMenuReached = false;
	while((inputObj = inputObj.offsetParent) != null)
	{
		if(inputObj.parentNode.id=='dhtmlMenu')topOfMenuReached=true;
		if(topOfMenuReached && !inputObj.className.match(/menuBlock/gi) || (!MSIE && origInputObj.parentNode.className=='menuBlock1'))
		{
			var style = getStyle(inputObj,'position');
			if(style=='absolute' || style=='relative')
			{
				return returnValue;
			}
		}

		returnValue += inputObj.offsetTop;
	}

	return returnValue;
}

function getLeftPos(inputObj)
{
	var returnValue = inputObj.offsetLeft;

	var topOfMenuReached = false;
	while((inputObj = inputObj.offsetParent) != null)
	{
		if(inputObj.parentNode.id=='dhtmlMenu')topOfMenuReached=true;
		if(topOfMenuReached && !inputObj.className.match(/menuBlock/gi))
		{
			var style = getStyle(inputObj,'position');
			if(style=='absolute' || style=='relative')return returnValue;
		}

	returnValue += inputObj.offsetLeft;
	}
	return returnValue;
}

function showHideSub()
{

	var attr = this.parentNode.getAttribute('currentDepth');
	if(navigator.userAgent.indexOf('Opera')>=0)
	{
		attr = this.parentNode.currentDepth;
	}

	this.className = 'currentDepth' + attr + 'over';

	if(activeMenuItem && activeMenuItem!=this)
	{
		activeMenuItem.className=activeMenuItem.className.replace(/over/,'');
	}

	activeMenuItem = this;

	var numericIdThis = this.id.replace(/[^0-9]/g,'');
	var exceptionArray = new Array();
	// Showing sub item of this LI
	var sub = document.getElementById('subOf' + numericIdThis);

	if(sub)
	{
		visibleMenus.push(sub);
		sub.style.display='';
		sub.parentNode.className = sub.parentNode.className + 'over';
		exceptionArray[sub.id] = true;
	}

	// Showing parent items of this one

	var parent = this.parentNode;
	while(parent && parent.id && parent.tagName=='UL')
	{
		visibleMenus.push(parent);
		exceptionArray[parent.id] = true;
		parent.style.display='';

		var li = document.getElementById('dhtmlMenuListItem' + parent.id.replace(/[^0-9]/g,''));
		if(li.className.indexOf('over')<0)li.className = li.className + 'over';
		parent = li.parentNode;

	}

	hideMenuItems(exceptionArray);
}

function hideMenuItems(exceptionArray)
{
	/*
	Hiding visible menu items
	*/
	var newVisibleMenuArray = new Array();
	for(var no=0;no<visibleMenus.length;no++)
	{
		if(visibleMenus[no].className!='menuBlock1' && visibleMenus[no].id)
		{
			if(!exceptionArray[visibleMenus[no].id])
			{
				var el = visibleMenus[no].getElementsByTagName('A')[0];
				visibleMenus[no].style.display = 'none';
				var li = document.getElementById('dhtmlMenuListItem' + visibleMenus[no].id.replace(/[^0-9]/g,''));
				if(li.className.indexOf('over')>0)li.className = li.className.replace(/over/,'');
			}
			else
			{
				newVisibleMenuArray.push(visibleMenus[no]);
			}
		}
	}

	visibleMenus = newVisibleMenuArray;
}

var menuActive = true;
var hideTimer = 0;

function mouseOverMenu()
{
	menuActive = true;
}

function mouseOutMenu()
{
	menuActive = false;
	timerAutoHide();
}

function timerAutoHide()
{
	if(menuActive)
	{
		hideTimer = 0;
		return;
	}

	if(hideTimer<timeBeforeAutoHide)
	{
		hideTimer+=100;
		setTimeout('timerAutoHide()',99);
	}
	else
	{
		hideTimer = 0;
		autohideMenuItems();
	}
}

function autohideMenuItems()
{
	if(!menuActive)
	{
		hideMenuItems(new Array());
		if(activeMenuItem)activeMenuItem.className=activeMenuItem.className.replace(/over/,'');
	}
}

function initSubMenus(inputObj,initOffsetLeft,currentDepth)
{
	var subUl = inputObj.getElementsByTagName('UL');
	if(subUl.length>0)
	{
		var ul = subUl[0];

		ul.id = 'subOf' + inputObj.id.replace(/[^0-9]/g,'');
		ul.setAttribute('currentDepth' ,currentDepth);
		ul.currentDepth = currentDepth;
		ul.className='menuBlock' + currentDepth;
		ul.onmouseover = mouseOverMenu;
		ul.onmouseout = mouseOutMenu;
		currentZIndex+=1;
		ul.style.zIndex = currentZIndex;
		menuBlockArray.push(ul);
		ul = dhtmlMenuObj.appendChild(ul);
		var topPos = getTopPos(inputObj);
		var leftPos = getLeftPos(inputObj)/1 + initOffsetLeft/1;

		ul.style.position = 'absolute';
		ul.style.left = leftPos + 'px';
		ul.style.top = topPos + 'px';

		var li = ul.getElementsByTagName('LI')[0];
		while(li)
		{
			if(li.tagName=='LI')
			{
				li.className='currentDepth' + currentDepth;
				li.id = 'dhtmlMenuListItem' + liIndex;
				liIndex++;
				var uls = li.getElementsByTagName('UL');
				li.onmouseover = showHideSub;

				if(uls.length>0)
				{
					var offsetToFunction = li.getElementsByTagName('A')[0].offsetWidth+2;
					if(navigatorVersion<6 && MSIE)offsetToFunction+=15;   // MSIE 5.x fix
					initSubMenus(li,offsetToFunction,(currentDepth+1));
				}
				if(MSIE)
				{
					var a = li.getElementsByTagName('A')[0];
					a.style.width=li.offsetWidth+'px';
					a.style.display='block';
				}
			}

			li = li.nextSibling;
		}

		ul.style.display = 'none';
		if(!document.all)
		{
			//dhtmlMenuObj.appendChild(ul);
		}
	}
}


function resizeMenu()
{
	var offsetParent = getLeftPos(dhtmlMenuObj);

	for(var no=0;no<menuBlockArray.length;no++)
	{
		var leftPos = menuBlockArray[no].style.left.replace('px','')/1;
		menuBlockArray[no].style.left = leftPos + offsetParent - menuParentOffsetLeft + 'px';
	}
	menuParentOffsetLeft = offsetParent;
}

/*
Initializing menu
*/
function initDhtmlMenu()
{
	dhtmlMenuObj = document.getElementById('dhtmlMenu');


	var aTags = dhtmlMenuObj.getElementsByTagName('A');
	for(var no=0;no<aTags.length;no++)
	{
		var subUl = aTags[no].parentNode.getElementsByTagName('UL');
		if(subUl.length>0 && aTags[no].parentNode.parentNode.parentNode.id != 'dhtmlMenu')
		{
			var img = document.createElement('IMG');
			img.src = dhtmlMenu_arrow;
			aTags[no].appendChild(img);

		}
	}

	var mainMenu = dhtmlMenuObj.getElementsByTagName('UL')[0];

	mainMenu.className='menuBlock1';
	mainMenu.style.zIndex = currentZIndex;
	mainMenu.setAttribute('currentDepth' ,1);
	mainMenu.currentDepth = '1';
	mainMenu.onmouseover = mouseOverMenu;
	mainMenu.onmouseout = mouseOutMenu;

	var mainMenuItemsArray = new Array();
	var mainMenuItem = mainMenu.getElementsByTagName('LI')[0];
	mainMenu.style.height = mainMenuItem.offsetHeight + 2 + 'px';
	while(mainMenuItem)
	{
		// fix PeP 20091226:
		// nel foglio di stile, aggiunto height: 50px alla classe currentDepth1
		mainMenuItem.className='currentDepth1';
		mainMenuItem.id = 'dhtmlMenuListItem' + liIndex;
		mainMenuItem.onmouseover = showHideSub;
		liIndex++;

		if(mainMenuItem.tagName=='LI')
		{
			mainMenuItem.style.cssText = 'float:left;';
			mainMenuItem.style.styleFloat = 'left';
			initSubMenus(mainMenuItem,0,2);
			mainMenuItemsArray[mainMenuItemsArray.length] = mainMenuItem;
		}

		mainMenuItem = mainMenuItem.nextSibling;
	}

/*
	// fix PeP 20091226:
	// questo ciclo è inutile: bastava scambiare le istruzioni riga 3 e 4 del precedente if (all'interno del while)
	for(var no=0;no<mainMenuItemsArray.length;no++)
	{
		initSubMenus(mainMenuItemsArray[no],0,2);
	}
*/
	menuParentOffsetLeft = getLeftPos(dhtmlMenuObj);
	window.onresize = resizeMenu;

	dhtmlMenuObj.style.visibility = 'visible';
}
