	function MenuItem(hdnObj)
		{
			
			var strParts = hdnObj.value.split(";");
		
			this.id = strParts[0];
			this.level = strParts[1];
			this.sortorder = strParts[2];
			this.expanded = strParts[3];
			this.islastitem = strParts[4];
			this.displayed = strParts[5];
			this.selected = strParts[6];
			this.hdnObj = hdnObj;
			this.row = hdnObj.parentNode.parentNode;
		
			return this;
		}
		
		function ToggleImage(menuItem, imageObj)
		{
			var images = menuItem.row.getElementsByTagName("IMG");
			
			var imgExpand = images[menuItem.level - 1];
			if (menuItem.expanded == 1)
			{
				if (menuItem.islastitem == 1)
				{
					if (menuItem.sortorder == 1)
					{
						imgExpand.src = imageObj.folderMinusTopAndEnd;
					}
					else
					{
						imgExpand.src = imageObj.folderMinusEnd;
					}
					
				}
				else
				{
					if (menuItem.sortorder == 1)
					{
						imgExpand.src = imageObj.folderMinusTop;
					}
					else
					{
						imgExpand.src = imageObj.folderMinus;
					}
				}	
			}
			else
			{
				if (menuItem.islastitem == 1)
				{
					if (menuItem.sortorder == 1)
					{
						imgExpand.src = imageObj.folderPlusTopAndEnd;
					}
					else
					{
						imgExpand.src = imageObj.folderPlusEnd;
					}
				}
				else
				{
					if (menuItem.sortorder == 1)
					{
						imgExpand.src = imageObj.folderPlusTop;
					}
					else
					{
						imgExpand.src = imageObj.folderPlus;	
					}
				}
			}
		}
		
		function ToggleItem(parentMenuItem, elements, imageObj, tblName)
		{
			var counter = parentMenuItem.sortorder - 1;
		
			counter++;
			if (counter > elements.length - 1)
			{
				return counter;
			}
			
			var currentMenuItem = new MenuItem(elements[counter]);

			while(parentMenuItem.level < currentMenuItem.level)
			{
				if (parentMenuItem.expanded == 1)
				{
					if (parentMenuItem.row.style.display == "none" || parentMenuItem.expanded == 0)
					{
						currentMenuItem.row.style.display = "none";
						UpdateIsVisible(currentMenuItem, 0);
					}
					else
					{
						currentMenuItem.row.style.display = "";
						UpdateIsVisible(currentMenuItem, 1);
						ToggleImage(parentMenuItem, imageObj);
					}
				}
				else
				{
					currentMenuItem.row.style.display = "none";
					UpdateIsVisible(currentMenuItem, 0);
					ToggleImage(parentMenuItem, imageObj);
				}
				
				if (currentMenuItem.selected == 1)
				{
					SetColor(currentMenuItem.sortorder, tblName)
				}
				
				counter = ToggleItem(currentMenuItem, elements, imageObj, tblName);
			
				if (counter <= elements.length - 1)
				{
					currentMenuItem = new MenuItem(elements[counter]);
				}
				else
				{
					return counter;
				}
			} 
			
			return counter;
		}
		
		function UpdateValue(menuItem, expanded)
		{
			menuItem.expanded = expanded;
			menuItem.hdnObj.value = menuItem.id + ";" + menuItem.level + ";" + menuItem.sortorder + ";" + menuItem.expanded + ";" + menuItem.islastitem + ";" + menuItem.displayed + ";" + menuItem.selected;
		}
		
		function UpdateIsVisible(menuItem, isVisible)
		{
			menuItem.displayed = isVisible;
			menuItem.hdnObj.value = menuItem.id + ";" + menuItem.level + ";" + menuItem.sortorder + ";" + menuItem.expanded + ";" + menuItem.islastitem + ";" + menuItem.displayed + ";" + menuItem.selected;			
		}
		
		function UpdateIsSelected(menuItem, isSelected)
		{
			menuItem.selected = isSelected;
			menuItem.hdnObj.value = menuItem.id + ";" + menuItem.level + ";" + menuItem.sortorder + ";" + menuItem.expanded + ";" + menuItem.islastitem + ";" + menuItem.displayed + ";" + menuItem.selected;			
		}
		
		function GetAllInputHiddenElements(tblSource)
		{
			var aHdnElements = new Array();
			aHdnElements.length = tblSource.rows.length;
			
			for (var idx = 0; idx < aHdnElements.length; idx++)
			{	
				var row = tblSource.rows[idx];
				var elements = row.getElementsByTagName("INPUT");
				
				
				aHdnElements[idx] = GetFirstHiddenElement(elements);
			}
		
			return aHdnElements;
		
		}
		
		function GetFirstHiddenElement(aInputs)
		{
			for (var idx = 0; idx < aInputs.length; idx++)
			{
				if (aInputs[idx].type == "hidden")
				{
					return aInputs[idx];
				}
			}
			
			return null;	
		}
		
		function SetColor(sortorder, tblName)
		{
			var tblCat = document.getElementById(tblName);
			hdnElements = GetAllInputHiddenElements(tblCat);
			var currentMenuItem = new MenuItem(hdnElements[sortorder - 1]);
			
			for (var idx = 0; idx < hdnElements.length; idx++)
			{	
				var menuItem = new MenuItem(hdnElements[idx]);
				UpdateIsSelected(menuItem, 0);
			}
			
			UpdateIsSelected(currentMenuItem, 1);
			trElements = tblCategories.rows;
			
			for (var idx = 0; idx < trElements.length; idx++)
			{
				trElements[idx].bgColor = "";
			}
			var tr = trElements[sortorder - 1];
			
			tr.bgColor = "#998877";	
		}
		
		function td(level, id, sortorder, tblName)
		{
			var tblCat = document.getElementById(tblName);
			var imgObj = new ImageObject();
			hdnElements = GetAllInputHiddenElements(tblCat);
			var currentMenuItem = new MenuItem(hdnElements[sortorder - 1]);
			
			var expand = currentMenuItem.expanded;
			if (expand == 1)
			{
				expand = 0;
			}
			else
			{
				expand = 1;
			}
			
			ToggleImage(currentMenuItem, imgObj);
			UpdateValue(currentMenuItem, expand);
			ToggleItem(currentMenuItem, hdnElements, imgObj, tblName);
		}
		
		function tde(level, id, sortorder, tblName, doExpand)
		{
			var tblCat = document.getElementById(tblName);
			var imgObj = new ImageObject();
			hdnElements = GetAllInputHiddenElements(tblCat);
			var currentMenuItem = new MenuItem(hdnElements[sortorder - 1]);
			
			var expand = doExpand;
			
			ToggleImage(currentMenuItem, imgObj);
			UpdateValue(currentMenuItem, expand);
			ToggleItem(currentMenuItem, hdnElements, imgObj, tblName);
		}
		
		function InitTreeVisibility(tblName)
		{	
			var tblCat = document.getElementById(tblName);
			var imgObj = new ImageObject();
			var hdnElm = GetAllInputHiddenElements(tblCat);
			var counter = 0;
			var menuItem = null;
			
			while (counter < hdnElm.length)
			{
				menuItem = new MenuItem(hdnElm[counter]);
				if (menuItem.selected == 1)
				{
					SetColor(menuItem.sortorder, tblName);
				}
				counter = ToggleItem(menuItem, hdnElm, imgObj, tblName);
			}	
		}