var GToolTip = {
        //»óÇ° ¼±ÅÃ½Ã »óÇ° ¼±ÅÃ DIV¸¦ Åä±Û ÇÑ´Ù...
        ShowDiv : function (evt, did, elemWidth, elemHeight) //cid: ¼÷¼ÒID
        {
            try{
                if(elemWidth == null) elemWidth = $(did).clientWidth;
                if(elemHeight == null) elemHeight = $(did).clientHeight;
                
                var xpos = Event.pointerX(evt);
                var ypos = Event.pointerY(evt);
                
                ney = ypos + elemHeight; //elemÀÇ ¹Ø¹Ù´ÚÀÇ À§Ä¡...
                nsy = GUtil.scrollY() + GUtil.browseHeight(); //º¸ÀÌ´Â È­¸éÀÇ Á¦ÀÏ ¾Æ·¨ºÎºÐ..                
                if(ney > nsy) ypos -= (10 + ney - nsy);                            
                $(did).style.top = ypos;
                
                nex = xpos - elemWidth;//elemÀÇ ¿ÞÂÊÀ§Ä¡
                nsx = GUtil.scrollX(); //È­¸éÀÇ ¿ÞÂÊ ºÎºÐ
                if(nex < nsx) nex += (10 + nsx - nex);
                $(did).style.left = nex;
                
                $(did).style.display = 'block';
            }catch(e){alert(e);}
        },
        
        ShowDivAtCenter : function (evt, did, elemWidth, elemHeight)
        {
            try{
                if (elemWidth == null || elemWidth == 'undefined') elemWidth = $(did).clientWidth;
                if (elemHeight == null || elemHeight == 'undefined') elemHeight = $(did).clientHeight;

                var xpos = 0, ypos = 0;
                if (evt != null && evt != 'undefined') {
                    xpos = Event.pointerX(evt);
                    ypos = Event.pointerY(evt);
                }
                
                $(did).style.top = ypos;
                if(elemHeight != 0 && elemHeight != null && elemHeight != '')
                    $(did).style.top = GUtil.scrollY() + (document.body.clientHeight - elemHeight)*2/3;//»óÇÏ 1/3À§Ä¡¿¡ Ç¥½Ã
                else
                    $(did).style.top = ypos - elemHeight - 5;
                    
                if(elemWidth != 0 && elemWidth != null && elemWidth != '')
                    $(did).style.left = GUtil.scrollX() + (document.body.clientWidth - elemWidth)/2;
                else
                    $(did).style.left = xpos - elemWidth - 5;
                                
                $(did).style.display = 'block';
            }catch(e){alert(e);}
        },
        
        HideDiv : function(evt, did)
        {
            $(did).style.display = 'none';
        }
    }
    

