/*
	Standards Compliant Rollover Script
	Author : Daniel Nolan
	http://www.bleedingego.co.uk/webdev.php
*/

function initRollovers() {
	if (!document.getElementById) return
	
	var aPreLoad = new Array();
	var sTempSrc;
	var aImages = document.getElementsByTagName('img');

	for (var i = 0; i < aImages.length; i++) {		
		if (aImages[i].className == 'imgover') {
			var src = aImages[i].getAttribute('src');
			var ftype = src.substring(src.lastIndexOf('.'), src.length);
			var hsrc = src.replace(ftype, '_o'+ftype);

			aImages[i].setAttribute('hsrc', hsrc);
			
			aPreLoad[i] = new Image();
			aPreLoad[i].src = hsrc;
			
			aImages[i].onmouseover = function() {
				sTempSrc = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('hsrc'));
			}	
			
			aImages[i].onmouseout = function() {
				if (!sTempSrc) sTempSrc = this.getAttribute('src').replace('_o'+ftype, ftype);
				this.setAttribute('src', sTempSrc);
			}
		}
	}
}

try{
	window.addEventListener("load",initRollovers,false);
}catch(e){
	window.attachEvent("onload",initRollovers);
}




//コンストラクタ、切り替え対象を指定
MultiRollover = function(_listener)
{
	this.listener_id = _listener;
	this.target_id = "";
	this.sources = [];
}
MultiRollover.prototype = {
	//ロールオーバー対象を指定
	addTarget: function(_target)
	{
		this.target_id = _target;
	},
	//切り替え画像を指定
	addSource: function()
	{
		for(var i=0; i<arguments.length; i++)
		{
			this.sources.push(arguments[i]);
		}
	},
	//それぞれのサムネールにイベントを予約
	create: function()
	{
		var listener = document.getElementById(this.listener_id);
		if(document.getElementById(this.target_id))
		{
			var out_target = document.getElementById(this.target_id);
			var over_targets = out_target.getElementsByTagName("a");
		}
		for(var i=0; i<over_targets.length; i++)
		{
			var over_target = over_targets[i];
			var src = this.sources[i];
			//関数を返す無名関数実行文
			var callback = (function(_src)
			{
				return function()
				{
					this.src = _src;
				};
			})(src);
			this.observe(over_target, "mouseover", listener, callback);
			//プリロード
			(new Image).src = src;

			src = this.sources[0];
			callback = function()
			{
				this.src = src;
			};
			this.observe(over_target, "mouseout", listener, callback);
		}
	},
	//イベント予約関数を統合（DOM LEVEL 2イベントとIEのイベントに対応）
	observe: function(_el, _func, _listener, _callback)
	{
		if(_el.addEventListener)
		{
			_el.addEventListener(_func, function(e)
			{
				_callback.call(_listener, e);
			}, false);
		}
		else if(_el.attachEvent)
		{
			_el.attachEvent("on"+_func, function(e)
			{
				_callback.call(_listener, e);
			});
		}
	}
}

