<script type="text/javascript">
    /**
     * adds a tag in at the beginning and at the end of a selected text in the specific text area
     * @param string elementID
     * @param string openTag
     * @param string closeTag
     */
    function MCI_Footnotes_wrapText(elementID, openTag, closeTag) {
        var textArea = jQuery('#' + elementID);
        var len = textArea.val().length;
        var start = textArea[0].selectionStart;
        var end = textArea[0].selectionEnd;
        var selectedText = textArea.val().substring(start, end);
        var replacement = openTag + selectedText + closeTag;
        textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
    }
    /**
     * adds a button to the Classic Editor text mode
     *
     *
     * @since 2.5.4d1  try to fix uncaught reference error of “QTags is not defined”
     *
     * @reporter @dpartridge
     * @link https://wordpress.org/support/topic/qtags-addbutton/
     * 
     * 
     * @link 2.5.4  correct label to singular
     */
    if ( QTags ) {
        QTags.addButton( 'MCI_Footnotes_QuickTag_button', 'footnote', MCI_Footnotes_text_editor_callback );
    }

    /**
     * callback function when the button is clicked
     * executes a ajax call to get the start and end tag for the footnotes and
     * adds them in before and after the selected text
     */
    function MCI_Footnotes_text_editor_callback() {
        jQuery.ajax({
            type: 'POST',
            url: '/wp-admin/admin-ajax.php',
            data: {
                action: 'footnotes_getTags'
            },
            success: function(data, textStatus, XMLHttpRequest){
                var l_arr_Tags = JSON.parse(data);
                MCI_Footnotes_wrapText("content", l_arr_Tags['start'], l_arr_Tags['end']);
            },
            error: function(MLHttpRequest, textStatus, errorThrown){
            }
        });
    }
</script>