/*
ImageButton
	Author : hamhaja <hamhaja@nextez.co.kr> in NextEz
	Since : 2004-06-01
	Reference : 
				ImageButton.js of bukjeju project (by yangkun <yangkun7@kornet.net>)
	            lib.rollover.js of jstoy project (by xtac.net)
				fixpng function of ?
	Usage:
		new ImageButton('_r'); 혹은 new ImageButton(); 으로 객체 초기화..
		<img button 속성들...> 로 HTML 에 사용..
		
		: 기본 속성

		<img button src='aa.gif'>	: aa.gif 가 표시되고 오버시 aa_r.gif 로 변경
		<img button src='aa.gif' oversrc='bb.gif'>	: aa.gif 가 표시되고 오버시 bb.gif로 변경
		<img button src='aa.gif' oversrc='bb.gif' selected> : bb.gif 가 처음부터 표시되고 오버시 변경 없음
		<img button src='aa.gif' show='menu1'> : menu1 ID 를가진 element 의 display 를 inline 으로 설정.. (이미 inline 되어 있는것은 none 으로 변경)
		<img button src='aa.gif' oversrc='bb.gif' url='url'> : aa.gif 가 표시되고 오버시 bb.gif로 변경 클릭하면 현재 창에서 url 로 이동

		: 그외 가능 속성

		target	:	_blank	: 새창으로 오픈 (새로운 브라우저의 의미)
					new		: 새창으로 오픈 (팝업창)
					기타값	: target='aa' 이면 aa.location.href 를 변경
		window : 새창으로 띄울때 창의 속성 지정 (window.open 의 세번째 인자로 이용)
		java   : 수행할 자바스크립트 코드
		png    : PNG 포맷의 이미지를 반투명을 적용해서 표시
		noout  : mouse out 시에 이미지를 원래 이미지로 변경하지 않는다.
		group  : 그룹이름을 정한다. 같은 이름의 그룹에 속한 이미지들은 한순간에 하나의 선택된 이미지를 갖는다.
                      지정하지 않으면 'default' 라는 이름으로 페이지의 모든 이미지가 같은 그룹에 속하게 된다.

*/
ImageButton = function(overSuffix)
{
	if (!document.body.getAttribute) return false;
	this.overSuffix = (overSuffix==null) ? '_r' : overSuffix;

	this.num = 0;
	this.srcList = new Array();
	this.oversrcList = new Array();
	
	this.selectedLayer = new Array();
	this.selectedImage = new Array();
	this.defaultImage = new Array();

	var imgtags = document.getElementsByTagName("img");
	for (var i=0; i<imgtags.length; i++)
	{
		if (imgtags[i].getAttribute("png")!=null) this.forPNG(imgtags[i]);
		if (imgtags[i].getAttribute("button")!=null) this.createButton(imgtags[i]);
	}
}
ImageButton.prototype.createButton = function(img)
{
	ImageButton.object = this;
	img.style.borderWidth = 0;
	img.setAttribute("button", this.num);
	this.srcList[this.num] = new Image;
	this.srcList[this.num].src = img.src;
	this.oversrcList[this.num] = new Image;

	var group = (img.getAttribute("group") != null) ? img.getAttribute("group") : 'default';
	img.group = group;

	if (img.getAttribute("oversrc")!=null) this.oversrcList[this.num].src = img.getAttribute("oversrc");
	else this.oversrcList[this.num].src = img.src.replace(RegExp("(\.[^\.]+)$"), this.overSuffix + "$1");
	
	if (img.getAttribute("selected")!=null) 
	{
		img.src = this.oversrcList[this.num].src;
		img.style.cursor = 'hand';
	}
	else img.style.cursor = 'hand';

	if (img.getAttribute("defaultbutton")!=null)
	{
		img.src = this.oversrcList[this.num].src;
		this.defaultImage[group] = img;
	}

	if (img.getAttribute("show")!=null)
	{
		var layer = document.getElementById(img.getAttribute("show"));
		//if (img.getAttribute("selected")==null) layer.style.display = 'none';
		// 2005.08.12, by hamhaja, 문제가 있을까요?
		if (img.getAttribute("selected")==null && img.getAttribute("defaultbutton")==null) layer.style.display = 'none';
		else this.selectedLayer[group] = layer;
	}

	if (document.all)
	{
		if (img.getAttribute("selected") == null)
		{
			// mouse over action
			if (img.onmouseover)
			{
				eval("img._onmouseover=function()" + img.onmouseover.toString().replace(/^[^)]+\)/,''));
				img.onmouseover = function()
				{ 
					this._onmouseover(); 
					ImageButton.object.over_action(this); 
				}
			}
			else
			{
				img.onmouseover = function(){ImageButton.object.over_action(this);}
			}
			// mouse out action
			if (img.getAttribute("noout") == null)
			{
				if (img.onmouseout)
				{
					eval("img._onmouseout=function()" + img.onmouseout.toString().replace(/^[^)]+\)/,''));
					img.onmouseout = function()
					{ 
						this._onmouseout(); 
						ImageButton.object.out_action(this); 
					} 
				}
				else
				{
					img.onmouseout = function(){ImageButton.object.out_action(this);}
				}
			}
		}

		if (img.getAttribute("url")!=null || img.getAttribute("java")!=null)
		{
			// mouse click action
			if (img.onclick)
			{
				eval("img._onclick=function()" + img.onclick.toString().replace(/^[^)]+\)/,''));
				img.onclick = function()
				{ 
					this._onclick(); 
					ImageButton.object.click_action(this); 
				} 
			}
			else
			{
				img.onclick = function(){ImageButton.object.click_action(this);}
			}
		}
	}
	else if (img.addEventListener)
	{
		if (img.getAttribute("selected") == null)
		{
			img.addEventListener('mouseover', function(){ImageButton.object.over_action(this)}, true); 
			if (img.getAttribute("noout") == null) img.addEventListener('mouseout',  function(){ImageButton.object.out_action (this)}, true);
		}
		if (img.getAttribute("url")!=null || img.getAttribute("java")!=null) img.addEventListener('click',  function(){ImageButton.object.click_action (this)}, true);
	}
	this.num++;
}
/*
* PNG 포맷의 파일을 브라우저(익스플로러)에 표시하기 위한 스크립트
*/
ImageButton.prototype.forPNG = function(img)
{
	if(!document.all) return false;
	var src = img.getAttribute("src");
	if(src == null) return false;

	var blankImg = "";
	
	var s = img.src;
	img.src = blankImg;
	img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"', sizingMethod='scale')";
}
/*
* onMouseOver
*/
ImageButton.prototype.over_action = function(img)
{
	if (this.defaultImage[img.group] != null)
	{
		if (this.defaultImage[img.group] != img) this.defaultImage[img.group].src = this.srcList[this.defaultImage[img.group].getAttribute("button")].src;
		this.defaultImage[img.group] = null;
	}

	img.src = this.oversrcList[img.getAttribute("button")].src;
	if (img.getAttribute("show"))
	{
		var layer = document.getElementById(img.getAttribute("show"));
		if (layer==this.selectedLayer[img.group]) return;
		if (this.selectedLayer[img.group]!=null) this.selectedLayer[img.group].style.display = 'none';
		layer.style.display = 'inline';
		this.selectedLayer[img.group] = layer;
	}

	if (img != this.selectedImage[img.group])
	{
		if (this.selectedImage[img.group] != null) this.out_action(this.selectedImage[img.group]);
		this.selectedImage[img.group] = img;
	}
}
/*
* onMouseOut
*/
ImageButton.prototype.out_action = function(img)
{
	img.src = this.srcList[img.getAttribute("button")].src;
}
/*
* onClick
*/
ImageButton.prototype.click_action = function(img)
{
	if (img.getAttribute("java")!=null)
	{
		eval(img.getAttribute("java"));
		if (img.getAttribute("url")==null) return false;
	}
	if (img.getAttribute("url")!=null)
	{
		var target = img.getAttribute("target");
		var url = img.getAttribute("url");
		var features = img.getAttribute("window");

		switch (target)
		{
			case '_blank':
				window.open(url);
				break;
			case '_self':
				location.href = url;
				break;
			case 'new':
				window.open(url, "auto_name", features);
				break;
			default:
				if (target != null) eval(target + ".location.href = url;");
				else location.href = url;
				break;
		}
	}
}
