(function($){
    function DarkNavSlideDeck( deckFrame ){
		var darknavDeckFrame = $(deckFrame);
		var darknavDeckFrameHeight = darknavDeckFrame.outerHeight();
		//skin bug fix: slidedeck var set to adjust slidedeck frame to correct width defined when slidedeck is created
		var slidedeck = darknavDeckFrame.find('.slidedeck');
		var footer;
		var footerHeight = 0;
		var footerTitle;
		var darknavNext;
		var darknavPrev;
		var navigation = '';
		// wenn navi vorhanden sein soll dann var navigation = '<div class="slidedeckFooter"><div class="navigation"><a class="prevSlide" href="#prev"></a><a class="nextSlide" href="#next"></a></div></div>'; einfügen
		var darknavDeck = darknavDeckFrame.find('.slidedeck').slidedeck({
			start: 3,
			autoPlay: false,
			cycle: false, 
			autoPlayInterval: 2500, // 2.5 seconds
			hideSpines: false
		});
		
		//skin bug fix: finds slidedeck width and adjusts slidedeck frame width to match 
		var sizeDeckFrame = function(){
            if( slidedeck.width() && slidedeck.height() ){
                darknavDeckFrame.css({
                    width: slidedeck.width()
                });
            }
        };
		
		function updateFooterTitle(){
			var currentTitle = $(darknavDeck.spines[darknavDeck.current-1]).html();
			footerTitle.html(currentTitle);
		}
		
		function updateDisabledNavigation(){
			if(darknavDeck.options.cycle == false){
				darknavNext.removeClass('disabled');
				darknavPrev.removeClass('disabled');
				if( darknavDeck.current == 1 ){
					darknavPrev.addClass('disabled');
				}
				if( darknavDeck.current == darknavDeck.slides.length ){
					darknavNext.addClass('disabled');
				}							
			}				
		}
		
		darknavDeck.loaded(function(){
			if( darknavDeckFrame.find('.slidedeckFooter').length ){
				darknavDeckFrame.find('.slidedeckFooter').remove();
			}
			darknavDeckFrame.append(navigation);
			
			footer = darknavDeckFrame.find( '.slidedeckFooter' );
			footerHeight = footer.outerHeight();					
			//darknavDeckFrame.height( darknavDeckFrameHeight + footerHeight );
			
			footerTitle = darknavDeckFrame.find( '.slideTitle' );
			darknavNext = darknavDeckFrame.find('a.nextSlide');
			darknavPrev = darknavDeckFrame.find('a.prevSlide');
			
			darknavNext.click(function(event){
				event.preventDefault();    				
				darknavDeck.next();				
			});
			darknavPrev.click(function(event){
				event.preventDefault();    				
				darknavDeck.prev();				
			});			
						
			updateFooterTitle();
			updateDisabledNavigation();
			 
			 //skin bug fix
			// adjust the deck frame to fit the deck (if not 100%)
	        sizeDeckFrame();
		});	
		
		darknavDeck.options.complete = function(deck){
			updateFooterTitle();
			updateDisabledNavigation();
		}
	}
	
	var SlideDeckAssistant = {
			innerSlideCount: 0,
			/** prevSlide, nextSlide and goToSlide are all custom functions to control progress of the SlideDeck */
			prevSlide: function(theIndex){
				SlideDeckAssistant.goToSlide(theIndex - 1);
			},
			nextSlide: function(theIndex){
				SlideDeckAssistant.goToSlide(theIndex + 1);
			},
			goToSlide: function(theIndex){        
				$('ul.galleryNav li').removeClass('active');
				$('ul.galleryNav li:eq('+ theIndex +')').addClass('active');
				myDeck.goTo(theIndex+1);
				if((theIndex + 1) == SlideDeckAssistant.innerSlideCount){
					// disable the next button
					$('ul.galleryArrows .next').addClass('disabled');
					$('ul.galleryArrows .prev').removeClass('disabled');
				}else if((theIndex + 1) == 1){
					// disable the previous button
					$('ul.galleryArrows .next').removeClass('disabled');
					$('ul.galleryArrows .prev').addClass('disabled');
				}else{
					// enable both next/previous buttons
					$('ul.galleryArrows .next, ul.galleryArrows .prev').removeClass('disabled');
				}
			},
			init: function(){
				SlideDeckAssistant.innerSlideCount = $('#slidedeck_frame dl.slidedeck dd').length;
				/** Store number of slides in SlideDeck */
				$('#slidedeck_frame').append('<ul class="galleryArrows"><li class="prev"><a href="#prev">&larr;<\/a><\/li><li class="next"><a href="#next">&rarr;<\/a><\/li><\/ul>');
				// create navigation element with next and previous buttons
				$('#slidedeck_frame').append('<ul class="galleryNav"><\/ul>');
				// create bullet navigation element
				for (i=0 ; i < SlideDeckAssistant.innerSlideCount ; i++ ) {
					$('ul.galleryNav').append('<li><a href="goto#' + (i+1) + '">' + (i+1) + '<\/a><\/li>');
				}
				// create navigation bullets based on number of slides
				var goToDots = $('ul.galleryNav li a');
				$('ul.galleryNav').css({marginLeft: '-' + (goToDots.outerWidth(true)*goToDots.length / 2) + 'px'});
				// position navigation bullets
				$('ul.galleryNav li:first').addClass('active');
				$('ul.galleryArrows li.prev').addClass('disabled');
				$('ul.galleryNav li a').click(function(e){
					e.preventDefault();
					var theIndex = $('ul.galleryNav li a').index($(this));
					SlideDeckAssistant.goToSlide(theIndex);
					return false;
				});
				// assign click function to navigation bullets
				$('ul.galleryArrows li.prev a').click(function(e){
					e.preventDefault();
					if($(this).parent('li').hasClass('disabled')){
						return false;
					}else{
						var theIndex = $('ul.galleryNav li').index($('ul.galleryNav li.active'));
						SlideDeckAssistant.prevSlide(theIndex);
					}
					return false;
				});
				// assign click function for previous button
				$('ul.galleryArrows li.next a').click(function(e){
					e.preventDefault();
					if($(this).parent('li').hasClass('disabled')){
						return false;
					}
					else{
						var theIndex = $('ul.galleryNav li').index($('ul.galleryNav li.active'));
						SlideDeckAssistant.nextSlide(theIndex);
					}
					return false;
				});
				//assign click function for next button
		}
		};
		
		$(document).ready(function(){
			SlideDeckAssistant.init();
		});
	
	

	$(document).ready(function(){
		for(var i=0, decks=$('.slidedeck_frame.skin-darknav'); i<decks.length; i++){
			var thisDeck = decks[i];
			
			if(typeof(thisDeck.SlideDeck_skinDarkNav) == 'undefined'){
				thisDeck.SlideDeck_skinDarkNav = DarkNavSlideDeck( thisDeck );
			}
		}
	});    
})(jQuery);