var GUtil = {
    LTrim : function( value ) {	
        var re = /\s*((\S+\s*)*)/;
        return value.replace(re, "$1");
    },

    RTrim : function( value ) {

        var re = /((\s*\S+)*)\s*/;
        return value.replace(re, "$1");
    },

    trim: function( value ) {	
        return GUtil.LTrim(GUtil.RTrim(value));
    },
    
    browseWidth : function (frm)
    {   
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.innerWidth ) == 'number' ) {//Non-IE            
            return frm.innerWidth;            
        } else if( frm.document.documentElement && ( frm.document.documentElement.clientWidth || frm.document.documentElement.clientHeight ) ) {//IE 6+ in 'standards compliant mode'
            return frm.document.documentElement.clientWidth;            
        } else if( frm.document.body && ( frm.document.body.clientWidth || frm.document.body.clientHeight ) ) {//IE 4 compatible            
            return frm.document.body.clientWidth;            
        }
    },
    
    browseHeight : function (frm)
    {
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.innerWidth ) == 'number' ) {//Non-IE                        
            return frm.innerHeight;
        } else if( frm.document.documentElement && ( frm.document.documentElement.clientWidth || frm.document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode'                        
            return frm.document.documentElement.clientHeight;
        } else if( frm.document.body && ( frm.document.body.clientWidth || frm.document.body.clientHeight ) ) { //IE 4 compatible                        
            return frm.document.body.clientHeight;
        }
    },
    
    scrollX : function(frm)
    {
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.pageYOffset ) == 'number' ) {//Netscape compliant            
            return frm.pageXOffset;
        } else if( frm.document.body && ( frm.document.body.scrollLeft || frm.document.body.scrollTop ) ) {//DOM compliant            
            return frm.document.body.scrollLeft;
        } else if( frm.document.documentElement && ( frm.document.documentElement.scrollLeft || frm.document.documentElement.scrollTop ) ) { //IE6 standards compliant mode            
            return frm.document.documentElement.scrollLeft;
        }
        return 0;
    },
    
    scrollY : function(frm)
    {
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.pageYOffset ) == 'number' ) {//Netscape compliant            
            return frm.pageYOffset;
        } else if( frm.document.body && ( frm.document.body.scrollLeft || frm.document.body.scrollTop ) ) {//DOM compliant            
            return frm.document.body.scrollTop;
        } else if( frm.document.documentElement && ( frm.document.documentElement.scrollLeft || frm.document.documentElement.scrollTop ) ) {//IE6 standards compliant mode            
            return frm.document.documentElement.scrollTop;
        }
        return 0;
    },
    
    DocHeight : function(frm)
    {
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.innerWidth ) == 'number' ) return frm.innerHeight; //Non-IE
        else if( frm.document.documentElement && ( frm.document.documentElement.clientWidth || frm.document.documentElement.clientHeight ) ) return frm.document.documentElement.clientHeight;//IE 6+ in 'standards compliant mode'
        else if( frm.document.body && ( frm.document.body.clientWidth || frm.document.body.clientHeight ) ) return frm.document.body.clientHeight;//IE 4 compatible
    },
    
    DocWidth : function(frm)
    {
        if(frm==null || frm == 'undefined' || typeof frm == 'undefined') frm = window;
        if( typeof( frm.innerWidth ) == 'number' ) return frm.innerWidth; //Non-IE
        else if( frm.document.documentElement && ( frm.document.documentElement.clientWidth || frm.document.documentElement.clientHeight ) ) return frm.document.documentElement.clientWidth;//IE 6+ in 'standards compliant mode'           
        else if( frm.document.body && ( frm.document.body.clientWidth || frm.document.body.clientHeight ) ) return frm.document.body.clientWidth;//IE 4 compatible
    }, 
      
    stopEventFlow: function(e)
    {
        if(e.stopPropagation)
            e.stopPropagation();
        else
            e.cancelBubble = true;
    },
    
    roundNumber: function(numX, dotPos) 
    {
        if(typeof dotPos == 'undefined' || dotPos == null ) dotPos = 0;
        if(typeof numX == 'string') numX = parseFloat(numX);
        
        point = 1;                    
        if(dotPos<0) //¼Ò¼öÁ¡ ÀÖ´Â °æ¿ì
        {
            for(k=0;k>dotPos;k--)
                point *= 10;
        }
        else //¼Ò¼öÁ¡ ¾ø´Ù.
        {
            for(k=0;k<dotPos;k++)
                point /= 10;
        }
        
        return Math.round(numX*point)/point;
    },
    
    ceilNumber: function(numX, dotPos) 
    {
        if(typeof dotPos != 'undefined' && dotPos != null ) dotPos = dotPos;
        if(typeof numX == 'string') numX = parseFloat(numX);
        
        point = 1;                    
        if(dotPos<0) //¼Ò¼öÁ¡ ÀÖ´Â °æ¿ì
        {
            for(k=0;k>dotPos;k--)
                point *= 10;
        }
        else //¼Ò¼öÁ¡ ¾ø´Ù.
        {
            for(k=0;k<dotPos;k++)
                point /= 10;
        }
        
        return Math.ceil(numX*point)/point;
    },
    
    parseNumber : function (numB)
    {
        try{            
            numB = parseFloat(GUtil.remove_comma(numB));
        }catch(e)
        {
            return 0;
        }
        if(isNaN(numB)) return 0;
        else return numB;
    },
    
    parseNumEmpty0 : function (numB)
    {
        if(numB==null) return 0;
        numB = numB.replace(' ', '');
        if(numB=='') return 0;
        return GUtil.parseNumber(numB);
    },
    
    add_comma : function (numA)
    {
        numA = GUtil.remove_comma(numA);
        
        nStr = numA + '';
	    x = nStr.split('.');
	    x1 = x[0];
	    x2 = x.length > 1 ? '.' + x[1] : '';
	    var rgx = /(\d+)(\d{3})/;
	    while (rgx.test(x1)) {
		    x1 = x1.replace(rgx, '$1' + ',' + '$2');
	    }
	    return x1 + x2;
    },
    
    rAndComma : function (num, NumOfZeros) 
    {
        var pos = 0;
        if(typeof NumOfZeros != 'undefined' && NumOfZeros != null) pos = NumOfZeros;
        
        num = GUtil.remove_comma(num);
        
        num = GUtil.roundNumber(num, pos);
        
        num = GUtil.add_comma(num);
	    
	    return num;

    },
    
    remove_comma : function (numY) //,Á¦°ÅÇÏ°í ¹®ÀÚ¿­·Î º¯È¯µÇ¾î ¹ÝÈ¯ÇÑ´Ù.
    {
        numY= numY+'';
        numY = numY.split(',').join('');
        return numY;
    },
    
    parseDate : function(str)
    {
        var dval = new Date(str.replace(/-/g,"/"));
        return dval;
    },
    
    dateToString : function (date)
    {
        if(typeof date == 'string') date = GUtil.parseDate(date);
        else if(typeof date == 'number') date = new Date(date);
        var y = date.getFullYear();
        var m = date.getMonth()+1;
        var d = date.getDate();
        var str = y + "-" + ((m<10)? '0'+m : m) + '-' + ((d<10)? '0'+d : d);
        return str;
    },
    
    timeToString : function(date)
    {
        if(typeof date == 'string') date = GUtil.parseDate(date);
        else if(typeof date == 'number') date = new Date(date);
        var h = date.getHours();
        var m = date.getMinutes();
        var str = ((h<10)? '0'+h : ''+h) + ':' + ((m<10)? '0'+m : ''+m);
        return str;
    },
    
    dateTimeToString : function(date)
    {
        if(typeof date == 'string') date = GUtil.parseDate(date);
        else if(typeof date == 'number') date = new Date(date);
        return GUtil.dateToString(date) + ' ' + GUtil.timeToString(date);    
    },
    
    dateAddDayTime : function (sdate, day, hour, min)
    {
        var m =  min*60*1000;
        var h = hour*60*60*1000;
        var d = day*24*60*60*1000;
        if(typeof sdate == 'string') sdate = GUtil.parseDate(sdate).getTime();;
        if(typeof sdate != 'number') sdate = sdate.getTime();
        
        sdate += (d+h+m);
        var date = new Date(sdate);
        return date;
    },
    
    dateDiffInHourMin : function (fromDate, toDate)
    {
        if(typeof fromDate == 'string') fromDate = GUtil.parseDate(fromDate).getTime();;
        if(typeof toDate == 'string') toDate = GUtil.parseDate(toDate).getTime();;
        if(typeof fromDate == 'number') fromDate = new Date(fromDate);
        if(typeof toDate == 'number') toDate = new Date(toDate);
        
        hm = new Array();
        var diff = ((toDate-fromDate)/(60*60*1000));
        hm[0] = Math.floor(diff);
        diff = diff - hm[0];
        hm[1] = GUtil.roundNumber(diff*60, 0);
        return hm;
    },
    
    getQueryString : function (variable, url) 
    {
	    var query = window.location.search.substring(1);
	    if(url != null)
		    query = url;
    		
	    var vars = query.split("&");
	    for (var i=0;i<vars.length;i++) {
		    var pair = vars[i].split("=");
		    if (pair[0] == variable) {
		        //if(pair[1]=='') return null;
			    return pair[1];
		    }
	    }
	    return null;
    },
    
    //¹°À½Ç¥¸¦ Á¦¿ÜÇÑ ´ÙÀ½ ±ÛÀÚºÎÅÍ
    setQueryString : function(query, varName, varValue)
    {
        if(query==null)
            query = window.location.search.substring(1);
            
    	var newqry = varName + '=' + varValue;
	    var vars = query.split("&");
	    for (var i=0;i<vars.length;i++) {
		    var pair = vars[i].split("=");
		    if (pair[0] == varName)
		        continue;		    
		    newqry += ('&' + vars[i]);
	    }  
	    
	    return newqry;
    },
    
    //hidden ÄÁÆ®·ÑÀº class¼Ó¼ºÀ» °¡Áú¼ö ¾øÀ¸¹Ç·Î ElemByClassÀ» »ç¿ëÇÒ¼ö ¾ø´Ù.
    //findElem()ÀÌ ElemByClass()¸¦ ´ëÃ¼ÇÒ ¼ö ÀÖ´ÀÁö °í·ÁÇØ º¼°Í!
    
    //id·Î Ã£±â.. IDÀÇ ÀÏºÎ¸¦ °¡Áø°Í...
    //   GUtil.findElem(strID, oElm, strTagName)
    findElem : function (strID, oElm, strTagName)
    {
        if(strTagName==null) strTagName = "*";
        if(oElm==null) oElm = document;
        
        var arrElements = oElm.getElementsByTagName(strTagName);
        
        strID = strID.toLowerCase();
        for(var i=0; i<arrElements.length; i++)
        {       
            if(arrElements[i].id != null && arrElements[i].id != "")
            {
                tstr = arrElements[i].id.toLowerCase();
                if(tstr.indexOf(strID)>=0)
                    return arrElements[i];
            }
        }
        return null;
    },

    //Class NameÀ¸·Î Element¸¦ Ã£´Â´Ù.
    ElemByClass :function(oClassNames, oElm, strTagName )
    {
        if(strTagName==null) strTagName = "*";
        if(oElm==null) oElm = document;
        
        var arrElements = oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        var arrRegExpClassNames = new Array();
        if(typeof oClassNames == "object"){
            for(var i=0; i<oClassNames.length; i++){
                arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
            }
        }
        else{
            arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
        }
        var oElement;
        var bMatchesAll;
        for(var j=0; j<arrElements.length; j++){
            oElement = arrElements[j];
            bMatchesAll = true;
            for(var k=0; k<arrRegExpClassNames.length; k++){
                if(!arrRegExpClassNames[k].test(oElement.className)){
                    bMatchesAll = false;
                    break;
                }
            }
            if(bMatchesAll){
                //arrReturnElements.push(oElement);
                return oElement;
            }
        }
        return null;
        //return (arrReturnElements)
    },
    
    ElemSByClass : function (oClassNames, oElm, strTagName )
    {
        if(strTagName==null) strTagName = "*";
        if(oElm==null) oElm = document;
        
        var arrElements = oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        var arrRegExpClassNames = new Array();
        if(typeof oClassNames == "object"){
            for(var i=0; i<oClassNames.length; i++){
                arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
            }
        }
        else{
            arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
        }
        var oElement;
        var bMatchesAll;
        for(var j=0; j<arrElements.length; j++){
            oElement = arrElements[j];
            bMatchesAll = true;
            for(var k=0; k<arrRegExpClassNames.length; k++){
                if(!arrRegExpClassNames[k].test(oElement.className)){
                    bMatchesAll = false;
                    break;
                }
            }
            if(bMatchesAll){
                arrReturnElements.push(oElement);
            }
        }
        return (arrReturnElements);
    },
    
    //¿¹¾à »óÅÂ º¯°æ½Ã ¿¹¾à »óÅÂ¸¦ Æ÷ÇÔÇÏ´Â ¾ÆÀÌÅÛ Å×ÀÌºí Ã£±â..(ÇÏ³ªÀÇ »óÇ°)
    FindOuterElementByClass : function(src, searchClass)//class="RevItemTblEach" //isExactRevItemTblEachÀÌ true ÀÌ¸é tableÀº ¾ÈÃ£´Â´Ù.
    {
        if(src == null || searchClass == null) return null;
        
        var isfound = false;
        while(true)
        {
            if(src == null || typeof src.parentNode == 'undefined' || src.parentNode == null || src == src.parentNode)
                break;

            try
            {
                if(src.className.toLowerCase().indexOf(searchClass.toLowerCase()) >= 0 )
                {
                    isfound = true;
                    break;
                }
            }catch(e){}
            
            src = src.parentNode;
        }
        if(isfound) return src;
        else return null;
    },
    
    FindOuterElementByTagName : function(src, searchTag)//class="RevItemTblEach" //isExactRevItemTblEachÀÌ true ÀÌ¸é tableÀº ¾ÈÃ£´Â´Ù.
    {
        if(src == null || searchTag == null) return null;
        
        var isfound = false;
        while(true)
        {
            if(src == null || typeof src.parentNode == 'undefined' || src.parentNode == null || src == src.parentNode)
                break;

            try
            {
                if(src.tagName.toLowerCase() == searchTag.toLowerCase() )
                {
                    isfound = true;
                    break;
                }
            }catch(e){}
            
            src = src.parentNode;
        }
        if(isfound) return src;
        else return null;
    },
    
    SelectDropDown : function(ctldd, ddstr)
    {
        for(ddidx = 0 ; ddidx< ctldd.options.length; ddidx++)
        {
            if(ctldd.options[ddidx].text == ddstr || ctldd.options[ddidx].value == ddstr)
            {
                ctldd.selectedIndex = ddidx;
                return;
            }
        }
    },
    
    DDSelectedValue : function(ctldd)
    {
        return ctldd.options[ctldd.selectedIndex].value;
    },
    
    DDSelectedText : function(ctldd)
    {
        return ctldd.options[ctldd.selectedIndex].innerHTML;
    }
    
}

