/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

(function($){
	var options = {
		header        : "h1",
		accordionMode : false,
		defaultClass  : "accordion-header-default",
		activeClass   : "accordion-header-active",
		expandAll     : false,
		expandFirst   : true,
		onExpand      : null,
		onCollapse    : null
	};

	$.fn.collapsiblelist = function(_options) {
		options = $.extend(true, options, _options);

		this.each(function () {
			var $ul = $(this);

			if(this.nodeName.toLowerCase() == "ul") {
				var first = true;

				$ul.children("li").each(function() {
					var $li = $(this);
					var $clickableHeader = $li.find(options.header);

					if($clickableHeader.size() > 0) {
						$clickableHeader.eq(0).click(function() {
							var $header = $(this);
							var $body = $header.next();
							var currentHeader = this;

							// Segment Zusammenklappen
							if($header.hasClass(options.activeClass)) {
								// Das Element kann nur zusammengeklappt werden wenn
								// der Akkordion Modus nicht aktiv ist
								if(!options.accordionMode) {
									$header.removeClass(options.activeClass);
									$header.addClass(options.defaultClass);
									$body.hide();

									if($.isFunction(options.onCollapse)) {
										options.onCollapse.apply(this);
									}
								}
							// Segment ausklappen
							} else if($header.hasClass(options.defaultClass)) {
								$header.removeClass(options.defaultClass);
								$header.addClass(options.activeClass);
								$body.show();

								// Wenn der Akkordion-Modus aktiv ist, muessen
								// alle anderen ausgeklappten Segmente eingeklappt
								// werden
								if(options.accordionMode) {
									$ul.find("." + options.activeClass).each(function() {
										if(this != currentHeader) {
											$(this)
											.removeClass(options.activeClass)
											.addClass(options.defaultClass)
											.next().css("display", "none");
										}
									});
								}

								if($.isFunction(options.onExpand)) {
									options.onExpand.apply(this);
								}
							}
						})
						.addClass(first ? options.activeClass : options.defaultClass)
						.removeClass(first ? options.defaultClass : options.activeClass)
						.next().css("display", (first && options.expandFirst) || options.expandAll ? "block" : "none");

						if(first) first = false;
					}
				});
			}
		});
	}
})(jQuery)
