﻿// JavaScript Document
var menuCollection = [];
function whenloaded() {
	var hMenu = getElmByClass('horizontalMenu', document.body, 'UL');
	var vMenu = getElmByClass('verticalMenu', document.body, 'UL');
	var allMenus = hMenu.concat(vMenu);
	for (var i in allMenus) {
		var currentMenu = allMenus[i];
		if (!currentMenu.id) { currentMenu.id = "MenuM" + i; }
		var mcolLength = menuCollection.length;
		menuCollection[mcolLength] = new menuObj(currentMenu.id);
		menuCollection[mcolLength].menuCollection = menuCollection[mcolLength];
		menuCollection[mcolLength].searchTree(document.getElementById(menuCollection[mcolLength].menuId));
		menuCollection[mcolLength].hideMenus(menuCollection[mcolLength].menuHTML);
		menuCollection[mcolLength].placeBullets();
	}
	// Lägg till klickfunktion över hela sidan så att menyn döljs när man klickar utanför.
	document.onclick = docClick;
}
function docClick() {
	for(var i in menuCollection){
		menuCollection[i].hideMenus(menuCollection[i].menuHTML);
	}
	
}
function alertNode(node) {
	var retStr = "";
	for (var i in node) {
		retStr += "" + i + " ( " + node[i] + " )\n";
	}
	alert(retStr);
}
function menuObj(menuId) {
	//Instance vars:
	this.menuId = menuId;
	this.menuHTML = document.getElementById(this.menuId);
	this.menuType = this.menuHTML.className;
	this.menuTree = [];
	this.selected = "";
	this.bullets = [];
	this.timer = false;
	this.timedNodes = [];
	this.placeBullets = function() {
		for (var i in this.bullets) {
			var bullet = this.bullets[i];
			var blh = bullet.menuItem.clientHeight;
			bullet.style.position = "absolute";
			bullet.style.top = blh / 2 - 5 + "px";
			bullet.style.right = 8 + "px";
		}
	};
	this.hideMenus = function(node, secondary) {
		//debugger;
		if (!node) { return false; }
		if (this.menuType == "verticalMenu") {
			if (this.selected) {
				var selectedMenu = this.selected.parentMenuItem.parentMenu;
				if (this.selected.parentMenuItem.subMenu) {
					this.selected.parentMenuItem.subMenu.mfocus = true;
				}
				do {
					selectedMenu.mfocus = true;
				} while (selectedMenu = selectedMenu.parentMenu);
			}
		}
		var menulist = [];
		if (!node.mfocus && node.id != this.menuId) {
			// När rutor ej skall visas flyttas de offscreen. IE7 buggade sig med diplay:none;
			if (this.menuType == "horizontalMenu") {
				node.style.top = "-9999px";
				node.style.left = "-9999px";
				node.style.display = "block";
			}
			else if (this.menuType == "verticalMenu") {
				node.style.display = "none";
			}
		}
		else if (node.id != this.menuId) {
			//node.style.display = "block";
			// Get parentMenuItem position and width
			var pmiHeight = node.parentMenuItem.clientHeight;
			var pmiWidth = node.parentMenuItem.clientWidth;
			if (this.menuType == "horizontalMenu") {
				if (node.parentMenu.id == this.menuId) {
					node.style.top = pmiHeight + "px";
					node.style.left = "0px";
				}
				else {
					node.style.top = "-1px";
					node.style.left = pmiWidth + 1 + "px";
				}
			}
			else if (this.menuType == "verticalMenu") {
				node.style.display = "block";
			}
		}
		for (var i in node.menuItems) {
			var node2 = node.menuItems[i];
			if (node2.subMenu) {
				this.hideMenus(node2.subMenu, 1);
			}
		}
	};
	this.addOpenMenu = function(elm) {
		this.openMenus[this.openMenus.length] = elm;
	};
	this.searchTree = function(node, parentMenu) {
		if (!node) { return false; }
		node.menuItems = [];
		node.parentMenu = (parentMenu) ? parentMenu : false;
		node.mfocus = false;
		var callBack = this;
		for (var i in node.childNodes) {
			var node2 = node.childNodes[i];
			var nodeArray = [];
			if (node2.nodeType && node2.nodeType == 1 && node2.tagName == "LI") {
				// Om node.childNodes[i] är en nod eller bara text.
				node.menuItems[node.menuItems.length] = node2;
				node2.parentMenu = node;
				for (var j in node2.childNodes) {
					var node3 = node2.childNodes[j];
					if (node3.nodeType && node3.nodeType == 1 && node3.tagName == "UL") {
						node2.subMenu = node3;
						node3.parentMenuItem = node2;
						this.searchTree(node3, node);
					}
					else if (node3.nodeType && node3.nodeType == 1 && node3.tagName == "A") {
						// Lägg till musfunktioner till alla länkar
						node3.parentMenuItem = node2;
						node2.menuLink = node3;
						if (node3.className.search(/selected/) > -1) { this.selected = node3; }
						node3.onmouseover = function() {
							if (!this.className) { this.className = "hover"; }
							else { this.className += " hover"; }
						};
						node3.onmouseout = function() {
							this.className = this.className.replace(" hover", "");
							this.className = this.className.replace("hover", "");
						};
					}

					if (node2.menuLink && node2.subMenu && !node2.bullet) {
						node2.menuLink.innerHTML += "<img src=\"images/pixel.png\" alt=\"\" class=\"bullet\" />";
						// Eftersom bullet läggs till sist så är den node2.lastChild
						if (!node2.menuLink.lastChild) alert("node.lastChild fungerar ej");
						node2.bullet = node2.menuLink.lastChild;
						node2.bullet.menuItem = node2;
						node2.bullet.menuLink = node2.menuLink;
						this.bullets[this.bullets.length] = node2.bullet;
					}
				}
				if (this.menuType == "horizontalMenu") {
					node.onmouseover = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						var pmenu = this;
						do {
							if (pmenu.tagName == "UL") {
								pmenu.mfocus = true;
							}
						} while (pmenu = pmenu.parentMenu);
					};
					node2.onmouseover = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						var pmenu = this.parentMenu;
						this.className += "hover";
						while (pmenu) {
							if (pmenu.tagName == "UL") {
								pmenu.mfocus = true;
							}
							pmenu = pmenu.parentMenu;
						}
						if (this.subMenu) {
							this.subMenu.mfocus = true;
						}
						callBack.hideMenus(callBack.menuHTML);
					};
					node2.onmouseout = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						this.className = this.className.replace("hover", "");
						var pmenu = this.parentMenu;
						while (pmenu) {
							if (pmenu.tagName == "UL") pmenu.mfocus = false;
							pmenu = pmenu.parentMenu;
						}
						if (this.subMenu) {
							this.subMenu.mfocus = false;
						}
						window.clearTimeout(callBack.timer);
						callBack.timer = setTimeout(function() { callBack.hideMenus(callBack.menuHTML); }, 1000);
					};
				} // End if horizontalMenu
				else if (this.menuType == "verticalMenu") {
					node.onclick = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						var pmenu = this;
						while (pmenu) {
							if (pmenu.tagName == "UL") {
								pmenu.mfocus = true;
							}
							pmenu = pmenu.parentMenu;
						}
						callBack.hideMenus(callBack.menuHTML);
					};
					node2.onmouseover = function() {
						//debugger;
						if (this.className) { this.className += " hover"; }
						else { this.className = "hover"; }
					};
					node2.onclick = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						var pmenu = this;
						while (pmenu) {
							pmenu.mfocus = true;
							pmenu = pmenu.parentMenu;
						}
						if (this.subMenu && !this.menuLink.href) {
							this.subMenu.mfocus = true;
						}
						callBack.hideMenus(callBack.menuHTML);
					};
					node2.onmouseout = function(e) {
						if (!e) var e = window.event;
						e.cancelBubble = true;
						if (e.stopPropagation) e.stopPropagation();
						this.className = this.className.replace(" hover", "").replace("hover", "");
						var pmenu = this.parentMenu;
						while (pmenu) {
							if (pmenu.tagName == "UL") pmenu.mfocus = false;
							pmenu = pmenu.parentMenu;
						}
						if (this.subMenu) {
							this.subMenu.mfocus = false;
						}
					};
				}
				else { alert("Unknown menuType"); }
			}
		}
	};
}
addOnload(whenloaded);