/*======================================================*
 *
 * [ImageChange]
 *
/*------------------------------------------------------*
 * Usage :
/*------------------------------------------------------*
 
/*======================================================*
/*======================================================*/
window.onload = function() {

	var _ImageChange = new ImageChange();
	
	var els = _ImageChange.getElementsByClass(_ImageChange.cName, null, null);
	
	_ImageChange.ImageRead(els, '_over');

	// クラスを含む要素すべてにイベントを割り当て
	for (var i = 0; i < els.length; i++) {
		_ImageChange.AddEvent(els[i], 'onmouseover', _ImageChange.MouseOver, els[i], i);
		_ImageChange.AddEvent(els[i], 'onmouseout', _ImageChange.MouseOut, els[i], i);
	}

}

window.onunload = function() {

	var _ImageChange = new ImageChange();
	
	var els = _ImageChange.getElementsByClass(_ImageChange.cName, null, null);
	
	_ImageChange.ImageRead(els, '_over');

	for (var i = 0; i < els.length; i++) {
		_ImageChange.MouseOut(els[i], i);
	}

}
/*======================================================*/
/*======================================================*/
/*
                                    [Class] ImageChange {
 */
/*------------------------------------------------------*/
ImageChange = function() {	
	this.cName = 'imgchange';	
}
/*======================================================*/
ImageChange.prototype = {
/*------------------------------------------------------*/
	Data : new Array(),
/*------------------------------------------------------*/
	ImageRead : function(els, prefix) {
		outimages = new Array();
		onimages = new Array();
		
		for (var i = 0; i < els.length; i++) {
			outimages[i] = els[i].getAttribute('src');
			onimages[i] = outimages[i].replace(/(.+\/)([^\.\/]+)(\.[^\.\/]+)$/, '$1$2' + prefix + '$3');
			primg = new Image();
			primg.src = onimages[i];
		}
		return (outimages, onimages);
	},
/*------------------------------------------------------*/
	MouseOver : function() {
		var el = arguments[0];
		var i = arguments[1];
		el.setAttribute('src', onimages[i]);
	},
/*------------------------------------------------------*/
	MouseOut : function() {
		var el = arguments[0];
		var i = arguments[1];
		el.setAttribute('src', outimages[i]);
	},
/*------------------------------------------------------*/
	getElementsByClass : function(searchClass,node,tag) {
	
		var classElements = new Array();
		
		if ( node == null ) node = document;
		if ( tag == null ) tag = '*';
		
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
		
		for (var i = 0, j = 0; i < elsLen; i++) {
			if ( pattern.test(els[i].className) ) {
				classElements[j] = els[i];
				j++;
			}
		}
		
		return classElements;
		
	},
/*------------------------------------------------------*/
	AddEvent : function() {
	
		if (arguments.length < 3) return;
		var args = new Array();
		for (var i=0; i < arguments.length; i++){
			args.push(arguments[i]);
		}
		//var en = args.shift();
		var el = args.shift();
		var ev = args.shift();
		var func =args.shift();
		//var el = document.getElementById(en);
		if (!el) return;
		for (var i=0; i < args.length; i++){
			if (args[i] === 'this'){
				args[i] = el;
			} 
		}
		ev = ev.replace(/^on/i, '');
		ev = ev.toLowerCase();
		if (el.addEventListener){
			el.addEventListener(ev, function() { func.apply(this, args) }, false);
		} else if (el.attachEvent){
			el.attachEvent ('on'+ev, function() { func.apply(this, args) });
		} else {
			//  非DOMブラウザは未対応
		}
	
	}
/*------------------------------------------------------*/
};
/*------------------------------------------------------*/
/*
                             } [Class] ImageChange End
 */
/*======================================================*/
/*======================================================*/
function inherit(subClass, superClass) {
	
	var supClassPro = superClass.prototype;
	var subClassPro = subClass.prototype;
	for (var prop in supClassPro) {
		if (typeof(subClassPro[prop]) == 'undefined') {
			subClassPro[prop] = supClassPro[prop];
		}
	}

}
/*======================================================*/