function Menu(name) {
	var	name = name,
		container_id = new Array(),
		items = new Array(),
		elements = new Array(),
		count = -1,
		timer = 0,
		dom = (document.getElementById) ? (true) : (false),
		ie = (document.all) ? (true) : (false),
		ie4 = ie && !dom,
		nn4 = (document.layers) ? (true) : (false),
		nn6 = (navigator.userAgent.indexOf("Gecko") != -1),
		visible = 'block',
		hidden = 'none';

	getElementById = function (id) {
		var element;
		if (!id) return;
		if (dom) element = document.getElementById(id);
		else if (ie4) element = document.all[id];
		else if (nn4) element = document.layers[id];
	
		return element;
	}

	this.addItem = function (id, containerId, className) {
		items[items.length] = new Array(id, containerId, className);
	}

	restoreItem = function (i) {
		var element = getElementById(items[i][0]);
		element.className = items[i][2];
	}

	this.mouseOver = function (id, a, containerId, offset_x, offset_y) {
		if (timer) {
			clearTimeout(timer);
			timer = 0;
		}
	
		// Close containers till current or till container to open.
		while (count > -1) {
			if ((container_id[count] == id) || (container_id[count] == containerId)) {
				break;
			}
			hideNow(container_id[count]);
			count--;
		}
	
		// Restore class names and images for all items in same container.
		for (var i = 0; i < items.length; i++) {
			if (items[i][1] == id || items[i][1] == containerId) {
				restoreItem(i);
			}
		}
	
		// Show SELECTs.
		showElements("SELECT");
	
		// Open new popup.
		var open = getElementById(id);
		if (!open) return;
		var open_style;
		if (!nn4) open_style = open.style;
	
		if (a) {
			var left = 9;// menuLeft(id, a);
			var top = 67;// menuTop(id, a);
			if (containerId == "") {
				left += offset_x;
				top += offset_y;
			}
			else {
				var container = getElementById(containerId);
				if (container) {
					top += container.offsetHeight;
				}
			}
			open_style.left = left + "px";
			open_style.top = top + "px";
		}
		open_style.display = visible;
	
		// Correct menu position.
		if ((left + open.offsetWidth) > (document.documentElement.scrollLeft + document.documentElement.clientWidth)) {
			left = (document.documentElement.scrollLeft + document.documentElement.clientWidth - open.offsetWidth);
			open_style.left = left + "px";
		}
		if ((top + open.offsetHeight) > (document.documentElement.scrollTop + document.documentElement.clientHeight)) {
			top = (document.documentElement.scrollTop + document.documentElement.clientHeight - open.offsetHeight);
			open_style.top = top + "px";
		}
	
		if (container_id[count] != id) {
			count++;
			container_id[count] = id;
		}
	
		// Hide SELECTs.
		hideElements("SELECT");
	}

	this.mouseOut = function () {
		timer = setTimeout('hideAll()', 400);
	}

	hideNow = function (id) {
		var hide = getElementById(id);
		if (!hide) return;
		if (!nn4) hide = hide.style;
	
		hide.display = hidden;
	}

	hideAll = function () {
		while (count > -1) {
			hideNow(container_id[count]);
			count--;
		}
		timer = 0;
	
		// Restore all class names and images.
		for (var i = 0; i < items.length; i++) {
			restoreItem(i);
		}
	
		// Show SELECTs.
		showElements("SELECT");
	}

	menuLeft = function (id, a) {
		if (nn4) return document.layers['x' + id].pageX;
		else {
			var pos = a.offsetLeft;
			while (a.offsetParent != null) {
				a = a.offsetParent;
				pos += a.offsetLeft;
				if (a.tagName == 'BODY') break;
			}
			return pos;
		}
	}

	menuTop = function (id,a) {
		if (nn4) return document.layers['x' + id].pageY;
		else {
			var pos = a.offsetTop;
			while (a.offsetParent != null) {
				a = a.offsetParent;
				pos += a.offsetTop;
				if (a.tagName == 'BODY') break;
			}
			return pos;
		}
	}

	hideElements = function (tagName) {
		if (nn6) return;
		// For all opened DIVs.
		for (var j = 0; j <= count; j++) {
			var elDiv = getElementById(container_id[j]);
	
			var divLeft = elDiv.offsetLeft;
			var divRight = divLeft + elDiv.offsetWidth;
			var divTop = elDiv.offsetTop;
			var divBottom = divTop + elDiv.offsetHeight;
	
			// For all specified elements.
			var els = document.all.tags(tagName);
			for (var i = 0; i < els.length; i++) {
				var el = els.item(i);
				var elParent = el;
	
				var left = 0;
				var top = 0;
				var width = elParent.offsetWidth;
				var height = elParent.offsetHeight;
				while (elParent) {
					left += elParent.offsetLeft
					top += elParent.offsetTop
					elParent = elParent.offsetParent
				}
	
				if ((left < divRight) && (left + width > divLeft) && (top < divBottom) && (top + height > divTop)) {
					// Hide element.
					el.style.visibility = (nn4) ? ('hide') : ('hidden');
	
					// Find and store hidden element.
					var found = false;
					var free_index = elements.length;
					for (var k = 0; k < elements.length; k++) {
						if (elements[k] == 0) {
							free_index = k;
						}
						if (elements[k] == el) {
							found = true;
							break;
						}
					}
					if (!found) {
						elements[free_index] = el;
					}
				}
			}
		}
	}

	showElements = function (tagName) {
		if (nn6) return;
		// For all hidden elements.
		for (var i = 0; i < elements.length; i++) {
			var el = elements[i];
			if (el) {
				var elParent = el;
	
				var left = 0;
				var top = 0;
				var width = elParent.offsetWidth;
				var height = elParent.offsetHeight;
				while (elParent) {
					left += elParent.offsetLeft
					top += elParent.offsetTop
					elParent = elParent.offsetParent
				}
	
				var show = true;
				// For all opened DIVs.
				for (var j = 0; j <= count; j++) {
					var elDiv = getElementById(container_id[j]);
	
					var divLeft = elDiv.offsetLeft;
					var divRight = divLeft + elDiv.offsetWidth;
					var divTop = elDiv.offsetTop;
					var divBottom = divTop + elDiv.offsetHeight;
	
					if ((left < divRight) && (left + width > divLeft) && (top < divBottom) && (top + height > divTop)) {
						show = false;
					}
				}
				if (show) {
					// Show element.
					el.style.visibility = (nn4) ? ('show') : ('visible');
	
					// Find and remove hidden element.
					for (var k = 0; k < elements.length; k++) {
						if (elements[k] == el) {
							elements[k] = 0;
							break;
						}
					}
				}
			}
		}
	}
}

