<!--

/**************************************************

# Program Title : Search & Create Dom Elements For Cross Browse
# Programer : ÀÓ»óº¸
# File Create Day : 2008-10-28
# File Name : js_common_dom.js
# Refer to : [Pro Javascript Techniques]
# Modefications : 

**************************************************/

	// Ready To Use Dom
	function setDomReady( func ){
		// DOM ·ÎµùÀÌ ¿Ï·á µÇ¾ú´Ù¸é Áï½Ã ÇÔ¼ö¸¦ ½ÇÇàÇÑ´Ù.
		if ( setDomReady.done ) return func();
		// ¸¸ÀÏ ÀÌ¹Ì ¾î¶² ÇÔ¼ö¸¦ Ãß°¡ÇÑÀûÀÌ ÀÖÀ¸¸é
		if ( setDomReady.timer ){
			// ½ÇÇàµÉ ÇÔ¼ö ¸ñ·Ï¿¡ ±× ÇÔ¼ö¸¦ Ãß°¡ÇÑ´Ù.
			setDomReady.ready.push( func );
		}else{
			// ÆäÀÌÁö ·ÎµùÀÌ ¸ÕÀú ³¡³­ °æ¿ì¸¦ ´ëºñÇÏ¿©
			// ÆäÀÌÁö ·ÎµùÀÌ ³¡³ª´Â ½ÃÁ¡¿¡ ´ëÇÑ ÀÌº¥Æ®¸¦ Ãß°¡ÇÑ´Ù. 
			addEvent( window, "load", chkDomReady );
			// ½ÇÇàµÉ ÇÔ¼öÀÇ ¹è¿­À» ÃÊ±âÈ­ÇÑ´Ù.
			setDomReady.ready = [ func ];
			// DOMÀÌ ÁØºñµÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù.
			setDomReady.timer = setInterval ( chkDomReady, 13 );
		}
	}

	// DOM ÀÌ Å½»ö °¡´ÉÇÑ »óÈ²ÀÎÁö È®ÀÎÇÑ´Ù.
	function chkDomReady(){
		if ( setDomReady.done ) return false;
		if ( document && document.getElementsByTagName && document.getElementById && document.body ){
				clearInterval( setDomReady.timer );
				setDomReady.timer = null;
				for (var i = 0; i < setDomReady.ready.length ; i++ ){
					setDomReady.ready[i]();
				}
				setDomReady.ready = null;
				setDomReady.done = true;
		}
	}

	var clsDom = {
		// Get Element By ID
		$I : function(strID){
			return document.getElementById(strID);
		}, 
		// Get Element By TagName
		$T : function(strName, elem){
			return (elem || document).getElementsByTagName(strName);
		}, 
		// Element ÂüÁ¶, »ý¼º ¹× »èÁ¦, ÆäÀÌÁö¿¡ Ãß°¡
		nsElem:{
			// Get Element By ClassName
			// 1. getHasClass("TEST")
			// 2. getHasClass("TEST", "li")
			// 3. getHasClass("TEST", "li")[0]
			getHasClass : function(name, type){
				var r = [];
				var re = new RegExp("(^\\s)" + name + "(\\s|$)");
				var e = document.getElementsByTagName(type || "*");
				for (var j = 0 ; j < e.length ; j++ ){
					if ( re.test(e[j]) ) r.push( e[j] );
				}
				return r;
			},
			// Set or Get Attribute
			setGetAttribute : function( elem, name, value ){
				if ( !name || name.constructor  != String ) return '';
				name = { 'for' : 'htmlFor', 'class' : 'className' } [name] || name;
				if ( value != null ){
					elem[name] = value;
					if ( elem.setAttribute ){ elem.setAttribute(name, value); }
				}
				return elem[name] || elem.getAttribute(name) || '';
			},				
			// check Elements
			chkElem : function ( val ){
				var r = [];
				if (val.constructor != Array){ val = [ val ]; }

				for ( var i = 0; i < val.length ; i++ ){
					if ( val[i].constructor == String ){
						var div = document.createElement("div");
						div.innerHTML = val[i];
						for (var j = 0; j < div.childNodes.length; j++ ){ r[r.length] = div.childNodes[j]; }
					}else if ( val[i].length ){
						for (var j = 0; j < val[i].length; j++){ r[r.length] = val[i][j]; }
					}else{
						r[r.length] = val[i];
					}
				}
				return r;
			},
			// Create element
			createElem : function ( elem ){
				return document.createElementNS ? document.createElementsNS( 'http://www.w3.org/1999/xhtml', elem) : document.createElement( elem );
			},
			// Remove Node
			removeElem : function ( elem ){
				if (elem) elem.parentNode.removeChild( elem );
			}, 
			// insert Before
			insBefore : function ( parent, before, elem ){
				if ( elem == null ){
					elem = before;
					before = parent;
					parent = before.parentNode;
				}
				var elems = this.chkElem( elem );
				for ( var i = elems.length - 1; i >= 0 ; i-- ){ parent.insertBefore( elems[i] , before ); }
			},
			// add append
			insAppend : function ( parent, elem ){
				var elems = this.chkElem( elem );
				for (var i = 0; i < elems.length; i++ ){ parent.appendChild( elems[i] ); }
			}
		},

		// ¹®¼­¿¡ Á¸ÀçÇÏ´Â Node Element È®ÀÎ¿ë
		nsNode:{
			// ÇØ´ç ElementÀÇ ¾Õ Element¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getPrev : function( elem ){
				do{ elem = elem.previousSibling;} 
				while ( elem && elem.nodeType != 1 );
				return elem;
			},
			// ÇØ´ç ElementÀÇ µÚ Element¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getNext : function( elem ){
				do{ elem = elem.nextSibling;} 
				while ( elem && elem.nodeType != 1 );
				return elem;
			},		
			// ÇØ´ç ElementÀÇ Ã¹¹øÂ° ChildNode¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getFirst : function( elem ){
				elem = elem.firstChild;
				return elem && elem.nodeType != 1 ? this.getNext ( elem )  : elem;
			},
			// ÇØ´ç ElementÀÇ ¸¶Áö¸· ChildNode¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getLast : function( elem ){
				elem = elem.lastChild;
				return elem && elem.nodeType != 1 ? this.getPrev( elem )  : elem;
			},
			// ÇØ´ç ElementÀÇ ºÎ¸ð Element¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getParent : function( elem, num ){
				num = num || 1;
				for ( var i = 0; i < num ; i++ ){
					if ( elem != null ){ elem = elem.parentNode; }
					return elem;
				}
			},
			// ÇØ´ç ElementÀÇ ChildNode °³¼ö¸¦ ¹ÝÈ¯ÇÑ´Ù.
			getChildElementLenth : function (obj){
				var nodeLen = 0;
				for(var i = 0 ;i<obj.childNodes.length;i++){
					if(isIE){ nodeLen++; }
					else{ if(obj.childNodes[i].nodeType ==1){ nodeLen++; } }
				}
				return nodeLen;
			},
			// ÇØ´ç ElementÀÇ ChildNode¸¦ ¹è¿­·Î ¹ÝÈ¯ÇÑ´Ù.
			getNodeObject : function(obj){
				var arrData = new Array();
				for (var i=0;i<obj.childNodes.length;i++){
					if(obj.childNodes[i].nodeType == 1){ arrData.push( obj.childNodes[i] ); }
				}
				return arrData;
			}
		},
			
		// Æ¯Á¤ ElementÀÇ À§Ä¡¸¦ ±¸ÇÏ±â À§ÇÑ ºÎºÐ
		nsPosition:{
			// ÇØ´ç ElementÀÇ ¹®¼­ ÀüÃ¼ ´ëºñ X À§Ä¡ ÁÂÇ¥°ªÀ» ¹ÝÈ¯
			getPageX : function(elem){
				var p = 0;
				while (elem.offsetParent){
					p += elem.offsetLeft;
					elem = elem.offsetParent;
				}
				return p;
			},
			// ÇØ´ç ElementÀÇ ¹®¼­ ÀüÃ¼ ´ëºñ Y À§Ä¡ ÁÂÇ¥°ªÀ» ¹ÝÈ¯
			getPageY : function(elem){
				var p = 0;
				while (elem.offsetParent){
					p += elem.offsetTop;
					elem = elem.offsetParent;
				}
				return p;
			},
			// ÇØ´ç ElementÀÇ ºÎ¸ð Element ´ëºñ X À§Ä¡ ÁÂÇ¥°ªÀ» ¹ÝÈ¯
			getParentX : function(elem){
				return elem.parentNode == elem.offsetParent ? 
					elem.offsetLeft : this.getPageX(elem) - this.getPageX(elem.parentNode);
			},
			// ÇØ´ç ElementÀÇ ºÎ¸ð Element ´ëºñ Y À§Ä¡ ÁÂÇ¥°ªÀ» ¹ÝÈ¯
			getParentY : function(elem){
				return elem.parentNode == elem.offsetParent ? 
					elem.offsetTop : this.getPageY(elem) - this.getPageY(elem.parentNode);
			},				
			// ÁöÁ¤ ElementÀÇ Left À§Ä¡¸¦ ±¸ÇÑ´Ù (CSS¸¦ ÅëÇØ ¼±¾ðµÇ¾îÀÖ´Â °æ¿ì¿¡ ÇÑÇÑ´Ù. ¹Ì ¼±¾ð½Ã¿¡´Â 0 ¹ÝÈ¯)
			posX : function( elem ){
				return !(isNaN(parseInt(this.getStyle(elem,'left')))) ? parseInt(this.getStyle(elem,'left')) : 0;
			},
			// ÁöÁ¤ ElementÀÇ Top À§Ä¡¸¦ ±¸ÇÑ´Ù (CSS¸¦ ÅëÇØ ¼±¾ðµÇ¾îÀÖ´Â °æ¿ì¿¡ ÇÑÇÑ´Ù. ¹Ì ¼±¾ð½Ã¿¡´Â 0 ¹ÝÈ¯)
			posY : function( elem ){
				return !(isNaN(parseInt(this.getStyle(elem,'top')))) ? parseInt(this.getStyle(elem,'top')) : 0;
			},
			// ÁöÁ¤ ElementÀÇ Left À§Ä¡¸¦ ¼ÂÆÃÇØÁØ´Ù.
			setX : function( elem, pos ){
				elem.style.left = pos + "px";
			},
			// ÁöÁ¤ ElementÀÇ Top À§Ä¡¸¦ ¼ÂÆÃÇØÁØ´Ù.
			setY : function( elem, pos ){
				elem.style.top = pos + "px";
			},
			// ÁöÁ¤ ElementÀÇ ÇöÀç Left À§Ä¡¿¡ px °ªÀ» Ãß°¡ÇÑ´Ù.
			addX : function( elem, pos ){
				this.setX( this.posX( elem ) + pos );
			},				
			// ÁöÁ¤ ElementÀÇ ÇöÀç Top À§Ä¡¿¡ px °ªÀ» Ãß°¡ÇÑ´Ù.
			addX : function( elem, pos ){
				this.setY( this.posY( elem ) + pos );
			},
			// ÁöÁ¤ ElementÀÇ ÇöÀç Height °ªÀ» ±¸ÇÑ´Ù  (CSS¸¦ ÅëÇØ ¼±¾ðµÇ¾îÀÖ´Â °æ¿ì¿¡ ÇÑÇÑ´Ù. ¹Ì ¼±¾ð½Ã¿¡´Â 0 ¹ÝÈ¯)
			getHeight : function( elem ){
				return !(isNaN(parseInt(this.nsStyle.getStyle(elem, 'height')))) ? parseInt(this.nsStyle.getStyle(elem,'height')) : 0;
			},
			// ÁöÁ¤ ElementÀÇ ÇöÀç Height °ªÀ» ±¸ÇÑ´Ù  (CSS¸¦ ÅëÇØ ¼±¾ðµÇ¾îÀÖ´Â °æ¿ì¿¡ ÇÑÇÑ´Ù. ¹Ì ¼±¾ð½Ã¿¡´Â 0 ¹ÝÈ¯)
			getWidth : function( elem ){
				return !(isNaN(parseInt(this.nsStyle.getStyle(elem, 'width')))) ? parseInt(this.nsStyle.getStyle(elem,'width')) : 0;
			},
			// ÁöÁ¤ ElementÀÇ ÃÖ´ë ³ôÀÌ °ªÀ» ±¸ÇÑ´Ù. (hidden µÇ¾î ÀÖ¾îµµ »ó°ü¾ø´Ù)
			getFullHeight : function( elem ){
				if (this.getStyle( elem, 'display' ) != 'none') return elem.offsetHeight || this.getHeight( elem );
				var old = this.nsStyle.resetCSS ( elem, {
					display: '',
					visibility: 'hidden',
					position: 'absolute'
				});
				var h = elem.clientHeight || this.getHeight( elem );
				this.nsStyle.restoreCSS( elem, old );
				return h;
			},
			// ÁöÁ¤ ElementÀÇ ÃÖ´ë ³Êºñ °ªÀ» ±¸ÇÑ´Ù. (hidden µÇ¾î ÀÖ¾îµµ »ó°ü¾ø´Ù)
			getFullWidth : function( elem ){
				if (this.getStyle( elem, 'display' ) != 'none') return elem.offsetWidth || this.getWidth( elem );
				var old = this.nsStyle.resetCSS ( elem, {
					display: '',
					visibility: 'hidden',
					position: 'absolute'
				});
				var w = elem.clientWidth || this.getWidth( elem );
				this.nsStyle.restoreCSS( elem, old );
				return w;
			}
		},

		// style sheet ¸¦ ÇÚµé¸µ ÇÏ±â À§ÇÑ ºÎºÐ
		nsStyle:{
			// ÁöÁ¤ ElementÀÇ ÁöÁ¤ NameÀÇ style sheet ÀÇ °ªÀ» ¹ÝÈ¯ ÇØÁØ´Ù.
			getStyle : function( elem, name ){
				if (elem.style[name]) return elem.style[name];
				else if (elem.currentStyle) return elem.currentStyle[name];
				else if (document.defaultView && document.defaultView.getComputedStyle){
					name = name.replace(/([A-Z])/g, "-$1");
					name = name.toLowerCase();
					var s = document.defaultView.getComputedStyle(elem,"");
					return s && s.getPropertyValue(name);
				}else{
					return null;
				}
			},
			// CSS property °ªÀ» ¼³Á¤ÇÑ´Ù. (restoreCSS¸¦ ÅëÇØ ÃßÈÄ¿¡ º¹±¸°¡´É)
			resetCSS : function( elem, prop ){
				var old = {};
				for ( var i in prop){
					old[i] = elem.style[i];
					elem.style[i] = prop[i];
				}
				return old;
			},
			// resetCSS¸¦ ÀÌ¿ëÇØ ¼³Á¤Çß´ø ElementÀÇ CSS property °ªÀ» º¹±¸ÇÑ´Ù.
			restoreCSS : function( elem, prop ){
				for (var i in prop){ elem.style[i] = prop[i]; }
			}
		},

		// ElementÀÇ °¡½Ã¼ºÀ» ÇÚµé¸µ ÇÏ±â À§ÇÑ ºÎºÐ
		nsDisplay:{
			// ÇØ´ç Element¸¦ ¼û±ä´Ù
			setHide : function(elem){
				var curDisplay = this.nsStyle.getStyle( elem, 'display');
				if (curDisplay != 'none'){ elem.$oldDisplay = curDisplay; }
				elem.style.display = 'none';
			},
			// ÇØ´ç Element¸¦ º¸¿©ÁØ´Ù
			setShow : function(elem){
				elem.style.display = elem.$oldDisplay || 'block';
			},
			// ÇØ´ç ElementÀÇ Åõ¸íµµ¸¦ ¼³Á¤ÇÑ´Ù.
			setOpacity : function(elem, percent){
				if ( elem.filters ){// IE
					elem.filters.alpha.opacity = percent;
				}else{
					elem.style.opacity = percent / 100;
				}
			}
		},

		// ElementÀÇ ¾Ö´Ï¸ÞÀÌ¼ÇÀ» ÇÚµé¸µ ÇÏ±â À§ÇÑ ºÎºÐ
		nsAnimation:{
			// Display NoneÀ¸·Î ¼³Á¤µÇ¾î ÀÖ´Â ElementÀÇ Slide In
			slideIn : function( elem ){
				elem.style.height = '0px';
				this.nsDisplay.setShow( elem );
				var h = this.nsPosition.getFullHeight( elem );
				for (var i = 0; i <= 100; i+=5 ){
					(function(){
						var pos = i;
						setTimeout(function(){elem.style.height = (( pos / 100 ) * h ) + "px";}, ( pos + 1 ) * 10 );
					})();
				}
			},
			// Display NoneÀ¸·Î ¼³Á¤µÇ¾î ÀÖ´Â ElementÀÇ Fade In
			fadeIn : function( elem ){
				this.nsDisplay.setOpacity( elem, 0);
				this.nsDisplay.setShow( elem );
				for (var i = 0; i <= 100; i+=5 ){
					(function(){
						var pos = i;
						setTimeout(function(){ this.nsDisplay.setOpacity( elem, pos );}, ( pos + 1 ) * 10 );
					})();
				}
			}
		},

		// Mouse¸¦ ÇÚµé¸µ ÇÏ±â À§ÇÑ ºÎºÐ
		nsMouse:{
			// ÆäÀÌÁö ÀüÃ¼ ´ëºñ Mouse X ÁÂÇ¥°ª ¹ÝÈ¯
			getX : function(e){
				e = e || window.event;
				return e.pageX || e.clientX + document.body.scrollLeft || 0;
			},
			// ÆäÀÌÁö ÀüÃ¼ ´ëºñ Mouse Y ÁÂÇ¥°ª ¹ÝÈ¯
			getY : function(e){
				e = e || window.event;
				return e.pageY || e.clientY + document.body.scrollTop || 0;
			},
			// ÀÌº¥Æ®°¡ ÀÏ¾î³­ ÇØ´ç Element¿¡ ´ëºñ »ó´ëÀûÀÎ Mouse X ÁÂÇ¥°ª ¹ÝÈ¯
			getElemX : function(e){
				return (e && e.layerX) || window.event.offsetX;
			},
			// ÀÌº¥Æ®°¡ ÀÏ¾î³­ ÇØ´ç Element¿¡ ´ëºñ »ó´ëÀûÀÎ Mouse Y ÁÂÇ¥°ª ¹ÝÈ¯
			getElemY : function(e){
				return (e && e.layerY) || window.event.offsetY;
			}
		}
	}

//-->