// : ChangeImage :
//   EVENT >> onMouseover,onMouseout,onFocus,onBlur
// example : hogehoge.jpg → hogehoge_o.jpg

var chgimg;
if(!chgimg){
	chgimg={imgs:[],ancs:[]};
}

	chgimg.ADD=function(img) {
		var pa=img.parentNode;
		while(pa){
			var name=pa.nodeName.toUpperCase();
			if(name=='A') break;
			pa=pa.parentNode;
		}
		if(!pa) return false;

		var an;
		for(var i=0;an=chgimg.ancs[i];i++){
			if(an[0]!=pa)	 continue;
			if(an[1]!='a')	 return false;
			break;
		}
		if(an){
			an[2].push([img,img.src,img.src.replace(/(.+)(\.[^\/]*)$/, "$1_o$2")]);
		}else{
			var childs=[];
			var els=pa.getElementsByTagName('*');
			chgimg.ancs.push([pa, 'a', [[img,img.src,img.src.replace(/(.+)(\.[^\/]*)$/, "$1_o$2")]], childs]);
			multi_addEvent(pa, 'mouseover', chgimg.IN);
			multi_addEvent(pa, 'focus', chgimg.IN);
			multi_addEvent(pa, 'mouseout', chgimg.OUT);
			multi_addEvent(pa, 'blur', chgimg.OUT);
		}
		return true;
	};

	chgimg.IN=function(e){
		if(!e) e = window.event;

		var tar = chgimg.GetNode(e);
		if(!tar) return false;

		var name = tar.nodeName.toUpperCase();
		if(name == 'A'){
			for ( var i=0,s,anc;anc=chgimg.ancs[i];i++) {
				if(anc[0]!=tar) continue;
				for(var j=0,img;img=anc[2][j];j++) img[0].src=img[2];
			}
		}else if( name== 'IMG' ) {
			for ( var i=0,s,img;img=chgimg.imgs[i];i++){
				if(img[0]!=tar) continue;
				tar.src=(img[1] && img[2])?img[3]:img[4];
				if(img[1]) img[2]=!img[2];
				break;
			}
		}
		return true;
	};

	chgimg.OUT=function(e){

		if(!e) e = window.event;

		var tar=chgimg.GetNode(e);
		if(!tar) return false;

		var name=tar.nodeName.toUpperCase();
		if(name=='A'){
			ANCS:
			for(var i=0,s,anc;anc=chgimg.ancs[i];i++){
				if(anc[0]!=tar) continue ANCS;
				for(var j=0,on;on=anc[3][j];j++){
					if(on[1]) break ANCS;
				}
				for(var j=0,img;img=anc[2][j];j++) img[0].src=img[1];
			}
		}else if(name=='IMG'){
			for(var i=0,s,img;img=chgimg.imgs[i];i++){
				if(img[0]!=tar)	 continue;
				if(!img[2])		 tar.src=img[3];
				break;
			}
		}
		return true;
	};

	chgimg.GetNode=function(e){
		var tar=e.target||e.srcElement||e;
		while(tar){
			if(tar.nodeType==1){
				var name=tar.nodeName.toUpperCase();
				if(name=='A') break;
				if(name=='IMG' && !tar.className.match(/chgimg/)) break;
			}
			tar=tar.parentNode;
		}
		return tar;
	};


	chgimg.CREATE=function(){
		chgimg.imgs=[];
		chgimg.ancs=[];
		var imgs = document.getElementsByTagName('IMG');

		for(var i=0,img; img=imgs[i]; i++ )
		{
			if (img.className != 'chgimg') continue;
			chgimg.ADD(img);
		}
		return true;
	};

// onLoad event
multi_addEvent(window, 'load', chgimg.CREATE);

