
var tabber = new function() {

	var opened = []; // keep track of all open child-divs
	var pagewidth = 0;

	// check if node's children are visible
	function is_open(node) {
		for (o = 0; o < opened.length; o++)
			if (opened[o] == node)
				return true;

		return false;
	}

	// get the next valid x-position for a submenu to open at
	function get_x(node, sub, is_root) {
		out = document.getElementById("fuckingoutput");
		var x = 0;
		if (is_root) {
			x = node.offsetLeft - 1;
			if ((x + sub.offsetWidth) > pagewidth)
				x = pagewidth - sub.offsetWidth - 1;
		}
		else {
			x = node.parentNode.offsetWidth - 2;
			if ((x + node.parentNode.offsetLeft + sub.offsetWidth) >= pagewidth)
				x = node.offsetLeft - sub.offsetWidth;
		}
		return x;
	}

	// shut all open child-divs "deeper" than level
	function shut(level) {
		while (opened.length > 0) {
			node = opened[opened.length - 1];
			if (node.className.replace(/[a-z]+/, "") >= level) {
				(document.getElementById("sub" + node.id)).style.display = "none";
				opened.length -= 1;
			}
			else break;
		}
	}

	// node is the anchor itself,
	// rather than its according child-div
	function touch(node) {
		// shut "deeper" menues if needed
		shut(node.className.replace(/[a-z]+/, ""));

        // check for children
		if (
			(sub = document.getElementById("sub" + node.id)) &&
			!(is_open(node))
		) {
			// there are children available and they're not shown, yet
			var is_root = node.parentNode.id.indexOf("sub") == -1;
			with (sub.style) {
				display = "block";
				top = (is_root ? "28" : node.offsetTop - 1) + "px";
				left = get_x(node, sub, is_root) + "px";
			}
			// remember that children are visible, now
			opened[opened.length] = node;
		}
	}

	// mouse-movings in "tabber"
	function move(e) {
		var node = (e == null) ? event.srcElement : e.target;
		if (node.nodeName == "A") touch(node);
		else if (node.id == "tabber") shut(0);
	}

	// mouse-movings outside the "tabber"
	function out(e) {
		var node = (e == null) ? event.srcElement : e.target;
		while (
			node != null &&
			node.id != "pageframe" &&
			node.id != "tabber"
		)
			node = node.parentNode;

		if (node.id != "tabber") shut(0);		
	}

	this.init = function() {
		document.getElementById("tabber").onmousemove = move;
		var frame = document.getElementById("pageframe");
		pagewidth = frame.offsetWidth - 20;
		frame.onmousemove = out;
	}
}

utils.addEvent(window, "load", tabber.init);
