function MenuHoverManager(id, /*optional*/ timeout) {

	var liLevel1List = getElementsByClass('level1', document.getElementById(id));
	var submenus = new Array();
	var timeout = timeout || 1000;
	var timeoutId;
	var that = this;

	function menuClearHovers() {
		var li;
		for (var i=0; i<liLevel1List.length; ++i) {
			removeClass(liLevel1List[i], 'jshover');
			for (var j=0; j<submenus.length; ++j) {
				for(var k=0; k<submenus[j].length; ++k) {
					removeClass(submenus[j][k], 'jshover');
				}
			}
		}
	}

	function mouseOver(el) {
		menuClearHovers();
		clearTimeout(timeoutId);
		addClass(el, 'jshover');
	}

	function mouseOut(el) {
		timeoutId = setTimeout(function () {
		                       	menuClearHovers();
		                       }
		                       , timeout
		                      );
	}

	that.init = function () {
		var li, aChild;
		for (var i=0; i<liLevel1List.length; ++i) {
			li = liLevel1List[i];
			aChild = li.firstChild;
			if (aChild) {

				aChild.onmouseover = function() {
				                     	mouseOver(this.parentNode);
				                     };
			
				aChild.onmouseout = function() {
				                    	mouseOut(this.parentNode);
				                    };

			} else {

				li.onmouseover = function() {
					mouseOver(this);
				};
			
				li.onmouseout = function() {
				                	mouseOut(this.parentNode);
				                };

			}

			var oulList = new Array();
			var olList = li.getElementsByTagName('ol');
			for(var n=0; n<olList.length; ++n) {
				oulList.push(olList[n]);
			}
			var ulList = li.getElementsByTagName('ul');
			for(var n=0; n<ulList.length; ++n) {
				oulList.push(ulList[n]);
			}
			for (var j=0; j<oulList.length; ++j) {

				oulList[j].onmouseover = function() {
				                         	mouseOver(this);
				                         }

				oulList[j].onmouseout = function() {
				                        	mouseOut(this);
				                        };

			}
			submenus.push(oulList);
		}
	}

}