var ImageChanger = function(imgNode, images, options) {
	if (window==this) {
		return new ImageChanger(imgNode, images, options);
	}
	
	var prefix = typeof options.prefix != 'undefined' ? options.prefix : 'img_';
	var klass = typeof options.className != 'undefined' ? options.className : 'active';
	var active = typeof options.active != 'undefined' ? options.active : '';
	var onUpdate = typeof options.onUpdate == 'function' ? options.onUpdate : function() {};
	
	imgNode = typeof imgNode == 'string' ? document.getElementById(imgNode) : imgNode;
	if (!imgNode) return false;
	
	var currentImage = 0;
	
	if (active && active>0 && active<images.length) {
		currentImage = active;
	}
	
	this.change = function(id) {
		var node = document.getElementById(prefix+id);
		
		if (node) node.blur();
		
		var imgUrl = images[id] ? images[id].src : null;
		var imgTitle = images[id] ? images[id].title : null;
		
		if (imgNode.src != imgUrl) {
			imgNode.src = imgUrl;
		}
		
		if (imgNode.title != imgTitle) {
			imgNode.title = imgTitle;
		}
		
		if (document.getElementById('imagetitle')) {
			document.getElementById('imagetitle').innerHTML = imgTitle;
		}
		
		if (node && node.parentNode) {
			var children = node.parentNode.childNodes;
			var regexp   = new RegExp('(^|\\s)' + klass + '(?:\\s|$)');
			for (var i=0; i<children.length; ++i) {
				if (children[i].className) {
					children[i].className = children[i].className.replace(regexp, '$1');
				}
			}
			
			node.className = node.className + ' ' + klass;
		}
		
		currentImage = id;
		
		onUpdate(imgNode);
		
		return false;
	};
	
	this.next = function() {
		++currentImage;
		if (currentImage >= img.length) {
			currentImage = 0;
		}
		
		return this.change(currentImage);
	};
	
	this.prev = function() {
		--currentImage;
		if (currentImage < 0) {
			currentImage = img.length-1;
		}
		
		return this.change(currentImage);
	};
};
