/**
 *	Zur Slideshow: Es gibt eine intervall-gesteuerte Countdown-Funktion
 *	gallery_overlayTimerSSCountdown(), die wenn der Countdown bei 0
 *	angekommen ist, die gallery_overlaySlideshowNextStep() aufruf und damit
 *	den nächsten Schritt einleitet.
 *	Der Countdown-Intervall wird dabei gestoppt und neu gestartet. 
 */

/**
 *	Zeigt das Fenster mit dem grossen Bild der Galerie an.
 *
 *	xSpace, ySpace - darüber kann man aus dem Template (und damit installationspezifisch,
 *	angeben, wieviel Puffer man zusätzlich zu den Bildmaßen haben will, damit alles
 *	hineinpasst.
 */
function gallery_openWindowImage( url, widthImage, heightImage, xSpace, ySpace ) {

	var	widthWindow			=	widthImage + xSpace;
	var	heightWindow		=	heightImage + ySpace;

	var	maxWidth			=	getAvailableWidth( 1024 );
	var	maxHeight			=	getAvailableHeight( 730 );

	widthWindow				=	Math.min( widthWindow, maxWidth );
	heightWindow			=	Math.min( heightWindow, maxHeight );

	var	screenX				=	20;
	var	screenY				=	20;

	var	myWin				=	window.open( url, 'gallery', 'width=' + widthWindow + ',height=' + heightWindow + ',screenX=' + screenX + ',screenY=' + screenY + ',scrollbars=yes,locationbar=no,menubar=no,resizable=yes,status=no' );

	//	Ob Link noch ausgeführt werden soll.
	return	false;

}

/**
 *	Zeigt das Fenster mit der seite eines grossen Bilds der Galerie an.
 *
 *	xSpace, ySpace - darüber kann man aus dem Template (und damit installationspezifisch,
 *	angeben, wieviel Puffer man zusätzlich zu den Bildmaßen haben will, damit alles
 *	hineinpasst.
 */
function gallery_openWindowPage( url, widthImage, heightImage, xSpace, ySpace ) {

	var	widthWindow			=	widthImage + xSpace;
	var	heightWindow		=	heightImage + ySpace;

	var	maxWidth			=	getAvailableWidth( 1024 );
	var	maxHeight			=	getAvailableHeight( 730 );

	widthWindow				=	Math.min( widthWindow, maxWidth );
	heightWindow			=	Math.min( heightWindow, maxHeight );

	var	screenX				=	20;
	var	screenY				=	20;

	var	myWin				=	window.open( url, 'gallery', 'width=' + widthWindow + ',height=' + heightWindow + ',screenX=' + screenX + ',screenY=' + screenY + ',scrollbars=yes,locationbar=no,menubar=no,resizable=yes,status=no' );

	//	Ob Link noch ausgeführt werden soll.
	return	false;

}

/**
 *	Erzeugt im DOM die Elemente für Fader und Bild.
 *
 *	Wird bei der ersten Nutzung von gallery_overlayImageOn() aufgerufen.
 */
function gallery_i_createDynamicElements() {

	/**
	 *	Hinweis: Entspricht
	 *	<div id="entry_gallery_overlay_fader" onclick="gallery_overlayImageOff();"></div>
	 *	<div id="entry_gallery_overlay_canvas" onclick="gallery_overlayImageOff();"></div>
	 */

	var	objDiv1					=	document.createElement( "div" );
	var objAttrib1a				=	document.createAttribute( "id" );
	objAttrib1a.nodeValue		=	"entry_gallery_overlay_fader";
	objDiv1.setAttributeNode( objAttrib1a );
	objDiv1.onclick				=	gallery_overlayImageOff;

	var	objDiv2					=	document.createElement( "div" );
	var objAttrib2				=	document.createAttribute( "id" );
	objAttrib2.nodeValue		=	"entry_gallery_overlay_canvas";
	objDiv2.setAttributeNode( objAttrib2 );
	objDiv2.onclick				=	gallery_overlayImageOff;

	var	arrElements				=	document.getElementsByTagName("body");
	var	objBody					=	arrElements[0];
	objBody.appendChild( objDiv1 );
	objBody.appendChild( objDiv2 );

}

