(function($) {
	$.fn.hoverimage = function(opts) {
		var default_opts = { current: '', fixed: '', on: '_on', off: '_off' };
		var icache = new Array();

		opts = $.extend(default_opts, opts || {});

		var image_name = function(src, onoff) {
			var re = new RegExp('(.+)' + opts.off + '(\.[^\.]+)$');
			var m = src.match(re);
			return m[1] + onoff + m[2];
		}

		var is_current = function(src) {
			var re = new RegExp('([^/]+)'+opts.off+'(\.[^\.]+)$');
			var m = src.match(re);

			return m[1] == opts.current;
		}

		return this.filter("[src*=" + opts.off + "]").each(function(i) {
			if (is_current(this.src)) {
				this.src = image_name(this.src, opts.fixed);
			} else {
				var imgsrc_off = this.src;
				var imgsrc_on = image_name(this.src, opts.on);

				icache[i] = new Image();
				icache[i].src = imgsrc_on;
				$(this).hover(
					function() { this.src = imgsrc_on; },
					function() { this.src = imgsrc_off; }
				);
			}
		});
	}
})(jQuery);

