Segunda parte
   Código PHP:
     var s1 = (txtarea.value).substring(0,selEmpz);
 //var s2 = (txtarea.value).substring(selEmpz, selFin);
 var s3 = (txtarea.value).substring(selFin, selLargo);
 var abre = "[LIST=1]\n";
 var cierra = "[/LIST=]";
 txtarea.value =  s1 +  abre + cierra + s3;
 for (i=0; i<=opcion.length; i++) {
 opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
 if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
 var Cursor =  s1.length + abre.length + suma + cierra.length;
 return(Cursor); 
 }
 txtarea.value =  s1 +  abre;
 for (j=0; j<=i; j++) {
 txtarea.value +=  "[*]" + opcion[j] + "\n"; 
 }
 txtarea.value += cierra + s3;
 suma += (opcion[i].length+4);
 }
}
} 
 
//Lista Desordenada
function listades () {
var txtarea = document.getElementById("firma");
var opcion= new Array();
var i,j
var suma = 0
if ((clientVer >= 4) && is_ie && is_win) {
var theSelection = document.selection.createRange().text;
 if (document.selection) {
  if (!theSelection) {
  txtarea.focus();
  var Sel = document.selection.createRange ();
  var PosSel1 = Sel.moveStart ('character', -txtarea.value.length); 
  var SelLargo = txtarea.value.length;
  // La linea siguiente es necesaria por que -- y -- da un valor negativo
  var ValorPositivo = PosSel1 + SelLargo + 1
  var SelEmpz = SelLargo - ValorPositivo
  var PosSel2 = Sel.moveStart ('character', -txtarea.value.length); 
  var SelFin = SelLargo - PosSel2
  var s1 = (txtarea.value).substring(0,SelEmpz);
  var s2 = (txtarea.value).substring(SelEmpz,SelFin);
  //var s3 = (txtarea.value).substring(selFin, selLargo);
  var abre = "[LIST]\n";
  var cierra = "[/LIST]";
  txtarea.value =  s1 +  abre + cierra + s2;
  for (i=0; i<=opcion.length; i++) {
  opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
  if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
  var Cursor =  s1.length + abre.length + suma + cierra.length;
  return(Cursor); 
  }
  txtarea.value =  s1 +  abre;
  for (j=0; j<=i; j++) {
  txtarea.value +=  "[*]" + opcion[j] + "\n"; 
  }
  txtarea.value += cierra + s2;
  suma += (opcion[i].length+4);
  }
 }
 
  if (theSelection) {
  txtarea.focus();
  var Sel = document.selection.createRange ();
  var PosSel1 = Sel.moveStart ('character', -txtarea.value.length); 
  var SelLargo = txtarea.value.length;
  // La linea siguiente es necesaria por que -- PosSel1 -- da un valor negativo
  var ValorPositivo = PosSel1 + SelLargo + 1
  var SelEmpz = SelLargo - ValorPositivo
  var s1 = (txtarea.value).substring(0,SelEmpz);
  var selFin = s1.length + theSelection.length
  var s2 = (txtarea.value).substring(selFin, selLargo);
  var abre = "[LIST]\n";
  var cierra = "[/LIST]";
  txtarea.value =  s1 + abre;
  opcion = theSelection.split(" ");
  for (j=0; j<opcion.length; j++) {
  txtarea.value +=  "[*]" + opcion[j] + "\n"; 
  suma += (opcion[j].length+4);
  }
  txtarea.value += cierra + s2;
  var Cursor =  s1.length + abre.length + suma + cierra.length;
  return(Cursor); 
  }
 }
}
else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
{
 var selLargo = txtarea.textLength;
 var selEmpz = txtarea.selectionStart;
 var selFin = txtarea.selectionEnd;
 var s1 = (txtarea.value).substring(0,selEmpz);
 var s2 = (txtarea.value).substring(selEmpz, selFin);
 var s3 = (txtarea.value).substring(selFin, selLargo);
 var abre = "[LIST]\n";
 var cierra = "[/LIST]";
 opcion = s2.split(" ");
 txtarea.value =  s1 +  abre;
 for (j=0; j<opcion.length; j++) {
 txtarea.value +=  "[*]" + opcion[j] + "\n"; 
 suma += (opcion[j].length+4);
 }
 txtarea.value += cierra + s3;
 var Cursor =  s1.length + abre.length +  suma + cierra.length;
 return(Cursor); 
}
else
{
 var selLargo = txtarea.textLength;
 var selEmpz = txtarea.selectionStart;
 var selFin = txtarea.selectionEnd;
 var s1 = (txtarea.value).substring(0,selEmpz);
 //var s2 = (txtarea.value).substring(selEmpz, selFin);
 var s3 = (txtarea.value).substring(selFin, selLargo);
 var abre = "[LIST]\n";
 var cierra = "[/LIST]";
 txtarea.value =  s1 +  abre + cierra + s3;
 for (i=0; i<=opcion.length; i++) {
 opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
 if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
 var Cursor =  s1.length + abre.length + suma + cierra.length;
 return(Cursor); 
 }
 txtarea.value =  s1 +  abre;
 for (j=0; j<=i; j++) {
 txtarea.value +=  "[*]" + opcion[j] + "\n"; 
 }
 txtarea.value += cierra + s3;
 suma += (opcion[i].length+4);
 }
}
}
 
