// получает абсолютную координату x указанного элемента
function getX(le)
{
	var x = 0;
	while (le)
	{
		x += parseInt(le.offsetLeft);
		le = le.offsetParent;
	}
	return x;
}

// получает абсолютную координату y указанного элемента
function getY(le)
{
	var y = 0;
	while (le)
	{
		y += parseInt(le.offsetTop);
		le = le.offsetParent;
	}
	return y;
}

function overItem(item, menu)
{
	if (menu)
		showMenu(item, menu);
}

function outItem(item, menu)
{
	if (menu)
		outMenu(menu);
}

var last_menu = null;
var timer = null;

function outMenu(menu)
{
	last_menu = menu;
	timer = setTimeout(hideMenu, 300);
}

function overMenu(menu)
{
	if (timer)
		clearTimeout(timer);
	timer = null;
	if (last_menu && menu != last_menu)
		hideMenu();
	last_menu = menu;
}

function showMenu(d, m)
{
	overMenu(m);
	//m.style.visibility = "visible";
	m.style.display = "block";
	var x = 0;                        // здесь указывается смещение относительно вызвавшего меню элемента по x
	var y = d.offsetHeight;        // --||-- по y
	skipx =  1;
	while (d)
	{
		if (skipx == 0) x += parseInt(d.offsetLeft); else skipx--;
		y += parseInt(d.offsetTop);
		d = d.offsetParent;
	}
	wClientWidth = (document.compatMode=='CSS1Compat' && !window.opera ? document.documentElement.clientWidth : document.body.clientWidth);
	//if (x+250 > wClientWidth) x = wClientWidth-250;
	//x=0;
	m.style.left = x;
	m.style.top = y;
	// сокрытие select
	dx = m.offsetLeft;
	dy = m.offsetTop;
	dw = m.offsetWidth + dx;
	dh = m.offsetHeight + dy;
	var o = document.getElementsByTagName("SELECT");
	for (var i = 0; i < o.length; i++)
	{
		sx = getX(o[i]);
		sy = getY(o[i]);
		sw = o[i].offsetWidth + sx;
		sh = o[i].offsetHeight + sy;
		//alert(dx+' '+dy+' '+dw+' '+dh+' sel: '+sx+' '+sy+' '+sw+' '+sh);
		if (((dx > sx && dx < sw) || (dw > sx && dw < sw) || (dx < sx && dw > sw)) && ((dy > sy && dy < sh) || (dh > sy && dh < sh) || (dy < sy && dh > sh)))
			o[i].style.visibility = "hidden";
	}
}

function hideMenu()
{
	if (last_menu)
	{
	    last_menu.style.display = "none";
		//last_menu.style.visibility = "hidden";
		//last_menu.style.left = -250;
	}
	if (timer)
		clearTimeout(timer);
	// показ select
	// !!! показывает все скрытые select'ы, а не только те которые были скрыты при вызове меню
	var o = document.getElementsByTagName("SELECT");
	for (var i = 0; i < o.length; i++)
		o[i].style.visibility = "visible";
}
