function getAzimuthShift(obj){
	var AZinternal = (obj.azimuth=="right")?obj.style.right:(obj.azimuth=="left")?obj.style.left:(obj.azimuth=="bottom")?obj.style.bottom:obj.style.top;
	return (AZinternal.indexOf("px")+1)?parseInt(AZinternal):0;
};

function setAzimuthShift(obj, shiftval){
	var intval = parseInt(shiftval);
	switch(obj.azimuth) {
    case "right":
        obj.style.right = intval + "px";
        return intval;
    case "left":
        obj.style.left = intval + "px";
        return intval;
    case "bottom":
        obj.style.bottom = intval + "px";
        return intval;
    default:
        obj.style.top = intval + "px";
        return intval;
	};
};

function menuproc(){
	var shift = getAzimuthShift(this);
	if (shift==this.shiftTarget){
		if(this.IntervalId != 0){
			clearInterval(this.IntervalId);
			this.IntervalId = 0;
		};
		if (shift) this.parentNode.style.display="none";
		return;
	};
	if (shift<this.shiftTarget){
		setAzimuthShift(this, Math.min(shift*.85 + 1, this.shiftTarget));
	} else {
		setAzimuthShift(this, Math.max(shift*2 - 1, this.shiftTarget));
	};
};

function getActionNode(objct){
	while (objct != document){
		for(var i in trigger){
			if (objct.id == i) return objct;
			if (objct.id == trigger[i]) return document.getElementById(i);
		};
	objct = objct.parentNode;
	};
	alert("ÎØÈÁÊÀ: Àêòèâíàÿ íîäà íå íàéäåíà");
};

function menuout(){
	this.timeoutId = 0;
	this.parentNode.style.zIndex = 9;
	this.shiftTarget = (elem.azimuth=="left"||elem.azimuth=="right")?-elem.renderWidth:-elem.renderHeight;
	if (!this.intervalId) this.intervalId = setInterval("document.getElementById('" + this.id + "').menuproc()", 50);
	if (this.timeoutId){
		clearTimeout(this.timeoutId);
		this.timeoutId = 0;
	};
};

function menuouttimed(){
	var obj = getActionNode(this);
	if (!obj.timeoutId) {
		obj.timeoutId = setTimeout("document.getElementById('" + obj.id + "').menuout()", 1000);
	};
	var myParent = getparent(this);
	if(typeof(myParent)=="object") myParent.menuouttimed();
};

function menuin(){
	var obj = getActionNode(this);
	if (obj.parentNode.style.display=="none") obj.parentNode.style.display = "";
	obj.parentNode.style.zIndex = 10;
	obj.shiftTarget = 0;
	if (obj.timeoutId) {
		clearTimeout(obj.timeoutId);
		obj.timeoutId = 0;
	};	
	if (!obj.intervalId) obj.intervalId = setInterval("document.getElementById('" + obj.id + "').menuproc()", 50);	
	var myParent = getparent(this);
	if(typeof(myParent)=="object") myParent.menuin();
	for (var treenode in treefor[obj.id]){
		if(!treefor[obj.id][treenode]){
			if (document.getElementById(treenode).timeoutId){
				clearTimeout(document.getElementById(treenode).timeoutId);
				document.getElementById(treenode).timeoutId = 0;
			};
			document.getElementById(treenode).menuout();
		};
	};
};

function setnodes(node){
	var nodes = node.childNodes;
	for (var i = 0; i<nodes.length; i++){
		if(typeof(nodes[i].onmouseout)=="undefined") break;
		nodes[i].onmouseover = menuin;
		setnodes(nodes[i]);
	};
};

function getparent(objct){
	var origObj = objct;
	while (objct!=document) {
		for(i in trigger){
			if (i==objct.id){
				if (origObj!=objct) return document.getElementById(i);
				objct = document.getElementById(trigger[i]);
				continue;
			};
		};
		objct = objct.parentNode;
	};
};

var treefor = new Array();
for(var elemId in trigger){
	treefor[elemId] = new Array();
	for (var i in trigger){
		treefor[elemId][i] = false;
	};
};

for(var elemId in trigger){
	var elem = document.getElementById(elemId);
	elem.style.position = "relative";
	elem.renderHeight = elem.parentNode.clientHeight;
	elem.renderWidth = elem.parentNode.clientWidth;
	elem.parentNode.style.visibility = "visible";
	elem.parentNode.style.display = "none";
	elem.azimuth = (typeof(azimuth[elemId])=="string")?azimuth[elemId]:"top";
	elem.intervalID = 0;
	elem.timeoutID = 0;
	elem.shiftTarget = 0;
	setAzimuthShift(elem, (elem.azimuth=="left"||elem.azimuth=="right")?-elem.renderWidth:-elem.renderHeight);
	elem.menuproc = menuproc;
	elem.menuin = menuin;
	elem.menuout = menuout;
	elem.menuouttimed = menuouttimed;
	elem.onmouseout = menuouttimed;
	elem.onmouseover = menuin;
	setnodes(elem);
	document.getElementById(trigger[elemId]).onmouseout = menuouttimed;
	document.getElementById(trigger[elemId]).onmouseover = menuin;
	setnodes(document.getElementById(trigger[elemId]));

	var myParent = elem;
	do {
		treefor[elemId][myParent.id] = true;
		treefor[myParent.id][elemId] = true;
		myParent = getparent(myParent);
	} while (typeof(myParent) == "object");
};

