/**
 * --------------------------------------------------------------------
 * jQuery-Plugin "toggleElements"
 * Version: 1.3, 11.09.2007
 * by Andreas Eberhard, andreas.eberhard@gmail.com
 *                      http://jquery.andreaseberhard.de/
 *
 * Copyright (c) 2007 Andreas Eberhard
 * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
 *
 * Changelog:
 *    11.09.2007 Version 1.3
 *    - removed noConflict
 *    - added 'opened'-state via additional class 'opened'
 *    02.07.2007 Version 1.2.1
 *    - changed blur to work with jQuery 1.1.3
 *    - added packed version
 *    27.06.2007 Version 1.2
 *    - suppress multiple animations
 *    15.06.2007 Version 1.1
 *    - added callbacks onClick, onShow, onHide
 *    - added option showTitle
 *    31.05.2007 initial Version 1.0
 * --------------------------------------------------------------------
 * @example $(function(){$('div.toggler-1').toggleElements( );});
 * @desc Toggles the div with class 'toggler-1' into closed state on document.ready
 *
 * @example $(function(){$('fieldset.toggler-9').toggleElements( { fxAnimation:'show', fxSpeed:1000, className:'toggler', onClick:doOnClick, onHide:doOnHide, onShow:doOnShow } );});
 * @desc Toggles the fieldset with class 'toggler-9' into closed state on document.ready
 *       Animation show with speed 1000 ms is used, for the different states the css-class-prefix 'toggler-' will be used
 *       Events OnClick, OnHide, OnShow will call your JavaScript-functions
 * --------------------------------------------------------------------
 */

var toggleElements_animating = false;

