Menu = new Object();

includeCss('/js/menu/menu.css');

Menu.timers = new Object();
Menu.timers.collapse = -1;


Menu.logString = '';

/* Actions */
Menu.onExpand = function (ev) {
	window.clearTimeout(Menu.timers.collapse);
	// collapse any other submenus, siblings to this
	var parentNode = ev.tag.parentNode;
	var lis = parentNode.childNodes;
	for(var iLi = lis.length - 1; iLi >= 0; iLi--) {
		var li = lis[iLi];
		if(li != ev.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)
	ev.tag.getChildTags = Tag_getChildTags;
	var uls = ev.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 true;
}

Menu.onCollapse = function (ev) {
	ev.tag.style.display = '';
	return true;
}

Menu.onTimedCollapse = function (ev) {
	window.clearTimeout(Menu.timers.collapse);

	if((!ev && event.srcElement.tagName != 'LI') || (ev.w3cEvent && ev.w3cEvent.target.tagName != 'LI')) {
		Menu.startTimedCollapse(ev, 1000);
		return true;
	}
	
	Menu.startTimedCollapse(ev, 200);
}

Menu.startTimedCollapse = function (ev, time) {
	function eventClosure(ev, time) {
		Menu.timers.collapse = window.setTimeout(
			function (ev) {
				Menu.onCollapseAll(ev);
			}
			, time
		);
	}
	eventClosure(ev, time);
}

Menu.onCollapseAll = function (ev) {
	var uls = document.getBySelector('ul.menu ul');
	for(var iUl = uls.length - 1; iUl >= 0; iUl--) {
		uls[iUl].style.display = 'none';
	}
	
	return true;
}

Menu.onHighlightMenu = function (ev) {
	var sSrc = new String(ev.tag.src);
	var sSrcList = sSrc.split('/');
	var sFileList = sSrcList[sSrcList.length - 1].split('off');
	
	if(sFileList.length == 2) {
		sSrc = '';
		for(var iSrc = 0; iSrc < sSrcList.length - 1; iSrc++) {
			sSrc += sSrcList[iSrc] + '/';
		}
		ev.tag.src = sSrc + sFileList[0] + 'on' + sFileList[1];
	}
	
	return true;
}
Menu.onFlattenMenu = function (ev) {
	var sSrc = new String(ev.tag.src);
	var sSrcList = sSrc.split('/');
	var sFileList = sSrcList[sSrcList.length - 1].split('on');
	
	if(sFileList.length == 2) {
		sSrc = '';
		for(var iSrc = 0; iSrc < sSrcList.length - 1; iSrc++) {
			sSrc += sSrcList[iSrc] + '/';
		}
		ev.tag.src = sSrc + sFileList[0] + 'off' + sFileList[1];
	}
	return true;
}

Menu.onHighlightItem = function (ev) {
	CssClassList.add(ev.tag, 'hover');
	return true;
}
Menu.onFlattenItem = function (ev) {
	CssClassList.remove(ev.tag, 'hover');
	return true;
}


Menu.onLogEvent = function (ev) {
	var sLog = ev.eventDef.getString();

	var sTagName = new String(ev.tag.tagName);
	sLog += ' <' + sTagName.toLowerCase() + '>' + '\n';

	Menu.logString = sLog + Menu.logString;
	
	if(ev.options && ev.options.id) {	// write log to optional div
		var div = document.getElementById(ev.options.id);
		
		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;
}