$.fn.hoverify = function(config) {
    return this.each(function() {
        $(this).mouseenter(function() {
            var o = $(this);
            var cls = o.attr('class').split(" ");
            o.attr('hoverclass', cls[cls.length - 1] + '-hover');
            o.addClass(o.attr('hoverclass'));
        }).mouseleave(function() {
            $(this).removeClass($(this).attr('hoverclass'));
        });
    });
}

$(document).ready(function() {
$('.nav-gold, .pubguide-btn, .mini-uk, .mini-ca, .mini-au, .mini-nz, .btn-back-home, .contact-submit-btn, .contact-reset-btn, .btnCheckout, .custompublication, .nextpackage, .backtochart, .pubnow-btn, .goto-bookstore, .inside-book-button, .go-to-bookstore, .inside-btn, .btn-signup-mt, .btn-login-mt').hoverify();

    var activeMenu;

    function createMenu(name) {
        var el = Ext.get(name);
        var tid = 0, menu, doc = Ext.getDoc();

        var handleOver = function(e, t) {
            if (t != el.dom && t != menu.dom && !e.within(el) && !e.within(menu)) {
                hideMenu();
            }
        };

        var hideMenu = function() {
            if (menu) {
                menu.hide();
                var tmp = el.select('span:first').first();
                tmp.removeClass(tmp.dom.hoverClass);
                doc.un('mouseover', handleOver);
                doc.un('mousedown', handleDown);
            }
        }

        var handleDown = function(e) {
            if (!e.within(menu)) {
                hideMenu();
            }
        }

        var showMenu = function() {
            clearTimeout(tid);
            tid = 0;

            if (!menu) {
                menu = new Ext.Layer({ shadow: 'sides', hideMode: 'display' }, name + '-link');
            }
            menu.hideMenu = hideMenu;

            menu.el = el;
            if (activeMenu && menu != activeMenu) {
                activeMenu.hideMenu();
            }
            activeMenu = menu;

            if (!menu.isVisible()) {
                menu.show();
                if (el.id != 'bookstorenav') {
                    menu.setXY([el.getX() + 1, el.getY() + 36]);
                } else {
                    menu.setXY([el.getX() - (menu.getWidth() - 86), el.getY() + 36]);
                }
                menu.slideIn('t', { duration: .1 });
                menu.sync();
                var tmp = el.select('span:first').first();
                tmp.dom.hoverClass = tmp.dom.hoverClass ? tmp.dom.hoverClass : tmp.dom.className + '-hover';
                tmp.addClass(tmp.dom.hoverClass);
                // el.setStyle('text-decoration', 'underline');

                doc.on('mouseover', handleOver, null, { buffer: 150 });
                doc.on('mousedown', handleDown);
            }
        }

        el.on('mouseover', function(e) {
            if (!tid) {
                tid = showMenu.defer(150);
            }
        });

        el.on('mouseout', function(e) {
            if (tid && !e.within(el, true)) {
                clearTimeout(tid);
                tid = 0;
            }
        });
    }

    createMenu('publishing');
    createMenu('services');
    createMenu('aboutus');
    createMenu('bookstorenav');
    createMenu('authorcenter');
});

