﻿//Close All Flyouts when keyboard ESC button was pressed
jQuery(document).keyup(function (e) {
    if (e.keyCode == 27) { PostenCosFlyouts.hideAllFlyouts(); }
});

/************************************************************** Accordion */

jQuery(function () {
    jQuery('.accordion .menu a').click(function () {
        var li = jQuery(this).closest("li");

        if (li.next().is(":visible")) {
            li.siblings("li:not(.menu)").slideUp()
            li.siblings("li").removeClass("active");
            li.removeClass("active");
        }
        else {
            li.siblings("li:not(.menu)").slideUp()
            li.siblings("li").removeClass("active");
            li.next().slideDown()
            li.addClass("active");
        }
        return false;
    })
});

/************************************************************** Left Navigation */
jQuery(function () {
    jQuery(".treeView li.selected").parents('ul').css("display", "block").parent().addClass("active");
    jQuery(".treeView li li:has(ul) > a").addClass("with-children");
});

/************************************************************** Hide space-consuming empty cell */
jQuery(function () {
    jQuery('.ms-spzonecaption:hidden').parent('td').hide();
});

/************************************************************** Flyouts */
window.PostenCosFlyouts = new function () {
    var self = this;

    function getFocusFlyout(focus) {
        return focus.data("focusFlyout");
    }

    function autoFadeOut(focus, interval) {
        var flyout = getFocusFlyout(focus);
        if (jQuery(focus).is(".active") || jQuery(flyout).is(".showing")) {
            var flyoutTimeout = flyout.data("flyoutTimeout");
            if (flyoutTimeout) {
                window.clearTimeout(flyoutTimeout);
            }
            flyoutTimeout = window.setTimeout(function () {
                self.hideFlyout(focus);
                flyout.data("flyoutTimeout", null);
            }, interval);
            flyout.data("flyoutTimeout", flyoutTimeout);
        }
    }

    this.cancelAutoFadeOut = function (flyout) {
        var flyoutTimeout = flyout.data("flyoutTimeout");
        if (flyoutTimeout) {
            window.clearTimeout(flyoutTimeout);
        }
    };

    this.showFlyout = function (focus) {
        var flyout = getFocusFlyout(focus);
        if (!(jQuery(focus).is(".active") || jQuery(flyout).is(".showing"))) {
            this.hideAllFlyouts();
            var onshowing = jQuery(flyout).data("onshowing");
            if (onshowing)
                onshowing();
            jQuery(flyout).addClass('showing');
            jQuery(flyout).fadeIn('slow', function () {
                jQuery(focus).addClass('active');
                jQuery(flyout).addClass('active').removeClass('showing');
            });
        }
    }

    this.hideFlyout = function (focus) {
        var flyout = getFocusFlyout(focus);
        if (jQuery(focus).is(".active") && !jQuery(flyout).is(".hiding")) {
            var onhiding = jQuery(flyout).data("onhiding");
            if (onhiding)
                onhiding();
            jQuery(flyout).addClass('hiding');
            jQuery(flyout).fadeOut('fast', function () {
                jQuery(focus).removeClass('active');
                jQuery(flyout).removeClass('active').removeClass('hiding');
            });
            var flyoutTimeout = flyout.data("flyoutTimeout");
            if (flyoutTimeout) {
                window.clearTimeout(flyoutTimeout);
            }
        }
    }

    this.hideAllFlyouts = function () {
        jQuery(".flyout-focus").each(function () {
            var focus = jQuery(this);
            var flyout = getFocusFlyout(focus);
            var onhiding = jQuery(flyout).data("onhiding");
            if (onhiding)
                onhiding();
            jQuery(flyout).hide();
            jQuery(focus).removeClass('active');
            jQuery(flyout).removeClass('active');
            var flyoutTimeout = flyout.data("flyoutTimeout");
            if (flyoutTimeout) {
                window.clearTimeout(flyoutTimeout);
            }
        });
    }

    this.addFlyout = function (args) {
        var flyout = args.flyout;
        var focus = args.focus;
        var timeout = args.timeout;
        var timeoutBoundary = args.timeoutBoundary;
        var onhiding = args.onhiding;
        var onshowing = args.onshowing;

        if (!timeoutBoundary)
            timeoutBoundary = "both";

        flyout.addClass("flyout");
        focus.addClass("flyout-focus");
        focus.data("focusFlyout", flyout);
        if (onhiding)
            jQuery(flyout).data("onhiding", onhiding);
        if (onshowing)
            jQuery(flyout).data("onshowing", onshowing);

        if (timeout) {
            if (timeoutBoundary == "focus" || timeoutBoundary == "both") {
                jQuery(focus).mouseleave(function () {
                    autoFadeOut(focus, timeout);
                });
                jQuery(focus).mouseenter(function () {
                    PostenCosFlyouts.cancelAutoFadeOut(jQuery(flyout));
                    return false;
                });
            }
            if (timeoutBoundary == "flyout" || timeoutBoundary == "both") {
                jQuery(flyout).mouseleave(function () {
                    autoFadeOut(focus, timeout);
                });
                jQuery(flyout).mouseenter(function () {
                    PostenCosFlyouts.cancelAutoFadeOut(jQuery(flyout));
                    return false;
                });
            }
        }
    };
};

