//##############################################################################
//# ÇÁ·Î±×·¥ID : base.js
//# ÆäÀÌÁö¼³¸í : ¸ðµç »çÀÌÆ® °øÅë ½ºÅ©¸³Æ®
//# ÃÖÃÊÀÛ¼ºÀÚ : ±è¿Õ±â
//# ÃÖÃÊÀÛ¼ºÀÏ : 2007.10.05
//# ÃÖÁ¾¼öÁ¤ÀÚ : ±è¿Õ±â
//# ÃÖÁ¾¼öÁ¤ÀÏ : 2008.01.26
//#
//#
//# °ËÁõ °ü·Ã
//# ------------> jsIsIE()                                              ===> ºê¶ó¿ìÀú CHECK
//# ------------> jsIsObject(i_ele)                                     ===> ¿ÀºêÁ§Æ® CHECK
//# ------------> jsIsForm(i_ele)                                       ===> ÀÔ·ÂÆû CHECK
//# ------------> jsIsEmpty(i_str)                                      ===> °ø¹é¹®ÀÚ¿­ CHECK
//# ------------> jsIsDigit(i_str)                                      ===> ¼ýÀÚ CHECK
//# ------------> jsIsEnglish(i_str)                                    ===> ¿µ¾î CHECK
//# ------------> jsIsHangeul(i_str)                                    ===> ÇÑ±Û CHECK
//#
//#
//# ¹®ÀÚ¿­Ã³¸® °ü·Ã
//# ------------> jsTrim(i_str)                                         ===> ÁÂ¿ì°ø¹é Á¦°Å
//# ------------> jsParseProperty(i_strProp, i_strToken)                ===> ÇÁ·ÎÆÛÆ¼ ÆÄ½Ì
//#
//#
//# ¿¤¸®¸ÕÆ® °ü·Ã
//# ------------> jsTrimElement(i_str)                                  ===> ¿¤¸®¸ÕÆ® °ª ÁÂ¿ì°ø¹é Á¦°Å
//# ------------> jsTrimTextElements(i_frm)                             ===> ¸ðµç TEXT(TEXTAREA) ¿¤¸®¸ÕÆ® °ª ÁÂ¿ì°ø¹é Á¦°Å
//# ------------> jsGetElementsByClass(i_strCls, i_strTag, i_strPid)    ===> Å¬·¡½º ÀÌ¸§À¸·Î ¿¤¸®¸ÕÆ® °Ë»ö
//# ------------> jsIgnoreWhiteSpace(i_ele)                             ===> ºó ÅØ½ºÆ®³ëµå Á¦°Å
//# ------------> jsGetPositionX(i_ele)                                 ===> BODY¸¦ ±âÁØÀ¸·Î ¿¤¸®¸ÕÆ®ÀÇ XÁÂÇ¥ °è»ê
//# ------------> jsGetPositionY(i_ele)                                 ===> BODY¸¦ ±âÁØÀ¸·Î ¿¤¸®¸ÕÆ®ÀÇ YÁÂÇ¥ °è»ê
//# ------------> jsOrderElementPrev(i_ele)                             ===> ÀÌÀü ¼ø¼­·Î ÀÌµ¿
//# ------------> jsOrderElementNext(i_ele)                             ===> ´ÙÀ½ ¼ø¼­·Î ÀÌµ¿
//#
//#
//# ÄÁÅÙÃ÷ °ü·Ã
//# ------------> jsPopup(i_url, i_name, i_str)             ===> ÆË¾÷
//# ------------> jsInsertFlash(i_url, i_str)               ===> ÇÃ·¡½Ã »ðÀÔ
//# ------------> jsCreateLayer(i_id, i_src, i_is_file)     ===> ·¹ÀÌ¾î »ý¼º
//#
//#
//# ÀÌº¥Æ® °ü·Ã
//# ------------> jsAttachEvent(i_event_nm, i_func)         ===> À©µµ¿ì ÀÌº¥Æ® Ãß°¡
//#
//#
//# AJAX °ü·Ã
//# ------------> jsCreateXMLHTTP()                         ===> XMLHTTP °´Ã¼ »ý¼º
//# ------------> jsGetSource(i_url)                        ===> ÆÄÀÏ ³»¿ë ÃßÃâ
//# ------------> jsInclude(i_url, i_id)                    ===> ÆÄÀÏ ÀÎÅ¬·çµå
//##############################################################################