function etiquetastilo (boton,tag) {
var txtarea = document.getElementById("firma");
var iniCursor = 0;
if ((clientVer >= 4) && is_ie && is_win) {
txtSeleccion = document.selection.createRange().text;
 if (document.selection) {
  if (!txtSeleccion) {
  txtarea.focus();
  var Sel = document.selection.createRange ();
  if (tag <=3) {
  document.selection.createRange().text ="[" +valor_tag[tag]+ "=" +valor_boton[boton]+ "][/"  +valor_tag[tag]+ "]";
  }
  else
  {
  document.selection.createRange().text ="[" +valor_tag[tag]+ "][/"  +valor_tag[tag]+ "]";
  }
  Sel.moveStart ('character', -txtarea.value.length);
  iniCursor = Sel.text.length; //caracteres que deja atras
  //var  sumarPos= parseInt(num_caracteresAtras[boton]);
  var Cursor = iniCursor +  3;
  return(Cursor);
  }
  txtarea.focus();
  var Sel = document.selection.createRange ();
  if (tag <=3) {
  document.selection.createRange().text = "[" +valor_tag[tag]+ "=" +valor_boton[boton]+ "]" + txtSeleccion + "[/"  +valor_tag[tag]+ "]";
  }
  else
  {
  document.selection.createRange().text = "[" +valor_tag[tag]+ "]" + txtSeleccion + "[/"  +valor_tag[tag]+ "]";
  }
  Sel.moveStart ('character', -txtarea.value.length);
  var StrSeleccion = txtSeleccion.length;
  iniCursor = Sel.text.length;
  var  sumarPos= parseInt(num_caracteres[boton]);
  var Cursor = iniCursor + StrSeleccion  +  sumarPos;
  return(Cursor);
 }
      }
 // Firefox support 
else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
 {
 var selLargo = txtarea.textLength;
 var selEmpz = txtarea.selectionStart;
 var selFin = txtarea.selectionEnd;
 var s1 = (txtarea.value).substring(0,selEmpz);
 var s2 = (txtarea.value).substring(selEmpz, selFin);
 var s3 = (txtarea.value).substring(selFin, selLargo);
 if (tag <=3) {
 txtarea.value =  s1 + "[" + valor_tag[tag] + "=" +valor_boton[boton]+ "]" +s2 + "[/" +valor_tag[tag] + "]" + s3;
 }
 else
 {
 txtarea.value =  s1 + "[" + valor_tag[tag] + "]" +s2 + "[/" +valor_tag[tag] + "]" + s3;
 }
 var iniText = s1.length;
 var textSel = s2.length;
 var sumarPos= parseInt(num_caracteres[boton]);
 var Cursor = iniText + textSel + sumarPos;
 return(Cursor); 
}
else
{
 var selLargo = txtarea.textLength;
 var selEmpz = txtarea.selectionStart;
 var selFin = txtarea.selectionEnd;
 var s1 = (txtarea.value).substring(0,selEmpz);
 var s2 = (txtarea.value).substring(selEmpz, selFin);
 var s3 = (txtarea.value).substring(selFin, selLargo);
 if (tag <=3) {
 txtarea.value =  s1 + "[" + valor_tag[tag] + "=" +valor_boton[boton]+ "][/" +valor_tag[tag] + "]"  + s2 + s3;
 }
 else
 {
 txtarea.value =  s1 + "[" + valor_tag[tag] + "][/" +valor_tag[tag] + "]"  + s2 + s3;
 }
 var Cursor = txtarea.textLength - recortar_posAtras[boton] - s2.length - s3.length;
 return(Cursor); 
 }
 almznaCursor(txtarea);
}
function almznaCursor(textEl) {
 if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}
 
function PosicionCursor(pos) {
var txtarea = document.getElementById("firma");
 //Firefox
 if (txtarea .setSelectionRange) {
  txtarea .focus();
  txtarea .setSelectionRange(pos,pos);
 }
 else if (txtarea .createTextRange) {
  var rango = txtarea .createTextRange();
  rango.collapse(true);
  rango.moveEnd('character', pos);
  rango.moveStart('character', pos);
  rango.select();
 }
}
function ImpEtiqueta(val,etta)
{
 PosicionCursor(etiquetastilo(val,etta));
}
function ImpUrl(val,etta)
{
 PosicionCursor(inserta_url(val,etta));
}
function Lista_Ord()
{
 PosicionCursor(listaord());
}
function Lista_Des()
{
 PosicionCursor(listades());
}
</script>
 
</head>
<body>
<form name="perfil">
<input type="button"  value="Times New Roman"  onClick="ImpEtiqueta(0,0);" />
<input type="button" value="Verdana" onClick="ImpEtiqueta(1,0);" />
<input type="button" value="Arial"  onClick="ImpEtiqueta(2,0);" />
<br>
<input type="button"  value="9"  onClick="ImpEtiqueta(3,1);" />
<input type="button" value="10" onClick="ImpEtiqueta(4,1);" />
<input type="button" value="11"  onClick="ImpEtiqueta(5,1);" />
<br>
<input type="button"  value="Rojo"  onClick="ImpEtiqueta(6,2);" />
<input type="button" value="Negro" onClick="ImpEtiqueta(7,2);" />
<input type="button" value="Blanco"  onClick="ImpEtiqueta(8,2);" />
<br>
<input type="button"  value="B" onclick="ImpEtiqueta(12,4);" />
<input type="button"  value="U" onclick="ImpEtiqueta(13,5);" />
<input type="button"  value="I" onclick="ImpEtiqueta(14,6);" />
<br>
<input type="button"  value="Left" onclick="ImpEtiqueta(9,3);" />
<input type="button"  value="Center" onclick="ImpEtiqueta(10,3);" />
<input type="button"  value="Right" onclick="ImpEtiqueta(11,3);" />
<br>
<input type="button"  value="URL" onclick="ImpUrl(15,7);" />
<br>
<input type="button"  value="Lordenada" onclick="Lista_Ord();" />
<br>
<input type="button"  value="Ldesordenada" onclick="Lista_Des();" />
<br><br>
 
<textarea id="firma" name="firma" rows="10" cols="80"></textarea>
</form>
</body>
</html> 
   
  Suerte