/* 
 * Dieses Menue setzt jQuery 1.5.2 voraus.
 * 
 * Mögliche Animationen: show, fade, slide, wind, none
 */

$.fn.flexmenu=function(settings)
{
    flexMenu={
        menu: null,
        timer: null,
        z: 0,
        params: new Array(),
        init: function(elem,settings) {
            this.params.speed=200;
            this.params.animation='show';
            this.params.timeout=1000;
			
            if (typeof(settings) != 'undefined') {
                try {
                    for (s in settings) {
                        this.params[s]=settings[s];
                    }
                } catch(e) {}
            }
			
            this.menu=elem;
            this.z=$(this.menu).css('z-index');
            $(this.menu).find('li').each(function(){
                var childs=$(this).find('ul');
                if (childs.length > 0) {
                    $(this).addClass('parent');
                }
				
                $(this).children('a').hover(
                    function(){
                        flexMenu.show($(this));
                    },
                    function(){
                        flexMenu.timer=window.setTimeout("flexMenu.hide()",flexMenu.params.timeout);
                    }
                    );
            });
        },
        show: function(elem) {
            window.clearTimeout(flexMenu.timer);
            flexMenu.hide();
            flexMenu.highlight(elem);
            $(elem).parents('ul').stop(true,true).css('display','block');

            flexMenu.z++;
            flexMenu.animate($(elem).parent('li').children('ul'));
        },
        hide: function() {
            $(flexMenu.menu).find('a').removeClass('active');
            $(flexMenu.menu).find('ul').stop(true,true).css('display','none');
        },
        animate: function(elem) {
            flexMenu.fix($(elem));

            $(elem).children('li').css('display','none');
            $(elem).css('display','block');
            var i=1;
            $(elem).children('li').each(function(){
                if (flexMenu.params.animation == 'fade') {
                    $(this).stop(true,true).fadeIn(i*flexMenu.params.speed);
                } else if (flexMenu.params.animation == 'slide') {
                    $(this).stop(true,true).slideDown(i*flexMenu.params.speed);
                } else if (flexMenu.params.animation == 'wind') {
                    $(this).css({
                        'width':0,
                        'display':'block'
                    });
                    $(this).animate({
                        'width':'100%'
                    },i*flexMenu.params.speed);
                } else if (flexMenu.params.animation == 'none') {
                    $(this).css({
                        'display':'block'
                    });
                } else {
                    $(this).stop(true,true).show(i*flexMenu.params.speed);
                }
                i++;
            });
            $(elem).css('z-index',flexMenu.z);
        },
        fix: function(elem) {
            var p=$(elem).parents('ul');
            if (p.length>1) {
                $(elem).css({
                    'left': $(elem).parent('li').width(),
                    'top': 0
                });
            } else {
                $(elem).css({
                    'left': 0,
                    'top': $(elem).parent('li').height()
                });
            }
        },
        highlight: function(elem) {
            var e=$(elem).parent('li');
            while (e.length != 0) {
                $(e).children('a').addClass('active');
                e=$(e).parent('ul').parent('li');
            }
        }
    }
	
    flexMenu.init($(this),settings);
}


