(function() {
	jQuery.Uniform = function (options) {
		// Extend our defaults with the user's preferred options
		jQuery.Uniform.options = jQuery.extend(
			{
				fieldSelector : "form .Field",
				focusClass : "Focused",
				errorClass : "Error"
			},
			options
		);

		jQuery(jQuery.Uniform.options.fieldSelector).live("focusin focusout", jQuery.Uniform.onFieldFocus);
		jQuery(jQuery.Uniform.options.fieldSelector).live("uniform.error", jQuery.Uniform.onFieldError);
	};

	jQuery.Uniform.onFieldFocus = function (event) {
		var field = jQuery(event.currentTarget);

		if (event.type == "focusin") {
			field.addClass(jQuery.Uniform.options.focusClass);
		} else if (event.type == "focusout") {
			field.removeClass(jQuery.Uniform.options.focusClass);
		}
	};

	jQuery.Uniform.onFieldError = function (event, options) {
		var field = jQuery(event.currentTarget);
		field.addClass(jQuery.Uniform.options.errorClass);
		
		var form = field.parents("form:first");
		var formData = jQuery.Uniform.getFormData(form);

		var error = jQuery('<p class="Message">' + options.message + '</p>');
		field.prepend(error);
		
		formData.messages.push({ field : field, message : error });
	};

	jQuery.Uniform.getFormData = function(element) {
		var formData = element.data("Uniform");
		if (formData) {
			return formData;
		} else {
			element.data("Uniform", { messages : [] });
			return element.data("Uniform");
		}
	};
		
	// To add an error message:
	// jQuery("#title").trigger("uniform.error", {message : "This field has an error message!"});
})();