/* Copyright (C) 2002-2010 by Home of the Brave
   Web http://home.of.the.brave.de
   E-Mail info@brave.de */
/* $Revision: 1.9 $ $Date: 2010/03/24 12:13:42 $ */


/*
 * Convert UL#nav_tree to layer navigation.
 * dependencies: BodyEvents
 * owner: Simon.Leidig@brave.de
 *
 */

document.write('<style type="text/css">#nav_tree {display:none;}</style>');

NavTree = function (root) {
	this.Settings = {
		x_pos: [0,200,400,600]
	};
	this.Timeout = null;
	this.Node = document.createElement('div');
	document.body.appendChild(this.Node);
	this.Node.id = 'nav_tree_layers';
	this.Levels = [];
	this.Root = new NavTree.Level(root,null,0);
}
NavTree.init = function () {
	var nt = document.getElementById('nav_tree');
	if (nt) (NavTree.Instance = new NavTree(nt)).Root.init();
}
NavTree.findPosY = function (node) {
	var y = 0;
	if (node.offsetParent) {
		while (node.offsetParent) {
			y += node.offsetTop;
			node = node.offsetParent;
		}
	} else if (node.y) y += node.y;
	return y;
}
NavTree.prototype.toggle = function (entry) {
	for (var i in this.Levels) if (i > 0) {
		var v = this.Levels[i];
		v.Node.style.display = entry && (
			entry.Level == v || v.hasChild(entry)
		) ? 'block' : 'none';
	}
}

NavTree.Level = function (node,parent,depth) {
	this.Node	 = node;
	this.Parent	 = parent;
	this.Depth	 = depth;
	this.Entries = [];
	for (var i = 0; i < node.childNodes.length; i++) {
		this.Entries.push(
			new NavTree.Entry(
				node.childNodes[i], this
			)
		)
	}
}
NavTree.Entry = function (node,parent) {
	this.Node	= node;
	this.Parent	= parent;
	this.Level	= null;
	if (node.childNodes.length > 1) {
		this.Level = new NavTree.Level(
			node.childNodes[1], this, parent.Depth + 1
		)
	}
}
NavTree.Level.prototype.init = function () {
	NavTree.Instance.Levels.push(this);
	var old_node = this.Node;
	this.Node = document.createElement('div')
	NavTree.Instance.Node.appendChild(this.Node);
	if (this.Parent) this.Node.style.top =
		NavTree.findPosY(this.Parent.Node)+'px';
	this.Node.style.left = NavTree.Instance.Settings.x_pos[this.Depth]+'px';
	this.Node.onmouseout = this.m_out;
	for (var i in this.Entries) this.Entries[i].init();
	if (this.Depth > 0) this.Node.style.display = 'none';
	else old_node.parentNode.removeChild(old_node);
}
NavTree.Entry.prototype.init = function () {
	this.Node = this.Node.firstChild.cloneNode(true);
	this.Parent.Node.appendChild(this.Node);
	var s = this;
	this.Node.onmouseover = function () {s.m_over()};
	if (this.Level) this.Level.init();
}
NavTree.Level.prototype.m_out = function () {
	NavTree.Instance.Timeout = window.setTimeout('NavTree.Instance.toggle()',50);
}
NavTree.Entry.prototype.m_over = function () {
	if (NavTree.Instance.Timeout != null) {
		window.clearTimeout(NavTree.Instance.Timeout);
		NavTree.Instance.Timeout = null;
	}
	NavTree.Instance.toggle(this);
}
NavTree.Level.prototype.hasChild = function (entry) {
	for (var p = entry.Parent; p; p = p.Parent) {
		if (p == this) return true;
	}
	return false;
}

BodyEvents.addListener('load',NavTree.init);


