var textareaMaxLength = new Class({
	
	Implements: [Options],
	
	options: {
		target: null,
		textarea: null,
		maxLength: null
	},
	
	length: 0,
	maxLength: 0,
	textarea: null,
	target: null,
	
	initialize: function(options){
		this.setOptions(options);
		if(this.options.textarea === null || this.options.target === null) {
			return false;
		} else {
			this.target = this.options.target;
			this.textarea = this.options.textarea;
		}
		this.maxLength = this.options.maxLength || 255;
		
		this.addEvents();
	},
	
	addEvents: function(){
		this.textarea.addEvents({
			'keyup': function(e){
				this.length = this.textarea.get('value').length;
				this.truncate();
				this.target.set('value', 255 - this.length);
			}.bind(this),
			'keydown': function(e){
				if(this.length === this.maxLength && e.key !== 'backspace' && e.key !== 'tab') return false;					
				if(this.length > this.maxLength && e.key !== 'backspace') {
					this.truncate();
					return false;
				}
			}.bind(this)
		});
	},
	
	truncate: function(){
		if(this.length > this.maxLength){					
			this.textarea.set('value', this.textarea.get('value').truncate(this.maxLength, ''));
		}
	}
	
});

//Element.implement({
//	maxLength: function(options){
//		new textareaMaxLength(Object.merge(this, options || {}));
//	}
//});

//Element.implement('maxLength', textareaMaxLength());
