﻿var isTable=0;

DOM.Event(
	"load",
	function () {
		var menu=DOM.Get("menu"),
			subs=DOM.Get("subs"),
			tops=DOM.Get("tops");
		
		var timeout={},
			last={};
			def={};
		var menuLeft=0,
			menuRight=780;

		hideFocus(tops);
		hideFocus(subs);

		DOM.Event(
			"mouseover",
			function (e) {
			var src=e.srcElement;
				if (isMenu(src)) {
					clearTO(last);
					hideLevel(0);
					hideLevel(1);
					show(src);
					last[0]=src;
				}
			},
			tops
		);
		DOM.Event(
			"mouseout",
			function (e) {
				var src=e.srcElement;
				if (isMenu(src)) setTO(src,0);
			},
			tops
		);
		DOM.Event(
			"mouseover",
			function (e) {
				var src=e.srcElement;
				if (isMenu(src)) {
					clearTO(last);
					if (isTable) hideLevel(src.parentNode.parentNode.parentNode.parentNode.getAttribute("level"));
					else hideLevel(src.parentNode.getAttribute("level"));
					show(src);
					if (isTable) last[src.parentNode.parentNode.parentNode.parentNode.getAttribute("level")]=src;
					else last[src.parentNode.getAttribute("level")]=src;
				}
			},
			subs
		);
		DOM.Event(
			"mouseout",
			function (e) {
				var src=e.srcElement;
				if (isMenu(src)) {
					clearTO(last);
					if (isTable) {
						setTO(src.parentNode.parentNode.parentNode.parentNode.parentMenu,src.parentNode.parentNode.parentNode.parentNode.getAttribute("level"));
						if (src.parentNode.parentNode.parentNode.parentNode.getAttribute("level")==2) setTO(src.parentNode.parentNode.parentNode.parentNode.parentMenu.parentNode.parentNode.parentNode.parentNode.parentMenu,1);
					}
					else {
						setTO(src.parentNode.parentMenu,src.parentNode.getAttribute("level"));
						if (src.parentNode.getAttribute("level")==2) setTO(src.parentNode.parentMenu.parentNode.parentMenu,1);
					}
				}
			},
			subs
		);

		var lastMarked;
		window.setNav=function (pageCatId,pageId) {
			var cat=DOM.Get("cat_"+pageCatId),
				curr=DOM.Get("menu_"+pageId);
			if (!cat) return;
			if (lastMarked) DOM.Classes.Remove(lastMarked,"over");
			if (curr) DOM.Classes.Add(curr,"over");
			lastMarked=curr;
			show(cat);
			last[0]=cat;
			def[0]=cat;
			def[1]=curr;
		}

		function isMenu(o) {
			return o.tagName.toLowerCase()=="a";
		}
		function hideLevel(level) {
			if (last[level]) {
				hide(last[level],level);
				last[level]=null;
			}
		}
		function show(a) {
			var sub=DOM.Get("sub_"+a.getAttribute("mid"));
			DOM.Classes.Add(a,"over");
			if (sub) {
				DOM.Classes.Remove(sub,"hidden");
				sub.style.top=0;
				sub.style.left=getLeft(a,sub)+"px";
				sub.parentMenu=a;
			}
		}
		function hide(a) {
			DOM.Classes.Remove(a,"over");
			var sub=DOM.Get("sub_"+a.getAttribute("mid"));
			if (sub) DOM.Classes.Add(sub,"hidden");
		}
		function setTO(sub,level) {
			timeout[level]=setTimeout(
				function () {
					if (sub!=def[0]) hide(sub);
					if (def[0] && sub!=def[0]) {
						show(def[0]);
						DOM.Classes.Add(def[1],"over");
						last[0]=def[0];
					}
				},
				500
			);
		}
		function clearTO() {
			for (var level in timeout) {
				clearTimeout(timeout[level]);
				timeout[level]=null;
			}
		}
		function getLeft(parent,sub) {
			var posLeft=sub.getAttribute("posLeft");
			if (posLeft!=null) return +posLeft;
			var subWidth=sub.offsetWidth,// Browser.IE ? sub.offsetWidth : getOffsetWidth(sub),
				parentLeft=parent.offsetLeft+parent.offsetParent.offsetLeft,
				left=parentLeft+parent.offsetWidth/2-subWidth/2;
			if (left+subWidth>menuRight) left=menuRight-subWidth;
			if (left<menuLeft) left=menuLeft;
			sub.setAttribute("posLeft",left);
			return left;
		}
		/*
		function getTop(parent,sub) {
			return 0;
		}
		*/
		function getOffsetWidth(o) {
			var w=0;
			if (o.hasChildNodes()) {
				for (var i=0;i<o.childNodes.length;i++) {
					if (o.childNodes[i].nodeType==3) continue;
					w+=o.childNodes[i].offsetWidth;
					w+=parseInt(o.childNodes[i].currentStyle.marginLeft) || 0;
					w+=parseInt(o.childNodes[i].currentStyle.marginRight) || 0;
				}
			}
			return w;
		}
		function hideFocus(o) {
			var as=o.getElementsByTagName("a");
			for (var i=0;i<as.length;i++) as[i].hideFocus=true;
		}
	}
);