/**
 * jsmenu
 *
 * @version $Id: jsmenu.js,v 1.1 2008/04/16 07:12:30 testwww Exp $
 * @copyright 2003
 **/

var nn4 = (document.layers)?true:false;
var ie4 = (document.all)?true:false;
var menuTeimeOut = 500;		// milisekundy
var menuTimeID = 0;
var jsMenuCurrentDiv = -1;
//var offLeft = 0;
var maxDepth = 10;
var divs = new Array(maxDepth);

//function dmenu_init()
//{
//	//countOff();
//	for( i = 0; i < maxDepth; i++ )
//	{
//		divs[i] = 0;
//	}
//}

//function countOff()
//{
//	offLeft = document.body.clientWidth;
//	offLeft -= 958;
//	if( offLeft < 0 )	offLeft = 0;
//	m = offLeft % 2;
//	if( m )	offLeft--;
//	offLeft /= 2;
//}
//
JsMenu.showLayer = function ( divId, showhide )
{
	//(TRACE, "divId", divId);
	//(TRACE, "showhide", showhide);

	if(nn4)
	{
		(showhide)?document.layers[divId].visibility="show":document.layers[divId].visibility="hide";
	}
	else
	{
		if( showhide )
		{
			if( document.all[divId].style.visibility == "visible" )	return true;
		}
		else
		{
			if( document.all[divId].style.visibility == "hidden" )	return true;
		}
		//countOff();
		if( showhide )
		{
			//document.all[divId].style.pixelLeft += offLeft;
			document.all[divId].style.visibility = "visible";
		}
		else
		{
			document.all[divId].style.visibility = "hidden";
			//document.all[divId].style.pixelLeft -= offLeft;
		}
	}

	return true;
}


JsMenu.shadOn = function( from, to )
{
	if( from || to )	openSubMenu( from, to );
}

JsMenu.shadOff = function( id )
{
	if( id ) closeSubMenu( id );
}

/**
*	Najechano na element ktory ma podmenu
*/
function openSubMenu( from, to )
{
	if(to == null || to == 'null')
		to = 0;
	// zatrzymaj automatyczne wylanczanie
	// sami sie tym zajmiemy
	stopTimeing();

	// kasujemy wszystko poza from
	JsMenu.hideTill( from );
	dodajNaKoniec( to );
	JsMenu.showLayer( to, 1 );
	dover( from );
}

function closeSubMenu( id )
{
	dout( id );
}

/**
*	Wjechanie na element
*/
function dover( id )
{
	jsMenuCurrentDiv = id;
}

/**
*	Zejscie z elementu id
*/
function dout( id )
{
	// zatrzymujemy czas
	stopTimeing();

	jsMenuCurrentDiv = -1;

	// i wlanczamy od nowa
	menuTimeID = setTimeout( "JsMenu.hide();", menuTeimeOut );
}

JsMenu.hide = function()
{
	// kasuj od konca az napotkasz jsMenuCurrentDiv
	JsMenu.hideTill( jsMenuCurrentDiv );
	stopTimeing();
}
//JsMenu.hide = hide;

JsMenu.hideTill = function( d )
{
	for( i = maxDepth-1; i >= 0; i-- )
	{
		if( divs[i] == d )	break;
		if( divs[i] )
		{
			JsMenu.showLayer( divs[i], 0 );
		}
		divs[i] = 0;
	}
}

function dodajNaKoniec( d )
{
	for( i = 0; i < maxDepth; i++ )
	{
		if( !divs[i] )
		{
			divs[i] = d;
			break;
		}
	}
}

function stopTimeing()
{
	if( menuTimeID )
	{
		clearTimeout( menuTimeID );
		menuTimeID = 0;
	}
}


var allMenus = new Array();
var doDarken = false;
var posX = 0;
var posY = 0;
//var openCount = 0;
var menuDivSizes = new Array();
var actionTimeout = 500;
var timeId = null;
var openedMenus = new Array();
var activeDiv = null;
var lastLockedId = null;
var lastOpened = null;
var preladedImages = new Array();
var timeIds = new Array();
var TRACE = false;

