
/**
 * jsmenu
 *
 * @version $Id: jsmenu.js,v 1.2 2007/02/26 09:51:13 tomek Exp $
 * @copyright 2003 
 **/

var nn4 = (document.layers)?true:false;
var ie4 = (document.all)?true:false;
var menudelaytime = 500;		// milisekundy
var timID = 0;
var whatNow = -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;
}

function showLayer( 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;
}


function shadOn( from, to )
{
	if( from || to )	openSubMenu( from, to );
}

function shadOf( 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
	kasujDo( from );
	dodajNaKoniec( to );
	showLayer( to, 1 );
	dover( from );
}

function closeSubMenu( id )
{
	dout( id );
}

/**
*	Wjechanie na element
*/
function dover( id )
{
	whatNow = id;
}

/**
*	Zejscie z elementu id
*/
function dout( id )
{
	// zatrzymujemy czas
	stopTimeing();

	whatNow = -1;

	// i wlanczamy od nowa
	timID = setTimeout( "offf()", menudelaytime );
}

function offf()
{
	// kasuj od konca az napotkasz whatNow
	kasujDo( whatNow );
	stopTimeing();
}

function kasujDo( d )
{
	for( i = maxDepth-1; i >= 0; i-- )
	{
		if( divs[i] == d )	break;
		if( divs[i] )
		{
			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( timID )
	{
		clearTimeout( timID );
		timID = 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.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 "_on" oraz "_off"
// np: "styl1_on" i "styl1_off"
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 +'_off" style="width: '+ allMenus[this.id].mainElemWidth +'; height: '+ allMenus[this.id].mainElemHeight +'"'+ JsMenu.makeOnClick(this.url) +' onMouseOver="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="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="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="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 "_on" oraz "_off"
// np: "styl1_on" i "styl1_off"

// 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;
}

//dokończyć
JsMenu.MenuElem.prototype.getHTML = function()
{
	code  = '<tr>\n\t<td class="'+ this.style +'_off" style="width: '+ allMenus[this.menuId].elemWidth +'; height: '+ allMenus[this.menuId].elemHeight +'"'+ JsMenu.makeOnClick(this.url) +' onMouseOver="JsMenu.lighten(this, '+ JsMenu.quoteIt(this.menuId) +', '+ this.idx +');shadOn('+ JsMenu.quoteIt(this.menuId) +', '+ JsMenu.quoteIt(this.submenuId) +');" onMouseOut="JsMenu.darken(this, '+ JsMenu.quoteIt(this.menuId) +', '+ this.idx +');shadOf('+ 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 + '_on' )
	{
		doDarken = false;
	}
	obj.className = style + '_on';
	obj.style.cursor = 'pointer';
}
		
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 + '_off';
	}
}

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));
}

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)
		absX = allMenus[parentMenuId].x + allMenus[parentMenuId].elemWidth + allMenus[parentMenuId].offsetX;
	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;
	return allMenus[submenuId];
}

JsMenu.writeMenu = function(menuId)
{
	document.write(allMenus[menuId].getHTML());
}

JsMenu.writeAllMenus = function()
{
	for(var menuId in allMenus)
	{
		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);
}
