// <![CDATA[
var fm_menu = null;

// register menuInit to the onload of window
Event.observe(window, 'load', menuInit, false);

function menuInit(e) {
    fm_menu = $('fm_menu');

    fm_menu.opening = false;
    fm_menu.open = false;

    // wait a few seconds and then collapse menu
    setTimeout('menuUp(fm_menu)', 1500);
}


function mouseOverEvent(e) {
    // the element that triggered the event
    var element = Event.element(e);

    // we want to trigger this event on the DIV
    // and not anything else
    if(element !== fm_menu) {
        element = Event.findElement(e, 'DIV');
    }

    menuDown(element);

    // stop default behaviour and event propagation
    Event.stop(e);
}

function closeLinkEvent(e) {
    // the element that triggered the event
    var element = Event.element(e);

    if(element !== fm_menu) {
        element = Event.findElement(e, 'DIV');
    }

    menuUp(element);

    // stop default behaviour and event propagation
    Event.stop(e);

    // return false so that link doesn't actually go anywhere
    return false;
}

function menuDown(element) {
    // only execute if menu is not already opening or opened
    if(element == fm_menu && !(element.opening || element.open)) {
        var items = element.getElementsByTagName('LI');

        element.opening = true;

        for(var i = 0; i < items.length; i++) {
            var item = $(items[i]);
            item.index = i;
            // do the fancy slide down effect on LI elements
            new Effect.Move(item, { x: 0, y: (i * item.getDimensions().height), duration: 0.5,
                afterFinishInternal: function(effect) {
                    // when the last element finishes its transition effect
                    // show close link and set some variables
                    if((items.length - 1) == effect.element.index) {
                        fm_menu.open = true;
                        fm_menu.opening = false;

                        // register closeLinkEvent to the onclick of fm_close link
                        Event.observe('fm_close', 'click', closeLinkEvent, false);

                        $('fm_close').show();
                    }
                }
            });
        } 

        var scaleTo = (((element.getDimensions().height) * items.length * 100) / (items[0].getDimensions().height)) - (6 * items.length);

        new Effect.Scale(element, scaleTo, { scaleX: false, duration: .5 });
    }
}

function menuUp(element) {
    if((!element.opening && element.open)) {
        var items = element.getElementsByTagName('LI');

        $('fm_close').hide();

        fm_menu.setStyle( {height: ($(items[0]).getDimensions().height * items.length) + 3 + 'px'} );

        for(var i = 0; i < items.length; i++) {
            var item = $(items[i]);
            item.index = i;
            item.setStyle( {position: 'absolute', top: ((i * item.getDimensions().height)) + 'px', left: $(item.parentNode).getStyle('margin-left')} );

            new Effect.Move(item, { x: parseFloat(item.getStyle('left')), y: 0, duration: 0.5, mode: 'absolute',
                beforeSetup: function(effect) {
                    //effect.element.makePositioned();
                },
                afterFinishInternal: function(effect) {
                    if((items.length - 1) == effect.element.index) {
                        fm_menu.open = false;

                        // register mouseOverEvent to the onmouseover of fm_menu
                        Event.observe('fm_menu', 'mouseover', mouseOverEvent, false);
                    }
                }
            });
        }

        var scaleTo = (((element.getDimensions().height - 3) / items.length) * 100) / (element.getDimensions().height - 3);
        
        new Effect.Scale(element, scaleTo, { scaleX: false, duration: .5,
            scaleMode: { originalHeight: (element.getDimensions().height - 3), originalWidth: element.getDimensions().width }
        });
        

        element.opening = false;
    }
}

// ]]>