var Ct_Form_Label = Class.create(Ct_Component_Abstract, {

	__construct: function() {
		this._assemble();
		this.element.on('mousedown', '.ctFormLabel', Event.stop);
		this.element.on('Ct_Page:refresh', null, this._assemble.bindAsEventListener(this));
	},

	_assemble: function() {
		$$('.ctFormLabel').each(function(element) {
			if (element.retrieve('inputElement', null) !== null) {
				return;
			}
			var inputElement = element.up(0).down('input, textarea, select');
			if (Object.isElement(inputElement)) {
				element.store('inputElement', inputElement);
				new Form.Element.Observer(inputElement, 0.1, this._updateLabelState.bind(this, element));
				setTimeout(function(labelElement) {
					this._updateLabelState(labelElement, inputElement, inputElement.getValue());
				}.bind(this, element), 500);
			}
		}.bind(this));
	},

	_updateLabelState: function(labelElement, inputElement, value) {
		if (!!!value && !labelElement.visible()) {
			labelElement.show();
			labelElement.removeClassName('ctFormLabel-hidden');
			labelElement.fire('Ct_Form_Label:shown');
		} else if (labelElement.visible()) {
			labelElement.hide();
			labelElement.addClassName('ctFormLabel-hidden');
			labelElement.fire('Ct_Form_Label:hidden');
		}
	},

	_setNamespace: function() {
		this._namespace = 'ctFormLabel';
	},

	refresh: function(ident, response) {
		var element = $(ident);

		if (!Object.isElement(element)) {
			return;
		}

		if (response.html && response.html.length) {
			element.update(response.html);
		}
	}

});

Ct_Page.registerScript("Ct_Form_Label");


