function SlideshowObjekt(slides, slideDurations, effectDurations, effectNames,
		showSlide, index) {
	this.controlbuttons = document.getElementById("slideshowControlButtons"
			+ index);
	this.playbutton = new Array(
			this.controlbuttons.childNodes[1].childNodes[0],
			this.controlbuttons.childNodes[1].childNodes[1]);
	this.pausebutton = new Array(
			this.controlbuttons.childNodes[0].childNodes[0],
			this.controlbuttons.childNodes[0].childNodes[1]);
	this.fastforwardbutton = new Array(
			this.controlbuttons.childNodes[3].childNodes[0],
			this.controlbuttons.childNodes[3].childNodes[1]);
	this.rewindbutton = new Array(
			this.controlbuttons.childNodes[2].childNodes[0],
			this.controlbuttons.childNodes[2].childNodes[1]);

	this.playbutton[0].style.width = 0;
	this.playbutton[1].style.width = "auto";
	this.pausebutton[0].style.width = "auto";
	this.pausebutton[1].style.width = 0;
	this.fastforwardbutton[0].style.width = "auto";
	this.fastforwardbutton[1].style.width = 0;
	this.rewindbutton[0].style.width = "auto";
	this.rewindbutton[1].style.width = 0;

	this.outer = document.getElementById("slideshowOuter" + index);
	this.inner = document.getElementById("slideshowItems" + index);
	this.slideDurations = slideDurations;
	this.effectDurations = effectDurations;
	this.effectNames = effectNames;
	this.effect = null;
	this.items = slides;
	this.index = index;
	this.showSlide = showSlide;
	this.pos = this.getNextSlide(items.length - 1);
	this.items[this.pos].style.zIndex = 10;
	Event.observe(window, 'load', new Function("slideshow[" + index + "].init()"));
}

SlideshowObjekt.prototype.getNextSlide = function(currentSlide) {
	with (this) {
		for ( var x = (currentSlide + 1) % items.length; x != currentSlide; x = (x + 1)
				% items.length) {
			if (showSlide[x] == 1)
				return x;
		}
		return currentSlide;
	}
}

SlideshowObjekt.prototype.getPreviousSlide = function(currentSlide) {
	with (this) {
		for ( var x = (currentSlide + items.length - 1) % items.length; x != currentSlide; x = (x
				+ items.length - 1)
				% items.length) {
			if (showSlide[x] == 1)
				return x;
		}
		return currentSlide;
	}
}

SlideshowObjekt.prototype.init = function() {
	with (this) {
		// Containerhöhe zurücksetzen
		outer.style.height = 'auto';
		inner.style.height = 'auto';

		var maxheight = 0;
		var maxwidth = 0;
		// maximale Höhe / Breite der Slides ermitteln
		for ( var x = 0; x < items.length; x++) {
			// zunächst Höhe und Breite des Elements auf "auto"matisch stellen
			items[x].style.height = 'auto';
			items[x].style.width = 'auto';

			if (items[x].offsetHeight > maxheight) {
				maxheight = items[x].offsetHeight;
			}
			if (items[x].offsetWidth > maxwidth) {
				maxwidth = items[x].offsetWidth;
			}
		}

		// und diese für alle Slides setzen
		if (maxheight > 0) {
			if (outer.style.height != maxheight + 'px') {
				outer.style.height = maxheight + 'px';
				inner.style.height = maxheight + 'px';
			}
			for ( var x = 0; x < items.length; x++) {
				items[x].style.height = maxheight + 'px';
				items[x].style.visibility = "visible";
				if(x != 0) {
					items[x].style.display = "none";
				}
			}
		}
		if (maxwidth > 0) {
			inner.style.width = maxwidth + 'px';
			for ( var x = 0; x < items.length; x++) {
				items[x].style.width = maxwidth + 'px';
			}
		}
	}
	this.timer = setTimeout("slideshow[" + this.index + "].update()", this.slideDurations[this.pos] * 1000);
}

