
//
// Created on: 2008-06-25
// Author: 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.
// Es ist auch möglich, eine Galerie automatisch abspielen zu lassen. Hierzu muß
// die CSS-Klasse "autoplay" zur ul-Definition hinzugefügt werden.
//
// ***
//
// LAST UPDATE: 2009-09-23, The time a picture needs to blend in from 0 to 100 %
// 	visibility can now get controlled via the ss_blendin_time variable.
//


var ss_default_timer	= 2500;		/* Schnelligkeit des Bildwechsels */
var ss_index		= Array ();	/* index of current picture */
ss_index [0]		= 0;
var ss_multi		= false;	/* Mehrere Slideshows aktiv? */
var ss_timeout		= false;
var ss_folge		= false;	/* Tabelle, welches Bild folgt? */
if (window.ss_stop_on_hover == undefined) {
	var ss_stop_on_hover = false;	/* stop on image-hover? */
}
if (window.ss_blendin_time == undefined) {
	var ss_blendin_time = 800;
}

/* Sind die ID's für den Slideshow-DIV-Container und 
 * für das Hauptbild gesetzt? */
if (window.ss_bgid == undefined) {
	var ss_bgid = "hauptbild_bg";
}
if (window.ss_picid == undefined) {
	var ss_picid = "hauptbild";
}


/* 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;
	}


	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;
	}


	var bild_bg	= document.getElementById (ss_bgid);
	var bild	= document.getElementById (ss_picid);
	var imglist	= null;
	var bilder	= null;
	var bildanz	= null;
	var ist_galerie	= false;
	var mit_liste	= false;
	var autoplay	= true;
	var i		= 0;
	var j		= 0;
	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+"')";

				if (bilder [j].className.indexOf 
						("naechstesbild") != -1)
				{
					if (!isArray (ss_folge [i])) {
						ss_folge [i] = Array ();
					}
					ss_folge [i] [j] = bilder [j].rel;
				}

				++j;
			}
		}

		if (imglist.className.indexOf ("galerie") != -1) {
			ist_galerie	= true;
			mit_liste	=
				(imglist.className.indexOf ("mit_liste") != -1)
				? true
				: false;
			ohne_buttons	=
				(imglist.className.indexOf ("ohne_buttons") 
					 != -1)
				? true
				: false;
			if (!mit_liste) {
				imglist.style.display	= "none";
				bild	= (i>0) 
					? document.getElementById (ss_picid+i)
					: document.getElementById (ss_picid);
			}
			if (!ohne_buttons) {
				bild_bg.innerHTML	= bild_bg.innerHTML+
					"<div id='ss_buttons'"+i+"' "+
					"class='ss_buttons'>"+
					"<a href='#' onclick='ss_switch("+i+
					",-1)'><img src='images/"+
					"ss_buttons.png' alt='Zur&uuml;ck' "+
					"class='zurueck' /></a><a href='#' "+
					"onclick='ss_switch("+i+",1)'><img "+
					"src='images/ss_buttons.png' alt="+
					"'Vor' class='vor' /></a></div>";
			}

			if (imglist.className.indexOf ("autoplay") != -1) {
				autoplay = true;
				ss_timer [i] = ss_default_timer;
			}
			else {
				autoplay = false;
			}
		}
		else {
			if (imglist) {
				imglist.style.display	= "none";
			}

			if (	i > 0	&&
				!ss_timer [i])
			{
				ss_timer [i] = ss_default_timer;
			}
		}

		if (autoplay) {
			ss_timeout = setTimeout (
				"ss_switch("+i+")",
				ss_timer [i]);

			if (ss_stop_on_hover) {
				eval (	"bild.onmouseover=function()"+
					"{clearTimeout(ss_timeout);};"+
					"bild.onmouseout=function()"+
					"{setTimeout(\"ss_switch("+i+
					")\",0);};");
			}
		}

		bild.src = ss_bilder [i] [ ss_index [i] ];

		++i;
		ist_galerie	= false;
		autoplay	= true;
		var bild_bg	= document.getElementById (ss_picid+i+"_bg");
		var bild	= document.getElementById (ss_picid+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! */
var SS_SPRUNG	= 0x1;
var SS_BILDNR	= 0x2;
var SS_CONTPLAY	= 0x4;
function
ss_switch (i)
{
	var sprung	= (arguments.length >= 2) ? arguments [1] : null;
	var bildnr	= (arguments.length >= 3) ? arguments [2] : null;
	var contplay	= (arguments.length >= 4) ? arguments [3] : null;
	var bitmask	= (arguments.length >= 5) ? arguments [4] : null;

	var bg		= (i>0) ? ss_picid+i+"_bg" : ss_bgid;
	var bild	= (i>0) ? ss_picid+i : ss_picid;

	document.getElementById (bg).style.backgroundImage = 
		"url("+ss_bilder [i] [ ss_index [i] ]+")";
	if (sprung) {
		ss_index [i] += sprung;
		clearTimeout (ss_timeout);
	}
	else if (bildnr ||
		bitmask & SS_BILDNR)
	{
		if (!bildnr) {
			bildnr = 0;
		}
		ss_index [i] = bildnr;
		clearTimeout (ss_timeout);
	}
	else {
		if (	ss_folge &&
			ss_folge [i] [ ss_index [i] ])
		{
			ss_index [i] = ss_folge [i] [ ss_index [i] ];
		}
		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, ss_blendin_time);
	if (!sprung && !bildnr && !(bitmask & SS_BILDNR) || contplay)
	{
		ss_timeout = 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;

	changeOpacity(0, container_id);

	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 + ")";
}



add_load_event (init_ss);



