Slideshow = new (function () {
	var slideshows = new Array ();
	
	function createElement (tagName, className, parent) {
		var tag = document.createElement (tagName);
		tag.className = className;
		if (parent) {
			parent.appendChild (tag);
		}
		
		tag.applyCssClass = function () {
			var classes = this.className.split (' ');
			var numClasses = classes.length;
			var classFound = false;
			
			for (var i = 0; i < arguments.length; i++) {
				classFound = false;
				
				for (var j = 0; j < classes.length; j++) {
					if (arguments [i] == classes [j]) {
						classFound = true;
						break;
					}
				}
				
				if (!classFound) {
					classes.push (arguments [i]);
				}
			}
			
			if (numClasses != classes.length) {
				this.className = classes.join (' ');
			}
		};
		
		tag.removeCssClass = function () {
			var classes = this.className.split (' ');
			var numClasses = classes.length;
			
			for (var i = 0; i < arguments.length; i++) {
				for (var j = classes.length - 1; j >= 0; j--) {
					if (arguments [i] == classes [j]) {
						classes.splice (j, 1);
						break;
					}
				}
			}
			
			if (numClasses != classes.length) {
				this.className = classes.join (' ');
			}
		};
		
		return tag;
	}
	
	this.create = function (id, transDelay, transType) {
		var scripts = document.getElementsByTagName ('script');
		var slideshow = new Object ();
		var container = createElement ('div', 'slideshow ' + transType, scripts [scripts.length - 1].parentNode);
			container.id = id;
		
		var frameIndex = 0;
		var currentImage = null;
		var lastImage = null;
		
		
		slideshow.addImage = function (src, caption) {
			var div = createElement ('div', (!currentImage ? 'currentImage' : 'hiddenImage'), container);
			var img = createElement ('img', '', div);
			img.src = src;
			img.alt = img.title = caption;
			
			if (!currentImage) {
				currentImage = div;
			}
		};
		
		slideshow.nextFrame = function () {
			var tempImage = null;
			frameIndex++;
			
			if (frameIndex >= transDelay) {
				if (frameIndex == transDelay) {
					tempImage = currentImage;
					currentImage = currentImage.nextSibling;
					
					if (!currentImage) {
						currentImage = container.childNodes [0];
					}
					
					lastImage = tempImage;
					
					currentImage.className = 'currentImage';
					lastImage.className = 'lastImage';
				}
				var transFrame = frameIndex - transDelay;
				if (transFrame < 10) {
					if (transFrame > 0) {
						container.removeCssClass ('transition-' + (transFrame - 1));
					}
					container.applyCssClass ('transition-' + (transFrame));
				} else {
					frameIndex = 0;
					container.removeCssClass ('transition-9');
					lastImage.className = 'hiddenImage';
				}
			}
		};
		
		slideshows.push (slideshow);
		
		return slideshow;
	};
	
	this.update = function () {
		for (var i = 0; i < slideshows.length; i++) {
			slideshows [i].nextFrame ();
		}
	};
	
	window.setInterval (this.update, 50);
}) ();
