/* ======================================================================== Make Javascript Tree ======================================================================= */


	// Automatically attach a listener to the window onload, to convert the trees
	AddEvent(window, "load", ConvertTrees);
	AddEvent(window, "load", CheckSelectedCategory);
	
	
	function GetURLParameter(SearchedStringParameter)
	{
		var ReturnString = "";
		var HrefString = window.location.href; 
		
		if(HrefString.indexOf("?") > -1)
		{
			var ModuleActionQueryString = HrefString.substr(HrefString.indexOf("?")+1).toLowerCase();
					
			var ActionQueryString = ModuleActionQueryString.split("&");
					
			for(var iParameters = 0;iParameters < ActionQueryString.length;iParameters++)
			{
				var Index = ActionQueryString[iParameters].indexOf(SearchedStringParameter.toLowerCase()+"=");
				if (Index == 0)
				{
					var ActionParameter = ActionQueryString[iParameters].split("=");
					ReturnString = ActionParameter[1];
					break;
				}
			}
		}
		return unescape(ReturnString);
	}

	// Utility function to add an event listener
	function AddEvent(Object, Event, EventFunction)
	{
		if(Object.addEventListener)
		{
			Object.addEventListener(Event, EventFunction, true);
			return true;
		}
		else if(Object.attachEvent)
		{
			return Object.attachEvent("on"+Event, EventFunction);
		}
		else
		{
			return false;
		}
	}

	// utility function to set a global variable if it is not already set
	function SetDefault(Name, Value)
	{
		if(typeof(window[Name]) == "undefined" || window[Name] == null)
		{
			window[Name] = Value;
		}
	}

	
	function CheckTree(TreeName, TreeId, ParentId, ParentParentId)
	{
		var Tree = document.getElementById(TreeName+TreeId);
		var SelectedId = document.getElementById("selected_blog_"+TreeName+TreeId);
		//var ParentId = document.getElementById(TreeName+ParentId);
		var a_el = document.getElementsByTagName("a");
		var LIElement = document.getElementsByTagName("li");
		
		if(Tree)
		{
			for(var NumberLIElement = 0; NumberLIElement < LIElement.length; NumberLIElement++)
			{
				var LI = LIElement[NumberLIElement];
					
				var a = a_el[NumberLIElement];
				
				//LI.style.background="";
				
				if (LI.nodeName == "LI" && LI.className == 'LIOpen')
				{	
					//if(ParentId && ((TreeName+ParentId) == LI.id || (TreeName +ParentParentId)== LI.id))
					if(ParentId && ((TreeName+ParentId) == LI.id))
					{	
						jQuery("#ul_"+TreeName+TreeId).slideDown("slow");
						
						ParentId.className = 'LIOpen';
						
						ParentParentId.className = 'LIOpen';
						
						LI.className = 'LIOpen';
					}
					else
					{	
						jQuery("#ul_"+LI.id).slideUp("slow");
						
						LI.className = 'LIClosed';
					}			
				}
				else
				{
					if (LI.nodeName == "LI" && LI.className == 'LIClosed')
					{	
						if(LI.id == (TreeName+TreeId))
						{
							jQuery("#ul_"+TreeName+TreeId).slideDown("slow");
							
							LI.className = 'LIOpen';
						}	
					}
				}
			}
			
			return false;
		}
	}
	
	function CheckSelectedCategory()
	{
		if(GetURLParameter('post'))
		{	
			var Category = document.getElementById(GetURLParameter('post'));
			
			var SelectedCategory = document.getElementById('selected_post_' + GetURLParameter('post'));
			
			if(Category)
			{	
				Category.className = 'LIBulletSelected';
							
				if(Category.parentNode)
				{
					while(Category.parentNode)
					{
						var Parent = Category.parentNode;
						
						if(Parent.nodeName == 'UL')
						{
							if(Parent.parentNode.nodeName == 'LI')
							{
								Parent.parentNode.className = 'LIOpen';														
							}
						}
						
						Category = Category.parentNode;
					}
				}
				
			}
		
			if(SelectedCategory)
			{
				var LIElement = document.getElementsByTagName("li");
								
				for(var NumberLIElement = 0; NumberLIElement < LIElement.length; NumberLIElement++)
				{
					var LI = LIElement[NumberLIElement];
				}
			}
		}
	}
	
	// Full expands a tree with a given ID
	function ExpandTree(TreeId)
	{
		var UL = document.getElementById(TreeId);
		
		if(UL == null)
		{
			return false;
		}
		ExpandCollapseList(UL, NodeOpenClass);
	}

	// Fully collapses a tree with a given ID
	function CollapseTree(TreeId)
	{
		var UL = document.getElementById(TreeId);
		
		if(UL == null)
		{
			return false;
		}
		ExpandCollapseList(UL, NodeClosedClass);
	}

	// Expands enough nodes to expose an LI with a given ID
	function ExpandToItem(TreeId, ItemId)
	{
		var UL = document.getElementById(TreeId);
		
		if(UL == null)
		{
			return false;
		}
		var Return = ExpandCollapseList(UL, NodeOpenClass, ItemId);
		
		if(Return)
		{
			var Object = document.getElementById(ItemId);
			
			if(Object.scrollIntoView)
			{
				Object.scrollIntoView(false);
			}
		}
	}

	// Performs 3 functions:
	// a) Expand all nodes
	// b) Collapse all nodes
	// c) Expand all nodes to reach a certain ID
	
	function ExpandCollapseList(UL, ClassName, ItemId)
	{
		if(!UL.childNodes || UL.childNodes.length == 0)
		{
			return false;
		}

		for(var NumberItem = 0; NumberItem < UL.childNodes.length; NumberItem++)
		{
			var Item = UL.childNodes[NumberItem];
			
			if(ItemId != null && Item.id == ItemId)
			{
				return true;
			}
			
			if (Item.nodeName == "LI")
			{
				var SubLists = false;
				
				for(var NumberSubItem = 0; NumberSubItem < Item.childNodes.length; NumberSubItem++)
				{
					var SubItem = Item.childNodes[NumberSubItem];
					
					if(SubItem.nodeName == "UL")
					{
						SubLists = true;
						
						var Return = ExpandCollapseList(SubItem, ClassName, ItemId);
						
						if (ItemId != null && Return)
						{
							Item.className = ClassName;
							return true;
						}
					}
				}
				if(SubLists && ItemId == null)
				{
					Item.className = ClassName;
				}
			}
		}
	}

	// Search the document for UL elements with the correct CLASS name, then process them
	function ConvertTrees()
	{
		SetDefault("TreeClass", "MakeTree");
		SetDefault("NodeClosedClass", "LIClosed");
		SetDefault("NodeOpenClass", "LIOpen");
		SetDefault("NodeBulletClass", "LIBullet");
		SetDefault("NodeBulletClassSelected", "LIBulletSelected");
		SetDefault("NodeLinkClass", "Bullet");
		SetDefault("PreProcessTrees", true);
		
		if(PreProcessTrees)
		{
			if (!document.createElement)		// Without createElement, we can't do anything
			{
				return;
			} 
			var ULElement = document.getElementsByTagName("ul");
			
			for(var NumberULElement = 0; NumberULElement < ULElement.length; NumberULElement++)
			{
				var UL = ULElement[NumberULElement];
				
				if (UL.nodeName == "UL" && UL.className == TreeClass)
				{
					ProcessList(UL);
				}
			}
		}
	}

	// Process a UL tag and all its children, to convert to a tree
	function ProcessList(UL)
	{
		if (!UL.childNodes || UL.childNodes.length == 0)
		{
			return;
		}
		
		for(var NumberItem = 0; NumberItem < UL.childNodes.length; NumberItem++)
		{
			var Item = UL.childNodes[NumberItem];
			
			if (Item.nodeName == "LI")
			{
				var SubLists = false;
				
				for(var NumberSubItem = 0; NumberSubItem < Item.childNodes.length; NumberSubItem++)
				{
					var SubItem = Item.childNodes[NumberSubItem];
					
					if(SubItem.nodeName == "UL")
					{
						SubLists = true;
						ProcessList(SubItem);
					}
				}
				//var Span = document.createElement("SPAN");
				//var Space = '\u00A0'; // &nbsp;
				
				//Span.className = NodeLinkClass;
				
				if(SubLists)
				{
					// This LI has UL's in it, so it's a +/- node
					if(Item.className == null || Item.className == "")
					{
						Item.className = NodeClosedClass;
					}
					
					// If it's just text, make the text work as the link also
					if(Item.firstChild.nodeName == "#text")
					{
						Space = Item.firstChild.nodeValue;
						Item.removeChild(Item.firstChild);
					}
					//Span.onclick = function ()
					//{
					//	this.parentNode.className = (this.parentNode.className == NodeOpenClass) ? NodeClosedClass : NodeOpenClass;
					//	return false;
					//}
				}
				else
				{
					// No sublists, so it's just a bullet node
					
					Item.className = NodeBulletClass;
					
					//Span.onclick = function ()
					//{
					//	return false;
					//}
				}
				
				//Span.appendChild(document.createTextNode(Space));
				//Item.insertBefore(Span, Item.firstChild);
			}
		}
	}
	
