//<![CDATA[
function RollOver() {
	this.objectMap = new Hash();
}

RollOver.prototype.add = function(imageObj, rollOverImage) {
	var args = $A(arguments);
	imageObj = $(imageObj);
	var objId = imageObj.identify();
	var rollOutImageObj = new Image();
	rollOutImageObj.src = imageObj.src;
	var rollOverImageObj = new Image();
	rollOverImageObj.src = rollOverImage;
	
	var mouseOverFunc = RollOver.MouseOverFunc.bindAsEventListener(this, objId);
	var mouseOutFunc = RollOver.MouseOutFunc.bindAsEventListener(this, objId);
	
	Event.observe(imageObj, 'mouseover', mouseOverFunc);
	Event.observe(imageObj, 'mouseout', mouseOutFunc);
	
	this.objectMap.set(objId, {
		'imageObj': imageObj,
		'rollOverImage': rollOverImageObj,
		'rollOutImage': rollOutImageObj,
		'mouseOverFunc': mouseOverFunc,
		'mouseOutFunc': mouseOutFunc
	});
};

RollOver.prototype.unload = function() {
	this.objectMap.each(function(pair) {
		Event.stopObserve(pair.value.imageObj, 'mouseover', pair.value.mouseOverFunc);
		Event.stopObserve(pair.value.imageObj, 'mouseout', pair.value.mouseOutFunc);
	});
};

RollOver.MouseOverFunc = function(event) {
	var args = $A(arguments);
	args.shift();
	
	var objId = args[0];
	var objItem = this.objectMap.get(objId);
	
	if (objItem != null) {
		objItem.imageObj.src = objItem.rollOverImage.src;
	}
};

RollOver.MouseOutFunc = function(event) {
	var args = $A(arguments);
	args.shift();
	
	var objId = args[0];
	var objItem = this.objectMap.get(objId);
	
	if (objItem != null) {
		objItem.imageObj.src = objItem.rollOutImage.src;
	}
};

var SR = {
	imageObjHash: new Hash(),
	
	swapImage: function(obj, imageUrl) {
		var imageObj = this.imageObjHash.get(imageUrl);
		if (imageObj != null) {
			obj.src = imageObj.src;
			return;
		}
		
		imageObj = new Image();
		imageObj.src = imageUrl;
		obj.src = imageObj.src;
		
		this.imageObjHash.set(imageUrl, imageObj);
	}
};
//]]>