
$.fn.contentSlider = function(settings) 
{
	// Settings:
	var defaultSettings = {
		panel: 'div.panel',									// Welche Kind-Elemente sliden? Klasse oder HTML Element angeben. Default = div.panel
		infoText: 'div.paneltext',							// Optional kann ein Kind-Element in ein Panel gelegt werden um einen Info-Text anzeigen zu lassen. Klasse oder HTML Element angeben. Default = div.paneltext
		infoTextBG: 'default/shadow.png',					// Hintergrund für den angezeigten Beschreibungstext. Default = default/shadow.png
		arrowSprite: 'default/arrows.png',					// Pfad zur Sprite-Grafik für Vor- und Zurückpfeile. Default = default/arrows.png
		slideInterval: 5, 									// Sekunden bis zum Überblenden
		animationSpeed: 0.6,								// Dauer der Animation in Sekunden
		startPanel: 1										// Bei welchem Panel soll gestartet werden
	};

	var settings = $.extend(defaultSettings, settings);
	
	return $(this).each(function() {
	
	var slider = $(this),
		sliderHeight = slider.height(),
		sliderWidth = slider.width(),
		panel = slider.find(settings.panel),
		panels = panel.length,
		panelText = settings.infoText,
		panelTextBG = settings.infoTextBG,
		arrowSprite = settings.arrowSprite, 
		animationSpeed = settings.animationSpeed * 1000,
		slideInterval = settings.slideInterval*1000,
		paneltextHeight = 0;
	
	slider.methods = 
	{
	
	init: function() {
	
		slider.css({
			'overflow'	: 	'hidden',
			'position'	: 	'relative'
		})
	
		slider.prepend('<a class="arrow left" href="javascript:void(0);"></a><a class="arrow right" href="javascript:void(0);"></a>');

		slider.find('.arrow').css({
			'width'		:	'30px',
			'height'	:	'30px',
			'display'	:	'none',
			'position'	:	'absolute', 
			'z-index'	:	'99',
			'background':	'url("'+arrowSprite+'") no-repeat' 
		});
		
		slider.find('.arrow.left').css({
			'background-position'	:	'0px 0px',
			'top'					:	'50%', 
			'left'					:	'10px',
			'margin-top'			:	'-15px'
		});		
		
		slider.find('.arrow.right').css({
			'background-position'	:	'-30px 0px',
			'top'					:	'50%', 
			'right'					:	'10px',
			'margin-top'			:	'-15px'
		});

		panel.css({
			'width'		: 	sliderWidth, 
			'height'	: 	sliderHeight, 
			'display'	: 	'none', 
			'position'	: 	'absolute', 
			'top'		: 	'0px', 
			'left'		: 	'0px', 
			'z-index'	: 	'5'
		});
		
		panel.find(panelText).css({
			'width'		:	sliderWidth, 
			'padding'	:	'15px', 
			'position'	:	'absolute', 
			'top'		:	sliderHeight, 
			'left'		:	'0px', 
			'z-index'	:	'15', 
			'background':	'url("'+panelTextBG+'") 0px 0px repeat' 
		});
		
		
		slideCounter = settings.startPanel-1;

		panel.eq(slideCounter).fadeIn(animationSpeed);
		paneltextHeight = panel.eq(slideCounter).find(panelText).outerHeight(true);
		panel.eq(slideCounter).find(panelText).animate({top: '-='+paneltextHeight}, animationSpeed);
		
		interval = setInterval(function() { slider.methods.next(); }, slideInterval);
		
		slider.mouseenter(function() {
			clearInterval(interval);
			slider.find('.arrow').css('display', 'block');
		});
		
		slider.mouseleave(function() {
			interval = setInterval(function() { slider.methods.next(); }, slideInterval);
			slider.find('.arrow').css('display', 'none');
		});
		
		slider.find('.left').click(function() {
			slider.methods.prev();
		});		
		
		slider.find('.right').click(function() {
			slider.methods.next();
		});
		
	},
	
	next: function() {
	
		if (slideCounter < panels-1) 
		{
			slideCounter++
			
			if (panel.eq(slideCounter-1).find(panelText).length > 0) 
			{
				panel.eq(slideCounter-1).find(panelText).animate({top: sliderHeight+'px'}, animationSpeed, function() {
				panel.eq(slideCounter-1).fadeOut(animationSpeed);
				});
			}
			else 
			{
				panel.eq(slideCounter-1).delay(animationSpeed).fadeOut(animationSpeed);
			}
			
			panel.eq(slideCounter).delay(animationSpeed).fadeIn(animationSpeed, function() {
			paneltextHeight = panel.eq(slideCounter).find(panelText).outerHeight(true);
			panel.eq(slideCounter).find(panelText).animate({top: '-='+paneltextHeight}, animationSpeed);
			});

		}
		else if (slideCounter == panels-1)
		{
			slideCounter = 0;
			
			if (panel.eq(panels-1).find(panelText).length > 0) 
			{
				panel.eq(panels-1).find(panelText).animate({top: sliderHeight+'px'}, animationSpeed, function() {
				panel.eq(panels-1).fadeOut(animationSpeed);
				});
			}
			else
			{
				panel.eq(panels-1).delay(animationSpeed).fadeOut(animationSpeed);
			}
			
			panel.eq(slideCounter).delay(animationSpeed).fadeIn(animationSpeed, function() {
			paneltextHeight = panel.eq(slideCounter).find(panelText).outerHeight(true);
			panel.eq(slideCounter).find(panelText).animate({top: '-='+paneltextHeight}, animationSpeed);
			});
		}
	},
	
	prev: function() {
	
		if (slideCounter > 0) 
		{
			slideCounter--
			
			if (panel.eq(slideCounter+1).find(panelText).length > 0) 
			{
				panel.eq(slideCounter+1).find(panelText).animate({top: sliderHeight+'px'}, animationSpeed, function() {
				panel.eq(slideCounter+1).fadeOut(animationSpeed);
				});
			}
			else 
			{
				panel.eq(slideCounter+1).delay(animationSpeed).fadeOut(animationSpeed);
			}
			
			panel.eq(slideCounter).delay(animationSpeed).fadeIn(animationSpeed, function() {
			paneltextHeight = panel.eq(slideCounter).find(panelText).outerHeight(true);
			panel.eq(slideCounter).find(panelText).animate({top: '-='+paneltextHeight}, animationSpeed);
			});

		}
		else if (slideCounter == 0)
		{
			slideCounter = panels-1;
			
			if (panel.eq(0).find(panelText).length > 0) 
			{
				panel.eq(0).find(panelText).animate({top: sliderHeight+'px'}, animationSpeed, function() {
				panel.eq(0).fadeOut(animationSpeed);
				});
			}
			else
			{
				panel.eq(0).delay(animationSpeed).fadeOut(animationSpeed);
			}
			
			panel.eq(panels-1).delay(animationSpeed).fadeIn(animationSpeed, function() {
			paneltextHeight = panel.eq(panels-1).find(panelText).outerHeight(true);
			panel.eq(panels-1).find(panelText).animate({top: '-='+paneltextHeight}, animationSpeed);
			});
		}
	}
	
	};
	
	slider.methods.init();
	
	});
}
