(function(){


	var ADD_EVENT_LISTENER, TO_ARRAY, GET_ELEM_BY_CLASSNAME,
			NORMALISE_URL = /^[a-zA-Z]+:\/\/([^\?#]*?)([\?#].*)?$/;

	if (window.$TORA) {
		
		var SPLIT_COL_REQS = $TORA.Requirement(["content.common::splitListColumns"]);
		$TORA.whenReady(function() {

			var $c_ = $TORA("common");
			ADD_EVENT_LISTENER = $c_.dom.addEventListener;
			TO_ARRAY = $c_.object.toArray;
			GET_ELEM_BY_CLASSNAME = $c_.dom.getElementsByClassName;
	
			if (typeof(document.body.style.minWidth) == "undefined") {
				var hoverItems = [],
						header = document.getElementById("dni-header");
				hoverItems = hoverItems.concat(
						TO_ARRAY(header.getElementsByTagName("ul")),
						TO_ARRAY(header.getElementsByTagName("li")));
				addHoverForItems({ hoverClass: "hover", items: hoverItems});
			}
			
			initLogoutButton("dni-hat");
			highlightCurrentMenuItem("dni-primary-nav");
			highlightCurrentMenuItem("dni-networks-nav");
			
			SPLIT_COL_REQS(function() {
				splitMenuColumns("dni-primary-nav", "level-2");
			});
		});
	}

	function addHoverForItems(config) {
		var itemLen,
				items = config.items,
				process = config.process,
				cMouseIn = config.mouseIn,
				cMouseOut = config.mouseOut,
				hoverClass = " "+config.hoverClass;

		for (var i=0,k;k=items[i];i++) {
			var ret;
			if (process) ret = process(k);
			if ((config.hoverClass)&&(ret != false)) {
				ADD_EVENT_LISTENER.call(k, "mouseover", cMouseIn||function(ev) {
					this.className += hoverClass;
				});
				ADD_EVENT_LISTENER.call(k, "mouseout", cMouseOut||function(ev){
					this.className = this.className.replace(hoverClass, "");		
				});
			}
		}
	};
	function highlightCurrentMenuItem(menu) {
		
		if ((menu)&&(menu = document.getElementById(menu))) {
			var locTest = new RegExp("^"
							+document.location.href.replace(NORMALISE_URL, "$1")
							+"$"),
					links = menu.getElementsByTagName("a");
			
			for (var i=0,k;k=links[i];i++) {
				var url = k.href, parent = k.parentNode;
				if ((url)&&(locTest.test(
						url.replace(NORMALISE_URL, "$1"))))
					parent.className += parent.className ? ' dni-nav-current'
							: 'dni-nav-current';
			}
		}
	};
	function splitMenuColumns(menu, lvlClass) {
		
		if ((menu)&&(menu = document.getElementById(menu))) {
			var uls = GET_ELEM_BY_CLASSNAME.call(menu, lvlClass);
			var splitList = $TORA("content").common.splitListColumns;
			for(var j = 0, list; (list = uls[j]); j++)
				splitList({list: list, threshold: 11});
		}
	};
	function initLogoutButton(container) {
		
		if ((container)&&(container = document
				.getElementById(container))) {
			
			var link = GET_ELEM_BY_CLASSNAME
					.call(container, "facebook-logout");
			if (link.length > 0)
				ADD_EVENT_LISTENER.call(link[0], "click", function() {
					var user = $TORA("USER");
					user.logOut(user);	
					return false;
				});
		};
	};
	
})();


