var chutil = new CH_UTILITIES();
var GB = {
    colors : [
    "#FF0000", "#FFFF00", "#00FF00", "#00FFFF", "#0000FF", "#FF00FF", "#FFFFFF", "#F5F5F5", "#DCDCDC", "#FFFAFA",
    "#D3D3D3", "#C0C0C0", "#A9A9A9", "#808080", "#696969", "#000000", "#2F4F4F", "#708090", "#778899", "#4682B4",
    "#4169E1", "#6495ED", "#B0C4DE", "#7B68EE", "#6A5ACD", "#483D8B", "#191970", "#000080", "#00008B", "#0000CD",
    "#1E90FF", "#00BFFF", "#87CEFA", "#87CEEB", "#ADD8E6", "#B0E0E6", "#F0FFFF", "#E0FFFF", "#AFEEEE", "#00CED1",
    "#5F9EA0", "#48D1CC", "#00FFFF", "#40E0D0", "#20B2AA", "#008B8B", "#008080", "#7FFFD4", "#66CDAA", "#8FBC8F",
    "#3CB371", "#2E8B57", "#006400", "#008000", "#228B22", "#32CD32", "#00FF00", "#7FFF00", "#7CFC00", "#ADFF2F",
    "#98FB98", "#90EE90", "#00FF7F", "#00FA9A", "#556B2F", "#6B8E23", "#808000", "#BDB76B", "#B8860B", "#DAA520",
    "#FFD700", "#F0E68C", "#EEE8AA", "#FFEBCD", "#FFE4B5", "#F5DEB3", "#FFDEAD", "#DEB887", "#D2B48C", "#BC8F8F",
    "#A0522D", "#8B4513", "#D2691E", "#CD853F", "#F4A460", "#8B0000", "#800000", "#A52A2A", "#B22222", "#CD5C5C",
    "#F08080", "#FA8072", "#E9967A", "#FFA07A", "#FF7F50", "#FF6347", "#FF8C00", "#FFA500", "#FF4500", "#DC143C",
    "#FF0000", "#FF1493", "#FF00FF", "#FF69B4", "#FFB6C1", "#FFC0CB", "#DB7093", "#C71585", "#800080", "#8B008B",
    "#9370DB", "#8A2BE2", "#4B0082", "#9400D3", "#9932CC", "#BA55D3", "#DA70D6", "#EE82EE", "#DDA0DD", "#D8BFD8",
    "#E6E6FA", "#F8F8FF", "#F0F8FF", "#F5FFFA", "#F0FFF0", "#FAFAD2", "#FFFACD", "#FFF8DC", "#FFFFE0", "#FFFFF0",
    "#FFFAF0", "#FAF0E6", "#FDF5E6", "#FAEBD7", "#FFE4C4", "#FFDAB9", "#FFEFD5", "#FFF5EE", "#FFF0F5", "#FFE4E1"
    ],
    htmlKey : [
    "!DOCTYPE", "A", "ABBR", "ACRONYM", "ADDRESS", "APPLET", "AREA", "B", "BASE", "BASEFONT", "BGSOUND", "BDO",
    "BIG", "BLINK", "DL", "BODY", "BR", "BUTTON", "CAPTION", "CENTER", "CITE", "CODE", "COL", "COLGROUP",
    "COMMENT", "DD", "DEL", "DFN", "DIR", "DIV", "FONT", "DT", "EM", "EMBED", "FIELDSET", "BLOCKQUOTE",
    "FORM", "FRAME", "FRAMESET", "H", "H1", "H2", "H3", "H4", "H5", "H6", "HEAD", "HR",
    "HTML", "I", "IFRAME", "IMG", "INPUT", "INS", "ISINDEX", "KBD", "LABEL", "LEGEND", "LI", "LINK",
    "LISTING", "MAP", "MARQUEE", "MENU", "META", "MULTICOL", "NEXTID", "NOBR", "NOFRAMES", "NOSCRIPT", "OBJECT", "OL",
    "OPTGROUP", "OPTION", "P", "PARAM", "PLAINTEXT","PRE", "Q", "S", "SAMP", "SCRIPT", "SELECT", "SERVER",
    "SMALL", "SOUND", "SPACER", "SPAN", "STRIKE", "STRONG", "STYLE", "SUB", "SUP", "TABLE", "TBODY", "TD",
    "TEXTAREA", "TITLE", "TFOOT", "TH", "THEAD", "TEXTFLOW", "TR", "TT", "U", "UL", "VAR", "WBR", "XMP" ],

    MSIE    : navigator.userAgent.toLowerCase().indexOf("msie")  != -1,
    GECKO   : navigator.userAgent.toLowerCase().indexOf('gecko') != -1,
    OPERA   : navigator.userAgent.toLowerCase().indexOf('opera') != -1,

    editorMode          : 'rich',
    popupIFrame         : ['fontType', 'fontSize', 'paragraph', 'boxStyle', 'foreColor', 'backColor', 'BGColor'],
    imageBorder         : '#ccc solid',
    currentRS           : new Object(),
    autoHeight          : false,
    frameFocus          : (navigator.userAgent.toLowerCase().indexOf("msie")  != -1) ? 'onfocus' : 'onload',
    LANG                : { toolTip : { btnPrint : 'ÀÎ¼â',
                                        btnUndo : '½ÇÇàÃë¼Ò',
                                        btnRedo : 'µÇµ¹¸®±â',
                                        btnCopy : 'º¹»ç',
                                        btnCut : 'Àß¶ó³»±â',
                                        btnPaste : 'ºÙÀÌ±â',
                                        btnPasteFromWord : 'MS¿öµå ºÙÀÌ±â',
                                        btnSelectAll : 'ÀüÃ¼ ¼±ÅÃ',
                                        btnBold : 'ÁøÇÏ°Ô',
                                        btnUnderline : '¹ØÁÙ',
                                        btnStrike : 'Ãë¼Ò¼±',
                                        btnItalic : '±â¿ïÀÓ',
                                        btnSuperscript : 'À§Ã·ÀÚ',
                                        btnSubscript : '¾Æ·¡Ã·ÀÚ',
                                        btnJustifyLeft : '¿ÞÂÊ Á¤·Ä',
                                        btnJustifyCenter : '°¡¿îµ¥ Á¤·Ä',
                                        btnJustifyRight : '¿À¸¥ÂÊ Á¤·Ä',
                                        btnJustifyFull : '¾çÂÊ Á¤·Ä',
                                        btnOrderedList : '¹®´Ü ¹øÈ£',
                                        btnUnOrderedList : '±Û ¸Ó¸®Ç¥',
                                        btnOutdent : '¿ÞÂÊ¿©¹é ÁÙÀÌ±â',
                                        btnIndent : '¿ÞÂÊ¿©¹é ´Ã¸®±â',
                                        btnFontType : '±Û²Ã',
                                        btnParagraph : 'Á¦¸ñ',
                                        btnFontSize : '±Û²Ã Å©±â',
                                        btnBoxStyle : '¹Ú½º',
                                        btnBackColor : 'Çü±¤Ææ',
                                        btnForeColor : '±ÛÀÚ»ö',
                                        btnBGColor : '¹ÙÅÁ»ö',
                                        btnSChar : 'Æ¯¼ö ¹®ÀÚ',
                                        btnHyperLink : 'ÇÏÀÌÆÛ¸µÅ©',
                                        btnUnLink : 'ÇÏÀÌÆÛ¸µÅ© ÇØÁ¦',
                                        btnFlash : 'ÇÃ·¡½¬ ¹«ºñ',
                                        btnMedia : '¹Ìµð¾î',
                                        btnUploadImage : '±×¸² ³Ö±â',
                                        btnBGImage : '¹è°æ ±×¸²',
                                        btnEmotion : 'Ç¥Á¤ ¾ÆÀÌÄÜ',
                                        btnHR : '°¡·Î¼±',
                                        btnTable : 'Ç¥',
                                        btnPageBreak : 'ÀÎ¼â ÆäÀÌÁö ³ª´®' }
                            }
}

function CH_UTILITIES()
{
    this.oname;
}

function cheditor(oname)
{
    if (typeof(document.execCommand) == 'undefined')
        return;

    if (GB.MSIE) {
       if (parseFloat(navigator.appVersion.split("MSIE")[1]) < 5.5) {
            this.run = function() {
                document.write("<textarea name=\"message\" id=\"message\" style=\"width:100%;height:200px\"></textarea>");
            };
            return;
        }
    }

    if (GB.GECKO) {
        if (navigator.productSub < 20030210) {
            this.run = function() {
                document.write("<textarea name=\"message\" id=\"message\" style=\"width:100%;height:200px\"></textarea>");
            };
            return;
        }
    }

    this.config = {
        editorWidth     : '100%',
        editorHeight    : '300px',
        editorFontSize  : '9pt',
        editorFontFace  : 'gulim',
        editorBorder    : '1px solid #ccc',
        tabIndex        : 0,
        lineHeight      : '18px',
        editorBgcolor   : '#fff',
        editorPath      : '.',
        popupAutoKill   : true,
        fullHTMLSource  : true,
        hrefTarget      : '_blank',
        showTagPath     : true,
        toolBarSplit    : true,
        useBR           : true,
        imgMaxWidth     : 400,
        imgReSize       : true,
        includeHostname : true,
        imgBorder       : '#999 solid',
        editAreaMargin  : '7px',
        useSource       : true,
        usePreview      : true,
        usePrint        : true,
        useUndo         : true,
        useRedo         : true,
        useCopy         : true,
        useCut          : true,
        usePaste        : true,
        usePasteFromWord: true,
        useSelectAll    : true,
        useBold         : true,
        useUnderline    : true,
        useStrike       : true,
        useItalic       : true,
        useSuperscript  : true,
        useSubscript    : true,
        useJustifyLeft  : true,
        useJustifyCenter: true,
        useJustifyRight : true,
        useJustifyFull  : true,
        useOrderedList  : true,
        useUnOrderedList: true,
        useOutdent      : true,
        useIndent       : true,
        useFontType     : true,
        useParagraph    : true,
        useFontSize     : true,
        useBackColor    : true,
        useForeColor    : true,
        useBGColor      : true,
        useSChar        : true,
        useHyperLink    : true,
        useUnLink       : true,
        useFlash        : true,
        useMedia        : true,
        useUploadImage  : true,
        useBGImage      : true,
        useEmotion      : true,
        useHR           : true,
        autoHeight      : false,
        useTable        : true,
        useBoxStyle     : true,
        usePageBreak    : true
    };
    this.selectedColor      = '#ffc985';
    this.editorPopupBgcolor = '#e3efff';
    this.oname              = oname;
    this.editArea           = null;
    this.editAreaWrapper    = null;
    this.inputForm          = null;
    this.selection          = null;
    this.selectionType      = null;
    this.displayMode        = 'RICH';
    this.szTmp              = '';
    this.undoSteps          = 20;
    this.undoTimeout        = 500;
    this.undoQueue          = new Array(this.undoSteps);
    this.undoPos            = -1;
    this.customUndo         = true;
    this.timerUndo          = null;
    this.images             = new Array();
    this.toolbarRow1        = new Object();
    this.toolbarRow2        = new Object();
    this.popupID            = null;
	this.imagesChanged      = false;
}

