function setOpacity(item,opacity) {

	if (item.style.opacity) {
        /* CSS3 compatible */
        item.style.opacity = opacity/100;
	}else if(document.all) {
        item.style.filter="alpha(opacity='+opacity+')";
	}else if (typeof item.style.MozOpacity != 'undefined') {
        item.style.MozOpacity = opacity/100.0;
	}
}

var slideElement = function(_id,_alpha) {

	this.alpha=_alpha;
	this.id = _id;

	if (document.getElementById) {
		this.obj = document.getElementById(_id);
		this.style = document.getElementById(_id).style;
	}else if (document.all) {
		this.obj = document.all[_id];
		this.style = document.all[_id].style;
	}else if (document.layers) {
		this.obj = document.layers[_id];
		this.style = document.layers[_id];
	}
}

var slideShow = function() {
   /**
   **    @author Danny Dorfel
   **/
    var SLIDE_PAUSE = 5000;
	var SLIDE_INTERVAL = 40;
	var OPACITY_CHANGE = 2;
	var OPACITY_SWITCH = [];
	var LINEUP = 'sequence';
	var sequence = 0;
	var seqIndex = 0;
	var faderOn = false;
	var images;
	var _nextImage=0;
	var elements = []; // the visual elements
	var faderElements = []; // the elements used to crossfade
	var currentElement = 0;
	var imagebg = [];

	this.setImages = function (_images) {

	  	var d=document;

		for (var i=0;i<_images.length;i++) {
			imagebg[i]=new Image();
			imagebg[i].src=_images[i];
		}
		pDomApi.addEvent(window, 'unload', function () { delete imagebg; });
	};

	this.setElements = function (_elements)	{
		for (var j=0;j<_elements.length;j++) {
			elements[j] = new slideElement(_elements[j], 100);
			elements[j].image = -1;
		}

		for (var i=0; i < elements.length; i++) {
			elements[i].image = this.getNextImage();
			elements[i].obj.appendChild(imagebg[elements[i].image]);
		}

		_nextImage = elements.length%imagebg.length;
	};

	this.setFaderElements = function (_elements) {
		for (var j=0;j<_elements.length;j++) {
			var i = faderElements.length;
			faderElements[j] = new slideElement(_elements[j],0);
			faderElements[j].image = -1;
			OPACITY_SWITCH[j] = 1;
		}

		for (var i=0; i < faderElements.length; i++) {
			faderElements[i].image = this.getNextImage();
			faderElements[i].obj.appendChild(imagebg[faderElements[i].image]);
			setOpacity(faderElements[currentElement],faderElements[currentElement].alpha);

//			faderElements[i].alpha = 100; // replace later with fade-in
		}
		_nextImage = (i + _nextImage)%imagebg.length;
	};

	this.setLineup = function(_lineup,_sequence) {
      	if (!_sequence) {
       		_sequence=0;
       	}
       	LINEUP = _lineup;
       	sequence = _sequence;
	};

	this.setInterval = function(_interval){
       SLIDE_INTERVAL = _interval;
	};

	this.setPauseInterval = function(_pauze){
       SLIDE_PAUSE = _pauze;
	};

	this.getNextImage = function()	{
		_nextImage++;
		return _nextImage%imagebg.length;
	};

	this.fade = function(_element) {
		elements[currentElement].alpha -= OPACITY_CHANGE * OPACITY_SWITCH[currentElement];
		setOpacity(elements[currentElement],elements[currentElement].alpha);
		faderElements[currentElement].alpha += OPACITY_CHANGE * OPACITY_SWITCH[currentElement];
		setOpacity(faderElements[currentElement],faderElements[currentElement].alpha);
		var me = this;
		if (OPACITY_SWITCH[currentElement] > 0) {
			if (elements[currentElement].alpha > 0) {
				var t=setTimeout(function() { me.fade(); },SLIDE_INTERVAL);
			}else{
				var t=setTimeout(function() { me.fader(); },SLIDE_PAUSE);
				elements[currentElement].alpha = 0;
			}
		}else{
			if (elements[currentElement].alpha < 100) {
				var t=setTimeout(function() { me.fade(); },SLIDE_INTERVAL);
			}else{
				var t=setTimeout(function() { me.fader(); },SLIDE_PAUSE);
				elements[currentElement].alpha = 100;
			}
		}
	};

	this.cleanupElement = function(el) {
   			while ( el.childNodes.length >= 1 ) {
       			el.removeChild( el.firstChild );
       		}
	};

	this.fader = function () {
		if (! faderOn)	{
			faderOn=true;
			this.fade(currentElement);
		}else{

			if (OPACITY_SWITCH[currentElement]>0) {
				this.cleanupElement(elements[currentElement].obj);
				elements[currentElement].image = this.getNextImage();
				elements[currentElement].obj.appendChild(imagebg[elements[currentElement].image]);
			}else {
				this.cleanupElement(faderElements[currentElement].obj);
				faderElements[currentElement].image = this.getNextImage();
				faderElements[currentElement].obj.appendChild(imagebg[faderElements[currentElement].image]);
			}

			OPACITY_SWITCH[currentElement] *= -1;
			if ((LINEUP=='predefined')&&(sequence==0)) {
				LINEUP = 'sequence';
			}
			switch (LINEUP) {
				case 'random':
					do {
						nextElement = Math.floor( Math.random()*100 ) % elements.length;
					} while (nextElement==currentElement);
                   currentElement = nextElement;
				break;

				case 'sequence':
					currentElement++;
					currentElement %= elements.length;
				break;

				case 'predefined':
					seqIndex++;
					seqIndex %= sequence.length;
					currentElement = sequence[seqIndex];
				break;
			}
			this.fade(currentElement);
		}
	};
	this.start = function () {
		if (LINEUP=='predefined') {
			currentElement = sequence[seqIndex];
		}
		var me = this;
		t=setTimeout(function() { me.fader(); },SLIDE_PAUSE);
	};
};

function initSlideShow() {
	el = document.getElementById('slideshow');
	img1 = document.createElement("div");
	img1.setAttribute('id', 'slide1');
	img1.setAttribute('class', 'slideImages');
	img2 = document.createElement("div");
	img2.setAttribute('id', 'slide2');
	img2.setAttribute('class', 'slideImages');

	el.appendChild(img1);
	el.appendChild(img2);

	if (slideImages.length >= 2)	{
		var slideshow = new slideShow();
		slideshow.setImages(slideImages);
		slideshow.setElements(['slide1']);
		slideshow.setFaderElements(['slide2']);
		slideshow.setInterval('55');
		slideshow.setPauseInterval('5000');
		slideshow.start();
	}
}