jQuery(function () {
    var consoleFlyout = '.consoleMenu .flyout';
    var consoleFoot = '.consoleMenu .content .foot';
    var globalmenuFlyout = '#GlobalMenu .dropDown';
    var globalmenuFocus = '#GlobalMenu .dropDownFocus > a';
    var consoleTimeout;

    /* Global Menu */
    jQuery("#GlobalMenu .dropDownFocus").each(function () {
        var dropdownParent = jQuery(this);
        var globalmenuFlyout = jQuery(this).find(".dropDown");
        var globalmenuFocus = jQuery(this).children("a");
        if (globalmenuFlyout.length > 0) {
            jQuery(globalmenuFocus).mouseenter(function () {
                PostenCosFlyouts.showFlyout(jQuery(globalmenuFocus));           
                return false;
            });
            PostenCosFlyouts.addFlyout({
                flyout: globalmenuFlyout,
                focus: globalmenuFocus,
                onshowing: function () { dropdownParent.children(".indent").show().width(dropdownParent.width()); },
                onhiding: function () { dropdownParent.removeClass("active"); dropdownParent.children(".indent").hide(); },
                timeout: 700
            });
                        
            //Toggle Portal Nav onclick event
            dropdownParent.find("a.flyout-focus").click(function () {
                if (globalmenuFlyout.is(jQuery(".active"))) {
                    PostenCosFlyouts.hideAllFlyouts();
                } else {
                    PostenCosFlyouts.showFlyout(jQuery(globalmenuFocus));
                }
                return false;
            })
        }
        else {
            jQuery(globalmenuFocus).mouseenter(function () {
                PostenCosFlyouts.hideAllFlyouts();
                return false;
            });
        }

        //Close Global Menu Flyout
        dropdownParent.find(".close").click(function () {        
            PostenCosFlyouts.hideAllFlyouts();
            return false;
        });
    });

    /* Center Console */
    jQuery(".consoleMenu .content .foot").each(function (index) {
        var centerConsoleFocus = jQuery(this);
        var centerConsoleFlyout = jQuery(".consoleMenu .flyout").eq(index);
        if (centerConsoleFlyout.length > 0) {
            PostenCosFlyouts.addFlyout({ flyout: centerConsoleFlyout, focus: centerConsoleFocus, timeout: 700 });
            jQuery(centerConsoleFocus).click(function () {
                if (jQuery(this).is(".active")) {
                    PostenCosFlyouts.hideFlyout(jQuery(centerConsoleFocus));
                }
                else {
                    PostenCosFlyouts.cancelAutoFadeOut(jQuery(centerConsoleFlyout));
                    PostenCosFlyouts.showFlyout(jQuery(centerConsoleFocus));
                }
                return false;
            });
        }
        else {
            jQuery(centerConsoleFocus).click(function () {
                PostenCosFlyouts.hideAllFlyouts();
                return false;
            });
        }
    });
    jQuery(".consoleMenu .close").click(function () {
        PostenCosFlyouts.hideFlyout(jQuery(".consoleMenu .content .foot"));
    });

});

