TextareaTools=new Class({Implements:Options,options:{autoGrow:true,freeLines:1,maxChars:false,charCounter:false,emoticons:false,bbcode:false},initialize:function(b,a){this.setOptions(a);this.element=b;if(this.options.autoGrow){this.element.setStyles({overflow:"hidden","overflow-x":"auto"});this.iRows=this.element.get("rows");this.heightPerRow=this.element.getStyle("height").toInt()/this.element.get("rows");this.growFx=new Fx.Tween(this.element,{property:"height"})}if(this.options.maxChars){this.acceptedText=this.element.get("value");this.checkChars()}this.element.addEvents({keyup:this.run.bind(this),change:this.run.bind(this),blur:this.run.bind(this)});if(this.options.emoticons){this.options.emoticons.each(function(c){c.addEvent("click",function(d){this.addEmoticon(c.get("rel"));d.stop()}.bind(this))}.bind(this))}if(this.options.bbcode){this.options.bbcode.each(function(c){if(c.get("tag")=="select"){c.addEvent("change",function(d){this.addBBCode(c.get("id"),c.get("title"),"","",c.getSelected().get("value"));c.selectedIndex=0}.bind(this))}else{c.addEvent("click",function(d){var e=c.get("rel").split("||");this.addBBCode(e[0],e[1],e[2],e[3],e[4]);d.stop()}.bind(this))}}.bind(this))}},run:function(){if(this.options.autoGrow){this.resize()}if(this.options.maxChars){this.checkChars()}},resize:function(){var b=this.element.get("value").split("\n");var d=b.length+this.options.freeLines-1;var e=this.element.getProperty("cols");for(var c=0;c<b.length;c++){var a=b[c];if(a.length>=e){d+=Math.floor(a.length/e)}}d=Math.max(this.iRows,d);currentRows=Math.round(this.element.getStyle("height").toInt()/this.heightPerRow);if(d!=currentRows){this.growFx.start(Math.round(d*this.heightPerRow))}},checkChars:function(){if(this.element.get("value").length>this.options.maxChars){this.element.set("value",this.acceptedText)}else{this.acceptedText=this.element.get("value")}if(this.options.charCounter){$(this.options.charCounter).set("text",this.options.maxChars-this.element.get("value").length)}},addEmoticon:function(e){var c=this.element;c.focus();if(typeof document.selection!="undefined"){var b=document.selection.createRange();var d=b.text;if(d.length==0){e=e+" "}b.text=e;b=document.selection.createRange();if(d.length==0){b.move("character",0)}else{b.moveStart("character",e.length)}b.select()}else{if(typeof c.selectionStart!="undefined"){var g=c.selectionStart;var a=c.selectionEnd;var d=c.value.substring(g,a);if(d.length==0){e=e+" "}c.value=c.value.substr(0,g)+e+c.value.substr(a);var f;if(d.length==0){f=g+e.length}else{f=g+e.length}c.selectionStart=f;c.selectionEnd=f}}this.run()},addBBCode:function(i,l,d,j,b){var h=this.element;h.focus();if(typeof document.selection!="undefined"){var f=document.selection.createRange();var k=f.text;var a=f.text;var m="";if(a.length==0){k=prompt(l,d)}if(j!=""){m="="+prompt(j,b)}if(j==""&&b!=""){m="="+b}f.text="["+i+m+"]"+k+"[/"+i+"]";f=document.selection.createRange();if(a.length==0){f.move("character",0)}else{f.moveStart("character",("["+i+m+"]"+k+"[/"+i+"]").length)}f.select()}else{if(typeof h.selectionStart!="undefined"){var c=h.selectionStart;var e=h.selectionEnd;var k=h.value.substring(c,e);var a=h.value.substring(c,e);var m="";if(a.length==0){k=prompt(l,d)}if(j!=""){m="="+prompt(j,b)}if(j==""&&b!=""){m="="+b}h.value=h.value.substr(0,c)+"["+i+m+"]"+k+"[/"+i+"]"+h.value.substr(e);var g;if(a.length==0){g=c+("["+i+m+"]"+k+"[/"+i+"]").length}else{g=c+("["+i+m+"]"+k+"[/"+i+"]").length}h.selectionStart=g;h.selectionEnd=g}}this.run()}});