function findPos(obj, xory) {
	var result = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			if (xory == 'x') result += obj.offsetLeft;
			else result += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if ((xory == 'x') && (obj.x)) result += obj.x;
	else if (obj.y) result += obj.y;
	return result;
}

function menuClose(tomenu, alevel) {
	var a;
	for (var i = menuBranches.length - 1; i >= alevel; i--) {
		if ((menuBranches[i] != tomenu) && (menuBranches[i] != '0')) {
			a = document.getElementById(menuBranches[i]);
			a.style.visibilty = 'hidden';
			a.style.top = -2000;
			a.style.left = -2000;
		}
	}
}

function menuGo(frommenu, tomenu, alevel, atop, xoff, yoff) {
	var now = new Date();
	menuTimeOut.setTime(now.getTime() + 3000);
	menuClose(tomenu, alevel);
	menuBranches[alevel] = tomenu;
	if (document.getElementById(tomenu)) {
		var a = document.getElementById(frommenu);
		var b = document.getElementById(tomenu);
		var x = findPos(a, 'x');
		var y = findPos(a, 'y');
		var w = Math.max(a.clientWidth, a.offsetWidth);
		var h = Math.max(a.clientHeight, a.offsetHeight);
		var bw = b.offsetWidth;
		var bh = b.offsetHeight;
		var sx = window.innerWidth;
		var sy = window.innerHeight;
		var dx = 0;
		if (atop) {
			if (x + 2 + bw > sx)
				dx = -(x + 2 + bw - sx);						
		} else {
			if (x + w + 2 + bw > sx)
				dx = -(w + bw + (2 * xoff));
		}
		var dy = y;
		if (y + bh > sy)
			dy = sy - bh - 1;
		b.style.zIndex = 400;
		if (atop) {
			b.style.top = (y + h + 1) + 'px';
			b.style.left = (x + dx) + 'px';
		} else {
			b.style.top = (dy + yoff) + 'px';
			b.style.left = (x + w + xoff + dx) + 'px';
		}
		if (bh > sy) {
			b.style.top = '1px';
			b.style.height = (sy - 2) + 'px';
		}	
		b.style.visibility = 'visible';
	}
}
	
function menuTimer() {
	if (menuTimeOut < new Date())
		menuClose('0', 0);
}

function menuExpand (name, idstring, expand, collapse) {
	if (idstring == 'OPEN') {
		idstring = '|';
		parents = document.getElementsByTagName('div');
		for (i = 0; i < parents.length; i++) {
			id = String(parents[i].id);
			if (id)
				if (id.slice(0, 4 + name.length) == 'menu' + name)
					idstring = idstring + id.slice(4 + name.length) + '|';
		}
	}
	if (idstring == 'CLOSE')
		idstring = '';
	eval('oldids = new String(menuvar' + name + ');');
	eval('menuvar' + name + ' = idstring;');	
	var closeids = oldids.split('|');
	var closers = new Array();
	for (k = 0; k < closeids.length; k++)
		if ((closeids[k] > 0) && (idstring.indexOf('|' + closeids[k] + '|') == -1))
			closers.push(closeids[k]);
	var openers = idstring.split('|');				
	for (k = 0; k < openers.length; k++)
		if (openers[k] > 0)
			menuFold(name, openers[k], 'open', expand, collapse);
	for (k = 0; k < closers.length; k++)
		menuFold(name, closers[k], 'close', expand, collapse);
}

function menuToggle (name, id, idstring, expand, collapse) {
	eval('oldids = new String(menuvar' + name + ');');
	oldids = oldids.replace('/\|\|/gi', '|');
	p = oldids.indexOf('|' + id + '|')
		if (p != -1)
			idstring = oldids.slice(0, p + 1);
	menuExpand(name, idstring, expand, collapse);
	
}

function menuFold (name, anid, mode, expand, collapse) {
	fid = new String('|' + anid + '|');
	eval('s = menuvar' + name + '.indexOf(fid);');
	if ((document.getElementById('menu' + name + anid).style.display == 'none') && (mode != 'close')){
		document.getElementById('menu' + name + anid).style.display = 'block';
		document.images['expand' + name + anid].src = collapse;
		if (s == -1)
			eval('menuvar' + name + ' = menuvar' + name + ' + \"|\" + anid + \"|\";');
	} else if (mode != 'open') {
		document.getElementById('menu' + name + anid).style.display = 'none';
		document.images['expand' + name + anid].src = expand;
		if (s != -1)
			eval('menuvar' + name + ' = menuvar' + name + '.substr(0, s) + menuvar' + name + '.substr(s + fid.length);');
	}	
}

var menuBranches = new Array();
menuBranches[0] = '0';
var menuTimeOut = new Date();
var menuInterval = setInterval('menuTimer()', 400);
document.onclick = function() { menuClose('0', 0); };

