(function($) {
	$.fn.TreeMenu = function(p_options) {
		
		m_containerID = p_options;
		m_rootMenuLI = new Array();
		m_subMenu = null;
		m_subMenuIndex = null;
		m_footerTopOffset = null;
		
		drawTree();
		openMenuItem();
	}
	  
 	function drawTree(){

		rootUL = $("#" + m_containerID).children().filter("ul:first").children();		
		rootUL.attr("id", "rootUL");
						
		// Loop Through All LI Elements On Root UL
		//*******************************************************		
		rootUL.each(
			function(i, elm){	
				if(elm.tagName == 'LI'){

					// Add Class To Identify root. Class not defined in CSS
					$(elm).addClass("rootLI");
					var menuLink = $($(elm).children().filter("a:first"));
				
					if($(elm).children().filter("ul").length > 0){
						// Only Setup Menu Items With A Sub Menu
						menuLink.click(function(p_evt){
							openMenu(this.parentNode);
							p_evt.preventDefault();
						});


						if(menuLink.attr("href") != undefined){
							menuLink.dblclick(function(p_evt){
								document.location = this.href;
								p_evt.preventDefault();
							});
						}else{
							menuLink.css("cursor", "pointer");
						}
					}
					else if(document.location.toString().indexOf(menuLink.attr("href")) != -1){
						// Disable Menu Item For Current Page
						menuLink.replaceWith(menuLink.text());
					}		
				}
			}
		)
		
		// Loop Through All Child Root LI Elements 
		//*******************************************************	
		var menuListLI = $("#" + m_containerID + " li")
		var menuListLength = menuListLI.length;
		var menuItem;
		var menuItemLink
		var hasUL;
		var isRootLI;
				
		menuListLI.each(		
			function(i, elm){
				menuItem = $(elm);

				hasUL = (menuItem.children().filter("ul").length > 0);
				isRootLI = $(menuItem).hasClass("rootLI");

				if(hasUL && !isRootLI){
					// Menu Item Has Sub Menu
					//*******************************************************
					menuItemLink = menuItem.childNodes[0];

					$(menuItemLink).click(function(p_evt){
						openMenu(this.parentNode);
						p_evt.preventDefault();
					});
				}
			}
		)
	
		// Loop Through All UL Elements : Traverse in Reverse For IE
		//*******************************************************
		m_subMenu = rootUL.children().filter("ul")
		m_subMenuIndex = (m_subMenu.length - 1);

		m_subMenu.each(		
			function(i, elm){
				var subMenu = $(elm)
					subMenu.attr("id", i);
					
					m_rootMenuLI[i] = subMenu
					subMenu.hide();
			}
		)
	}

	function openMenuItem(){
	
		var pagePath = document.location.href;
								
		// Check For Content Sensitive Help : Open Navigation To Current Page
		//*******************************************************
		var urlArray = pagePath.split("/");
		var urlArrayLength = urlArray.length;
		var currentPath = "/";
		var startPath = 2; // 2 Index Is Server Domain Address

		for(var i = 0; i < urlArrayLength; i++){
			if(i > startPath){
				currentPath += (i == (urlArrayLength - 1)) ? urlArray[i] : urlArray[i] + "/";
			}
		}
		
		if(currentPath.indexOf(".aspx") == -1){
			// Path Is Not Pointed to file. Assume Default File
			currentPath += "index.aspx";
		}
		
		// Loop Through Links In Menu To Find A Match To currentPath
		//*******************************************************
		
		var linkList = $("#" + m_containerID + " a");
		var linkListLength = linkList.length;
		var linkLI = null;
		var aLink = null;

		linkList.each(		
			function(i, elm){
				aLink = $(elm).attr("href");
				
				if(aLink != undefined){
					if(aLink.indexOf(currentPath) != -1){
						
						openMenu($(elm).parent().parent().parent());
						$(elm).replaceWith("<span class=\"selectedPage\">" + $(elm).text() + "</span>");
					}
				}
			}
		)
	}

	function openMenu(p_li){			
		var subMenu = $(p_li).children().filter("ul:first");
		$(m_rootMenuLI[subMenu.attr("id")]).slideToggle("normal"); // slow, normal, fast
		return false;
	}
})(jQuery);

$(function() {
	$("#treeContainer").TreeMenu("treeContainer");
});