// -->  row highlighter

//e.Row.Attributes.Add("onMouseOver", "RowHighlighter.OnOver(this,'" + HColor + "');");
//e.Row.Attributes.Add("onMouseOut", "RowHighlighter.OnOut(this);");
//e.Row.Attributes.Add("onClick", "RowHighlighter.OnClick(event);");
// onmouseover='RowHighlighter.OnOver(this, null);' onmouseout='RowHighlighter.OnOut(this);' onclick='RowHighlighter.OnClick(event);'
var RowHighlighter ={
    _oldColor : null,

    OnOver: function(source, HColor)
    {
        if(HColor==null)
            HColor = '#DDDDDD';
        _oldColor = source.style.backgroundColor;
        source.style.backgroundColor = HColor;
    },

    OnOut: function(source)
    {
        source.style.backgroundColor = _oldColor;
    },

    OnClick: function(evt)
    {
        var e=evt?evt:window.event?window.event:null;
	    var srcElem = e.target ? e.target : (e.srcElement ? e.srcElement : null);

        var trElem = srcElem;
	    //crawl up the tree to find the table row
	    while (trElem && trElem.tagName.toLowerCase() != "tr")
	    {
	        if (trElem.parentNode) trElem = trElem.parentNode;
	        else if (trElem.parentElement) trElem = trElem.parentElement;
	    }

	    if(!trElem || trElem.tagName.toLowerCase() != "tr") return;

        if(srcElem.tagName.toLowerCase() == 'td' && typeof onClickTableRow != 'undefined')
            onClickTableRow(trElem);
    }
}
// <-- row highlighter

