window.addEvent('domready', function() {
 
    $$('textarea').addEvent('keypress', function(e){
 
        /* Baserat på http://bitprophet.org/code/javascript_tab.html, men lite smått omskrivet för mootools */
 
        var tab = "    ";
        var ss = this.selectionStart;
        var se = this.selectionEnd;
        
        if (e.key == "tab") {
            e.stop();
 
            if (ss != se && this.value.slice(ss,se).indexOf("\n") != -1) {
                var pre = this.value.slice(0,ss);
                var sel = this.value.slice(ss,se).replace(/\n/g,"\n"+tab);
                var post = this.value.slice(se,this.value.length);
                this.value = pre.concat(tab).concat(sel).concat(post);
                
                this.selectionStart = ss + tab.length;
                this.selectionEnd = se + tab.length;
            } else {
                this.value = this.value.slice(0,ss).concat(tab).concat(this.value.slice(ss,this.value.length));
                if (ss == se) {
                    this.selectionStart = this.selectionEnd = ss + tab.length;
                }
                else {
                    this.selectionStart = ss + tab.length;
                    this.selectionEnd = se + tab.length;
                }
            }
 
        } else if (e.key=="backspace" && this.value.slice(ss - tab.length,ss) == tab) {
            e.stop();
            this.value = this.value.slice(0,ss - tab.length).concat(this.value.slice(ss,this.value.length));
            this.selectionStart = this.selectionEnd = ss - tab.length;
        } else if (e.key=="delete" && this.value.slice(se,se + tab.length) == tab) {
            e.stop();
            this.value = this.value.slice(0,ss).concat(this.value.slice(ss + tab.length,this.value.length));
            this.selectionStart = this.selectionEnd = ss;
        } else if (e.key == "left" && this.value.slice(ss - tab.length,ss) == tab) {
            e.stop();
            this.selectionStart = this.selectionEnd = ss - tab.length;
        } else if (e.key == "right" && this.value.slice(ss,ss + tab.length) == tab) {
            e.stop();
            this.selectionStart = this.selectionEnd = ss + tab.length;
        }        
 
    });
 
});

