/* 
Copyright (c) 2008 Carlos Alan P. Alves (carlosalan86@gmail.com)
--------------------------------------------------------------------------------------
Plugin responsável pela validação de formulários. O mesmo é total-
mente free. Foi feito no intuito de ajudar novatos que queiram apren-
der. Peço apenas que não tire a minha autoria. Muito Obrigado.
--------------------------------------------------------------------------------------

Versão: 1.0.5
	
LOG:
	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() != "") 
					{
						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 '0':
										window.location.href = document.URL+'/'+1;	
		                    		break;
		                    		case 'S1':
										jQuery("#areaForm").html('Você recebera um e-mail em sua caixa de entrada.');
		                    		break;
		                    		case 'S2':
										jQuery("#areaForm").html('Sua conta estar bloqueada, entre em <a href="http://www.aliancadoyoga.com.br/contato">contato</a> por favor.');
		                    		break;
		                    		default:  
										jQuery("#aviso").html(jQuery("#aviso").attr('title'));
										jQuery(settings.vl_elementos, form).each(function() {
											var elemento = jQuery(this);
											elemento.val('');
										});		
									break;
		                    	}
		                    }
		                })
					break;
					
					case 'file':
						if (settings.vl_registros) 
						{
							jQuery(':input', 'form[name="geralFile"]').each(function() 
							{
								jQuery(this).attr('disabled', false);
							});
						}
						
					    window.document.geralFile.action = settings.vl_pgexterna;
		                window.document.geralFile.submit();
					break;					
					
					default:
					    return true;
					break;
				}
			}
		}
	 return false;
    });
};
