/**
 * [ROLLOVER IMAGE ENGINE JS for prototype.js]
 * Version 3.0
 * 
 * @author	Tom Goodsun (http://www.tom-gs.com/)
 * @date	2009.06.01
 **/
var RolloverImageEngine = {
	options: {
		imageClassName: "rollover",
		onOverName: "over",
		onOutName: "out",
		onActiveName : "active",
		activeOptionName : "roi-active",
		reverseActive: false
	},
	mOutImages: {},
	mOverImages: {},
	mActiveImages: {},
	initialize: function(options){
		this.mergeOptions(options);
		var imageElements = $$("img." + this.options.imageClassName);
		for (var i = 0; i < imageElements.length; i++){
			if (imageElements[i].src.match(new RegExp("/" + this.options.onOutName + "/"))){
				var index = imageElements[i].src.substr(imageElements[i].src.lastIndexOf("/"), imageElements[i].src.length - 1);

				this.mOutImages[index] = new Image();
				this.mOutImages[index].src = imageElements[i].src;
				Event.observe(imageElements[i], "mouseout", function(){RolloverImageEngine.changeOnOut(this);});

				this.mOverImages[index] = new Image();
				this.mOverImages[index].src = imageElements[i].src.replace("/" + this.options.onOutName + "/", "/" + this.options.onOverName + "/");
				Event.observe(imageElements[i], "mouseover", function(){RolloverImageEngine.changeOnOver(this);});

				var activeOption = imageElements[i].className.match(new RegExp(this.options.activeOptionName));
				if (this.options.reverseActive){
					activeOption = !activeOption;
				}
				if (activeOption){
					this.mActiveImages[index] = new Image();
					this.mActiveImages[index].src = imageElements[i].src.replace("/" + this.options.onOutName + "/", "/" + this.options.onActiveName + "/");
					Event.observe(imageElements[i], "mousedown", function(){RolloverImageEngine.changeOnActive(this);});
				}
			}
		}
	},
	mergeOptions: function(options){
		for (i in options){
			this.options[i] = options[i];
		}
	},
	changeOnOver: function(e){
		e.src = this.mOverImages[e.src.substr(e.src.lastIndexOf("/"), e.src.length - 1)].src;
	},
	changeOnOut: function(e){
		e.src = this.mOutImages[e.src.substr(e.src.lastIndexOf("/"), e.src.length - 1)].src;
	},
	changeOnActive: function(e){
		e.src = this.mActiveImages[e.src.substr(e.src.lastIndexOf("/"), e.src.length - 1)].src;
	}
}

