
var SwapImageObserver = Class.create();

SwapImageObserver.prototype.initialize = function() {
	this.preloadImage();
	this.setActiveImage();
}



SwapImageObserver.prototype.preloadImage = function() {
	var nodes = document.getElementsByTagName('*');
	for(var i=0; i<nodes.length; i++) {
		var node = nodes[i];
		var funcStr = node.getAttribute('onmouseover');
		if(funcStr) {
			funcStr.toString().match(/swapImage\((.+)\)/);
			var args  = RegExp.$1;
			if(!args) { continue; }
			
			var array = eval('[' + args + ']');
			var path  = node.src.match(/.*\//);
			for(var n=0; n<array.length; n++) {
				var preload = new Image();
				preload.src = (path + array[n][1]);
			}
		}
	}
}



SwapImageObserver.prototype.setActiveImage = function() {
	var baseClassNames = Element.classNames(document.body).toArray();
	for(var i=0; i<baseClassNames.length; i++) {
		var nodes = document.getElementsByClassName(baseClassNames[i]);
		for(var n=0; n<nodes.length; n++) {
			var node    = nodes[n];
			var funcStr = node.getAttribute('onmouseover');
			if(funcStr) {
				funcStr.toString().match(/swapImage\((.+)\)/);
				var args  = RegExp.$1;
				node.__isCurrent = true;
				node.onmouseover();
			}
		}
	}
}




function swapImage() {
	var self     = this;
	var nodes    = new Array();
	var baseNode = arguments[0][0];
	var bool     = arguments[arguments.length-1];
	var flag     = Boolean(bool === true);
	
	for(var i=0; i<arguments.length; i++) {
		var array = arguments[i];
		var node  = array[0];
		var img   = array[1];

		if(typeof(node) == 'string') { node = $(node); }
		
		var dir = node.src.match(/.*\//);
		
		node.__orgimg = node.src;
		node.src      = dir + img;
		
		nodes.push(node);
	}
	
	if(!baseNode.__isMouseoutEvent && !baseNode.__isCurrent && !flag) {
		baseNode.__isMouseoutEvent = true;
		Event.observe(baseNode,	'mouseout',	function(){ replaceImage(nodes); }, false);
	}
}

function replaceImage(array) {
	for(var i=0; i<array.length; i++) {
		var node = array[i];
		node.src = node.__orgimg;
	}
}




Event.observe(
	window,
	'load',
	function() {
		var swapImageOvserver = new SwapImageObserver();
	},
	false
);







