// OverLabel
var OverLabel = new Class({
	
	initialize: function(input)
	{
		OverLabel.register(this);
		
		input = $(input);
		if($(document).getElement('label[for="'+input.get('id')+'"]'))
		{
			var label = $(document).getElement('label[for="'+input.get('id')+'"]');
			
			this.input = input.store('OverLabel', this);
			this.label = label;
			
			label.setStyles({
				'position': 'absolute',
				'color': input.getStyle('color'),
				'font-size': input.getStyle('font-size'),
				'line-height': input.getStyle('line-height'),
				'width': input.getStyle('width')
			});
			label.position({relativeTo: input, position: 'topLeft', edge: 'topLeft'});
			var enterEdit = function(){
				assert();
				input.store('hasFocus', true);
				input.focus();
				label.setStyle('opacity', .5);
			};
			var leaveEdit = function(){
				if(input.get('value') == '') label.setStyles({'display': 'block', 'opacity': input.retrieve('hasFocus') ? .5 : 1});
				else label.setStyles({'display': 'none'});
			};
			var assert = function(){
				if(input.get('value').length > 0){
					label.setStyles({'display': 'none'});
				} else {
					leaveEdit();
				}
			};
			input.addEvent('blur', function(){ input.store('hasFocus', false); });
			input.addEvents({
				'click': enterEdit,
				'focus': enterEdit,
				'blur': leaveEdit,
				'keyup': assert,
				'keypress': function(){ label.setStyles({'display': 'none'}); }
			});
			label.addEvents({
				'click': enterEdit
			});
			
			assert();
			
			
		}
	},
	
	update: function()
	{
		this.label.position({relativeTo: this.input, position: 'topLeft', edge: 'topLeft'});
	}
});


OverLabel.instances = [];
OverLabel.register = function(el){
	return OverLabel.instances.push(el);
};
OverLabel.update = function(){
	OverLabel.instances.each(function(i){ i.update(); });
};
