function    nav_hide_all() {
    $$('ul.snav').each(function(el) {
        el.hide();
    });
}

function    pointer_over_el(event, el) {
    var t_offset = el.cumulativeOffset();
    var t_size   = el.getDimensions();

    var x = Event.pointerX(event);
    var y = Event.pointerY(event);

    if (x >= t_offset.left && x < t_offset.left + t_size.width &&
        y >= t_offset.top + 2 && y < t_offset.top + t_size.height - 4)
        return true;

    return false;
}

function    nav_mouseout(event) {
    var el = Event.element(event);
    var parent = $(el.up('ul'));

    if (pointer_over_el(event, parent))
        return;

    snav.hide();
}

Event.observe(window, 'load', function() {
    $$('#nav > li:not(li.active)').each(function(nav) {
        var snav = $(nav.identify().sub('nav', 'snav'));

        Element.clonePosition(snav, nav, {
            setWidth:   false,
            setHeight:  false,
            offsetLeft: nav.getWidth()
        });

        nav.observe('mouseover', function() {  
            nav_hide_all();
            snav.show();
            snav.observe('mouseout', function(event) {
                if (! pointer_over_el(event, snav)) {
                    snav.hide();
                }
            });
        });
        nav.observe('mouseout', function(event) {  
            if (! pointer_over_el(event, nav) &&
                ! pointer_over_el(event, snav))
                snav.hide();
        });
    });
});

