(function($) {
    $.fn.topMenu = function(opts) {
        $.fn.topMenu.defaults = {
            target: '#container'
        };
        var opts = $.extend({}, $.fn.topMenu.defaults, opts);

        return this.each(function(idx) {
            var td = $(this);
            var a = $(this).children("a:first");
            var ul = $(a).next("ul").remove();

            var aLeft = a.position().left;
            var aTop = a.position().top;
            var aHeight = a.height();
            var aWidth = a.width();

            var overlay = $('<div class="top-menu-item-overlay"></div>');
            if (td.hasClass("current")) overlay.addClass("current");
            overlay.css({ top: aTop, left: aLeft, marginLeft: a.css("margin-left") });
            var themeClass = td.attr("class");
            if (themeClass) {
                themeClass = themeClass.split(" ");
                for (var x = 0; x < themeClass.length; x++) {
                    if (themeClass[x].indexOf('theme-') == 0) {
                        overlay.addClass(themeClass[x]);
                        overlay.data("themeClass", themeClass[x]).data("hoverClass", themeClass[x] + "-hover");
                        break;
                    }
                }
            }
            overlay.text(a.text());
            a.css({ width: a.width() + "px", textIndent: -9999 });
            $(opts.target).append(overlay);
            $(overlay).data("link", a).data("menu", ul).hover(
		        function() {
		            var themeClass = $(this).data("themeClass");
		            var hoverClass = $(this).data("hoverClass");

		            if ($(this).next("ul").length) {
		                CancelHide(this);
		                return;
		            }
		            $(this).siblings("ul.drop-menu:visible").each(function() {
		                var menu = $(this).prev("div.top-menu-item-overlay");
		                CancelHide(menu);
		                Hide(menu);
		            });
		            var flash = $('object#health-az-menu,embed#health-az-menu,object#home-feature,embed#home-feature').get(0);
		            flash && flash.DisableFlashMousing();
		            var menu = $(this).data("menu");
		            $(this).addClass(hoverClass).removeClass(themeClass);
		            if (!menu.length) return;
		            $(this).after(menu);
		            $(menu).css({
		                left: $(this).position().left,
		                top: $(this).position().top + $(this).outerHeight()
		            });
		            menu.hover(
    		            function() {
    		                CancelHide(overlay);
    		            },
    		            function() {
    		                StartHide(overlay);
    		            }
    		        ).show();
		        },
		        function() {
		            if (!$(this).data("menu").length) Hide(this);
		            else StartHide(this);
		        }
		    ).click(function() {
		        location.href = $(this).data("link").attr("href");
		        return false;
		    });
        });
        function StartHide(menu) {
            $(menu).data("tID", window.setTimeout(function() { Hide(menu); }, 500));
        }
        function CancelHide(menu) {
            window.clearTimeout($(menu).data("tID"));
        }
        function Hide(menu) {
            var flash = $('object#health-az-menu,embed#health-az-menu,object#home-feature,embed#home-feature').get(0);
            flash && flash.EnableFlashMousing();
            menu = $(menu);
            if (!menu.length) {
                alert("DEBUG: No menu passed to hide.");
                return false;
            }
            var themeClass = menu.data("themeClass");
            var hoverClass = menu.data("hoverClass");
            menu.addClass(themeClass).removeClass(hoverClass).data("menu", menu.next("ul").remove());
        };
    };
    $(document).ready(function() {
        $j("#top-menu>table td").topMenu();
    });
})(jQuery);