//==============================================================================
// Á¤±Ô½Ä Á¤ÀÇ
//==============================================================================
var JS_CONST_REGEXP_DIGIT   = /^[0-9]+$/;
var JS_CONST_REGEXP_ENGLISH = /^[a-zA-Z]+$/;
var JS_CONST_REGEXP_HANGEUL = /^[¤¡-¤¾°¡-ÆR]+$/;
var JS_CONST_REGEXP_TRIM    = /(^[\s]*)|([\s]*$)/g;


//==============================================================================
// °ËÁõ °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // ºê¶ó¿ìÀú CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsIE()
     * @return
     *      ºê¶ó¿ìÀú°¡ IEÀÎÁöÀÇ ³í¸®°ª
     * @description
     *      ºÒ¿ÏÀü... ³ªÁß¿¡ ·ÎÁ÷ Ãß°¡...
     */
    function jsIsIE() {
        return (navigator.userAgent.toUpperCase().indexOf("MSIE") != -1);
    }


    //--------------------------------------------------------------------------
    // ¿ÀºêÁ§Æ® CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsObject(i_ele)
     * @param
     *      i_obj ¿¤¸®¸ÕÆ®
     * @return
     *      ¿ÀºêÁ§Æ®ÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsObject(i_ele) {
        return (i_ele != null) && (typeof(i_ele) == "object");
    }


    //--------------------------------------------------------------------------
    // ÀÔ·ÂÆû CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsForm(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @return
     *      ÀÔ·ÂÆûÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsForm(i_ele) {
        return (i_ele != null) && (typeof(i_ele) == "object") && (i_ele.value != undefined);
    }


    //--------------------------------------------------------------------------
    // °ø¹é¹®ÀÚ¿­ CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsEmpty(i_str)
     * @param
     *      i_str ¹®ÀÚ¿­
     * @return
     *      °ø¹é¹®ÀÚ¿­ÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsEmpty(i_str) {
        return (i_str == null) || (i_str.replace(JS_CONST_REGEXP_TRIM, "").length == 0);
    }


    //--------------------------------------------------------------------------
    // ¼ýÀÚ CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsDigit(i_str)
     * @param
     *      i_str ¹®ÀÚ¿­
     * @return
     *      ¼ýÀÚÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsDigit(i_str) {
        return (i_str != null) && (JS_CONST_REGEXP_DIGIT.test(i_str));
    }


    //--------------------------------------------------------------------------
    // ¿µ¾î CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsEnglish(i_str)
     * @param
     *      i_str ¹®ÀÚ¿­
     * @return
     *      ¿µ¾îÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsEnglish(i_str) {
        return (i_str != null) && (JS_CONST_REGEXP_ENGLISH.test(i_str));
    }


    //--------------------------------------------------------------------------
    // ÇÑ±Û CHECK
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIsHangeul(i_str)
     * @param
     *      i_str ¹®ÀÚ¿­
     * @return
     *      ÇÑ±ÛÀÎÁöÀÇ ³í¸®°ª
     */
    function jsIsHangeul(i_str) {
        return (i_str != null) && (JS_CONST_REGEXP_HANGEUL.test(i_str));
    }