//*
function JsMenuMain()
{
	this.registerMainMenu = JsMenu.registerMainMenu;
	this.registerSubMenu = JsMenu.registerSubMenu;
	this.lighten = JsMenu.lighten;
	this.darken = JsMenu.darken;
	this.goToUrl = JsMenu.goToUrl;
	this.activateDiv = JsMenu.activateDiv;
	this.closeAllTill = JsMenu.closeAllTill;
	this.show = JsMenu.show;
	this._show = JsMenu._show;
	this.hide = JsMenu.hide;
	this._hide = JsMenu._hide;
	this.elemIdToIdx = JsMenu.elemIdToIdx;
	this.elemIdToMenuId = JsMenu.elemIdToMenuId;
	this.quoteIt = JsMenu.quoteIt;
	this.imgSwap = JsMenu.imgSwap;
	this.writeMenu = JsMenu.writeMenu;
	this.writeAllMenus = JsMenu.writeAllMenus;
	this.trackMouse = JsMenu.trackMouse;
	this.preloadImage = JsMenu.preloadImage;
	this.wait = JsMenu.wait;

	for( i = 0; i < maxDepth; i++ )
	{
		divs[i] = 0;
	}
}

// jako menuId podajemy nazwę obrazka z pełną ścieżką
function JsMenu(menuId, parentElemId, absPosX, absPosY, elemWidth, elemHeight, style, mainElemWidth, mainElemHeight)
{
	this.x = absPosX;
	this.y = absPosY;
	this.tdObj = null;
	this.elemWidth = elemWidth;
	this.elemHeight = elemHeight;
	this.mainElemWidth = mainElemWidth;
	this.mainElemHeight = mainElemHeight;
	this.parentElemId = parentElemId;
	//this.parMenId = parMenId;
	//this.parElemIdx = parElemIdx;
	this.id = menuId;
//	this.imgOutName = menuId;
//	lastDotIdx = menuId.lastIndexOf('.', menuId.length);
//	if( lastDotIdx >= 0 )
//	{
//		this.imgOverName = menuId.substring(0, menuId.lastIndexOf('.', menuId.length - 1)) + '_over' + menuId.substring(menuId.lastIndexOf('.', menuId.length), menuId.length);
//	}
	this.style = style;
	this.elems = new Array();
	this.submenuIdToElemIdx = new Array();
	this.locked = false;
//	this.imgWidth = 0;
//	this.imgHeight = 0;
//	if(this.parentElemId == null)
//	{
//		//img = new Image();
//		//img.src = this.imgOutName;
//		this.imgWidth = preladedImages[this.imgOutName].width;
//		this.imgHeight = preladedImages[this.imgOutName].height;
//	}
//	else
//	{
//		this.imgWidth = 0;
//		this.imgHeight = elemHeight;
//	}
}

// style ma być nazwą identyfikującą klasę stylu np: "styl1"
// zdefiniowane style mająmieć suffixy odpowiednio "over" oraz "out"
// np: "styl1over" i "styl1out"
JsMenu.prototype.addElem = function(label, url, style, submenuId)
{
	idx = this.elems.length;
	this.elems[idx] = new JsMenu.MenuElem(this.id, idx, label, url, style, submenuId);
	if(submenuId != null)
		this.submenuIdToElemIdx[submenuId] = idx;
}

JsMenu.prototype.getElemByIdx = function(elemIdx)
{
	return this.elems[elemIdx];
}

