/******************************************************************************
 ** AJAX-Javascripts, Galerie-Javascripts, Editier-Javascripts
 ** Programmversion 1.3c vom 08.02.2011
 ** -> zu Testen: L4-Navi mit AJAX
 ** -> zu Optimieren: Rahmen um Bild
 *****************************************************************************/

/******************************************************************************
 ** Funktion für XMLHttpRequest.
 ** Übergabeparameter: String Sprache, String Menüpunkt, String Elternmenüpkt
 *****************************************************************************/
function getDataFromPHP (sprache, var1, var2, var3, var4) {
	document.getElementById('page_content').innerHTML = '<img src="/bilder/load.gif" alt="Warteanimation"/>';
	//Erstellen des Requests
	var reqMenu = null;
	var reqContent = null;
	var DataURL = null;
	
	try { reqMenu    = new XMLHttpRequest(); 
		  reqContent = new XMLHttpRequest(); }
	catch (ms) {
		try { reqMenu    = new ActiveXObject("Msxml2.XMLHTTP");
			  reqContent = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (nonms) {
			try { reqMenu    = new ActiveXObject("Microsoft.XMLHTTP");
				  reqContent = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (failed) { reqMenu = null; 
							 reqContent = null; }
		}
	}

	if (reqMenu == null)
		alert("Error creating request object!");
	
	// URL definieren...
	var abschnittTest = document.getElementById('auswahlAbschnitt');
	DataURL = "ajaxResponse.php?";
	if (abschnittTest != undefined) {
		if (var4 != undefined && var3 != undefined && var2 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&abschnitt" + Base64.encode(var1) + "&seite=" + Base64.encode(var4) + "&eltern=" + Base64.encode(var3) + "&grosseltern=" + Base64.encode(var2);
		} else if (var3 != undefined && var2 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&abschnitt" + Base64.encode(var1) + "&seite=" + Base64.encode(var3) + "&eltern=" + Base64.encode(var2);
		} else if (var2 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&abschnitt" + Base64.encode(var1) + "&seite=" + Base64.encode(var2);
		} else if (sprache != undefined) {
			DataURL = DataURL + "sprache=" + sprache;
		}
	} else {
		if (var3 != undefined && var2 != undefined && var1 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&seite=" + Base64.encode(var3) + "&eltern=" + Base64.encode(var2) + "&grosseltern=" + Base64.encode(var1);
		} else if (var2 != undefined && var1 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&seite=" + Base64.encode(var2) + "&eltern=" + Base64.encode(var1);
		} else if (var1 != undefined) {
			DataURL = DataURL + "sprache=" + sprache + "&seite=" + Base64.encode(var1);
		} else if (sprache != undefined) {
			DataURL = DataURL + "sprache=" + sprache;
		}
	}
	// Requests asynchron absetzten...
	reqMenu.open("GET", DataURL + '&part=menu', true);
	reqContent.open("GET", DataURL, true);

	// Antwort mit Menü erhalten...
	reqMenu.onreadystatechange = function () {
		switch (reqMenu.readyState) {
			case 4:
				if (reqMenu.status != 200) {
					alert("Fehler:" + reqMenu.status + "<br/>" + reqMenu.statusText); 
				} else {  
					// Schreibe die Antwort in den Div-Container mit der Id left_col 
					document.getElementById('left_col').innerHTML = reqMenu.responseText;
				}
				break;
			default:
				return false;
				break;
		}
	};
	reqMenu.setRequestHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8');
	reqMenu.send(null);

	// Antwort mit Content erhalten...
	reqContent.onreadystatechange = function () {
		switch (reqContent.readyState) {
			case 4:
				if (reqContent.status != 200) {
					alert("Fehler:" + reqContent.status + "<br/>" + reqContent.statusText); 
				} else {   
					// Schreibe die Antwort in den Div-Container mit der Id page_content 
					// Eventuell vorhandenes Javascrip ausführen...
					var pageContentMain = reqContent.responseText.split("//Javascript:");
					document.getElementById('page_content').innerHTML = pageContentMain[0];
					if (pageContentMain[1] != null && pageContentMain[1] != undefined) {
						eval(pageContentMain[1]);
					}
				}
				break;
			default:
				return false;
				break;
		}
	};
	reqContent.setRequestHeader('content-type', 'application/x-www-form-urlencoded; charset=utf-8');
	reqContent.send(null);
}
/******************************************************************************
 ** Funktion zur Navigation mittels Übergabeparametern aus der URL
 ** Übergabeparameter: String sprache
 *****************************************************************************/
function winLocate (sprache) {
	var myStringURL = window.location.toString();
	var mySplitResultURL = myStringURL.split("#");
	if (mySplitResultURL[1] != undefined) {
		var mySplitHash = mySplitResultURL[1].split("/");
		if (mySplitHash != undefined) {
			getDataFromPHP(sprache, mySplitHash[0], mySplitHash[1], mySplitHash[2], mySplitHash[3])
		}
	} else {
		getDataFromPHP();
	}
}

/******************************************************************************
 * Variablen für Bildergalerien
 *   var timerObj -> Für onMouseOver-Effekt beim Bildwechsel
 *   var presentGallery -> Spart Übergabeparameter in allen Wechselfunktionen
 *   var loadingImage -> Erstellt Bildobjekt als Übergang beim Bildwechsel
 *   var isGallery -> Schalter für Tastatursteuerung der Galerien
 *****************************************************************************/
var timerObj;
var presentGallery = null;
var isGallery = false;
var loadingImage = new Image ();
loadingImage.src = '/bilder/circleball.gif';
/******************************************************************************
 ** Funktion zum Anzeigen einer Bildergalerie und Speichern der Id.
 *    Es wird zusätzlich noch die Tastatursteuerung aktiviert und überprüft,
 *    ob eine Textebene oder eine Galerieebene geöffnet wurde.
 ** Übergabeparameter: String id
 *****************************************************************************/
function popOpen (id) {
	document.getElementById(id).style.display = 'block';
	presentGallery = id;
	document.onkeydown = keyNavigate;
	var e = document.getElementById(id + 0);
	if (e != null) {
		isGallery = true;
	}
}
/******************************************************************************
 ** Funktion zum Verstecken einer Bildergalerie und Zurücksetzten der Variablen.
 *****************************************************************************/
function popClose () {
	document.getElementById(presentGallery).style.display = 'none';
	presentGallery = null;
	isGallery = false;
	document.onkeydown = null;
}
/******************************************************************************
 ** Funktion zum Ändern eines Galeriebildes.
 *    Es wird als Übergang eine MotionGIF angezeigt und das Padding zur 
 *    Zentrierung des neuen Bildes angepasst.
 ** Übergabeparameter: int Padding-Left/Right, String Bildname
 *****************************************************************************/
var activeThumb;
function changeImage (px, img) {
	var el = document.getElementById('galleryImage_' + presentGallery).getElementsByTagName('img')[0];
	el.src = loadingImage.src;
	el.style.padding = '0 ' + px + 'px';
	el.src = img;
	document.getElementById('thumb_'+img).style.border = "2px solid #70B0FF";
	if (activeThumb) {
		document.getElementById('thumb_'+activeThumb).style.border = "0px";
	}
	activeThumb = img;
}
/******************************************************************************
 ** Funktion Setzen des Timers für onMouseOver-Bildwechsel.
 ** Übergabeparameter: Object this
 *****************************************************************************/
function setTimer (self) {
	var ev = self.onclick;
	window.clearTimeout(timerObj);
	timerObj = window.setTimeout(ev, 400); 
}
/******************************************************************************
 ** Funktion zum Tauschen von Ebenen mit Vorschaubildern.
 *    Beim Tausch wird das jeweils erste Bild der neuen Ebene als neues
 *    Hauptbild vergrößert.
 ** Übergabeparameter: int IdEbeneAktuell, int IdEbeneSpäter
 *****************************************************************************/
function changeThumbs (from, to) {
	var teilbaum1 = document.getElementById(presentGallery + from);
	var teilbaum2 = document.getElementById(presentGallery + to);
	teilbaum1.style.display = "none";
	teilbaum2.style.display = "block";
	teilbaum2.getElementsByTagName('a')[0].onclick();
}
/******************************************************************************
 ** Funktion zum Wechseln des Hauptbildes beim Klicken.
 *    Dabei wird überprüft, ob das jeweils nächste Bild zum aktuellen die 
 *    Markierung "Pfeil" besitzt, sprich Ende der aktuellen Vorschauebene, 
 *    dann wird der Pfeil "angeklickt", Ebenenwechsel, nächstes Bild. Weiterhin
 *    kann das darauffolgende Bild das Hauptbild sein, in diesem Fall ist das 
 *    Ende der Galerie erreicht und es wird zur ersten Vorschauebene 
 *    gewechselt. Der Bilderkreis wird geschlossen...
 *****************************************************************************/
function nextPic () {
	var images = document.getElementById(presentGallery).getElementsByTagName('img');
	var self = document.getElementById('galleryImage_' + presentGallery).getElementsByTagName('img')[0];
	for (var i = 0; i < images.length; i++) {
		var imageSrc = self.src.split('/');
		imageSrc = Url.decode(imageSrc[imageSrc.length -1]);
		if (imageSrc == images[i].alt) {
			if (images[i + 1].alt == "Pfeil") {
				images[i + 1].onclick();
				break;
			} else if (images[i + 1].alt == "Galerie Foto") {
				var thumbsNr = images[i].parentNode.parentNode.id.substring(images[i].parentNode.parentNode.id.length - 1);
				changeThumbs(thumbsNr, 0);
				break;
			} else {
				images[i + 1].parentNode.onclick();
				break;
			}
		}
	}
}
/******************************************************************************
 ** Funktion zum Wechseln des Hauptbildes.
 *    Mechanik analog zur Funktion nextPic()
 *    Zusätzlich muss bei Erreichen eines Pfeils und dem damit einhergehenden
 *    Ebenenwechsel noch dafür gesorgt werden, dass nicht das erste Bilder der
 *    neuen Ebene angezeigt wird, sondern das Letzte.
 *    Das Selbe gilt für das erste Bild der ersten Ebene. Hier wäre das vorher-
 *    gehende Bild das letzte Bild in der Galerie, sprich, die letzte Bilder-
 *    ebene muss gefunden werden und das letzte Bild derselben.
 *****************************************************************************/
function prevPic () {
	var images = document.getElementById(presentGallery).getElementsByTagName('img');
	var self = document.getElementById('galleryImage_' + presentGallery).getElementsByTagName('img')[0];
	for (var i = 0; i < images.length; i++) {
		var imageSrc = self.src.split('/');
		imageSrc = Url.decode(imageSrc[imageSrc.length - 1]);
		if (imageSrc == images[i].alt) {
			if (images[i - 1].alt == "Pfeil") {
				var currThumbsNr = images[i].parentNode.parentNode.id.substring(images[i].parentNode.parentNode.id.length - 1);
				var prevThumbsId = presentGallery + (currThumbsNr - 1);
				var prevPicLink = document.getElementById(prevThumbsId).getElementsByTagName('a');
				prevPicLink = prevPicLink[prevPicLink.length - 1];
				images[i - 1].onclick();
				prevPicLink.onclick();
				break;
			} else if (images[i - 1].alt == "schliessen") {
				var divs = document.getElementById(presentGallery).getElementsByTagName('div');
				var lastThumbsId = divs[divs.length - 2].id;
				var thumbsNr = lastThumbsId.substring(lastThumbsId.length - 1);
				var lastPicLink = document.getElementById(lastThumbsId).getElementsByTagName('a');
				lastPicLink = lastPicLink[lastPicLink.length - 1];
				changeThumbs(0, thumbsNr);
				lastPicLink.onclick();
				break;
			} else {
				images[i - 1].parentNode.onclick();
				break;
			}
		}
	}
}
/******************************************************************************
 ** Funktion zur Tastatursteuerung der Galerien
 ** Übergabeparameter: event ev
 *    27 -> Esc; 37 -> CursorLinks; 38 -> CuOben 39 -> CuRechts; 40 -> CuUnten
 *****************************************************************************/
function keyNavigate (ev) {
	if (presentGallery != null) {
		if (!ev)
			ev = window.event;
		if (ev.keyCode == 27) {
			popClose();
		} else if ((ev.keyCode == 37 || ev.keyCode == 38) && isGallery) {
			prevPic();
		} else if ((ev.keyCode == 39 || ev.keyCode == 40) && isGallery) {
			nextPic();
		}
	}
}
/******************************************************************************
 ** Funktion zum Ändern der Hintergrundfarbe der Tabellenzeile bei onMouseOver
 ** Übergabeparameter: int id
 *****************************************************************************/
function addClass (id) {
	var element = document.getElementById(id);
	element.style.backgroundColor  = "#C3FDB8";
}
/******************************************************************************
 ** Funktion zum Ändern der Hintergrundfarbe der Tabellenzeile bei onMouseOver
 ** Übergabeparameter: int id
 *****************************************************************************/
function deleteClass (id) {
	var element = document.getElementById(id);
	element.style.backgroundColor  = "";
}

/******************************************************************************
 ** Funktion zum codierten Übertragen der Inhalten nach dem Editieren
 *****************************************************************************/
function encodeXML () {
	var bereich = document.formular.bereich.value;
	if (bereich == "xmlÄndern") {
		var inhalt = document.formular.xmldaten.value;
		document.formular.xmldaten.value = Base64.encode(inhalt);
	} else if (bereich == "inhaltÄndern" || bereich == "neuHinzufügen") {
		var inhalt = document.formular.inhalt.value;
		document.formular.inhalt.value = Base64.encode(inhalt);
	} else if (bereich == "kopfundfuß") {
		var inhalt = document.formular.kopf.value;
		document.formular.kopf.value = Base64.encode(inhalt);
		inhalt = document.formular.fuss.value;
		document.formular.fuss.value = Base64.encode(inhalt);
	}
	return true;
}
/******************************************************************************
 ** Funktion zum Decodieren der Inhalte vor dem Editieren
 *****************************************************************************/
function decodeXML () {
	if (document.formular.bereich != null) {
		var bereich = document.formular.bereich.value;
		if (bereich == "xmlÄndern") {
			var inhalt = document.formular.xmldaten.value;
			document.formular.xmldaten.value = Base64.decode(inhalt);
		} else if (bereich == "inhaltÄndern" || bereich == "neuHinzufügen") {
			var inhalt = document.formular.inhalt.value;
			document.formular.inhalt.value = Base64.decode(inhalt);
		} else if (bereich == "kopfundfuß") {
			var inhalt = document.formular.kopf.value;
			document.formular.kopf.value = Base64.decode(inhalt);
			inhalt = document.formular.fuss.value;
			document.formular.fuss.value = Base64.decode(inhalt);
		}
	}
	return true;
}

/******************************************************************************
v1.3
Anpassen auf 3-stufige Linke Navigation
Änderungen für mod_rewrite
Rahmenbildung um aktives Bildelement
v1.2
Tastatursteuerung Bildergalerie (Cursor Links|Unten/Rechts|Oben), Escape
Kleinere Anpassungen
v1.1.1
Fehlerbehebung für Galerie Firefox/Opera
v1.1
Aufnahme der Javascripts für Bildergalerien
Aufnahme der Javascripts für (De-)Codierung der Inhaltsteile der Editierseite.
v1.0.1
Ändern der DataURL auf ajaxResponse.php
v1.0
Alle notwendigen Funktionen zur Navigation mittels Javascript
Weitere Funktionen für die Bildergallerie
******************************************************************************/
