// ZGallery: Diese Funktion wird verwendet um die Gallerie zu starten
function ZGallery(_mode, _picture, _kind, _source) {
	// ZGallery muss nicht zur Laufzeit gestartet werden, diese Funktion prüft ob die Initialisierung bereits durchgeführt wurde oder führt diese durch
	ZGallery_init();
	// Den Overlay einblenden
	ZOverlay("#000", 0.25);
	// ZGallery ist standardmäßig auf display:none; Hier wird es sichtbar gemacht
	ZGallery_show();
	// Stellt fest wie viel width und height zur Verfügung steht
	ZGallery_size();
	// Erstellt einen Array mit den Bildern und zählt wie viele Bilder vorhanden sind
	ZGallery_list(_kind, _source);
	// Verweist auf das aktuelle Bild
	ZGallery_current(_picture);
	// Möglichen Inhalt in der Gallerie entfernen
	ZGallery_empty();
	// Titelleiste erstellen
	ZGallery_title();
	// Anzeige für Bild oder Kacheln erstellen
	ZGallery_picture(_mode);
	// Beschreibungstext des Bildes
	ZGallery_desc();
}

/*
	Bilder einzeln anzeigen, wenn mehrere Bilder gegeben sind kann man durchblättern
	[mode:fullview; picture:0; kind:path; source:bilder/bild1.jpg,bilder/bild2.jpg,bilder/bild3.jpg;]
	[mode:fullview; picture:0; kind:id;   source:BilderListe;]
	#mode:    Parameter fullview für Einzelbildanzeige
	#picture: Nummer des Bildes das angezeigt werden soll (0-x)
	#kind:    path wenn Quelle eine Liste aus URL zu den Bildern ist oder id wenn die Bilder in einem Element aufgelistet sind
	#source:  Die Quelle der Bilder, dies kann eine Liste mit den URLs zu den Bildern sein oder eine id zu einem Element in dem die Bilder enthalten sind
	
	Zeigt alle Bilder als Kacheln mit Scrollbalken (bei overflow) an. Beim anklicken zeigt es das Bild einzeln an
	[mode:overview; picture:0; kind:path; source:bilder/bild1.jpg,bilder/bild2.jpg,bilder/bild3.jpg;]
	[mode:overview; picture:0; kind:id;   source:BilderListe;]
	#mode:    Parameter overview für Kacheln-Gesamtbilderanzeige
	#picture: UNGEBRAUCHT
	#kind:    path wenn Quelle eine Liste aus URL zu den Bildern ist oder id wenn die Bilder in einem Element aufgelistet sind
	#source:  Die Quelle der Bilder, dies kann eine Liste mit den URLs zu den Bildern sein oder eine id zu einem Element in dem die Bilder enthalten sind
	
	
	
	[ZGallery Fenster
		<center>
			<div id="ZGallery_content">
				[Links:Alle anzeigen; Mitte:Bild x von y; Rekts: Schließen]
				[Pfeil links][Bild][Pfeil rechts]
				[Ggf Bildbeschreibung]
			</div>
		</center>
	]
*/


// ZGallery_init: Hier wird geprüft ob es bereits einen ZGallery div im body gibt, wenn nicht wird dieser angelegt (notwendig da ZGallery nicht mehr von ZetaneonUI abhängig ist)
function ZGallery_init() {
	// Prüfen ob der ZGallery div existiert
	if (document.getElementById("ZGallery")) {
		return true;
	}
	// ZGallery div erzeugen
	else {
		document.getElementById("document_insert_runtime").innerHTML += '<div id="ZGallery"><center><div id="ZGallery_content"></div></center></div>';
	}
}


// ZGallery_close: Schliesst das Gallery Fenster
function ZGallery_close() {
	ZOverlay(0);
	ZGallery_hide();
	
	// Laufzeitdaten der Bildergallerie entfernen
	ZGallery_unset();
}


// ZGallery_unset: Laufzeitdaten (Bilderliste und Beschreibungstexte) von vorherigen Bildergallerien entfernen
function ZGallery_unset() {
	// Bilderliste löschen
	iM = ZGallery_picture_list.length;
	for (i = 0; i < iM; i++) {
		ZGallery_picture_list[i] = "";
	}
	
	// Beschreibungstexte löschen
	iM = ZGallery_picture_desc.length;
	for (i = 0; i < iM; i++) {
		ZGallery_picture_desc[i] = "";
	}
}


// ZGallery_show: Zeigt ZGallery an
function ZGallery_show() {
	document.getElementById("ZGallery").style.display = "block";
}

// ZGallery_hide: Blendet die ZGallery aus
function ZGallery_hide() {
	document.getElementById("ZGallery").style.display = "none";
}


// ZGallery_size: Stellt fest wie viel width und height zur Verfügung stehen
var ZGallery_size_width;
var ZGallery_size_height;

