function bbcode (str) {
str = str.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;");
var
tab = [
["\\[url\\](http://[^ ]+)\\[/url\\]", "<a href=\"$1\">$1</a>"],
["\\[url=([^\s<>]+)\](.+)\[\/url\]", "<a href=\"$1\">$2</a>"],
["\\[b\\](.+)\\[/b\\]", "<strong>$1</strong>"],
["\\[i\\](.+)\\[/i\\]", "<em>$1</em>"],
["\\[u\\](.+)\\[/u\\]", "<u>$1</u>"],
["\\[left\\](.+)\\[/left\\]", "<div align=\"left\">$1</div>"],
["\\[center\\](.+)\\[/center\\]", "<div align=\"center\">$1</div>"],
["\\[right\\](.+)\\[/right\\]", "<div align=\"right\">$1</div>"],
["\\[color=(#[a-fA-F0-9]{6})\\](.+)\\[/color\\]", "<font color=\"$1\">$2</font>"],
["\\[size=([+-]?[0-9])\\](.+)\\[/size\\]", "<font size=\"$1\">$2</font>"],
["\\[img\\](.+)\\[/img\\]", "<img src=\"$1\"/>"],
[":\\(", "<img src='./bbcode/angry.gif'/> "],
[":D", "<img src='./bbcode/bigsmile.gif'/> "],
[":-o", "<img src='./bbcode/blink.gif'/> "],
["\\*-\\)", "<img src='./bbcode/dry.gif'/> "],
["@-\\)", "<img src='./bbcode/happy.gif'/> "],
["@\\)", "<img src='./bbcode/happy2.gif'/> "],
[":o\\)", "<img src='./bbcode/huh.gif'/> "],
["\\(H\\)", "<img src='./bbcode/lunettes.gif'/> "],
[":-#", "<img src='./bbcode/mellow.gif'/> "],
["8-\\)", "<img src='./bbcode/roll.gif'/> "],
[":\\)", "<img src='./bbcode/smile.gif'/> "],
[":p", "<img src='./bbcode/tongue.gif'/> "],
[";-\\)", "<img src='./bbcode/wink.gif'/> "],
["\n", "<br />"]
]; // fin
for
(var i=0; i < tab.length; i++) {
str = str.replace(new RegExp(tab[i][0], "g"), tab[i][1]);
}
return str;
}
function keyup (champ, id) {

var
str = bbcode(champ.value);
document.getElementById(id).innerHTML = str;
}

// -->
function addText(instext) {
    var mess = document.commentaire.message;
        //IE support
        if (document.selection) {
            mess.focus();
            sel = document.selection.createRange();
            sel.text = instext;
            document.commentaire.focus();
        }
        //MOZILLA/NETSCAPE support
        else if (mess.selectionStart || mess.selectionStart == "0") {
            var startPos = mess.selectionStart;
            var endPos = mess.selectionEnd;
            var chaine = mess.value;

            mess.value = chaine.substring(0, startPos) + instext + chaine.substring(endPos, chaine.length);

            mess.selectionStart = startPos + instext.length;
            mess.selectionEnd = endPos + instext.length;
            mess.focus();
        } else {
            mess.value += instext;
            mess.focus();
        }
    }

var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
var regexp = new RegExp("[\r]","gi");