// visibility: hidden;
JsMenu.prototype.getHTML = function()
{
	if(this.parentElemId == null)
	{
		code = '<div style="position: absolute; top: '+ this.y +'; left: '+ this.x +'">';

		code += '<table cellpadding="0" cellspacing="0" width="'+ this.mainElemWidth +'">\n';
		code += '<tr>\n\t<td class="'+ this.style +'out" style="z-index: 1000000; width: '+ allMenus[this.id].mainElemWidth +'; height: '+ allMenus[this.id].mainElemHeight +'"'+ JsMenu.makeOnClick(this.url) +' onMouseOver="allMenus['+ JsMenu.quoteIt(this.id) +'].tdObj = this;JsMenu.lighten(this, '+ JsMenu.quoteIt(this.id) +', null);openSubMenu(-1, '+ JsMenu.quoteIt(this.id) +');dover('+ JsMenu.quoteIt(this.id) +');" onMouseOut="JsMenu.darken(this, '+ JsMenu.quoteIt(this.id) +', null);dout('+ JsMenu.quoteIt(this.id) +');">\n\t\t';
		code += this.label;
		code += '\n\t</td>\n</tr>';
		code += '\n</table></div>';
		offY = this.y + allMenus[this.id].mainElemHeight + allMenus[this.id].offsetY;
		offX = this.x + allMenus[this.id].offsetX;
		code += '<div id="'+ this.id +'" class="'+ this.style +'" style="z-index: 1000000; visibility: hidden; position: absolute; top: '+ offY +'px; left: '+ offX +'px;" onMouseOver="dover('+ JsMenu.quoteIt(this.id) +')" onMouseOut="dout('+ JsMenu.quoteIt(this.id) +')">';
	}
	else
	{
		offY = this.y + allMenus[this.id].offsetY + allMenus[this.id].mainElemHeight;

		code = '<div style="z-index: 1000000; position: absolute; top: '+ offY +'; left: '+ this.x +'"></div>';
		code += '<div id="'+ this.id +'" class="'+ this.style +'" onMouseOver="dover('+ JsMenu.quoteIt(this.id) +')" onMouseOut="dout('+ JsMenu.quoteIt(this.id) +')" style="z-index: 1000000; visibility: hidden; position: absolute; top: '+ offY +'; left: '+ this.x +';">';
	
	}

	code += '<table cellpadding="0" cellspacing="0" width="'+this.elemWidth+'">\n';

	for(i = 0; i < this.elems.length; i++)
		code += this.elems[i].getHTML();

	code += '\n</table></div>';
	return code;
}

// style ma być nazwą identyfikującą klasę stylu np: "styl1"
// zdefiniowane style mająmieć suffixy odpowiednio "over" oraz "out"
// np: "styl1over" i "styl1out"

// dopisać obsługę target!!

JsMenu.MenuElem = function(menuId, elemIdx, label, url, style, submenuId)
{
	this.menuId = menuId;
	this.idx = elemIdx;
	this.label = label;
	this.url = url;
	this.style = style;
	this.submenuId = submenuId;
	this.tdObj = null;
}

//dokończyć
JsMenu.MenuElem.prototype.getHTML = function()
{
	code  = '<tr>\n\t<td class="'+ this.style +'out" style="z-index: 1000000; width: '+ allMenus[this.menuId].elemWidth +'; height: '+ allMenus[this.menuId].elemHeight +'"'+ JsMenu.makeOnClick(this.url) +' onMouseOver="allMenus['+ JsMenu.quoteIt(this.menuId) +'].elems['+ JsMenu.quoteIt(this.idx) +'].tdObj = this;JsMenu.lighten(this, '+ JsMenu.quoteIt(this.menuId) +', '+ this.idx +');JsMenu.shadOn('+ JsMenu.quoteIt(this.menuId) +', '+ JsMenu.quoteIt(this.submenuId) +');" onMouseOut="JsMenu.darken(this, '+ JsMenu.quoteIt(this.menuId) +', '+ this.idx +');JsMenu.shadOff('+ JsMenu.quoteIt(this.submenuId) +');">\n\t\t';
	code += this.label;
	code += '\n\t</td>\n</tr>';
	return code;
}

JsMenu.lighten = function(obj, menuId, elemIdx)
{
	if(elemIdx == null)
		style = allMenus[menuId].style;
	else
		style = allMenus[menuId].getElemByIdx(elemIdx).style;
	doDarken = true;
	if( obj.className == style + 'over' )
	{
		doDarken = false;
	}
	obj.className = style + 'over';
	obj.style.cursor = 'pointer';
	JsMenu.lightenParents(menuId);
}

JsMenu.lightenParents = function(menuId)
{
	if(allMenus[menuId].parentElemId != null)
	{
		//alert("lightenParents, menuId: " + menuId);
		//alert("lightenParents, menuId: " + menuId);
		//alert("lightenParents, allMenus[menuId].parentElemId: " + allMenus[menuId].parentElemId);
		//alert("lightenParents, JsMenu.elemIdToMenuId(allMenus[menuId].parentElemId): " + JsMenu.elemIdToMenuId(allMenus[menuId].parentElemId));
		parentMenuId = JsMenu.elemIdToMenuId(allMenus[menuId].parentElemId);
		//alert(allMenus[parentMenuId]);
		parentMenu = allMenus[parentMenuId];
		//parentElem = parent.elems[JsMenu.elemIdToIdx(parentElemId)];
		parentElem = parentMenu.getElemByIdx(JsMenu.elemIdToIdx(allMenus[menuId].parentElemId));
		parentElem.tdObj.className = parentElem.style + 'over';
		//if(parent.parentElemId != null)
		JsMenu.lightenParents(parentMenu.id);
	}
	else
	{
		allMenus[menuId].tdObj.className = allMenus[menuId].style + 'over';
	}
}

