﻿
// Menu Settings
var iMenuTimerDelay = 20;
var iMenuFadeDeley = 4;
var iMenuOpacityStep = 20;

var oMenuNodes = new Array();
var oMenuTicker;

function MenuNode()
{
    this.DIV;
    this.DelayCount;
    this.Opacity;
    this.OpacityStep;
    this.ExtraJS;
    this.MenuLockOpen;
}

function Menu_AddFade(oDIV, iLength, iFadeStep, sExtraJS)
{
    oNode = new MenuNode;

    if (!iLength)
    {
        iLength = iMenuFadeDeley;
    }
    if (!iFadeStep)
    {
        iFadeStep = iMenuOpacityStep;
    }

    oNode.DIV = oDIV;
    oNode.DelayCount = iLength;
    oNode.Opacity = 100;
    oNode.ExtraJS = sExtraJS;
    oNode.OpacityStep = iFadeStep;
    oNode.MenuLockOpen = false;

    oMenuNodes[oMenuNodes.length] = oNode;

    //FloatAlert('Add<br>' + oMenuNodes.length);

    if (!oMenuTicker)
    {
        oMenuTicker = setTimeout("Menu_FadeOuts();", iMenuTimerDelay);
        //FloatAlert('Start Timer');
    }
}

function Menu_FadeOuts()
{
    var i = 0;
    var sText = '';


    while (i < oMenuNodes.length)
    {
        if (oMenuNodes.MenuLockOpen == true)
        {
            i++;
        }
        else if (oMenuNodes[i].DelayCount > 0)
        {
            oMenuNodes[i].DelayCount--;

            sText += 'Delay<br>';

            i++;
        }
        else if (oMenuNodes[i].Opacity - oMenuNodes[i].OpacityStep <= 0)
        {

            oMenuNodes[i].DIV.style.display = 'none';
            oMenuNodes[i].DIV.style.filter = null;
            oMenuNodes[i].DIV.style.opacity = null;
            //oMenuNodes[i].DIV.style.removeProperty("opacity");

            oMenuNodes.splice(i, 1);

            if (oMenuNodes.ExtraJS)
            {
                eval(oMenuNodes.ExtraJS);
            }

            sText += 'Remove<br>';
        }
        else
        {
            oMenuNodes[i].Opacity -= oMenuNodes[i].OpacityStep;

            SetOpacity(oMenuNodes[i].DIV, oMenuNodes[i].Opacity);

            sText += 'Opacity<br>';
            i++;
        }
    }


    sText += 'Remaining: ' + oMenuNodes.length;


    if (oMenuNodes.length > 0)
    {

        oMenuTicker = setTimeout("Menu_FadeOuts();", iMenuTimerDelay);
    }
    else
    {
        clearTimeout(oMenuTicker);
        oMenuTicker = null;
    }
}


var sMenu_OverMenu;

