﻿
var DCCCD_PageHeader = DCCCD_PageHeader ? DCCCD_PageHeader : function() {
	// private constants
	var kMenuID_Prefix = 'Header_Navigation_';
	var kMenuID_Header = '';
	var kMenuID_DropDown = 'DropDowns_';
	var kMenuID_Link = 'Link_';
	var kSelectedClass = 'Selected';
	var kTimeout = 500;

	// private tracking variables
	var _timer = 0;
	var _menu = 0;
	var _prev_bg = "";

	// private functions
	function GetElement(id) {
		var element = document.getElementById(id);
		if (element)
			return element;
		return null;
	}

	function HasClass(element, class_name) {
		if (IsNull(element) || IsNull(element.className))
			return false;
		else
			return (element.className.indexOf(class_name) > -1);
	}
	function AppendClass(element, class_name) {
		if (!IsNull(element) && !IsNull(element.className) && !HasClass(element))
			element.className += (" " + class_name);
	}
	function RemoveClass(element, class_name) {
		if (!IsNull(element) && !IsNull(element.className) && HasClass(element)) {
			if (element.className.indexOf(" " + class_name) > -1)
				element.className.replace(" " + class_name, "");
			else
				element.className.replace(class_name, "");
		}
	}

	function IsNull(item) {
		return (!item || item == undefined || item == null)
	}

	function IsChildOf(parent, child) {
		if (IsNull(parent) || IsNull(child))
			return false;

		var cur_child = child;
		while (cur_child.parentNode) {
			if ((cur_child = cur_child.parentNode) == parent)
				return true;
		}
		return false;
	}

	function BuildHeaderID(name) {
		return kMenuID_Prefix + kMenuID_Header + name;
	}
	function BuildDropDownID(name) {
		return kMenuID_Prefix + kMenuID_DropDown + name;
	}
	function BuildLinkID(name) {
		return kMenuID_Prefix + kMenuID_Link + name;
	}

	function ShowMenu_Begin() {
		HideMenu_Cancel();
		ShowMenu();
	}
	function HideMenu_Begin() {
		HideMenu_Cancel();
		_timer = window.setTimeout(HideMenu, kTimeout);
	}
	function HideMenu_Complete() {
		HideMenu();
	}
	function HideMenu_Cancel() {
		if (!IsNull(_timer)) {
			window.clearTimeout(_timer);
			_timer = null;
		}
	}

	function ShowMenu() {
		var menu_header = GetElement(BuildHeaderID(_menu));
		var menu_dropdown = GetElement(BuildDropDownID(_menu));
		var menu_link = GetElement(BuildLinkID(_menu));

		if (!IsNull(menu_header))
			menu_header.style.backgroundColor = '#77A5D4';
		if (!IsNull(menu_link))
			menu_link.style.color = '#FFFFFF';
		if (!IsNull(menu_dropdown))
			menu_dropdown.style.display = "block";

	}
	function HideMenu() {
		var menu_header = GetElement(BuildHeaderID(_menu));
		var menu_dropdown = GetElement(BuildDropDownID(_menu));
		var menu_link = GetElement(BuildLinkID(_menu));

		if (!IsNull(menu_header) && !HasClass(menu_header, kSelectedClass)) {
			menu_header.style.backgroundColor = '#C8D8ED';
			if (!IsNull(menu_link))
				menu_link.style.color = '#000000';
		}
		if (!IsNull(menu_dropdown))
			menu_dropdown.style.display = "none";

		_menu = null;
	}

	// return public methods and properties
	return {
		Menu_Enable: function(name) {
			if (_menu != name)
				HideMenu();
			_menu = name;
			ShowMenu_Begin();
		},

		Menu_Disable: function(element, event, name) {
			if (_menu == name) {
				// get the event
				if (!event)
					event = window.event;

				var target = null;
				if (event.toElement)
					target = event.toElement;
				else if (event.relatedTarget)
					target = event.relatedTarget;

				// if the target is null, we've moved off the window
				if (IsNull(target)) {
					HideMenu_Begin();
					return;
				}

				// if we have invalid params, just exit now
				var header = GetElement(BuildHeaderID(name));
				var drop_down = GetElement(BuildDropDownID(name));
				if (IsNull(element) || IsNull(header) || IsNull(drop_down))
					return;

				// if the target is either of the two top-level containers, ignore
				if (target == header || target == drop_down)
					return;

				// if the element is not a descendent of the container or the container itself, hide
				if (!IsChildOf(header, target) && !IsChildOf(drop_down, target))
					HideMenu_Begin();
			}
		}
	};
} ();