SlideshowObjekt.prototype.switchslides = function(oldpos, newpos) {
	with (this) {
		items[oldpos].style.zIndex = 9;
		items[newpos].style.zIndex = 10;
		var initialWidth = $(items[newpos]).getWidth();
		switch (effectNames[newpos]) {
		case "slide":
			$(items[newpos]).setStyle({left: '-'+initialWidth+'px', display: 'block'});
			effect = new Effect.Move($(items[newpos]), {
				x: initialWidth,
				duration: effectDurations[newpos],
				afterFinish: function() {
					items[oldpos].style.display = "none";
					pos = newpos;
				}
			});
			break;
		case "blinds":
			$(items[newpos]).makeClipping().setStyle({width: 0, display: 'block'});
			effect = new Effect.Morph($(items[newpos]), {
				style: "width: "+initialWidth+"px;",
				duration: effectDurations[newpos],
				afterFinish: function() {
					items[oldpos].style.display = "none";
					pos = newpos;
				}
			});
			break;
		default:
		case "fade":
			$(items[newpos]).setStyle({opacity: 0, display: 'block'});
			effect = new Effect.Morph($(items[newpos]), {
				style: "opacity: 1;",
				duration: effectDurations[newpos],
				afterFinish: function() {
					items[oldpos].style.display = "none";
					pos = newpos;
				}
			});
			break;
		case "stretch":
			$(items[newpos]).setStyle({width: 0, overflow: 'hidden', display: 'block'});
			effect = new Effect.Scale($(items[newpos]), 100, {
				scaleY: false,
				scaleFromCenter: true,
				scaleMode: {originalWidth: initialWidth},
				scaleFrom: 0,
				duration: effectDurations[newpos],
				afterFinish: function() {
					items[oldpos].style.display = "none";
					pos = newpos;
				}
			});
			break;
		case "shrink":
			items[oldpos].style.zIndex = 10;
			items[newpos].style.zIndex = 9;
			$(items[newpos]).setStyle({display: 'block'});
			effect = new Effect.Shrink($(items[oldpos]), {
				direction: 'center',
				duration: effectDurations[newpos],
				afterFinish: function() {
					pos = newpos;
				}
			});
			break;
		case "puff":
			items[oldpos].style.zIndex = 10;
			items[newpos].style.zIndex = 9;
			$(items[newpos]).setStyle({display: 'block'});
			effect = new Effect.Puff($(items[oldpos]), {
				duration: effectDurations[newpos],
				afterFinish: function() {
					pos = newpos;
				}
			});
			break;
		case "squish":
			items[oldpos].style.zIndex = 10;
			items[newpos].style.zIndex = 9;
			$(items[newpos]).setStyle({display: 'block'});
			effect = new Effect.Squish($(items[oldpos]), {
				duration: effectDurations[newpos],
				afterFinish: function() {
					pos = newpos;
				}
			});
			break;
		case "dropOut":
			items[oldpos].style.zIndex = 10;
			items[newpos].style.zIndex = 9;
			$(items[newpos]).setStyle({display: 'block'});
			effect = new Effect.DropOut($(items[oldpos]), {
				duration: effectDurations[newpos],
				afterFinish: function() {
					pos = newpos;
				}
			});
			break;
		case "fold":
			items[oldpos].style.zIndex = 10;
			items[newpos].style.zIndex = 9;
			$(items[newpos]).setStyle({display: 'block'});
			effect = new Effect.Fold($(items[oldpos]), {
				duration: effectDurations[newpos],
				afterFinish: function() {
					pos = newpos;
				}
			});
			break;
		}
	}
}

SlideshowObjekt.prototype.update = function() {
	with (this) {
		var newpos = getNextSlide(pos);
		switchslides(pos, newpos);
		timer = setTimeout("slideshow[" + index + "].update()",
				slideDurations[newpos] * 1000);
		pos = newpos;
	}
}

SlideshowObjekt.prototype.fastforward = function() {
	with (this) {
		pause();
		var newpos = getNextSlide(pos);
		switchslides(pos, newpos);
		pos = newpos;
	}
}

SlideshowObjekt.prototype.rewind = function() {
	with (this) {
		pause();
		var newpos = getPreviousSlide(pos);
		switchslides(pos, newpos);
		pos = newpos;
	}
}

SlideshowObjekt.prototype.pause = function() {
	with (this) {
		playbutton[0].style.width = "auto";
		playbutton[1].style.width = 0;
		pausebutton[0].style.width = 0;
		pausebutton[1].style.width = "auto";
		clearTimeout(timer);
	}
}

SlideshowObjekt.prototype.play = function() {
	with (this) {
		playbutton[0].style.width = 0;
		playbutton[1].style.width = "auto";
		pausebutton[0].style.width = "auto";
		pausebutton[1].style.width = 0;
		clearTimeout(timer);
		update();
	}
}