/*********************************************/
function checkHeight(a,num)
{
	var items = new Array(),
		height = 0,
		j = 0;
	for (var i = 0; i < num; i++)
	{
		items[i] = document.getElementById(a+(i+1));
		if (height < items[i].offsetHeight)
			height = items[i].offsetHeight;
	}
	while (items[j])
	{
		items[j].style.height = height+"px";
		j++;
	}
	if (navigator.userAgent.indexOf("Gecko") != -1 && document.body.offsetHeight < window.innerHeight)
		document.getElementById("footer").style.height = (window.innerHeight-40) + "px";
	else if (navigator.userAgent.indexOf("Gecko") == -1 && document.body.offsetHeight < window.document.documentElement.clientHeight)
		document.getElementById("footer").style.height = (window.document.documentElement.clientHeight-40) + "px";
}

function leftMenuShow(a)
{
	nextSibling(a).style.display = 'block';
}

function nextSibling(obj)
{
	while(obj.nextSibling)
	{
		obj = obj.nextSibling;
		if(obj.nodeType != 3)
			return obj;		
	}	
	return null;
}

function previousSibling(obj)
{
	while(obj.previousSibling)
	{
		obj = obj.previousSibling;
		if(obj.nodeType != 3)
			return obj;		
	}	
	return null;
}
