var Mouse = function() {
	var pub = {};
	var sfx_over = "h";
	var getOverName = function(url) {
		var div  = url.lastIndexOf(".");
		var over = url.substring(0,div);
		var ext  = url.substring(div);
		return over.concat(sfx_over + ext);
	}
	var getSrcURL = function(val) {
		if(val.match(/^url\([\s\"\']*([^\'\"\s\)]*)/)) {
			return RegExp.$1;
		}
		else if(val.match(/^progid\:.+\([\s\,]*src[\=\s\"\']+([^\,\'\"\s\)]*)/)) {
			return RegExp.$1;
		}
		else {
			return val;
		}
	}
	pub.addEvent = function(name,func,obj) {
		if(!obj) obj = window;
		if(obj.attachEvent) {
			obj.attachEvent("on" + name,func);
		}
		else if(obj.addEventListener) {
			obj.addEventListener(name,func,false);
		}
	}
	pub.setSwapEvents = function() {
		var obj = System.getClass("swap");
		var pre = new Array();
		var tmp;
		for(var i in obj) {
			var e = obj[i];
			var src  = e.src || e.style.backgroundIamge || e.style.filter;
			src = getSrcURL(src);
			var over = getOverName(src);
			e.setAttribute("hsrc",over);
			pre[i]     = new Image();
			pre[i].src = over;
			if(e.tagName == "IMG") {
				e.onmouseover = swapIMG(over);
				e.onmouseout  = swapIMG(src);
			}
			else if(e.style.backgroundImamge) {
				e.onmouseover = swapBG(over);
				e.onmouseout  = swapBG(src);
			}
			else if(e.style.filter) {
				e.onmouseover = swapFIL(over);
				e.onmouseout  = swapFIL(src);
			}
		}
	}
	var swapIMG = function(swap) {
		return function() {
			this.src = swap;
		}
	}
	var swapBG = function(swap) {
		return function() {
			this.style.backgroundImage = "url('" + swap + "')";
		}
	}
	var swapFIL = function(swap) {
		return function() {
			this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + swap + ",sizingmethod=scale)";
		}
	}
	return pub;
}();
new function() {
	function preload() {
		Mouse.setSwapEvents();
	}
	Mouse.addEvent("load",preload);
}