function ZGallery_size() {
	ZGallery_size_width = document.getElementById("ZGallery").offsetWidth;
	ZGallery_size_height = document.getElementById("ZGallery").offsetHeight;
}


// ZGallery_list: Erstellt einen Array mit den Bildern
var ZGallery_picture_list;
var ZGallery_picture_desc = ""; // "" für Debug
var ZGallery_picture_count;

function ZGallery_list(_kind, _source) {
	// Art der Quelle feststellen
	switch(_kind.toLowerCase()) {
		// Array mit Bildern aus id erstellen
		case "id":
			oSource = document.getElementById(_source).getElementsByTagName("img"); // Bilder aus id einlesen
			iSource = oSource.length; // Anzahl der eingelesenen Bilder bestimmen
			aSource = new Array();
			aDesc   = new Array(); // Beschreibungstext des Bilder gespeichert im alt=""
			// Array mit Pfaden zu den Bildern erstellen
			for (i = 0; i < iSource; i++) {
				aSource[i] = oSource[i].src;
				aDesc[i]   = oSource[i].alt;
			}
			ZGallery_picture_list = aSource;
			ZGallery_picture_desc = aDesc;
			ZGallery_picture_count = aSource.length;
			break;
			
		// Array mit Bildern aus string erstellen
		case "path":
			sSource = _source; // String mit den Pfaden zu den Bildern
			aSource = sSource.split(","); // String Anhand der "," als Begrenzerzeichen aufteilen
			ZGallery_picture_list = aSource;
			ZGallery_picture_count = aSource.length;
			break;
	}
}


// ZGallery_current: Verweist auf das aktuelle Bild
var ZGallery_picture_current;

function ZGallery_current(_picture) {
	ZGallery_picture_current = _picture;
}


// ZGallery_empty: Leert jeden Inhalt im ZGallery_content Element
function ZGallery_empty() {
	document.getElementById("ZGallery_content").innerHTML = "";
}


// ZGallery_title: Erstellt die Titelzeile mit den Buttons "Alle anzeigen", "Schließen" und der Bild x von y Anzeige
function ZGallery_title() {
	// Wenn nur ein Bild anzuzeigen ist den "Alle anzeigen" Button verstecken
	//if (ZGallery_picture_count == 1) {
		sLinks = '';
		sMitte = '<div id="ZGallery_content_title_mitte" class="ZGallery_content_title_mitteundlinks" style="border-left:none;"><span>Bildergallerie (Bild ' + (ZGallery_picture_current + 1) + ' von ' + ZGallery_picture_count + ')</span></div>';
		sRekts = '<div id="ZGallery_content_title_rekts" onclick="ZGallery_close()"><span>Schließen</span></div>';
	/*}
	// Ansonsten komplett anzeigen
	else {
		sLinks = '<div id="ZGallery_content_title_links"><span>Alle anzeigen</span></div>';
		sMitte = '<div id="ZGallery_content_title_mitte"><span>Bildergallerie (Bild ' + (ZGallery_picture_current + 1) + ' von ' + ZGallery_picture_count + ')</span></div>';
		sRekts = '<div id="ZGallery_content_title_rekts" onclick="ZGallery_close()"><span>Schließen</span></div>';
	}*/
	
	// Zum Dokument hinzufügen
	document.getElementById("ZGallery_content").innerHTML += '<div id="ZGallery_content_title">' + sLinks + sMitte + sRekts + '</div>';
}

function ZGallery_title_adjust(_width) {
	document.getElementById("ZGallery_content_title").style.width = _width + "px"; // Passt die Breite des gesamten Titelleisten Containers an
	document.getElementById("ZGallery_content_title_mitte").style.width = _width - 242 + "px"; // Passt die Breite des mittleren Titelleisten Elements an
}


// ZGallery_picture(): Prüft ob ein Bild oder eine Kachel Ansicht zu zeigen ist und erstellt diese
function ZGallery_picture(_mode) {
	switch(_mode) {
		// Ein Bild groß anzeigen
		case 'fullview':
			// Bild anzeigen
			document.getElementById("ZGallery_content").innerHTML += '<div id="ZGallery_content_picture"><img alt="" src="' + ZGallery_picture_list[ZGallery_picture_current] + '" /></div>';
			
			// Pfeile anzeigen / verstecken
			document.getElementById("ZGallery_content").innerHTML += '<div id="ZGallery_content_navigate_previous" onclick="ZGallery_navigate_previous()" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=0.75"><img alt="" src="kernel/frameworks/ZGallery/previous.png" /></div>';
			document.getElementById("ZGallery_content").innerHTML += '<div id="ZGallery_content_navigate_next" onclick="ZGallery_navigate_next()" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=0.75"><img alt="" src="kernel/frameworks/ZGallery/next.png" /></div>';
			
			if (ZGallery_picture_count == 1) { // Insgesamt ein Bild, keine Pfeile
				document.getElementById("ZGallery_content_navigate_previous").style.display = "none";
				document.getElementById("ZGallery_content_navigate_next").style.display = "none";
			}
			if (ZGallery_picture_current == 0) {
				document.getElementById("ZGallery_content_navigate_previous").style.display = "none";
			}
			if ((ZGallery_picture_current + 1) == ZGallery_picture_count) {
				document.getElementById("ZGallery_content_navigate_next").style.display = "none";
			}
			
			// Größen des Fensters anpassen und die Navigationspfeile positionieren
			ZGallery_adjust_fullview();
			
			break;
		
		// Kacheln Ansicht
		case 'overview':
			
			break;
	}
}


