/**
 *	
 * Copyleft (c) 2008 Carlos Alan P. Alves (carlosalan86@gmail.com)
 * --------------------------------------------------------------------------------------
 * Plugin com a função de fazer a validação de formulários. com intuito de ajudar novatos 
 * que queiram apren-der. Peço apenas que não tire a minha autoria. Muito Obrigado.
 * --------------------------------------------------------------------------------------
 *
 * Versão: 1.0.6	
 * LOG:
	19/12/08 - Melhoramento da validação de e-mail;
	12/09/08 - Melhoramento da validação de e-mail;
	05/09/08 - Padronizando as variaveis;
	05/09/08 - Agora o plugin apenas faz a validação sem enviar para canto algum[ var: vl_formaenvio:validar ];
	28/08/08 - Plugin agora funciona com mais de um form na página;
	27/08/08 - Organização da estrutura dos settings;
 *
 */

jQuery.fn.validacao = function(options) 
{
    var form = this;
    var settings = 
	{
		vl_bsubmit: 'button[id="goform"]', //Elemento que ativa a validação;
		vl_formaenvio: 'validar', //file, ajax, validar;
        vl_elementos: 'input[type="text"]' //Elementos que ele vai verificar;
	};

	if(options) { jQuery.extend(settings, options); } 
	
    jQuery(settings.vl_bsubmit).click(function() 
	{
        jQuery("#aviso").html('');
        
		if(form.is('form')) 
		{
            var x = 0;
            var ca = "";
			
			/*  
				@ Inicio  
				@ Verificação todos os campos que foram setados no vl_elementos; 
			*/			
            jQuery(settings.vl_elementos, form).each(function() 
			{
                var elemento = jQuery(this);
                if(elemento.attr('title')) {
					var tipo = jQuery(elemento)[0].type;
					switch(tipo) 
					{
						case 'password':
						case 'text':
						case 'textarea':
						case 'file':
						case 'select-one':
							if(elemento.val() == "" || elemento.val() == 0) 
							{
							    if(ca == "")
		            		     ca = elemento;
		                        ca.focus();
		            		    x = (x + 1);
		                        if(jQuery('#'+elemento.attr('name')).attr('id') == null)
		                            jQuery('<span id="'+elemento.attr('name')+'" class="msgErro">'+elemento.attr('title')+'</span>').insertAfter(elemento);
		                        //elemento.addClass("erro");
							}
						break;
                    }
                }

                jQuery(elemento).keypress(function (e) 
				{
                    if(jQuery('#'+jQuery(this).attr('name')))
				        jQuery('#'+jQuery(this).attr('name')).remove();
                });
				
				jQuery(elemento).click(function (e) 
				{
                    var campo = jQuery(this);
                    if(jQuery('#'+jQuery(this).attr('name'))) 
					{
                        //campo.removeClass("erro");
				        jQuery('#'+campo.attr('name')).remove();
                    }
                });
            });
			
			/*  
				@ Inicio  
				@ Verificação do campo e-mail; 
			*/		
        	if (settings.vl_campoemail) 
			{
    			if(x == 0) 
				{
					var elemento = jQuery(settings.vl_campoemail);
					if(elemento.val() != "" && elemento.val() != null) 
					{
						var erEmail = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;						
						if (!erEmail.test(elemento.val())) 
						{
							x = 1;
							elemento.focus();
							elemento.addClass("erro");
							if(jQuery('#'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="'+elemento.attr('name')+'" class="msgErro">Por favor confira seu e-mail.</span>').insertAfter(elemento);
						} 
					}
    			}
        	}
			
			/* @ Se todos os campos estiverem ok, a variavel x deve estar como 0, então os dados serão enviados;  */			
			if(x == 0) {
				switch(settings.vl_formaenvio) 
				{
					case 'ajax':		
					    jQuery("#aviso").html('Aguarde...');
					    jQuery.ajax({
					        type: "POST",
		                    url: settings.vl_pgexterna,
		                    data: jQuery(form).serialize(),
		                    success: function(msg) 
							{
								/* 
									@ Área Livre para desenvolvimento dos retornos do [ vl_pgexterna ];
								*/
								
								jQuery("#aviso").html(jQuery("#aviso").attr('title'));
								jQuery(settings.vl_elementos, form).each(function() 
								{
									var elemento = jQuery(this);
									elemento.val('');
								});		
		                    }
		                })
					break;
					
					case 'file':
					    window.document.geralFile.action = settings.vl_pgexterna;
		                window.document.geralFile.submit();
					break;					
					
					default:
					    return true;
					break;
				}
			}
		}
	 return false;
    });
};
