$(function(){
	
	$.fn.cb_slider = function(settings) {

		settings = $.extend({
			
			autoHeightEaseDuration: 	1200,
			autoHeightEaseFunction: 	'easeInOutExpo',
			autoSlide: 					true,
			autoSlideInterval: 		5000,
			autoSlideStopWhenClicked: 	true,
			dynamicTabs: 				true,
			slideEaseDuration: 			1200,
			slideEaseFunction: 			'easeInOutExpo',
			slideDirection:				'y'
		}, settings);
		
		return this.each(function(){
			
			var slider 					= $(this);
			var panelWidth 				= slider.width();
			var panelCount 				= slider.find(".slider-element").size();
			var navClicks				= 0;
			var currentPanel			= -1;
			var distance 				= 0;
			
			if (settings.slideDirection == 'x'){
				var panelContainerWidth 	= panelWidth*panelCount;
			}else{
				var panelContainerWidth 	= panelWidth;
			}
			
			slider.css({ position:'relative', width:panelWidth});
			slider.find('.slider-content').css({ position:'absolute', display:'block', width:panelContainerWidth});
			
			
			// positionierung der inhalte (vertikal oder horizontal)

			slider.find('.slider-element').each(function(i) {

				currentElement = slider.find('.slider-element:eq('+i+')');
				currentElement.css({width:panelWidth});
				
				if (settings.slideDirection == 'x'){
					currentElement.css({ float:'left'});
				}else{
					currentElement.css({ float:'none'});
				}
				
			});
			
			buildNavigation();
			
			init_All();
			
			autoSlide();
			
			
			
			slider.find('.slide-prev').each(function(i) {
				$(this).bind("click", function() {
					navClicks++;
					currentPanel--;
					if(currentPanel<0){
						currentPanel=panelCount-1;
					}
					animateAll();
					return false;
				});
			});
			
			slider.find('.slide-next').each(function(i) {
				$(this).bind("click", function() {
					navClicks++;
					currentPanel++;
					if(currentPanel>=panelCount){
						currentPanel=0;
					}
					animateAll();
					return false;
				});
			});
			
			
			slider.find('.tabs li a').each(function(i) {
				$(this).bind("click", function() {
					navClicks++;
					currentPanel = i;
					animateAll();
					return false;
				});
			});
			
			function init_All(){
				
				currentSlider = slider.find('.slider-element:eq(0)');
				
				// horizontal
				if (settings.slideDirection == 'x'){
					slider.find('.slider-content').css({ left: 0 });
					slider.css({ height: currentSlider.height()});
				// vertikal
				}else{
					slider.find('.slider-content').css({ top: 0 });
					slider.css({ height: currentSlider.height() });
				};
				
				tabs = slider.find('.tabs');
				tabs.css({ right:'10px', top:(currentSlider.height()-tabs.height()-5)});
				tabs.find('li').removeClass('current');
				tabs.find('li:eq(0)').addClass('current');
				
				prev = slider.find('.slide-prev');
				next = slider.find('.slide-next');
				
				// horizontal
				if (settings.slideDirection == 'x'){
					prev.css({ height:(currentSlider.height()), width:'50px', left:0, top:0});
					next.css({ height:(currentSlider.height()), width:'50px', right:0, top:0});
				// vertikal
				}else{
					prev.css({ height:50, width:(currentSlider.width()), left:0, top:0});
					next.css({ height:50, width:(currentSlider.width()), left:0, bottom:0});
					
				};

			};
			
			
			function animateAll(){
				
				currentSlider = slider.find('.slider-element:eq('+currentPanel+')');
				
				// horizontal
				if (settings.slideDirection == 'x'){
					
					slider.find('.slider-content').animate({ left: -1* currentSlider.position().left }, settings.slideEaseDuration, settings.slideEaseFunction);
					slider.animate({ height: currentSlider.height() }, settings.autoHeightEaseDuration, settings.autoHeightEaseFunction);
					
				// vertikal
				}else{
					
					slider.find('.slider-content').animate({ top: -1* currentSlider.position().top }, settings.slideEaseDuration, settings.slideEaseFunction);
					slider.animate({ height: currentSlider.height() }, settings.autoHeightEaseDuration, settings.autoHeightEaseFunction);

				};
				
				tabs = slider.find('.tabs');
				tabs.animate({ right:10, top:(currentSlider.height()-tabs.height()-5)}, settings.slideEaseDuration, settings.slideEaseFunction);
				tabs.find('li').removeClass('current');
				tabs.find('li:eq('+currentPanel+')').addClass('current');
				
				prev = slider.find('.slide-prev');
				next = slider.find('.slide-next');
				
				// horizontal
				if (settings.slideDirection == 'x'){
					prev.animate({ height:(currentSlider.height()), width:'50px', left:0, top:0}, settings.slideEaseDuration, settings.slideEaseFunction);
					next.animate({ height:(currentSlider.height()), width:'50px', right:0, top:0}, settings.slideEaseDuration, settings.slideEaseFunction);
				// vertikal
				}else{
					prev.animate({ height:50, width:(currentSlider.width()), left:0, top:0}, settings.slideEaseDuration, settings.slideEaseFunction);
					next.animate({ height:50, width:(currentSlider.width()), left:0, bottom:0}, settings.slideEaseDuration, settings.slideEaseFunction);
				};

			};
			
			
			function buildNavigation() {
				
				dynamicTabs = '<ul class="tabs"></ul>';
				buttonPrev = '<div class="slide-prev"><a href="#" onFocus="this.blur()"><span>Previous</span></a></div>';
				buttonNext = '<div class="slide-next"><a href="#" onFocus="this.blur()"><span>Next</span></a></div>';
				
				slider.find('.slider-content').after(buttonPrev);
				slider.find('.slider-content').after(buttonNext);
				slider.find('.slider-content').after(dynamicTabs);
				
				ul = slider.find('ul.tabs');
				ul.css({ position:'absolute','z-index':'99'});
				
				slider.find('.slider-element').each(function(i) {
					ul.append('<li><a href="#">&nbsp;</a></li>');
				});
				
				
				prev = slider.find('.slide-prev a');
				next = slider.find('.slide-next a');
				
				prev.parent().css({position:'absolute'});
				next.parent().css({position:'absolute'});
				
				// horizontal
				if (settings.slideDirection == 'x'){
					prevImage = 'fileadmin/templates/jquery/media/slider-left.png';
					nextImage = 'fileadmin/templates/jquery/media/slider-right.png';
					prev.css({ display:'block', width:'50px', height:'100%', 'background-image':'url('+prevImage+')', 'background-repeat':'no-repeat'});
					next.css({ display:'block', width:'50px', height:'100%', 'background-image':'url('+nextImage+')', 'background-repeat':'no-repeat'});
				// vertikal
				}else{
					prevImage = 'fileadmin/templates/jquery/media/slider-top.png';
					nextImage = 'fileadmin/templates/jquery/media/slider-bottom.png';
					prev.css({ display:'block', width:'100%', height:'50px', 'background-image':'url('+prevImage+')', 'background-repeat':'no-repeat'});
					next.css({ display:'block', width:'100%', height:'50px', 'background-image':'url('+nextImage+')', 'background-repeat':'no-repeat'});
				};
				
			
				
				
			};
			
			function autoSlide(){

				if (navClicks == 0){
					
					if (currentPanel >= panelCount-1) {
						currentPanel 	= 0;
						distance		= 0;
					} else {
						currentPanel 	+= 1;
					};
					
					animateAll();
					
					setTimeout(autoSlide,settings.autoSlideInterval);
					
				}
			}
			
		});
		
		
	};
	
});
