/**
 * @class Ext.Element
 */

Ext.Element.addMethods({
   
/**
     * Measures the element's content height and updates height to match. Note: this function uses setTimeout so
     * the new height may not be available immediately.
     * @param {Boolean} animate (optional) Animate the transition (defaults to false)
     * @param {Float} duration (optional) Length of the animation in seconds (defaults to .35)
     * @param {Function} onComplete (optional) Function to call when animation completes
     * @param {String} easing (optional) Easing method to use (defaults to easeOut)
     * @return {Ext.Element} this
     */

    autoHeight
: function(animate, duration, onComplete, easing){
       
var oldHeight = this.getHeight();
       
this.clip();
       
this.setHeight(1); // force clipping
        setTimeout
(function(){
           
var height = parseInt(this.dom.scrollHeight, 10); // parseInt for Safari
           
if(!animate){
               
this.setHeight(height);
               
this.unclip();
               
if(typeof onComplete == "function"){
                    onComplete
();
               
}
           
}else{
               
this.setHeight(oldHeight); // restore original height
               
this.setHeight(height, animate, duration, function(){
                   
this.unclip();
                   
if(typeof onComplete == "function") onComplete();
               
}.createDelegate(this), easing);
           
}
       
}.createDelegate(this), 0);
       
return this;
   
}
});