/******************
swappi.js ver. 2.2
(c) 2007 Wataru Kanzaki, Wings-Winds, http://wi-wi.jp/
******************/
var Swappi;
if(!Swappi){
	Swappi={
		imgs:[]
		,ancs:[]
		,isSf:false
	};
}
Swappi.Swap=function(e){
	if(!e)e=window.event;
	var tar=Swappi.GetNode(e);
	if(!tar)
		return false;
	var name=tar.nodeName.toUpperCase();
	if(name=='A'||name=='BUTTON'){
		for(var i=0,s,anc;anc=Swappi.ancs[i];i++){
			if(anc[0]!=tar)
				continue;
			for(var j=0,img;img=anc[2][j];j++)
				img[0].src=img[2];
			//break;
		}
	}else if(name=='IMG'){
		for(var i=0,s,img;img=Swappi.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;
};
Swappi.Swapout=function(e){
	if(!e)e=window.event;
	var tar=Swappi.GetNode(e);
	if(!tar)
		return false;
	var name=tar.nodeName.toUpperCase();
	
	if(name=='A' || name=='BUTTON'){
		ANCS:for(var i=0,s,anc;anc=Swappi.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=Swappi.imgs[i];i++){
			if(img[0]!=tar)
				continue;
			if(!img[2]){
				tar.src=img[3];
			}
			break;
		}
	}
};
Swappi.Swapin=function(e){
	if(!e)e=window.event;
	var tar=e.target||e.srcElement;
	var pa=tar.parentNode;
	while(pa){
		var name=pa.nodeName.toUpperCase();
		if(name=='A' || name=='BUTTON')
			break;
		pa=pa.parentNode;
	}
	if(!pa)
		return false;
	for(var i=0,an;an=Swappi.ancs[i];i++){
		if(an[0]!=pa)
			continue;
		for(var j=0,ch;ch=an[3][j];j++){
			if(ch[0]!=tar)
				continue;
			if(ch[1]=!ch[1])
				Swappi.Swap(pa);
			else
				Swappi.Swapout(pa);
			break;
		}
		break;
	}
};
Swappi.GetNode=function(e){
	var tar=e.target||e.srcElement||e;
	if(Swappi.isSf){
		while(tar){
			if(tar.nodeType==1){
				var name=tar.nodeName.toUpperCase();
				if(name=='A' || name=='BUTTON')
					break;
				if(name=='IMG' && tar.className.match(/(^|\s)swapp[ie](\s|$)/))
					break;
			}
			tar=tar.parentNode;
		}
	}
	return tar;
};//
Swappi.Create=function(){
	Swappi.RemoveEvent(window, 'load', Swappi.Create);
	Swappi.imgs=[];
	Swappi.ancs=[];
	var doc=document.body||document.documentElement||document;
	if(!doc)
		return false;
	Swappi.isSf=(navigator.userAgent.toLowerCase().indexOf('applewebkit') != -1);
	var imgs=document.getElementsByTagName('IMG');
	var reg=/ swapp([aiueo])([0-9]*) /;
	for(var i=0,re,cn,mode,id,img;img=imgs[i];i++){
		if(!img.src)
			continue;
		cn=' '+img.className+' ';
		re=reg.exec(cn);
		if(!re)
			continue;
		mode=RegExp.$1;
		id=RegExp.$2;
		Swappi.AddSwap[mode](img,id);
	}
	Swappi.AddSwap.u();
	Swappi.AddSwap.o();
	return true;
};
Swappi.AddEvent=function(){
	if(!!window.addEventListener)
		return function(el, ev, func, bool){el.addEventListener(ev, func, bool||false);return true;};
	else if(!!window.attachEvent)
		return function(el, ev, func){el.attachEvent('on'+ev, func);return true;};
	else
		return function(){return false;};
}();
Swappi.RemoveEvent=function(){
	if(!!window.removeEventListener)
		return function(el, ev, func, bool){el.removeEventListener(ev, func, bool||false);return true;};
	else if(!!window.dettachEvent)
		return function(el, ev, func){el.dettachEvent('on'+ev, func);return true;};
	else
		return function(){return false;};
}();
Swappi.AddSwap={os:null,us:null};
// anchor onmouseover, onmouseout, onfocus, onblur
Swappi.AddSwap.a=function(img, id) {
	var pa=img.parentNode;
	while(pa){
		var name=pa.nodeName.toUpperCase();
		if(name=='A' || name=='BUTTON')
			break;
		pa=pa.parentNode;
	}
	if(!pa)
		return false;
	var an;
	for(var i=0;an=Swappi.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_$2")]);
	}else{
		var childs=[];
		var els=pa.getElementsByTagName('*');
		for(var i=0,el;el=els[i];i++){
			if(el.nodeType!=1)
				continue;
			childs.push([el,false]);
			Swappi.AddEvent(el, 'mouseover', Swappi.Swapin);
			Swappi.AddEvent(el, 'mouseout', Swappi.Swapin);
		}
		Swappi.ancs.push([pa, 'a', [[img,img.src,img.src.replace(/(.+)(\.[^\/]*)$/, "$1_$2")]], childs]);
		Swappi.AddEvent(pa, 'mouseover', Swappi.Swap);
		Swappi.AddEvent(pa, 'focus', Swappi.Swap);
		Swappi.AddEvent(pa, 'mouseout', Swappi.Swapout);
		Swappi.AddEvent(pa, 'blur', Swappi.Swapout);
	}
	return true;
};
// image onmouseover, onmouseout
Swappi.AddSwap.i=function(img, id){
	var s=img.src;
	Swappi.imgs.push([img, false, false, s, s.replace(/(.+)(\.[^\/]*)$/, "$1_$2")]);
	Swappi.AddEvent(img, 'mouseover', Swappi.Swap);
	Swappi.AddEvent(img, 'mouseout', Swappi.Swapout);
	return true;
};
// image onclick
Swappi.AddSwap.e=function(img,id){
	var s=img.src;
	Swappi.imgs.push([img, true, false, s, s.replace(/(.+)(\.[^\/]*)$/, "$1_$2")]);
	Swappi.AddEvent(img, 'click', Swappi.Swap);
	return true;
};

Swappi.AddSwap.u=function(img,id){
	if(!img)
		return Regist();
	if(!Swappi.AddSwap.us)
		Swappi.AddSwap.us=Swappi.AddSwap.MakeAs('u');
	if(!id)id='swappu';
	if(Swappi.AddSwap.us[id])
		Swappi.AddSwap.us[id][1].push(img);
	return true;
	
	function Regist(){
		if(!Swappi.AddSwap.us)
			return true;
		for(var i in Swappi.AddSwap.us){
			var al=Swappi.AddSwap.us[i];
			
			for(var j=0,a,childs;a=al[0][j];j++){
				
				childs=[];
				var els=a.getElementsByTagName('*');
				for(var i=0,el;el=els[i];i++){
					if(el.nodeType!=1)
						continue;
					childs.push([el,false]);
					Swappi.AddEvent(el, 'mouseover', Swappi.Swapin);
					Swappi.AddEvent(el, 'mouseout', Swappi.Swapin);
				}
				
				var im=a.getElementsByTagName('IMG');
				if(!im)
					continue;
				im=im[0];
				var imgs=[];
				for(var k=0,s;k<al[1].length;k++){
					s=im.src;
					s=s.match(/(.+)_(\.[^\/]*)$/)?s.replace(/(.+)_(\.[^\/]*)$/, "$1$2"):s.replace(/(.+)(\.[^\/]*)$/, "$1_$2");
					imgs.push([al[1][k],al[1][k].src,s]);
				}
				
				Swappi.ancs.push([a, 'o', imgs, childs]);
				Swappi.AddEvent(a, 'mouseover', Swappi.Swap);
				Swappi.AddEvent(a, 'focus', Swappi.Swap);
				Swappi.AddEvent(a, 'mouseout', Swappi.Swapout);
				Swappi.AddEvent(a, 'blur', Swappi.Swapout);
			}
		}
		Swappi.AddSwap.us=null;
		return true;
	}//
};

// anchor onmouseover, onmouseout, onfocus, onblur
// with ID
Swappi.AddSwap.o=function(img,id){
	if(!img)
		return Regist();
	if(!Swappi.AddSwap.os)
		Swappi.AddSwap.os=Swappi.AddSwap.MakeAs('o');
	if(!id)
		id='swappo';
	if(Swappi.AddSwap.os[id])
		Swappi.AddSwap.os[id][1].push(img);
	return true;
	
	function Regist(){
		for(var i in Swappi.AddSwap.os){
			var al=Swappi.AddSwap.os[i];
			
			var imgs=[];
			for(var k=0;k<al[1].length;k++)
				imgs.push([al[1][k],al[1][k].src,al[1][k].src.replace(/(.+)(\.[^\/]*)$/, "$1_$2")]);
			for(var j=0,a,childs;a=al[0][j];j++){
				
				childs=[];
				var els=a.getElementsByTagName('*');
				for(var i=0,el;el=els[i];i++){
					if(el.nodeType!=1)
						continue;
					childs.push([el,false]);
					Swappi.AddEvent(el, 'mouseover', Swappi.Swapin);
					Swappi.AddEvent(el, 'mouseout', Swappi.Swapin);
				}
				
				Swappi.ancs.push([a, 'o', imgs, childs]);
				Swappi.AddEvent(a, 'mouseover', Swappi.Swap);
				Swappi.AddEvent(a, 'focus', Swappi.Swap);
				Swappi.AddEvent(a, 'mouseout', Swappi.Swapout);
				Swappi.AddEvent(a, 'blur', Swappi.Swapout);
			}
		}
		Swappi.AddSwap.os=null;
		return true;
	}//
};

Swappi.AddSwap.MakeAs=function(mode){
	var result={};
	var reg=new RegExp(' swapp'+mode+'([0-9]*) ');
	var nodes=[];
	Concat(nodes,document.getElementsByTagName('A'));
	Concat(nodes,document.getElementsByTagName('BUTTON'));

	for(var i=0,c,id,a;a=nodes[i];i++){
		c=' '+a.className+' ';
		if(!reg.exec(c))
			continue;
		id=RegExp.$1;
		if(!id)id='swapp'+mode;
		if(!result[id]){
			result[id]=[[a],[]];
		}else{
			result[id][0].push(a);
		}
	}
	return result;
	
	function Concat(des,src){
		for(var i=0;i<src.length;des.push(src[i++]));
		return des;
	}//
};

Swappi.AddEvent(window, 'load', Swappi.Create);

