/*
 * jQuery simpleAccordion plugin
 * @author Jonas Weidler (jquery@jonas-weidler.de)
 * @version 0.1.5
 * @date December 2, 2010
 * @category jQuery plugin
 * @requires jQuery 1.4.2
 * @copyright (c) 2010 Jonas Weidler
 * @license CC Attribution-Share Alike 3.0 - http://creativecommons.org/licenses/by-sa/3.0/
 */

(function($){
	$.fn.extend({ 
		simpleAccordion: function(options) {
			var defaults = 
			{
				slideSpeed: 500,
				classOpened: 'active',
				classContents: 'contents',
				showOnLoad: 'none',
				event: 'click'
			};
			var options = $.extend(defaults, options);
			
			return this.each(function() {
								
				var opt = options;
				var obj = $(this);
				var sel = this.selector;
				
				var accordionElements = obj.children();
				var objContents = accordionElements.find("> ."+opt.classContents);
				// filter elements that don't contain any further contents (like in a menu)
				var objTrigger = accordionElements.find(":first:not(:only-child)");
				
				// notes to myself: once I used an accordion nested in another one there occured problems with setting the width of the nested ones because there were already hidden and had a width of 0 due to that. that's why I'm using this:
				$("."+opt.classContents, sel).show();
				// setting a width prevents bumpy ending of slide transition
				// this is the only part that actually requires jQ 1.4 :-(
				var width = objContents.width();
				objContents.css("width", width);
				$("."+opt.classContents, sel).hide();
				
				objContents.hide();
				objTrigger.css({
					cursor: "pointer"
				});
				
				objTrigger.bind('click', function(event){
					event.preventDefault();
					var trigger = $(this);
					var contents = trigger.next();
					if (contents.is(":visible")) {
						trigger.removeClass(opt.classOpened);
						contents.slideUp(opt.slideSpeed).removeClass(opt.classOpened);
					}
					else {
						trigger.toggleClass(opt.classOpened);
						accordionElements.find("> ."+opt.classContents+":visible").slideUp(opt.slideSpeed).removeClass(opt.classOpened);
						contents.slideToggle(opt.slideSpeed).toggleClass(opt.classOpened);
					}
				});
				
				//if (opt.showOnLoad != 'none') objTrigger.eq(0).trigger(opt.event);
			});
		}
	});
})(jQuery);