/**
 *	Da IE 6 und kleiner kein "fixed" kennt, arbeiten wir mit absolute. Dazu müssen
 *	entry_gallery_overlay_fader und entry_gallery_overlay_canvas korrekt positioniert
 *	sein (volle Anzeigehöhe ab aktueller Anzeigeposition).
 *
 *	Die Funktion sollte nur aufgerufen werden, wenn der Browser passt.
 *
 *	Die Funktion wird erstmalig zur Anzeige (gallery_overlayImageOn()) aufgerufen und
 *	solange das Bild aktiv ist per Intervall
 */
function gallery_i_positionLayersForNonFixed() {

	if ( !document.getElementById ) {
		return;
	}

	var	objFader					=	document.getElementById( 'entry_gallery_overlay_fader' );
	var	objCanvas					=	document.getElementById( 'entry_gallery_overlay_canvas' );

	if ( !objFader  ||  !objCanvas ) {
		return;
	}

	var	posXFull					=	document.documentElement.scrollLeft + 'px';
	var	posYFull					=	document.documentElement.scrollTop + 'px';
	var	widthFull					=	document.documentElement.clientWidth + 'px';
	var	heightFull					=	document.documentElement.clientHeight + 'px';


	var	checksum					=	widthFull + heightFull + posXFull + posYFull;

	//	Hat sich gegenüber dem letzten Stand etwas geändert?
	if ( checksum != gallery_overlay_checksum ) {

		gallery_overlay_checksum		=	checksum;	

		objCanvas.style.left			=	posXFull;
		objCanvas.style.top				=	posYFull;
		objCanvas.style.width			=	widthFull;
		objCanvas.style.height			=	heightFull;

		objFader.style.left				=	posXFull;
		objFader.style.top				=	posYFull;
		objFader.style.width			=	widthFull;
		objFader.style.height			=	heightFull;

	}

}

//	Liefert zu einem Bild die Daten des Bildes und seiner beiden Nachbarn (Blätterns).
//	Verwendet die Daten von galleries_and_images
//	Return:
//		-	null, wenn nicht gefunden
//		-	Ein Array mit vier Elementen:
//			0 - Das Array der Daten zum Vorgänger oder null
//			1 - Das Array der Daten zum aktuellen Bild
//			2 - Das Array der Daten zum Nachfolger oder null
//			3 - Die Nummer (beginnend bei 1) des gerade angezeigten Bildes
//			4 - Die Anzahl der vorhandenen Bilder (für Anzeige von X/Y)
function gallery_getImageInNeighbourInformation( idGallery, idImage ) {

	if ( typeof( galleries_and_images[idGallery] ) != 'undefined' ) {

		//	images ist ein Array mit Infos zu jedem Bild. Pro Bild gibt es folgende Infos:
		//	ID, Titel, Url-Thumb, Breite, Höhe, Url-Bild, Breite, Höhe 
		var	images				=	galleries_and_images[idGallery];
		var	entry				=	null;

		var posCurrent			=	1;
		var countAll			=	0;
		var	index				=	0;
		var	indexLast			=	0;
		var dataFirst			=	null;
		var dataPredecessor		=	null;
		var dataCurrent			=	null;
		var dataSuccessor		=	null;
		var	dataLast			=	null;
		var nextIsSuccessor		=	false;

		for ( var index in images ) {

			entry					=	images[index];

			if ( dataFirst == null ) {
				dataFirst				=	entry;
			}

			dataLast				=	entry;

			if ( nextIsSuccessor ) {

				dataSuccessor			=	entry;
				nextIsSuccessor			=	false;

			}

			if ( entry[0] == idImage ) {

				//	Das aktuelle Bild

				posCurrent				=	countAll + 1;

				dataCurrent				=	entry;

				if ( countAll > 0 ) {			//	Das aktuelle ist nicht das erste, hat also Vorgänger
					dataPredecessor			=	images[indexLast];
				}

				nextIsSuccessor			=	true;

			}
			indexLast				=	index;
			countAll++;
		}

		return	new Array(
						dataFirst,
						dataPredecessor,
						dataCurrent,
						dataSuccessor,
						dataLast,
						posCurrent,
						countAll
						);

	}

	return	null;

}