//==============================================================================
// ¹®ÀÚ¿­Ã³¸® °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // ÁÂ¿ì°ø¹é Á¦°Å
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsTrim(i_str)
     * @param
     *      i_str ¹®ÀÚ¿­
     * @return
     *      ÁÂ¿ì°ø¹éÀÌ Á¦°ÅµÈ ¹®ÀÚ¿­
     */
    function jsTrim(i_str) {
        if (i_str == null) return null;

        return i_str.replace(JS_CONST_REGEXP_TRIM, "");
    }


    //--------------------------------------------------------------------------
    // ÇÁ·ÎÆÛÆ¼ ÆÄ½Ì
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsParseProperty(i_strProp, i_strToken)
     * @param
     *      i_strProp  ÇÁ·ÎÆÛÆ¼Çü½Ä ¹®ÀÚ¿­
     *      i_strToken ±¸ºÐÀÚ
     * @return
     *      Å°¿Í °ªÀ¸·Î ÀÌ·ç¾îÁø ´ÙÂ÷¿ø ¹è¿­º¯¼ö
     * @description
     *      i_strPropÀÇ Çü½ÄÀº "key=value"¿Í °°ÀÌ ÀÛ¼ºÇÏ¸ç i_strTokenÀº ","°¡ µðÆúÆ®
     *
     *      ex) test = jsParseProperty("width=100&height=200&top=50", "&")
     *          test.get("width")  ==> 100
     *          test.get("height") ==> 200
     *          test.get("top")    ==> 50
     */
    function jsParseProperty(i_strProp, i_strToken) {
        var aryList = new Array();

        if (jsIsEmpty(i_strProp) == false) {
            var aryProps = i_strProp.replace(/[\s]/g, "").split(i_strToken != null ? i_strToken : ",");
            var intCnt   = 0;

            for (var intI=0; intI < aryProps.length; intI++) {
                if (aryProps[intI].indexOf("=") != -1) {
                    var aryItem = aryProps[intI].split("=");

                    if (aryItem[0].length > 0) {
                        aryList[intCnt] = new Array(aryItem[0], aryItem[1]);
                        intCnt++;
                    }
                }
            }
        }

        aryList.get = function(i_strKey, i_strDef) {
            for (var intI=0; intI < this.length; intI++) {
                if (this[intI][0] == i_strKey) {
                    return this[intI][1];
                }
            }

            return i_strDef;
        }

        return aryList;
    }


