﻿var $FloatingMenu = null;

function scrollingFunctions()
{
    $FloatingMenu.doFloat();
}

function pageReadyFunctions()
{
    resetGlowyThingy();
    $FloatingMenu = GetFloatingMenu();
    $FloatingMenu.init();
}

function rateOpeneFromMenu()
{
    var popwin = window.open("/App_BW/staff/utilities/rateCalc.aspx", "POPUP", "height=500,width=520,top=0,left=100,status=yes,location=no,toolbar=no,menubar=no,scrollbars=yes,resizable=yes");
}

function createSupportRequest()
{
    var strSupportQS = '<%= strSupportQS %>';
    var strError = "";
    var strPublicError = $("input[id$='tbxMessageText']").val();
    var strPrivateError = $("input[id$='tbxMessageTextPrivate']").val();

    if (strPublicError != "" && strPublicError != "undefined" && strPublicError != undefined)
        strError = "&error=Public: " + strPublicError;
    if (strPrivateError != "" && strPrivateError != "undefined" && strPrivateError != undefined)
    {
        if (strError != "")
            strError += "<br>Private: " + strPrivateError;
        else
            strError = "&error=Private: " + strPrivateError;
    }

    if (strError != "")
        strError = encodeURI(strError);

    var popwin = window.open("/App_BW/staff/utilities/supportRequestOpener.aspx?add=1" + strSupportQS + strError, "SUPPORT", "");
}

function getMenuTop()
{
    var element = document.getElementById("menu");
    var y = 0;

    while (element)
    {
        y += element.offsetTop;
        element = element.offsetParent;
    }

    return y;
}

function getVerticalDistanceBetween()
{
    var o1 = $("#topMenu").offset();
    var o2 = $("#divMenuDontPassMe").offset();
    var dy = o1.top - o2.top;

    return dy;
}

function getHorizontalDistanceBetween()
{
    var o1 = $("#topMenu").offset();
    var o2 = $("#divMenuDontPassMe").offset();
    var dy = o1.left - o2.left;

    return dy;
}

function resetGlowyThingy()
{
    $("#topMenu li:first").not(".back").hover();
}

function getDefaultMenuTop()
{
    var o2 = $("#divMenuDontPassMe").offset();
    return o2.top;
}

function tryMenuPositionReset()
{
    setTimeout("resetMenuPosition();", 50);
}

function resetMenuPosition()
{
    $FloatingMenu.doFloat();
}

function GetFloatingMenu()
{
    var blnFloating = false;

    /* Script by: www.jtricks.com
    * Version: 20071017
    * Latest version:
    * www.jtricks.com/javascript/navigation/floating.html
    */
    var floatingMenuId = 'topMenu';
    var floatingMenu =
    {
        targetX: "center",
        targetY: 0,

        hasInner: typeof (window.innerWidth) == 'number',
        hasElement: typeof (document.documentElement) == 'object'
            && typeof (document.documentElement.clientWidth) == 'number',

        topMenu:
            document.getElementById
            ? document.getElementById(floatingMenuId)
            : document.all
              ? document.all[floatingMenuId]
              : document.layers[floatingMenuId]
    };

    floatingMenu.move = function ()
    {
        if (getVerticalDistanceBetween() > 0 || (!blnFloating && floatingMenu.nextY > getMenuTop()))
        {
            blnFloating = true;
            $("#" + floatingMenuId).attr("style", "position:fixed; top: 0px; left: " + getHorizontalDistanceBetween() + "px; z-index:100;");
            resetGlowyThingy();
        }
        else if (getVerticalDistanceBetween() <= 0)
        {
            blnFloating = false;
            $("#" + floatingMenuId).attr("style", "top: " + getDefaultMenuTop() + "px;");
            resetGlowyThingy();
        }
    }

    floatingMenu.computeShifts = function ()
    {
        var de = document.documentElement;
        
        floatingMenu.shiftY =
            floatingMenu.hasInner
            ? pageYOffset
            : floatingMenu.hasElement
              ? de.scrollTop
              : document.body.scrollTop;
        if (floatingMenu.targetY < 0)
        {
            if (floatingMenu.hasElement && floatingMenu.hasInner)
            {
                // Handle Opera 8 problems
                floatingMenu.shiftY +=
                    de.clientHeight > window.innerHeight
                    ? window.innerHeight
                    : de.clientHeight
            }
            else
            {
                floatingMenu.shiftY +=
                    floatingMenu.hasElement
                    ? de.clientHeight
                    : document.body.clientHeight;
            }
        }
    }

    floatingMenu.calculateCornerY = function ()
    {
        if (floatingMenu.targetY != 'center')
            return floatingMenu.shiftY + floatingMenu.targetY;

        var height = parseInt(floatingMenu.topMenu.offsetHeight);

        // Handle Opera 8 problems
        var clientHeight =
            floatingMenu.hasElement && floatingMenu.hasInner
            && document.documentElement.clientHeight
                > window.innerHeight
            ? window.innerHeight
            : document.documentElement.clientHeight

        var cornerY =
            floatingMenu.hasElement
            ? (floatingMenu.hasInner
               ? pageYOffset
               : document.documentElement.scrollTop) +
              (clientHeight - height) / 2
            : document.body.scrollTop +
              (document.body.clientHeight - height) / 2;
        return cornerY;
    };

    floatingMenu.doFloat = function ()
    {
        // Check if reference to menu was lost due
        // to ajax manipuations
        if (!floatingMenu.topMenu)
        {
            topMenu = document.getElementById
                ? document.getElementById(floatingMenuId)
                : document.all
                  ? document.all[floatingMenuId]
                  : document.layers[floatingMenuId];

            initSecondary();
        }
        
        floatingMenu.computeShifts();
        
        var cornerY = floatingMenu.calculateCornerY();
        
        floatingMenu.nextY += cornerY - floatingMenu.nextY;
        floatingMenu.move();
    };

    // addEvent designed by Aaron Moore
    floatingMenu.addEvent = function (element, listener, handler)
    {
        if (typeof element[listener] != 'function' ||
           typeof element[listener + '_num'] == 'undefined')
        {
            element[listener + '_num'] = 0;
            if (typeof element[listener] == 'function')
            {
                element[listener + 0] = element[listener];
                element[listener + '_num']++;
            }
            element[listener] = function (e)
            {
                var r = true;
                e = (e) ? e : window.event;
                for (var i = element[listener + '_num'] - 1; i >= 0; i--)
                {
                    if (element[listener + i](e) == false)
                        r = false;
                }
                return r;
            }
        }

        //if handler is not already stored, assign it
        for (var i = 0; i < element[listener + '_num']; i++)
            if (element[listener + i] == handler)
                return;
        element[listener + element[listener + '_num']] = handler;
        element[listener + '_num']++;
    };

    floatingMenu.init = function ()
    {
        floatingMenu.initSecondary();
        floatingMenu.doFloat();
    };

    // Some browsers init scrollbars only after
    // full document load.
    floatingMenu.initSecondary = function ()
    {
        floatingMenu.computeShifts();
        floatingMenu.nextY = floatingMenu.calculateCornerY();
        floatingMenu.move();
    }

    return floatingMenu;
}