//	Liefert den Eintrag in galleries_conditions zur übergebenen Galerie oder null, wenn 
//	nicht gefunden.
function gallery_getConditions( idGallery ) {

	if ( typeof( galleries_conditions[idGallery] ) != 'undefined' ) {
		return	galleries_conditions[idGallery];
	}
	else {
		return	null;
	}

}


//	Klick/Fokus ins Zeitfeld der Slideshow
//	Stoppt die Slideshow. Falls gestoppt, wird in gallery_overlayEventTimefieldBlurred() wieder
//	gestartet
//	Setzt erst mal den aktuellen Wert auf den internen - der ändert sich wegen des Countdowns
//	ja dynamisch
//	Calls gallery_overlayStopSlideshow()
function gallery_overlayEventTimefieldSelected() {

	gallery_ss_wasrunningbeforeedit	=	gallery_ss_isrunning  ||  gallery_ss_wasrunningbeforeedit;

	gallery_setIgnoreImageOff();		//	Off-Schlucker aktivieren.

	//	Auf korrekten Wert setzen
	var	objTextfield				=	document.getElementById( 'entry_gallery_overlayer_ss_timefield' );
	objTextfield.value				=	gallery_ss_seconds_timer.toString();	

	gallery_overlayStopSlideshow();


}

//	Zeitfeld der Slideshow hat den Fokus verloren. Wir übernehmen die Änderung
//	Calls gallery_overlayStopSlideshow()
function gallery_overlayEventTimefieldBlurred() {

	var	objTextfield			=	document.getElementById( 'entry_gallery_overlayer_ss_timefield' );

	var	value					=	parseInt( objTextfield.value );


	if ( isNaN( value )  ||  value < 1  ||  value > 99 ) {
		objTextfield.value				=	gallery_ss_seconds_timer.toString();	
	}
	else {
		gallery_ss_seconds_timer		=	value;
	}

	if ( gallery_ss_wasrunningbeforeedit ) {
		gallery_overlayStartSlideshow( true );
	}

}


//	Wird aufgerufen um über Javascript-Objekte die zwei Nachbarn des aktuellen Bildes zu laden.
function gallery_overlayPreloadNeighbours() {

	//	Bei Superbrowser Firefox wird die vorgeladene Grafik trotzdem noch mal geladen - lassen wir weg.
	return;

	var	neighbours				=	gallery_getImageInNeighbourInformation( gallery_overlay_currentgallery, gallery_overlay_currentimage );

	if ( neighbours == null  ||  neighbours[6] <= 1 ) {			//	Infos nicht gefunden oder Gesamtanzahl <= 1
		return null;
	}


	if ( neighbours[1] != null ) {
		dataPredecessor				=	neighbours[1];			//	Vorgänger
	}
	else {
		dataPredecessor				=	neighbours[4];	//	Letzter!
	}

	if ( neighbours[3] != null ) {
		dataSuccessor				=	neighbours[3];			//	Nachfolger
	}
	else {
		dataSuccessor				=	neighbours[0];			//	Erster!
	}

	//	Den Vorgänger nur, wenn nicht mit Nachfolger identisch
	if ( dataPredecessor[0] != dataSuccessor[0] ) {
		gallery_objImgPreload1.src		=	dataPredecessor[5];	//	Url des Grossbildes
	}

	gallery_objImgPreload2.src		=	dataSuccessor[5];		//	Url des Grossbildes

}

