﻿var hoverClass = "TopMenuRoot-Hover";
var topmostClass = "TopMenuRoot";
var userAgent = navigator.userAgent;
var versionOffset = userAgent.indexOf("MSIE");
var isIE = (versionOffset >= 0);
var isPreIE7 = false;
var fullVersionIE = "";
var majorVersionIE = "";
if (isIE)
{
    fullVersionIE = parseFloat(userAgent.substring(versionOffset+5, userAgent.length));
    majorVersionIE = parseInt('' + fullVersionIE);
    isPreIE7 = majorVersionIE < 7;
}

function Hover__AspNetMenu(element)
{
    AddClass__CssFriendlyAdapters(element, hoverClass);

    if (isPreIE7)
    {
        var child = element.firstChild;
        while (child)
        {
            if (child.tagName == "UL")
            {
                var grandchild = child.firstChild;
                while (grandchild)
                {
                    if (grandchild.tagName == "LI")
                    {
                        if ((typeof(grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null))
                        {
                            grandchild.iFrameFormElementMask.style.display = "block";
                            
                            var w = grandchild.offsetWidth;
                            if ((grandchild.offsetWidth == 0) && (typeof(element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.width.length > 0))
                            {
                                w = element.iFrameFormElementMask.style.width;
                            }
                            grandchild.iFrameFormElementMask.style.width = w;
                            
                            var h = grandchild.offsetHeight + 5 /* fudge to cover margins between menu items */;
                            if ((grandchild.offsetHeight == 0) && (typeof(element.iFrameFormElementMask) != "undefined") && (element.iFrameFormElementMask != null) && (element.iFrameFormElementMask.style.height.length > 0))
                            {
                                h = element.iFrameFormElementMask.style.height;
                            }
                            grandchild.iFrameFormElementMask.style.height = h;
                        }
                    }
                    
                    grandchild = grandchild.nextSibling;
                }
            }

            child = child.nextSibling;
        }
    }
}

function Unhover__AspNetMenu(element)
{
    RemoveClass__CssFriendlyAdapters(element, hoverClass);

    if (isPreIE7)
    {
        var child = element.firstChild;
        while (child)
        {
            if (child.tagName == "UL")
            {
                var grandchild = child.firstChild;
                while (grandchild)
                {
                    if (grandchild.tagName == "LI")
                    {
                        if ((typeof(grandchild.iFrameFormElementMask) != "undefined") && (grandchild.iFrameFormElementMask != null))
                        {
                            grandchild.iFrameFormElementMask.style.display = "none";
                        }
                    }

                    grandchild = grandchild.nextSibling;
                }
            }

            child = child.nextSibling;
        }
    }
}

function SetHover__AspNetMenu()
{
    if(window.frames.length == 0)
    {
        var menus = document.getElementsByTagName("ul");
        for (var i=0; i<menus.length; i++)
        {
            if(menus[i].className == topmostClass)
            {
                var items = menus[i].getElementsByTagName("li");
                for (var k=0; k<items.length; k++)
                {
                    var overHandler = function() { Hover__AspNetMenu(this); };
                    var outHandler =  function() { Unhover__AspNetMenu(this); };
                
                    if(items[k].onmouseover != null)
                    {             
                        overHandler = function() { Hover__AspNetMenu(this);ensureOverlap(this, true); };
                    }
                    if(items[k].onmouseout != null)
                    {
                        outHandler = function(){Unhover__AspNetMenu(this);hideOverlap()};
                    }
                   
                    items[k].onmouseover = overHandler;
                    items[k].onmouseout = outHandler;
                    

                    if (isPreIE7 && ((typeof(items[k].iFrameFormElementMask) == "undefined") || (items[k].iFrameFormElementMask == null)))
                    {
                        var iFrameFormElementMask = document.createElement("IFRAME");
                        iFrameFormElementMask.scrolling= "no";
                        iFrameFormElementMask.src = "javascript:false;";
                        iFrameFormElementMask.frameBorder = 0;
                        iFrameFormElementMask.style.display = "none";
                        iFrameFormElementMask.style.position = "absolute";
                        iFrameFormElementMask.style.filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";

                        iFrameFormElementMask.style.zIndex = -1;
                        items[k].insertBefore(iFrameFormElementMask, items[k].firstChild);
                        items[k].iFrameFormElementMask = iFrameFormElementMask;
                    }
                }
            }
        }
    }
}

if (isPreIE7)
{
    Browser.registerLoadEvent(SetHover__AspNetMenu);
}

var browser = new Browser();
var timer = null;

function ensureOverlap(menuItem, visible)
{
    if(timer != null)
    {
        clearTimeout(timer);
        timer = null;
    }
    
    if(!Browser.isDomCompat)
        return;

    var Element = {
        'MenuItem':menuItem,
        'Child':null,
        'Padding':28
    };
    
    var Environment = {
        'IFrame':browser.getLayer('Overlap'),
        'ViewPort':browser.getLayer('viewPortContainer'),
        'Header':browser.getLayer('header')
    };

    if(Browser.isIE)
    {
        Element.Child = GetChild(Element.MenuItem);

        if(Element.Child != null)
        {
            var children = Element.Child.getElementsByTagName("LI");

            for(i=0;i<children.length;i++)
            {
                var child = children[i];

                if(child.offsetWidth < Element.Child.offsetWidth)
                {
                    child.style.width = (Element.Child.clientWidth-5) + 'px';
                }
            }
        }
    }

    if(window.frames.length == 0)
        return;

    if(Environment.IFrame == null)
        return;

    if(visible)
    {
        Environment.IFrame.style.visibility = 'visible';
    }
    else
    {
        Environment.IFrame.style.visibility = 'hidden';
        return;
    }
    
    if(Element.Child==null)
        Element.Child = GetChild(Element.MenuItem);

    if(Browser.isIE6 || Browser.isOP9 || Browser.isSAF)
    {
        Environment.IFrame.style.visibility = 'hidden';
        Element.Child.style.visibility = 'hidden';
        return;
    }

    if(Element.Child != null)
    {
        Environment.IFrame.style.width  = Element.Child.offsetWidth + 'px';
        Environment.IFrame.style.height = Element.Child.offsetHeight + 'px';
        Environment.IFrame.style.top    = (Environment.Header.offsetHeight + Element.Child.offsetTop)+'px';
    
        if(Browser.isIE)
            Element.Padding = 0;
        
        Environment.IFrame.style.left = (Element.MenuItem.offsetLeft + Element.Padding)+'px';
    }
}

function hideOverlap()
{
    if(timer == null)
    {
        timer = setTimeout('ensureOverlap(this, false)', 10);
    }
}

function GetChild(rootItem)
{
    var child = null;

    if(typeof(rootItem) != 'undefined')
    {
        if(typeof(rootItem.childNodes) != 'undefined')
        {
            for(var i = 0;i < rootItem.childNodes.length;i++)
            {
                child = rootItem.childNodes[i];
                
                if(child.nodeName.toUpperCase().equals('UL'))
                {
                    break;
                }
            }
        }
    }
    
    return child;
}