
function setRollovers(opts) {
	
	if (!opts) opts = {};
	opts.rolloverClass               = opts.rolloverClass              || 'btn';
	opts.defaultRolloverImageSuffix  = opts.defaultRolloverImageSuffix || '_o';
	
	var targetImageIdSuffixRe = new RegExp('_' + opts.rolloverClass + '$');
	
	setRolloversByTagName('img',   function(image) {return (true);                 });
	setRolloversByTagName('input', function(input) {return (input.type == 'image');});
	
	function setRolloversByTagName(targetTag, isRolloverObject) {
		var aImages = document.getElementsByTagName(targetTag);
		for (var i = 0, n = aImages.length; i < n; i++) {
			var image = aImages[i];
			if (!image.className) continue;
			if (!getRolloverClass(image)) continue;
			if (!isRolloverObject(image)) continue;
			if (image.useMap) {
				setRolloversClickableMap(image);
				continue;
			}
			setRollover(image);
		}
	}
	
	function getRolloverClass(anObject) {
		var rolloverClassRe = new RegExp('^(' + opts.rolloverClass + ')(.*)');
		if (!anObject.className) return null;
		var classNames = anObject.className.split(' ');
		for (var i = 0, n = classNames.length; i < n; i++) {
			var classNameElements = classNames[i].match(rolloverClassRe);
			if (classNameElements) return classNameElements;
		}
		return null;
	}
	
	function setRolloversClickableMap(image) {
		var mapId = image.useMap.match(/^\#(.*)/)[1];
		var areas = document.getElementsByName(mapId).item(0).areas;
		for (var i = 0, n = areas.length; i < n; i++) {
			if (getRolloverClass(areas[i])) {
				setRollover(image, areas[i]);
			}
		}
	}
	
	function setRollover(targetImage, eventCaptureObject) {
		var src = targetImage.src;
		var targetImageId = targetImage.getAttribute('id') || '';
		var eventCaptureId = (targetImageId.match(targetImageIdSuffixRe))
			? targetImageId.replace(targetImageIdSuffixRe, '')
			: '';
		
		eventCaptureObject
			= document.getElementById(eventCaptureId)
			|| eventCaptureObject
			|| targetImage;
		
		var rolloverImageSuffix = getRolloverClass(eventCaptureObject)[2]
			|| opts.defaultRolloverImageSuffix;
		
		var ftype = src.substring(src.lastIndexOf('.'), src.length);
		var hsrc = src.replace(ftype, rolloverImageSuffix + ftype);
		var mouseoverImage = new Image();
		var mouseoutImage  = new Image();
		
		mouseoverImage.src = hsrc;
		mouseoutImage.src  = src;
		
		eventCaptureObject.onmouseover = function() {
			targetImage.src = hsrc;
		}
		
		eventCaptureObject.onmouseout = function() {
			targetImage.src = src;
		}
	}
}

$(function() {
	setRollovers();
	$('a').focus(function(){this.blur();});
});
