HideInterval = 1000;
CancelHideUL = false;

function CreateMenus( Obj, LevelsRemaining ) {
    if( !LevelsRemaining )
        return false;

    Obj.setAttribute("IsGreatestAncestor", true);

    for( x = 0; x < Obj.childNodes.length; x++ ) {
        if( Obj.childNodes.item( x ).nodeName.toLowerCase() == "li" ) {
            TempLI = Obj.childNodes.item( x );
            AddEvent( TempLI, "mouseover", ShowUL, false );
            AddEvent( TempLI, "mouseout", HideUL, false );
            
            //if( TempLI.getElementsByTagName("ul").item(0) )
            //    CreateMenus( TempLI.getElementsByTagName("ul").item(0) );
        }
    }
}

function Inspect(elm)
{
	var str = "";
	for (var i in elm)
	{
		if(elm.getAttribute(i))
			str += i + ": " + elm.getAttribute(i) + ", ";
	}
	alert(str);
};

function FindParent( Obj, nodeName ) {
	nodeName = nodeName.toUpperCase()
	while( Obj.nodeName != nodeName && Obj != document )
		Obj = Obj.parentNode;
	return Obj;
};

LastOpenedMenuItem = null;

function ShowUL() {
    var Target = (arguments[0].target) ? arguments[0].target : arguments[0].srcElement
    
    if ( FindParent( Target, "ul" ) == LastOpenedMenuItem )
        LastOpenedMenuItem = null;
    
    if( Target != LastOpenedMenuItem && FindParent( Target, "li" ) != LastOpenedMenuItem && FindParent( Target, "ul" ) != LastOpenedMenuItem && LastOpenedMenuItem ) {
        CancelHideUL = true;
        LastOpenedMenuItem.style.display = "none";
        LastOpenedMenuItem = null;
    }

    Target = FindParent( Target, "li" );
    if( Target.getElementsByTagName("ul").item(0) ) {
        CancelHideUL = true;
        
        Target.getElementsByTagName("ul").item(0).style.display = "block";
        Target.getElementsByTagName("ul").item(0).style.position = "absolute";
        TargetUL = FindParent(Target, "ul");
        if( TargetUL.style.position == "absolute" ) {
            GEBI("Debug").innerHTML += parseInt(TargetUL.style.left);
            Target.getElementsByTagName("ul").item(0).style.position == "absolute";
            Target.getElementsByTagName("ul").item(0).style.left = "200px";
            Target.getElementsByTagName("ul").item(0).style.top =  0;
        } else {
            Target.getElementsByTagName("ul").item(0).style.left = GetRealLeft( Target ) + "px";
            Target.getElementsByTagName("ul").item(0).style.top =  ( GetRealTop( Target ) + Target.offsetHeight ) + "px";
        }
    } else {
        CancelHideUL = true;
    }
}

function HideUL()  {
    var Target = (arguments[0].target) ? arguments[0].target : arguments[0].srcElement;
    
    Target = FindParent( Target, "li" );
    if( Target.getElementsByTagName("ul").item(0) ) {
        LastOpenedMenuItem = Target.getElementsByTagName("ul").item(0);
        setTimeout("FinallyHideUL();", HideInterval);
    } else {
        LastOpenedMenuItem = FindParent( Target, "ul" );
        setTimeout("FinallyHideUL();", HideInterval);
    }
}

function FinallyHideUL() {
    if( LastOpenedMenuItem && !LastOpenedMenuItem.getAttribute( "IsGreatestAncestor" ))
        LastOpenedMenuItem.style.display = "none";
}

function GEBI( Obj ){
	return document.getElementById(Obj);
};

function AddEvent(obj, evType, fn, useCapture){
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else
		alert("Handler could not be attached");
};

// Returns absolute left position of relatively placed object
function GetRealLeft( i )
{
	var Left = 0, Top = 0;
	while ( i != null && i )
	{
		Left += i.offsetLeft;
		Top += i.offsetTop;
		i = i.offsetParent;
	}
	return Left;
};

// Returns absolute top position of relatively placed object
function GetRealTop( i )
{
	var Left = 0, Top = 0;
	while ( i != null && i )
	{
		Left += i.offsetLeft;
		Top += i.offsetTop;
		i = i.offsetParent;
	}
	return Top;
};
