Menu = new Object();

includeCss('/js/menu/menu.css');

Menu.timers = new Object();
Menu.timers.collapse = -1;


Menu.logString = '';

/* Actions */
Menu.expand = function (ntevent, ev, tag) {
	window.clearTimeout(Menu.timers.collapse);
	// collapse any other submenus, siblings to this
	var parentNode = tag.parentNode;
	var lis = parentNode.childNodes;
	for(var iLi = lis.length - 1; iLi >= 0; iLi--) {
		var li = lis[iLi];
		if(li != tag && li.tagName) {
			li.getBySelector = Tag_getBySelector;
			var uls = li.getBySelector('ul');
			for(var iUl = uls.length - 1; iUl >= 0; iUl--) {
				uls[iUl].style.display = 'none';
			}
		}
	}

	// expand this UL (this submenu)
	tag.getChildTags = Tag_getChildTags;
	var uls = tag.getChildTags('ul');
	if(uls.length == 1) {
		uls[0].style.display = 'block';
	} else if(uls.length > 1) {
		throw "More than 1 submenu (UL) in this LI tag! " + uls.length + " ULs found.";
	}
	
	return false;
}

Menu.collapse = function (ntevent, ev, tag) {
	tag.style.display = '';
	return true;
}

Menu.timedCollapse = function (ntevent, ev, tag) {
	window.clearTimeout(Menu.timers.collapse);

	if((!ev && event.srcElement.tagName != 'LI') || (ev && ev.target.tagName != 'LI')) {
		Menu.startTimedCollapse(ntevent, ev, tag, 1000);
		return true;
	}
	
	Menu.startTimedCollapse(ntevent, ev, tag, 200);
}

Menu.startTimedCollapse = function (ntevent, ev, tag, time) {
	function eventClosure(ntevent, ev, tag, time) {
		Menu.timers.collapse = window.setTimeout(
			function (ntevent, ev, tag) {
				Menu.collapseAll(ntevent, ev, tag);
			}
			, time
		);
	}
	eventClosure(ntevent, ev, tag, time);
}

Menu.collapseAll = function (ntevent, ev, tag) {
	var uls = document.getBySelector('ul.menu ul');
	for(var iUl = uls.length - 1; iUl >= 0; iUl--) {
		uls[iUl].style.display = 'none';
	}
	
	return true;
}

Menu.highlightItem = function (ntevent, ev, tag) {
	tag.className = CssClassList.add(tag.className, 'hover');
	return true;
}
Menu.flattenItem = function (ntevent, ev, tag) {
	tag.className = CssClassList.remove(tag.className, 'hover');
	return true;
}



Menu.passThru = function (ntevent, ev, tag) {
	return true;
}

Menu.stop = function (ntevent, ev, tag) {
	return false;
}

Menu.logEvent = function (ntevent, ev, tag, options) {
	var sLog = ntevent.getString();

	if(ev) {
		var sTagName = new String(ev.target.tagName);
		sLog += ' <' + sTagName.toLowerCase() + '>' + '\n';
	}
	else {
		var sTagName = new String(event.srcElement.tagName);
		sLog += ' <' + sTagName.toLowerCase() + '>' + '\n';
	}

	Menu.logString = sLog + Menu.logString;
	
	if(options) {	// write log to optional div
		var div = document.getElementById(options);
		
		if(div) {
			var s = Menu.logString.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\n/g, '<br>\n');
			div.innerHTML = s;
		}
		
		/*
		if(div.childNodes.length > 0)
			div.removeChild(div.childNodes[0]);
		
		div.appendChild(document.createTextNode(Menu.logString));
		*/
	}
	return true;
}