    // Load Quicktags JavaScript
    var edButtons = new Array();
    var edOpenTags = new Array();

    function edButton(id, display, tagStart, tagEnd, access, open) {
        this.id = id;               // used to name the toolbar button
        this.display = display;     // label on button
        this.tagStart = tagStart;   // open tag
        this.tagEnd = tagEnd;       // close tag
        this.access = access;       // access key
        this.open = open;           // set to -1 if tag does not need to be closed
    }

    // Start code
    function edShowButton(button, i) {
        if (button.id == 'ed_img') {
            document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
        }
        else if (button.id == 'ed_link') {
            document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
        }
        else {
            document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '"  />');
        }
    }

    function edAddTag(button) {
        if (edButtons[button].tagEnd != '') {
            edOpenTags[edOpenTags.length] = button;
            document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
        }
    }

    function edRemoveTag(button) {
        for (i = 0; i < edOpenTags.length; i++) {
            if (edOpenTags[i] == button) {
                edOpenTags.splice(i, 1);
                document.getElementById(edButtons[button].id).value = document.getElementById(edButtons[button].id).value.replace('/', '');
            }
        }
    }

    function edCheckOpenTags(button) {
        var tag = 0;
        for (i = 0; i < edOpenTags.length; i++) {
            if (edOpenTags[i] == button) {
                tag++;
            }
        }
        if (tag > 0) {
            return true; // tag found
        }
        else {
            return false; // tag not found
        }
    }

    function edCloseAllTags() {
        var count = edOpenTags.length;
        for (o = 0; o < count; o++) {
            edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
        }
    }

    function edToolbar() {
        document.write('<span id="ed_comment_toolbar">');
        for (i = 0; i < edButtons.length; i++) {
            edShowButton(edButtons[i], i);
        }
        document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="Close all open tags" value="闭合标签" />');
        document.write('</span>');
    }

    // insertion code

    function edInsertTag(myField, i) {
        //IE support
        if (document.selection) {
            myField.focus();
            sel = document.selection.createRange();
            if (sel.text.length > 0) {
                sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
            }
            else {
                if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
                    sel.text = edButtons[i].tagStart;
                    edAddTag(i);
                }
                else {
                    sel.text = edButtons[i].tagEnd;
                    edRemoveTag(i);
                }
            }
            myField.focus();
        }
        //MOZILLA/NETSCAPE support
        else if (myField.selectionStart || myField.selectionStart == '0') {
            var startPos = myField.selectionStart;
            var endPos = myField.selectionEnd;
            var cursorPos = endPos;
            var scrollTop = myField.scrollTop;

            if (startPos != endPos) {
                myField.value = myField.value.substring(0, startPos)
                              + edButtons[i].tagStart
                              + myField.value.substring(startPos, endPos)
                              + edButtons[i].tagEnd
                              + myField.value.substring(endPos, myField.value.length);
                cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
            }
            else {
                if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
                    myField.value = myField.value.substring(0, startPos)
                                  + edButtons[i].tagStart
                                  + myField.value.substring(endPos, myField.value.length);
                    edAddTag(i);
                    cursorPos = startPos + edButtons[i].tagStart.length;
                }
                else {
                    myField.value = myField.value.substring(0, startPos)
                                  + edButtons[i].tagEnd
                                  + myField.value.substring(endPos, myField.value.length);
                    edRemoveTag(i);
                    cursorPos = startPos + edButtons[i].tagEnd.length;
                }
            }
            myField.focus();
            myField.selectionStart = cursorPos;
            myField.selectionEnd = cursorPos;
            myField.scrollTop = scrollTop;
        }
        else {
            if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
                myField.value += edButtons[i].tagStart;
                edAddTag(i);
            }
            else {
                myField.value += edButtons[i].tagEnd;
                edRemoveTag(i);
            }
            myField.focus();
        }
    }

    function edInsertContent(myField, myValue) {
        //IE support
        if (document.selection) {
            myField.focus();
            sel = document.selection.createRange();
            sel.text = myValue;
            myField.focus();
        }
        //MOZILLA/NETSCAPE support
        else if (myField.selectionStart || myField.selectionStart == '0') {
            var startPos = myField.selectionStart;
            var endPos = myField.selectionEnd;
            myField.value = myField.value.substring(0, startPos)
                          + myValue
                          + myField.value.substring(endPos, myField.value.length);
            myField.focus();
            myField.selectionStart = startPos + myValue.length;
            myField.selectionEnd = startPos + myValue.length;
        } else {
            myField.value += myValue;
            myField.focus();
        }
    }

    function edInsertLink(myField, i, defaultValue) {
        if (!defaultValue) {
            defaultValue = 'http://';
        }
        if (!edCheckOpenTags(i)) {
            var URL = prompt('Enter the URL' ,defaultValue);
            if (URL) {
                edButtons[i].tagStart = '<a href="' + URL + '">';
                edInsertTag(myField, i);
            }
        }
        else {
            edInsertTag(myField, i);
        }
    }

    function edInsertLink(myField, i, defaultValue) {
        if (!defaultValue) {
            defaultValue = 'http://';
        }
        if (!edCheckOpenTags(i)) {
            var URL = prompt('Enter the URL' ,defaultValue);
            if (URL) {
                edButtons[i].tagStart = '<a href="' + URL + '">';
                edInsertTag(myField, i);
            }
        }
        else {
            edInsertTag(myField, i);
        }
    }

    function edInsertImage(myField) {
        var myValue = prompt('Enter the URL of the image', 'http://');
        if (myValue) {
            myValue = '<img src="'
                    + myValue
                    + '" alt="' + prompt('Enter a description of the image', '')
                    + '" />';
            edInsertContent(myField, myValue);
        }
    }
