function EnhancedTextArea(id, tab) {
    var el = document.getElementById(id);
    var tabText = tab ? tab : "    ";
    el.onkeydown = function(e) {
        if (e.keyCode == 9) {
            var ta = el;
            var val = ta.value;
            var ss = ta.selectionStart;
            var nv = val.substring(0,ss) + tabText + val.substring(ss);
            ta.value = nv;
            ta.selectionStart = ss + 4;
            ta.selectionEnd = ss + 4;
            e.preventDefault();
        }
        if (e.keyCode == 13) {
            var ta = el;
            var val = ta.value;
            var ss = ta.selectionStart;
            var bl = val.lastIndexOf("\n",ss-1);
            var line = val.substring(bl,ss);
            var lm = line.match(/^\s+/);
            var ns = lm ? lm[0].length-1 : 0;
            var nv = val.substring(0,ss) + "\n";
            for (var i=0; i<ns; i++) {
                nv += " ";
            }
            ta.value = nv+val.substring(ss);
            ta.selectionStart = ss + ns + 1;
            ta.selectionEnd = ss + ns + 1;
            e.preventDefault();
        }
    };

}