//	Holt die Daten des Vorgängers zum aktuellen Bild. Existiert dieses nicht, so
//	wird der ganz am Ende geliefert
//	null wenn gar nichts gefunden
//	idImage - die ID des Ausgangsbildes (idRaktuelles) oder -1 für das aktuelle (gallery_overlay_currentimage)
//				Hinweis: Abweichungen vom aktuellen machen z.B. im Zusammenhang mit dem Preload Sinn.
function gallery_overlayGetPredecessor( idImage ) {

	if ( idImage == -1 ) {
		idImage						=	gallery_overlay_currentimage;
	}

	var	neighbours				=	gallery_getImageInNeighbourInformation( gallery_overlay_currentgallery, gallery_overlay_currentimage );

	if ( neighbours == null ) {
		return null;
	}

	if ( neighbours[1] != null ) {
		return neighbours[1];			//	Vorgänger
	}
	else {
		return neighbours[4];			//	Letzter!
	}
}


//	Wie gallery_overlayGetPredecessor() aber andersherum
function gallery_overlayGetSuccessor( idImage ) {

	if ( idImage == -1 ) {
		idImage						=	gallery_overlay_currentimage;
	}

	var	neighbours				=	gallery_getImageInNeighbourInformation( gallery_overlay_currentgallery, gallery_overlay_currentimage );

	if ( neighbours == null ) {
		return null;
	}

	if ( neighbours[3] != null ) {
		return neighbours[3];			//	Nachfolger
	}
	else {
		return neighbours[0];			//	Erster!
	}
}


//	Klick auf den normalen Zurück-Button
//	Ist man am Anfang, so wird theoretisch das Endbild geliefert, was praktisch aber
//	nicht passieren kann, da der Link dann nicht vorhanden ist!
//	Calls gallery_overlayStopSlideshow()
function gallery_overlayEventBackwardClicked() {

	gallery_overlayStopSlideshow();

	var	entry					=	gallery_overlayGetPredecessor( -1 );

	if ( entry == null ) {
		return false;
	}

	gallery_overlayImageOn( gallery_overlay_currentgallery, entry[0] );

}

//	Klick auf den normalen Vorwärts-Button
//	Ist man am Ende, so wird theoretisch das Anfangsbild geliefert, was praktisch aber
//	nicht passieren kann, da der Link dann nicht vorhanden ist!
//	Calls gallery_overlayStopSlideshow()
function gallery_overlayEventForwardClicked() {

	gallery_overlayStopSlideshow();

	var	entry					=	gallery_overlayGetSuccessor( -1 );

	if ( entry == null ) {
		return false;
	}

	gallery_overlayImageOn( gallery_overlay_currentgallery, entry[0] );

}

//	Schaltet das Zeitfeld auf links oder rechts Align um die Laufrichtung der Slideshow
//	anzugeben.
//	Läuft diese gar nicht, so bleibt es in der Mitte
function gallery_overlayAlignTimefield() {

	var	objTextfield				=	document.getElementById( 'entry_gallery_overlayer_ss_timefield' );

	if ( !objTextfield ) {
		return;
	}

	if ( !gallery_ss_isrunning ) {
		objTextfield.style.textAlign	=	'center';
	}
	else {
		objTextfield.style.textAlign	=	gallery_ss_isforward ? 'right' : 'left';
	}
}


//	Klick auf den Slideshow-Zurück-Knopf
function gallery_overlayEventSSBackwardClicked() {

	gallery_setIgnoreImageOff();		//	Off-Schlucker aktivieren.

	if ( !gallery_ss_isforward  &&  gallery_ss_isrunning ) {
		gallery_overlayStopSlideshow();
	}
	else if ( !gallery_ss_isrunning ) {
		gallery_overlayStartSlideshow( true );
	}

	gallery_ss_isforward			=	false;

	gallery_overlayAlignTimefield();

}

