Of course if the user's cursor is in the middle of the text, the "<BR>" will still get appended to the end. This script will insert a "<BR>" where the user's cursor is (IE only):
<HTML>
<HEAD>
<SCRIPT>
function storeCaret (textEl) {
if (textEl.createTextRange)
textEl.caretPos = document.selection.createRange().duplicate();
}
function insertAtCaret (textEl, text) {
if (textEl.createTextRange && textEl.caretPos) {
var caretPos = textEl.caretPos;
caretPos.text =
caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?
text + ' ' : text;
}
else
textEl.value = text;
}
function checkEnter(textEl){
storeCaret(textEl);
if(window.event.keyCode==13){
insertAtCaret(textEl,"<BR>"

;
}
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="aForm">
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft"
ONSELECT="storeCaret(this);"
ONCLICK="storeCaret(this);"
ONKEYUP="checkEnter(this)"></TEXTAREA>
</FORM>
</BODY>
</HTML>
Another option would be to search and replace all line breaks with "<BR>" when the textbox loses focus.
If you're going to display the text on your web page, I'd leave the original text alone and just search and replace the line breaks with "<BR>" at the time of display. In ASP it'd look something like <%=Replace(textVariable,vbCrLf,"<BR>"

%>
Yet another option would be to use <span contenteditable="true"></span> and get the innerHTML of the span when they're done.
Adam