var AutoSize = new Class({
	options: {
		url:''
		,el:''
	},
	el:[],
	test:null,
	initialize: function(options){
		this.setOptions(this.options, options);
		this.elements = $$(this.options.el);
		this.elements.each(function(el, i){
			this.resize(el, i);
			el.addEvent('keyup', function(){
				this.resize(el, i);
			}.bind(this));
			el.addEvent('keypress', function(){
				this.resize(el, i);
			}.bind(this));
		}.bind(this));
	},
	resize: function(el, i){
		if(!this.test){
			el.setStyle('overflow', 'hidden');
			this.createTester();
			this.reStyle(el);
		}
		var text=el.get('value');
		entities = {
			'&':'&amp;',
			'<':'&lt;',
			'>':'&gt;',
			'"':'&quot;',
			'  ': '&nbsp; '
			,'\n': '<br />'
		};
		for(i in entities) {
			text = text.replace(new RegExp(i,'g'),entities[i]);
		}

		this.test.set('html', text+'&nbsp;'
		);
		var size = this.test.getSize();
		el.setStyles({
			'width': size.x,
			'height': size.y
		});
	},
	reStyle: function(el){
		this.test.setStyles({
			'font-family': el.getStyle('font-family'),
			'font-size': el.getStyle('font-size'),
			'font-weight': el.getStyle('font-weight'),
			'font-style': el.getStyle('font-style'),
			'font-stretch': el.getStyle('font-stretch'),
			'font-variant': el.getStyle('font-variant'),
			'letter-spacing': el.getStyle('letter-spacing'),
			'word-spacing': el.getStyle('word-spacing'),
			'line-height': el.getStyle('line-height'),
			'border-top': el.getStyle('border-top'),
			'border-left': el.getStyle('border-left'),
			'border-bottom': el.getStyle('border-bottom'),
			'border-right': el.getStyle('border-right')
		});
	},
	createTester: function(el){
		this.test = new Element('div', {
			'id' : 'testAreasSize',
			'styles':{
				'position':'absolute',
				'left': 0,
				'top': 0,
				'visibility': 'hidden'
//				'background-color': '#f0f'

			}
		});
		this.test.inject(document.body);
	}
});


AutoSize.implement(new Events);
AutoSize.implement(new Options);


