// Asetukset
var closeTimeout = 500;		// menun sulkeutumisaika millisekunteina
var alertError = 0;			// ilmoita virheet, 1/0

// Tästä alemmas ei tarvitse muuttaa mitään
window.onerror = function(err,file,line){if(alertError == 1){alert('Error occured: '+err+' on line '+line+' ('+file+')');}}
var timeout = {};
var hoverClass = null;
var hoverId = '';
var prevMenu = {};
var openMenus = new Array();
var openTimeout = {};
var recentTO = null;

function ddShow(obj)
{
	var ul = obj.getElementsByTagName('ul');
	if(ul.length > 0)
	{
		clearTimeout(timeout[ul[0].id]);
		if(getMenuLevel(ul[0]) == 1 && getMenuLevel(ddCurOpen()) == 1 && ul[0].id != ddCurOpen().id){ddCurOpen().style.visibility = 'hidden';ddDelOpen(ddCurOpen());}
		if(typeof(ddCurOpen()) != 'undefined' && getMenuLevel(ddCurOpen()) != 1 && getMenuLevel(ddCurOpen()) == getMenuLevel(ul[0]) && ddCurOpen().id != ul[0].id)
		{
			openTimeout[ul[0].id] = setTimeout(function(){ul[0].style.visibility = 'visible';ddSetOpen(ul[0]);},closeTimeout);
			recentTO = ul[0];
		}
		else
		{
			ul[0].style.visibility = 'visible';ddSetOpen(ul[0]);if(recentTO != null && getMenuLevel(recentTO) == getMenuLevel(ul[0]) && recentTO.id != ul[0].id){clearTimeout(openTimeout[recentTO.id]);}
		}
	}
}
function ddHide(obj)
{
	var ul = obj.getElementsByTagName('ul');
	if(ul.length > 0)
	{
		timeout[ul[0].id] = setTimeout(function(){ul[0].style.visibility = 'hidden';ddDelOpen(ul[0]);},closeTimeout);
	}
}
function ddSetClass(obj){obj.className = (obj.parentNode.parentNode.className == hoverClass)?hoverClass+'MainHover':hoverClass+'Hover';if(ie == 1){if(obj.parentNode.parentNode.className == hoverClass){obj.style.width = obj.offsetWidth+'px';}else{obj.style.width = obj.offsetWidth+'px';}}}
function ddDelClass(obj){obj.className = '';}

function ddSetOpen(obj)
{
	var found = false;
	for(var i = 0; i < openMenus.length; i++){if(openMenus[i].id == obj.id){found = true;}}
	if(found == false){openMenus.push(obj);}
}
function ddDelOpen(obj)
{
	for(var i = 0; i < openMenus.length; i++)
	{
		if(openMenus[i].id == obj.id){openMenus.splice(i,1);break;}
	}
}
function ddCurOpen(){return openMenus[openMenus.length-1];}

function ddInit(id, dir, styleAll, ieLinkPadding)
{
	if(!ieLinkPadding){var ieLinkPadding = 0;}
	// Hae menu
	var menu = document.getElementById(id);
	
	if(dir == 'top'){menu.className = 'ddMenuTop';}
	else if(dir == 'bottom'){menu.className = 'ddMenuBottom';}
	else if(dir == 'left'){menu.className = 'ddMenuLeft';}
	else if(dir == 'right'){menu.className = 'ddMenuRight';}
	menu.onmouseover = function(){hoverClass = menu.className;hoverId = id;}
	menu.onmouseout = function(){hoverId = '';}
	
	var ul = menu.getElementsByTagName('ul');
	for(var x = 1; x < ul.length; x++)
	{
		ul[x].id = 'ddSubBottom'+id+x;
		//ul[x].style.display = 'block';
		timeout[ul[x].id] = null; // menu timer
		prevMenu[id] = null; // menu autoclose thingy
		var parent = ul[x].parentNode;
		var height = parent.clientHeight;
		var width = parent.clientWidth;
		
		if(dir == 'top')
		{
			if(ul[x].parentNode.parentNode.parentNode.id == id){ul[x].style.top = height+'px';} // ekalle drop menulle, pieni IE fix
			else{ul[x].style.left = width+'px';} // ekan submenun jälkeen olevat menut siirretää hieman oikealle
		}
		else if(dir == 'bottom')
		{
			height = 1+getChildNodes(ul[x]).length*getChildNodes(ul[x])[0].clientHeight+((ul[x].parentNode.parentNode.parentNode.id == id)?height:((ie == 1)?(-height+getChildNodes(ul[x])[0].clientHeight+ieLinkPadding+1):-height))-((ie == 1)?height:0);
			ul[x].style.marginTop = -height+'px';
			if(ul[x].parentNode.parentNode.parentNode.id != id){ul[x].style.left = width+'px';} // ekan submenun jälkeen olevat menut siirretää hieman oikealle
		}
		else if(dir == 'left')
		{
			if(ie == 1){var width = parent.offsetWidth;}
			ul[x].style.left = width+'px';
		}
		else if(dir == 'right')
		{
			var ulWidth = ul[x].clientWidth;
			if(ie == 1){var width = parent.offsetWidth;var ulWidth = ul[x].offsetWidth-2;}
			if(ul[x].parentNode.parentNode.parentNode.id == id){width += ulWidth-width;}
			width += 2;
			ul[x].style.left = -width+'px';
		}
		
		// Show/hide parent li-elementille
		parent.onmouseover = function()
		{
			ddShow(this);
			ddSetClass(this);
		}
		parent.onmouseout = function()
		{
			ddHide(this);
			ddDelClass(this);
		}
	}
	if(styleAll === true)
	{
		var li = menu.getElementsByTagName('li');
		for(var i = 0; i < li.length; i++)
		{
			if(typeof(li[i].onmouseover) == 'undefined'){li[i].onmouseover = function(){ddSetClass(this);}}
			if(typeof(li[i].onmouseout) == 'undefined'){li[i].onmouseout = function(){ddDelClass(this);}}
		}
	}
}
function getChildNodes(node)
{
    var elems = node.getElementsByTagName('*');
	var returnArr = new Array();
	for(var i = 0; i < elems.length; i++)
	{
		if(elems[i].parentNode.id == node.id){returnArr.push(elems[i]);}
	}
	return returnArr;
}
function getMenuLevel(obj)
{
	var menu = obj;
	var level = 0;
	if(menu != null)
	{
		while(menu.parentNode.className != hoverClass)
		{
			menu = menu.parentNode.parentNode;
			level++;
			if(menu.parentNode == null){break;}
		}
	}
	else{return 0;}
	return level;
}
