(function ($) {
	
	var options = {
	};
	
var AccordionElementClass = function (el, opt) {
		
		this.options = {};
		this.accordion;
		this.accordion = el;
		this.debug = true;
		
		this.init = function (object, opt)
	    {
			var defaults = {
					"toggleSelector": "div.slidingContent",
					"multi": true,
					"initOpen": false,
					"toggleLinkSelector": "a.slideLink",
					"linkOpenTitle": "Lesen Sie mehr",
					"linkCloseTitle": "Beschreibung ausblenden",
					"linkInfoClass": "moreInfo",
					"toggleClass": "open",
					"slideSpeed": "fast",
					"toggleTextClass": "moreInfo",
					"noToggleTextClass": "noToggleText"
	    	}
		    	
	    	this.options = jQuery.extend(defaults, opt);
	    	this.accordion.addClass("jQueryPluginAccordionProceed");
			this.initAccordion();
			this.initOpenElements();
	    };
	    
	    this.initOpenElements = function ()
	    {
	    	if(typeof(this.options.initOpen) == 'number' || jQuery.isArray(this.options.initOpen))
			{
				var elements = $(this.options.toggleLinkSelector, this.accordion);
				if(typeof(this.options.initOpen) == 'number')
				{
					this.options.initOpen = [this.options.initOpen];
				}
				for (i=0;i<this.options.initOpen.length;i++)
				{
					$(elements[this.options.initOpen[i]]).triggerHandler("click");
				}
			}
	    },
	    this.initAccordion = function ()
	    {
	    	var opt = this.options;
	    	
	    	$(opt.toggleSelector, this.accordion).hide();
	    	
	    	var obj = this.accordion;
	    	
	    	$(this.options.toggleLinkSelector, this.accordion).each(function(index, el){
	    		
	    		$(el).bind('click', {element: $(el)}, function(event)
				{
	    			var link = $(this);
	    			if("false" == opt.multi || false == opt.multi)
	    			{
	    				/* if the request element is not the currently opened element: disable all opened elements */
		    			if(!$(event.data.element).hasClass(opt.toggleClass))
		    			{
    		    			$(opt.toggleSelector, obj).each(function(index, element)
    						{
								$(element).hide();
								$(opt.toggleLinkSelector, $(element).prev()).removeClass(opt.toggleClass);
    		    			});
    		    		}	  	    				
	    			}
		    		link.blur().toggleClass(opt.toggleClass).
		    				parent().next(opt.toggleSelector).slideToggle(opt.slideSpeed);
		    		
		    		
		    		/*
		    		 * config Toggle-Link with custom Text
		    		 */
		    		if (link.hasClass(opt.toggleTextClass)) {
		    			text = {
		    				open: opt.linkOpenTitle,
		    				close: opt.linkCloseTitle
		    			}
		    		}
		    		
		    		/*
		    		 * chance toggle-link-text
		    		 */
		    		if (!link.hasClass(opt.noToggleTextClass)) {
		    			if (link.hasClass(opt.toggleClass)) {
		    				link.html(opt.linkOpenTitle)
		    			} else {
		    				link.html(opt.linkOpenTitle);
		    			}
		    		}
		    		
		    		
		    		return false;
	    		});
	    	});	    		
	    };	   	    
	    
	    this.init(el, opt);
	};
	
	
	$.extend($.fn, { 
		AccordionPlugin: function (inOpt) {
			inOpt = inOpt || {};
			return this.each(function (i) {
				if(!$(this).hasClass("jQueryPluginAccordionProceed"))
				{
					var opt = $.extend(true, {}, options, inOpt); // deep merge
					new AccordionElementClass($(this),opt);
				}
			});
//			return this;
		}
	});
})(jQuery);
