(function($) {

	function log(stuff) {
		if(typeof(console) == 'object') {
			if(console.log) {
				console.log(stuff);
			}
		}
		else {
			var ret = '';
			switch(typeof stuff) {
				case 'string':
					ret = stuff;
				break;
				case 'object':
					ret = stuff.join('\n');
				break;
			}
			alert(ret);
		}
	};

	$.extend({
		textFlex: new function(callback) {
			this.defaults = {
				maxHeight: 500,
				minHeight: 16
			};
			function resize(t, settings) {
				//var	$e = t.target ? $(t.target) : t;
				var $e = t;
				if(!($.browser.opera || $.browser.msie)) $e.css('height', settings.minHeight);
				var newHeight = Math.min(settings.maxHeight, (Math.max(settings.minHeight, $e.attr('scrollHeight')) + 5));
				//log($e[0].scrollHeight);
				var overflowStyle = newHeight >= settings.maxHeight ? { 'overflow': 'auto' } : { 'overflow': 'hidden' };
				$e.css('height', newHeight + 'px').css(overflowStyle);
			};
			this.__construct = function(settings) {
				return this.each(function() {
					var	settings = {},
							$this = $(this);
					settings = $.extend(settings, $.textFlex.defaults, settings);
					resize($this, settings);
//					$this.unbind('keyup.tf').unbind('keypress.tf').bind('keyup.tf keypress.tf', function(e) { resize(e, settings); });
					window.setInterval(function() { resize($this, settings); }, 100);
					return $this;
				});
			};
		}
	});
	$.fn.extend({
		textFlex: $.textFlex.__construct
	});
})(jQuery);