//	Klick auf den Slideshow-Vorwärts-Knopf
function gallery_overlayEventSSForwardClicked() {

	gallery_setIgnoreImageOff();		//	Off-Schlucker aktivieren.

	if ( gallery_ss_isforward  &&  gallery_ss_isrunning ) {
		gallery_overlayStopSlideshow();
	}
	else if ( !gallery_ss_isrunning ) {
		gallery_overlayStartSlideshow( true );
	}

	gallery_ss_isforward		=	true;

	gallery_overlayAlignTimefield();

}


//	Die per Timer aufgerufene Funktion um den nächsten Slideshop-Step durchzuführen.
//	Stößt auch den nächsten Timer an.
function gallery_overlaySlideshowNextStep() {

	if ( gallery_ss_isforward ) {
		var	entry					=	gallery_overlayGetSuccessor( -1 );
	}
	else {
		var	entry					=	gallery_overlayGetPredecessor( -1 );
	}

	if ( entry == null ) {
		return false;
	}

	gallery_overlayImageOn( gallery_overlay_currentgallery, entry[0] );

	//eventuell noch laufenden Countdown stoppen
	if ( gallery_ss_intrvalid_countdown != -1 ) {
		window.clearInterval( gallery_ss_intrvalid_countdown );
		gallery_ss_intrvalid_countdown	=	-1;
	}

	//	Countdown neu starten
	gallery_ss_seconds_countdown	=	gallery_ss_seconds_timer;
	gallery_ss_intrvalid_countdown	=	window.setInterval( "gallery_overlayTimerSSCountdown();", 1000 );

}


//	Intervall-Aufruf für den Countdown. Wird mit der Slideshow bzw. bei nächsten Bild als
//	Intervall gestartet und läuft im  Zeit-Feld
//	Ruft bei 0 gallery_overlaySlideshowNextStep() auf um den nächsten Schritt einzuleiten und
//		stopped zuvor sich selbst!
//	Siehe gallery_overlayStartSlideshow() und gallery_overlayStopSlideshow()
function gallery_overlayTimerSSCountdown() {

	gallery_ss_seconds_countdown--;

	if ( gallery_ss_seconds_countdown <= 0 ) {
		window.clearInterval( gallery_ss_intrvalid_countdown );
		gallery_ss_intrvalid_countdown	=	-1;

		gallery_overlaySlideshowNextStep();

		return;

	}

	var	objTextfield			=	document.getElementById( 'entry_gallery_overlayer_ss_timefield' );
	objTextfield.value			=	gallery_ss_seconds_countdown.toString();

}


//	Startet die automatische Slideshow
//	Derzeit aufgerufen von den zwei Buttons sowie bei der Erstanzeige falls Autostart
//	Startet das Intervall für den Aufruf von gallery_overlayTimerSSCountdown()
//	fastStart - true um schnell zu starten (1 Sekunde), false für normale Timer-Länge
function gallery_overlayStartSlideshow( fastStart ) {

	gallery_ss_isrunning			=	true;

	//	Der Countdown als Feedback der Slideshow und Auslöser des Wechsels bei 0

	gallery_ss_seconds_countdown	=	fastStart ? 1 : gallery_ss_seconds_timer;

	gallery_ss_intrvalid_countdown	=	window.setInterval( "gallery_overlayTimerSSCountdown();", 1000 );

	gallery_overlayAlignTimefield();

}

//	Unterbricht die automatische Slideshow durch Löschen des Countdown-Intervalls
//	Wird z.B. vom normalen Zurück/Vorwärts-Button aufgerufen, vom Eingabe-Feld
//	oder den SS-Buttons, wenn geklickt obwohl bereits so läuft
function gallery_overlayStopSlideshow() {

	gallery_ss_isrunning			=	false;

	if ( gallery_ss_intrvalid_countdown != -1 ) {
		window.clearInterval( gallery_ss_intrvalid_countdown );
		gallery_ss_intrvalid_countdown		=	-1;
	}

	gallery_overlayAlignTimefield();

}


/**
 *	Wird von der Galerie aufgerufen um ein Bild über die aktuelle Seite zu legen.
 *
 *	Wird auch vom vor/zurück sowie von der Slideshow aufgerufen.
 *	Hinweis:	Die Slideshow kann in beide Richtungen laufen und läuft stets
 *				endlos im Kreis.
 */
