    var is_gecko = /gecko/i.test(navigator.userAgent);
    var is_ie    = /MSIE/.test(navigator.userAgent);
    var tagList = {
                        'b': 0,
                        'u': 0,
                        'i': 0
                    };

    function insertTag(tag, itm) {

        if (tagList[tag] != undefined) {
            if (!tagList[tag]) {
                f = doInsert('['+tag+']', '[/'+tag+']', 0);
                if (!f) {
                    itm.innerHTML = '[/'+tag+']';
                    tagList[tag] = !tagList[tag];
                }
            } else {
                doInsert('[/'+tag+']', '', 1) ;
                itm.innerHTML = '['+tag+']';
                tagList[tag] = !tagList[tag];
            }
        } else {
            doInsert(tag, '', 1)
        }
    }

    function initEdit(item) {
        obj_ta = document.getElementById(item)
    }

    function doInsert(openTag, clsTag, isSingle)
    {
       var isClose = false;
       //IE
       if ( is_ie ) {
          if (obj_ta.isTextEdit) {
             obj_ta.focus();
             var sel = document.selection;
             var rng = sel.createRange();
             rng.colapse;
             if((sel.type == "Text" || sel.type == "None") && rng != null) {
                if(clsTag != "" && rng.text.length > 0) {
                   openTag += rng.text + clsTag;
                   isClose = true;
                } else if(isSingle)
                   isClose = true;

                rng.text = openTag;
             }
          } else {
             if(isSingle) {
                isClose = true;
             }

             obj_ta.value += openTag;
          }
       }
       // not IE
       else if ( obj_ta.selectionEnd ) {
          var ss = obj_ta.selectionStart;
          var st = obj_ta.scrollTop;
          var es = obj_ta.selectionEnd;

          if (es <= 2) {
             es = obj_ta.textLength;
          }

          var start  = (obj_ta.value).substring(0, ss);
          var middle = (obj_ta.value).substring(ss, es);
          var end    = (obj_ta.value).substring(es, obj_ta.textLength);

          //-----------------------------------
          // text range?
          //-----------------------------------

          if (obj_ta.selectionEnd - obj_ta.selectionStart > 0) {
             middle = openTag + middle + clsTag;
             isClose = true;
          } else {
             middle = openTag + middle;

             if (isSingle) {
                isClose = true;
             }
          }

          obj_ta.value = start + middle + end;

          var cpos = ss + (middle.length);

          obj_ta.selectionStart = cpos;
          obj_ta.selectionEnd   = cpos;
          obj_ta.scrollTop      = st;


       }
       //CRAPPY
       else
       {
          if (isSingle) {
             isClose = true;
          }

          obj_ta.value += openTag;
       }

       obj_ta.focus();

       return isClose;
    }
