// start of crazy menu creation
// dynamic drop down menu generator, menu data is fetched from database, recommended container is table cell
// emphasis should be put on the 'src' perl script to achieve best visual effects
MainMenuClass    = null;
SubMenuClass     = null;
DropMenuEnabled  = "<img src='/images/gui/menu_close.gif' border='0' title='drop down menu is enabled for a quick navigation, click to disable'" +
                   " onClick='disableDropMenu()' />";
DropMenuDisabled = "<img src='/images/gui/menu_open.gif' border='0' title='drop down menu is disabled, click to enable it for a quick navigation'" +
                   " onClick='enableDropMenu()' />";
function checkMenuCookie() {
//	document.write(getCookie("disableDropDown") ? DropMenuDisabled : DropMenuEnabled);
}

function disableDropMenu() {
	document.cookie = "disableDropDown=1;path=/";	
//	show("menu_icon", DropMenuDisabled);
}

function enableDropMenu() {
	eraseCookie("disableDropDown");	
//	show("menu_icon", DropMenuEnabled);
}
function registerMainMenuClass(thisClass) {
	MainMenuClass = thisClass;
}
function registerSubMenuClass(thisClass) {
        SubMenuClass = thisClass;
}
function popMenu(id, src) {
	return;
	// do nothing if the user sets cookie to disable drop down menu
	if(getCookie("disableDropDown")) { return; }
	var root;
	if(id.indexOf("_") < 0) {
		root = id;
	}else {
		root = id;
		root = root.replace(/\_.*/,'');
	}
	var rootElem = findDOM("drop_container_" + root);
        if(rootElem) { rootElem.className = "mouseOn"; }
        var containerID = "drop_container_" + id;
	// construct the menu only if the menu does not exist to avoid unnecessary menu reloading
	if(findDOM(containerID + "_span")) { return; }
	constructMenu(id, src);
	return;
}

function constructMenu(id, src) {
        var span        = document.createElement("span");
        var containerID = "drop_container_" + id;
	var container   = findDOM(containerID);
        span.setAttribute("id", containerID + "_span");
        span.setAttribute("name", containerID + "_span");
	findDOM("menu_creator").src = src; // invoke menu generator
        container.appendChild(span);
	return;
}

function removeMenu(evt, id, ids) {
	var source       = getSource(evt);
	var target       = getTarget(evt);
	var targetParent = getParent(target);
	var containerID  = "drop_container_" + id;
        if(ids.indexOf("_") < 0) {
		if(target && targetParent && (contains(target.id, "_" + ids) || contains(targetParent.id, "_" + ids))) { 
			return; 
		}else {
			destroyMenu(containerID);
		}
        }else {
		var ancestor = ids;
		ancestor     = ancestor.replace(/\_.*/,'');
		if(target && targetParent && (contains(target.id, "_" + ids) || contains(targetParent.id, "_" + ids))) { 
			return; 
		}else {
                	destroyMenu(containerID);
		}
		if(!target || !target.id || !contains(target.id, ancestor)) {
			destroyMenu("drop_container_" + ancestor);
		}
	}
	return;
}

function destroyMenu(containerID) {
        var container = top.findDOM(containerID);
        var span      = top.findDOM(containerID + "_span");
        if(span) { destroy(container,span); }
        return;
}

function destroy(container,child) {
	hideObject(child);
	container.removeChild(child);
	return;
}

function getSource(e) {
	return window.event ? e.srcElement : e.target;
}


function getTarget(e) {
	return window.event ? e.toElement : e.relatedTarget;
}

function getParent(object) {
	if(object) {
		return object.parentElement ? object.parentElement : object.parentNode;
	}
}

function contains(container, containee) {
	return container.indexOf(containee) < 0 ? false : true;
}

function menuMouseOut(id, subMenu) {
	boxMouseOut(id);
        id = id.indexOf("_") < 0 ? id : id.replace(/\_.*/,'');
	var rootElem = findDOM("drop_container_" + id);
	if(rootElem) {
		rootElem.className = subMenu ? SubMenuClass : MainMenuClass;
	}
}

function boxMouseOn(id) {
        var textElem = findDOM("text_tr_" + id);
        if(textElem) { textElem.className = "drop_text_mouseOn"; }
}

function boxMouseOut(id) {
	var textElem = findDOM("text_tr_" + id);
	if(textElem) { textElem.className = "drop_text"; }
}
function noBubble(evt) {
	var e = (evt) ? evt : window.event;	
	e.cancelBubble = true;
}
//end of crazy menu creation