//function gallery_overlayImageOn( url, widthImage, heightImage, idGallery, idImage ) {
function gallery_overlayImageOn( idGallery, idImage ) {

	gallery_setIgnoreImageOff();		//	Off-Schlucker aktivieren.

	//	Den Slideshow-Countdown ausstoppen (z.B. wenn normaler Klick erfolgt). Sind wir vom
	//	Countdown aufgerufen worden, dann ist das auch OK - es ist ja schon passiert.
	if ( gallery_ss_intrvalid_countdown != -1 ) {
		window.clearInterval( gallery_ss_intrvalid_countdown );
		gallery_ss_intrvalid_countdown		=	-1;
	}

	if ( !document.getElementById ) {
		alert( "Bitte verwenden Sie einen aktuellen Browser" );
		return	true;
	}


	//	Erster Aufruf: Element für Fader und Bild dynamisch erzeugen lassen.
	if ( !gallery_has_created_elements ) {
		gallery_i_createDynamicElements();
		gallery_has_created_elements	=	true;
	}


	var	objFader				=	document.getElementById( 'entry_gallery_overlay_fader' );
	var	objCanvas				=	document.getElementById( 'entry_gallery_overlay_canvas' );


	if ( !objFader  ||  !objCanvas ) {
		alert( "HTML-Elemente für Galerie-Anzeige nicht gefunden." );
		return	true;
	}


	//	Bedingungen der Galerieanzeige. Derzeit nur ob Autostart der Slideshow oder nicht
	//	Behandlung derzeit weiter unten
	var	conditions				=	gallery_getConditions( idGallery );

	//	Informationen zum gewünschten Bild sowie seinen Nachbarn holen.

	//	Behandlung von anderen Bildern dieser Galerie (Blättern)
	var	neighbours				=	gallery_getImageInNeighbourInformation( idGallery, idImage );

	if ( neighbours == null ) {
		alert( "Fehler: Bild-Informationen (galleries_and_images) nicht gefunden" );
		return false;
	}


	var	ss_dataFirst			=	neighbours[0];		//	Erster: ID, Titel, Url-Thumb, Breite, Höhe, Url-Bild, Breite, Höhe 
	var	ss_dataP				=	neighbours[1];		//	Predecessor: ID, Titel, Url-Thumb, Breite, Höhe, Url-Bild, Breite, Höhe 
	var	ss_dataC				=	neighbours[2];		//	Current
	var	ss_dataS				=	neighbours[3];		//	Successor
	var	ss_dataLast				=	neighbours[4];		//	Letzter
	var	ss_posCurrent			=	neighbours[5];
	var	ss_countAll				=	neighbours[6];

	var functionCall			=	'';
	var sourceToolbar			=	'';
	sourceToolbar				+=	ss_dataC[1] + " (" + ss_posCurrent + " / " + ss_countAll + ")";

	if ( ss_dataP != null ) {

		//	Vorgaenger

		functionCall				=	"gallery_overlayEventBackwardClicked()";	

		sourceToolbar				+=	"<a href=\"#\" onclick=\"" + functionCall + "; return false;\" " +
										"id=\"entry_gallery_overlayer_linkleft\" title=\"&lt;&lt;\"></a>\n";
	}

	if ( ss_dataS != null ) {

		//	Nachfolger

		functionCall				=	"gallery_overlayEventForwardClicked()";	

		sourceToolbar				+=	"<a href=\"#\" onclick=\"" + functionCall + "; return false;\" " +
										"id=\"entry_gallery_overlayer_linkright\" title=\"&gt;&gt;\"></a>\n";
	}

	if ( ss_countAll > 1 ) {

		//	Slideshow

		functionCall				=	"gallery_overlayEventSSBackwardClicked()";	

		sourceToolbar				+=	"<a href=\"#\" onclick=\"" + functionCall + "; return false;\" " +
										"id=\"entry_gallery_overlayer_ss_backward\" title=\"Slideshow &lt;&lt;\"></a>\n";

		var valueSeconds			=	textPlain2HTML( gallery_ss_seconds_timer.toString() );
		sourceToolbar				+=	"<input type=\"text\" id=\"entry_gallery_overlayer_ss_timefield\" " +
										"size=\"2\" maxlength=\"3\" value=\"" + valueSeconds + "\" " +
										"onfocus=\"gallery_overlayEventTimefieldSelected();\" onclick=\"gallery_overlayEventTimefieldSelected();\" " +
										"onblur=\"gallery_overlayEventTimefieldBlurred();\" " + 
										"title=\"Slideshow\"/>\n";

		functionCall				=	"gallery_overlayEventSSForwardClicked()";	

		sourceToolbar				+=	"<a href=\"#\" onclick=\"" + functionCall + "; return false;\" " +
										"id=\"entry_gallery_overlayer_ss_forward\" title=\"Slideshow &gt;&gt;\"></a>\n";

	}

	var	urlImage					=	ss_dataC[5];
	var	widthImage					=	ss_dataC[6];
	var	heightImage					=	ss_dataC[7];

	var styleImgContainer			=	"width: " + ( parseInt( widthImage ) + 2 ) + "px;";	//	+ 2, der Container selbst hat noch padding

	sourceToolbar					+=	"<a href=\"#\" onclick=\"gallery_overlayImageOff(); return false;\" " +
										"id=\"entry_gallery_overlayer_linkclose\" title=\"Schließen\"></a>\n";


	var	sourceContainer				=	"<div id=\"entry_gallery_overlayer_imagecontainer\" style=\"" + styleImgContainer + "\">" +
										"<div id=\"entry_gallery_overlayer_toolbar\">\n" +
										sourceToolbar +
										"</div>\n" +
										"<img id=\"entry_gallery_overlayer_image\" src=\"" + urlImage + "\" " +
										"alt=\"Galeriebild\" />\n" +
										"</div>\n";

	//	global merken, was gerade angezeigt wird
	gallery_overlay_currentgallery	=	idGallery;		//	ID der aktuellen Galerie
	gallery_overlay_currentimage	=	idImage;		//	ID des aktuellen Bildes

//test	=	prompt( "kkk", sourceContainer );

	var	canUseFixed					=	true;

	//	IE erkennen
	if ( document.all ) {

		var	navVersion					=	navigator.appVersion; 
		var	posVersion					=	navVersion.lastIndexOf( 'MSIE ' );

		if ( posVersion != -1 ) {
			posVersion						=	posVersion + 5;
			var	majorVersion				=	navVersion.substring( posVersion, posVersion + 1 );
			if ( majorVersion <= 6 ) {
				canUseFixed						=	false;
			}
		}

	}

//	var	majorVersion					=	navigator.appVersion.substring( 0, 1 ); 
//	var	isIE6OrLower					=	navigator.appName == "Microsoft Internet Explorer"  &&  majorVersion <= 6;


	if ( !canUseFixed ) {

		//	Da IE bis 6 keine fixed-position kennt, setzen wir die Layer absolute und
		//	lassen sie von gallery_i_positionLayersForNonFixed() per Intervall an Änderungen
		//	des Fensters anpassen.
		gallery_i_positionLayersForNonFixed();

		gallery_overlay_interval_id			=	window.setInterval( "gallery_i_positionLayersForNonFixed()", 100 );

		objCanvas.style.position			=	'absolute';
		objFader.style.filter				=	"Alpha(opacity=60)";
		objFader.style.position				=	'absolute';
	}
	else {
		objCanvas.style.position			=	'fixed';
		objFader.style.position				=	'fixed';
		objFader.style.opacity 				=	0.6;
	}


	objCanvas.innerHTML					=	sourceContainer;
	objCanvas.style.display				=	'block';

	objFader.style.display 				=	'block';

	//	Automatischer Slideshow-Start erwünscht?
	if ( conditions != null  &&  conditions[0] == 1 ) {
		if ( !gallery_overlay_isvisible ) {			//	Wurde gerade erst angezeigt - relevant
			gallery_overlayStartSlideshow( false );
		}
	}

	gallery_overlay_isvisible			=	true;

	if ( ss_countAll > 1 ) {
		gallery_overlayAlignTimefield();
		gallery_overlayPreloadNeighbours();
	}

	return	false;

}

