jQuery.fn.menu = function() {

    var timeout = 500;
    var closetimer = null;
    var ddmenuitem = null;
    var activemenu = null, activemenu2 = null;

    var open = function() {
        canceltimer();
        close();

        if (activemenu) {
            activemenu.css('visibility', 'hidden');
        }

        ddmenuitem = $(this).find('ul').css('visibility', 'visible');

        if (!jQuery.className.has(this, "active")) {
            ddmenuitem.parent = this;
            jQuery.className.add(this, "active");
        }
    }

    var close = function() {
        if (ddmenuitem) {

            ddmenuitem.css('visibility', 'hidden');

            if (ddmenuitem.parent)
                jQuery.className.remove(ddmenuitem.parent, "active");
                
            if (activemenu) {
                jQuery.className.add(activemenu, "active");
                activemenu.css('visibility', 'visible');
            }
        }
    }

    var timer = function() {
        closetimer = setTimeout(close, timeout);
    }

    var canceltimer = function() {
        if (closetimer) {
            window.clearTimeout(closetimer);
        }
    }

    return this.each(function() {

        var me = jQuery(this);

        activemenu = me.find('li.active ul');

        me.find('> li')
			.bind('mouseover', open)
			.bind('mouseout', timer);

    });

}
	