The minimum scrollHeight of a textarea is always going to be the height. To get an accurate scrollHeight, set the height to 1 first.
h.height(1).height(h[0].scrollHeight);
http://jsfiddle.net/aarongloege/t2vAr/
If you do not want to code it by yourself, you can also use this script: https://github.com/brandonaaron/jquery-expandable It already contains a nice slide-effect ;-)