function Menu_HoverOver(oTD, sMenu_ID, iLevel, bFullAccess, bPartialAccess, eEvent, iMG_ID, sCMS_Menu_ID)
{
    var iErrorOnLine = 0;

    try
    {
        var bExecOverMenu = false;


        iErrorOnLine = 10;

        if (!oMenu_OverOutNodes[iLevel])
        {

            iErrorOnLine = 50;
            bExecOverMenu = true;
        }
        else if (oMenu_OverOutNodes[iLevel].TD == oTD)
        {

            iErrorOnLine = 80;
            //FloatAlert('Menu_HoverOver Hold: ' + iLevel + '<br>TimerID=' + oMenu_OverOutNodes[iLevel].TimerID);
            clearInterval(oMenu_OverOutNodes[iLevel].TimerID);
            oMenu_OverOutNodes[iLevel].TimerID = null;
        }
        else
        {
            iErrorOnLine = 90;
            bExecOverMenu = true;
        }


        iErrorOnLine = 100;

        if (bExecOverMenu == true)
        {

            var bFound = new RegExp('(_Null)|(_Line)(\s|$)').test(oTD.className);

            iErrorOnLine = 110;
            //FloatAlert(bFound + '\n' + oTD.className);

            if (bFound != true)
            {
                //var oDIV = oTD.getElementsByTagName('div')[0];
                //oDIV.style.display = '';

                //FloatAlert('Over: ' + iLevel);

                iErrorOnLine = 130;
                var rRegEx = new RegExp(/(\s+)/g);

                //FloatAlert(replace(oTD.className, ' ', '<br>'));

                iErrorOnLine = 140;
                oTD.className = (oTD.className + ' ').replace(rRegEx, 'Selected ');

                //FloatAlert(oTD.className);


                iErrorOnLine = 150;
                var oNodes = oTD.childNodes;



                for (var i = 0; i < oNodes.length; i++)
                {
                    if (oNodes[i].tagName)
                    {

                        switch (oNodes[i].tagName)
                        {
                            case 'DIV':
                                {

                                    iErrorOnLine = 200;
                                    var oDIV = oNodes[i].getElementsByTagName('div')[0];

                                    ForLoop:
                                    for (var j = 0; j < oMenuNodes.length; j++)
                                    {
                                        if (oMenuNodes[j].DIV == oDIV)
                                        {
                                            oMenuNodes.splice(j, 1);

                                            break ForLoop;
                                        }
                                    }

                                    iErrorOnLine = 245;

                                    try
                                    {
                                        oDIV.style.removeProperty('filter');
                                    }
                                    catch (oErr)
                                    {

                                    }

                                    oDIV.style.opacity = null;
                                    oDIV.style.display = '';
                                    oDIV.style.zIndex = '1002';

                                    SetOpacity(oDIV, 100);


                                    iErrorOnLine = 260;
                                    //FloatAlert(bIE.toString() + "<br>" + iBrowserVersion.toString());

                                    if ((bIE == true) && (iBrowserVersion < 5))
                                    {
                                        var oTBL = oDIV.getElementsByTagName('table')[0];

                                        iErrorOnLine = 2750;
                                        //FloatAlert('"' + oDIV.align + '"<br>"' + oNodes[i].align + '"');

                                        if (!oTBL.style.width && oNodes[i].align == 'left')
                                        {

                                            iErrorOnLine = 285;
                                            oTBL.style.width = oTBL.offsetWidth + 4 + 'px';

                                            oNodes[i].style.right = oTD.offsetWidth / 2 + 'px';

                                        }
                                    }

                                    break;

                                }
                            case 'A':
                                {
                                    iErrorOnLine = 300;
                                    oNodes[i].className = oTD.className;
                                    break;
                                }
                        }
                    }

                }
            }


            //alert(e);
            //alert(window.event);
            //alert(event);

            //if (!e) var e = window.event;

            //var eEvent;

            iErrorOnLine = 900;
        }

        if (!eEvent)
        {
            eEvent = window.event;
        }

        iErrorOnLine = 1000;


        if (iLevel != null)
        {
            oTargetElem = eEvent.srcElement;

            if (!oTargetElem)
            {
                oTargetElem = eEvent.target;
            }

            if (oTargetElem == oTD)
            {

                if (bFullAccess == true)
                {
                    if (typeof SetRightClickMenu == 'function')
                    {
                        SetRightClickMenu(oTD, sMenu_ID, 'MenuItemFull', iMG_ID + ',' + sCMS_Menu_ID);
                    }
                }
                else if (bPartialAccess == true)
                {
                    if (typeof SetRightClickMenu == 'function')
                    {
                        SetRightClickMenu(oTD, sMenu_ID, 'MenuItemPart', iMG_ID + ',' + sCMS_Menu_ID);
                    }
                }
                else
                {
                    iErrorOnLine = 1210;
                    if (typeof FlushRigthClickMenu == 'function')
                    {
                        iErrorOnLine = 1220;
                        FlushRigthClickMenu();
                    }
                }

            }

        }
    }
    catch (oErr)
    {
        JSError('Menu_HoverOver', oErr + '<br>iLevel=' + iLevel + '<br>iErrorOnLine=' + iErrorOnLine);
        return false;
    }

    //CancelBubble();
}