JsMenu.darken = function(obj, menuId, elemIdx)
{
	if(elemIdx == null)
		style = allMenus[menuId].style;
	else
		style = allMenus[menuId].getElemByIdx(elemIdx).style;

	if(doDarken)
	{
		obj.className = style + 'out';
	}
	JsMenu.darkenParents(menuId);
}

JsMenu.darkenParents = function(menuId)
{
	if(allMenus[menuId].parentElemId != null)
	{
		//alert("darkenParents, menuId: " + menuId);
		parentMenu = allMenus[JsMenu.elemIdToMenuId(allMenus[menuId].parentElemId)];
		//parentElem = parent.elems[JsMenu.elemIdToIdx(parentElemId)];
		//alert('parentElemId: ' + parentElemId + '\nJsMenu.elemIdToIdx(parentElemId): ' + JsMenu.elemIdToIdx(parentElemId));
		parentElem = parentMenu.getElemByIdx(JsMenu.elemIdToIdx(allMenus[menuId].parentElemId));
		parentElem.tdObj.className = parentElem.style + 'out';
		//if(parent.parentElemId != null)
		JsMenu.darkenParents(parentMenu.id);
	}
	else
	{
		allMenus[menuId].tdObj.className = allMenus[menuId].style + 'out';
	}
}

JsMenu.makeOnClick = function(url)
{
	if(url.length > 0)
		return ' onClick="JsMenu.goToUrl(\''+ url +'\')"';
	else
		return '';
}

JsMenu.goToUrl = function(url)
{
  window.location.href = url;
}

JsMenu.activateDiv = function activateDiv(el, divId)
{
	//tymczasowa poprawka póki błšd się nie znajdzie
	if(!JsMenu.inOpenedMenus(divId))
		openedMenus[openedMenus.length] = divId;

	if(el == null || divId == null)
		return false;

	//*
	e = event.toElement;
 	while(e)
	{
		if(e == el)
			return;
		e = e.parentNode;
	}
	//*/
	//trace(TRACE, "divId", divId);

	//JsMenu.clearTimeoutIdFor(allMenus[divId].getParentMenuId());
	//JsMenu.clearTimeoutIdFor(divId);
	JsMenu.clearAllTimeouts();
	timeId = setTimeout('JsMenu.closeAllTill('+ JsMenu.quoteIt(divId) +')', actionTimeout);
	activeDiv = divId;
	window.document.onmousemove = JsMenu.trackMouse;
}

JsMenu.deactivateDiv = function deactivateDiv(divId)
{
	if(divId == null || divId != activeDiv)
		return false;
	//trace(TRACE, "divId", divId);
	//JsMenu.clearTimeoutIdFor(divId);
	JsMenu.clearAllTimeouts();
	timeIds[divId] = setTimeout('JsMenu.closeAll();JsMenu.clearTimeoutIdFor('+ JsMenu.quoteIt(divId) +');', 2*actionTimeout);
	activeDiv = null;
}

JsMenu.closeAllTill = function closeAllTill(divId)
{
	JsMenu.clearAllTimeouts();
	//trace(TRACE, "divId", divId);
	if(divId == null)
		return false;
	if(openedMenus.length > 0)
	{
		if(JsMenu.inOpenedMenus(divId) && openedMenus[openedMenus.length-1] != divId)
		{
			closeId = openedMenus.pop();
			JsMenu._hide(closeId);
			JsMenu.closeAllTill(divId);
		}
	}
	else
		window.document.onmousemove = null;
}

JsMenu.closeAll = function()
{
	JsMenu.clearAllTimeouts();

	all = new Array(allMenus);
	all.reverse();
	for(var idx in all)
		JsMenu._hide(all[idx]);
	if(openedMenus.length > 0)
	{
		closeId = openedMenus.pop();
		JsMenu._hide(closeId);
		JsMenu.closeAll();
	}
	activeDiv = null;
	/*
	else
	{
		window.document.onmousemove = null;
		activeDiv = null;
	}
	//*/
}

