﻿//Startpage Blener function
var blender = {};

$(function () {
	blender.init();
});

blender.canvas = null; //is the canvas area where all images will be stored
blender.indicators = null;  //here are all indicators contained
blender.textarea = null;  //here will the text be shown

blender.cache = null;//contains the image which will be loaded
blender.index = 0; //current index of the slideshow
blender.lastIndex = 0; //current index of the slideshow
blender.loadedImages = [];
blender.alreadyLoadedImages = [];
blender.animation = null;
blender.startHelper = null;
blender.firstCall = true;//to recognize that the animation is already started
blender.animationStarted = false; //checks if the animation is already running
blender.time = 5000; //timeout for the animation

//initiate blender
blender.init = function() {window.setTimeout(function () {
	//check for stack
	if (BlenderStack) {
		//only if there are entries
		if (BlenderStack.length > 0) {
			//set variables
			blender.canvas = $('#BlenderImage');
			blender.indicators = $('#BlenderIndicators');
			blender.textarea = $('#BlenderText');

			//if there is only one entry, no animation will be needed
			if (BlenderStack.length == 1) {
				//set image to null, only at the beginning
				blender.loadedImages[0] = null;

				//load the image
				blender.preLoadImage(BlenderStack[0].image, 0);

			} else {//make animated slideshow
				var indicatorData = '';
				$.each(BlenderStack, function (index, value) {
					//console.log(index+'/'+value);
					blender.loadedImages[index] = null;
					blender.alreadyLoadedImages[index] = false;

					//create indicators
					indicatorData += '<a id="indicator' + index + '" rel="' + index + '"><span>' + (index +1) + '</span></a>';

					blender.preLoadImage(value.image, index);
				});

				//set indicator content
			    blender.indicators.html(indicatorData);

				//set indicator events
				blender.indicators.find('a').click(blender.clickIndicator);
			}
		}
	}
},blender.time);
};

//preloads the image
blender.preLoadImage = function (image, index) {
	if (image) {
		if (!isNaN(index)) {
			if (!blender.loadedImages[index]) {
				//create image wrapper in the canvas
				blender.canvas.append('<div class="BlenderImage" id="preLoad' + index + '"></div>');

				//create image to load
				//blender.cache = $('<img id="preLoadImage' + index + '" src="' + image + '" rel="' + index + '" />');

				//create image to load
				blender.loadedImages[index] = $('<img id="preLoadImage' + index + '" src="' + image + '" rel="' + index + '" />');

				blender.loadedImages[index].load(function () {
					//get index of the current image
					var index = $(this).attr('rel');

					//console.log(index); //@LOG

					blender.alreadyLoadedImages[index] = true;

					//set current image as loaded
					blender.loadedImages[index] = blender.canvas.find('#preLoad' + index).append(blender.loadedImages[index]).find('img:first');

					//hide the image
					blender.loadedImages[index].hide();

					//function to realize that an image is loaded correctly
					blender.imageIsReady();

				}).each(function () {
					//this is needed by the opera, doesn't fire load event on images in the cache
					if ($.browser.opera) {
						if (this.complete) $(this).trigger('load');
					}
				});


			}
		}
	}
};

blender.imageIsReady = function () {
	//nur für ersten aufruf
	if (blender.firstCall === true) {
		//only show the first image
		if (blender.alreadyLoadedImages[blender.index]) {
			//show first image
			blender.loadedImages[blender.index].fadeTo('slow', 1);

			//set text
			blender.setText();

			//set first indicator
			$('#indicator' + blender.index).addClass('current');

			blender.firstCall = false;
			//animation starten, wenn noch nicht gestartet
			if (!blender.animationStarted && BlenderStack.length > 1) {
				//console.log('start animation');
				blender.startAnimation();
			}
		}

	}
};

blender.startAnimation = function () {
	if (!blender.startHelper) {
		//console.log('animation started');
		//set that the animation is started
		blender.animationStarted = true;

		blender.animation = window.setInterval(function () {
			blender.next();
		}, blender.time);
	}
};

blender.clickIndicator = function () {
	window.clearTimeout(blender.startHelper);
	var item = $(this);

	blender.lastIndex = blender.index;
	blender.index = parseInt($(this).attr('rel'), 10);

	//stop animation
	blender.animationStarted = false;

	blender.checkIndexValue();
	blender.goTo();

	//start animation again after some time
	blender.startHelper = window.setTimeout(blender.startAnimation, blender.time);

	return false;
}

blender.next = function () {
	blender.lastIndex = blender.index;
	blender.index++;
	//blender.checkIndexValue();
	blender.goTo();
};
blender.prev = function () {
	blender.lastIndex = blender.index;
	blender.index--;
	//blender.checkIndexValue();
	blender.goTo();
};

//check index for max and min values
blender.checkIndexValue = function () {
	
	if (blender.index < 0) {
		blender.index = BlenderStack.length - 1;
	}
	if (blender.index >= BlenderStack.length) {
		blender.index = 0;
	}
};

blender.goTo = function() {

    //handle indicators
    $('#indicator' + blender.lastIndex).removeClass('current');
    $('#indicator' + blender.index).addClass('current');

    blender.loadedImages[blender.lastIndex].css('z-index', '1');

    blender.checkIndexValue();

    blender.loadedImages[blender.index].css('z-index', '2').stop().fadeTo('slow', 1, function() {
        blender.loadedImages[blender.lastIndex].hide();
        //blender.setText();
    });
    


    if (blender.animationStarted === false) {
        window.clearInterval(blender.animation);
    }
};
blender.setText = function () {
	blender.textarea.html('<h1>' + BlenderStack[blender.index].headline + '</h1><div>' + BlenderStack[blender.index].text + '</div>');
};
