a) Ni idea, y me gustaria mucho saber como se hace
b) Segun para que navegador se hace distinto:
- para firefox: 
Código:
  function aldatuChar(gehi)
  {
   var Start=document.formu.komen.selectionStart;
   var End=document.formu.komen.selectionEnd;
   var Comienzo=document.formu.komen.value.substr(0,Start);
   var Elegido=document.formu.komen.value.substr(Start,End);
   var Final=document.formu.komen.value.substr(End,document.formu.komen.value.length);
    document.formu.komen.value=Comienzo + "[" + gehi + "]" + Elegido + "[/" + gehi + "]" + Final;
   }
  este es el codigo solo para firefox (para mozilla no se) para IE es diferente pero creo que 
caricatos tiene en su web algo parecido ;) 
Edito: perdon ;)