//	Sorgt dafür, dass in den nächsten 100ms Aufrufe von gallery_overlayImageOff() ignoriert
//	werden.
//	Dient dazu bei solchen Browsern (z.B. Opera), die einen Klick auf den Hintergrund mit
//	auslösen, wenn man ein Blätter-Icon drückt, zu verhindern, dass das Bild beim Klicken
//	verschwindet.
function gallery_setIgnoreImageOff() {

	gallery_overlay_is_ignore_off	=	true;

	window.setTimeout( "gallery_overlay_is_ignore_off = false", 100 );
}

/**
 *	Schaltet ein mittels gallery_overlayImageOn() angezeigtes Bild (bzw. den ganzen Overlay) wieder weg.
 *
 *	Mittels gallery_setIgnoreImageOff() kann man kurzeitig verhindern, dass die Funktion
 *	tätig wird.
 */
function gallery_overlayImageOff() {

	if ( gallery_overlay_is_ignore_off ) {
		return;
	}

	if ( gallery_overlay_interval_id != -1 ) {
		window.clearInterval( gallery_overlay_interval_id );
		gallery_overlay_interval_id	=	-1;
	}

	gallery_overlayStopSlideshow();

	var	objFader					=	document.getElementById( 'entry_gallery_overlay_fader' );
	var	objCanvas					=	document.getElementById( 'entry_gallery_overlay_canvas' );

	objCanvas.innerHTML				=	'';
	objCanvas.style.display			=	'none';

	objFader.style.opacity 			=	0.0;
	objFader.style.display			=	'none';

	gallery_overlay_isvisible		=	false;

}