//==============================================================================
// ¿¤¸®¸ÕÆ® °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // ¿¤¸®¸ÕÆ® °ª ÁÂ¿ì°ø¹é Á¦°Å
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsTrimElement(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @return
     *      ÁÂ¿ì°ø¹éÀÌ Á¦°ÅµÈ ¿¤¸®¸ÕÆ®ÀÇ °ª
     */
    function jsTrimElement(i_ele) {
        i_ele.value = i_ele.value.replace(JS_CONST_REGEXP_TRIM,"");

        return i_ele.value;
    }


    //--------------------------------------------------------------------------
    // ¸ðµç TEXT(TEXTAREA) ¿¤¸®¸ÕÆ® °ª ÁÂ¿ì°ø¹é Á¦°Å
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsTrimTextElements(i_frm)
     * @param
     *      i_frm ¿¤¸®¸ÕÆ® ºÎ¸ð Æû
     */
    function jsTrimTextElements(i_frm) {
        for (var i=0; i < i_frm.elements.length; i++) {
            if ((i_frm.elements[i].type == "text") || (i_frm.elements[i].type == "textarea")) {
                jsTrimElement(i_frm.elements[i]);
            }
        }
    }


    //--------------------------------------------------------------------------
    // Å¬·¡½º ÀÌ¸§À¸·Î ¿¤¸®¸ÕÆ® °Ë»ö
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsGetElementsByClass(i_strCls, i_strTag, i_strPid)
     * @param
     *      i_strCls Å¬·¡½º ÀÌ¸§
     *      i_strTag ÅÂ±× ÀÌ¸§
     *      i_strPid ºÎ¸ð id
     * @return
     *      °Ë»öµÈ ¿¤¸®¸ÕÆ®°¡ ÀúÀåµÈ ¹è¿­º¯¼ö
     */
    function jsGetElementsByClass(i_strCls, i_strTag, i_strPid) {
        var aryResult = new Array();
        var eleParent = document.getElementById(i_strPid);
        var aryEles   = (eleParent != null ? eleParent : document).getElementsByTagName(i_strTag != null ? i_strTag : "*");
        var intCnt    = 0;

        for (var intI=0; intI < aryEles.length; intI++) {
            if (aryEles[intI].className.match(i_strCls)) {
                aryResult[intCnt] = aryEles[intI];
                intCnt++;
            }
        }

        return aryResult;
    }


    //--------------------------------------------------------------------------
    // ºó ÅØ½ºÆ®³ëµå Á¦°Å
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsIgnoreWhiteSpace(i_ele)
     * @used
     *      jsIsEmpty(i_str)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     */
    function jsIgnoreWhiteSpace(i_ele) {
        if (i_ele == null) return;

        for (var intI=0; intI < i_ele.childNodes.length; intI++) {
            var objNode = i_ele.childNodes[intI];

            if ((objNode.nodeType == 3) && (jsIsEmpty(objNode.nodeValue) == true)) {
                i_ele.removeChild(objNode);
                intI--;
            }
            else {
                jsIgnoreWhiteSpace(objNode);
            }
        }
    }


    //--------------------------------------------------------------------------
    // BODY¸¦ ±âÁØÀ¸·Î ¿¤¸®¸ÕÆ®ÀÇ XÁÂÇ¥ °è»ê
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsGetPositionX(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @return
     *      ¿¤¸®¸ÕÆ®ÀÇ XÁÂÇ¥
     */
    function jsGetPositionX(i_ele) {
        var intX = 0;

        do {
            intX  += i_ele.offsetLeft;
            i_ele  = i_ele.offsetParent;
        }
        while (i_ele != document.body);

        return intX;
    }


    //--------------------------------------------------------------------------
    // BODY¸¦ ±âÁØÀ¸·Î ¿¤¸®¸ÕÆ®ÀÇ YÁÂÇ¥ °è»ê
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsGetPositionY(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @return
     *      ¿¤¸®¸ÕÆ®ÀÇ YÁÂÇ¥
     */
    function jsGetPositionY(i_ele) {
        var intY = 0;

        do {
            intY  += i_ele.offsetTop;
            i_ele  = i_ele.offsetParent;
        }
        while (i_ele != document.body);

        return intY;
    }


    //--------------------------------------------------------------------------
    // ÀÌÀü ¼ø¼­·Î ÀÌµ¿
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsOrderElementPrev(i_ele)
     * @used
     *      jsIsObject(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @description
     *      ºÎ¸ð¿¤¸®¸ÕÆ®°¡ °°Àº ¿¤¸®¸ÕÆ®°£ÀÇ ¼ø¼­ Á¶Á¤
     */
    function jsOrderElementPrev(i_ele) {
        if (jsIsObject(i_ele) == false) return;

        var eleParent = i_ele.parentNode;
        var elePrev   = i_ele.previousSibling;

        while (elePrev != null) {
            if ((elePrev.disabled == false) && (elePrev.style.display != "none")) {
                break;
            }
            else {
                elePrev = elePrev.previousSibling;
            }
        }

        if (elePrev != null) {
            eleParent.removeChild(i_ele);
            eleParent.insertBefore(i_ele, elePrev);
        }
    }


    //--------------------------------------------------------------------------
    // ´ÙÀ½ ¼ø¼­·Î ÀÌµ¿
    //--------------------------------------------------------------------------
    /***
     * @function
     *      jsOrderElementNext(i_ele)
     * @used
     *      jsIsObject(i_ele)
     * @param
     *      i_ele ¿¤¸®¸ÕÆ®
     * @description
     *      ºÎ¸ð¿¤¸®¸ÕÆ®°¡ °°Àº ¿¤¸®¸ÕÆ®°£ÀÇ ¼ø¼­ Á¶Á¤
     */
    function jsOrderElementNext(i_ele) {
        if (jsIsObject(i_ele) == false) return;

        var eleParent = i_ele.parentNode;
        var eleNext   = i_ele.nextSibling;

        while (eleNext != null) {
            if ((eleNext.disabled == false) && (eleNext.style.display != "none")) {
                break;
            }
            else {
                eleNext = eleNext.nextSibling;
            }
        }

        if (eleNext != null) {
            eleParent.removeChild(i_ele);

            if (eleNext.nextSibling == null) {
                eleParent.appendChild(i_ele);
            }
            else {
                eleParent.insertBefore(i_ele, eleNext.nextSibling);
            }
        }
    }


//==============================================================================
// ÄÁÅÙÃ÷ °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // ÆË¾÷
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsPopup(i_url, i_name, i_str)
     * @use
     *     jsIsEmpty(i_url)
     *     jsParseProperty(i_str, i_token)
     * @param
     *     i_url      ÆÄÀÏ°æ·Î
     *     i_name     À©µµ¿ì ÀÌ¸§
     *     i_str      ÇÁ·ÎÆÛÆ¼Çü½Ä ¹®ÀÚ¿­
     * @description
     *     i_strÀÇ ÇüÅÂ´Â "width=100, height=100" °ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
     *     - top        À§Ä¡ Y          (0)
     *     - left       À§Ä¡ X          (300)
     *     - width      ³ÐÀÌ            (0)
     *     - height     ³ôÀÌ            (0)
     *     - titlebar   Å¸ÀÌÆ²¹Ù À¯¹«   (no)
     *     - toolbar    Åø¹Ù À¯¹«       (no)
     *     - menubar    ¸Þ´º¹Ù À¯¹«     (no)
     *     - location   ÁÖ¼ÒÃ¢ À¯¹«     (no)
     *     - status     »óÅÂÃ¢ À¯¹«     (no)
     *     - resizable  »çÀÌÁîÁ¶Á¤ À¯¹« (no)
     *     - scrollbars ½ºÅ©·Ñ¹Ù À¯¹«   (no)
     */
    function jsPopup(i_url, i_name, i_str) {
        if (jsIsEmpty(i_name)) i_name = "_blank";

        var props = jsParseProperty(i_str, ",");
        var param = "";

        param += "top="         + props.get("top",         "0")   + ", ";
        param += "left="        + props.get("left",        "300") + ", ";
        param += "width="       + props.get("width",       "0")   + ", ";
        param += "height="      + props.get("height",      "0")   + ", ";
        param += "titlebar="    + props.get("titlebar",    "no")  + ", ";
        param += "toolbar="     + props.get("toolbar",     "no")  + ", ";
        param += "menubar="     + props.get("menubar",     "no")  + ", ";
        param += "location="    + props.get("location",    "no")  + ", ";
        param += "status="      + props.get("status",      "no")  + ", ";
        param += "resizable="   + props.get("resizable",   "no")  + ", ";
        param += "scrollbars="  + props.get("scrollbars",  "yes") + ", ";
        param += "copyhistory=" + props.get("copyhistory", "no")  + "  ";

        window.open(i_url, i_name, param);

        return i_name;
    }


    //--------------------------------------------------------------------------
    // ÇÃ·¡½Ã »ðÀÔ
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsInsertFlash(i_url, i_str)
     * @use
     *     jsIsIE()
     *     jsIsEmpty(i_url)
     *     jsParseProperty(i_str, i_token)
     * @param
     *     i_url ÆÄÀÏ°æ·Î
     *     i_str ÇÁ·ÎÆÛÆ¼Çü½Ä ¹®ÀÚ¿­
     * @description
     *     i_strÀÇ ÇüÅÂ´Â "width=100, height=100, align=middle" °ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.
     *     - width   ³ÐÀÌ       (100%)
     *     - height  ³ôÀÌ       (100%)
     *     - align   Á¤·Ä       (middle)
     *     - quality È­Áú       (high)
     *     - bgcolor ¹é±×¶ó¿îµå (#FFFFFF)
     *     - wmode   Åõ¸íµµ     (window)
     */
    function jsInsertFlash(i_url, i_str) {
        if (jsIsEmpty(i_url)) document.write("<strong style='color:#FF0000;'>jsInsertFlash::url is empty</strong>");

        var html  = null;
        var type  = null;
        var props = jsParseProperty(i_str, ",");

        if (jsIsIE()) {
             type = "classid='clsid:D27CDB6E-AE6D-11CF-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0'";
        }
        else {
             type = "type='application/x-shockwave-flash' data='" + i_url + "'";
        }

        html = "<object " + type + " width='" + props.get("width", "100%") + "' height='" + props.get("height", "100%") + "' align='" + props.get("align", "middle") + "'>" + "\n" +
               "    <param name='movie'             value='" + i_url                           + "'>                                                                      " + "\n" +
               "    <param name='quality'           value='" + props.get("quality", "high")    + "'>                                                                      " + "\n" +
               "    <param name='bgcolor'           value='" + props.get("bgcolor", "#FFFFFF") + "'>                                                                      " + "\n" +
               "    <param name='wmode'             value='" + props.get("wmode"  , "window")  + "'>                                                                      " + "\n" +
               "    <param name='allowScriptAccess' value='always'>                                                                                                       " + "\n" +
               "</object>                                                                                                                                                 " + "\n";

        document.write(html);
    }


    //--------------------------------------------------------------------------
    // ·¹ÀÌ¾î »ý¼º
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsCreateLayer(i_id, i_src, i_is_file)
     * @param
     *     i_id      ¿¤¸®¸ÕÆ® ID
     *     i_src     ÄÁÅÙÃ÷ ¼Ò½º
     *     i_is_file ÄÁÅÙÃ÷(ÆÄÀÏ/ÅØ½ºÆ®) ÆÇ´Ü ³í¸®°ª
     * @return
     *     ·¹ÀÌ¾î(IFrame) ¿¤¸®¸ÕÆ®
     * @description
     *     select¿Í °ãÄ¡´Â ¹®Á¦¶§¹®¿¡ IFrameÀ¸·Î ·¹ÀÌ¾î¸¦ ±¸¼º
     */
    function jsCreateLayer(i_id, i_src, i_is_file) {
        var layer = document.getElementById(i_id);

        if (layer == null) {
             // »ý¼º
             layer = document.createElement("iframe");

             // ¼Ó¼ºÁ¤ÀÇ
             layer.id               = i_id;
             layer.frameBorder      = 0;
             layer.style.display    = "none";
             layer.style.position   = "absolute";

             // µî·Ï
             document.body.appendChild(layer);

             // ÄÁÅÙÃ÷
             if (i_is_file) {
                  layer.src = i_src;
             }
             else {
                  layer.contentWindow.document.open();
                  layer.contentWindow.document.write(i_src);
                  layer.contentWindow.document.close();
             }
        }

        return layer;
    }


//==============================================================================
// ÀÌº¥Æ® °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // À©µµ¿ì ÀÌº¥Æ® Ãß°¡
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsAttachEvent(i_event_nm, i_func)
     * @param
     *     i_event_nm ÀÌº¥Æ®¸í
     *     i_func     ½ÇÇàÇÔ¼ö
     */
    function jsAttachEvent(i_event_nm, i_func) {
        if (/^on/i.test(i_event_nm)) i_event_nm = i_event_nm.substring(2);

        if (window.addEventListener) {
             window.addEventListener(i_event_nm, i_func, false);
        }
        else {
             window.attachEvent("on" + i_event_nm, i_func);
        }
    }


//==============================================================================
// AJAX °ü·Ã
//==============================================================================
    //--------------------------------------------------------------------------
    // XMLHTTP °´Ã¼ »ý¼º
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsCreateXMLHTTP()
     * @return
     *     XMLHTTP °´Ã¼
     * @description
     *     Å×½ºÆ®¿ëÀ¸·Î¸¸ »ç¿ëÇÏ°í, ½Ç »õ¹ß½Ã¿¡´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.
     */
    function jsCreateXMLHTTP() {
        var req = false;

        if (window.XMLHttpRequest) {
             try {
                     req = new XMLHttpRequest();
             }
             catch (e) {
                     req = false;
             }
        }
        else if (window.ActiveXObject) {
             try {
                     req = new ActiveXObject("Msxml2.XMLHTTP");
             }
             catch (e) {
                 try {
                         req = new ActiveXObject("Microsoft.XMLHTTP");
                 }
                 catch (e) {
                         req = false;
                 }
             }
        }

        return req;
    }


    //--------------------------------------------------------------------------
    // ÆÄÀÏ ³»¿ë ÃßÃâ
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsGetSource(i_url)
     * @use
     *     jsIsIE()
     *     jsIsEmpty(i_str)
     *     jsCreateXMLHTTP()
     * @param
     *     i_url ÆÄÀÏ°æ·Î
     * @return
     *     XML°´Ã¼ ¶Ç´Â ÆÄÀÏÀÇ ³»¿ë
     * @description
     *     ´ë»ó ÆÄÀÏÀÇ Çü½ÄÀÌ UTF-8 Çü½ÄÀÌ¾î¾ß Á¤»óÀûÀ¸·Î ÀÛµ¿
     *     Å×½ºÆ®¿ëÀ¸·Î¸¸ »ç¿ëÇÏ°í, ½Ç °³¹ß½Ã¿¡´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.
     * @TODO
     *     onreadystatechange ±¸Çö
     */
    function jsGetSource(i_url) {
        if (jsIsEmpty(i_url)) return "<strong style='color:#FF0000;'>jsGetSource::url is empty</strong>";

        var src = null;
        var ext = i_url.substring(i_url.lastIndexOf(".") + 1).toLowerCase();
        var req = jsCreateXMLHTTP();

        try {
                req.open("Get", i_url, false);
                req.send(null);

                switch (ext) {
                    // XMLÆÄÀÏ Ã³¸®
                    case "xml":
                         src = req.responseXML;

                         if ((src.hasChildNodes == false) && jsIsIE()) {
                              src = new ActiveXObject("Microsoft.XMLDOM");
                              src.load(i_url);
                         }
                         break;

                    // ±âº» Ã³¸®
                    default:
                         src = req.responseText;
                         break;
                }
        }
        catch (e) {
                return "<strong style='color:#FF0000;'>jsGetSource::" + e.message + "</strong>";
        }

        return src;
    }


    //--------------------------------------------------------------------------
    // ÆÄÀÏ ÀÎÅ¬·çµå
    //--------------------------------------------------------------------------
    /***
     * @function
     *     jsInclude(i_url, i_id)
     * @use
     *     jsIsEmpty(i_str)
     *     jsGetSource(i_url)
     * @param
     *     i_url ÆÄÀÏ°æ·Î
     *     i_id  ¿¤¸®¸ÕÆ® ID
     * @description
     *     ´ë»ó ÆÄÀÏÀÇ Çü½ÄÀÌ UTF-8 Çü½ÄÀÌ¾î¾ß Á¤»óÀûÀ¸·Î ÀÛµ¿
     *     Å×½ºÆ®¿ëÀ¸·Î¸¸ »ç¿ëÇÏ°í, ½Ç °³¹ß½Ã¿¡´Â »ç¿ëÇÏÁö ¾Ê´Â´Ù.
     */
    function jsInclude(i_url, i_id) {
        if (jsIsEmpty(i_url)) document.write("<strong style='color:#FF0000;'>jsInclude::url is empty</strong>");

        var src = jsGetSource(i_url);
        var ele = document.getElementById(i_id);

        // ¼Ò½º »ðÀÔ
        if (ele != null) {
             ele.innerHTML = src;
        }
        else {
             document.write(src);
        }
    }