(function($) {

jQuery.fn.toggleElements = function(settings) {

	// Settings
	settings = jQuery.extend({
		fxAnimation: "show",   // slide, show, fade
		fxSpeed: 1,   // slow, normal, fast or number of milliseconds
		className: "toggler",
		removeTitle: true,
		showTitle: false,
		onClick: null,
		onHide: null,
		onShow: null,
		action: "click"
	}, settings);


	if (jQuery(this).selector.indexOf("#multi-middle-") != -1) {

		var onClick = settings.onClick, onHide = settings.onHide, onShow = settings.onShow;
		
		jQuery.initialize(this, settings);

		// Add Toggle-Links before elements
		this.each(function(){

			wtitle='';
			wlinktext=jQuery(this).attr('title');
			wtitle=wlinktext;
			
			if (jQuery(this).attr('class').indexOf("opened")!=-1){
				jQuery(this).before('<a class="'+settings.className+' '+settings.className+'-opened" href="#" title="'+ wtitle +'"><div class="' + settings.className + '-opened" id="togglercontainer-' + settings.index + '" style="position:absolute; top:0; left:66px; right:0;z-index:98;color:#336699;">' + wlinktext + '</div></a>');
				jQuery(this).addClass(settings.className+'-c-opened');
			} else {
				jQuery(this).before('<a class="'+settings.className+' '+settings.className+'-closed" href="#" title="'+ wtitle +'"><div class="' + settings.className + '-closed"  id="togglercontainer-' + settings.index + '" style="position:absolute; top:0; left:66px; right:0;z-index:98;color:#336699;">' + wlinktext + '</div></a>');
				jQuery(this).addClass(settings.className+'-c-closed');
			}

			// Mouseenter function for Toggle-Link
			jQuery(this).prev('a.'+settings.className).mouseenter(function() {
				// Show Element
				if (jQuery(this).next().css('display')=='none') {
					if (toggleElements_animating) return false;

					thelink = this;
					jQuery(thelink)[0].blur();

					if (thelink.animating||toggleElements_animating) return false;
					toggleElements_animating = true;
					thelink.animating = true;

					// Callback onClick
					if ( typeof onClick == 'function' && onClick(thelink) === false) {
						toggleElements_animating = false;
						thelink.animating = false;
						return false;
					}

					jQuery(this).next().each(function(){
						jQuery(this).show(settings.fxSpeed,function(){
							jQuery.toggleElementsShown(this,settings,onShow,thelink);
						});
					});
				}
				return false;
			});

			// Mouseleave function for multi-middle
			jQuery(this).parent().mouseleave(function() {

				// Hide Element
				if (jQuery(this).children().last().css('display')=='block') {
					if (toggleElements_animating) return false;

					jQuery(this).children().last().each(function(){
						jQuery(this).hide(settings.fxSpeed,function(){
							jQuery.toggleElementsHidden(this,settings,onHide,thelink);
						});
					});
				}

				return false;

			});
			
			// Mouseover function for multi-middle list items
			jQuery(this).find('li.multi-middle-section').mouseover(function() {
				jQuery(this).css('background-color', '#CCE6F6');
			});
			
			// Mouseout function for multi-middle list items
			jQuery(this).find('li.multi-middle-section').mouseout(function() {
				jQuery(this).css('background-color', '');
			});
			
			// Remove title from Toggle Link
			if (settings.removeTitle==true) jQuery(this).prev().attr('title','');

		});
		
		jQuery(this).attr('title','');
	}
	else if (jQuery(this).selector == '#multi-prev') {

		var onClick = settings.onClick, onHide = settings.onHide, onShow = settings.onShow;
		
		jQuery.initialize(this, settings);

		// Add Toggle-Links before elements
		this.each(function(){

			// Remove title from Prev links
			if (settings.removeTitle==true) {
				jQuery(this).prev().attr('title','');
				jQuery(this).prev().closest('div').next('div').find('a').attr('title','');
			}

			// Mouseover function for multi-prev button in LDN footer
			jQuery(this).prev().mouseover(function() {
				
				// Show multi-prev button label
				jQuery(jQuery(this).next().css('display', 'block'));
				
				// Hide multi-next button label
				jQuery(jQuery(this).closest('div').next('div').find('#multi-next').children().first().css('display', 'none'));

				return false;
			});
			
			// Mouseout function for multi-prev button in LDN footer
			jQuery(this).prev().mouseout(function() {
				
				// Hide multi-prev button label
				jQuery(jQuery(this).next().css('display', 'none'));
				
				// Show multi-next button label
				jQuery(jQuery(this).closest('div').next('div').find('#multi-next').children().css('display', 'block'));

				return false;
			});

		});
	}
	else if (jQuery(this).selector == '#multi-next') {

		var onClick = settings.onClick, onHide = settings.onHide, onShow = settings.onShow;
		
		jQuery.initialize(this, settings);

		// Add Toggle-Links before elements
		this.each(function(){

			// Remove title from Next links
			if (settings.removeTitle==true) {
				jQuery(this).prev().attr('title','');
			}
		});
	}

};

// Remove/Add classes to Toggler-Link
jQuery.toggleElementsHidden = function(el,set,onHide,thelink) {
	jQuery(el).prev('a.'+set.className).removeClass(set.className+'-opened').addClass(set.className+'-closed').blur();
	jQuery(el).prev('a.'+set.className).children().removeClass(set.className+'-opened').addClass(set.className+'-closed').blur();
	if ( typeof onHide == 'function') onHide(this); // Callback onHide
	jQuery(el).removeClass(set.className+'-c-opened').addClass(set.className+'-c-closed');
	toggleElements_animating = false;
	thelink.animating = false;
	togglerID = '#togglercontainer-' + set.index;
//	jQuery(togglerID).html('See All Sections');
	jQuery(el).parent().css('z-index', 1);
};
jQuery.toggleElementsShown = function(el,set,onShow,thelink) {
	jQuery(el).prev('a.'+set.className).removeClass(set.className+'-closed').addClass(set.className+'-opened').blur();
	jQuery(el).prev('a.'+set.className).css('text-decoration', 'none');
	jQuery(el).prev('a.'+set.className).children().removeClass(set.className+'-closed').addClass(set.className+'-opened').blur();
	if ( typeof onShow == 'function') onShow(this); // Callback onShow
	jQuery(el).removeClass(set.className+'-c-closed').addClass(set.className+'-c-opened');
	toggleElements_animating = false;
	thelink.animating = false;
	togglerID = '#togglercontainer-' + set.index;
//	jQuery(togglerID).html('Close Menu');
	jQuery(el).parent().css('z-index', 100);
};

jQuery.initialize = function(el,set) {
	jQuery(el).parent().css('z-index', 1);

	if ((set.fxAnimation!='slide')&&(set.fxAnimation!='show')&&(set.fxAnimation!='fade'))
		set.fxAnimation='slide';

	// First hide all elements without class 'opened'
	el.each(function(){
		if (jQuery(this).attr('class').indexOf("opened")==-1){
			jQuery(this).hide();
		}
	});	
};

})(jQuery);
