﻿// Menu control script

if (!window.encodeURI) {
	window.encodeURI = escape;
	window.decodeURI = unescape;
}

// cookie manipulation routines
document.setCookie = function (name, value, expires, path, domain, secure)
{
	if (!value) value = '';	// delete the cookie
	
    this.cookie= name + "=" + window.encodeURI(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}
document.getCookie = function (name) {
    var dc = this.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = this.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    
    return window.decodeURI(dc.substring(begin + prefix.length, end));
}

function treeItem(id,title,icon,parent,parentNode,url) {
	this.id = id;
	this.title = title;
	this.icon = icon;
	this.parent = parent;
	this.parentNode = parentNode;
	this.url = url;
		
	this.items = new Array();
	this.expanded = false;
	this.divHeight = -1;	

	this.AddItem = function(id,title,icon,parent,url) {
		if (parent == null || parent == this.id) {
			this.items[this.items.length] = new treeItem(id,title,icon,parent,this,url);
			return true;
		} else {
			for(var i=0;i<this.items.length;i++)
			if (this.items[i].AddItem(id,title,icon,parent,url)) return true;
		}
		return false;
	}

	this.GenerateTreeView = function() {
		return this._GenerateTreeView(0, this.divLeftStep,0);
	}

	this._GenerateTreeView = function(divLeft,divLeftStep,depth) {
		var output = '';
		var outLeft = '';
		for (var i=0;i<depth;i++) outLeft += ' ';
		for (var i=0;i<this.items.length;i++) {
			var divBk = '';
			var bkPos = Math.round(divLeft / 2);
			var innerBkPos = Math.round((divLeft+divLeftStep)/2);

			if (divLeft > 0) divBk = 'background:' + (i == this.items.length-1 ? 'url(Images/tree.le.gif) no-repeat '+bkPos+'px 0px' : 'url(Images/tree.ln.gif) no-repeat '+bkPos+'px 0px') + ';';
			
			output += outLeft + '<div id="' + this.items[i].id + '" style="padding-left:'+divLeft+'px;'+divBk+'">\n';
			output += outLeft + ' <a href="#menu" onfocus="this.blur();" onclick="Tree.Execute(\''+this.items[i].id+'\');return false;" class="treeview_title"><img align="left" src="Images/folder.'+this.items[i].icon+'.gif" alt="" />&nbsp;'+this.items[i].title+'</a>\n';

			var innerOutput = this.items[i]._GenerateTreeView(divLeft + divLeftStep, divLeftStep, depth + 1);
			if (innerOutput != '') {
				innerOutput = outLeft + ' <div id="inner'+this.items[i].id+'" style="overflow:hidden;background:url(Images/tree.l.gif) repeat-y '+innerBkPos+'px 0px">\n' + innerOutput + outLeft + ' </div>\n';
				output += innerOutput;
			}

			output += outLeft + '</div>\n';
		}
		return output;
	}

	this.GetInnerHeight = function() {
		if (this.divHeight > 20) return this.divHeight;

		var retVal = 0;
		for(var i=0;i<this.items.length;i++) {
			retVal += 20 + this.items[i].GetInnerHeight();
		}
		return retVal;
	}

	this.Expand = function(smooth) {
		var innerDiv = document.getElementById('inner' + this.id);
		if (!innerDiv) return;
		innerDiv.treeNode = this;

		// check if adjacent nodes expanded
		if (this.parentNode) {
			for (var i=0; i<this.parentNode.items.length; i++) {
				if (this.parentNode.items[i].expanded) this.parentNode.items[i].Collapse(true);
			}
		}

		if (smooth) {
			innerDiv.style.display = 'block';
			innerDiv.style.visibility = 'visible';
			innerDiv.style.overflow = 'hidden';
			innerDiv.style.height = '1px';
			window.expandingTreeNodeDiv = innerDiv;
			window.expandingTreeNode = this;
			window.setTimeout('window.expandTreeView(0);', 1);
			return;
		}

		//innerDiv.style.height = this.divHeight + 'px';
		innerDiv.style.display = 'block';
		innerDiv.style.visibility = 'visible';

		this.expanded = true;
	}

	this.Collapse = function(smooth) {
		var innerDiv = document.getElementById('inner' + this.id);
		if (!innerDiv) return;
		innerDiv.treeNode = this;

		this.divHeight = this.GetInnerHeight();

		if (smooth) {
			innerDiv.style.overflow = 'hidden';
			window.collapsingTreeNodeDiv = innerDiv;
			window.collapsingTreeNode = this;
			window.setTimeout('window.collapseTreeView(0);', 1);
			return;
		} else if (document.getCookie('tree_id') == this.id) {
			// do not collapse !!!
			this.expanded = true;
			return;
		}

		innerDiv.style.display = 'none';
		innerDiv.style.visibility = 'hidden';
		//innerDiv.style.height = '0px';

		this.expanded = false;
	}

	this.CollapseAll = function() {
		for (var i=0;i<this.items.length;i++) {
			this.items[i].Collapse(false);
			this.items[i].CollapseAll();
		}
	}

	this.ExecuteLink = function(saveId) {
		if (this.items.length == 0) {
			if (this.url) window._hour.document.location = this.url;
			else alert('Link not defined!');
			return;
		}
		
		if (this.expanded) {
			if (document.getCookie('tree_id') == this.id) document.setCookie('tree_id');
			this.Collapse(true);
		} else {
			document.setCookie('tree_id', this.id);
			this.Expand(true);
		}
	}

	this._Execute = function(id) {
		for (var i=0;i<this.items.length;i++) {
			if (this.items[i].id == id) {
				this.items[i].ExecuteLink(id);
				return true;
			}
			else if (this.items[i]._Execute(id)) return true;
		}
		return false;
	}

	this.Execute = function(id) {
		var innerDiv = document.getElementById(id);		
		if (innerDiv&&innerDiv.treeNode) innerDiv.treeNode.ExecuteLink(id);
		else this._Execute(id);
		return;
	}

}

window.collapsingTreeNodeDiv = null;
window.collapsingTreeNode = null;
window.collapsingTreeNodeHeight = 0;

window.expandingTreeNodeDiv = null;
window.expandingTreeNode = null;
window.expandingTreeNodeHeight = 0;

window.collapseTreeView = function(code) {
	if (code == 0) window.collapsingTreeNodeHeight = window.collapsingTreeNode.divHeight - 10;
	else window.collapsingTreeNodeHeight -= 10;

	if (window.collapsingTreeNodeHeight > 0) {
		window.setTimeout('window.collapseTreeView(1);', 1);
		window.collapsingTreeNodeDiv.style.height = window.collapsingTreeNodeHeight + 'px';
	} else {
		window.collapsingTreeNodeDiv.style.display = 'none';
		window.collapsingTreeNodeDiv.style.visibility = 'hidden';
		window.collapsingTreeNodeDiv.style.height = '0px';
		window.collapsingTreeNode.expanded = false;
	}
}

window.expandTreeView = function(code) {
	if (code == 0) window.expandingTreeNodeHeight = 10;
	else window.expandingTreeNodeHeight += 10;

	if (window.expandingTreeNodeHeight < window.expandingTreeNode.divHeight) {
		window.setTimeout('window.expandTreeView(1);', 1);
		window.expandingTreeNodeDiv.style.height = window.expandingTreeNodeHeight + 'px';
	} else {
		window.expandingTreeNodeDiv.style.display = 'block';
		window.expandingTreeNodeDiv.style.visibility = 'visible';
		window.expandingTreeNodeDiv.style.height = window.expandingTreeNode.divHeight + 'px';
		window.expandingTreeNode.expanded = true;
	}
}