var SPI = {};
// 画像切り替えをしたい要素のクラスを指定
SPI.cl = "swap";

// 切り替え画像ファイルにつけるマーカー
SPI.marker = "_om";

// 画像エレメントの配列から、src名の最後にmarkerを付加した画像をプリロードする関数
// -> marker = "-om" なら hoge.jpg から hoge-om.jpgをプリロードする
SPI.preloadImgsByMarker = function (imgElements,marker) {
    var r = new Array();
    var pattern = /\.([^\.]+$)/;
    for ( var i = 0; i< imgElements.length; i++ ) {
        r[i] = new Image();
        r[i].src = imgElements[i].src.replace(pattern, marker + ".$1");
    }
    return r;
}

// クラス指定された要素自身とその内部から特定のタグ名を持つ要素を取り出す関数
SPI.getElementsByCT = function (cn,tn) {
    var c = document.getElementsByClassName(cn);
    var r = new Array();
    var i = 0; 
    var t = new Array();
    for ( var j = 0; j < c.length; j++ ) {
        if ( c[j].tagName == tn ) {
            r[i] = c[j];
            i++;
        }
        else {
            t = c[j].getElementsByTagName(tn);
            for ( var k = 0; k < t.length; k++ ) {
                if( t[k] ) {
                    r[i] = t[k];
                    i++;
                }
            }
        }
    }
    return r;
}

// img要素の配列にオンマウス時とオフマウス時それぞれのイベントと画像オブジェクトをセットする
SPI.setSwapImgEvent = function (imgElements,imgObjs_OFF,imgObjs_ON) {
    if( imgElements.length != imgObjs_ON.length || imgElements.length != imgObjs_OFF.length ) {
        alert("setSwapImgEventに渡された引数配列の数が等しくありません");
    }
    else {
        for ( var i = 0; i < imgElements.length; i++) {
            imgElements[i].onmouseover  = new Function('this.src="' + imgObjs_ON[i].src  + '";')
            imgElements[i].onmouseout = new Function('this.src="' + imgObjs_OFF[i].src + '";')
        }
    }
}

SPI.getElementsByClassName = function (str) {
    var elements = document.getElementsByTagName("*");
    var r = new Array();
    var j = 0;
    var pattern = new RegExp('(^|( +))'+ str + '(( +)|$)')
    for(var i = 0; i < elements.length; i++) {
        if(pattern.test(elements[i].className) ) {
            r[j] = elements[i];
            j++;
        }
    }
    return r;
}

/* ================================================ */

Event.observe(window, 'load', function(){
SPI.imgELs = SPI.getElementsByCT(SPI.cl,"IMG");
SPI.imgObjs_off = SPI.preloadImgsByMarker(SPI.imgELs,'');
SPI.imgObjs_on = SPI.preloadImgsByMarker(SPI.imgELs,SPI.marker);
SPI.setSwapImgEvent(SPI.imgELs, SPI.imgObjs_off, SPI.imgObjs_on);
});


/* target="_blank"代替スクリプト */

var TargetWindow = Class.create();
TargetWindow.prototype = {
    initialize: function(className, parentElement) {
        var elements = document.getElementsByClassName(className, parentElement);
        for (var i = 0, len = elements.length; i < len; i++) {
            Event.observe(elements[i], 'click', this.addPopupEvent.bindAsEventListener(this));
            Event.observe(elements[i], 'keypress', this.addPopupEvent.bindAsEventListener(this));
        }
    },
    addPopupEvent: function(event) {
        var element = Event.element(event);
        var link = element.getAttribute('href');
        window.open(link);
        Event.stop(event);
    }
};

Event.observe(window, 'load', function () {
    new TargetWindow('target');
});

/* bookmarkスクリプト */

function addBookmark(title,url) {
	if (window.sidebar) {
		window.sidebar.addPanel(title, url,"");
	} 
	else if( document.all ) {
		window.external.AddFavorite( url, title);
	}
	else if( window.opera && window.print ) {
		return true;
	}
}
