var cm_pids = new Array()
var cm_arrows = new Array()
var cm_offsetTop = new Array()
var cm_last_id = 0
var cm_timer = 0
var cm_clip = ''

function GetObjPosition(obj)
{
	var x = 0, y = 0
	do{
		if( obj.style.position != 'absolute' )
		{
			x+= obj.offsetLeft
			y+= obj.offsetTop
		}
	}while( obj = obj.offsetParent )
	
	return new Array(x, y)
}

function CM_SetPosition(id)
{
	var menu = document.getElementById('coolmenu'+id)
	var parent = document.getElementById(id)
	var coord = GetObjPosition(parent)
	var menu_left = coord[0]
	var menu_top = coord[1]

if( CM_GetLevel(id)==1 ) menu_top += parent.offsetHeight
	else	menu_left += parent.offsetWidth
	menu.style.top = menu_top

	var scrollLeft = document.body.scrollLeft

	var maxLeft = document.body.clientWidth + scrollLeft - menu.offsetWidth
	menu.style.width = menu.offsetWidth
	menu.style.left = Math.max( Math.min( menu_left, maxLeft ), scrollLeft )
	return menu_top;
}

function CM_GetLevel( id )
{
	if( id ) return CM_GetLevel( cm_pids[id] ) + 1;
	else return 0;
}

function CM_IsParent( pid, id )
{
	if( !id ) return false;
	if( id == pid  ) return true;
	else return CM_IsParent( pid, cm_pids[id] );
}

function CM_HideItem( id )
{
	var obj = document.getElementById('coolmenu'+id)
	if( obj)
	{
		obj.style.display = 'none'
		cm_last_id = 0
	}
}

function CM_Slide( id, end, dy )
{
	var obj = document.getElementById(id)
	if( obj.style.display == 'block' )
	{
		if( dy > 1 ) dy -= dy*dy / 2 / (end-cm_offsetTop[id]);
		cm_offsetTop[id] = obj.style.top = cm_offsetTop[id] + Math.round(dy);
		obj.style.clip = "rect("+(end-cm_offsetTop[id])+"px,auto,auto,auto)";
		if( cm_offsetTop[id] < end ) setTimeout( 'CM_Slide( "'+id+'", '+end+', '+dy+' )', 15 );
		else obj.style.clip = cm_test;
	}
	else obj.style.clip = cm_test;
}

function CM_ShowItem( id )
{
	for( i=cm_last_id; i && !CM_IsParent( i, id ); i=cm_pids[i] ) CM_HideItem(i)
	var obj = document.getElementById('coolmenu'+id)
	if( obj && cm_last_id != id )
	{
		obj.style.display = 'block'
		var end = cm_offsetTop['coolmenu'+id] = CM_SetPosition( id )
		obj.style.top = cm_offsetTop['coolmenu'+id] = cm_offsetTop['coolmenu'+id] - obj.offsetHeight
		CM_Slide( 'coolmenu'+id, end, ( obj.offsetHeight + 20 ) / 20 )
		cm_last_id = id
	}
}

function CM_CheckMenu( id, on )
{
	if( cm_timer ) clearTimeout(cm_timer)
	if( on ) cm_timer = setTimeout('CM_ShowItem( "'+id+'" )', 200 )
	else cm_timer = setTimeout('for( i="'+cm_last_id+'"; i; i=cm_pids[i] ) CM_HideItem(i)', 500)
}

function CM_InsertNode( id, pid, name, url )
{
	cm_pids[id] = pid;
	p_div = document.getElementById('coolmenu'+pid);
	if( !p_div )
	{
		pp_div = document.getElementById('coolmenu'+cm_pids[pid]);
		if( !pp_div ) return;
		pp_div.innerHTML += "<div class=cmdiv"+CM_GetLevel(id)+" id=coolmenu"+pid+" style='position:absolute;display:none'></div>";
		p_div = document.getElementById('coolmenu'+pid);
	}

	var atr = ' style="display:block" onmouseover="CM_CheckMenu(id,true)" onmouseout="CM_CheckMenu(id)"';
	if( !url ) atr += ' onclick="return(false)"'
	p_div.innerHTML += "<a href='"+url+"' class=coolmenu"+CM_GetLevel(id)+" id="+id+atr+">"+name+"</a>";
	cm_test = p_div.style.clip;
	p_obj = document.getElementById(pid);
	if(p_obj)
	{
		var arrow = ''
		for( i=CM_GetLevel(pid); i>0 && !arrow; i-- ) arrow = cm_arrows[i]
		if( arrow )
		{
			p_obj.style.backgroundImage='URL('+arrow+')';
			p_obj.style.backgroundPosition='right center';
			p_obj.style.backgroundRepeat='no-repeat';
		}
	}
}

