isDOM=document.getElementById //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
isOpera=isOpera5=window.opera && isDOM //Opera 5+
isOpera6=isOpera && window.print //Opera 6+
isOpera7=isOpera && document.readyState //Opera 7+
isMSIE=document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
isMSIE5=isDOM && isMSIE //MSIE 5+
isNC4=document.layers //Netscape 4.*
isMozilla=isDOM && navigator.appName=="Netscape" //Mozilla или Netscape 6.*

var LastShowedMenu="";

function getElementHandler(name) {
	if (document.all) return document.all[name];
	else if (document.layers) return document.layers[name];
	else if (document.getElementById) return document.getElementById(name);
	else return document.all[name];
}

function showElements(a) {
 if (document.all) {
	if (document.all) docs = document.all;
	else docs = document;
	for (i=0;i<docs.tags(a).length;++i){
		obj=docs.tags(a)[i];
		if (!obj || !obj.offsetParent)
			continue;
		if (document.layers) obj.visibility="";
		else obj.style.visibility="";
	}
 }
}
function hideElements(x,y,w,h,a) {
 if (document.all) {
	if (document.all) docs = document.all;
	else docs = document;
	for (i=0;i<docs.tags(a).length;++i) {
		obj=docs.tags(a)[i];
		if (!obj || !obj.offsetParent)
			continue;
		objLeft=obj.offsetLeft;
		objTop=obj.offsetTop;
		objParent=obj.offsetParent;
		while(objParent.tagName.toUpperCase()!="BODY") {
			objLeft+= objParent.offsetLeft;
			objTop+= objParent.offsetTop;
			objParent=objParent.offsetParent;
		}
		if (x+w<objLeft || objLeft+obj.offsetWidth<x) continue;
		if (y+h<objTop || objTop+obj.offsetHeight<y) continue;
		if (document.layers) obj.visibility="hide";
		else obj.style.visibility="hidden";
	}
 }
}

function showMenu(menuID,e) {
	if ((LastShowedMenu!="")&&(LastShowedMenu!=menuID)) hideMenu(LastShowedMenu); 
	menu = getElem(menuID);
	if (!menu) return;
	if (document.layers) {
		menu.left = "0px";
		menu.top = "0px";
	}else{
		menu.style.left="0px";
		menu.style.top="0px";
	}
	menu_title = "menu_"+menuID;
	obj = getElem(menu_title);
	if ( !document.layers && ( !obj || !obj.offsetParent ) ) return;
	if (isNC4) {
		menux = obj.pageX + 15;
		menuy = obj.pageY + 115;
	}else{
		menux=obj.offsetLeft+obj.offsetWidth-menu.offsetWidth+1;
		menuy=obj.offsetTop+obj.offsetHeight+1;
		menuw=menu.offsetWidth;
		menuh=menu.offsetHeight;
		objParent=obj.offsetParent;
		while(objParent.tagName.toUpperCase()!="BODY") {
			menux+=objParent.offsetLeft;
			menuy+=objParent.offsetTop;
			objParent=objParent.offsetParent;
			if(!objParent) break;
		}
	}

	if (isMSIE && !isOpera) {
		hideElements(menux,menuy,menuw,menuh,"SELECT");
		hideElements(menux,menuy,menuw,menuh,"OBJECT");
	}	

	if (document.layers) {
		menu.left=menux;
		menu.top=menuy;
		menu.visibility="show";
	} else {
		menu.style.left=menux+"px";
		menu.style.top=menuy+"px";
		menu.style.visibility="visible";
	}
	LastShowedMenu=menuID;
}

function leaveMenu(menuID,e) {
	menu = getElementHandler(menuID);
	if ( !document.layers && ( !menu || !menu.offsetParent ) ) return;
	if (document.layers) {
		menux=menu.pageX;
		menuy=menu.pageY;
	} else {
		menux=menu.offsetLeft;
		menuy=menu.offsetTop;
	}
	if (document.all) {mY = event.clientY; mX = event.clientX; scrollX1 = document.body.scrollLeft; scrollY1 = document.body.scrollTop;}
	else if (document.getElementById) {mX = e.pageX; mY = e.pageY; scrollY1 = window.pageYOffset; scrollX1 = window.pageXOffset;}
	else {mX = e.x; mY = e.y; scrollY1 = window.pageYOffset; scrollX1 = window.pageXOffset;}
	if (document.getElementById) menuy = menuy - 2;
	else if (document.layers) menuy = menuy - 3;
	if (document.layers) { menusizeH = menu.document.height; menusizeW = menu.document.width; }
	else { menusizeH = menu.offsetHeight; menusizeW = menu.offsetWidth; }
	if ((mY+scrollY1 < menuy) ||
	    (mY+scrollY1 > menuy+menusizeH) ||
	    (mX+scrollX1 < menux) ||
	    (mX+scrollX1 > menux+menusizeW-1))
	    {
		menu_title = "menu_"+menuID;
		hideMenu(menuID);
	    }

}

function hideMenu(menuID) {
	menu = getElementHandler(menuID);
	if (menu) {
		if (document.layers) menu.visibility="hide";
		else menu.style.visibility="hidden";
	}
	LastShowedMenu="";
	showElements("SELECT");
	showElements("OBJECT");
}
