var BJH = 
{
	versionList : ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP.2.0"],	 
	__xhrHeader__ : {},
	__fileBox__ : {}, 
	__isDebug__ : true,
	__fadeTimeout__ : {},
	__sizeTo__ : {},
	__moveTo__ : {},
	__mover__ : {},
	__fixAt__ : []
}	

/**
FireFox ??해 메소???정
*/
if (document.implementation.hasFeature("XPath", "3.0") || 
	document.implementation.hasFeature("XPath", "2.0") ||
	document.implementation.hasFeature("XPath", "1.0"))
{
	XMLDocument.prototype.transformNode = function(xsl)
	{
		var xslProc = new XSLTProcessor();
		xslProc.importStylesheet(xsl);
		//var node = xslProc.transformToFragment(this,document);
		var node = xslProc.transformToDocument(this);
		var div = document.createElement('DIV');
		div.appendChild(node.documentElement);
		return div.innerHTML;
	}
	XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
	{
		if (!xNode)
		{
			xNode = this;
		}
		var oNSResolver = this.createNSResolver(this.documentElement);
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		var aResult = [];
		for (var i=0; i<aItems.snapshotLength; i++)
		{
			aResult[i] = aItems.snapshotItem(i);
		}		
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
	{
		if (!xNode)
		{
			xNode = this;
		}
		var xItems = this.selectNodes(cXPathString, xNode);
		if (xItems.length > 0)
			return xItems[0];
		else
			return null;
	}
	Element.prototype.selectNodes = function(cXPathString)
	{
		if (this.ownerDocument.selectNodes)		
			return this.ownerDocument.selectNodes(cXPathString, this);
		else
			throw "For XML Elements Only";
	}
	Element.prototype.selectSingleNode = function(cXPathString)
	{
		if (this.ownerDocument.selectSingleNode)
			return this.ownerDocument.selectSingleNode(cXPathString, this);
		else
			throw "For XML Elements Only";
	}
}

/** XML 문자?로부??DOM 객체 ?성 */
function createDOMFromString(str) {
  	var xmlDoc = null;
	try 
	{
		// IE
		if (window.ActiveXObject) {
			xmlDoc = new ActiveXObject("MSXML2.DOMDocument.5.0");
			xmlDoc.loadXML(str);
			if (xmlDoc.parseError.errorCode != 0) 
			{
	        	var msg = "?류가 발생?습?다.\n";
		        msg += "?류 코드 : " + xmlDoc.parseError.errorCode + "\n" ;
	    	    msg += "?류 ?인: " + xmlDoc.parseError.reason;
		        alert(msg);
	    	    return null;
			}
		} 
		else 
		{
			//FF
			var parser = new DOMParser();
			xmlDoc = parser.parseFromString(str, "text/xml");
			if (xmlDoc.documentElement.nodeName == "parsererror") 
			{
				var msg = "?류가 발생?습?다.\n";
				msg += "?류 ?인: " + xmlDoc.documentElement.childNodes[0].nodeValue;
				alert(msg);
				return null;
			}
		}
	} catch (e) 
	{
    	alert(e);
  	}
  	return xmlDoc;
} 

		
/** XHR ?성 */
function createDocument()
{	
	if (window.ActiveXObject)
	{
		for (i=0; i<BJH.versionList.length; i++)
		{
			try
			{
				var dom = new ActiveXObject(BJH.versionList[i]);
				return dom;
			}catch(e)
			{
				//alert(e);
			}
		}
		throw new Error("MSXML is not installed.");
	}
	else
	{
		window.status = 'is not Window';
		var dom = new XMLHttpRequest();
		return dom;
	}	
}
function createXHR()
{
	return createDocument();
}

/** 문서?용??innerText ?반환 */
function $txt(fileName,cache)
{
	var file = $file(fileName,cache);
	if (file)
		return file.responseText;
	else
		return null;
}
/** XML 문서??documentElement?반환 */
function $doc(fileName,cache)
{
	var dom = $dom(fileName,cache);
	if (dom)
		return dom.documentElement;
	return null;
}
/** XML DOM Document ?반환 */
function $dom(fileName,cache)
{
	var file = $file(fileName,cache);
	
	if (file)
		return file.responseXML;
	else
		return null;
}
function $xml(fileName,cache)
{
	return $dom(fileName,cache);
}
	
/** FORM ?리먼트로???Request???라미터?구함. */
function $formParam(form)
{
	var args = '';
	if (typeof form == 'string')
		form = $(form);
	
	if (form)
	{
		var ele;
		for (var i=0; i<form.elements.length; i++)
		{
			ele = form.elements[i];	
			if (ele.type == 'button')
				continue;
			else if (ele.type == 'checkbox')
			{
				if (ele.checked)
				{
					if (args.length > 0)
						args += "&";
					args += encodeURIComponent(ele.name) + "=" + encodeURIComponent(ele.value);
				}	
			}		
			else
			{
				if (args.length > 0)
					args += "&";
				args += encodeURIComponent(ele.name) + "=" + encodeURIComponent(ele.value);
			}
		}
	}
	return args;	
}
/** Request ???라미터 String??구함. params ??{} ??FORM 객체 ?는 ID가 ?수 ?음 */
function $param(params)
{
	var args = '';
	try
	{
		if (params)
		{
			if (typeof params == 'string')
			{
				args = $formParam(params);
			}	
			else if (typeof params == 'object')
			{
				if (params.tagName)
				{
					if (params.tagName == 'FORM')
					{
						args = $formParam(params);	
					}
					else
					{
						alert('Wrong parameter');
					}
				}	
				else
				{
					var kvalue;
					for (key in params)
					{
						kvalue = params[key];										
						for (j=0; j<kvalue.length; j++)
						{				
							if (args.length >0)
								args += "&";
							args += encodeURIComponent(key) + "=" + encodeURIComponent(kvalue[j]);			
						}	
					}					
				}
				
				
				
			}
		}
	}catch(e)
	{
		alert(e);
	}	
	return args;
	
}	
/** GET방식 Request ??린??
* @param action		?청 URL
* @param params		?라미터 ({} or FORM or FORM's ID)
* @param func		처리???행??function. function? MSXML.XMLHTTP 객체 1개의 ?라미터??달 받는??
* @param async		true:비동? false:?기 
*/ 
function $get(action, params, func, async)
{
	$send('GET',action,params,func,async);
}

/** POST방식 Request ??린??
* @param action		?청 URL
* @param params		?라미터 ({} or FORM or FORM's ID)
* @param func		처리???행??function. function? MSXML.XMLHTTP 객체 1개의 ?라미터??달 받는??
* @param async		true:비동? false:?기
*/
function $post(action, params, func, async)
{
	$send('POST',action,params,func,async);
}

/** Request ??린??
* @param method		메소??GET or POST
* @param action		?청 URL
* @param params		?라미터 ({} or FORM or FORM's ID)
* @param func		처리???행??function. function? MSXML.XMLHTTP 객체 1개의 ?라미터??달 받는??
* @param async		true:비동? false:?기
*/

function $submit(form,func,async)
{
	var f = $(form);
	if (f)
	{
		$send(f.method, f.action, f, func, async);		
	}
}
function $cache(url)
{
	if (BJH.__fileBox__[url])
		return;
	$send('GET', url, {}, function(xhr)
	{
		BJH.__fileBox__[url] = xhr;
	}, true);
}
function $send(method, action, params, func, async)
{
	try
	{
		if (!async)
			async = false;
			
		var XHR = createDocument();		
		var args = $param(params);

		try
		{
			if (/post/i.test(method))
			{
				
				XHR.open("POST", action, async);
				XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
			}				
			else
			{	
				XHR.open("GET", action+"?"+args, async);					
				XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
				args = null;
			}	
		}catch(e)
		{
			window.status = XHR.status + " : " + XHR.statusText;      		
			if (func)
			{
				if (typeof func == 'function')  
		    		func(XHR);
		    	else
		    		(eval(func))(XHR);	
		   	}
	    	return;
		}	
		if (async == true)
		{		
			XHR.onreadystatechange = function()
			{
				if (XHR.readyState == 4) 
				{
			       	if (XHR.status == 200 && func)
			       	{
			       		if (typeof func == 'function')  
				    		func(XHR);
				    	else
				    		(eval(func))(XHR);	
				    }	
			       	else
			       	{ 
			       		window.status = XHR.status + " : " + XHR.statusText;      		
			       		if (func)
			       		{
				       		if (typeof func == 'function')  
					    		func(XHR);
					    	else
					    		(eval(func))(XHR);	
					    }
			       	}	
			    }	
			} 
		}
		XHR.send(args);
		if (async == false)
		{
			var notYet = true;
			while(notYet)
			{
				if (XHR.readyState == 4)
					notYet = false;
			}
			if (func)
			{
				if (typeof func == 'function')  
		    		func(XHR);
		    	else
		    		(eval(func))(XHR);	
		   	}
		}
		
	}catch(e)
	{
		alert('ERROR ' + method + ' : [' + action + ']');
	}	
}	


function $clearFile(fileName)
{
	BJH.__fileBox__[fileName] = null;
}	
/** ?일 가?오? 리턴?는 Object??MSXML.XMLHTTP 객체?? ??function?로 ?청?는 ?일? Cache?? */
function $file(fileName,cache)
{
	if (!BJH.__fileBox__)
		BJH.__fileBox = {};
		
	if (cache && cache != true)
		BJH.__fileBox__[fileName] = null;
		
	var file = ((!cache || cache == true) && BJH.__fileBox__[fileName]) ? BJH.__fileBox__[fileName] : null;
	if (!file)
	{
		var xmlDom = createDocument();			
		window.status = 'Loading: [' + fileName + ']';		
		xmlDom.open('GET',fileName,false);
		xmlDom.send(null);
		var notYet = true;
		
		while(notYet)
		{
			if (xmlDom.readyState == 4)
				notYet = false;
		}		
		if (!cache || cache == true)
		{
			BJH.__fileBox__[fileName] = xmlDom;		
			file = BJH.__fileBox__[fileName];			
		}
		else
			file = xmlDom;
				
		window.status = '';

	}
	
	return 	file;
}

/** 지?한 ?일(URL)?용???재 문서?치??Append ?다. */
function $import(file)
{	
	if (!BJH.__fileBox__[file])
	{	
		try
		{	var cont = '';
			cont = $txt(file);		
			if (/.*js$/.test(file))
			{
				
				document.writeln("<script language='javascript'>");
				document.writeln(cont);
				document.writeln("</script>");
			}
			else if (/.*css$/.test(file))
			{				
				
				document.writeln("<style>");
				document.writeln(cont);
				document.writeln("</style>");
			}	
			else
			{	
				document.writeln(cont);
			}		
		}catch(e)
		{
			alert('Import Failed [' + file + ']:' + e);
		}	
	}
}	

/** getElementById(id) */
function $(id)
{
	if (typeof id == 'object')
		return id;
	else
		return document.getElementById(id);
}

/**
지?한 id??Element ?구함. v가 주어졌을 경우 Element??value?v??정??*/
function $v(id,v)
{
	var e = $(id);	
	if (e)
	{
		if (v || v == '')
			e.value=v;
		return e.value;
	}	
	else
		return "";
}
function $tag(name,num)
{
	var e = document.getElementsByTagName(name);
	if (e && e.length > 0)
	{
		if (num)
		{
			return e[num];
		}
		else
		{
			return e;
		}
	}
	return null;
}
function $$(name,num)
{
	var e = document.getElementsByName(name);
	if (e && e.length > 0)
	{
		if (num)
		{
			return e[num];
		}
		else
		{
			return e;
		}
	}
	return null;
}
function $$v(name,num,v)
{
	var e = $$(name);
	if (e && e.length > 0)
	{
		if (num)
		{
			if (v)
				e[num].value = v;
			return e[num].value;
		}	
		else
		{
			if (v)
				e[0].value = v;
			return e[0].value;
		}	
	}	
	else
		return "";
}

/** 
지?한 DOMDocument로???xpath ???당?는 SingleNode?구함 
@param dom	Element
@param xpath	XPath
@return dom.selectSingleNode(xpath);
*/
function $n(dom,xpath)
{
	var node = dom.selectSingleNode(xpath);
	
	return node;
}
/** 
지?한 DOMDocument로???xpath ???당?는 SingleNode??text?구함 
@param dom	Element
@param xpath	XPath
@return ?당 ?치??Text
*/
function $nt(dom,xpath)
{
	var n = null;
	if (!xpath)
	{
		n = dom;
	}
	else
	{
		n = $n(dom,xpath);
	}	
	if (n)	
	{	
		
		if (n.text)
			return n.text;
		else
			return n.textContent;
			
		//if (n.nodeType == 3)		
		//	return n.nodeValue;
		//else
		//	return n.firstChild.nodeValue;
		
		//alert(n.nodeName + ":" + n.firstChild);	
		//if (n.nodeValue != null)
		//	return n.nodeValue;
		//else 
		//	return n.firstChild.nodeValue;	
	}
	else
		return "";
}
/** 
지?한 DOMDocument로???xpath ???당?는 Node?을 구함 
@param dom	Element
@param xpath	XPath
@return dom.selectNodes(xpath)
*/
function $ns(dom,xpath)
{
	return dom.selectNodes(xpath);
}

/** 
지?한 id??Element??innerText?구함, text가 ?을경우 innerText??정
@param id	Element or ID
@param text	?력??TEXT
@return innerText
 */
function $text(id,text)
{
	var e = $(id);
	if (e)
	{
		if (text)	
		{
			if (typeof text == 'string')
				e.innerText = text;
			else if (typeof text == 'object')
				e.innerText = text.innerText;
		}	
		return e.innerText
	}
	return "";
}		
/** 
지?한 id??Element??innerHTML??구함, html ???을 경우 innerHTML???정 
@param id	Element or ID
@param html	?력??HTML
@param innerHTML
*/
function $html(id,html,errtag)
{
	var e = $(id);
	if (e)
	{
		if (!html)
			html = '';
			
		if (document.all && /^(A|P|TBODY|TABLE|TR|THEAD|TFOOT|COL|COLGROUP)$/i.test(e.tagName))		
		{
			var div = document.createElement("DIV");
			if (/A|P/i.test(e.tagName))
				div.innerHTML = "<" + e.tagName + ">" + html + "</" + e.tagName + ">";
			else
				div.innerHTML = "<TABLE>" + html + "</TABLE>";
					
			//e.removeNode(true);
			while (e.childNodes.length > 0)
			{
				e.removeChild(e.childNodes(0));
			}
			var node = div.childNodes(0).childNodes;
			
			if (node)
			{
				for (var i=0; i<node.length; i++)
				{
					e.appendChild(node(i));	
				}
			}	
		}	
		
		else
		{
			try
			{
				e.innerHTML = html;
			}catch(ee)
			{
				var div = document.createElement("DIV");
				if (errtag)
				{
					div.innerHTML = "<" + errtag + ">" + html + "</" + errtag + ">";
				}
				else
				{
					div.innerHTML = "<SPAN>" + html + "</SPAN>";
				}	

				while (e.childNodes.length > 0)
				{
					e.removeChild(e.childNodes(0));
				}
				var node = div.childNodes(0);			
				if (node)
				{
					e.appendChild(node);
				}
	
			}
		}	
							
		return e.innerHTML;
	}
	return "";
}

/**
Style??리턴
@param id	Element or ID
*/
function $style(id)
{
	var e = $(id);
	if (e)
	{	
		return e.style;
	}
	return null;
}
/**
BackgroundColor?지??@param id	Element or ID
@param color	BackgroundColor
@return BackgroundColor
*/
function $bgcolor(id,color)
{
	var e = $style(id);
	if (e)
	{
		if (color || color == '')
			e.backgroundColor=color;
		return e.backgroundColor;	
	}
	return null;
}	
/**
Color?지??@param id	Element or ID
@param color	Color
@return Color
*/
function $color(id, color)
{
	var e = $style(id);
	if (e)
	{
		if (color || color == '')
			e.color=color;
		return e.color;	
	}
	return null;
}
/**
MouseOver/Out ?의 BackgroundColor??정
@param id	Element or ID
@param overColor MouseOver?때??BackgroundColor
@param outColor MouseOut?때??BackgroundColor
*/
function $onMouseBgColor(id, overColor, outColor)
{
	var e = $(id);
	if (e)
	{
		if (!overColor)
			overColor = '';
		if (!outColor)
			outColor = '';
		
		$addEvent(e,'mouseover',function(){$bgcolor(e,overColor);});
		$addEvent(e,'mouseout',function(){$bgcolor(e,outColor);});
	}
}
/**
MouseOver/Out ?의 Color??정
@param id	Element or ID
@param overColor MouseOver?때??Color
@param outColor MouseOut?때??Color
*/
function $onMouseColor(id, overColor, outColor)
{
	var e = $(id);
	if (e)
	{
		if (!overColor)
			overColor = '';
		if (!outColor)
			outColor = '';
		//e.attachEvent('onmouseover', function(){$color(e,overColor);});
		//e.attachEvent('onmouseout', function(){$color(e,outColor);});
		$addEvent(e,'mouseover',function(){$color(e,overColor);});
		$addEvent(e,'mouseout',function(){$color(e,outColor);});
	}
}

/**
?벤??리스?? ?록?다.
@param id	Element or ID
@param ename	?벤??리스???름 = IE??경우 on? 뺀??
@param func	?록???벤??리스??*/
function $addEvent(ele,ename,func)
{
	ele = $(ele);
	ename = ename.replace(/^on/,'');
	
	if (ele.attachEvent)
	{
		ele.attachEvent('on'+ename,func);
	}
	else if (ele.addEventListener)
	{
		ele.addEventListener(ename,func,false);
	}
	else
	{
		ele['on'+ename] = func;
	}
}
/**
?벤??리스??????다.
@param id	Element or ID
@param ename	?벤??리스??= IE??경우 on? 뺀??
@param func	?????벤??리스??*/ 
function $removeEvent(id,ename,func)
{
	ele = $(id);
	if (ele)
	{
		if (ele.detachEvent)
		{
			ele.detachEvent('on'+ename,func);
		}
		else if (ele.removeEventListener)
		{
			ele.removeEventListener(ename,func,false);
		}
		else
		{
			ele['on'+ename] = null;
		}
	}	
}
/**
배경 ??지?채운??
@param id	Element or ID
@param imgUrl	??지 URL
*/
function $bgimage(id,imgUrl)
{	
	var ele = $style(id);
	if (ele)
	{	
		if (imgUrl || imgUrl == '')
		{
			ele.backgroundImage = 'url(' + imgUrl + ')';
		}	
	}	
}
/** 
지?한 id??Element??면?서 감춘??
@param id	Element or ID
@param toggle true ?경?????다.

*/
function $hide(id,toggle)
{	
	var e = $(id);
	if (e)
	{
		if (toggle)
		{	
			if (e.style.display == 'none')
				e.style.display = '';
			else
				e.style.display = 'none';					
		}
		else	
			e.style.display = 'none';
	}		
}
	
/** 
지?한 id??Element??면?서 보이??다. val ???을 경우 style.display ??값을 ?정?다. 
@param id	Element or ID
@param val	display ?*/
function $show(id,val)
{
	var e = $(id);
	if (e)
	{
		if (val)
			e.style.display = val;
		else
			e.style.display = '';	
	}	
}	

/**
깜박??
@param id	Element or ID
@param fc	ForegroundColor
@param bc	BackgroundColor
@param ms	???간 = 반복지???간
@param cnt	추?반복 ?수 
*/
function $blank(id,fc,bc,ms,cnt)
{
	var ele = $(id);
	if (ele && !isNaN(ms) && ms > 0)
	{

		if (fc)
			$color(ele,fc);
		if (bc)
			$bgcolor(ele,bc);
		setTimeout(function(){
			$color(ele,'');
			$bgcolor(ele,'');
			if (!isNaN(cnt) && cnt > 0)
				setTimeout(function(){
					$blank(id,fc,bc,ms,cnt-1);
				},ms);				
		},ms);
	}
}


/**
?명??조절
@param id	Element or ID
@param v1	Opacity ?
@param st	Style (for ID)
@param v2	FinishOpacity (For ID, Style)
*/
function $opacity(id, v1, st, v2)
{
	var ele  = $style(id);
	if (ele)
	{
		if (document.all)
		{
			if (st && v2)
				ele.filter="alpha(opacity=" + v1 + ",finishopacity=" + v2 + ",style=" + st + ")";
			else
				ele.filter="alpha(opacity=" + v1 +")";	

		}	
		else
			ele.opacity=parseInt(v1)/100;
	}	
}


/**
Fade In/Out

@param id	Element or ID
@param start	?작 Opacity?@param end		??Opacity?@param step		Opacity 증? ?@param ms		지???간 (ms)
*/
function $fade(id,start,end,step,ms)
{
	if (!step || isNaN(step))
		step = 5;	
	if (!ms || isNaN(ms))
		ms = 10;

	start = parseInt(start);
	end = parseInt(end);
	
	
	start = start < 0 ? 0 : start > 100 ? 100 : start;
	end = end < 0 ? 0 : end > 100 ? 100 : end;
	
	var ele = $style(id);
	if (ele)
	{
		if (BJH.__fadeTimeout__[ele.id])
			clearTimeout(BJH.__fadeTimeout__[ele.id]);
		if (document.all)
			ele.filter='alpha(opacity=' + start + ')';
		else
		{
			ele.opacity = start/100;
		}
				
		var gap = Math.abs(start - end);
		
		if (gap == 0 || gap < step)
		{
			return;
		}	
		
	
		if (start > end)			
			BJH.__fadeTimeout__[ele.id] = setTimeout(function(){$fade(id,start-step,end,step,ms);}, ms);
		else
			BJH.__fadeTimeout__[ele.id] = setTimeout(function(){$fade(id,start+step,end,step,ms);}, ms);
	}
	
}

/**
?이지?채운??
지?한 URL??결과?HTML)??
ID??innerHTML??력
(캐쉬??

@param id	Element or ID
@param url	URL 주소
@param refersh	Refresh ??
*/
function $page(id,url,refresh)
{
	var div = $(id);
	if (div)
	{
		if (refresh == true)
			$clearFile(url);
		$html(div,$txt(url));	
		//div.innerHTML = $txt(url);
	}
}
/**
?이지?채운??
(지?한 id가 iframe???닐경우 ?식?드?iframe???입?다.

@param id	Element or ID
@param url	URL 주소
*/
function $iframe(id,url)
{
	var div = $(id);
	if (div)
	{	
		if (/iframe/i.test(div.tagName))
			div.src = url;
		else
		{
			div.innerHTML = "<iframe id='page_" + div.id + "' width='" + div.width + "' height='" + div.height + "'></iframe>";
			$('page_' + div.id).src = url;
		}			
	}
}

/**
?버?메세지 출력 ?정
@param val	true ?경?에?$debug() ?출??출력??
*/
function $setDebug(val)
{
	BJH.__isDebug__ = val;
}

/**
?버?메세지 출력
@param msg	출력 메시
*/
function $debug(msg)
{
	if (BJH.__isDebug__ != true)
		return;
		
	var d = $('__BJH_DEBUG__');
	try
	{
		if (!d)// && window.ActiveXObject)
		{
			d = document.createElement("DIV");
			d.id = '__BJH_DEBUG__';
			d.style.display='none';
			d.style.position='absolute';
			/*
			$addEvent(d,'keydown',
				function(e)
				{
					var evnt = event;
					if (e)
						evnt = e;	
					if (evnt.keyCode == 27) 
					{
						$hide('__BJH_DEBUG__');$html('__BJH_DEBUG_RESULT__',' ');
					}
				});		
			*/
			var div1 = document.createElement("DIV");	
			div1.style.paddingRight=5;	
			div1.style.backgroundColor='yellow';		
			div1.innerHTML = "<b style='float:right' onclick=\"$hide('__BJH_DEBUG__');$html('__BJH_DEBUG_RESULT__',' ');\">X</b><center><b>+++++++++++++++++++ Debug messages +++++++++++++++++++</b></center>";
			d.insertBefore(div1,null);
		
			div = document.createElement("DIV");
			div.style.backgroundColor='yellow';			
			div.style.color='black';
			div.style.overflowY='scroll';	
			div.style.height='140px';
			//if (document.all)
			//	div.style.filter="alpha(opacity=70,finishopacity=10,style=0);";
			//else
			//	div.style.opacity=0.7;	
			//$opacity(div,70);
			div.id = "__BJH_DEBUG_RESULT__";
			div.scrollIntoView(false);
		
			
			d.insertBefore(div,null);
			d.scrollIntoView(false);
			d.style.height='160px';
			d.style.position = 'absolute';
			document.body.insertBefore(d, null);
			$fixAt(d, 0, -160);
			$addEvent(window, 'resize', function()
			{
				d.style.width = document.body.clientWidth + 'px';
			});
			$opacity(d,60);
		}
		if (!d)
			return;
			
		d.style.width=document.body.clientWidth + 'px';
		d.style.display='';
		var div = $('__BJH_DEBUG_RESULT__');
		if (msg)
			div.innerHTML += ' ' + msg + "<br/>";
		else 
			div.innerHTML = "";			
	}catch(e)
	{}	
}	
function $httpEquiv(name,content)
{
	document.writeln("<meta http-equiv=\"" + name + "\" content=\"" + content + "\">");
}
function $pageEnter(dur,tran)
{
	$httpEquiv("Page-Enter", "revealtrans(duration=" + dur + ",transition=" + tran + ")");
}
function $pageExit(dur,tran)
{
	$httpEquiv("Page-Exit", "revealtrans(duration=" + dur + ",transition=" + tran + ")");
}	
function $refresh(sec,url)
{
	if (url)
		$httpEquiv("Refresh", sec + ";url=" + url);
	else
		$httpEquiv("Refresh", sec);
}
function $nocache()
{
	$httpEquiv("Pragma","no-cache");
}
function $charset(enc)
{
	if (enc)
		$httpEquiv("Content-Type", "text/html; charset=" + enc);
}

/**
?리먼트?지?크기로 바꾼??
@param	id	????리먼트 ID
@param 	w	Width
@param 	h	Height
@param	step	변? 간격 분할. 1보다 ?거??같으??번??변?
@param	delay	변?지???간 (ms). default 5ms
@param 	mode	default : lt
	t : ?로
	b : ?래?	l : ?쪽?로
	r : ?른쪽으?*/
function $sizeTo(id, w, h, step, delay, func)
{
	var element = $(id);
	if (!element)
		return;
		
	if (!step || parseInt(step) == 1)
	{
		element.style.width = w + 'px';
		element.style.height = h + 'px';	
		if (func)
		{
			if (typeof func == 'function')
				func();
			else
				eval(func + '()');
		}		
		return;
	}
	
	if (isNaN(step) && !(/^[0-9]+$/.test(step)))
		step = 20;
	else
		step = parseInt(step);
	if (step <= 1)
		step = 2;

	if (!delay || (isNaN(delay) && !(/^[0-9]+$/.test(delay))))
		delay = 5;	
	else
		delay = parseInt(delay);
	if (delay <= 0)
		delay = 1;
		
	
	var cw = element.offsetWidth;
	var ch = element.offsetHeight;
	
	
	w = parseInt(w);
	h = parseInt(h);
		
	var ww = cw - w;
	var hh = ch - h;

	var xGap = ww > 0 ? 1 : -1;
	var yGap = hh > 0 ? 1 : -1;
	
	xGap = xGap + Math.floor(ww/step);
	yGap = yGap + Math.floor(hh/step);

	
	if (w != cw)
		element.style.width = (cw-xGap) + 'px';
	if (h != ch)
		element.style.height = (ch-yGap) + 'px';			
	
	var w1 = Math.abs(element.offsetWidth-w);
	var h1 = Math.abs(element.offsetHeight-h);
	
	if (w1 < 1)
		element.style.width = w + 'px';
	if (h1 < 1)
		element.style.height = h + 'px';
			
	if (w1 < 1 && h1 < 1)
	{
		if (func)
		{
			if (typeof func == 'function')
				func();
			else
				eval(func + '()');
		}		
		return;	
	}
	if (BJH.__sizeTo__[element.id])	
		clearTimeout(BJH.__sizeTo__[element.id]);	
	BJH.__sizeTo__[element.id] = setTimeout(function(){
	$sizeTo(id, w, h, step, delay, func);}
	, delay);			

}

/**
?리먼트?지?위치로 ?동?킨??
@param	id	?동?킬 ?리먼트 ID
@param 	x	?동??X
@param 	y	?동??Y
@param	step	?동??간격 분할. 1보다 ?거??같으??번???동??
@param	delay	?동 지???간 (ms). default 5ms
*/
function $moveTo(id, x,y, step, delay, func)
{
	var element = $(id);
	if (!element)
		return;
	if (!x)
		x = 0;
	if (!y)
		y = 0;	
	if (!step || parseInt(step) == 1)
	{
		element.style.left = x + 'px';
		element.style.top = y + 'px';	
		return;
	}
	
	if (isNaN(step) && !(/^[0-9]+$/.test(step)))
		step = 20;
	else
		step = parseInt(step);
	if (step <= 1)
		step = 2;

	if (!delay || (isNaN(delay) && !(/^[0-9]+$/.test(delay))))
		delay = 5;	
	else
		delay = parseInt(delay);
	if (delay <= 0)
		delay = 1;
		
	//element.style.position='absolute';
	
	var cx = element.offsetLeft;
	var cy = element.offsetTop;
	
	
	x = parseInt(x);
	y = parseInt(y);
		
	var xx = cx - x;
	var yy = cy - y;

	var xGap = xx > 0 ? 1 : -1;
	var yGap = yy > 0 ? 1 : -1;
	if (xx != 0)
		xGap = xGap + xx/step;
	if (yy != 0)	
		yGap = yGap + yy/step;

	
	if (x != cx)
		element.style.left = parseInt(cx-xGap) + 'px';
	if (y != cy)
		element.style.top = parseInt(cy-yGap) + 'px';	
	
	var x1 = Math.abs(element.offsetLeft - x);			
	var y1 = Math.abs(element.offsetTop - y);			
	if (x1 < 1)
		element.style.left = x + 'px';
	if (y1 < 1)
		element.style.top = y + 'px';
	if (x1 < 1 && y1 < 1)
	{
		if (func)
		{
			if (typeof func == 'function')
				func();
			else
				eval(func + '()');
		}
		return;	
	}
	
	if (BJH.__moveTo__[element.id])	
		clearTimeout(BJH.__moveTo__[element.id]);		
	BJH.__moveTo__[element.id] = setTimeout(function(){
	$moveTo(id, x, y, step, delay,func);}
	, delay);			
}

function $center(id)
{
	var ele = $(id);
	var json = {'x':0, 'y':0};
	
	if (ele)
	{
		var w = document.body.clientWidth;
		var h = document.body.clientHeight;
		var w2 = ele.offsetWidth;
		var h2 = ele.offsetWidth;
		json['x'] = Math.floor((w-w2)/2);
		json['y'] = Math.floor((h-h2)/2);
	}	
	return json;
}
function $fixJson(id)
{
	var json = undefined;
	var ele = $(id);
	if (ele)
	{
		for (var i=0; i<BJH.__fixAt__.length; i++)
		{
			if (BJH.__fixAt__[i]['object'] == ele)
			{
				json = BJH.__fixAt__[i];	
				break;
			}
		}
	}	
	return json;
}
/**
?면??고정 ?치 지??onscroll/onresize ?벤?에 추???

@param id	Element or ID
@param left	X ?치 (?수 ?경???른쪽으로???
@param top 	Y ?치 (?수 ?겨???래쪽으로???
*/
function $fixAt(id, left, top)
{
	var ele = $(id);
	if (ele)
	{
		if (!left && !top)
		{
			ele.style.position = '';
			return;
		}
		var json = $fixJson(ele);
		
		var scrollTop = document.body.scrollTop;
		var scrollLeft = document.body.scrollLeft;	
		ele.style.position = 'absolute';
		var cen = $center(ele);
		var left2;
		var top2;
		
		if (left%1 != 0)
		{
			
			var w = document.body.clientWidth*left - (document.body.clientWidth/2);
			cen['x'] = cen['x'] + w;
			left2 = cen['x'];
		}	
		else
		{
			left2 = parseInt(left);
		}	
		if (top%1 != 0)
		{
			var h = document.body.clientHeight*top - (document.body.clientHeight/2);
			cen['y'] = cen['y'] + h;
			top2 = cen['y'];
		}
		else
		{
			top2 = parseInt(top);
		}	
		
		var ll = left2 < 0 ? document.body.clientWidth  + scrollLeft + left2 : scrollLeft + left2;
		var tt = top2 < 0 ? document.body.clientHeight + scrollTop + top2 : scrollTop + top2;

		ele.style.left = ll + 'px';
		ele.style.top = tt + 'px';	
		
		var func = function()
		{
			var scrollTop2 = document.body.scrollTop;
			var scrollLeft2 = document.body.scrollLeft;	
			var cen = $center(ele);
			var left22;
			var top22;
			
			if (left%1 != 0)
			{
				
				var w = document.body.clientWidth*left - (document.body.clientWidth/2);
				cen['x'] = cen['x'] + w;
				left22 = cen['x'];
			}	
			else
			{
				left22 = parseInt(left);
			}	
			if (top%1 != 0)
			{
				var h = document.body.clientHeight*top - (document.body.clientHeight/2);
				cen['y'] = cen['y'] + h;
				top22 = cen['y'];
			}
			else
			{
				top22 = parseInt(top);
			}	
			var l = left < 0 ? document.body.clientWidth  + scrollLeft2 + left22 : scrollLeft2 + left22;
			var t = top < 0 ? document.body.clientHeight + scrollTop2 + top22 : scrollTop2 + top22;
			ele.style.left = l + 'px';
			ele.style.top = t + 'px';			
		};
		if (!json)
		{			
			
			json = {'object':ele, 'function':func, 'left':left, 'top':top};
			BJH.__fixAt__.push(json);
			$addEvent(window, 'scroll', func);
			$addEvent(window, 'resize', func);
		}	
		else
		{	
			$removeEvent(window, 'scroll', json['function']);
			$removeEvent(window, 'resize', json['function']);
			json['function'] = func;
			$addEvent(window, 'scroll', func);
			$addEvent(window, 'resize', func);
		}
		
		
	}		
}
// ?쉬?싱

function $hash()
{
    var queryList = {};
    if (document.location.href.indexOf('#') > 0)
    {
        var offset = document.location.href.indexOf('#')+1;
        var qs = document.location.href.substring(offset);
        var list = qs.split(/&+/);
        var s;
        
        for (var i=0; i<list.length; i++)
        {
            s = list[i].split(/=/);
            queryList[s[0]] = s.length == 1 ? '' : s[1];
        }
    } 
    return queryList;
}
    
// 쿼리?싱
function $query()
{
    var queryList = {};
    
    if (document.URL.indexOf('?') > 0)
    {
        var offset = document.URL.indexOf('?')+1;
        var end = document.URL.indexOf('#');        
        var qs;
        if (end < 0)
            qs = document.URL.substring(offset);
        else
            qs = document.URL.substring(offset,end);    
        var list = qs.split(/&+/);
        var s;
        
        for (var i=0; i<list.length; i++)
        {
            s = list[i].split(/=/);
            queryList[s[0]] = s.length == 1 ? '' : s[1];
        }
    } 
    return queryList;
}
function $cookie(key,val,exp,path)
{
	if (!key)
	{
		var c = document.cookie;
		var list = c.split(/; ?/);
		var map = {};
		for (var i=0; i<list.length; i++)
		{
			c = list[i].split(/=/);
			if (c.length == 2)
			{
				map[c[0].replace(/^\\s*|\\s*$/g,'').replace(/;+$/,'')] = c[1];
			}
		}
		return map;
	}
	else if (arguments.length == 1)
	{
		var c = $cookie();
		if (c)
			return c[key];
		else
			return null;
	}
	else
	{
		if (!path)
			path = document.location.pathname.replace(/\/[^\/]+$/, '');
					
		// ??
		if (!val)
		{
			var ex = new Date();
			ex.setDate(ex.getDate() - 1);
			document.cookie = key + "=" + "; expires=" + ex.toGMTString() + ";";
		}
		else if (exp)
		{
			var d = new Date();
			d.setDate(d.getDate() + parseInt(exp));
			document.cookie = key + "=" + val + "; expires=" + d.toGMTString() + ";";
		}
		else
		{
			document.cookie = key + "=" + val + ";";
		}
		return val;
	}
}
function $fontSize(id,val)
{
	var ss = $(id);
	if (ss && ss.style.fontSize)
	{	
		var size = pareInt(ss.style.fontSize.replace(/^([0-9]+).*/, "$1"));
		var unit = ss.replace(/[0-9]+/, '');
		if (!isNaN(val) && val > 0)
		{
			ss.style.fontSize = val + unit;
		}
		else if (val == '+')
		{
			ss.style.fontSize = (size+1) + unit;
		}
		else if (val == '-')
		{
			ss.style.fontSize = (size-1) + unit;
		}
	}
}
function $left(src)
{
    var offset = 0;
    src = $(src);
    while(src)
    {
        offset += src.offsetLeft;
        src = src.offsetParent;
    }
    return offset;
}
function $top(src,att)
{
    var offset = 0;
    src = $(src);
    while(src)
    {
        offset += src.offsetTop
        src = src.offsetParent;
    }
    return offset;
}

function $prompt(title, msg, func, src, x, y)
{
	var m = null;
	if (!func)
	{
		alert('Callback function ??지?해???니??');
		return;
	}	
	var div = $('__BJH_PROMPT__');
	if (div)
	{
		document.body.removeChild(div);
		div = null;
	}
	if (!div)
	{
		div = document.createElement("DIV");
		div.id = '__BJH_PROMPT__';
		div.style.backgroundColor = '#fcfcfc';
		div.style.borderLeftWidth = '1px';
		div.style.borderTopWidth = '1px';
		div.style.borderRightWidth = '3px';
		div.style.borderBottomWidth = '3px';						
		
		div.style.borderStyle = 'solid';
		div.style.borderLeftColor = '#e9e9e9';
		div.style.borderTopColor = '#e9e9e9';
		div.style.borderRightColor = '#e0e0e0';
		div.style.borderBottomColor = '#d0d0d0';						
		
		div.style.width = '310px';
		//div.style.height = '90px';
		div.style.zIndex = 1300;
		div.style.position = 'absolute';
		
		var html = "<table style='width:100%'><tr style='background-color:#2020f0;' ><td style='vertical-align:middle;'>";
		html += "<div id='__BJH_PROMPT_TITLE__' ondragstart='return false;' onselectstart='return false;' style=\"overflow:hidden; cursor:default; position:relative; height:18px; padding-left:10px; background-color:#2020f0; color:#FFFFFF; font-weight:bold; \">";
		html += title;
		html += "</div></td>";
		html += "<td style='background-color:#2020f0; text-align:right; width:18px;' >";
		html += "<span style='cursor:default; width:15px; height:18px; display:inline-block; float:right; color:#FFFFFF; font-weight:bold;' onclick=\"$hide('__BJH_PROMPT__');\">X&nbsp;</span>";
		html += "</td></tr>";
		html += "</table>";
		html += "<table style='width:100%'>";
		html += "<tr><td style=\"margin-left:10px; vertical-align:middle;\">";
		html += "<p ondragstart='return false;' onselectstart='return false;' style='cursor:default; padding-left:10px; padding-top:10px; padding-bottom:5px; float:left;' id='__BJH_PROMPT_MESSAGE__'>" + msg + "</p>";
		html += "<p style='padding:10px;'><input type='text' size='40' id='__BJH_PROMPT_INPUT__'/></p>";
		html += "<p style='height:10px;'>&nbsp</p>";
		html += "</td></tr></table>";
		div.innerHTML = html;
		div.style.display ='none';
		document.body.insertBefore(div, null);
		$addEvent(div, 'keydown', 
			function(e)
			{
				if (e.keyCode == 27)
				{
					$hide('__BJH_PROMPT__');
					
				}
			}
			);
		$addEvent($('__BJH_PROMPT_INPUT__'), 'keydown', 
			function(e)
			{
				if (e.keyCode == 27)
				{
					$hide('__BJH_PROMPT__');
					
				}
				else if (e.keyCode == 13)
				{
					$hide('__BJH_PROMPT__');
					//if ($('__BJH_PROMPT_INPUT__').value.length == 0)
					//	return;
						
					try
					{
						if (typeof func == 'function')
							func($('__BJH_PROMPT_INPUT__').value);
						else
						{
							eval(func + '(\"' + $('__BJH_PROMPT_INPUT__').value + '\")');
						}
					}catch(e)
					{
					}
					
				}
			}
			);
		
		if (!x)
			x = 0;
		if (!y)
			y = 0;
		var left = x;
		var top = y;
		
		if (src)
		{
			left += $left(src);
			top += $top(src);
		}
		div.style.left = left + 'px';
		div.style.top = top + 'px';
		
		$addEvent($('__BJH_PROMPT_TITLE__'), 'mousedown', 
		function(e)
		{
			BJH.__mover__['__BJH_PROMPT__'] = {'x':e.clientX, 'y':e.clientY, 'top':$top(div), 'left':$left(div)};			
		});
		
		$addEvent($('__BJH_PROMPT_TITLE__'), 'mouseup',
		function(e)
		{
			BJH.__mover__['__BJH_PROMPT__'] = {};
			
		});
		$addEvent($('__BJH_PROMPT_TITLE__'), 'mouseout',
		function(e)
		{
			BJH.__mover__['__BJH_PROMPT__'] = {};			
		});
		
		$addEvent($('__BJH_PROMPT_TITLE__'), 'mousemove',
		function(e)
		{
			m = BJH.__mover__['__BJH_PROMPT__'];
			if (m && m['x'])
			{
				var xx = e.clientX - m['x'] + m['left'];
				var yy = e.clientY - m['y'] + m['top'];
				
				$('__BJH_PROMPT__').style.left = xx + 'px';
				$('__BJH_PROMPT__').style.top = yy + 'px';
				
			}
				 
				
		});
	
			
		
	}
	$('__BJH_PROMPT_TITLE__').innerHTML = title;
	$('__BJH_PROMPT_MESSAGE__').innerHTML = msg;
	$('__BJH_PROMPT_INPUT__').value = '';
	
	
	$opacity(div, 0);
	$show(div);
	
	
	if (document.all)
	{
		$opacity(div, 100);
	}
	else
	{
		$fade(div, 0, 100, 4, 2);
	}
	$('__BJH_PROMPT_INPUT__').focus();
	$('__BJH_PROMPT_INPUT__').focus();
	
}


