var ImageChanger = function(imgNode2, images, options) {
	if (window==this) {
		return new ImageChanger(imgNode2, 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 imgNode2 == 'string' ? document.getElementById(imgNode2) : imgNode2;
	if (!imgNode) {
		if (window.console && window.console.log) {
			window.console.log('ImageChanger: imgNode not found: ', arguments[0]);
		}
		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.match(/blank\.(png|gif)$/) && imgNode.filters) {
			// set image as filter
			imgNode.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgUrl;
		} else 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.previous = function() {
		if (currentImage == 0) {
			currentImage = img.length - 1;
		} else {
			--currentImage;
		}

		return this.change(currentImage);
	};

	this.getCount = function() {
		return img.length;
	};

	this.getCurrent = function() {
		return currentImage;
	};

	this.isNone = function() {
		return currentImage == -1;
	};

	this.isFirst = function() {
		return currentImage == 0;
	};

	this.isLast = function() {
		return currentImage == img.length - 1;
	};

};