var GDocumentProcess = {
    //select : µå·Ó´Ù¿î ¼±ÅÃ½Ã ºí·¯¸µ.
    AttachDropDownBlurOnSelect : function()
    {
        var os = document.getElementsByTagName('select');
        for(ok = 0; ok < os.length; ok++)
        {
            Event.observe(os[ok], 'change', 
                function(e)
                {
                    window.focus();
                }
            );
        }
    },
    
    //ÀÌ¹ÌÁö¸µÅ© Å¬¸¯½Ã ºí·¯¸µ
    AttachImgLinkBlurOnClick : function()
    {
        Event.observe(document, 'click', 
            function(evt)
            {
                var e=evt ? evt:window.event ? window.event:null;
	            var srcElem = e.target ? e.target : (e.srcElement ? e.srcElement : null);
	            var tag = srcElem.tagName.toLowerCase();
	            if(tag == 'a' || tag == 'img') window.focus();
            }
        );
    },
    
    //ÅØ½ºÆ® »óÀÚ¿¡¼­ ¿£ÅÍÅ° ÀÔ·Â½Ã ¸·±â..//¹®¼­ÀÇ Á¦ÀÏ ³¡¿¡¼­ È£ÃâÇØ¾ß ÇÑ´Ù.
    AttachStopReturnKey : function ()
    {
        Event.observe(document, 'keypress', 
            function(evt)
            {
                var evt = (evt) ? evt : ((event) ? event : null);
                var srcElem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
                var tag = srcElem.tagName.toLowerCase();
                if(tag == 'input' && srcElem.onkeypress == null)//ÀÌº¥Æ® ÇÚµé·¯°¡ ÀÌ¹Ì ÀÖ´Â °æ¿ì´Â ±×´ë·Î µÐ´Ù.
                {
                    if (evt.keyCode == 13 && srcElem.type=="text")
                    {
                       alert('¿£ÅÍÅ° ´ë½Å ¸¶¿ì½º¸¦ Å¬¸¯ ÇÏ¼¼¿ä.');
                       Event.stop(evt);
                       return false;
                    }
                }
            }
        );
    }
}

var GCookie = {
     create : function(name,value,days) {
	    if (days) {
		    var date = new Date();
		    date.setTime(date.getTime()+(days*24*60*60*1000));
		    var expires = "; expires="+date.toGMTString();
	    }
	    else var expires = "";
	    document.cookie = name+"="+value+expires+"; path=/";
    },

    read : function(name) {
	    var nameEQ = name + "=";
	    var ca = document.cookie.split(';');
	    for(var i=0;i < ca.length;i++) {
		    var c = ca[i];
		    while (c.charAt(0)==' ') c = c.substring(1,c.length);
		    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	    }
	    return null;
    },

    erase : function(name) {
	    GCookie.create(name,"",-1);
    }
}