Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//see [[User:Alex Smotrov/insertTags()]]

function insertTags(tagOpen, tagClose, sampleText) {
 var txtarea = document.editform.wpTextbox1;
 var selText, isSample = false;

 if (document.selection  && document.selection.createRange) { // IE/Opera

   //save window scroll position
   var winScroll = document.documentElement.scrollTop;
   //get current selection  
   txtarea.focus();
   var range = document.selection.createRange();
   selText = range.text;
   //insert tags
   checkSelectedText();
   range.text = tagOpen + selText + tagClose;
   //mark sample text as selected
   if (isSample && range.moveStart){
     if (window.opera) tagClose = tagClose.replace(/\n/g,'');
     range.moveStart('character', - tagClose.length - selText.length); 
     range.moveEnd('character', - tagClose.length); 
   }
   range.select();   
   //restore window scroll position
   document.documentElement.scrollTop = winScroll

  } else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla

   //save textarea scroll position
   var textScroll = txtarea.scrollTop;
   //get current selection
   txtarea.focus();
   var startPos = txtarea.selectionStart;
   var endPos = txtarea.selectionEnd;
   selText = txtarea.value.substring(startPos, endPos);
   //insert tags
   checkSelectedText();
   txtarea.value = txtarea.value.substring(0, startPos)
    + tagOpen + selText + tagClose
    + txtarea.value.substring(endPos, txtarea.value.length);
   //set new selection
   if (isSample) {
    txtarea.selectionStart = startPos + tagOpen.length;
    txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
   } else {
    txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length;
    txtarea.selectionEnd = txtarea.selectionStart;
   }
   //restore textarea scroll position
   txtarea.scrollTop = textScroll;
 } 
 
 function checkSelectedText(){
   if (!selText) {
     selText = sampleText;
     isSample = true;
   } else if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
      selText = selText.substring(0, selText.length - 1);
      tagClose += ' '
   } 
 }

}