var Framework = {
	_options: {
		initial_focus: null
	}
};

Framework.configure = function(options) {
	Framework._options = Object.extend(Framework._options, options || {});
};

Framework.Form = {
	submit: function(formElement, submitAction) {
		formElement.select('.empty').each(function(field) {
			field.value = '';
		});
		var submitActionElt = formElement.down('input[name=submit_action]');
		if (submitActionElt) {submitActionElt.value = submitAction;}

		if (formElement.frameworkHandler) {
			formElement.frameworkHandler.submit(formElement, submitAction);
		} else if (Lightbox.contains(formElement)) {
			Lightbox.submit(formElement, submitAction)
		} else {
			formElement.submit();
		}
	},

	activateDefaultField: function(formElement) {
		var df = $(formElement).down('.default');
		if (df) {
			df.activate();
			return true;
		}
		return false;
	}
};

Framework.Form.Blog = {
	updateFields: function() {
		var options = Framework._options.custom_options;
		if (!options) {return;}
		var row;
		var newType = $F('post_post_type');
		options.required_fields[newType].each(function(field) {
			row = $('post_' + field).up('div.row');
			if (row) {
				row.removeClassName('optional');
				row.addClassName('required');
				row.show();
			}
		});
		options.optional_fields[newType].each(function(field) {
			row = $('post_' + field).up('div.row');
			if (row) {
				row.removeClassName('required');
				row.addClassName('optional');
				row.show();
			}
		});
		options.irrelevant_fields[newType].each(function(field) {
			row = $('post_' + field).up('div.row');
			if (row) {
				row.removeClassName('required');
				row.removeClassName('optional');
				row.hide();
			}
		});
		row = $('post_image_data').up('div.row');
		(newType == 'picture') ? row.show() : row.hide();
	}
};

Framework.PlaceholderField = Class.create({
	initialize: function(element, placeholder) {
		this._field = $(element);
		this._field.placeholder = this._field.title;
		this._updatePlaceholder();
		this._field.observe('focus', this._gotFocus.bind(this));
		this._field.observe('blur', this._lostFocus.bind(this));
	},

	_gotFocus: function() {
		this._focus = true;
		this._updatePlaceholder();
	},

	_lostFocus: function() {
		this._focus = false;
		this._updatePlaceholder();
	},

	_updatePlaceholder: function() {
		var value = $F(this._field);
		if (!this._focus && (!value || value.length == 0)) {
			this._field.value = this._field.placeholder;
			this._field.addClassName('empty');
		} else {
			if ($F(this._field) == this._field.placeholder) {
				this._field.value = '';
			}
			this._field.removeClassName('empty');
		}
	}
});

Framework.instrumentFields = function() {
	var fields = $$('input[type=text]').concat($$('textarea'));
	fields.each(function(field) {
		if (field.title && !field.placeholder) {new Framework.PlaceholderField(field);}
	});
	var activateMe = $(Framework._options.initial_focus);
	if (activateMe) {activateMe.activate();}
};
document.observe('dom:loaded', Framework.instrumentFields);
document.observe('ourstage:ajaxLoaded', Framework.instrumentFields);