cheditor.prototype = {
plainMode : function () {
    this.editAreaWrapper.style.display = 'none';
    document.getElementById('idToolbar_'+this.oname).style.display = 'none';
    document.getElementById('editArea_'+this.oname).style.display = 'none';
    document.getElementById('checkBox_'+this.oname).style.display = 'none';
    document.getElementById('plainId_'+this.oname).style.display = '';
    document.getElementById('plainId_'+this.oname).focus();
    if (this.config.showTagPath)
        document.getElementById('statusBlock'+this.oname).style.display = 'none';
    this.resetData();
},

htmlMode : function () {
    document.getElementById('plainId_'+this.oname).style.display = 'none';
    this.editAreaWrapper.style.display = '';
    document.getElementById('editArea_'+this.oname).style.display = '';
    document.getElementById('idToolbar_'+this.oname).style.display = '';
    document.getElementById('checkBox_'+this.oname).style.display = '';
    if (this.config.showTagPath)
        document.getElementById('statusBlock'+this.oname).style.display = '';
    this.resetData();
    this.editArea.focus();
},

createTextarea : function () {
    var wrapper = document.getElementById('container_'+this.oname);
    var textarea = document.createElement("textarea");
    textarea.style.width = this.config.editorWidth;
    textarea.style.height = this.config.editorHeight;
    textarea.style.border = this.config.editorBorder;
    textarea.style.padding = '10px';
    textarea.id = "plainId_"+this.oname;
    textarea.style.display = 'none';
    textarea.style.fontSize = '9pt';
    textarea.style.position = 'relative';
    if (this.config.tabIndex) textarea.tabIndex = this.config.tabIndex;
    wrapper.appendChild(textarea);
},

useBR : function (el) {
    this.editArea.focus();
},

resetData : function () {
    if (GB.editorMode == 'rich') {
        document.getElementById('plainId_'+this.oname).value = this.outputBodyText();
        GB.editorMode = 'plain';
    }
    else {
        var szPlain = document.getElementById('plainId_'+this.oname).value;
        szPlain = szPlain.replace(/\n/g,'<br>');
        this.resetEditArea(szPlain);
        this.setEditorOpt();
        GB.editorMode = 'rich';
    }
},

undoSnapshot : function () {
    ++this.undoPos;
    if (this.undoPos >= this.undoSteps) {
        this.undoQueue.shift();
        --this.undoPos;
    }
    var take = true;
    var txt = this.getContents(false);

    if (this.undoPos > 0) take = (this.undoQueue[this.undoPos - 1] != txt);
    take ? this.undoQueue[this.undoPos] = txt : this.undoPos--;
},

updateUndoQueue : function () {
    if (this.customUndo && !this.timerUndo) {
        this.undoSnapshot();
        var editor = this;
        this.timerUndo = setTimeout(function() { editor.timerUndo = null;}, this.undoTimeout);
    }
},

resetEditArea : function (loadContents) {
    this.editAreaWrapper.style.visibility = 'hidden';
    var oEditor = document.getElementById('id'+this.oname).contentWindow;
    oEditor.document.designMode = "on";
    if (!GB.MSIE) oEditor.document.execCommand('useCSS', false, false);
    oEditor.document.open("text/html", "replace");
    oEditor.document.write("<html><head></head><body>"+loadContents+"</body></html>");
    oEditor.document.close();
    this.editAreaWrapper.style.backgroundColor = this.config.editorBgcolor;
    this.editAreaWrapper.style.margin = '0px';
    this.editAreaWrapper.style.padding = '0px';
    this.editAreaWrapper.fontSize = this.config.editorFontSize;
    oEditor.document.body.style.fontSize = this.config.editorFontSize;
    oEditor.document.body.style.fontFamily = this.config.editorFontFace;
    oEditor.document.body.style.margin = this.config.editAreaMargin;
    //oEditor.document.body.style.lineHeight = this.config.lineHeight;
    this.editAreaWrapper.style.visibility = 'visible';
    return oEditor;
},

startDrag : function (event) {
    GB.currentRS.elNode = this.editAreaWrapper;
    var y = GB.MSIE ? window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop :
        event.clientY + window.pageYOffset;

    GB.currentRS.cursorStartY = y;
    GB.currentRS.elStartTop = parseInt(GB.currentRS.elNode.style.height);
    if (isNaN(GB.currentRS.elStartTop)) GB.currentRS.elStartTop = 0;

    if (GB.MSIE) {
        document.attachEvent("onmousemove", this.dragGo);
        document.attachEvent("onmouseup",   this.dragStop);
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    else {
        if (GB.GECKO) GB.currentRS.elNode.style.visibility = 'hidden';
        document.addEventListener("mousemove", this.dragGo,   true);
        document.addEventListener("mouseup",   this.dragStop, true);
        event.preventDefault();
    }
},

dragGo : function (event) {
    var y = (GB.MSIE) ? window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop :
        event.clientY + window.pageYOffset;
    var h = (GB.currentRS.elStartTop + y - GB.currentRS.cursorStartY);
    GB.currentRS.elNode.style.height  = (h < 1 ? 1 : h) + 'px';

    if (GB.MSIE) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    else
        event.preventDefault();
},

dragStop : function () {
    if (GB.MSIE) {
        document.detachEvent("onmousemove", eval(chutil.oname).dragGo);
        document.detachEvent("onmouseup",   eval(chutil.oname).dragStop);
    }
    else {
        if (GB.GECKO) GB.currentRS.elNode.style.visibility = 'visible';
        document.removeEventListener("mousemove", eval(chutil.oname).dragGo,   true);
        document.removeEventListener("mouseup",   eval(chutil.oname).dragStop, true);
    }
},

run : function () {
    document.write('<div style="position:relative;color:#000;width:'+this.config.editorWidth+'" id="container_'+this.oname+'">');
    this.drawToolbar();
    document.write('<div style="border:'+this.config.editorBorder+'" id="editArea_'+this.oname+'">');
    document.write('<iframe frameborder="0" style="border:0px;width:100%;height:'+this.config.editorHeight+';overflow:auto"'+' id="id'+this.oname+'"');
    if (this.config.tabIndex) document.write(' tabindex="'+this.config.tabIndex+'"');
    document.write(' '+GB.frameFocus+'="chutil.oname=\''+this.oname+'\'"></iframe>');
    document.write('</div>');
    document.write('<div id="CHModifyBlock'+this.oname+'" style="display:none;border-right:'+this.config.editorBorder+';border-left:'+this.config.editorBorder+';border-bottom:'+this.config.editorBorder+';padding:2px;background-color:#eee;font-size:7pt;font-family:verdana;text-align:left">&#160;</div>');

    if (this.config.showTagPath) {
        document.write('<div id="statusBlock'+this.oname+'" style="position:relative;text-align:left;line-height:11px;height:16px;background-color:#eee;border-right:'+this.config.editorBorder+';border-left:'+this.config.editorBorder+';border-bottom:'+this.config.editorBorder+';">');
        document.write('<div id="CHstatusBar'+this.oname+'" style="position:absolute;left:0px;padding:2px;font-size:8pt;font-family:verdana">&lt;HTML&gt; &lt;BODY&gt;</div>');
        document.write('<div onmousedown="'+this.oname+'.startDrag(event)" id="reSize'+this.oname+'" style="position:absolute;right:0px;width:11px;cursor:move"><img src="'+this.config.editorPath+'/icons/statusbar_resize.gif" width="11" height="16" alt=""></div>');
        document.write('</div>');
    }
    document.write('<div id="checkBox_'+this.oname+'" style="text-align:left;font-size:9pt">');
    if (this.config.useSource)
        document.write('<input type="checkbox" onclick="'+this.oname+'.setDisplayMode()" id="chkDisplayMode" />HTML¼Ò½º ');
    if (this.config.usePreview)
        document.write('<input type="checkbox" onclick="'+this.oname+'.previewMode()" id="chkPreviewMode" />¹Ì¸®º¸±â');
    document.write('</div>');

    var loadContents = '';
    if (this.inputForm && document.getElementById(this.inputForm))
        loadContents = document.getElementById(this.inputForm).value;

    this.editAreaWrapper = document.getElementById("id"+this.oname);
    this.editArea = this.resetEditArea(loadContents);

    document.write('<iframe frameborder="0" border="0" name="idtmp'+this.oname+'" contentEditable="true" id="idtmp'+this.oname+'" style="visibility:hidden;width:0px;height:0px;overflow:auto;" onfocus="'+this.oname+'.boxHide()"></iframe>');
    var tmpeditor = eval("idtmp"+this.oname);
    tmpeditor.document.designMode = "on";
    tmpeditor.document.open("text/html","replace");
    tmpeditor.document.write("<html><head></head><body></body></html>");
    tmpeditor.document.close();

    if (!document.getElementById("foreColor_"+this.oname)) {
        htmlOutput = this.createWindow(200, this.setColorTable('fore'));
        document.write('<iframe frameborder="0" id="foreColor_'+this.oname+'" name="foreColor" style="position:absolute;visibility:hidden;z-index:-1;width:1px;height:1px;"></iframe>');
         var doc = document.getElementById('foreColor_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("backColor_"+this.oname)) {
        htmlOutput = this.createWindow(200, this.setColorTable('back'));
        document.write('<iframe frameborder="0" id="backColor_'+this.oname+'" name="backColor" style="position:absolute;visibility:hidden;z-index:-1;width:1px;height:1px;"></iframe>');
        var doc = document.getElementById('backColor_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("BGColor_"+this.oname)) {
        htmlOutput = this.createWindow(200, this.setColorTable('bgColor'));
        document.write('<iframe frameborder="0" id="BGColor_'+this.oname+'" name="BGColor" style="position:absolute;visibility:hidden;z-index:-1;width:1px;height:1px;"></iframe>');
        var doc = document.getElementById('BGColor_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("fontType_"+this.oname)){
        htmlOutput = '<div style="background-color:'+this.editorPopupBgcolor+'">' +
            "<div style='padding:4px 0px 0px 2px;color:#0E2C5D;background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);float:left;font-size:9pt'>±Û²Ã ¸ð¾ç</div>"+
            "<div style='background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);text-align:right;padding:3px;font-size:9pt'>&#160;<img src='"+this.config.editorPath+"/icons/close.gif' width='13' height='13' onclick='parent."+this.oname+".boxHide();' style='vertical-align:top' alt='' /></div>" +
            "<div style='clear:both;border-top:1px solid #8db3e5'></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('gulim')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:gulim;font-size:9pt;margin:1px'>°¡³ª´Ù¶ó¸¶¹Ù»ç (±¼¸²)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('batang')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:batang;font-size:9pt;margin:1px'>°¡³ª´Ù¶ó¸¶¹Ù»ç (¹ÙÅÁ)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('dotum')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:dotum;font-size:9pt;margin:1px'>°¡³ª´Ù¶ó¸¶¹Ù»ç (µ¸¿ò)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('gungsuh')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:gungsuh;font-size:9pt;margin:1px'>°¡³ª´Ù¶ó¸¶¹Ù»ç (±Ã¼­)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Arial')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Arial;font-size:9pt;margin:1px'>ABCDEFGHIJK (Arial)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Arial Black')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Arial Black;font-size:9pt;margin:1px'>ABCDEFGHIJK (Arial Black)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Arial Narrow')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Arial Narrow;font-size:9pt;margin:1px'>ABCDEFGHIJK (Arial Narrow)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Comic Sans MS')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Comic Sans MS;font-size:9pt;margin:1px'>ABCDEFGHIJK (Comic Sans MS)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Courier New')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Courier New;font-size:9pt;margin:1px'>ABCDEFGHIJK (Courier New)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Tahoma')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Tahoma;font-size:9pt;margin:1px'>ABCDEFGHIJK (Tahoma)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Times New Roman')\"  align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Times New Roman;font-size:9pt;margin:1px'>ABCDEFGHIJK (Times New Roman)</div>" +
            "<div onclick=\"parent."+this.oname+".changeFontType('Verdana')\" align=center onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class=dropdown style='padding:2px;font-family:Verdana;font-size:9pt;margin:1px'>ABCDEFGHIJK (Verdana)</div>" +
            "</div>";

        htmlOutput = this.createWindow(220, htmlOutput);
        document.write('<iframe frameborder="0" id="fontType_'+this.oname+'" style="position: absolute;visibility: hidden;z-index: -1;width:1px;height:1px"></iframe>');
        var doc = document.getElementById('fontType_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("paragraph_"+this.oname)) {
        htmlOutput = '<div style="background-color:'+this.editorPopupBgcolor+'">' +
            "<div style='padding:4px 0px 0px 2px;color:#0E2C5D;background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);float:left;font-size:9pt'>Á¦¸ñ ¼±ÅÃ</div>"+
            "<div style='background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);text-align:right;padding:3px;font-size:9pt'>&#160;<img src='"+this.config.editorPath+"/icons/close.gif' width='13' height='13' onclick='parent."+this.oname+".boxHide();' style='vertical-align:top' alt='' /></div>" +
            "<div style='clear:both;border-top:1px solid #8db3e5'></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H1>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h1 style='margin:0'>Á¦¸ñ 1</h1></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H2>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h2 style='margin:0'>Á¦¸ñ 2</h2></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H3>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h3 style='margin:0'>Á¦¸ñ 3</h3></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H4>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h4 style='margin:0'>Á¦¸ñ 4</h4></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H5>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h5 style='margin:0'>Á¦¸ñ 5</h5></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<H6>')\"  align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><h6 style='margin:0'>Á¦¸ñ 6</h6></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<PRE>')\" align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><pre style='margin:0'>Preformatted</pre></div>" +
            "<div onclick=\"parent."+this.oname+".applyParagraph('<P>')\"   align='center' onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:3px;margin:1px'><p style='margin:0px'>º¸Åë</p></div>" +
            "</div>";

        htmlOutput = this.createWindow(200, htmlOutput);
        document.write('<iframe frameborder="0" id="paragraph_'+this.oname+'" name="paragraph" style="position: absolute;visibility: hidden; z-index: 1;width:1px;height:1px"></iframe>');
        var doc = document.getElementById('paragraph_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("fontSize_"+this.oname)) {
        htmlOutput =  '<div style="background-color:'+this.editorPopupBgcolor+'">' +
            "<div style='padding:4px 0px 0px 2px;color:#0E2C5D;background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);float:left;font-size:9pt'>±Û²Ã Å©±â</div>"+
            "<div style='background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);text-align:right;padding:3px;font-size:9pt'>&#160;<img src='"+this.config.editorPath+"/icons/close.gif' width='13' height='13' onclick='parent."+this.oname+".boxHide();' style='vertical-align:top' alt='' /></div>" +
            "<div style='clear:both;border-top:1px solid #8db3e5'></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(8)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:8pt'>°¡³ª´Ù¶ó (8pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(9)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:9pt'>°¡³ª´Ù¶ó (9pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(10)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:10pt'>°¡³ª´Ù¶ó (10pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(11)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:11pt'>°¡³ª´Ù¶ó (11pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(12)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:12pt'>°¡³ª´Ù¶ó (12pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(14)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:14pt'>°¡³ª´Ù¶ó (14pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(16)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:16pt'>°¡³ª´Ù¶ó (16pt)</span></div>" +
            "<div onclick=\"parent."+this.oname+".changeFontSize(18)\" onmouseover='parent."+this.oname+".mouseOver(this)' onmouseout='parent."+this.oname+".mouseOut(this)' class='dropdown' style='padding:2px;margin:1px;'><span style='font-size:18pt'>°¡³ª´Ù¶ó (18pt)</span></div>" +
            "</div>";

        htmlOutput = this.createWindow(200, htmlOutput);
        document.write('<iframe frameborder="0" id="fontSize_'+this.oname+'" name="fontSize" style="position: absolute;visibility: hidden;z-index: -1;width:1px;height:1px;"></iframe>');
        var doc = document.getElementById('fontSize_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    if (!document.getElementById("boxStyle_"+this.oname)){
        htmlOutput =  '<div style="background-color:#fff">' +
            "<div style='padding:4px 0px 0px 2px;color:#0e2c5d;background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);float:left;font-size:9pt'>¹Ú½º ½ºÅ¸ÀÏ</div>"+
            "<div style='background:#6b90c0 url("+this.config.editorPath+"/icons/title_bar_bg.gif);text-align:right;padding:3px;font-size:9pt'>&#160;<img src='"+this.config.editorPath+"/icons/close.gif' width='13' height='13' onclick='parent."+this.oname+".boxHide();' style='vertical-align:top' alt='' /></div>" +
            "<div style='clear:both;border-top:1px solid #8db3e5'></div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #dedfdf solid;background-color:#f7f7f7;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #aee8e8 solid;background-color:#bfffff;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #d3bceb solid;background-color:#e6ccff;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #e8e88b solid;background-color:#ffff99;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #c3e89e solid;background-color:#d6ffad;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "<div onclick=\"parent."+this.oname+".boxStyle(this)\" align='center' style='border:1px #e8c8b7 solid;background-color:#ffdcc9;padding:3px;font-size:9pt;margin:2px;cursor:pointer;'>°¡³ª´Ù ABC</div>" +
            "</div>";
        htmlOutput = this.createWindow(100, htmlOutput);
        document.write('<iframe frameborder="0" id="boxStyle_'+this.oname+'" name="boxStyle" style="position:absolute;visibility:hidden;z-index:-1;width:1px;height:1px"></iframe>');
        var doc = document.getElementById('boxStyle_'+this.oname).contentWindow;
        doc.document.open("text/html","replace");
        doc.document.write(htmlOutput);
        doc.document.close();
    }
    document.write('<div id="dwindow_'+this.oname+'" style="border:1px solid #8db3e5;visibility:hidden;position:absolute;background-color:#ebe9ed;left:0px;top:0px;" onselectstart="return false">');
    document.write('<div style="text-align:left;height:10px;padding:10px 0px 0px 3px;background:#6b90c0 url('+this.config.editorPath+'/icons/title_bar_bg.gif);"><div id="popupTitle_'+this.oname+'" style="margin-top:-7px;font-size:9pt;color:#0e2c5d;"></div></div>');
    document.write('<div id="cframe_'+this.oname+'" style="border-top:1px solid #8db3e5;background-color:#ebe9ed;"></div></div>');
    document.write('</div>'); //Container

    this.popupID = document.getElementById('dwindow_'+this.oname);
    GB.autoHeight = this.config.autoHeight;
    this.editArea.focus();
    this.createTextarea();
    this.setEditorOpt();
},

setEditorOpt : function () {
    if (GB.MSIE) this.editArea.document.onkeydown = this.doOnKeyPress;
    this.addEvent(this.editArea.document, "mouseup");
},

addEvent : function (doc, ev) {
    this.updateUndoQueue();
    var func = function () { cheditor.setEditorEvent(chutil.oname) };
    if (GB.MSIE) {
        doc.detachEvent("on"+ev, func);
        doc.attachEvent("on"+ev, func);
    }
    else {
        doc.removeEventListener(ev, func, true);
        doc.addEventListener(ev, func, false);
    }
},

toolbarButtonOut : function (elemButton) {
    var nTop = elemButton.style.top.substring(0, elemButton.style.top.length - 2);
    elemButton.style.top = nTop * 1 + 22 + 'px';
},

toolbarButtonOver : function (elemButton) {
    var nTop = elemButton.style.top.substring(0, elemButton.style.top.length - 2);
    elemButton.style.top = nTop - 22 + 'px';
},

preloadToolbar : function () {
    var imgTag = '<img src="'+this.config.editorPath+'/icons/toolbar_icon_';
    for (var i=1; i<12; i++) {
        document.write(imgTag+i+'.gif" width="1" height="1" style="display:none" alt="" />');
    }
},

showToolbar : function (tb) {
    for (var i in tb) {
        if (tb[i].use == false) continue;
        this.drawToolbarIcon(tb[i].icon[0],tb[i].icon[1],tb[i].icon[2],
            i+this.oname, GB.LANG.toolTip[i], this.oname + tb[i].exec);
    }
},

drawToolbar : function () {
    this.preloadToolbar();
    this.toolbarRow1 = {
        btnPrint : { use : this.config.usePrint, icon : [1,0,22], exec : ".doCmd('print', false)" },
        btnUndo : { use : this.config.useUndo, icon : [1,44,22], exec : ".undo()" },
        btnRedo : { use : this.config.useRedo, icon : [1,88,22], exec : ".redo()" },
        btnCopy : { use : this.config.useCopy, icon : [1,132,22], exec : ".doCmd('Copy', false)" },
        btnCut : { use : this.config.useCut, icon : [2,0,22], exec : ".doCmd('Cut', false)" },
        btnPaste : { use : this.config.usePaste, icon : [2,44,22], exec : ".doCmd('Paste', false)" },
        btnPasteFromWord : { use : this.config.usePasteFromWord, icon : [10,88,22], exec : ".doCmd('PasteFromWord', false)" },
        btnSelectAll : { use : this.config.useSelectAll, icon : [2,88,22], exec : ".doCmd('SelectAll', false)" },
        btnBold : { use : this.config.useBold, icon : [2,132,22], exec : ".doCmd('Bold', false)" },
        btnUnderline : { use : this.config.useUnderline, icon : [3,0,22], exec : ".doCmd('Underline', false)" },
        btnStrike : { use : this.config.useStrike, icon : [3,44,22], exec : ".doCmd('Strikethrough', false)" },
        btnItalic : { use : this.config.useItalic, icon : [3,88,22], exec : ".doCmd('Italic', false)" },
        btnSuperscript : { use : this.config.useSuperscript, icon : [3,132,22], exec : ".doCmd('Superscript', false)" },
        btnSubscript : { use : this.config.useSubscript, icon : [4,0,22], exec : ".doCmd('Subscript', false)" },
        btnJustifyLeft : { use : this.config.useJustifyLeft, icon : [4,44,22], exec : ".doCmd('JustifyLeft', false)" },
        btnJustifyCenter : { use : this.config.useJustifyCenter, icon : [4,88,22], exec : ".doCmd('JustifyCenter', false)" },
        btnJustifyRight : { use : this.config.useJustifyRight, icon : [4,132,22], exec : ".doCmd('JustifyRight', false)" },
        btnJustifyFull : { use : this.config.useJustifyFull, icon : [5,0,22], exec : ".doCmd('JustifyFull', false)" },
        btnOrderedList : { use : this.config.useOrderedList, icon : [5,44,22], exec : ".doCmd('InsertOrderedList', false)" },
        btnUnOrderedList : { use : this.config.useUnOrderedList, icon : [5,88,22], exec : ".doCmd('InsertUnOrderedList', false)" },
        btnOutdent : { use : this.config.useOutdent, icon : [5,132,22], exec : ".doCmd('Outdent', false)" },
        btnIndent : { use : this.config.useIndent, icon : [6,0,22], exec : ".doCmd('Indent', false)" }
    };
    this.toolbarRow2 = {
        btnFontType : { use : this.config.useFontType, icon : [8,0,29], exec : ".windowPos(this,'fontType_"+this.oname+"');"+this.oname+".displayWindow('fontType_"+this.oname+"');" },
        btnParagraph : { use : this.config.useParagraph, icon : [8,44,29], exec : ".windowPos(this,'paragraph_"+this.oname+"');"+this.oname+".displayWindow('paragraph_"+this.oname+"');" },
        btnFontSize : { use : this.config.useFontSize, icon : [8,88,29], exec : ".windowPos(this,'fontSize_"+this.oname+"');"+this.oname+".displayWindow('fontSize_"+this.oname+"');" },
        btnBoxStyle : { use : this.config.useBoxStyle, icon : [11,0,22], exec : ".windowPos(this,'boxStyle_"+this.oname+"');"+this.oname+".displayWindow('boxStyle_"+this.oname+"');" },
        btnBackColor : { use : this.config.useBackColor, icon : [9,88,22], exec : ".windowPos(this,'backColor_"+this.oname+"');"+this.oname+".displayWindow('backColor_"+this.oname+"');" },
        btnForeColor : { use : this.config.useForeColor, icon : [9,132,22], exec : ".windowPos(this,'foreColor_"+this.oname+"');"+this.oname+".displayWindow('foreColor_"+this.oname+"');" },
        btnBGColor : { use : this.config.useBGColor, icon : [9,44,22], exec : ".windowPos(this,'BGColor_"+this.oname+"');"+this.oname+".displayWindow('BGColor_"+this.oname+"');" },
        btnSChar : { use : this.config.useSChar, icon : [7,132,22], exec : ".windowOpen('schar')" },
        btnHyperLink : { use : this.config.useHyperLink, icon : [6,44,22], exec : ".windowOpen('hyperLink')" },
        btnUnLink : { use : this.config.useUnLink, icon : [6,88,22], exec : ".doCmd('UnLink',false)" },
        btnFlash : { use : this.config.useFlash, icon : [9,0,22], exec : ".windowOpen('flash')" },
        btnMedia : { use : this.config.useMedia, icon : [6,132,22], exec : ".windowOpen('media')" },
        btnUploadImage : { use : this.config.useUploadImage, icon : [7,0,22], exec : ".windowOpen('image')" },
        btnBGImage : { use : this.config.useBGImage, icon : [7,44,22], exec : ".windowOpen('bgimage')" },
        btnEmotion : { use : this.config.useEmotion, icon : [7,88,22], exec : ".windowOpen('emotion')" },
        btnHR : { use : this.config.useHR, icon : [10,0,22], exec : ".doCmd('InsertHorizontalRule')" },
        btnTable : { use : this.config.useTable, icon : [10,44,22], exec : ".windowOpen('table')" },
        btnPageBreak : { use : this.config.usePageBreak, icon : [10,132,22], exec : ".printPageBreak()" }
    };

    document.write('<table border="0" cellpadding="0" cellspacing="0" width="100%" id="idToolbar_'+this.oname+'">');
    document.write('<tr><td align="left">');
    this.showToolbar(this.toolbarRow1);
    if (this.config.toolBarSplit) document.write('</td></tr><tr><td>');
    this.showToolbar(this.toolbarRow2);

    if (GB.MSIE && this.config.useBR)
        document.write('<div style="float:left"><input type="checkbox" id="chkUseBR'+this.oname+'" checked="checked" onclick="'+this.oname+'.useBR(this)" /><span style="font-size:8pt;font-family:verdana">BR</span></div>');
    document.write('</td></tr></table>');
},

changeFontType : function (val) {
    var el = document.getElementById('fontType_'+this.oname).contentWindow;
    eval(el.document.getElementById("CHEditor").value).doCmdPopup("fontName",val);
},

setColor : function (color, _which) {
    if (_which == 'back') {
        var el = document.getElementById('backColor_'+this.oname).contentWindow;
        eval(el.document.getElementById("CHEditor").value).doCmdPopup(GB.MSIE ? 'BackColor' : 'HiliteColor', color);
    }
    else {
        var el = document.getElementById('foreColor_'+this.oname).contentWindow;
        eval(el.document.getElementById("CHEditor").value).doCmdPopup('ForeColor', color);
    }
},

setBgColor : function (color) {
    var el = document.getElementById('BGColor_'+this.oname).contentWindow;
    if (GB.MSIE)
        eval(el.document.getElementById("CHEditor").value).doBgColor(color);
    else
        eval(el.document.getElementById("CHEditor").value).doCmdPopup("BackColor",color);
},

doBgColor : function (color) {
    this.editArea.document.body.style.backgroundColor = color;
    this.selection.select();
    this.boxHide();
    this.editArea.focus();
},

applyParagraph : function (val) {
    var el = document.getElementById('paragraph_'+this.oname).contentWindow;
    eval(el.document.getElementById("CHEditor").value).doCmdPopup("FormatBlock",val);
},

changeFontSize : function (val) {
    var el = document.getElementById('fontSize_'+this.oname).contentWindow;
    eval(fontSize.document.getElementById("CHEditor").value).doCmdPopup("fontSize",val);
},

getElement : function (elm, tag) {
    while (elm != null && elm.tagName != tag) {
        if (elm.id == 'id'+this.oname) return null;
        elm = elm.parentElement;
    }
    return elm;
},

hyperLink: function (szURL, szTarget, szTitle) {
    var selection = this.selection;
    var selectionType = this.selectionType;
    var range, linked, targetEl;

    if (GB.MSIE) {
        selection.select();
        selection = this.fixSelection(selection);
        selectionType = this.fixSelectionType(selection, selectionType);
        if (selectionType == "None") {
            targetEl = document.getElementById('id'+this.oname).document;
        }
        else {
            targetEl = selection;
            targetEl.execCommand("UnLink", false);
        }
        targetEl.execCommand("CreateLink", false, szURL);
        linked = selection.parentElement ? selection.parentElement() : this.getElement(selection.item(0),"A");
    }
    else {
        selection = this._getSelection();
        if (typeof selection != "undefined") range = selection.getRangeAt(0);
        document.getElementById("id"+this.oname).contentDocument.execCommand("CreateLink", false, szURL);
        linked = range.startContainer.previousSibling;
    }

    if (linked) {
        if (szTarget) linked.target = szTarget;
        if (szTitle) linked.title = szTitle;
    }
},

boxStyle: function (el) {
    var range = this._getSelection();

    if (!GB.MSIE) {
        range = (typeof range != "undefined") ?
            range.getRangeAt(0) : this.editArea.document.createRange();
    }

    var newNode = document.createElement("div");
    newNode.style.backgroundColor = el.style.backgroundColor;
    newNode.style.border = el.style.border;
    newNode.style.padding = el.style.padding;
    newNode.style.margin = "5px 0px 5px 0px";

    if (GB.MSIE) {
        var ctx = this.selection.htmlText;
        newNode.innerHTML = ctx ? ctx : '&nbsp;';
        this.doCmdPaste(newNode.outerHTML);
    }
    else {
        var ctx = range != '' ? range.extractContents() : document.createElement('br');
        newNode.appendChild(ctx);
        range.insertNode(newNode);
        range.setEnd(newNode, 0);
        range.setStart(newNode, 0);
    }
    this.boxHide();
    this.editArea.focus();
},

insertBgImage: function (img) {
    this.editArea.focus();
    if (img) {
        img = this.config.editorPath + '/' + img;
        this.editArea.document.body.style.backgroundImage = "url("+img+")";
    }
    else {
        var s = this.editArea.document.body.style;
        GB.MSIE ? s.removeAttribute("backgroundImage") : s.backgroundImage = "none";
    }
},

insertTable: function (insertNode) {
    if (GB.MSIE) {
        this.selection.select();
        this.selection.pasteHTML(insertNode.outerHTML);
        return;
    }

    var sel = this._getSelection();
    var range = sel.getRangeAt(0);

    sel.removeAllRanges();
    range.deleteContents();

    var container = range.startContainer;
    var pos = range.startOffset;

    range = document.createRange();

    if (container.nodeType==3 && insertNode.nodeType==3) {
        container.insertData(pos, insertNode.nodeValue);

        range.setEnd(container, pos+insertNode.length);
        range.setStart(container, pos+insertNode.length);
    }
    else {
        var afterNode;
        if (container.nodeType == 3) {
            var textNode = container;
            container = textNode.parentNode;
            var text = textNode.nodeValue;
            var textBefore = text.substr(0,pos);
            var textAfter = text.substr(pos);
            var beforeNode = document.createTextNode(textBefore);
            var afterNode = document.createTextNode(textAfter);

            container.insertBefore(afterNode, textNode);
            container.insertBefore(insertNode, afterNode);
            container.insertBefore(beforeNode, insertNode);
            container.removeChild(textNode);
        }
        else {
            afterNode = container.childNodes[pos];
            container.insertBefore(insertNode, afterNode);
        }

        range.setEnd(afterNode, 0);
        range.setStart(afterNode, 0);
    }
    sel.addRange(range);
},

doInsertImage : function (images) {
    for (var i=0; i<images.length; i++) {
        var img = new Image();
        img.src = images[i]['filepath'];
        img.width = images[i]['width'];
        img.height = images[i]['height'];
        img.align = images[i]['align'];
        img.alt = images[i]['alt'] ? images[i]['alt'] : '';
        img.border = 0;

        var imgInfo = new Object();
        imgInfo['src'] = img.src;
        imgInfo['filename'] = images[i]['fileorig'];
        imgInfo['fileid'] = images[i]['filename'];
        imgInfo['width'] = img.width;
        imgInfo['height'] = img.height;

		this.imagesChanged=1;
        this.images.push(imgInfo);
        this.insertImage(img);
    }
},

insertImage : function (img) {
    var linebreak = false;
    var reSize = false;
    var outer = img;

    if (this.config.imgReSize) reSize = this.resizeImageComplete(img);
    if (img.alt == 'break') {
        linebreak = true;
        img.removeAttribute("align");
        img.alt = '';
    }

    if (reSize) {
        var szRandom = Math.random();
        var imgId = 'image_'+szRandom;
        var thumb = 'thumb_'+szRandom;
        var href = document.createElement('a');

        imgId = imgId.replace(/\./,'');
        thumb = thumb.replace(/\./,'');

        img.id = imgId;
        img.className = 'chimg_photo';
        img.onload = 'true';
        href.id = thumb;
        href.href = img.src;
        href.className = 'imageUtil';
        href.onclick = 'return hs.run(this)';
        href.appendChild(img);
        outer = href;
    }

    if (linebreak) {
        var p = document.createElement('p');
        p.style.width = '100%';
        p.style.margin = '5px 0px';
        p.appendChild(outer);
        outer = p;
    }

    this.doCmdPaste(this._outerHTML(outer));
},

_outerHTML : function (obj) {
    if (obj) {
        if (GB.MSIE) return obj.outerHTML;
        else {
            var html = document.createElement('div');
            html.appendChild(obj);
            return html.innerHTML;
        }
    }
},

resizeImageComplete : function (img) {
    var maxWidth = this.config.imgMaxWidth;
    if (img.width <= maxWidth) return false;

    img.style.width  = maxWidth + 'px';
    img.style.height = Math.round((img.height * maxWidth) / img.width) + 'px';
    img.removeAttribute("width");
    img.removeAttribute("height");

    return true;
},

showTagSelector : function (on) {
    if (!this.config.showTagPath) return;
    var el = document.getElementById("CHstatusBar"+this.oname);
    el.style.display = on ? '' : 'none';
},

setDisplayMode: function () {
    this.selection = null;
    this.popupWinClose();
    this.resetStatusBar();

    if (this.config.usePreview) {
        if (document.getElementById("chkPreviewMode").checked) {
            document.getElementById("chkPreviewMode").checked = false;
            this.displayMode = 'RICH';
        }
    }

    if (this.displayMode == 'RICH') {
        var tmpBody = this.getContents(true);
        this.szTmp = this.editArea.document.body.style.cssText;

        content = (this.config.fullHTMLSource == false) ? this.docSplit(tmpBody) : tmpBody;
        content = content.replace (/<META(.+?)name=generator>/ig, "");
        content = content.replace (/<link href=(.*?)>/ig, '');

        var key = GB.htmlKey.join ("|");
        var reg = new RegExp ("(&lt;\/?)(" + key + ")(&gt;)", "ig");
        var reg2 = new RegExp ("(&lt;)(" + key + ") (.+?)=(.+?)(&gt;)", "ig");

        content = content.replace(/</g,'&lt;').replace(/>/g,'&gt;');
        content = content.replace (/\n/g, '<br>');
        content = content.replace (reg, "<font color=\"#0000c8\">$1$2$3</font>");
        content = content.replace (reg2, "<font color=\"#0000c8\">$1$2</font> <font color=\"#b40000\">$3</font>=<font color=\"#248f00\">$4</font><font color=\"#0000c8\">$5</font>");

        this.editArea.document.body.innerHTML = content;
        this.editArea.document.body.clearAttributes;
        this.editArea.document.body.contentEditable = true;
        this.editArea.document.body.style.fontFamily = 'courier new,gulim';
        this.editArea.document.body.style.fontSize = '9pt';
        this.editArea.document.body.style.color = '#000';
        this.editArea.document.body.style.lineHeight = this.config.lineHeight;
        this.editArea.document.body.style.background = '#fff';

        this.displayMode = 'HTML';
        var tmpHeight = this.editAreaWrapper.offsetHeight + document.getElementById("idToolbar_"+this.oname).offsetHeight;
        document.getElementById("idToolbar_"+this.oname).style.display = "none";
        this.editAreaWrapper.style.height = tmpHeight + 'px';
        this.showTagSelector(false);
    }
    else {
        this.editAreaWrapper.style.visibility = 'hidden';
        this.displayMode = 'RICH';
        this.putContents(this.makeHtmlContent());
        document.getElementById("idToolbar_"+this.oname).style.display = '';
        var tmpHeight = this.editAreaWrapper.offsetHeight - document.getElementById("idToolbar_"+this.oname).offsetHeight;
        this.editAreaWrapper.style.height = tmpHeight + 'px';
        if (!this.config.fullHTMLSource) this.editArea.document.body.style.cssText = this.szTmp;
        this.showTagSelector(true);
        this.setEditorOpt();
        this.editAreaWrapper.style.visibility = 'visible';
        this.editArea.document.body.contentEditable = true;
    }
    this.editArea.document.body.focus();
},

makeHtmlContent : function () {
    if (GB.MSIE) return this.editArea.document.body.innerText;

    var content = this.editArea.document.body.innerHTML;
    content = content.replace (/<br>/ig, '\n');
    content = content.replace (/<\/font>/ig, '');
    content = content.replace (/<font (.+?)>/ig, '');

    return content;
},

resetStatusBar : function () {
    if (this.config.showTagPath)
        document.getElementById('CHstatusBar'+this.oname).innerHTML = '&lt;HTML&gt; &lt;BODY&gt; ';
},

previewMode : function () {
    this.selection = null;
    this.popupWinClose();
    this.resetStatusBar();
    if (this.config.useSource) {
        if (document.getElementById("chkDisplayMode").checked) {
            this.putContents(this.makeHtmlContent());
            this.displayMode = 'RICH';
            document.getElementById("chkDisplayMode").checked = false;
        }
    }
    this.editAreaWrapper.style.visibility = 'hidden';
    if (this.displayMode=='RICH') {
        document.getElementById("CHModifyBlock"+this.oname).style.display = 'none';
        this.showTagSelector(false);
        this.editArea.document.body.contentEditable = false;
        if (!GB.MSIE) this.editArea.document.designMode = "off";
        this.displayMode = 'HTML';
        var tmpHeight = this.editAreaWrapper.offsetHeight +
            document.getElementById("idToolbar_"+this.oname).offsetHeight;
        document.getElementById("idToolbar_"+this.oname).style.display = "none";
        this.editAreaWrapper.style.height =  tmpHeight+'px';
    }
    else {
        this.displayMode = 'RICH';
        this.editArea.document.body.contentEditable = true;
        if (!GB.MSIE) this.editArea.document.designMode = "on";
        document.getElementById("idToolbar_"+this.oname).style.display = '';
        var tmpHeight = this.editAreaWrapper.offsetHeight -
            document.getElementById("idToolbar_"+this.oname).offsetHeight;
        this.editAreaWrapper.style.height = tmpHeight + 'px';
        this.showTagSelector(true);
        this.setEditorOpt();
    }
    this.editAreaWrapper.style.visibility = 'visible';
    this.editArea.focus();
},

putContents : function (sContent) {
    if (!GB.MSIE)
        sContent = sContent.replace(/&lt;/g,'<').replace(/&gt;/g,'>');

    sContent = (this.config.fullHTMLSource == false) ? sContent : this.docSplit(sContent);
    if (GB.MSIE) {
        this.editArea.document.open("text/html","replace");
        this.editArea.document.write(sContent);
        this.editArea.document.close();
        this.editArea.document.execCommand("2D-Position", true, true);
        this.editArea.document.execCommand("MultipleSelection", true, true);
        this.editArea.document.execCommand("LiveResize", true, true);
    }
    else {
        this.editArea.document.body.innerHTML = sContent;
    }

    this.editArea.document.body.style.cssText = this.szTmp;
    this.editArea.document.body.contentEditable = true;
},

getImages : function () {
    var img = this.editArea.document.body.getElementsByTagName('img');
    var imgNumber = this.images.length;
    var imgArr = new Array();

    for (i=0; i<img.length; i++) {
        if (img[i].src) {
            var imgid = img[i].src;
            imgid = imgid.slice(imgid.lastIndexOf("/") + 1);
            for (var j=0; j<imgNumber; j++) {
                if (this.images[j]['fileid'] == imgid) {
                    imgArr.push(this.images[j]);
                    break;
                }
            }
        }
    }

    return imgArr.length > 0 ? imgArr : false;
},

getContents : function (op) {
    if (this.config.hrefTarget != '' || this.config.hrefTarget != null) {
        for (var i=0; i < this.editArea.document.links.length; i++) {
            if (!this.editArea.document.links[i].target) {
                this.editArea.document.links[i].target = this.config.hrefTarget;
            }
        }
    }

    this.szTmp = this.editArea.document.body.style.cssText;
    this.editArea.document.body.style.border = "";
    this.editArea.document.body.removeAttribute("contentEditable", 0);

    if (op == true) {
        var img = this.editArea.document.body.getElementsByTagName('img');
        var hostname = location.hostname;
        for (i=0; i<img.length; i++) {
            if (img[i].src) {
                if (!this.config.includeHostname && img[i].src.indexOf(hostname) != -1) {
                    img[i].src = img[i].src.substring(img[i].src.indexOf(hostname) + hostname.length);
                }

                if (img[i].getAttribute("onload")) {
                    var href = img[i].parentNode;
                    if (href && href.nodeName == 'A') {
                        href.removeAttribute("target");
                    }
                    img[i].onload = 'javascript:addCaption(this)';
                }
            }
            else {
                img[i].removeAttribute("onload", "", 0);
            }
        }
    }

    var content = this.editArea.document.documentElement;
    var mydoc = '';

    if (GB.MSIE) mydoc = content.outerHTML;
    else if (GB.OPERA) mydoc = '<HTML>'+content.innerHTML+'</BODY></HTML>';
    else mydoc = '<html>'+content.innerHTML+'</html>';

    mydoc = mydoc.replace("BORDER-RIGHT: medium none; ", "");
    mydoc = mydoc.replace("BORDER-TOP: medium none; ", "");
    mydoc = mydoc.replace("BORDER-BOTTOM: medium none; ", "");
    mydoc = mydoc.replace("BORDER-LEFT: medium none; ", "");
    mydoc = mydoc.replace("BORDER-RIGHT: medium none", "");
    mydoc = mydoc.replace("BORDER-TOP: medium none", "");
    mydoc = mydoc.replace("BORDER-BOTTOM: medium none", "");
    mydoc = mydoc.replace("BORDER-LEFT: medium none", "");
    mydoc = mydoc.replace(" style=\"\"", "");

    return mydoc;
},

docSplit : function (mydoc) {
    mydoc = mydoc.substr(mydoc.search(/<body/ig) + 1);
    mydoc = mydoc.substr(mydoc.indexOf(">") + 1);
    mydoc = mydoc.slice(0, mydoc.search(/<\/body/ig));
    mydoc = mydoc.replace(/^\s+/g, "");
    return mydoc;
},

returnContents : function (mydoc) {
    this.editArea.document.body.contentEditable = true;
    if (this.inputForm && document.getElementById(this.inputForm))
        document.getElementById(this.inputForm).value = mydoc;
    return mydoc;
},

outputPlainText : function () {
    var mydoc = document.getElementById('plainId_'+this.oname).value;
    mydoc = mydoc.replace(/\n/g, '<br />');
    return this.returnContents(mydoc);
},

outputHTML : function () {
    if (GB.editorMode != 'rich') return this.outputPlainText();
    this.resetViewHTML();
    var mydoc = this.getContents(true);
    mydoc = mydoc.replace (/<META(.+?)name=generator>/ig, "");
    mydoc = mydoc.replace (/<link href=(.*?)>/ig, '');
    return this.returnContents(mydoc);
},

outputBodyHTML : function () {
    if (GB.editorMode != 'rich') return this.outputPlainText();
    var str = this.docSplit(this.outputHTML());
    return this.returnContents(str);
},

outputBodyText : function () {
    return (GB.MSIE) ? this.editArea.document.body.innerText :
        this.outputBodyHTML().replace(/<br>/ig, "\n").replace(/<[^>]+>/g, "");
},

resetViewHTML : function () {
    var chkViewHtml = document.getElementById("chkDisplayMode");
    if (chkViewHtml != null && chkViewHtml.checked) {
        chkViewHtml.checked = false;
        this.setDisplayMode();
    }
},

returnFalse : function () {
    this.resetViewHTML();
    this.editArea.focus();
    var img = this.editArea.document.body.getElementsByTagName('img');
    for (i=0; i<img.length; i++) {
        if (img[i].src) {
            if (img[i].getAttribute("onload")) {
                img[i].onload = 'true';
            }
        }
        else {
            img[i].removeAttribute("onload", "", 0);
            img[i].removeAttribute("className", "", 0);
        }
    }
    this.setEditorOpt();
    return false;
},

trimSpace : function (str) {
    str = str.replace (/^\s+/g, '');
    str = str.replace (/\s+$/g, '');
    str = str.replace (/\r\n/g, '');
    str = str.replace (/\n/g, '');
    return str;
},

strLength : function (str) {
    var len = str.length;
    var mbytes = 0;
    var i = 0;

    for (; i<len; i++) {
        var c = str.charCodeAt(i);
        if (c > 128) mbytes++;
    }

    return (len-mbytes) + (mbytes*2);
},

contentsLengthAll : function () {
    this.resetViewHTML();
    return this.outputHTML().length;
},

contentsLength : function () {
    this.resetViewHTML();
    var content = this.outputBodyHTML();
    content = this.trimSpace(content);

    if (!content || content == "")
        return 0;

    return this.strLength(content);
},

inputLength : function () {
    this.resetViewHTML();
    var content = this.trimSpace(this.outputBodyText());

    if (!content || content == "")
        return 0;

    return this.strLength(content);
},

setSelection : function () {
    this.selection = this._getSelection();
    this.selectionType = this._getSelectionType(this.selection);
},

dimension : function (boxName) {
    var popup = document.getElementById(boxName).contentWindow.document.body;
    document.getElementById(boxName).style.width = popup.scrollWidth + 'px';
    document.getElementById(boxName).style.height = popup.scrollHeight + 'px';
},

displayWindow : function (boxName) {
    this.boxHide();
    this.setSelection();
    document.getElementById(boxName).contentWindow.document.getElementById("CHEditor").value = this.oname;
    this.dimension(boxName);
    document.getElementById(boxName).style.visibility = "visible";
    document.getElementById(boxName).style.zIndex = 1001;

    if (this.config.popupAutoKill)
        document.getElementById(boxName).onmouseout = this.boxHide;

    this.popupWinClose();
},

mouseOver : function (el) {
    el.style.background = this.selectedColor;
},

mouseOut : function (el) {
    el.style.background = this.editorPopupBgcolor;
},

windowPos : function (idImg, boxName) {
    var myLeft = document.getElementById(idImg.id).parentNode.offsetLeft;
    var box = document.getElementById(boxName);
    var myTop = document.getElementById(idImg.id).parentNode.parentNode.offsetHeight + 24;
    box.style.left = myLeft + 'px';
    box.style.top = myTop + 'px';
},

boxHide : function() {
    for (i=0; i < GB.popupIFrame.length; i++) {
        if (document.getElementById(GB.popupIFrame[i]+'_'+chutil.oname)) {
            document.getElementById(GB.popupIFrame[i]+'_'+chutil.oname).style.visibility = 'hidden';
        }
    }
},

createWindow : function (width, content) {
    var str = '<style>'
        + 'body {margin:0px;padding:0px;border:0px;background-color:'+this.editorPopupBgcolor+';font-family:'+this.config.editorFontFace+'}'
        + '.dropdown {cursor:pointer}'
        + '</style>'
        + '<body onselectstart="return event.srcElement.tagName==\'INPUT\'" oncontextmenu="return false">'
        + '<div style="width:'+width+'px;margin:0px;padding:0px;border:#8db3e5 1px solid;background-color:'+this.editorPopupBgcolor+';">'
        + content
        + '</div>'
        + '<input type="text" style="display:none" id="CHEditor" contentEditable="true" value="" />'
        + '</body>';

    return str;
},


setColorTable : function (_which) {
    var title = (_which == 'back') ? 'Çü±¤Ææ' : (_which == 'bgColor' ? '¹ÙÅÁ»ö' : '±ÛÀÚ»ö');
    var strCap =
        '<div style="padding:4px 0px 0px 2px;color:#0E2C5D;background:#6b90c0 url('+this.config.editorPath+'/icons/title_bar_bg.gif);float:left;font-size:9pt">'+title+'</div>'+
        '<div style="background:#6b90c0 url('+this.config.editorPath+'/icons/title_bar_bg.gif);text-align:right;padding:3px;font-size:9pt">&#160;<img src="'+this.config.editorPath+'/icons/close.gif" width="13" height="13" onclick="parent.'+this.oname+'.boxHide();" style="vertical-align:top" alt="" /></div><div style="border-top:1px solid #8db3e5">' +
        '     <table cellpadding="1" cellspacing="5" style="cursor: '+
        '         pointer;font-family:Verdana;font-size:7px;border:0px'+
        '         " bgcolor="#e3efff">'+
        '       <tr>'+
        '         <td colspan="10" id="cellColor" style="border:1px solid #000;height:20px;font-family:verdana;font-size:12px;text-align:center">¾øÀ½'+
        '         </td>'+
        '       </tr>';
    var colorRows = [strCap];
    var k = 0;
    var w = 14;
    var h = 10;
    var eCellColor = "document.getElementById('cellColor').style.backgroundColor";
    var cmd = (_which == 'back') ? ".setColor("+eCellColor+",'back')" :
        (_which == 'fore' ? ".setColor("+eCellColor+",'fore')" : ".setBgColor("+eCellColor+")");

    colorRows[colorRows.length] = '<div style="padding:1px">';

    for (var i = 0; i < w; i++) {
        colorRows[colorRows.length] = "<tr>";
        for (var j = 0; j < h; j++) {
            colorRows[colorRows.length] = '<td onmouseover="parent.'+this.oname+'.showColor(document.getElementById(\'cellColor\'),this)" '+
                'onclick="parent.'+this.oname+cmd+';" bgcolor="'+GB.colors[k]+'" style="font-size:7px;border:1px solid #aaa;width:12px;">&#160;</td>';
            k++;
        }
        colorRows[colorRows.length] = "</tr>";
    }

    colorRows[colorRows.length] =
        '<tr>'+
        '  <td colspan="10" style="border:1px solid #000;height:15px;font-size:9pt;text-align:center; " '+
        '    onmouseover="parent.'+this.oname+'.showColor(document.getElementById(\'cellColor\'),this)" onclick="parent.'+this.oname+cmd+'">»ö»ó ¾øÀ½'+
        '  </td>'+
        '</tr>'+
        '</table></div>';

    return colorRows.join("\n");
},

showColor : function (val, obj) {
    if (obj.bgColor)
        val.innerHTML = val.style.backgroundColor = obj.bgColor;
    else {
        val.innerHTML = '¾øÀ½';
        GB.MSIE ? val.style.removeAttribute('backgroundColor') : val.style.backgroundColor = "";
    }
},

doOnKeyPress : function () {
    var oEditor     = document.getElementById("id"+chutil.oname).contentWindow;
    var editArea    = document.getElementById("id"+chutil.oname);
    var areaHeight  = parseInt(editArea.style.height);
    var key = oEditor.event.keyCode;

    if (key) {
        if (key == 13) {
            if (GB.autoHeight && oEditor.document.body.scrollHeight+40 > areaHeight)
                editArea.style.height = oEditor.document.body.scrollHeight+40+'px';
            if (document.getElementById('chkUseBR'+chutil.oname).checked == true && oEditor.event.shiftKey == false) {
                var sel = oEditor.document.selection.createRange();
                oEditor.event.returnValue = false;
                oEditor.event.cancelBubble = true;
                sel.pasteHTML('<br />');
                sel.select();
                sel.moveEnd("character", 1);
                sel.moveStart("character", 1);
                sel.collapse(false);
                return false;
            }
            else
                return oEditor.event.keyCode = 13;
        }
        if (GB.autoHeight && (key == 8 || key == 46) && oEditor.document.body.scrollHeight+30 < areaHeight)
            editArea.style.height = oEditor.document.body.scrollHeight+30+'px';
    }
},

drawToolbarIcon : function (iconBlock, top, iconWidth, id, toolTip, cmd) {
    document.write("<div style=\"text-align:left;float:left;margin:0px 2px 0px 0px;width:"+iconWidth+"px;height:24px;\">");
    document.write("<span unselectable=\"on\" style=\"cursor:pointer;position:absolute;clip:rect(0px "+iconWidth+"px 22px 0px);\">");
    switch (iconBlock) {
        case 1: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_1.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 2: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_2.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 3: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_3.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 4: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_4.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 5: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_5.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 6: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_6.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 7: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_7.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 8: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_8.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 9: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_9.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 10: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_10.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        case 11: document.write("<img id=\""+id+"\" title=\""+toolTip+"\" src=\""+this.config.editorPath+"/icons/toolbar_icon_11.gif\" style=\"position:absolute;top:-"+top+"px;width:"+iconWidth+"px;\" onmouseover=\""+this.oname+".toolbarButtonOver(this)\" onmouseout=\""+this.oname+".toolbarButtonOut(this)\" onmouseup=\""+cmd+"\" alt=\"\" />"); break;
        default: break;
    }
    document.write("</span></div>");
},

popupWinLoad : function (url, popupWidth, popupHeight, szTitle) {
    var oTitle = document.getElementById('popupTitle_'+this.oname);
    var container = document.getElementById('editArea_'+this.oname);
    var posLeft = container.offsetWidth;
    var posTop = container.offsetTop;
    var offLeft = (container.offsetWidth-popupWidth) > 0 ? container.offsetLeft + (container.offsetWidth-popupWidth)/2 :
        container.offsetLeft;
    var dwindow = this.popupID;

    dwindow.style.width = popupWidth+"px";
    dwindow.style.left = offLeft+'px';
    dwindow.style.top = posTop+'px';
    dwindow.style.zIndex = 1001;

    var cframe = document.getElementById("cframe_"+this.oname);
    var iframe = document.createElement("iframe");
    iframe.style.width = "100%";
    iframe.style.height = popupHeight+'px';
    iframe.style.border = "0px";
    iframe.frameBorder = 0;
    iframe.src = url;
    cframe.innerHTML = '';
    cframe.appendChild(iframe);
    oTitle.innerHTML = szTitle;
    document.getElementById('container_'+this.oname).style.zIndex = 1000;
    dwindow.style.visibility = "visible";
},

popupWinClose : function () {
    if (this.popupID == null) return;
    this.popupID.style.visibility = "hidden";
    document.getElementById("cframe_"+this.oname).src = "";
    document.getElementById('container_'+this.oname).style.zIndex = 100;
    this.popupID.style.zIndex = -1;
    this.editArea.focus();
},

windowOpen : function (_which) {
    var tmpl, w, h;
    var popupTitle = '';
    this.editArea.focus();
    this.boxHide();

    if (GB.MSIE) this.setSelection();

    switch (_which) {
        case "image"     : tmpl = "insert_image.html";  h = 435; w = 354; popupTitle = '±×¸² ³Ö±â'; break;
        case "media"     : tmpl = "insert_media.html";  h = 480; w = 430; popupTitle = '¹Ìµð¾î'; break;
        case "bgimage"   : tmpl = "insert_bgimage.html";h = 190; w = 430; popupTitle = '¹è°æ ÀÌ¹ÌÁö'; break;
        case "table"     : tmpl = "insert_table.html";  h = 460; w = 430; popupTitle = 'Å×ÀÌºí ¸¸µé±â'; break;
        case "hyperLink" : tmpl = "insert_hlink.html";  h = 145; w = 420; popupTitle = 'ÇÏÀÌÆÛ¸µÅ©'; break;
        case "emotion"   : tmpl = "insert_emicon.html"; h = 210; w = 400; popupTitle = 'Ç¥Á¤ ¾ÆÀÌÄÜ'; break;
        case "schar"     : tmpl = "insert_schar.html";  h = 180; w = 500; popupTitle = 'Æ¯¼ö ¹®ÀÚ'; break;
        case "flash"     : tmpl = "insert_flash.html";  h = 295; w = 500; popupTitle = 'ÇÃ·¡½¬ ¹«ºñ'; break;
        default: return;
    }

    this.popupWinLoad(this.config.editorPath + '/' + tmpl, w, h, popupTitle);
},

_getSelection : function() {
    return GB.MSIE ? this.editArea.document.selection.createRange() :
        this.editArea.getSelection();
},

_getSelectionType : function(rng) {
    return GB.MSIE ? this.editArea.document.selection.type :
        rng.getRangeAt(0).startContainer.nodeType;
},

undo : function () {
    this.editArea.focus();
    this.updateUndoQueue();
    if (this.undoPos > 0) {
        var txt = this.undoQueue[--this.undoPos];
        if (txt) {
            this.editAreaWrapper.style.visibility = 'hidden';
            this.putContents(txt);
            this.editAreaWrapper.style.visibility = 'visible';
        }
        else ++this.undoPos;
    }
    this.selection = null;
    this.setEditorOpt();
    if (this.config.showTagPath) cheditor.setEditorEvent(this.oname);
},

redo : function () {
    this.editArea.focus();
    if (this.undoPos < this.undoQueue.length - 1) {
        var txt = this.undoQueue[++this.undoPos];
        if (txt) {
            this.editAreaWrapper.style.visibility = 'hidden';
            this.putContents(txt);
            this.editAreaWrapper.style.visibility = 'visible';
        }
        else --this.undoPos;
    }
    this.setEditorOpt();
    if (this.config.showTagPath) cheditor.setEditorEvent(this.oname);
},

doCmd : function(cmd, opt) {
    this.popupWinClose();
    this.updateUndoQueue();
    this.selection = null;

    var oTarget = null;
    var range = this._getSelection();
    var nodeType = this._getSelectionType(range);

    if (GB.MSIE) {
        range = this.fixSelection(range);
        nodeType = this.fixSelectionType(range, nodeType);
        oTarget = (nodeType == 'None') ? this.editArea.document : range;
        range.select();
    }
    else {
        range = (typeof range != "undefined") ? range.getRangeAt(0) : this.editArea.document.createRange();
        oTarget = (typeof range != "undefined") ? this.editArea.document : range;
    }

    if (cmd.toLowerCase() == 'print') {
        this.editArea.print();
        return;
    }
    var pasteFromWord = false;
    if (cmd == 'PasteFromWord') {
        cmd = 'Paste';
        pasteFromWord = true;
    }

    if (!GB.MSIE && ((cmd == 'Cut') || (cmd == 'Copy') || (cmd == 'Paste'))) {
        try {
            oTarget.execCommand(cmd, false, opt);
        }
        catch (e) {
            var keyboard = '';
            var command = '';
            switch (cmd) {
                case 'Cut'  : keyboard = 'x'; command = 'ÀÚ¸£±â'; break;
                case 'Copy' : keyboard = 'c'; command = 'º¹»ç'; break;
                case 'Paste': keyboard = 'v'; command = 'ºÙÀÌ±â'; break;
            }
            alert('»ç¿ëÇÏ°í °è½Å ºê¶ó¿ìÀú¿¡¼­´Â \'' + command + '\' ¸í·ÉÀ» »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù. \n' +
            'Å°º¸µå ´ÜÃàÅ°¸¦ ÀÌ¿ëÇÏ¿© ÁÖ¼¼¿ä. \(À©µµ »ç¿ëÀÚ: Ctrl + ' + keyboard + ', ¸ÆÅ²Åä½Ã »ç¿ëÀÚ: Apple + ' + keyboard + '\)')
        }
        this.editArea.focus();
        return;
    }

    try {
        if (pasteFromWord == true) {
            var editorTmp = eval("idtmp"+this.oname);
            editorTmp.document.execCommand("SelectAll");
            editorTmp.document.execCommand("Paste");
            selection.pasteHTML(this.cleanFromWord());
            selection.select();
        }
        else {
            oTarget.execCommand(cmd, false, opt);
        }
    }
    catch (e) {
        alert(cmd + ": Áö¿øµÇÁö ¾Ê´Â ¸í·ÉÀÔ´Ï´Ù.");
    }
    if (this.config.showTagPath) cheditor.setEditorEvent(this.oname);
},

cleanFromWord : function () {
    var editorTmp = eval("idtmp"+this.oname);
    for (var i=0; i < editorTmp.document.body.all.length; i++) {
        editorTmp.document.body.all[i].removeAttribute("className", "", 0);
        editorTmp.document.body.all[i].removeAttribute("style", "", 0);
    }
    var sHTML = editorTmp.document.body.innerHTML;
    var str = sHTML;
    var arrTmp = str.split('<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />');
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("<o:p>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("</o:p>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("<o:p>&nbsp;");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("<P>&nbsp;</P>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("<P>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("</P>");
    if (arrTmp.length > 1) str = arrTmp.join("<br>");
    var arrTmp = str.split("<STRONG>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    var arrTmp = str.split("</STRONG>");
    if (arrTmp.length > 1) str = arrTmp.join("");
    str = str.replace(/<\/?span(.*?)>/ig, '');
    str = str.replace(/<\/?font(.*?)>/ig, '');
    str = str.replace(/&nbsp;<br>/ig, "<br>");

    return str;
},

printPageBreak : function () {
    this.setSelection();
    var str = '<div style="page-break-after:always;border-top:1px #f45000 dotted;border-bottom:1px #f45000 dotted;height:3px;font-size:1px;margin:5px 0px 10px 0px">&nbsp;</div>\n';
    this.doCmdPaste(str);
},

doCmdPaste : function(str) {
    if (GB.MSIE) {
        this.selection.select();
        if (this.selectionType == "Control") return;
        this.selection.pasteHTML(str);
    }
    else
        this.doCmd('insertHTML', str);
},

doCmdPopup : function(cmd, opt) {
    var target;
    var selection = this.selection;
    var selectionType = this.selectionType;

    this.editArea.focus();

    if (GB.MSIE) {
        target = (selectionType == 'None') ? this.editArea.document : selection;
        selection.select();
    }
    else {
        ran =(typeof selection != "undefined") ? selection.getRangeAt(0) :
            this.editArea.document.createRange();
        target = this.editArea.document;
    }

    try {
        if (cmd == 'fontSize') {
            target.execCommand(cmd, false, 2);
            this.setFontSize(this.editArea.document.body, opt);
        }
        else
            target.execCommand(cmd, false, opt);
    }
    catch(e) {
        alert(cmd + ": Áö¿øµÇÁö ¾Ê´Â ¸í·ÉÀÔ´Ï´Ù.");
    }

    if (this.config.showTagPath) cheditor.setEditorEvent(this.oname);
    this.boxHide();
},

setFontSize : function (el, val) {
    if (!el) return;

    if (el.hasChildNodes()) {
        var len = el.childNodes.length;
        var idx =0;
        for (; idx < len; idx++) {
            if (el.nodeName == 'FONT') {
                if (el.getAttribute('size')) {
                    el.removeAttribute('size');
                    el.style.fontSize = val+'pt';
                }
            }
            this.setFontSize(el.childNodes[idx], val);
        }
    }
},

insideEditor : function(el) {
    while (el != null) {
        if (el.tagName.toLowerCase() == "body" && el.contentEditable == "true")
            return true;
        el = el.parentElement;
    }
    return false;
},

fixSelection : function(selection) {
    if (GB.MSIE) {
        if(selection.parentElement != null) {
            if(!this.insideEditor(selection.parentElement())) {
                this.editArea.focus();
                selection = this._getSelection();
            }
        }
        else {
            if(!this.insideEditor(selection.item(0))) {
                this.editArea.focus();
                selection = this._getSelection();
            }
        }
    }
    return selection;
},

fixSelectionType : function(selection, selectionType) {
    if (GB.MSIE) {
        if (selection.parentElement != null) {
            if (!this.insideEditor(selection.parentElement())) {
                this.editArea.focus();
                return this._getSelectionType();
            }
        }
        else {
            if (!this.insideEditor(selection.item(0))) {
                this.editArea.focus();
                return this._getSelectionType();
            }
        }
    }
}
};

cheditor.modifyImage = function (img, editBlock) {
    var a_align = new Array("baseline","top","middle","bottom","texttop","absmiddle","absbottom","left","right");
    var a_text = new Array("±âÁØ¼±","À§ÂÊ","°¡¿îµ¥","¾Æ·¡ÂÊ","¹®ÀÚ¿­ À§ÂÊ","¼±ÅÃ ¿µ¿ªÀÇ °¡¿îµ¥","¼±ÅÃ ¿µ¿ªÀÇ ¾Æ·¡ÂÊ","¿ÞÂÊ","¿À¸¥ÂÊ");
    if (img.hspace < 0) img.hspace = 0;
    if (img.vspace < 0) img.vspace = 0;
    if (img.border < 0 || img.border == '') img.border = 0;
    var htmlOutput = '<table cellpadding="0" cellspacing="0" border="0"><tr>' +
        '<td width="110"><font style="font-size:9pt">°¡·Î ÇÈ¼¿: <input type="text" size="3" style="font-size:9pt" value="'+img.width+'" id="n_width" />&#160;</font>\n</td>' +
        '<td width="110"><font style="font-size:9pt">°¡·Î ¿©¹é: <input type="text" size="3" style="font-size:9pt" value="'+img.hspace+'" id="n_hspace" />&#160;</font>\n</td>' +
        '<td width="200"><font style="font-size:9pt">Á¤·Ä: <select id="n_alignment" name="n_alignment" style="font-size:9pt">' +
        '<option value="">¾øÀ½</option>';
        for (var i=0; i<a_align.length; i++) {
            htmlOutput += '<option value='+a_align[i];
            if (img.align == a_align[i].toLowerCase()) htmlOutput += ' selected';
            htmlOutput += '>'+a_text[i]+'</option>';
        }

     htmlOutput += '</select><select id="n_alignment_caption" name="n_alignment_caption" style="display:none;font-size:9pt">'+
        '<option value="left">¿ÞÂÊ</option><option value="right">¿À¸¥ÂÊ</option></select></font></td>' +
        '<td>&#160;<font style="font-size:9pt">±¥¼± µÎ²²: <input type="text" size="1" style="font-size:9pt" value="'+img.border+'" id="n_border" />&#160;</font>\n</td></tr>' +
        '<tr><td><font style="font-size:9pt">¼¼·Î ÇÈ¼¿: <input type="text" size="3" style="font-size:9pt" value="'+img.height+'" id="n_height" />&#160;</font>\n</td>' +
        '<td><font style="font-size:9pt">¼¼·Î ¿©¹é: <input type="text" size="3" style="font-size:9pt" value="'+img.vspace+'" id="n_vspace" />&#160;</font>\n</td>' +
        '<td colspan="2"><font style="font-size:9pt">¼³¸í: <input type="text" size="25" id="n_alt" style="font-size:9pt" value="'+img.alt+'" />' +
        '&#160;<button style="height:21px;font-size:9pt;" id="editimg">¼öÁ¤</button>' +
        '&#160;<input type="checkbox" id="isCaption" style="background-color:#a3d260" />Ä¸¼Ç</font>\n</td></tr></table>';

    editBlock.innerHTML = htmlOutput;

    document.getElementById("isCaption").onclick = function() {
        if (document.getElementById("isCaption").checked) {
            document.getElementById("n_alignment_caption").style.display = '';
            document.getElementById("n_alignment").style.display = 'none';
        }
        else {
            document.getElementById("n_alignment_caption").style.display = 'none';
            document.getElementById("n_alignment").style.display = '';
        }
    };
    document.getElementById("editimg").onclick = function() {
        var n_width  = document.getElementById("n_width");
        var n_height = document.getElementById("n_height");
        var n_hspace = document.getElementById("n_hspace");
        var n_vspace = document.getElementById("n_vspace");
        var n_border = document.getElementById("n_border");
        var n_alt    = document.getElementById("n_alt");

        if (n_width.value == '' || n_width.value == null || n_width.value < 1) {
            alert("°¡·Î ÇÈ¼¿ Å©±â¸¦ ÀÔ·ÂÇÏ¿© ÁÖ½Ê½Ã¿À");
            return;
        }
        else if (n_height.value == '' || n_height.value == null || n_height.value < 1) {
            alert("¼¼·Î ÇÈ¼¿ Å©±â¸¦ ÀÔ·ÂÇÏ¿© ÁÖ½Ê½Ã¿À");
            return;
        }
        else {
            var n_align  = '';
            if (document.getElementById("n_alignment").style.display != 'none') {
                n_align = document.getElementById("n_alignment");
            }
            else {
                n_align = document.getElementById("n_alignment_caption");
            }

            img.width  = parseInt(n_width.value);
            img.height = parseInt(n_height.value);

            if (parseInt(n_hspace.value) > 0) img.hspace = parseInt(n_hspace.value);
            else img.removeAttribute("hspace", "", 0);
            if (parseInt(n_vspace.value) > 0) img.vspace = parseInt(n_vspace.value);
            else img.removeAttribute("vspace", "", 0);
            if (parseInt(n_border.value) > 0) {
                img.style.border = n_border.value+'px ' + GB.imageBorder;
                img.removeAttribute("border", "", 0);
            }
            else img.removeAttribute("style", "", 0);
            if (n_align.value != '')  img.align  = n_align.value ;
            else img.removeAttribute("align", "", 0);
            if (n_alt.value != '') img.alt = n_alt.value;
            else img.alt = '';

            if (document.getElementById("isCaption").checked) {
                var id = img.getAttribute("id");
                if (id) {
                    id = id.replace(/image/, 'thumb');
                    var lb = eval("id"+chutil.oname).document.getElementById(id);
                    if (lb) lb.onclick = 'return hs.run(this,\''+img.alt.replace(/\'/,'')+'\')';
                }
                img.className = 'chimg_photo';
                img.onload = 'true';
                alert('Ä¸¼ÇÀº ¿¡µðÅÍ ¾È¿¡¼­´Â º¸ÀÌÁö ¾Ê½À´Ï´Ù.\n±Û ÀÛ¼º ¿Ï·á ÈÄ HTML ÆäÀÌÁö »ó¿¡¼­ º¸ÀÔ´Ï´Ù.');
            }
            else {
                img.removeAttribute("className", "", 0);
                img.removeAttribute("onload", "", 0);
            }
        }
    };
};

cheditor.modifyCell = function (cell, statusbar) {
    while (cell != null && cell.tagName.toLowerCase() != "td") cell = cell.parentNode;

    var tbl = cell;
    var row = tbl;
    var editorPath = eval(chutil.oname).config.editorPath;

    while (tbl != null && tbl.tagName.toLowerCase() != "table") tbl = tbl.parentNode;
    while (row != null && row.tagName.toLowerCase() != "tr") row = row.parentNode;

    var t_width  = tbl.style.width  ? tbl.style.width  : tbl.width;
    var t_height = tbl.style.height ? tbl.style.height : tbl.getAttribute("height");
    var t_cellpadding = tbl.cellPadding;
    var t_cellspacing = tbl.cellSpacing;
    var t_bgcolor = tbl.getAttribute("bgcolor") ? tbl.bgColor : '';
    var t_bordercolor = tbl.getAttribute("bordercolor") ? tbl.getAttribute("bordercolor") : '';
    var t_border = tbl.getAttribute("border") ? tbl.border : '';
    var c_width = cell.getAttribute("width") ? cell.getAttribute("width") : '';
    var c_height = cell.getAttribute("height") ? cell.getAttribute("height") : '';
    var c_align = cell.getAttribute("align") ? cell.align : '';
    var c_bgcolor = cell.getAttribute("bgcolor") ? cell.bgColor : '';
    var is_ie = navigator.userAgent.toLowerCase().indexOf("msie") != -1;

    if (t_height == null) t_height = '';
    t_width = t_width.replace(/px/ig, '');
    t_height = t_height.replace(/px/ig, '');

    var html_output = '<table cellpadding="0" cellspacing="0" style="margin-top:5px;">' +
                      '<tr><td><span style="font-size:9pt;">°¡·Î Æø: <input type="text" size="4" value="'+t_width+'" id="n_width" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">¼¿ ÆÐµù: <input type="text" size="1" value="'+t_cellpadding+'" id="n_cellpadding" /></span>\n</td>' +
                      '<td align="right"><span style="font-size:9pt;">Å×ÀÌºí ¹è°æ »ö: <input type="text" size="6" value="'+t_bgcolor+'" id="n_bgcolor" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">Å×ÀÌºí Á¤·Ä: <select id="alignment" style="font-size:9pt">' +
                      '<option value="">¾øÀ½</option>' +
                      '<option value="left">¿ÞÂÊ</option>' +
                      '<option value="center">°¡¿îµ¥</option>' +
                      '<option value="right">¿À¸¥ÂÊ</option>' +
                      '</select></span></td>' +
                      '</tr><tr>' +
                      '<td><span style="font-size:9pt;">¼¼·Î Æø: <input type="text" size="4" value="'+t_height+'" id="n_height" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">¼¿ °£°Ý: <input type="text" size="1" value="'+t_cellspacing+'" id="n_cellspacing" /></span>\n</td>' +
                      '<td align="right"><span style="font-size:9pt;">Å×ÀÌºí Å×µÎ¸® »ö: <input type="text" size="6" value="'+t_bordercolor+'" id="n_bordercolor" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">Å×µÎ¸® µÎ²²: <input type="text" size="1" value="'+t_border+'" id="n_border" /></span>\n</td>' +
                      '</tr><tr>' +
                      '<td><span style="font-size:9pt;">¼¿ °¡·Î: <input type="text" size="4" value="'+c_width+'" id="c_width" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">°¡·Î Á¤·Ä: <select id="c_alignment" style="font-size:9pt;">' +
                      '<option value="">¾øÀ½</option>' +
                      '<option value="left">¿ÞÂÊ</option>' +
                      '<option value="center">°¡¿îµ¥</option>' +
                      '<option value="right">¿À¸¥ÂÊ</option>' +
                      '<option value="justify">¾çÂÊ</option>' +
                      '</select></span></td>' +
                      '<td align="right"><span style="font-size:9pt;">¼¿ ¹è°æ »ö: <input type="text" size="6" value="'+c_bgcolor+'" id="c_bgcolor" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">No Wrap:<input type="checkbox" value="'+t_bgcolor+'" id="nowrap" />&#160;</span>\n' +
                      '<button style="width:54px;height:21px;font-size:9pt;padding-top:2px" id="editcell">¼öÁ¤</button></td>' +
                      '</tr><tr>' +
                      '<td><span style="font-size:9pt;">¼¿ ¼¼·Î: <input type="text" size="4" value="'+c_height+'" id="c_height" />&#160;</span>\n</td>' +
                      '<td>&#160;<span style="font-size:9pt;">¼¼·Î Á¤·Ä: <select id="c_valignment" style="font-size:9pt;">' +
                      '<option value="">¾øÀ½</option>' +
                      '<option value=top>À§ÂÊ</option>' +
                      '<option value=middle>°¡¿îµ¥</option>' +
                      '<option value=bottom>¾Æ·¡</option>' +
                      '<option value=baseline>±âÁØ¼±</option>' +
                      '</select></span></td>' +
                      '<td style=padding-left:12px colspan=2>' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/increasecolspan.gif" id="increasecolspan" title="ColSpan Áõ°¡" />' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/decreasecolspan.gif" id="decreasecolspan" title="ColSpan °¨¼Ò" />' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/increaserowspan.gif" id="increaserowspan" title="RowSpan Áõ°¡" />' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/decreaserowspan.gif" id="decreaserowspan" title="RowSpan °¨¼Ò" />&#160;&#160;&#160;&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/addcol.gif" id="addcol" title="Çà »ðÀÔ" />&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/addcols.gif" id="addcols" title="¼¿ »ðÀÔ" />&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/removecol.gif" id="removecol" title="Çà »èÁ¦" />&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/removecols.gif" id="removecols" title="¼¿ »èÁ¦" />&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/addrow.gif" id="addrows" title="¿­ »ðÀÔ" />&#160;' +
                      '<img style="vertical-align:middle;width:20px;height:20px;cursor:pointer;" src="'+editorPath+'/icons/removerow.gif" id="removerow" title="¿­ »èÁ¦" />' +
                      '</td></tr></table>';

    statusbar.innerHTML = html_output;
    document.getElementById("nowrap").checked = cell.getAttribute("nowrap") ? true : false;

    if (tbl.getAttribute("align")) { document.getElementById("alignment").value = tbl.getAttribute("align"); }
    if (cell.getAttribute("align")) { document.getElementById("c_alignment").value  = cell.getAttribute("align"); }
    if (cell.getAttribute("valign")) { document.getElementById("c_valignment").value    = cell.getAttribute("valign"); }

    document.getElementById("editcell").onclick = function() {
        var n_width = document.getElementById("n_width");
        var n_height = document.getElementById("n_height");
        var n_align = document.getElementById("alignment");
        var n_cellpadding = document.getElementById("n_cellpadding");
        var n_cellspacing = document.getElementById("n_cellspacing");
        var n_bgcolor = document.getElementById("n_bgcolor");
        var n_border = document.getElementById("n_border");
        var n_bordercolor = document.getElementById("n_bordercolor");
        var c_width = document.getElementById("c_width");
        var c_height = document.getElementById("c_height");
        var c_bgcolor = document.getElementById("c_bgcolor");
        var c_align = document.getElementById("c_alignment");
        var c_valign = document.getElementById("c_valignment");

        tbl.border = parseInt(n_border.value);
        tbl.removeAttribute("width", 0);
        tbl.removeAttribute("height", 0);

        if (n_width.value) tbl.style.width = n_width.value;
        if (n_height.value > 0) tbl.style.height = n_height.value;

        tbl.cellPadding = n_cellpadding.value;
        tbl.cellSpacing = n_cellspacing.value;

        if (n_align.value != "") tbl.align = n_align.value;
        else if (tbl.getAttribute("align")) tbl.removeAttribute("align", 0);

        if (n_bgcolor.value) tbl.bgColor = n_bgcolor.value;
        else tbl.removeAttribute("bgcolor", 0);

        if (n_bordercolor.value) tbl.setAttribute("bordercolor", n_bordercolor.value);
        else tbl.removeAttribute("bordercolor", 0);

        if (c_width.value > 0) cell.width = c_width.value;
        if (c_height.value > 0) cell.height = c_height.value;

        cell.noWrap = document.getElementById("nowrap").checked ? true : false;

        if (c_align.value != "") cell.align = c_align.value;
        else cell.removeAttribute("align", 0);

        if (c_valign.value != "") cell.vAlign = c_valign.value;
        else cell.removeAttribute("valign", 0);

        if (c_bgcolor.value) cell.bgColor = c_bgcolor.value;
        else cell.removeAttribute("bgcolor", 0);
    }

    document.getElementById("increasecolspan").onclick = function() { cell.colSpan++; }
    document.getElementById("decreasecolspan").onclick = function() {
        if (cell.colSpan == 1) cell.removeAttribute("colspan", 0);
        else cell.colSpan = cell.colSpan - 1;
    }
    document.getElementById("increaserowspan").onclick = function() { cell.rowSpan++; }
    document.getElementById("decreaserowspan").onclick = function() {
        if (cell.rowSpan == 1) cell.removeAttribute("rowspan", 0);
        else cell.rowSpan = cell.rowSpan - 1;
    }
    document.getElementById("addcol").onclick = function() {
        for (var i=0; i<tbl.rows.length; i++) {
            var trow = tbl.rows.item(i);
            var col = trow.insertCell(cell.cellIndex);
            if (!GB.MSIE) {
                var br = document.createElement("br");
                col.appendChild(br);
            }
        }
    }
    document.getElementById("addcols").onclick = function() {
        var col = row.insertCell(cell.cellIndex);
        if (!GB.MSIE) {
            var br = document.createElement("br");
            col.appendChild(br);
        }
    }
    document.getElementById("removecol").onclick = function() {
        for (var i=0; i<tbl.rows.length; i++) {
            var trow = tbl.rows.item(i);
            trow.deleteCell(cell.cellIndex);
        }
    }
    document.getElementById("removecols").onclick = function() { row.deleteCell(cell.cellIndex); }
    document.getElementById("addrows").onclick = function() {
        var nrow = tbl.insertRow(row.rowIndex);
        var len = row.cells.length;
        for (var i=0; i<len; i++) {
            var td = nrow.insertCell(i);
            if (!GB.MSIE) {
                var br = document.createElement("br");
                td.appendChild(br);
            }
        }
    }
    document.getElementById("removerow").onclick = function() { tbl.deleteRow(row.rowIndex); }
};

cheditor.setEditorEvent = function (oname) {
    var statusBar = document.getElementById("CHstatusBar"+oname);
    var modifyBlock = document.getElementById("CHModifyBlock"+oname);
    var oEditor = document.getElementById("id"+oname).contentWindow;
    var cmd, el, sel, rng, _parent, ancestors = [];

    if (GB.MSIE) {
        sel = oEditor.document.selection;
    }
    else {
        sel = oEditor.getSelection();
        if (typeof sel != "undefined") {
            try {
                rng = sel.getRangeAt(0);
            }
            catch(e) {
                rng = oEditor.document.createRange();
            }
        }
        else {
            rng = oEditor.document.createRange();
        }
    }

    if (GB.MSIE) {
        rng = sel.createRange();

        if (sel.type == "Text" || sel.type == "None") {
            _parent = rng.parentElement();
        }
        else if (sel.type == "Control") {
            _parent = rng.item(0);
        }
        else {
            _parent = oEditor.document.body;
        }
    }
    else try {
        _parent = rng.commonAncestorContainer;
        if (!rng.collapsed && rng.startContainer == rng.endContainer &&
            rng.startOffset - rng.endOffset < 2 && rng.startContainer.hasChildNodes())
        {
            _parent = rng.startContainer.childNodes[rng.startOffset];
        }

        while (_parent.nodeType == 3) {
            _parent = _parent.parentNode;
        }
    }
    catch (e) {
        _parent= null;
    }

    while (_parent && (_parent.nodeType == 1) && (_parent.tagName.toLowerCase() != 'body')) {
        ancestors.push(_parent);
        _parent = _parent.parentNode;
    }

    ancestors.push(oEditor.document.body);

    for (var i = ancestors.length; --i >= 0;) {
        el = ancestors[i];
        if (!el) countine;

        switch (el.tagName.toLowerCase()) {
            case "img" : cmd = "img"; break;
            case "td" : cmd = "td"; break;
            default : continue;
        }
    }

    switch (cmd) {
    case "img" :
        if (el.src.indexOf('/icons/em/') == -1) {
            modifyBlock.style.display = "block";
            cheditor.modifyImage(el, modifyBlock);
        }
        break;
    case "td" :
        modifyBlock.style.display = "block";
        cheditor.modifyCell(el, modifyBlock);
        break;
    default :
        modifyBlock.style.display = "none";
        modifyBlock.innerHTML = '';
    }

    if (statusBar) {
        var found = false;
        statusBar.innerHTML = '&lt;HTML&gt; &lt;BODY&gt; ';

        for (var i = ancestors.length; --i >= 0;) {
            el = ancestors[i];
            if (!el || el.tagName.toUpperCase() == 'HTML' || el.tagName.toUpperCase() == 'BODY')
                continue;
            var tag = el.tagName.toUpperCase();
            var a = document.createElement("a");
            a.href = "#";
            a.el = el;
            a.style.color = 'blue';
            a.style.fontSize = '8pt';
            a.style.fontFamily = 'verdana';
            a.title = el.style.cssText;
            a.onmouseover = function () { this.style.textDecoration = 'none'; }
            a.onmouseout = function () { this.style.textDecoration = 'underline'; }
            a.onclick = function () {
                this.blur();
                cheditor.tagSelector(oEditor,this.el);
                document.getElementById("removeSelected").style.display = '';
                return false;
            };

            a.appendChild(document.createTextNode(tag));
            statusBar.appendChild(document.createTextNode('<'));
            statusBar.appendChild(a);
            statusBar.appendChild(document.createTextNode('> '));
            found = true;
        }

        if (found) {
            var a = document.createElement("a");
            a.href = "#";
            a.style.color = 'red';
            a.id = "removeSelected";
            a.style.display = "none";
            a.style.fontSize = '8pt';
            a.style.fontFamily = 'verdana';
            a.onclick = function () {
                this.blur();
                oEditor.document.execCommand("RemoveFormat", false, false);
                oEditor.focus();
                cheditor.setEditorEvent(oname);
                return false;
            };

            a.appendChild(document.createTextNode('REMOVE'));
            statusBar.style.width = document.getElementById("statusBlock"+oname).scrollWidth - 22 + 'px';
            var span = document.createElement('span');
            span.style.marginTop = '2px';
            span.appendChild(a);
            statusBar.appendChild(span);
        }
    }
};

cheditor.tagSelector = function (oEditor, node) {
    var range = null;
    oEditor.focus();

    if (GB.MSIE) {
        range = oEditor.document.body.createTextRange();
        if (range) {
            range.moveToElementText(node);
            range.select();
        }
    }
    else {
        var selection = oEditor.getSelection();
        if (typeof selection != "undefined") {
            try {
                range = selection.getRangeAt(0);
            }
            catch(e) { range = oEditor.document.createRange(); }
        }
        else
            range = oEditor.document.createRange();

        range.selectNodeContents(node);
        selection.removeAllRanges();
        selection.addRange(range);
    }
};

