//コンストラクタ、切り替え対象を指定  
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);  
            });  
        }  
    }  
}  
