if (!katani) var katani = {};

katani.navigation = function() {

	var event = global.event,
		submenuullist = [],
		submenuhidetimeout,
		currentsubmenuvisible = -1,
		submenuregexp = /^menu-(\d+)$/;

	function submenuvisible(num,visible) {

		submenuullist[num].style.display = (visible) ? 'block' : 'none';
	}

	function submenuhideafterdelay() {

		if (currentsubmenuvisible < 0) return;
		submenuvisible(currentsubmenuvisible);
		currentsubmenuvisible = -1;
	}

	function setupsubmenuhidedelay() {

		submenuhidetimeout = window.setTimeout(submenuhideafterdelay,200);
	}

	function submenuenterleavecheck(el,e) {

		if (
			(currentsubmenuvisible < 0) ||
			(!event.ismouseenterleave(el,e))
		) return false;

		return true;
	}

	function submenumouseout(e) {

		if (!submenuenterleavecheck(this,e)) return;
		setupsubmenuhidedelay();
	}

	function submenumouseover(e) {

		if (!submenuenterleavecheck(this,e)) return;

		// cancel hide submenu after delay timeout
		window.clearInterval(submenuhidetimeout);
	}

	function getsubmenunumber(el) {

		var match = submenuregexp.exec(el.className);
		if (!match || (!submenuullist[match[1]])) return -1;

		return match[1];
	}

	function mainmenumouseout() {

		var submenunum = getsubmenunumber(this);
		if (submenunum < 0) return;

		setupsubmenuhidedelay();
	}

	function mainmenumouseover() {

		var submenunum = getsubmenunumber(this);
		if (submenunum < 0) return;

		if (currentsubmenuvisible >= 0) {
			// cancel hide submenu after delay timeout
			window.clearInterval(submenuhidetimeout);

			// hide currently open sub menu
			submenuvisible(currentsubmenuvisible);
		}

		submenuvisible(submenunum,true);
		currentsubmenuvisible = submenunum;
	}

	function init() {

		var navigation = $('navigation');
		if (!navigation || !navigation.nextSibling) {
			// reset timeout to try again later
			window.setTimeout(init,20);
			return;
		}

		// locate all <span> tags in the navigation block - these will have sub menu items
		var submenuspanlist = getelementsbytagname(navigation,'span');
		for (var i = 0,j = submenuspanlist.length;i < j;i++) {
			var spanel = submenuspanlist[i];

			// tag each <span> with identifier on class=""
			spanel.className = 'menu-' + i;
			event.add(spanel,'mouseover',mainmenumouseover);
			event.add(spanel,'mouseout',mainmenumouseout);

			// fetch sub menu <ul> container, store in submenuullist array and wire up mouseover/mouseout events
			var submenuel = getelementsbytagname(spanel.parentNode,'ul')[0];
			submenuullist[submenuullist.length] = submenuel;

			event.add(submenuel,'mouseover',submenumouseover);
			event.add(submenuel,'mouseout',submenumouseout);
		}
	}

	function getelementsbytagname(el,tag) { return el.getElementsByTagName(tag); }

	init();

	// set class="js" on <html> tag
	global.addhtmlclass('js');
}();