JsMenu.openSubMenu = function(srcId, submenuId)
{
	if(submenuId == null || srcId == null)
		return false;
	activeDiv = srcId;
	//if(timeIds[submenuId] != null)clearTimeout(timeIds[submenuId]);
	//JsMenu.clearTimeoutIdFor(submenuId);
	JsMenu.clearAllTimeouts();
	if(lastOpened != null && lastOpened != submenuId && lastOpened != srcId)
		JsMenu.hide(lastOpened);

	JsMenu.closeAllTill(srcId);

	if(allMenus[srcId].submenuIdToElemIdx[submenuId] >= 0)
	{
		JsMenu.show(submenuId);
		lastOpened = submenuId;
	}
}

JsMenu.show = function(divId)
{
	if(divId == null)
		return false;
	timeIds[divId] = setTimeout('JsMenu._show('+ JsMenu.quoteIt(divId) +');JsMenu.clearTimeoutIdFor('+ JsMenu.quoteIt(divId) +');', actionTimeout);
	//if(!JsMenu.inOpenedMenus(divId))
		//openedMenus[openedMenus.length] = divId;
	//JsMenu.closeAllTill(divId);
}

JsMenu._show = function(divId)
{
	if(divId == null)
		return false;
	divObj = new JsMenu.getObj(divId);
	divObj.style.visibility = "visible";
	window.document.onmousemove = JsMenu.trackMouse;
	if(!JsMenu.inOpenedMenus(divId))
		openedMenus[openedMenus.length] = divId;
	activeDiv = divId;
}

//JsMenu.hide = function(divId)
//{
//	if(divId == null)
//		return false;
//	timeIds[divId] = setTimeout('JsMenu._hide('+ JsMenu.quoteIt(divId) +');JsMenu.clearTimeoutIdFor('+ JsMenu.quoteIt(divId) +');', actionTimeout);
//	activeDiv = null;
//}

JsMenu._hide = function(divId)
{
	if(divId == null || allMenus[divId] == null)
		return false;
	if(allMenus[divId].locked)
		return true;
	if(divId != null && divId == lastOpened)
		lastOpened = null;
	divObj = new JsMenu.getObj(divId);
	divObj.style.visibility = "hidden";
	if(JsMenu.inOpenedMenus(divId))
		while(true)
		{
			//alert('JsMenu._hide: znaleziono, pozostało elementów: ' + openedMenus.length);
			id = openedMenus.pop();
			if(id == divId)
			{
				//alert('JsMenu._hide: znaleziono, pozostało elementów: ' + openedMenus.length);
				break;
			}
		}
	if(openedMenus.length == 0)
		window.document.onmousemove = null;
}

JsMenu.elemIdToIdx = function(elemId)
{
	if(elemId == null)
		return null;
	else
		//return parseInt(elemId.substring(elemId.lastIndexOf('.', elemId.length - 1), elemId.length));
		return elemId.split('.')[1];
}

JsMenu.prototype.getParentMenuElemIdx = function()
{
	return JsMenu.elemIdToIdx(this.parentElemId);
}

JsMenu.elemIdToMenuId = function(elemId)
{
	if(elemId == null)
		return null;
	else
		return elemId.substring(0, elemId.lastIndexOf('.', elemId.length - 1));
}

JsMenu.prototype.getParentMenuId = function()
{
	return JsMenu.elemIdToMenuId(this.parentElemId);
}

JsMenu.quoteIt = function quoteIt(text)
{
	return '\'' + text + '\'';
}

JsMenu.imgSwap = function(which, img)
{
	which.src = img;
}

// dodanie menu głównego					label, url, style, submenuId
JsMenu.registerMainMenu = function(menuId, label, url, style, absPosX, absPosY, elemWidth, elemHeight, mainElemWidth, mainElemHeight, subMenuOffsetX, subMenuOffsetY)
{
	allMenus[menuId] = new JsMenu(menuId, null, absPosX, absPosY, elemWidth, elemHeight, style, mainElemWidth, mainElemHeight);

	if(subMenuOffsetX)
		allMenus[menuId].offsetX = subMenuOffsetX;
	else
		allMenus[menuId].offsetX = 0;

	if(subMenuOffsetY)
		allMenus[menuId].offsetY = subMenuOffsetY;
	else
		allMenus[menuId].offsetY = 0;

	allMenus[menuId].label = label;
	allMenus[menuId].url = url;

	return allMenus[menuId];
}

