To nie jest błąd w moim kodzie tylko w twoim.
Na dowód zobacz sobie test - działa, więc na 95% ty coś źle zrobiłeś.
Poprawiony kod*<?php
<html>
<head>
<title>Tit</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
D=document,S=[],T=[],C=alert,B=unescape;
window.onload=function(){
F=D.getElementById('message');
}
function bb(tag)
{
// Male wyrazonko regularne ;)
// Pasuje do "[tag]http://znaki.znaki[/tag]"
// UWAGA linijka z wyrazeniem reg. powinna wygladac tak (parser escapeuje znaki "\"):
// reg = /^[.+?]http://.+?[/.+?]$/i;
reg = /^[.+?].+?[/w+?]$/i;
if(tag.match(reg))D.selection?(F.focus(),D.selection.createRange().text=tag):(F.selectionStart||F.selectionStart=='0')?F.value=F.value.substring(0,F.selectionStart)+tag+F.value.substring(F.selectionEnd,F.value.length):F.value+=tag;
}
function sel()
{
return D.selection?D.selection.createRange().text:F.value.substring(F.selectionEnd||0,F.selectionStart||0)
}
function klik() {
var url = (s=sel())?s:prompt("Podaj adres obrazka","http://");
if(url!=null && typeof(url)!='undefined')bb("[img]"+url+"[/img]");
};
function klik2() {
Url();
};
function Url(u,d)
{
var u=prompt("Podaj adres strony","http://");
if(u
!=null)bb
(""+(sel
()?sel
():((d
=prompt
("Treść odnośnika",""))?d
:u
))+""); }
</script>
</head>
<body>
<div><textarea rows="10" cols="50" id="message" name="message"></textarea></div>
<div><input type="button" value="Klik" id="klik" onclick="klik();return false;" /></div>
<div><input type="button" value="Klik 2" id="klik" onclick="klik2();return false;" /></div>
</body>
</html>
?>
Edit:
To było do wypowiedzi przed edycją powyżej - już chyba nieaktualne

Edit2:
Zedytowałem kod*. Dodałem tą funkcję z postu wyżej i dostosowałem wyrażenie.