/**
 *	
 * 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.7	
 *
 * LOG:
	Versão: 1.0.7 - 13/02/09 - Validação dos inputs type radio;
							 - Remoção da variavel vl_elementos;
							 
	Versão: 1.0.6 - 19/12/08 - Melhoramento da validação de e-mail;
	Versão: 1.0.5 - 12/09/08 - Melhoramento da validação de e-mail;
	Versão: 1.0.4 - 05/09/08 - Padronizando as variaveis;
	Versão: 1.0.3 - 05/09/08 - Agora o plugin apenas faz a validação sem enviar para canto algum[ var: vl_formaenvio:validar ];
	Versão: 1.0.2 - 28/08/08 - Plugin agora funciona com mais de um form na página;
	Versão: 1.0.1 - 27/08/08 - Organização da estrutura dos settings;
 *
 *
 */

jQuery.fn.validacao = function(options) 
{
    var form = this;
    var settings = 
	{
		vl_bsubmit: 'button[id="buttonContato"]',   //Elemento que ativa a validação;
		vl_formaenvio: 'validar' 		    		//file, ajax, validar;
	};

	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 tiverem o atributo title; 
			*/			
            jQuery.each(jQuery(form).find('[title]'), function()
			{
                var elemento = jQuery(this);
				var tipo = jQuery(elemento)[0].type;
				switch(tipo) 
				{
					case 'radio':
						var r = 0;
						jQuery(jQuery('input[name="'+elemento.attr('name')+'"]'), form).each(function() {
							if(jQuery(this).attr('checked') == true)
								r++;
						});
						
						if (r <= 0)
							if(jQuery('#'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="'+elemento.attr('name')+'" class="msgErro">'+elemento.attr('title')+'</span>').insertBefore(jQuery('input[name="'+jQuery(this).attr('name')+'"]:last'));
					break;
					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);
						}
					break;
				}
				
				jQuery("[name="+elemento.attr('name')+"]").click(function (e) { if(jQuery('#'+jQuery(this).attr('name'))) { jQuery('#'+jQuery(this).attr('name')).remove(); } });
                jQuery("[name="+elemento.attr('name')+"]").keypress(function (e) { if(jQuery('#'+jQuery(this).attr('name'))) jQuery('#'+jQuery(this).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);
						} 
					}
    			}
        	}

			jQuery("input[name='document[]']").each(function (i) 
			{
				var campoFile = jQuery(this);
				if(campoFile.attr('class') != null) 
				{
					if(campoFile.val() != '')
					{
						var ext = /(.doc|.txt|.jpg|.pdf|.zip|.rar)$/;
						if (!ext.test(campoFile.val()))
						{
							x = (x + 1);

							if(jQuery('#file'+i).attr('id') == null)
								jQuery('<span id="file'+i+'" class="msgErro">.doc .txt .jpg. .pdf .zip .rar</span>').insertAfter(campoFile);					
						}
						
						campoFile.click(function (e) 
						{
							var campo = jQuery(this);
							if(jQuery('#file'+i))
								jQuery('span[id="file'+i+'"]').remove();
						});	
					}
				}
			});				
			
			/* @ 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 ];
								*/
								switch(msg)
								{
									case 'cadastro_duplicado':
										jQuery("#aviso").html('Usuário já existe.');
									break;
									
									case 'cadastro_ok':
									default:
										jQuery("#aviso").html("<span class='aviso'>"+jQuery("#aviso").attr('title')+"</span>");
										jQuery("[title]", form).each(function() 
										{
											var elemento = jQuery(this);
											elemento.val('');
										});										
									break;
								}
		                    }
		                })
					break;
					
					case 'file':
					    window.document.geralFile.action = settings.vl_pgexterna;
		                window.document.geralFile.submit();
					break;					
					
					default:
					    return true;
					break;
				}
			}
		}
	 return false;
    });
};