// dodanie submenu
// dorobić "przypinanie menu" po lewej jeśli po prawej się nie zmieści

JsMenu.registerSubMenu = function(submenuId, parentMenuId, style)
{
	parentElemId = parentMenuId + '.' + allMenus[parentMenuId].submenuIdToElemIdx[submenuId];

	if(allMenus[parentMenuId].offsetX)
	{
		if(parentMenuId == null)
			absX = allMenus[parentMenuId].x + allMenus[parentMenuId].mainElemWidth + allMenus[parentMenuId].offsetX;
		else
			absX = allMenus[parentMenuId].x + allMenus[parentMenuId].elemWidth + allMenus[parentMenuId].offsetX;

	}
	else
	{
		if(parentMenuId == null)
			absX = allMenus[parentMenuId].x + allMenus[parentMenuId].mainElemWidth;
		else
			absX = allMenus[parentMenuId].x + allMenus[parentMenuId].elemWidth;
	}

	if(parentMenuId == null || allMenus[parentMenuId].parentElemId == null)
	{
//		if(allMenus[parentMenuId].offsetY)
//			absY = allMenus[parentMenuId].y + (allMenus[parentMenuId].submenuIdToElemIdx[submenuId]) * allMenus[parentMenuId].elemHeight + allMenus[parentMenuId].mainElemHeight + allMenus[parentMenuId].offsetY;
//		else
			absY = allMenus[parentMenuId].y + (allMenus[parentMenuId].submenuIdToElemIdx[submenuId]) * allMenus[parentMenuId].elemHeight;
	}
	else
	{
//		if(allMenus[parentMenuId].offsetY)
//			absY = allMenus[parentMenuId].y + allMenus[parentMenuId].submenuIdToElemIdx[submenuId] * allMenus[parentMenuId].elemHeight + allMenus[parentMenuId].offsetY;
//		else
			absY = allMenus[parentMenuId].y + allMenus[parentMenuId].submenuIdToElemIdx[submenuId] * allMenus[parentMenuId].elemHeight;
	}

	allMenus[submenuId] =	new JsMenu(submenuId, parentElemId, absX, absY, allMenus[parentMenuId].elemWidth, allMenus[parentMenuId].elemHeight, style);
	allMenus[submenuId].offsetY = allMenus[parentMenuId].offsetY;
	allMenus[submenuId].mainElemHeight = allMenus[parentMenuId].mainElemHeight;
	allMenus[submenuId].mainElemWidth = allMenus[parentMenuId].mainElemWidth;
	return allMenus[submenuId];
}

JsMenu.writeMenu = function(menuId)
{
	document.write(allMenus[menuId].getHTML());
}

JsMenu.writeAllMenus = function()
{
	for(var menuId in allMenus)
	{
		if(allMenus[menuId].getHTML)
			document.write('\n<!-- menuId: '+ menuId +' -->\n' + allMenus[menuId].getHTML());
	}

	window.onresize = document.location.reload;
}

