if (!fusionsets) var fusionsets = {};

fusionsets.navigation = function() {

	var event = global.event,
		menulist = {},
		hidemenutimeoutid,
		hidemenutimeoutname,
		hidemenudelay = 1000;

	function hidemenu() {

		setmenustate(hidemenutimeoutname,false);
		hidemenutimeoutid = hidemenutimeoutname = null;
	}

	function mainmenuouthandler() {

		var menuname = getmenuname(this);
		if (!menuname) return;

		hidemenutimeoutid = window.setTimeout(hidemenu,hidemenudelay);
		hidemenutimeoutname = menuname;
	}

	function mainmenuoverhandler() {

		var menuname = getmenuname(this);
		if (!menuname) return;

		// if pending hidemenu timeout active, clean up now
		if (hidemenutimeoutid) {
			window.clearTimeout(hidemenutimeoutid);

			if (hidemenutimeoutname == menuname) {
				hidemenutimeoutid = hidemenutimeoutname = null;

			} else {
				hidemenu();
			}
		}

		setmenustate(menuname,true);
	}

	function setmenustate(name,state) {

		menulist[name].main.className = (state) ? 'on' : '';
		menulist[name].sub.className = (state) ? 'on' : '';
	}

	function getmenuname(el) {

		el = el.parentNode;
		return ((el.className != '') && (menulist[el.className])) ? el.className : null;
	}

	function init() {

		var navigationel = $('navigation');
		if (!navigationel || (!navigationel.nextSibling)) {
			// reset timeout to try again later
			window.setTimeout(init,20);
			return;
		}

		// fetch top level nav <div> elements and store required menu nodes
		var divellist = navigationel.getElementsByTagName('div');

		for (var i = 0,j = divellist.length;i < j;i++) {
			var divelitem = divellist[i],
				subelitem = divelitem.parentNode.getElementsByTagName('ul')[0];

			menulist[divelitem.parentNode.className] = {
				main: divelitem,
				sub: subelitem
			};

			// wire up menu over/out events
			event.add(divelitem,'mouseover',mainmenuoverhandler);
			event.add(divelitem,'mouseout',mainmenuouthandler);

			event.add(subelitem,'mouseover',mainmenuoverhandler);
			event.add(subelitem,'mouseout',mainmenuouthandler);
		}
	}

	init();

	// set class="js" on <html> tag
	global.addhtmlclass('js');
}();
