var hideTimeout=100; //300
var showTimeout=0; //250

//Add event handler to node
function addHandler(node, evt, func) {
    if (node.addEventListener) {
        node.addEventListener(evt, func, false);
    } else {
        node.attachEvent('on' + evt, func);
    }
};

//check if node "child" is a child node of node "parent"
function isParent(child, parent) {
    if (!child || !parent) {
        return false;
    }
    while (true) {
        if (child == parent) {
            return true;
        }
        if (child.parentElement) {
            child = child.parentElement;
        } else if (child.parentNode) {
            child = child.parentNode;
        } else {
            return false;
        }
    }
}


function HideRefineMenus() {
    var objRefineMenuBar = document.getElementById('refine_menu_bar');
    if (objRefineMenuBar) {
        for(var curChildIndex=0; curChildIndex<objRefineMenuBar.childNodes.length; curChildIndex++) {
            if (objRefineMenuBar.childNodes[curChildIndex].className=='popup_small') {
                objRefineMenuBar.childNodes[curChildIndex].style.display='none';
            }
        }
    }
}

function HideMainMenus() {
    var objRefineMenuBar = document.getElementById('classic_ul');
    for(var curChildIndex=0; curChildIndex<objRefineMenuBar.childNodes.length; curChildIndex++) {
        if (objRefineMenuBar.childNodes[curChildIndex].className=='popup_small') {
            alert('HIDE '+curChildIndex);
            objRefineMenuBar.childNodes[curChildIndex].style.display='none';
        }
    }
}

var arShowTimeOuts = Array();
var arHideTimeOuts = Array();
function DelayedShowObject(id){
    var callbackFunc = 'ShowMenuItemObject("'+id+'")'
    if (!arShowTimeOuts[id]) {
        arShowTimeOuts[id] = setTimeout(callbackFunc, showTimeout);
    }

    if (arHideTimeOuts[id]) {
    	clearTimeout(arHideTimeOuts[id]);
    	arHideTimeOuts[id] = null;
    }
}

function DelayedHideObject(id){
    var callbackFunc = 'HideMenuItemObject("'+id+'")'
    if (!arHideTimeOuts[id]) {
        arHideTimeOuts[id] = setTimeout(callbackFunc, hideTimeout);
    }

    if (arShowTimeOuts[id]) {
    	clearTimeout(arShowTimeOuts[id]);
    	arShowTimeOuts[id] = null;
    }
}


function ShowMenuItemObject(id) {
	arHideTimeOuts[id] = null;
	return ShowObject(id);
}

function HideMenuItemObject(id) {
	arShowTimeOuts[id] = null;
    return HideObject(id);
}

function getParent(node, level) {
	if (level<1) {
		level = 1;
    }

    resultNode = node;
    for(curLevel=1; curLevel<=level; curLevel++) {
        if (resultNode.parentElement) {
        	resultNode = resultNode.parentElement;
        } else {
        	resultNode = resultNode.parentNode;
        }
    }
              //alert(resultNode);
    return resultNode;
}

function menu_control(o_id,f_id) {
	DelayedShowObject(o_id);
       DelayedShowObject(f_id);
       var node = document.getElementById(o_id);
       var callNode = this;
       if (node) {
	
            addHandler(node, 'mouseout', function(e) {
                var target = e.relatedTarget || e.toElement;
                if(
                    !isParent(target, node) && target!=node &&
                    !isParent(target,callNode) && target!=callNode
                ) {
			
                    DelayedHideObject(o_id);
                    DelayedHideObject(f_id);
                }
            });
	     
	     addHandler(callNode, 'mouseout', function(e) {
                var target = e.relatedTarget || e.toElement;
                if(
                    !isParent(target, node) && target!=node &&
                    !isParent(target,callNode) && target!=callNode
                ) {
			
                    DelayedHideObject(o_id);
                    DelayedHideObject(f_id);
                }
            });

       }
}



function WjShowMenu(menu_key,require_check,callNode){
	var curframe = 'frame_' + menu_key;
	
	if(require_check){
		ajax_check_preload(menu_key);
	}
	DelayedShowObject(menu_key);
	DelayedShowObject(curframe);
	var node = document.getElementById(menu_key);
	//var callNode = this;
	if (node) {
		addHandler(node, 'mouseout', function(e) {
			var target = e.relatedTarget || e.toElement;
			if(
				!isParent(target, node) && target!=node &&
				!isParent(target,callNode) && target!=callNode
			) {
				DelayedHideObject(menu_key);
				DelayedHideObject(curframe);
			}
		});
	
		addHandler(callNode, 'mouseout', function(e) {
			var target = e.relatedTarget || e.toElement;
			if(
				!isParent(target, node) && target!=node &&
				!isParent(target,callNode) && target!=callNode
			) {
				DelayedHideObject(menu_key);
				DelayedHideObject(curframe);
			}
		});
	}
}

function WjStyle(menu_key){
	document.getElementById('frame_'+menu_key).style.display='none';
	document.getElementById(menu_key).style.display='none';
}

function WjHide(menu_key){
	HideObject(menu_key); HideObject('frame_'+menu_key);
}
