function TransitionManager(element, halftime) {
	var transitions = [];
	var state = 0;
	var interval;

	this.run = function(transition) {
		transitions.push(transition);
		if (!interval) {
			interval = setInterval(onTick,25);
		}
	}
	
	function onChange(value) {
		element.style.opacity = value;
		element.style.filter = "alpha(opacity=" + Math.round(value*100) + ")";
	}
	
	function onTick() {
		if (transitions.length > 0) {
			/* очередной шаг исчезновение слайда */
			state = state + 25;			
			if (state < halftime) {
				onChange(1 - state/halftime);
			} else {
				onChange(0);
				/* смена слайдов */
				while (transitions.length > 0) {
					transitions.shift()();
				}
			}
		} else {
			/* очередной шаг появления слайда */
			state = state - 25;
			if (state > 0) {
				onChange(1 - state/halftime);
			} else {
				/* последний шаг */
				onChange(1);
				clearInterval(interval);
				interval = null;
			}
		}
	}
}

function Slideshow(id, images, time) {

	var element = document.getElementById(id);
	
	var transition_manager = new TransitionManager(element, 500);

	var image_index = 0;				
	
	next = function () {
		image_index = (image_index < images.length - 1) ? image_index + 1 : 0;
		transition_manager.run(function() {
			element.src = images[image_index];
		});
		
		clearTimeout(timeout);
		timeout = setTimeout(next, time);
	}

	var timeout = setTimeout(next, time)

	element.onclick = next;
	
}

