;(function($) {
	
$.fn.inverisAccordion = function(options) {
	var defaults = {
		width : 862,
		height : 369,
		speed : 1000,
		firstSlide : 0,
		borders : [ 2, 0, 10, 2],
	  tabPositions : [ 16, 16, 0 ]
	},
	
	settings = $.extend({}, defaults, options),
	
	$accordion = this,
	$slides = $accordion.find('li'),
	$header = $slides.children('.tab');
	slideLen = $slides.length,

	$accordion
		.height(settings.height)
		.width(settings.width)
	;
		
	$header.eq(settings.firstSlide).addClass('selected');
	
	openedTab = settings.firstSlide;

	// Gesamtbreite der Sliderflaeche ermitteln (Tabbreite von Gesamtbreite abziehen)
	var slideWidth = settings.width;
	var tabWidths = [];
	var tabIndex = [];
	$header.reverse().each(function(index){
		var tabPos = settings.tabPositions[1];
		if(index == 0) tabPos = settings.tabPositions[2];
		if(index == slideLen) tabPos = settings.tabPositions[0];
		
		slideWidth -= $(this).width() - tabPos;
		tabWidths.unshift(slideWidth);
		tabIndex.unshift(index);
	}); // each
	$header.reverse();

	// Content Ausrichtung Links
	var left = 0;
	var tabLefts = [];
	$header.each(function(index){
		var tabPos = settings.tabPositions[1];
		if(index == 0) tabPos = settings.tabPositions[0];
		if(index == slideLen) tabPos = settings.tabPositions[2];
		tabLefts.push(left);
		left += $(this).width() - tabPos;
	}); // each

  // Ausrichten
	$header.each(function(index){
		var pLeft = tabWidths[index];

		var $this = $(this),
			left = pLeft;
		;

		var tabPos = settings.tabPositions[1];
		if(index == 0) tabPos = settings.tabPositions[0];
		if(index == slideLen) tabPos = settings.tabPositions[2];

		$this.css({
			left : pLeft,
			height : settings.height,
			zIndex : 10 + (slideLen * 5) - (index * 5)
		});
		
		$this.prev()
			.width(slideWidth + 16 + tabPos)
			.css({
				left : tabLefts[index] - 16,
				zIndex :  tabIndex[index],
				height : settings.height - (settings.borders[0] + settings.borders[2]),
				marginTop : settings.borders[0] 
			})
		;

		if(index < settings.firstSlide)
		{
			$(this)
				.css({ left : '-=' + slideWidth })
				.prev()
					.css({ left : '-=' + slideWidth })
			;
		}
	}); // each

	if($.browser.msie)
	{
		if($.browser.version.substr(0,1) > 8)
		{
			$header.css('filter', 'none');
		}
	}
	
	// hover
	//$header.hover(function(e){
	$header.bind('click', function(e){
		$(this).blur();
		if( ! $header.is(':animated'))
		{
			var $this = $(this);
			index = $header.index($this);
			
			if(index != openedTab)
			{
				openedTab = index;
				var currentLeft = parseInt($this.css('left'));
				
				// Auswahl der zu slidenden Tabs nach links
				var $selectedTabs = $header.filter(function()
				{
					var left = parseInt($(this).css('left'));
					if(left < currentLeft && left >= slideWidth) return true;
					else return false;
				});
				
				// Animation
				$selectedTabs
					.animate({ left : '-=' + slideWidth }, settings.speed)
					.prev().animate({ left : '-=' + slideWidth }, settings.speed, function(){
						$(location).attr('href', $this.find('a').attr('href'));
					})
				;
				
				// Zu öffnender Slider
				var left = parseInt($header.eq(index).css('left'));
	
				if(left >= slideWidth)
				{
					if( ! $header.eq(index).hasClass('selected'))
					{
						$this.parent().prev().addClass('opened');
						$header.eq(index).prev()
							.css({ left : '+=' + slideWidth })
							.animate({ left : '-=' + slideWidth }, settings.speed, function(){
								$header.parent().removeClass('opened');
								$this.parent().prev().addClass('opened');
							});
						;
					}
				}
				
				// Auswahl der zu slidenden Tabs nach rechts
				var $selectedTabs = $header.filter(function()
				{
					var left = parseInt($(this).css('left'));
					if(left >= currentLeft  && left < slideWidth) return true;
					else return false;
				});
				
				// Animation
				$selectedTabs
					.animate({ left : '+=' + slideWidth }, settings.speed)
					.prev().animate({ left : '+=' + slideWidth }, settings.speed, function(){
						$(location).attr('href', $this.find('a').attr('href'));
					})
				;
		
				// Zu schließender Slider
				var left = parseInt($header.eq(index).css('left'));
				if(left < slideWidth)
				{
					$header.each(function(index){
						if($(this).hasClass('selected'))
						{
							$this.parent().prev().addClass('opened');
							$(this).prev().animate({ left : '+=' + slideWidth }, settings.speed, function(){
								$(this).css('left', tabLefts[index] - 16);
								$header.parent().removeClass('opened');
								$this.parent().prev().addClass('opened');
							});
						}
					});
				}
				
				$header.removeClass('selected').filter($this).addClass('selected');
				return false;
			}
		}
	});
			
	return $accordion;
}; // inverisAccordion

jQuery.fn.reverse = [].reverse;

})(jQuery);