var gallery_has_created_elements	=	false;	//	Divs für Overlay und Bild bereits dynamisch erzeugt?	

var gallery_overlay_checksum		=	null;
var gallery_overlay_interval_id		=	-1;		//	Intervall zur Neupositionierung (IE)

//	Hier legt gallery_overlayImageOn() das aktuelle/letztgezeigte Bild ab
var gallery_overlay_currentgallery	=	-1;		//	ID der aktuellen Galerie
var gallery_overlay_currentimage	=	-1;		//	ID des aktuellen Bildes

var gallery_overlay_isvisible		=	false;	//	Ob gerade/schon angezeigt

var gallery_overlay_is_ignore_off	=	false;	//	gallery_setIgnoreImageOff()

//	slideshow

var gallery_ss_isrunning			=	false;	//	Ob Slideshow läuft
var gallery_ss_wasrunningbeforeedit	=	false;	//	Ob Slideshow lief, bevor Edit-Field geklickt wurde
var gallery_ss_isforward			=	true;	//	Ob Slideshow vorwärts oder zurück

//	Die Slideshow hat einen Timer-Wert in Sekunden sowie einen Countdown, der als optisches
//	Feedback runtergezählt wird.
var gallery_ss_seconds_timer		=	5;
var gallery_ss_seconds_countdown	=	gallery_ss_seconds_timer;
var gallery_ss_intrvalid_countdown	=	-1;

//	Zwei Bilder-Objekte die das je nächste und vorherige Bild im Hintergrund laden
var gallery_objImgPreload1			=	new Image();
var gallery_objImgPreload2			=	new Image();


//	Galerien auf der aktuellen Seite. Gefüllt im CMS

//	Allgemeine Infos zu den Galerie dieser Seite. Z.B. Slideshow aktiv oder nicht
var galleries_conditions			=	new Array();

//	Da hinein legt jede Galerie ein Array mit ihren Bildern.
var galleries_and_images			=	new Array();

