jQuery.fn.infForm = function(options)
{
	var jqueryObj = this;

	var defaults = {
		classField :'field',
		classFieldAlert :'field_alert',
		classMsg :'msg_field',
		classMsgAlert :'msg_field_alert',
		padraoMsg :'msg'
	};

	var opts = jQuery.extend(defaults, options, {
		idForm :this.attr('id')
	});

	function _initialize()
	{
		if (build())
		{
			return;
		}

		jqueryObj.find('.' + opts.classField).each( function(i)
		{
			var idMsg = null;
			if (this.title.indexOf('|') >= 0)
			{
				var aux = this.title.split('|');
				this.title = aux[0];
				jQuery('#' + aux[1]).text(aux[0]);
				idMsg = aux[1];
			}
			else
			{
				idMsg = getIdMsg(opts.idForm, this.name);
				jQuery(this).after("<p class='" + opts.classMsg + "' id='" + idMsg + "'>" + this.title + "</p>");
			}

			this.msgField = idMsg;
		});

		jqueryObj[0].build = true;
	}

	function build()
	{
		if (jqueryObj[0].build == undefined)
		{
			jqueryObj[0].build = false;
		}

		return jqueryObj[0].build;
	}

	function getIdMsg(idForm, nomeField)
	{
		return idForm + "_" + opts.padraoMsg + "_" + nomeField;
	}

	function getIdField(idForm, nomeField)
	{
		return idForm + "_" + nomeField;
	}

	this.setFocus = function(idForm, nomeField)
	{
		var idField = getIdField(idForm, nomeField);

		jQuery('#' + idField).focus();
	};

	this.setError = function(idForm, nomeField, text)
	{
		var idField = getIdField(idForm, nomeField);
		var idMsg = getIdMsg(idForm, nomeField);

		jQuery('#' + idField).addClass(opts.classFieldAlert);

		var objMsg = jQuery('#' + idMsg);
		
		if (objMsg.length==0)
		{
			objMsg = jQuery('.' + idField);
		}
		
		objMsg.attr('title', objMsg.text());
		objMsg.text(text);
		objMsg.addClass(opts.classMsgAlert);
	};

	this.resetErrors = function()
	{
		jqueryObj.find('.' + opts.classFieldAlert).each( function(i)
		{
			jQuery(this).removeClass(opts.classFieldAlert);
		});
		jqueryObj.find('.' + opts.classMsgAlert).each( function(i)
		{
			this.innerHTML = this.title;
			this.title = '';
			jQuery(this).removeClass(opts.classMsgAlert);
		});
	};

	_initialize();

	return this;
};