function Menu_Node()
{
    this.TD;
    this.TimerID;
    this.Menu_ID;
    this.ClickEvent;
}

var oMenu_OverOutNodes = new Array;

function Menu_HoverOut(oTD, sMenu_ID, iLevel)
{
    try
    {
        //FloatAlert('Menu_HoverOut Hold: ' + iLevel + '<br>sMenu_ID=' + sMenu_ID);


        Menu_HoverOutComplete(iLevel);

        oMenu_OverOutNodes[iLevel] = new Menu_Node;

        oMenu_OverOutNodes[iLevel].TD = oTD;
        oMenu_OverOutNodes[iLevel].Menu_ID = sMenu_ID;
        //oMenu_OverOutNodes[iLevel].ClickEvent = sClickEvent;
        oMenu_OverOutNodes[iLevel].TimerID = setTimeout("Menu_HoverOutComplete(" + iLevel + ");", 3);

        //FloatAlert('Menu_HoverOut Set: ' + iLevel + '<br>TimerID=' + oMenu_OverOutNodes[iLevel].TimerID);


        //CancelBubble();
    }
    catch (oErr)
    {
        JSError('Menu_HoverOut', oErr);
        return false;
    }
}

function Menu_HoverOutComplete(iLevel)
{
    var iErrorOnLine = 0;

    try
    {
        if (oMenu_OverOutNodes[iLevel] != null)
        {
            if (oMenu_OverOutNodes[iLevel].TimerID != null)
            {

                var oTD = oMenu_OverOutNodes[iLevel].TD;

                if (oTD)
                {
                    clearTimeout(oMenu_OverOutNodes[iLevel].TimerID);

                    iErrorOnLine = 50;

                    var bFound = new RegExp('(Selected)*(\s|$)').test(oTD.className);

                    bFound = true;

                    iErrorOnLine = 90;
                    if (bFound == true)
                    {

                        iErrorOnLine = 110;

                        Menu_UnselectNode(oTD);

                        iErrorOnLine = 500;

                        oMenu_OverOutNodes[iLevel] = null;
                    }
                }
            }
        }
    }
    catch (oErr)
    {
        JSError('Menu_HoverOutComplete', oErr + '<br>iLevel=' + iLevel + '<br>iErrorOnLine=' + iErrorOnLine);
        return false;
    }
}

function Menu_UnselectNode(oTD)
{
    var iErrorOnLine = 0;
    try
    {

        var rRegEx = new RegExp(/(Selected)*(?=(\s|$))/g);

        oTD.className = oTD.className.replace(rRegEx, '');
        //FloatAlert(oTD.className);


        //FloatAlert('Menu_HoverOutComplete Out: ' + iLevel);

        var oNodes = oTD.childNodes;

        iErrorOnLine = 140;

        for (var i = 0; i < oNodes.length; i++)
        {
            if (oNodes[i].tagName)
            {

                switch (oNodes[i].tagName)
                {
                    case 'DIV':
                        {

                            var oDIV = oNodes[i].getElementsByTagName('div')[0];
                            oDIV.style.zIndex = '1001';

                            Menu_AddFade(oDIV);

                            break;
                        }
                    case 'A':
                        {
                            oNodes[i].className = oTD.className;
                            break;
                        }
                }
            }
        }
    }
    catch (oErr)
    {
        JSError('Menu_UnselectNode', oErr + '<br>iErrorOnLine=' + iErrorOnLine);
        return false;
    }
}

function CancelBubble()
{
    var eEvent;

    if (typeof e === 'undefined')
    {
        eEvent = window.event;
    }
    else
    {
        eEvent = e;
    }

    eEvent.cancelBubble = true;
    if (eEvent.stopPropagation)
    {
        eEvent.stopPropagation();
    }
}