// ZGallery_desc: Blendet die Bildbeschreibung ein falls sie verfügbar ist
function ZGallery_desc() {
	if (ZGallery_picture_desc[ZGallery_picture_current] != "" && ZGallery_picture_desc[ZGallery_picture_current] != undefined) {
		document.getElementById("ZGallery_content").innerHTML += '<div id="ZGallery_content_desc">' + ZGallery_picture_desc[ZGallery_picture_current] + '</div>';
	}
}


// ZGallery_adjust_fullview: Größen des Fensters anpassen und die Navigationspfeile positionieren
function ZGallery_adjust_fullview() {
	// Breite des Bildes einlesen
	iSizepic = iSizepic = document.getElementById("ZGallery_content_picture").getElementsByTagName("img")[0].offsetWidth;
	
	// Wenn die Breite des Bildes noch nicht verfügbar ist kurz warten (Debug)
	if (iSizepic == 0) window.setTimeout("ZGallery_adjust_fullview", 5);
	
	// Ansonsten Elemente ausrichten
	else {
		// Breite des Bildcontainers
		document.getElementById("ZGallery_content").style.width = iSizepic + "px";
		
		// Maximalgrößen für Bild festlegen
		document.getElementById("ZGallery_content_picture").getElementsByTagName("img")[0].style.maxWidth = ZGallery_size_width * 0.8 + "px";
		document.getElementById("ZGallery_content_picture").getElementsByTagName("img")[0].style.maxHeight = ZGallery_size_height * 0.8 + "px";
		
		// Prüfen ob das Bild schmäler ist als wie das gesamte Anzeigefenster (das bedeutet, dass maxHeight erreicht wurde und die Breite falsch dargestellt wird)
		if (document.getElementById("ZGallery_content").offsetWidth < iSizepic) {
			document.getElementById("ZGallery_content").style.width = iSizepic + "px";
		}
		
		// Breite für Bild Container anpassen
		document.getElementById("ZGallery_content_picture").style.width = iSizepic + "px";
		if (iSizepic < 442) {
			document.getElementById("ZGallery_content_picture").style.width = "442px";
		}
		
		// Titelzeile anpassen
		ZGallery_title_adjust(document.getElementById("ZGallery_content_picture").offsetWidth);
		
		// Vertikale Ausrichtung des Anzeigebereichs berechnen
		marginTop = ZGallery_size_height- document.getElementById("ZGallery_content").offsetHeight;
		marginTop /= 2;
		marginTop -= 25; // Höhe der Titelleiste abziehen
		document.getElementById("ZGallery_content").style.marginTop = marginTop + "px";
		
		// Pfeile ausrichten
		iTop = document.getElementById("ZGallery_content_picture").getElementsByTagName("img")[0].offsetHeight;
		iTop /= 2;
		iTop += marginTop;
		iTop += "px";
		document.getElementById("ZGallery_content_navigate_previous").style.top = iTop;
		document.getElementById("ZGallery_content_navigate_next").style.top = iTop;
		iLeft = document.getElementById("ZGallery_content_picture").offsetLeft;
		document.getElementById("ZGallery_content_navigate_previous").style.left = iLeft + "px";
		iLeft += document.getElementById("ZGallery_content_picture").offsetWidth;
		document.getElementById("ZGallery_content_navigate_next").style.left = iLeft + 1 + "px";
	}
}


// Navigation zum nächsten Bild
function ZGallery_navigate_next() {
	iNext = ZGallery_picture_current + 1;
	if (iNext <= ZGallery_picture_count) {
		ZGallery_picture_current++;
		
		ZGallery_refresh("fullview");
	}
}


// Navigation zum vorherigen Bild
function ZGallery_navigate_previous() {
	iNext = ZGallery_picture_current - 1;
	if (iNext >= 0) {
		ZGallery_picture_current--;
		
		ZGallery_refresh("fullview");
	}
}


// Aktualisiert die Anzeige (wird verwendet um neue Bilder anzuzeigen)
function ZGallery_refresh(_mode) {
	// Möglichen Inhalt in der Gallerie entfernen
	ZGallery_empty();
	// Titelleiste erstellen
	ZGallery_title();
	// Anzeige für Bild oder Kacheln erstellen
	ZGallery_picture(_mode);
	// Beschreibungstext des Bildes
	ZGallery_desc();
}
