﻿if(typeof dode !== 'undefined') {
	dode.mainfunc.panoramaSlider = {
		daten : [],
		init : function () {
			var dataSetQuantity = 3; // Array Schrittweite bis zu einem neuen Objekt
			if (!(dode.mainfunc.panoramaSlider.daten.length%dataSetQuantity) === 0) { return false; }
			if (!document.getElementById("kopfPanorama")) { return false; }
			var isAutoSlide = true;
			var switchDiahow = null;
			var scrollDirectionLeft = true;
			var isStartDiashow = false;
			var bildDiashowStopSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_b_ds_stop.png";
			var bildDiashowStartSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_bb_re_aktiv.png";
			var bildDiashowStopText = dode.pagevar.lang.bildDiashowStop;
			var bildDiashowStartText = dode.pagevar.lang.bildDiashowStart;			
			var maxSlidePics = 20; // Abbruchwert
			var containerSlider = document.getElementById("kopfPanorama");
			var bildVorAktivSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_bb_re_aktiv~1.png";
			var bildVorAktivAlt = dode.pagevar.lang.bildVorAktiv;
			var bildVorInaktivSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_bb_re_inaktiv~1.png";
			var bildVorInaktivAlt = dode.pagevar.lang.bildVorInAktiv;
			var bildZurueckAktivSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_bb_li_aktiv~1.png";
			var bildZurueckAktivAlt = dode.pagevar.lang.bildZurueckAktiv;
			var bildZurueckInaktivSrc = "/media/system/seitenelemente/iconsbuttons/panorama_blaetterbuttons/panorama_bb_li_inaktipanorama_bb_li_inaktiv.png";
			var bildZurueckInaktivAlt = dode.pagevar.lang.bildZurueckInAktiv;
			var bildTextEndScroll = dode.pagevar.lang.bildNichtVorhanden;
			var actualPicture = null;
			var scrollIdLeft = "psLeft";
			var scrollIdRight = "psRight";
			var pictureContainerObj = [];
			var slideThisImg = null;
			var isSlideFinished = 1;
			var actualPictureId = 0;
			var isHandlerLeftSet = 0;
			var isHandlerRightSet = 0;
			var maxPosition = 785;
			var startOffset = 20;
			var speedTimer = 40;
			var speedTimerScroll = 7000;
			var step = 4;
			var timerAktiv = null;
			var timerScroll = null;
			var imgLoadTimer = null;
			var actualPosition = 20;
			var actualStep = step;
			var faktorStepVsPosition = 50;
			var firstBoxElement = document.getElementById("absenderKennung");
			if (!firstBoxElement) {
				firstBoxElement = containerSlider.getElementsByTagName("IMG")[0];
			}

			for (var i = 0; i < dode.mainfunc.panoramaSlider.daten.length/dataSetQuantity; i++) {
				pictureContainerObj[i] = {};
				pictureContainerObj[i].imgSrc = dode.mainfunc.panoramaSlider.daten[i * dataSetQuantity];
				pictureContainerObj[i].imgAlt = dode.mainfunc.panoramaSlider.daten[i * dataSetQuantity + 1];
				pictureContainerObj[i].imgBu = dode.mainfunc.panoramaSlider.daten[i * dataSetQuantity + 2];
				pictureContainerObj[i].imgObj = null;
			}

			var buOrg = null;
			var addBildAnzahlInfo = document.createTextNode(dode.pagevar.lang.bild+" 1/"+(pictureContainerObj.length+1)+" ");
			for (var i = 0; i < containerSlider.getElementsByTagName("DIV").length; i++) {
				if (dode.css.hasCssClass(containerSlider.getElementsByTagName("DIV")[i],"bildQuelle")) {
					containerSlider.getElementsByTagName("DIV")[i].id ="buPanorama";
					var newSpan = document.createElement("SPAN");
					newSpan.appendChild(addBildAnzahlInfo);
					document.getElementById("buPanorama").insertBefore(newSpan,document.getElementById("buPanorama").firstChild);
					buOrg = containerSlider.getElementsByTagName("DIV")[i].cloneNode(true);
				}
			}
			
			if (!buOrg) {
				var hrElement = document.createElement("HR");
				dode.css.addCssClass(hrElement,"hide");
				var pElement = document.createElement("P");
				var pText = document.createTextNode("Bildunterschrift aktuell angezeigtes Panoramabild:");
				var buContainer = document.createElement("DIV");
				buContainer.id = "buPanorama";
				dode.css.addCssClass(buContainer,"bildQuelle");
				dode.css.addCssClass(pElement,"hide");
				containerSlider.appendChild(hrElement);
				containerSlider.appendChild(pElement);
				pElement.appendChild(pText);
				containerSlider.appendChild(buContainer);
				var newSpan = document.createElement("SPAN");
				newSpan.appendChild(addBildAnzahlInfo);
				document.getElementById("buPanorama").appendChild(newSpan);
				buOrg = containerSlider.getElementsByTagName("DIV")[i].cloneNode(true);
				var hrElement2 = hrElement.cloneNode(true);
				containerSlider.appendChild(hrElement2);
			}			

			var scrollPicLeft = document.createElement("IMG");
			var scrollPicRight = document.createElement("IMG");
			scrollPicLeft.id = scrollIdLeft;
			scrollPicLeft.src = bildZurueckInaktivSrc;
			scrollPicLeft.alt = bildZurueckInaktivAlt;
			scrollPicLeft.title = bildZurueckInaktivAlt;
			scrollPicRight.id = scrollIdRight;
			scrollPicRight.src = bildVorInaktivSrc;
			scrollPicRight.alt = bildVorInaktivAlt;
			scrollPicRight.title = bildVorInaktivAlt;
			dode.css.addCssClass(scrollPicLeft,"buttonLinks");
			dode.css.addCssClass(scrollPicRight,"buttonRechts");
			containerSlider.appendChild(scrollPicLeft);
			containerSlider.appendChild(scrollPicRight);

			var stepArray = [];
			var alphaArray1 = []; 
			var alphaArray2 = []; 
			stepArray[0] = maxPosition;
			while (actualPosition < (maxPosition - 0.5) && actualStep < 90) {
				faktor = 180/Math.PI;
				faktor = 1/faktor;
				actualStep = actualStep + (step + (faktorStepVsPosition / actualStep)); // Sinus mit Korrektur
				rad = faktor * actualStep;
				actualPosition = Math.sin(rad) * maxPosition;
				var outPosition = maxPosition - actualPosition;
				stepArray[stepArray.length] = outPosition;
			}
			stepArray[stepArray.length] = 0;
			var count = 0;
			var stepFaktor = 1/stepArray.length;
			var fadeFaktor = 450;
			for (var i = 0; i < stepArray.length; i++) {
				count = count + stepFaktor;
				if (stepArray[i] < fadeFaktor) {
					if (count >= 1) {
						alphaArray2[i] = 1;
						alphaArray1[i] = 100;
					} else {
						alphaArray2[i] = count;
						alphaArray1[i] = (count * 100);
					}
					
				} else {
					alphaArray1[i] = 0;
					alphaArray2[i] = 0;
				}
			}

			var imgLoadFehler = function (e) {
				scrollPicRight.alt = dode.pagevar.lang.bildLadeFehler;
				scrollPicRight.title = dode.pagevar.lang.bildLadeFehler;
			}
			
			var isImageLoaded = function () {
				if (actualPictureId === ((dode.mainfunc.panoramaSlider.daten.length/dataSetQuantity)) ) { return true; }
				var loadPictureId = actualPictureId;
				if (!pictureContainerObj[loadPictureId].imgObj) {
					actualPicture = new Image();
					dode.newevent.addEvent(actualPicture,"load",saveImg);
					dode.newevent.addEvent(actualPicture,"error",imgLoadFehler);
					var startImgLoad = function () {
						actualPicture.src = pictureContainerObj[loadPictureId].imgSrc;
						actualPicture.alt = pictureContainerObj[loadPictureId].imgAlt;
						actualPicture.title = pictureContainerObj[loadPictureId].imgAlt;
						window.clearTimeout(imgLoadTimer);
						imgLoadTimer = null;
						return false;
					}
					var imgLoadTimer = window.setTimeout(function(){startImgLoad();},200);
					return false;
				} else {
					return true;
				}
			}
			
			var saveImg = function(e){
				dode.newevent.removeEvent(this,"load",saveImg);
				pictureContainerObj[actualPictureId].imgObj = this;
				pictureContainerObj[actualPictureId].imgObj.id = "sliderPic"+actualPictureId;
				containerSlider.insertBefore(pictureContainerObj[actualPictureId].imgObj,firstBoxElement);
				document.getElementById("sliderPic"+actualPictureId).style.marginLeft = maxPosition + startOffset + "px";
				dode.css.addCssClass(document.getElementById("sliderPic"+actualPictureId),"sliderImg");
				if (pictureContainerObj[actualPictureId].imgBu) {
					var newElement = document.createElement("P");
					dode.css.addCssClass(newElement,"hide");
					dode.util.stringToDom(newElement,pictureContainerObj[actualPictureId].imgBu);
					containerSlider.insertBefore(newElement,firstBoxElement);
				} else {
					var newElement = document.createElement("P");
					dode.css.addCssClass(newElement,"hide");
					containerSlider.insertBefore(newElement,firstBoxElement);
					var newElementText = document.createTextNode(dode.pagevar.lang.bildKeineBu);
					newElement.appendChild(newElementText);
				}
				setButtonRight();
				if (isAutoSlide) {
					startScroll();
				}
				return true;
			}

			var setBu = function (picId) {
				if (document.getElementById("buPanorama")) {
					dode.util.deleteAllNodes(document.getElementById("buPanorama"));
				}
				if (picId < 0) {
					if (buOrg) {
						containerSlider.replaceChild(buOrg,document.getElementById("buPanorama"));
						buOrg = document.getElementById("buPanorama").cloneNode(true);
					}
					return false;
				}
				if (pictureContainerObj[picId].imgBu) {
					var buString = pictureContainerObj[picId].imgBu
					var buString = buString.replace(/<span>/, "<span>"+dode.pagevar.lang.bild+" "+(actualPictureId+1)+"/"+(pictureContainerObj.length+1)+" ");
					dode.util.stringToDom(document.getElementById("buPanorama"),buString);
				} else {
					dode.util.stringToDom(document.getElementById("buPanorama"),"<span>"+dode.pagevar.lang.bild+" "+(actualPictureId+1)+"/"+(pictureContainerObj.length+1)+"<\/span>");
				}
				return true;
			}
			
			var scrollLeft = function (e) {
				if (e) {
					stopScroll();
				}
				if (isHandlerRightSet === 1) {
					unsetHandlerButtonRight();
				}
				if (isHandlerLeftSet === 1) {
					unsetHandlerButtonLeft();
				}
				isSlideFinished = 0;
				slideThisImg = pictureContainerObj[actualPictureId].imgObj;
				dode.css.deleteCssClass(scrollPicRight,"pointer");
				if (slideThisImg) {
					var actualStep = 0;
					var move2 = function () {
						slideThisImg.style.marginLeft = stepArray[actualStep]+"px";
						slideThisImg.style.MozOpacity = alphaArray2[actualStep];
						slideThisImg.style.KHTMLOpacity = alphaArray2[actualStep];
						slideThisImg.style.WEBKITOpacity = alphaArray2[actualStep];
						slideThisImg.style.opacity = alphaArray2[actualStep];
						slideThisImg.style.filter = "alpha(opacity="+alphaArray1[actualStep]+")";
						if (actualStep === stepArray.length - 1) {
							isSlideFinished = 1;
							actualPictureId++;
							setButtonLeft();
							setButtonRight();
							window.clearInterval(timerAktiv);
							timerAktiv = null;
							setBu(actualPictureId - 1);
						}
						actualStep++;
					}
					if (!timerAktiv) {
						timerAktiv = window.setInterval(function(){move2();},speedTimer);
					}
					return true;
				} else {
					return false;
				}
			}
			
			var scrollRight = function (e) {
				if (e) {
					stopScroll();
				}
				
				if (isHandlerRightSet === 1) {
					unsetHandlerButtonRight();
				}
				if (isHandlerLeftSet === 1) {
					unsetHandlerButtonLeft();
				}
				isSlideFinished = 0;
				slideThisImg = pictureContainerObj[actualPictureId-1].imgObj;
				dode.css.deleteCssClass(scrollPicLeft,"pointer");
				if (slideThisImg) {
					var actualStep = stepArray.length - 1;
					var move2 = function () {
						slideThisImg.style.marginLeft = stepArray[actualStep]+"px";
						slideThisImg.style.MozOpacity = alphaArray2[actualStep];
						slideThisImg.style.KHTMLOpacity = alphaArray2[actualStep];
						slideThisImg.style.WEBKITOpacity = alphaArray2[actualStep];
						slideThisImg.style.opacity = alphaArray2[actualStep];
						slideThisImg.style.filter = "alpha(opacity="+alphaArray1[actualStep]+")";
						if (actualStep === 0) {
							isSlideFinished = 1;
							actualPictureId--;
							setButtonLeft();
							setButtonRight();
							window.clearInterval(timerAktiv);
							timerAktiv = null;
							setBu(actualPictureId - 1);
						}
						actualStep--;
					}
					if (!timerAktiv) {
						timerAktiv = window.setInterval(function(){move2();},speedTimer);
					}
					return true;
				} else {
					return false;
				}
			}
			
			var setHandlerButtonLeft = function () {
				dode.newevent.addEvent(scrollPicLeft,"click",scrollRight);
				isHandlerLeftSet = 1;
				dode.css.addCssClass(scrollPicLeft,"pointer");
				scrollPicLeft.src = bildZurueckAktivSrc;
				scrollPicLeft.alt = bildZurueckAktivAlt;
				scrollPicLeft.title = bildZurueckAktivAlt;
				return true;
			}
			
			var setHandlerButtonRight = function () {
				dode.newevent.addEvent(scrollPicRight,"click",scrollLeft);
				isHandlerRightSet = 1;
				dode.css.addCssClass(scrollPicRight,"pointer");
				scrollPicRight.src = bildVorAktivSrc;
				scrollPicRight.alt = bildVorAktivAlt;
				scrollPicRight.title = bildVorAktivAlt;
				return true;
			}
			
			var unsetHandlerButtonLeft = function () {
				dode.newevent.removeEvent(scrollPicLeft,"click",scrollRight);
				isHandlerLeftSet = 0;
				dode.css.deleteCssClass(scrollPicLeft,"pointer");
				scrollPicLeft.src = bildZurueckInaktivSrc;
				if (actualPictureId === pictureContainerObj.length) {
					scrollPicLeft.alt = bildTextEndScroll;
					scrollPicLeft.title = bildTextEndScroll;
				} else {
					scrollPicLeft.alt = bildZurueckInaktivAlt;
					scrollPicLeft.title = bildZurueckInaktivAlt;
				}
				return true;
			}
			
			var unsetHandlerButtonRight = function () {
				dode.newevent.removeEvent(scrollPicRight,"click",scrollLeft);
				isHandlerRightSet = 0;
				dode.css.deleteCssClass(scrollPicRight,"pointer");
				scrollPicRight.src = bildVorInaktivSrc;
				if (actualPictureId === pictureContainerObj.length) {
					scrollPicRight.alt = bildTextEndScroll;
					scrollPicRight.title = bildTextEndScroll;
				} else {
					scrollPicRight.alt = bildVorInaktivAlt;
					scrollPicRight.title = bildVorInaktivAlt;
				}
				return true;
			}
			
			var setButtonLeft = function () {
				if (actualPictureId > 0 && isSlideFinished === 1 && isHandlerLeftSet === 0) {
					setHandlerButtonLeft();
					return true;
				} else {
					unsetHandlerButtonLeft();
					return false;
				}
			}
			
			var setButtonRight = function () {
				if (actualPictureId < pictureContainerObj.length && isSlideFinished === 1 && isImageLoaded() && isHandlerRightSet === 0) {
					setHandlerButtonRight();
					return true;
				} else {
					unsetHandlerButtonRight();
					return false;
				}
			}
			
			var startScroll = function () {
				var picCount = 0;
				var lastPic = 0;
				var moveAutoScroll = function () {
					if (scrollDirectionLeft === true) {
						if (actualPictureId < pictureContainerObj.length) {
							scrollLeft();
						} else {
							scrollDirectionLeft = false;
							scrollRight();
						}
					} else {
						if (actualPictureId > 0) {
							scrollRight();
						} else {
							scrollDirectionLeft = true;
							scrollLeft();
						}
					}
					if (lastPic != actualPictureId) {
						lastPic = actualPictureId;
						picCount++;
					}
					if (picCount === maxSlidePics) {
						switchScroll();
						picCount = 0;
						lastPic = 0;
					}
				}
				if (!timerScroll) {
					if (isStartDiashow === true) {
						moveAutoScroll();
					}
					timerScroll = window.setInterval(function(){moveAutoScroll();},speedTimerScroll);
				}
				isAutoSlide = true;
				setSwitchButton();
				return true;
			}
			
			var stopScroll = function () {
				window.clearInterval(timerScroll);
				timerScroll = null;
				isAutoSlide = false;
				setSwitchButton();
				return true;
			}
			
			var setSwitchButton = function () {
				var idImgObj = "switchDiashow";
				if (!document.getElementById(idImgObj)) {
					switchDiahow = document.createElement("IMG");
					switchDiahow.id = "switchDiashow";
					dode.css.addCssClass(switchDiahow,"buttonPanoramaDiashow");
					dode.css.addCssClass(switchDiahow,"pointer");
					containerSlider.appendChild(switchDiahow);
					dode.newevent.addEvent(switchDiahow,"click",switchScroll);					
				}
				if (isAutoSlide) {
					switchDiahow.src = bildDiashowStopSrc;
					switchDiahow.alt = bildDiashowStopText;
					switchDiahow.title = bildDiashowStopText;
				} else {
					switchDiahow.src = bildDiashowStartSrc;
					switchDiahow.alt = bildDiashowStartText;
					switchDiahow.title = bildDiashowStartText;
				}
				return true;
			}
			
			var switchScroll = function (e) {
				isStartDiashow = true;
				if (isAutoSlide) {
					stopScroll();
				} else {
					startScroll();
				}
				setSwitchButton();
				return true;
			}
			
			setButtonLeft();
			setButtonRight();
			setSwitchButton();
		}
	}
	dode.domLoad.registerOnLoad(dode.mainfunc.panoramaSlider.init);
}
