(function( $ ){
	
	$.fn.seasonSlide = function() {
    
    return this.each(function(){
      
      $('#season a').hover(function() {
				$('#seasonDescription').stop(true,true).fadeIn(200);
			}, function() {
          $('#seasonDescription').stop(true,true).fadeOut(200);
      }); 

    });
  };
	
	$.fn.naviSlide = function() {
    
    return this.each(function(){
      
      $('#nav li').hover(function() {
        if (!$(this).is('.current')) {
          
          var currentPosition = $(this).position()['left'];
          var difference = 17 - currentPosition;
          
          if (difference > 0) {
            
            $(this).children().animate({
            
              left: '+=17'
            
            }, 200);
            
          }
            
        }
      }, function() {
        if (!$(this).is('.current')) {
            $(this).children().stop(true,true).animate({left: 0}, 200);
        }
      });
    });
  };
	
  $.fn.slider = function() {
		
    return this.each(function(){
			
    var elements, media, wrapper, elementsCount, leftCount, totalWidth, singleWidth;
			
    var $this = $(this);
			
      elements = $this.find('li');
      wrapper = $('#mediaWrapper');
      elementsCount = $(elements).length;
      leftCount = elementsCount - 1;
      totalWidth = $('#mediaWrapper').innerWidth();
      singleWidth = 500;
      totalOverlap = totalWidth - singleWidth;
      singleOverlap = totalOverlap / (leftCount);
        
      $('#maxIndex').replaceWith('<span id="maxIndex">'+elementsCount+'</span>');
      $('#currentIndex').replaceWith('<span id="currentIndex">'+1+'</span>');
			
			// 1. <li>'s einen Index geben
			$(elements).index();

			// 2. Index vererben
			$.each(elements, function () {
			   
				var index = $(this).index();
				 
				$(this).children('.media').addClass('' + index);
				$(this).children('h2').addClass('heading ' + index);
				$(this).children('h3').addClass('subheading ' + index);
				$(this).children('p').addClass('description ' + index);
				 
      });
			
      var currentIndex = leftCount;
			
			// 3. Bilder in Wrapper legen, alte löschen, neue in Array
			$('.media').appendTo('#mediaWrapper');
			
      media = $('#mediaWrapper').find('.media');
			
      // 4. Bilder anordnen
      $.each(media, function(i) {
        $(this).css('left', singleOverlap * i);
        if (i != currentIndex) {
			    $(this).children('img').css('opacity', '0.8');
		    }
      });
			
			$.each(media, function(i) {
        if (i == currentIndex) {
          $(this).addClass('current');
        }
      });
			
			var firstUrl = $(media)[3];
			    firstUrl = $(firstUrl).data('url');
      var firstType = $(media)[3];
			    firstType = $(firstType).data('type');
      
      if (firstUrl && firstType == 'image') {
        $('.overlay'+'.image').delay(400).fadeIn(200);
        $('.image').bind({ click: function() {window.open(firstUrl,'_self')}});
      } else if (firstUrl && firstType == 'video') {
        $('.overlay'+'.video').delay(400).fadeIn(200);
				$('.video a').attr('rel',firstUrl);
      }			
			
			// 5. Erste Description anzeigen
			$('.heading' + '.'+currentIndex).clone(true).appendTo('#heading');
			$('.subheading' + '.'+currentIndex).clone(true).appendTo('#heading');
			$('.description' + '.'+currentIndex).clone(true).appendTo('#description');
			
      // 6. The MAGIC
      $(media).click(function() {
        if (!$('.media').is(':animated')) {
          slideNext($(this));
        }
      });
			
      $('#nextSlide').click(function() {
        var slide = $('#mediaWrapper').find('.media');
            slide = $(slide)[(leftCount-1)];
        if (!$('.media').is(':animated')) {
          slideNext($(slide));
        }
      });
      
      $('#prevSlide').click(function() {
        var slide = $('#mediaWrapper').find('.media');
            slide = $(slide)[0];
        if (!$('.media').is(':animated')) {
          slidePrevious($(slide));
        }
      });
			
      // Standard / Next Slide
      function slideNext(element) {

        var element = element;
				
        var prevElements = $(element).prevUntil();
				var countPrevElements = $(prevElements).length;
				
				var nextElements = $(element).nextUntil();
				var countNextElements = $(nextElements).length;
				  
				var prevElement = $(prevElements).last();
				
				var index = $(element).attr('class'); 
            index = index.substring(6,7);
  
        if (index != currentIndex) {
          
					// Bilder neu anordnen
					$.each(nextElements, function(i) {
            
            var el = $(this);
           
            if(countPrevElements==0) {
              prevElement = element;
            } 
            
            $(el).removeClass('current').clone(true).insertBefore(prevElement).css('left', singleOverlap * i).children('img').css('opacity','0.8');
            
            $(el).animate({left: '+=' + (singleWidth+countNextElements * singleOverlap)}, function() {
              $(this).remove();
            });
          });
        
					$(prevElements).animate({left: '+=' + (singleOverlap * countNextElements)});
					$(element).animate({left: '+=' + (singleOverlap * countNextElements)}).addClass('current');
					$(element).children('img').animate({opacity: 1})  
               
          var url = $(element).data('url');
					var type = $(element).data('type');
					
					$('.overlay' + '.image').fadeOut(100).unbind();
					$('.overlay' + '.video').fadeOut(100);
					$('.video a').removeAttr('href');
					
          if (url && type == 'image') {
            $('.overlay'+'.image').delay(400).fadeIn(200);
            $('.image').bind({ click: function() {window.open(url,'_self')}});
          } else if (url && type == 'video') {
						$('.overlay'+'.video').delay(400).fadeIn(200);
						$('.video a').attr('href',url);
					}
               
					// Text ändern
					$('#heading .heading' + '.'+currentIndex).fadeOut(200, function() {
						$('#heading .heading' + '.'+currentIndex).remove();
						$('.heading' + '.'+index).clone(true).appendTo('#heading').css('display','none').fadeIn(200);
          });
              
          $('#heading .subheading' + '.'+currentIndex).fadeOut(200, function() {
						$('#heading .subheading' + '.'+currentIndex).remove();
						$('.subheading' + '.'+index).clone(true).appendTo('#heading').css('display','none').fadeIn(200);
          });
							    
          $('#description .description' + '.'+currentIndex).fadeOut(200, function() {
						$('#description .description' + '.'+currentIndex).remove();
						var newHeight = $('.description' + '.'+index).clone(true).appendTo('#description').css('display','none').fadeIn(200);
						newHeight = $(newHeight).height();
						$('#description').animate({height: newHeight}, 100);
          });

					// Count ändern
					currentIndex = parseInt(index);
					// hack for correct displaying number of image
					var showIndex = elementsCount - currentIndex;
					$('#currentIndex').replaceWith('<span id="currentIndex">'+showIndex+'</span>'); 
        }
      }
        
      // Previous Slide
      function slidePrevious (element) {
        
				var element = element;
				
				var prevElements = $(element).prevUntil();
				var countPrevElements = $(prevElements).length;
				
				var nextElements = $(element).nextUntil();
				var countNextElements = $(nextElements).length;
				  
				var prevElement = $(prevElements).last();
				var nextElement = $(nextElements).last();
				
				var index = $(element).attr('class'); 
            index = index.substring(6,7);
  
				// Bilder neu anordnen				
				var newElement = $(element).clone(true).insertAfter(nextElement).css('left', totalWidth);
				
				$(newElement).animate({left: (totalOverlap)});
				
				$(element).animate({left: '-=86'}, function() {
          $(this).remove();
        });
				
				$(newElement).addClass('current').children('img').css('opacity','1');
				
				$.each(nextElements, function(i) {
          
          var el = $(this);
          
					$(el).animate({left: '-=' + (singleOverlap)}).removeClass('current');
					$(el).children('img').animate({opacity: 0.8});
          
        });
				
				var url = $(element).data('url');
        var type = $(element).data('type');
        
        $('.overlay' + '.image').fadeOut(100).unbind();
        $('.overlay' + '.video').fadeOut(100);
        $('.video a').removeAttr('href');
        
        if (url && type == 'image') {
          $('.overlay'+'.image').delay(400).fadeIn(200);
          $('.image').bind({ click: function() {window.open(url,'_self')}});
        } else if (url && type == 'video') {
          $('.overlay'+'.video').delay(400).fadeIn(200);
          $('.video a').attr('href',url);
        }
				
				// Text ändern
				$('#heading .heading' + '.'+currentIndex).fadeOut(200, function() {
          $('#heading .heading' + '.'+currentIndex).remove();
          $('.heading' + '.'+index).clone(true).appendTo('#heading').css('display','none').fadeIn(200);
        });
            
        $('#heading .subheading' + '.'+currentIndex).fadeOut(200, function() {
					$('#heading .subheading' + '.'+currentIndex).remove();
					$('.subheading' + '.'+index).clone(true).appendTo('#heading').css('display','none').fadeIn(200);
        });
                
        $('#description .description' + '.'+currentIndex).fadeOut(200, function() {
					$('#description .description' + '.'+currentIndex).remove();
					var newHeight = $('.description' + '.'+index).clone(true).appendTo('#description').css('display','none').fadeIn(200);
					newHeight = $(newHeight).height();
					$('#description').animate({height: newHeight}, 100);
        });
        
        // Count ändern
		// Count ändern
		currentIndex = parseInt(index);
		// hack for correct displaying number of image
		var showIndex = elementsCount - currentIndex;
		$('#currentIndex').replaceWith('<span id="currentIndex">'+showIndex+'</span>'); 
      }
    });
  };
})( jQuery );
