(function ($) {
    $.fn.mgxAccordion = function (settings) {
    	var settings = jQuery.extend({
    			//Trigger für Ein-/Ausfahren
    			head: 'li.title',
    			trigger: '> .titleOuter'
    		},
    		settings
    	);
    	
    	var ul = $(this);
    	if (!ul) {
    		return;
    	}
    	
    	this.find(settings.head).each(function(i, titleLi) {
    		//Über title-LIs iterieren
    		$(titleLi).find('ul').height(0);
    		$(titleLi).find('ul').css('overflow', 'hidden');
    		
    		$(titleLi).find(settings.trigger).click(function() {
    			var subHeight = 0;
    			$(titleLi).find('ul li').each(function() {
    				//Höhe der Elemente der List auslesen
    				subHeight += $(this).height();
    			});
    			
    			var opened = $(titleLi).find('ul').height() > 0;
    			
    			//offene Listen einfahren
    			ul.find('.titleOpened').removeClass('titleOpened');
				
    			ul.find('.opened').animate({
    					height: 0
    				},
    				400,
    				function() {
    					$(this).removeClass('opened');
    				}
    			);
    			if (!opened) {
	    			//Liste ausfahren -> Nur, wenn vorher offen
    				$(titleLi).addClass('titleOpened');
	    			$(titleLi).find('ul').animate({
	    				height: subHeight
	    			},
	    			400,
	    			function() {
	    				//Der Liste eine Klasse zuweisen
	    				$(this).addClass('opened');
	    			});
    			}
    		});
    		
    		$(titleLi).find('> ul li').each(function(subI, subItem) {
    			if ($(subItem).hasClass('active')) {
    				$(subItem).parent().addClass('opened').css('height', 'auto');
    				$(titleLi).addClass('titleOpened');
    			}
    		});
    		if ($(titleLi).hasClass('active')) {
    			$(titleLi).find('ul').addClass('opened').css('height', 'auto');
				$(titleLi).addClass('titleOpened');
    		}
    	});
    };
}(jQuery));