/* Functions to expand and collapse the side nav. */
SideNavCollapse = new function() {
	return {		
		attachFirstLevelClick: function() {
			var $children;
			$("ul.sideNav li").each(function() {
				$children = $(this).find("ul");
				if ($children.length) {
					var $li = $(this);
					$li.addClass("hasChildren");					
					$li.find("> a").click(function() {
						SideNavCollapse.toggleChildren(this);
						return false;
					}).addClass("childrenHidden");
				}
			});			
		},
		
		hideAllChildren: function() {
			var children;
			$("ul.sideNav > li").each(function() {
				$children = $(this).find("ul");
				if ($children.length) {
					SideNavCollapse.hideChildren($(this).find("ul"), 'hide');
				}
			});
		},
		
		hideChildren: function($childrenUl) {
			var slideOrHide = arguments.length > 1 ? arguments[1] : 'slide';
			if (slideOrHide == 'slide') {
				$childrenUl.slideUp();
			} else {
				$childrenUl.hide();
			}			
			$childrenUl.parent("li").find("a:first").removeClass("childrenVisible").addClass("childrenHidden");
		},
		
		showChildren: function($childrenUl) {
			// Don't want to add CSS classes if there are no children. Also no need to slideDown if there are no children.
			if ($childrenUl.length) {
				$childrenUl.slideDown();				
				$childrenUl.parent("li").find("a:first").removeClass("childrenHidden").addClass("childrenVisible");
			}
		},
		
		toggleChildren: function(parentLink) {				
			var $li = $(parentLink).parent("li");
			/* Hide all other elements */			
			//SideNavCollapse.hideAllChildren();
			
			/* Show/hide my children */
			var $children = $li.children("ul");					
			if($children.is(":visible")) {
				SideNavCollapse.hideChildren($children);				
			} else {
				SideNavCollapse.showChildren($children);
			}
		},
		
		expandCurrentSection: function() {
			var $nav = $("ul.sideNav");
			var $currentLink = $nav.find("a[href='" + window.location.pathname + "']");			
			SideNavCollapse.showChildren($currentLink.parents("ul").not($nav));
		}
	}
}();

$(function() {
	SideNavCollapse.hideAllChildren();	
	SideNavCollapse.attachFirstLevelClick();
	SideNavCollapse.expandCurrentSection();
});

