//
// Urheberrecht (c) 2008 Asklepios
// Alle Rechte vorbehalten
// Erstellt am: 25.06.2008
// Autor: M
//
// SLIDESHOW:
// ==========
//
// Slideshow-Skript, welches das Hauptbild (id="hauptbild") in ein Slide
// verwandelt. Auch ist es möglich, mehrere Slideshows auf einer Seite zu
// definieren, dazu müssen die nachfolgenden DIV-Container nummeriert werden:
// 	hauptbild_bg
// 		hauptbild
// 	hauptbild1_bg
// 		hauptbild1
// 	hauptbild2_bg
// 		hauptbild2
// 	etc.
// Das Skript setzt voraus, dass die Funktionen "add_load_event" und 
// "changeOpacity" bereits definiert wurde.
// Die Bilder der Slideshow werden mittels einer UL an das Skript übergeben, in
// dieser UL sind ANCHORs definiert, deren Targets als die anzuzeigenden Bilder
// angesehen werden.
//
//
// GALERIE:
// ========
//
// Um anstelle einer Slideshow eine Galerie anzuzeigen, muss im jeweiligen
// DIV-Container (also z.B. "hauptbild_bg", "hauptbild1_bg", ...) eine UL
// definiert werden, welche die CSS-Klasse "galerie" verwendet.
// Die in dieser UL gefundenen LINK-TARGETS werden dann als die Bilder
// der Galerie angesehen, d.h. es muss kein ss_bilder Array vor Skripteinbindung
// angelegt werden.
//
// ***
//
// LETZTES UPDATE: 08.09.2008, Skript kann nun auch für Galerien verwendet
// 		werden.
//


var ss_default_timer = 3000;	/* Schnelligkeit des Bildwechsels */
var ss_index = Array ();	/* Index, welches Bild gerade angezeigt wird */
ss_index [0] = 0;
var ss_multi = false;		/* Mehrere Slideshows aktiv? */
var t;

/* Initialisiert die Slideshow bzw. Galerie: */
function
init_ss ()
{
	if (window.ss_bilder == undefined) {
		ss_bilder = Array ();
	}
	else if (isArray (ss_bilder [1])) {
		ss_multi	= true;
		var j		= 0;
		var anz		= ss_bilder.length-1;
		while (ss_bilder [j]) {
			ss_index [j++] = 0;
		}
	}
	else {
		var ss_bilder_kopie	= ss_bilder;
		ss_bilder		= Array ();
		ss_bilder [0]		= ss_bilder_kopie;
		delete ss_bilder_kopienull;
	}

	var bild_bg	= document.getElementById ("hauptbild_bg");
	var bild	= document.getElementById ("hauptbild");
	var imglist	= null;
	var bilder	= null;
	var bildanz	= null;
	var ist_galerie	= false;
	var mit_liste	= false;
	var i		= 0;
	var j		= 0;
	//while (bild_bg && bild && isArray (ss_bilder [i])) {
	while (bild_bg && bild) {
		imglist = bild_bg.getElementsByTagName ("ul") [0];

		if (imglist) {
			ss_bilder [i]	= Array ();
			bilder		= imglist.getElementsByTagName ("a");
			bildanz		= bilder.length;
			j		= 0;
			while (j<bildanz) {
				ss_bilder [i] [j] = bilder [j].href;
				bilder [j].href = "javascript:ss_switch ("+i+
					", 0, '"+j+"')";
				++j;
			}
		}

			ist_galerie	= true;
			mit_liste	=
				(imglist.className.indexOf ("mit_liste") != -1)
				? true
				: false;
			if (!mit_liste) {
				imglist.style.display	= "none";
				bild	= (i>0) 
					? document.getElementById ("hauptbild"+i)
					: document.getElementById ("hauptbild");
			}

			if (imglist) {
				imglist.style.display	= "none";
			}

			if (undefined == window.ss_timer) {
				ss_timer = Array ();
				ss_timer [0] = ss_default_timer;
			}
			else if (!ss_multi && window.ss_timer) {
				var ss_timer_tmp = ss_timer;
				ss_timer = Array ();
				ss_timer [0] = ss_timer_tmp;
				delete ss_timer_tmp;
			}
			else if (i > 0	&& !ss_timer [i])
			{
				ss_timer [i] = ss_default_timer;
			}

			t = setTimeout ("ss_switch("+i+")", ss_timer [i]);

		bild.src = ss_bilder [i] [ ss_index [i] ];

		++i;
		ist_galerie	= false;
		var bild_bg	= document.getElementById ("hauptbild"+i+"_bg");
		var bild	= document.getElementById ("hauptbild"+i);
	}
}



/* Blendet das aktuelle Bild aus und wechselt zum nächsten. Als zweiter
 * Parameter kann eine Sprungdistanz (+/-) angegeben, die bestimmt, um wieviele
 * Bilder gesprungen werden soll. Standard ist +1.
 * Der dritte Parameter gibt die Bildnummer an, zu der gesprungen werden soll.
 * Alle Parameter, ausgenommen des ersten, können ausgelassen werden. Ist ein
 * zweiter oder dritter Parameter gegeben, so nimmt das Skript an, dass es sich
 * um eine Galerie handelt und springt somit NICHT automatisch zum nächsten
 * Bild! */
function
ss_switch (i)
{
	var sprung	= (arguments.length == 2) ? arguments [1] : null;
	var bildnr	= (arguments.length == 3) ? arguments [2] : null;
	var bg		= (i>0) ? "hauptbild"+i+"_bg" : "hauptbild_bg";
	var bild	= (i>0) ? "hauptbild"+i : "hauptbild";

	document.getElementById (bg).style.backgroundImage = 
		"url("+ss_bilder [i] [ ss_index [i] ]+")";
	if (sprung) {
		ss_index [i] += sprung;
		ss_stopSlideshow();
	}
	else if (bildnr) {
		ss_index [i] = bildnr;
	}
	else {
		++ss_index [i];
	}

	if (ss_index [i] >= ss_bilder [i].length) {
		ss_index [i] = 0;
	}
	else if (ss_index [i] < 0) {
		ss_index [i] = ss_bilder [i].length-1;
	}

	changeOpacity (0, bild);
	document.getElementById (bild).src = ss_bilder [i] [ ss_index [i] ];
	blendIn (bild, 800);
	if (!sprung && !bildnr) {
		t = setTimeout ("ss_switch("+i+")", ss_timer [i]);
	}
}



// Blend in a div container with the given id:
function
blendIn(container_id, millisec)
{
	var speed = Math.round(millisec / 100);
	var timer = 0;

	// Change the opacity of the container to zero:
	changeOpacity(0, container_id);

	// Fade in the container:
	for(var i=0; i<=100; i++) {
		setTimeout("changeOpacity(" + i + ",'" + container_id + "')", 
			timer * speed);
		timer++;
	}
}



function
isArray (testObject)
{
	return	testObject					&&
		!(testObject.propertyIsEnumerable('length'))	&&
		typeof testObject === 'object'			&&
		typeof testObject.length === 'number';
}



function
changeOpacity(opacity, id)
{
    var object          = document.getElementById(id).style;
    object.opacity      = (opacity / 100);
    object.MozOpacity   = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter       = "alpha(opacity=" + opacity + ")";
}

function
ss_stopSlideshow ()
{
	clearTimeout(t);
}


add_load_event (init_ss);




