Element.implement({tidy:function(){this.set("value",this.get("value").tidy())},getTextInRange:function(a,c){return this.get("value").substring(a,c)},getSelectedText:function(){if(Browser.Engine.trident)return document.selection.createRange().text;return this.get("value").substring(this.getSelectionStart(),this.getSelectionEnd())},getIERanges:function(){this.focus();var a=document.selection.createRange(),c=this.createTextRange(),b=c.duplicate();c.moveToBookmark(a.getBookmark());b.setEndPoint("EndToStart",
c);return{start:b.text.length,end:b.text.length+a.text.length,length:a.text.length,text:a.text}},getSelectionStart:function(){if(Browser.Engine.trident)return this.getIERanges().start;return this.selectionStart},getSelectionEnd:function(){if(Browser.Engine.trident)return this.getIERanges().end;return this.selectionEnd},getSelectedRange:function(){return{start:this.getSelectionStart(),end:this.getSelectionEnd()}},setCaretPosition:function(a){if(a=="end")a=this.get("value").length;this.selectRange(a,
a);return this},getCaretPosition:function(){return this.getSelectedRange().start},selectRange:function(a,c){this.focus();if(Browser.Engine.trident){var b=this.createTextRange();b.collapse(true);b.moveStart("character",a);b.moveEnd("character",c-a);b.select();return this}this.setSelectionRange(a,c);return this},insertAtCursor:function(a,c){var b=this.getSelectionStart(),d=this.getSelectionEnd();this.set("value",this.get("value").substring(0,b)+a+this.get("value").substring(d,this.get("value").length));
$pick(c,true)?this.selectRange(b,b+a.length):this.setCaretPosition(b+a.length);return this},insertAroundCursor:function(a,c){a=$extend({before:"",defaultMiddle:"SOMETHING HERE",after:""},a);value=this.getSelectedText()||a.defaultMiddle;var b=this.getSelectionStart(),d=this.getSelectionEnd();if(b==d){var e=this.get("value");this.set("value",e.substring(0,b)+a.before+value+a.after+e.substring(d,e.length));this.selectRange(b+a.before.length,d+a.before.length+value.length)}else{e=this.get("value").substring(b,
d);this.set("value",this.get("value").substring(0,b)+a.before+e+a.after+this.get("value").substring(d,this.get("value").length));a=b+a.before.length;$pick(c,true)?this.selectRange(a,a+e.length):this.setCaretPosition(a+e.length)}return this}});

