var GrowingTextarea=Class.create({deferredSetup:null,opts:{direction:"down",usePlaceholder:false},initialize:function(b,a){a=a||{};this.opts=Object.extend(Object.clone(this.opts),a);this.targetId=b;this.deferredSetup=this.setup.bindAsEventListener(this);Event.observe(window,"load",this.deferredSetup)},setup:function(){this.textarea=$(this.targetId);if(this.textarea!=null){Event.stopObserving(this.textarea,"focus",this.deferredSetup);var b=this.textarea;var a=this.textarea.up();while(b!=a&&b.visible()){b=a;if(b.up){a=b.up()}}if(b==a){this.resizeSetup(this.textarea);this.textarea.observe("keypress",this.resizeCb.bindAsEventListener(this));this.textarea.observe("keydown",this.resizeCb.bindAsEventListener(this));this.textarea.observe("keyup",this.resizeCb.bindAsEventListener(this));this.textarea.observe("change",this.resizeCb.bindAsEventListener(this))
}else{Event.observe(this.textarea,"focus",this.deferredSetup);Event.observe(this.textarea,"focus",function(){document.fire("textarea:focused",{textarea:this.textarea})}.bindAsEventListener(this));Event.observe(this.textarea,"blur",function(){document.fire("textarea:blurred",{textarea:this.textarea})}.bindAsEventListener(this))}}},targetId:null,textarea:null,resizeSetup:function(b){if(b.nodeName=="TEXTAREA"){var c=b.getDimensions();b.origHeight=c.height-2;if(Prototype.Browser.IE){b.origHeight-=2}b.origWidth=c.width;var d=new Element("textarea");b.insert({before:d});var a={position:"absolute",top:"0px",left:"-9999px",overflow:"hidden"};$A(["height","width","lineHeight","textDecoration","letterSpacing","color","margin","font-family","font-size"]).each(function(e){a[e]=b.getStyle(e)});d.setStyle(a);d.setAttribute("tabIndex","-1");
b.lastScrollTop=null;b.clone=d;b.maxChar=parseInt(b.getAttribute("maxlength"))}},handleInputResize:function(c){if(c.nodeName=="TEXTAREA"){if(!c.abs){c.absolutize();c.origTop=c.positionedOffset().top;c.setStyle({"z-index":"1",left:"auto"});if(this.opts.usePlaceholder){var d=new Element("div");d.innerHTML="&nbsp;";d.setStyle({width:c.origWidth+"px","float":"left"});c.insert({before:d})}c.abs=true}if(/^\s+$/.match(c.value)){c.value=""}if(c.value.length>c.maxChar){c.value=c.value.substring(0,c.maxChar);return}c.clone.value=c.value+"a";c.clone.scrollTop=10000;var a=c.clone.scrollTop+c.origHeight;var b=Math.max(a,c.origHeight);if(c.scrollWidth>c.origWidth){b+=c.origHeight}if(c.lastScrollTop===b){return}c.lastScrollTop=b;c.setStyle({height:b+"px"});if(this.opts.direction=="up"){c.setStyle({top:(c.origTop+c.origHeight-b)+"px"})
}}},resizeCb:function(a){this.handleInputResize(a.element())}});
