// Version 1.1 (27.06.2011) BL

/*
Variablen von aussen:
aImg		- Array mit den vorauszuladenden Bildern (im Modul-Template slideshow.html definiert)
textShow	- String mit dem Darstellungsmodus: 'textOfEachArticle' (default) oder 'textOfFirstArticle'
*/

$(document).ready(function(){

	var slideHeight = 392; // Pixelhöhe eines Slides
	var slideWidth = 867; // Pixelbreite eines Slides
	
	var showTime = 3000; // Anzeigedauer (in Millisekunden, Angabe zw. der letzten einfahrenden und ersten ausfahrenden Textanimation, mind. so lange wie die längste Textanimation)
	var transitionTime = 1500; // Transitiondauer der Slides (in Millisekunden)
	
	var boHead = 57;
	var biHead = 0;
	var wHead = 100; // Zeit nach der Slidetransition die gewartet wird, bis zum Einfahren der Headline
	var ttHead = 1000;
	var stHead = 3700;
	var gesamtHead = transitionTime + wHead + ttHead + stHead + ttHead;
	
	var boSub = 68;
	var biSub = 0;
	var wSub = 1100; // Zeit nach der Slidetransition die gewartet wird, bis zum Einfahren der Subheadline
	var ttSub = 1000;
	var stSub = 3300;
	var gesamtSub = transitionTime + wSub + ttSub + stSub + ttSub;
	
	var boTxt = 28;
	var biTxt = 19;
	var wTxt = 1600; // Zeit nach der Slidetransition die gewartet wird, bis zum Einfahren des Textes
	var ttTxt = 1000;
	var stTxt = 2900;
	var gesamtTxt = transitionTime + wTxt + ttTxt + stTxt + ttTxt;

	var longestTextTransition = gesamtHead;
	if (gesamtSub > longestTextTransition) longestTextTransition = gesamtSub;
	if (gesamtTxt > longestTextTransition) longestTextTransition = gesamtTxt;
	if(showTime < longestTextTransition) showTime = longestTextTransition;
	//if (navigator.appVersion.indexOf("MSIE 7") != -1) transitionTime = 0; // bei IE 7 keine Transition
	//if (navigator.appVersion.indexOf("MSIE 8") != -1) transitionTime = 0; // bei IE 8 keine Transition
	var curSlide = -1;
	var noOfSlides = $('.slideshow-item').length;
	var aFadeEl = new Array('#slide', '#slideshow-mask-', '#slide-headline-', '#slide-subheadline-', '#slide-text-');
	var intervall;
	var blocked = false; // verhindert Slideanimation, wenn die Animation noch nicht beendet ist
	var headWidth = new Array();
	var subWidth = new Array();
	var txtHeight = new Array();
	var timeoutId;
	var first = true;
	// Bilder vorausladen (preloader)
	var cache = [];
	$.preLoadImages = function() {
		var args_len = arguments.length;
		var aImages = arguments[0];
		for (var i = 0; i < aImages.length; i++) {
			var cacheImage = document.createElement('img');
			cacheImage.src = aImages[i]; // Arguments are image paths relative to the current page.
			cache.push(cacheImage);

			headWidth[i] = $('#slide-headline-'+i).width();
			$('#slide-headline-'+i).css('left',-boHead-headWidth[i]); // Headline links aus dem Bild schieben
			subWidth[i] = $('#slide-subheadline-'+i).width();
			$('#slide-subheadline-'+i).css('left',-boSub-subWidth[i]); // Subheadline links aus dem Bild schieben
			txtHeight[i] = $('#slide-text-'+i).height();
			$('#slide-text-'+i).css('bottom',-boTxt-txtHeight[i]); // Text unten aus dem Bild schieben
		}
	}

	if(typeof aImg != 'undefined'){
		$.preLoadImages(aImg); // aImg im Modul-Template slideshow.html definiert
	}

	// Nachdem die Bilder vorausgeladen wurden: erstes Bild einblenden
	//	$('#slide0').load(function() { alert('Image Loaded'); }); // doesn't work
	$(window).load(function(){
		$('.slideshow-loading').fadeOut(200);
		animateSlide('+');
		if(	$('.slideshow-item').length > 1){ // Vor zurück Pfeile anzeigen, wenn mehr als ein Slide
			$('#slideshow-next').fadeIn(transitionTime);
			$('#slideshow-back').fadeIn(transitionTime);
		}
	});

	$('#slideshow-back').click(function() {
		if(!blocked) animateSlide('-');
	});

	$('#slideshow-next').click(function() {
		if(!blocked) animateSlide('+');
	});

	function resetAnimation(){
		//jQuery.fx.off = true;
		$('#slide-headline-'+curSlide).stop(true,true);
		$('#slide-headline-'+curSlide).clearQueue();
		$('#slide-headline-'+curSlide).css('left',-boHead-headWidth[curSlide]); // Headline nach links aus dem Bild setzen
		$('#slide-subheadline-'+curSlide).stop(true,true);
		$('#slide-subheadline-'+curSlide).clearQueue();
		$('#slide-subheadline-'+curSlide).css('left',-boSub-subWidth[curSlide]); // Subheadline nach links aus dem Bild setzen
		$('#slide-text-'+curSlide).stop(true,true);
		$('#slide-text-'+curSlide).clearQueue();
		$('#slide-text-'+curSlide).css('bottom',-boTxt-txtHeight[curSlide]); // Text nach unten aus dem Bild setzen		
		//jQuery.fx.off = false;
	}
	
	function wait(){
		//timeoutId = window.setTimeout(animateSlide, showTime);
		animateSlide();
	}
	
	//function clearBlock(){
	//	blocked = false;
	//}
	
	function animateSlide(amount){
		if(textShow != 'textOfFirstArticle') resetAnimation();
		if(amount == '-'){
			amount = -1;
		}else{
			amount = 1;
		}
		blocked = true;
		clearTimeout(timeoutId);
		changeCurSlide(amount);
		if(textShow != 'textOfFirstArticle') resetAnimation();
		var from = slideHeight;
		var to = 0;
		if(amount < 0){ 
			from = -slideHeight;
		}
		
		// nächstes Bild von unten (Ausnahme: von oben) ins Bild fahren
		$('#slide'+curSlide).css('top',from).animate({top:to}, transitionTime);

		if($('.slideshow-item').length == 1){ // wenn nicht mehr als ein Bild vorhanden ist
			$('#slide-headline-'+curSlide)
				.css('left',-boHead-headWidth[curSlide])
				.delay(transitionTime+wHead)
				.animate({left:biHead}, ttHead); // raus
			$('#slide-subheadline-'+curSlide)
				.css('left',-boSub-subWidth[curSlide])
				.delay(transitionTime+wSub)
				.animate({left:biSub}, ttSub); // raus
			$('#slide-text-'+curSlide)
				.css('bottom',-boTxt-txtHeight[curSlide])
				.delay(transitionTime+wTxt)
				.animate({bottom:biTxt}, ttTxt);
		}else if(textShow == 'textOfFirstArticle'){ // wenn nur die Texte des ersten Artikels angezeigt werden sollen
			// aktuelles Bild von unten (Ausnahme: von oben) ins Bild fahren			
			if(first){
				$('#slide'+getSlide(-amount)).css('visibility','hidden');
			}
			$('#slide'+getSlide(-amount)).css('top',to).animate({top:-from}, transitionTime, function(){
				blocked = false;
				$('#slide'+getSlide(-amount)).css('visibility','visible');
			});

			if(first){
				$('#slide-headline-'+curSlide)
					.css('left',-boHead-headWidth[curSlide])
					.delay(transitionTime+wHead)
					.animate({left:biHead}, ttHead); // raus
				$('#slide-subheadline-'+curSlide)
					.css('left',-boSub-subWidth[curSlide])
					.delay(transitionTime+wSub)
					.animate({left:biSub}, ttSub); // raus
				$('#slide-text-'+curSlide)
					.css('bottom',-boTxt-txtHeight[curSlide])
					.delay(transitionTime+wTxt)
					.animate({bottom:biTxt}, ttTxt);
			}
			
			timeoutId = window.setTimeout(wait, showTime);
			first = false;
		}else{ // mehr als ein Bild
			// aktuelles Bild von unten (Ausnahme: von oben) ins Bild fahren			
			if(first){
				$('#slide'+getSlide(-amount)).css('visibility','hidden');
			}
			$('#slide'+getSlide(-amount)).css('top',to).animate({top:-from}, transitionTime, function(){
				blocked = false;
				$('#slide'+getSlide(-amount)).css('visibility','visible');
			});
			
			$('#slide-headline-'+curSlide)
				.css('left',-boHead-headWidth[curSlide])
				.delay(transitionTime+wHead)
				.animate({left:biHead}, ttHead)
				.delay(stHead)
				.animate({left:-boHead-headWidth[curSlide]}, ttHead); // raus
			$('#slide-subheadline-'+curSlide)
				.css('left',-boSub-subWidth[curSlide])
				.delay(transitionTime+wSub)
				.animate({left:biSub}, ttSub)
				.delay(stSub)
				.animate({left:-boSub-subWidth[curSlide]}, ttSub); // raus
			$('#slide-text-'+curSlide)
				.css('bottom',-boTxt-txtHeight[curSlide])
				.delay(transitionTime+wTxt)
				.animate({bottom:biTxt}, ttTxt)
				.delay(stTxt)
				.animate({bottom:-boTxt-txtHeight[curSlide]}, ttTxt);

			timeoutId = window.setTimeout(wait, showTime);
			first = false;
		}
	}
	
	function getSlide(i){
		var slide = curSlide + i;
		if(slide >= noOfSlides) slide = 0;
		if(slide < 0) slide = noOfSlides - 1;
		return slide; 
	}

	function changeCurSlide(amount){
		curSlide += parseInt(amount);
		if(curSlide >= noOfSlides) curSlide = 0;
		if(curSlide < 0) curSlide = noOfSlides - 1;
	}

	function transitionIn(){
		var i = curSlide;
		$('#slide'+i).animate({top:'-=392'}, transitionTime);
		//$('#slide'+i).delay(transitionTime).animate({top:'+=392'}, 1);
		//$('#slide'+i).delay(transitionTime).top = '+=392';
		//var headlineBreite = $('#slide-headline-'+curSlide).width()+95;
		//$('#slide-headline-'+curSlide).delay(200).animate({right:'-='+headlineBreite},200);
		//$('#slide-subheadline-'+curSlide).fadeIn(transitionTime);
		//$('#slide-text-'+curSlide).delay(500).animate({bottom:'+=50'},transitionTime);
	}
	
	function transitionOut(){
		var i = curSlide;
		//$('#slide-subheadline-'+curSlide).fadeOut(transitionTime);
		//$('#slide-text-'+curSlide).fadeOut(transitionTime);
		//var headlineBreite = $('#slide-headline-'+curSlide).width()+95;
		//$('#slide-headline-'+curSlide).delay(200).animate({right:'+='+headlineBreite},200);
		//$('#slide'+curSlide).delay(500).fadeOut(transitionTime);
		$('#slide'+i).delay(transitionTime).animate({top:'-=392'}, transitionTime);
	}
	
	
	//window.setInterval(check, 50);
	function check(){
		var n1 = $.queue( $('#slide'+curSlide), "fx" );
		var n2 = $.queue( $('#slide'+getSlide(1)), "fx" );
		$('.headline').text(n1.length+" - "+n2.length);
	}

	$(document).keydown(function(event){
		if(!blocked){
			switch (event.keyCode) {
				case 37: animateSlide('-'); break; // "Pfeil nach links"-Taste
				case 38: animateSlide('-'); break; // "Pfeil nach oben"-Taste
				case 39: animateSlide('+'); break; // "Pfeil nach rechts"-Taste
				case 40: animateSlide('+'); break; // "Pfeil nach unten"-Taste
			}
		}
	});

});

