salve, ho un problemino con il replace in JS.

questo è il codice del JS:

<script language="JavaScript" type="text/JavaScript">
<!--
function convHTML(testo) {
testo = testo.replace('[+clrTxt]', '<font color="');
testo = testo.replace('[-clrTxt]', '">');
testo = testo.replace('[+b]', '');
testo = testo.replace('[-b]', '
');
testo = testo.replace('[+c]', '');
testo = testo.replace('[-c]', '
');
testo = testo.replace('[+u]', '<u>');
testo = testo.replace('[-u]', '</u>');
// testo = testo.replace('<', '&lt;');
// testo = testo.replace('>', '&gt;');
document.getElementById('preview').innerHTML = testo;
}
//-->
</script>

mi fa il replace solo una volta, in pratica se nella tringa compare la seguente frase:
"[+b]testo1[-b] normalText [+b]testo2[-b]"

quando faccio l'innerHTML mi da il grassetto al primo testo, mi chiude il tag, ma nel sencodo caso nn mi fa il replace con i tag, ma visualizza il testo così comè, è cioè:

"testo1 normalText [+b]testo2[-b]"

come risolvere????????????

La funcione la richiamo così:
<input type="text" name="mess" size="70" class="inputText" id="mess" onKeyPress="convHTML(this.value);" onKeyDown="convHTML(this.value);" onKeyUp="convHTML(this.value);" onChange="convHTML(this.value);">

mentre il layer del'inneHTML è questo:

<div id="preview"></div>


per favore è urente