/*
	ANM - HeadAnimation by Asset New Media
	Version: 1.2
*/

	var CONST_FadingImages_FadingImagesContainer = null;
	var CONST_FadingImages_IndekatorContainer = null;
	var CONST_FadingImages_PictureInfoContainer = null;
	var CONST_FadingImages_Timeout = null;
	var CONST_FadingImages_VersuchRefreshCounter = 0;
	
	/*
	* Konstanten um einen Bind von Events vorzunehmen
	* Um diese Events nutzen zu können, muss man dem Container einfach per BIND - Methode das entsprechende Event binden.
	* Z.B.: jQuery("#MeinContainerDiv").bind(CONST_EVENT_ANMGALLERY_INIT_BEFORE, function(){alert("Bevor die Initialisierung gestartet wird")});
	*/
	var CONST_EVENT_ANMGALLERY_INIT_BEFORE = "anmgallery_init_before";	//Wird vor dem Init aufgerufen!
	var CONST_EVENT_ANMGALLERY_INIT_AFTER  = "anmgallery_init_after";	//Wird nach dem Init aufgerufen!
	var CONST_EVENT_ANMGALLERY_IMAGE_CHANGE_BEFORE  = "anmgallery_image_change_before";	//Wird bevor ein bild gewechselt wird aufegerufen!
	var CONST_EVENT_ANMGALLERY_IMAGE_CHANGE_AFTER  = "anmgallery_image_change_after";	//Wird nachdem ein bild gewechselt wurde aufegerufen!
	var CONST_EVENT_ANMGALLERY_IMAGE_LOOP_END_REACHED  = "anmgallery_image_loop_end_reached"; //Wird nachdem alle Bilder durchgelaufen sind, aufgerufen!
	
	var CONST_FadingImages_Active = "active";
	var CONST_FadingImages_OldActive = "oldactive";
	var CONST_FadingImages_Bilder = "bilderreihenfolge";
	var CONST_FadingImages_IndecatorIndex = "index";
	var CONST_FadingImages_Geladen = "geladen";
	var CONST_FadingImages_TimeoutFunction = null;
	
	var FadingImages_MaxVersucheImageLoadRefresh = 80;  //Nach X mal FadingImages_TimeToRefreshImageLoaded wird dieses Bild einfach übersprungen und das Nächste genommen [250 * 80 = 20000 = 20 sekunden]
	var FadingImages_ZIndexBegin = 100; 				//Wo der Z-Index der Elemente beginnen soll
	var FadingImages_TimeToRefreshImageLoaded = 250; 	//Zeit wie lange der Timeout wartet, bis nochmals geprüft wird ob ein Bild vorhanden ist
	var FadingImages_FadingSourceContainer = "fadingSourceContainer" //
	var FadingImages_ImagesClass = "fadingpic"			//Klasse zur initialisierung der Bilder die zur Auswahl stehen
	var FadingImages_IndicatorContainerClass = "indicatorContainerClass" //Conatiner der die Indicatoren beinhaltet (kleine rechtecke links unten) 
	var FadingImages_PictureInfoContainerClass = "pictureInfoContainer"; //
	var FadingImages_IndicatorClass = "indicatorClass" //Conatiner der die Indicatoren beinhaltet (kleine rechtecke links unten) 
	var FadingImages_IndicatorAktivClass = "aktiv"
	var FadingImages_IndicatorLoadingClass = "loading";
	
	function FadingImages_get(selector)
	{
		return(CONST_FadingImages_FadingImagesContainer.find(selector));
	}
	
	function FadingImages_init()
	{

		CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_INIT_BEFORE);
		
		/*Erstellung: Container der die Informtionen zu einem Bild beinhaltet*/
		CONST_FadingImages_PictureInfoContainer = jQuery("<div><h3>Bildinformationen:</h3><div></div></div>").css({"display":"none"}).addClass(FadingImages_PictureInfoContainerClass).appendTo(CONST_FadingImages_FadingImagesContainer);
		CONST_FadingImages_PictureInfoContainer.data("visible", false);	
		
		var bilder = CONST_FadingImages_FadingImagesContainer.find("." + FadingImages_ImagesClass);

		if(bilder.length > 0)
		{
			/*Standard - Werte setzen*/
			CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active, (0+1));
			CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_OldActive, (0));
			CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Bilder, bilder);
			
			if (bilder.length > 1)
			{
				/*Erstellung: Container der die Indekatoren beinhaltet*/
				CONST_FadingImages_IndekatorContainer = jQuery("<div><div style='clear: both;'></div>").addClass(FadingImages_IndicatorContainerClass).appendTo(CONST_FadingImages_FadingImagesContainer);

				/*Erstellung: Indekatoren in den Container*/
				var anzahlFadeImages = CONST_FadingImages_FadingImagesContainer.find("." + FadingImages_ImagesClass).length;
				for(var aI = 0; aI < anzahlFadeImages; aI++)
				{
					var tmpIndicatorClass = FadingImages_IndicatorClass;
					if(aI == anzahlFadeImages - 1)
					{
						tmpIndicatorClass += " aktiv";
					}
					jQuery("<div></div>").html(FadingImages_CounterInIndekatoren ? (anzahlFadeImages - aI)+"" : "&nbsp;").appendTo(
						jQuery("<a></a>").attr({"href" : "#"}).appendTo(
							jQuery("<div></div>").data(CONST_FadingImages_Geladen, false).addClass(FadingImages_IndicatorLoadingClass).addClass(tmpIndicatorClass).prependTo("." + FadingImages_IndicatorContainerClass)
						)
					);			
				}
				
				CONST_FadingImages_TimeoutFunction = window.setTimeout("FadingImages_showImage(true, true)", FadingImages_EingeblendetZeit);
		
				/*Binds erstellen*/
				FadingImages_get("." + FadingImages_IndicatorContainerClass + ", ." + FadingImages_PictureInfoContainerClass).bind
				({
					mouseenter: function()
					{
						try
						{
							window.clearTimeout(CONST_FadingImages_TimeoutFunction);
						}
						catch(exc)
						{
						}
					},
					mouseleave: function()
					{
						CONST_FadingImages_TimeoutFunction = window.setTimeout("FadingImages_showImage(true, true)", FadingImages_EinblendZeit + FadingImages_EingeblendetZeit);
					}
				});
			
				if (FadingImages_get("." + FadingImages_IndicatorContainerClass + " ." + FadingImages_IndicatorClass).length > 1)
				{
					FadingImages_get("." + FadingImages_IndicatorContainerClass + " ." + FadingImages_IndicatorClass)
					.each(function(aI)
					{
						jQuery(this).data(CONST_FadingImages_IndecatorIndex, aI);
					});
				}
				else
				{
					FadingImages_get("." + FadingImages_IndicatorContainerClass).remove();
				}
				
				FadingImages_imageLoadingState();
			}/*Wenn mehr als ein Bild - Ende*/
			
			jQuery(document).bind(
			{
				keypress: function(e)
				{
					if (e.ctrlKey && (e.charCode == 121 || e.keyCode == 25 || e.keyCode == 89)) //STRG + y (FF,Chrome || IE || Opera)
					{	
						FadingImages_togglePictureInfo();
					}
				}
			});
			
			FadingImages_generatePictureInfo();
			
			
		}/*Wenn mehr als 0 Bilder - Ende*/
		
		/*
		* Funktion die nach dem Init ausgeführt wird
		* um diese Funktion nutzen zu können, muss man dem Container einfach per jquery das event init_fading_images_ready binden.
		*/	
		CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_INIT_AFTER);
	}

	function FadingImages_generatePictureInfo()
	{
		var Elemente = CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Bilder);
		var AktivIndex = parseInt(CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active), 10);
		var curElement = jQuery(Elemente[AktivIndex-1]);
		
		/*if (CONST_FadingImages_PictureInfoContainer.data("visible") == true)
		{
			FadingImages_togglePictureInfo(function()
			{
				var inhalt = "Nummer: " + AktivIndex 
				+ "<br>Pfad: <a href='" + curElement.attr("src") + "'>" + curElement.attr("src") + "</a>"
				+ "<br>Abmessungen: " + curElement.css("width") + " x " +  curElement.css("height");
				CONST_FadingImages_PictureInfoContainer.find("div").html(inhalt);
				FadingImages_togglePictureInfo();
			});
			toggled = true;
		}
		else
		{*/
			var inhalt = "Nummer: " + AktivIndex 
			+ "<br>Pfad: <a target='_blank' href='" + curElement.attr("src") + "'>" + curElement.attr("src") + "</a>"
			+ "<br>Abmessungen: " + curElement[0].offsetWidth + " x " +  curElement[0].offsetHeight;
			CONST_FadingImages_PictureInfoContainer.find("div").html(inhalt);
		/*}*/		
	}
	
	function FadingImages_togglePictureInfo(callback)
	{
		var cb = callback;
		if (CONST_FadingImages_PictureInfoContainer.data("visible") == false)
		{
			CONST_FadingImages_PictureInfoContainer.data("visible", true).css({"display":"block"});
			var breite = CONST_FadingImages_PictureInfoContainer[0].offsetWidth;
			CONST_FadingImages_PictureInfoContainer.parent().data("oldoverflow", CONST_FadingImages_PictureInfoContainer.parent().css("overflow")).css("overflow", "hidden");
			CONST_FadingImages_PictureInfoContainer
				.css({"right":(-1*breite)})
				.dequeue()
				.animate({"right":0}, 250, function()
				{
					CONST_FadingImages_PictureInfoContainer.parent().css("overflow", CONST_FadingImages_PictureInfoContainer.parent().data("oldoverflow"))
					if (cb != null && typeof(cb) == "function")
					{
						cb(true);
					}
				});				
		}
		else if(CONST_FadingImages_PictureInfoContainer.data("visible") == true)
		{
			var breite = CONST_FadingImages_PictureInfoContainer[0].offsetWidth;
			CONST_FadingImages_PictureInfoContainer.parent().data("oldoverflow", CONST_FadingImages_PictureInfoContainer.parent().css("overflow")).css("overflow", "hidden");
			CONST_FadingImages_PictureInfoContainer.data("visible", false)
				.dequeue()
				.animate({"right":(-1*breite)}, 250, function()
				{
					CONST_FadingImages_PictureInfoContainer.css({"display":"none"});
					CONST_FadingImages_PictureInfoContainer.parent().css("overflow", CONST_FadingImages_PictureInfoContainer.parent().data("oldoverflow"))
					if (cb != null && typeof(cb) == "function")
					{
						cb(false);
					}
				});	
		}
	}
	
	
	function FadingImages_stop()
	{
		try
		{
			window.clearTimeout(CONST_FadingImages_TimeoutFunction);
		}catch(exc){}
	}
	
	function FadingImages_remove()
	{
		try
		{
			FadingImages_stop();
			CONST_FadingImages_FadingImagesContainer.removeData();
			CONST_FadingImages_FadingImagesContainer.find("." + FadingImages_IndicatorContainerClass).empty().removeData();
			CONST_FadingImages_FadingImagesContainer.find("." + FadingImages_FadingSourceContainer).empty().removeData();
		}catch(exc){}
	}
	
	function FadingImages_imageLoadingState()
	{
		var ladestatus = FadingImages_ImagesLoaded("");
		var alleBilderGeladen = true;
		for (var aI = 0; aI < ladestatus.length; aI++)
		{
			if (ladestatus[aI] == true)
			{
				var indekator = jQuery(CONST_FadingImages_IndekatorContainer.find("." + FadingImages_IndicatorClass)[aI]);
				if (indekator.data(CONST_FadingImages_Geladen) == false)
				{					
					indekator
						.bind(
						{
							mouseenter: function(e)
							{
								var momentanAktiv = parseInt(CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active), 10) - 1;
								var aktuellerIndex = parseInt(jQuery(this).data(CONST_FadingImages_IndecatorIndex), 10);
								
								if (momentanAktiv != aktuellerIndex)
								{
									CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active, parseInt(jQuery(this).data(CONST_FadingImages_IndecatorIndex), 10));
									FadingImages_showImage(false, false);
								}					
							}
						})
						.data(CONST_FadingImages_Geladen, true)
						.removeClass(FadingImages_IndicatorLoadingClass);				
				}
			}
			else
			{
				if (alleBilderGeladen)
				{
					alleBilderGeladen = false;
				}
			}
		}
		if (!alleBilderGeladen)
		{
			window.setTimeout("FadingImages_imageLoadingState()", FadingImages_TimeToRefreshImageLoaded);
		}
	}
		
	function FadingImages_showImage(bRecursive, bSpeedSlow)
	{
		CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_IMAGE_CHANGE_BEFORE);
		try{window.clearTimeout(CONST_FadingImages_Timeout);}catch(exc){}
		
		var Elemente = CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Bilder);
		var AktivIndex = parseInt(CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active), 10);
		var AktivIndexAlt = parseInt(CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_OldActive), 10);	
		
		if (AktivIndex == Elemente.length)
		{
			CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_IMAGE_LOOP_END_REACHED);
			AktivIndex = 0;
			CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active, AktivIndex+1);			
		}
		
		if (!FadingImages_ImageLoaded(AktivIndex))
		{
			CONST_FadingImages_VersuchRefreshCounter++;
			if (CONST_FadingImages_VersuchRefreshCounter >= FadingImages_MaxVersucheImageLoadRefresh)
			{
				CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active, AktivIndex+1);
				CONST_FadingImages_VersuchRefreshCounter = 0;
				FadingImages_showImage(bRecursive, bSpeedSlow);
			}
			else
			{
				CONST_FadingImages_Timeout = window.setTimeout("FadingImages_showImage(" + bRecursive + ", " + bSpeedSlow + ");", FadingImages_TimeToRefreshImageLoaded);
			}
		}
		else
		{
			CONST_FadingImages_VersuchRefreshCounter = 0;
			
			if (Elemente.length > 1)
			{
				Elemente.each(function(aI)
				{
					if (aI == AktivIndex)
					{
						jQuery(this).css({"display":"block", "opacity":0.0, "z-index": FadingImages_ZIndexBegin+1})
						.dequeue();
						if (bSpeedSlow)
						{
							jQuery(this).animate({ "opacity": 1.0 }, FadingImages_EinblendZeit, function()
							{
								CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_IMAGE_CHANGE_AFTER);
							});
						}
						else
						{
							jQuery(this).animate({ "opacity": 1.0 }, FadingImages_EinblendZeitIndecator, function()
							{
								CONST_FadingImages_FadingImagesContainer.trigger(CONST_EVENT_ANMGALLERY_IMAGE_CHANGE_AFTER);
							});
						}
					}
					else if(aI == AktivIndexAlt)
					{
						jQuery(this).css({"z-index": FadingImages_ZIndexBegin+0});
						if (!bSpeedSlow)
						{
							jQuery(this).css({"opacity": 1.0});
						}
					}
					else
					{
						jQuery(this).css({"z-index": 0, "display":"none"});
					}
				});
				
				FadingImages_get("." + FadingImages_IndicatorContainerClass + " ." + FadingImages_IndicatorClass + "." + FadingImages_IndicatorAktivClass).removeClass(FadingImages_IndicatorAktivClass);
				jQuery(FadingImages_get("." + FadingImages_IndicatorContainerClass + " ." + FadingImages_IndicatorClass)[AktivIndex]).addClass(FadingImages_IndicatorAktivClass);
				
				CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_OldActive, AktivIndex);
				AktivIndex++;
				CONST_FadingImages_FadingImagesContainer.data(CONST_FadingImages_Active, AktivIndex);
				
				FadingImages_generatePictureInfo();
				
				if (bRecursive)
				{
					CONST_FadingImages_TimeoutFunction = window.setTimeout("FadingImages_showImage(true, true)", FadingImages_EinblendZeit + FadingImages_EingeblendetZeit);	
				}
			}
		}
	}
	
	function FadingImages_ImageLoaded(index)
	{
		var ausgabe = FadingImages_ImagesLoaded(":eq(" + index + ")");
		if (ausgabe.length > 0)
		{
			return(ausgabe[0]);
		}
		else
		{
			return(false);
		}
	}
	
	function FadingImages_ImagesLoaded(selector) 
	{
		var jImages = CONST_FadingImages_FadingImagesContainer.find("img." + FadingImages_ImagesClass + selector);
		var ausgabe = new Array(jImages.length);
		for (var aI = 0; aI < jImages.length; aI++)
		{
			var curImage = jImages[aI];
			ausgabe[aI] = true;
			if (!curImage.complete) 
			{
				ausgabe[aI] = false;
			}
			if (typeof curImage.naturalWidth != "undefined" && curImage.naturalWidth == 0) 
			{
				ausgabe[aI] = false;
			}
		}
		return(ausgabe);
	}
	
	
	function FadingImages_start(id)
	{
		CONST_FadingImages_FadingImagesContainer = jQuery("#" + id);
		FadingImages_init();
	}
	
 
	var FadingImages_EinblendZeit = 1750; 				//Wie lange die Bilder zum Einblenden benoetigen
	var FadingImages_EinblendZeitIndecator = 250;		//Wie lange die Bilder zum Einblenden brauchen, wenn mit dem Cursor ein Indecator beruehrt wird
	var FadingImages_EingeblendetZeit = 4000; 			//Wie lange die Bilder angezeigt werden bevor das naechste Bild eingeblendet wird
	var FadingImages_CounterInIndekatoren = true;
	
	jQuery(document).ready(function()
	{
		/*
		**	Damit die Bilder der Headeranimation "Fadingimages" erst nachgeladen werden
		**	Die Quelle der Bilder wird in der Pflege erst nur im "longdesc"-Attribut angegeben 
		**	(in den alten Versonen auch im "rel"-Attribut, dies ist jedoch nicht XHTML-Konform)
		**	Der Wert aus dem "longdesc"-Attribut wird in diesem JS in das "src"-Attribut geschrieben
		*/
		var fadingPicContainerId = "branding";
		
		
		var fadeImages = jQuery("#" + fadingPicContainerId + " img.fadingpic");
		fadeImages.each(function(i)
		{
			var cur_fadeImage = jQuery(this);
			if(cur_fadeImage.attr("longdesc") != null && cur_fadeImage.attr("longdesc") != undefined && cur_fadeImage.attr("longdesc") != "")
			{
				cur_fadeImage.attr("src", cur_fadeImage.attr("longdesc")).css({"display" : "none"}); 
			}
		});
		/*Starten der ganzen geschichte*/
		FadingImages_start(fadingPicContainerId);
	});
