var RootLevel = 0;
var LastHoverAnchor = null;
var RootAnchor = null;
var SelectedAnchor = null;


function GetAbsolutePosition()  
{  
    var Element = GetSupULFromAnchor(RootAnchor);
    var Position = { Left : 1, Top : 1 };
  
    while(Element && Element != document.body)
    {  
        Position.Left += Element.offsetLeft;  
        Position.Top += Element.offsetTop;  
        Element = Element.offsetParent;  
    }  
    return Position;  
}

function MoveElementToPosition(Element, Position)
{
    Element.style.position = "absolute";
    Element.style.left = Position.Left;
    Element.style.top = Position.Top;
}

function GetSelectedTabId()
{
    var TabId = -1;
    var RegEx = new RegExp("tabid[\/=]+(\\d+)|\/tab(\\d+)\/","ig");
    
    if(RegEx.exec(window.location.href) != null)
    {
        if(RegExp.$1.length > 0)
        {
            TabId = parseInt(RegExp.$1);
        }
        else
        {
	        TabId = parseInt(RegExp.$2);
	    }
    }
    
    return TabId;
}

function GetSupAnchorFromAnchor(Anchor)
{
    if(Anchor)
    {
        if(Anchor.getAttribute("level") == RootLevel) return null;
        var SupAnchor = Anchor.parentNode.parentNode.previousSibling;
        
        if(SupAnchor)
        {
            if(SupAnchor.nodeType == 1 && SupAnchor.tagName == "A")
            {
                return SupAnchor;
            }
            else
            {
                SupAnchor = Anchor.parentNode.parentNode.previousSibling.previousSibling;
                if(SupAnchor && SupAnchor.nodeType == 1 && SupAnchor.tagName == "A")
                {
                    return SupAnchor;
                }            
            }
        }
    }
    return null;
}

function GetSupULFromAnchor(Anchor)
{
    return Anchor.parentNode.parentNode;
}

function GetSubULFromAnchor(Anchor)
{
    var SubUL = Anchor.nextSibling;
    if(SubUL)
    {
        if(SubUL.nodeType == 1 && SubUL.tagName == "UL")
        {
            return SubUL;
        }
        else
        {
            SubUL = Anchor.nextSibling.nextSibling;
            if(SubUL && SubUL.nodeType == 1 && SubUL.tagName == "UL")
            {
                return SubUL;
            }        
        }
    }
   
    return null;
}

function ShowElement(Element)
{
    Element.style.display = "block";
}

function HideElement(Element)
{
    Element.style.display = "none";
}

function InitHorizonXmlNav()
{
    var SelectedTabId = GetSelectedTabId();
    
	var NavDiv = document.getElementById("HorizonXmlNav");
	var Anchors = NavDiv.getElementsByTagName('A');
	
	for(var i = 0; i < Anchors.length; i++)
	{
		var Anchor = Anchors[i];
		var Level = Anchor.getAttribute("level");
		var TabId = Anchor.getAttribute("tabid");
		
		if(i == 0)
		{
		    RootLevel = Level;
		    RootAnchor = Anchor;
		    ShowElement(GetSupULFromAnchor(Anchor));
		}
		
        if(TabId == SelectedTabId)
        {
            SelectedAnchor = Anchor;
            Anchor.className += " Selected";
        }
        
        if(GetSubULFromAnchor(Anchor))
        {
            Anchor.className += " WithSub";
        }
	}
	window.onresize = function()
	{
	    ShowULs(UpRecurAnchorByAnchor(LastHoverAnchor, 0));
	};
	
	window.onload = function()
	{
	    ShowULs(UpRecurAnchorByAnchor(GetSupAnchorFromAnchor(SelectedAnchor), 0));
	    LastHoverAnchor = SelectedAnchor;
	};
}


function ShowSubULByAnchor(Anchor)
{
    var SupUL = GetSupULFromAnchor(Anchor);
    var SubUL = GetSubULFromAnchor(Anchor);
    
    if(SubUL)
    {
        var Position = Anchor.getAttribute("level") == RootLevel ?  GetAbsolutePosition() : { Left : 0, Top : 0 };
	offsetHeight = Anchor.offsetHeight;
        MoveElementToPosition(SubUL, { Left : Position.Left, Top : Position.Top + offsetHeight });
        ShowElement(SubUL);
        
        Anchor.className += " Active";
    }
}

function HideSubULByAnchor(Anchor)
{
    Anchor.className = Anchor.className.replace(" Active", "");
    var SubUL = GetSubULFromAnchor(Anchor);
    if(SubUL)
    {
        HideElement(SubUL);
    }
}

function UpRecurAnchorByAnchor(Anchor, level)
{
    var Anchors = [];

    while(Anchor && Anchor.getAttribute("level") >= level)
    {
        Anchors.push(Anchor);
        Anchor = GetSupAnchorFromAnchor(Anchor);
    }        
    
    return Anchors;
}

function ActiveHorizonXmlNav(Anchor)
{
    if(LastHoverAnchor && LastHoverAnchor.getAttribute("level") >= Anchor.getAttribute("level"))
    {
        HideULs(UpRecurAnchorByAnchor(LastHoverAnchor, Anchor.getAttribute("level")));
        LastHoverAnchor = null;
    }
    
    ShowSubULByAnchor(Anchor);
    LastHoverAnchor = Anchor;
}

function ShowULs(Anchors)
{
    var Anchor = Anchors.pop();
    while(Anchor)
    {
        ShowSubULByAnchor(Anchor);
        Anchor = Anchors.pop();
    }
}

function HideULs(Anchors)
{
    var Anchor = Anchors.shift();
    while(Anchor)
    {
        HideSubULByAnchor(Anchor);
        Anchor = Anchors.shift();
    }
} 