JsMenu.trackMouse = function(e)
{
	//alert("a jednak");
	if(activeDiv == null)
	{
		//alert('JsMenu.trackMouse - activeDiv: ' + activeDiv);
		//window.document.onmousemove = null;
		return false;
	}

	if(navigator.appName == "Netscape")
	{
		posX = e.pageX;
		posY = e.pageY;
	}
	else
	{
		posX = event.clientX + document.body.scrollLeft;
		posY = event.clientY + document.body.scrollTop;
	}

	if (posX <= 0)
		{posX = 0}
	if (posY <= 0)
		{posY = 0}

	if(openedMenus.length == 0)
	{
		JsMenu.closeAll();
		//window.document.onmousemove = null;
		//return true;
	}

	el = new JsMenu.getObj(openedMenus[openedMenus.length-1]);
	if(openedMenus.length-1 > 0)
		el2 = new JsMenu.getObj(openedMenus[openedMenus.length-2]);
	if(
		 !( (  openedMenus.length > 0
				&& allMenus[openedMenus[openedMenus.length-1]].y < posY
			 	&& allMenus[openedMenus[openedMenus.length-1]].y + el.obj.offsetHeight > posY
			 	&& allMenus[openedMenus[openedMenus.length-1]].x < posX
			 	&& allMenus[openedMenus[openedMenus.length-1]].x + el.obj.offsetWidth > posX )
				||
				( openedMenus.length-1 > 0
				&& allMenus[openedMenus[openedMenus.length-2]].y < posY
			 	&& allMenus[openedMenus[openedMenus.length-2]].y + el2.obj.offsetHeight > posY
			 	&& allMenus[openedMenus[openedMenus.length-2]].x < posX
			 	&& allMenus[openedMenus[openedMenus.length-2]].x + el2.obj.offsetWidth > posX )
			)
			||
			(  allMenus[openedMenus[openedMenus.length-1]].parentElemId == null
			&& allMenus[openedMenus[openedMenus.length-1]].y + allMenus[openedMenus[openedMenus.length-1]].imgHeight > posY
			&& allMenus[openedMenus[openedMenus.length-1]].x + allMenus[openedMenus[openedMenus.length-1]].imgWidth < posX
			|| allMenus[openedMenus[openedMenus.length-1]].parentElemId == null
/*		&& allMenus[openedMenus[openedMenus.length-1]].x + allMenus[openedMenus[openedMenus.length-1]].imgWidth > allMenus[openedMenus[openedMenus.length-1]].x + allMenus[openedMenus[openedMenus.length-1]].elemWidth*/
			&& allMenus[openedMenus[openedMenus.length-1]].y + allMenus[openedMenus[openedMenus.length-1]].imgHeight < posY
			&& allMenus[openedMenus[openedMenus.length-1]].x +  + allMenus[openedMenus[openedMenus.length-1]].elemWidth < posX )
		)
	{
		//closeId = openedMenus.pop();
		//timeIds[closeId] = setTimeout('JsMenu._hide('+ JsMenu.quoteIt(closeId) +');JsMenu.clearTimeoutIdFor('+ JsMenu.quoteIt(closeId) +');', actionTimeout);
		JsMenu.deactivateDiv(openedMenus[openedMenus.length-1]);
	}

	return true;
}

JsMenu.getObj = function(name)
{
	//alert(name);
	if(name == null)
		return null;
  if (document.getElementById)
  {
    this.obj = document.getElementById(name);
		this.style = document.getElementById(name).style;
  }
  else if (document.all)
  {
    this.obj = document.all[name];
	  this.style = document.all[name].style;
  }
  else if (document.layers)
  {
   	this.obj = document.layers[name];
   	this.style = document.layers[name];
  }
}

JsMenu.wait = function(amount)
{
	d = new Date();
	while(1)
	{
		mill = new Date();
		diff = mill-d;
		if( diff >= amount )
			break;
	}
}

JsMenu.preloadImage = function(img)
{
	if(img == null)
		return false;
	preladedImages[img] = new Image();
	preladedImages[img].src = img;

	lastDotIdx = img.lastIndexOf('.', img.length);
	if( lastDotIdx >= 0 )
	{
		imgOver = img.substring(0, img.lastIndexOf('.', img.length - 1)) + '_over' + img.substring(img.lastIndexOf('.', img.length), img.length);
	}

	preladedImages[imgOver] = new Image();
	preladedImages[imgOver].src = imgOver;

	//JsMenu.wait(actionTimeout);
}

JsMenu.inOpenedMenus = function(val)
{
	if(openedMenus.length == 0)
		return false;

	for(var idx in openedMenus)
	{
		if(openedMenus[idx] == val)
		{
			//alert(val + ' = ' + openedMenus[idx]);
			return true;
		}
	}
	return false;
}

JsMenu.clearTimeoutIdFor = function(menuId)
{
	if(timeIds[menuId] != null)
		clearTimeout(timeIds[menuId]);

	timeIds[menuId] = null;
}

JsMenu.clearAllTimeouts = function()
{
	if(timeId != null)
		clearTimeout(timeId);

	for(var idx in timeIds)
		JsMenu.clearTimeoutIdFor(timeIds[idx]);
}

function trace(flag, label, value)
{
	if (flag)
	{
		var msg = "";
		if (trace.caller)
		{
			var funcName = trace.caller.toString();
			funcName = funcName.substring(8, funcName.indexOf(")") + 1);
			msg += "In " + funcName + ": ";
		}
		msg += label + "=" + value + "\n";
		document.forms["debug_f"].debug_ta.value += msg;
	}
}

function updateDebug()
{
	document.forms["debug_f"].opened_val.value = openedMenus.length + '\t' + openedMenus.join();
	setTimeout('updateDebug()', 100);
}
