function addEvent(el, evtType, func) {
	if (el.addEventListener) {
		el.addEventListener(evtType, func, true);
	} else if (el.attachEvent) {
		el.attachEvent('on' + evtType, func);
	} else {
		el['on' + evtType] = func;
	}
};

function SlideShow(slideel, fadingSpeed, stopTime, stopOnMouseOver) {
	var mouseIsOver = false;
	var nexttime= null;

	if (stopOnMouseOver) {
		addEvent(slideel, 'mouseover', function() {
			mouseIsOver = true;
		});

		addEvent(slideel, 'mouseout', function() {
			mouseIsOver = false;
			if(nexttime!==null) {
				window.clearTimeout(nexttime);
				self.next();
			}
		});
	}
	
	this.next = function() {
		nexttime= null;
		if (mouseIsOver) {
			window.setTimeout(function() {self.next();}, 750);
			return;
		}
		this.current.stop();
		this.current = this.current.nextSlide;
		this.current.start();
	};
   
	function createSlides() {
		function Slide(img, slideShow) {
			if(img.style) {
				img.style.opacity = '0';
			}
			if(img.filters) {
				img.filters.alpha.opacity = '0';
			}

			this.start = function() {
				window.setTimeout(function() {
					fadeIn(40);
				}, fadingSpeed);
			};

			this.stop = function() {
				window.setTimeout(function() {
					fadeOut(40);
				}, fadingSpeed);
			};
			function fadeIn(i) {
				if(img.style) {
					img.style.opacity = 1 - i/40;
				}
				if(img.filters) {
					img.filters.alpha.opacity = (1 - i/40)*100;
				}
				
				if(--i>=0) {
					window.setTimeout(function() {
						fadeIn(i);
					}, fadingSpeed);
				} else {
					nexttime= window.setTimeout(function() {
						self.next();
					}, 20 * fadingSpeed + stopTime);
				}
			}       
			function fadeOut(i) {
				outtime= null;
				if(img.style) {
					img.style.opacity = i/40;
				}
				if(img.filters) {
					img.filters.alpha.opacity = (i/40)*100;
				}
				if(--i>=0) {
					window.setTimeout(function() {
						fadeOut(i);
					}, fadingSpeed);
				}
			}
		}
		
		var imgs = slideel.getElementsByTagName('img');
		var slides = [];
		var i;
		
		for (i = 0; i < imgs.length; i++) { 
			slides[i] = new Slide(imgs[i], self);
		}
	   
		for (i = 0; i < slides.length; i++) {
			if (i == slides.length - 1) {
				slides[i].nextSlide = slides[0];
			}
			else {
				slides[i].nextSlide = slides[i + 1];
			}
		}
	   
		self.current =  slides[0];
		slides[0].start();
	}
   
	var self = this;
	createSlides(slideel);
}
