/*
	File: TreeViewHelper
	Author: Jeff Dobson and Eric Shepherd
	Date: August 2006 and February 2007
*/

function TreeViewHelper() {
}

TreeViewHelper.prototype.parentNodeElements = 'li'; // html element for parent nodes
TreeViewHelper.prototype.nodeActive = 'tree_active'; // css class for active nodes
TreeViewHelper.prototype.nodeInactive = 'tree_inactive'; // css class for inactive/hidden nodes

TreeViewHelper.prototype.init = function()
{
	// return if no dom support
	if (!SupportTest.hasDom) {
		return;
	}

	this.HideAllChildNodes();

	var parentNodes = document.getElementsByTagName(this.parentNodeElements);
	
	// add event listener to each parent node
	for (var i=0; i<parentNodes.length; i++) {
		var thisReference = this; // required because scope will change from class to event
		
		if (parentNodes[i].className != null) {
			EventHelper.AddEvent(parentNodes[i], 'click', showHidePtr = function(e) {thisReference.ShowHideNode(this); }, false);
			
			//if (SupportTest.isSafari) parentNodes[i].onclick = EventHelper.CancelClickSafari; //safari still doesn't support cancelDefault()
		}
	}
}

// Shows or hides a parent node in the treeview control based on the node's state
TreeViewHelper.prototype.ShowHideNode = function(node, e)
{
	if (node)
	{
		// get node state and set class name accordingly
		if (node.className.match(this.nodeInactive)) {
			node.className = node.className.replace(this.nodeInactive, this.nodeActive);
		} else if (node.className.match(this.nodeActive)) {
			node.className = node.className.replace(this.nodeActive, this.nodeInactive);
		} else {
			
		}
	}
}

TreeViewHelper.prototype.HideAllChildNodes = function()
{
	var parentNodes = document.getElementsByTagName(this.parentNodeElements);
	
	// if the class attribute has a value of active, set it to inactive
	for (var i=0; i<parentNodes.length; i++) {
		if (parentNodes[i].className.indexOf(this.nodeActive) != -1) {	
			parentNodes[i].className = parentNodes[i].className.replace(this.nodeActive, this.nodeInactive);
		}
	}
	return;
}


TreeViewHelper.AutoInit = function() {
	if (!SupportTest.hasDom) return;
	var _TreeViewHelper = new TreeViewHelper();
	_TreeViewHelper.init();
}