function storeCaret(selec)
{
	if (isMozilla) 
	{
	// Si on est sur Mozilla

		oField = document.forms['commentaire'].elements['message'];

		objectValue = oField.value;

		deb = oField.selectionStart;
		fin = oField.selectionEnd;

		objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
		objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
		objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
			
		oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
		oField.selectionStart = strlen(objectValueDeb);
		oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]");
		oField.focus();
		oField.setSelectionRange(
			objectValueDeb.length + selec.length + 2,
			objectValueDeb.length + selec.length + 2);
	}
	else
	{
	// Si on est sur IE
		
		oField = document.forms['commentaire'].elements['message'];
		var str = document.selection.createRange().text;

		if (str.length>0)
		{
		// Si on a selectionné du texte
			var sel = document.selection.createRange();
			sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
			sel.collapse();
			sel.select();
		}
		else
		{
			oField.focus(oField.caretPos);
		//	alert(oField.caretPos+"\n"+oField.value.length+"\n")
			oField.focus(oField.value.length);
			oField.caretPos = document.selection.createRange().duplicate();
			
			var bidon = "%~%";
			var orig = oField.value;
			oField.caretPos.text = bidon;
			var i = oField.value.search(bidon);
			oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
			var r = 0;
			for(n = 0; n < i; n++)
			{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
			pos = i + 2 + selec.length - r;
			//placer(document.forms['news'].elements['texte'], pos);
			var r = oField.createTextRange();
			r.moveStart('character', pos);
			r.collapse();
			r.select();

		}
	}
}
function storeCaret2(selec)
{
	if (isMozilla) 
	{
	// Si on est sur Mozilla

		oField = document.forms['commentaire'].elements['message'];

		objectValue = oField.value;

		deb = oField.selectionStart;
		fin = oField.selectionEnd;

		objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
		objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
		objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
			
		oField.value = objectValueDeb + "[color=" + selec + "]" + objectSelected + "[/color]" + objectValueFin;
		oField.selectionStart = strlen(objectValueDeb);
		oField.selectionEnd = strlen(objectValueDeb + "[color=" + selec + "]" + objectSelected + "[/" + selec + "]");
		oField.focus();
		oField.setSelectionRange(
			objectValueDeb.length + selec.length + 2,
			objectValueDeb.length + selec.length + 2);
	}
	else
	{
	// Si on est sur IE
		
		oField = document.forms['commentaire'].elements['message'];
		var str = document.selection.createRange().text;

		if (str.length>0)
		{
		// Si on a selectionné du texte
			var sel = document.selection.createRange();
			sel.text = "[color=" + selec + "]" + str + "[/color]";
			sel.collapse();
			sel.select();
		}
		else
		{
			oField.focus(oField.caretPos);
		//	alert(oField.caretPos+"\n"+oField.value.length+"\n")
			oField.focus(oField.value.length);
			oField.caretPos = document.selection.createRange().duplicate();
			
			var bidon = "%~%";
			var orig = oField.value;
			oField.caretPos.text = bidon;
			var i = oField.value.search(bidon);
			oField.value = orig.substr(0,i) + "[color=" + selec + "][/color]" + orig.substr(i, oField.value.length);
			var r = 0;
			for(n = 0; n < i; n++)
			{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
			pos = i + 2 + selec.length - r;
			//placer(document.forms['news'].elements['newst'], pos);
			var r = oField.createTextRange();
			r.moveStart('character', pos);
			r.collapse();
			r.select();

		}
	}
}
function storeCaret3(selec)
{
	if (isMozilla) 
	{
	// Si on est sur Mozilla

		oField = document.forms['commentaire'].elements['message'];

		objectValue = oField.value;

		deb = oField.selectionStart;
		fin = oField.selectionEnd;

		objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
		objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
		objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );

	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
			
		oField.value = objectValueDeb + "[size=" + selec + "]" + objectSelected + "[/size]" + objectValueFin;
		oField.selectionStart = strlen(objectValueDeb);
		oField.selectionEnd = strlen(objectValueDeb + "[size=" + selec + "]" + objectSelected + "[/size]");
		oField.focus();
		oField.setSelectionRange(
			objectValueDeb.length + selec.length + 2,
			objectValueDeb.length + selec.length + 2);
	}
	else
	{
	// Si on est sur IE
		
		oField = document.forms['commentaire'].elements['message'];
		var str = document.selection.createRange().text;

		if (str.length>0)
		{
		// Si on a selectionné du texte
			var sel = document.selection.createRange();
			sel.text = "[size=" + selec + "]" + str + "[/size]";
			sel.collapse();
			sel.select();
		}
		else
		{
			oField.focus(oField.caretPos);
		//	alert(oField.caretPos+"\n"+oField.value.length+"\n")
			oField.focus(oField.value.length);
			oField.caretPos = document.selection.createRange().duplicate();
			
			var bidon = "%~%";
			var orig = oField.value;
			oField.caretPos.text = bidon;
			var i = oField.value.search(bidon);
			oField.value = orig.substr(0,i) + "[size=" + selec + "][/size]" + orig.substr(i, oField.value.length);
			var r = 0;
			for(n = 0; n < i; n++)
			{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
			pos = i + 2 + selec.length - r;
			//placer(document.forms['news'].elements['newst'], pos);
			var r = oField.createTextRange();
			r.moveStart('character', pos);
			r.collapse();
			r.select();

		}
	}
}