/* 
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("#mensagem").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();
                    }
                });
            });
			
            
            // Validação de cpf;
        	if (settings.cpf) {
    			if(x == 0) {
            		if (jQuery(settings.cpf).val()) {
					   var i;
					   var cpf = jQuery(settings.cpf).val();
					   cpf = cpf.replace( ".", "" );
					   cpf = cpf.replace( ".", "" );
					   cpf = cpf.replace( "-", "" );
					   
					   if( (cpf == '11111111111') || (cpf == '22222222222') ||
							(cpf == '33333333333') || (cpf == '44444444444') ||
							(cpf == '55555555555') || (cpf == '66666666666') ||
							(cpf == '77777777777') || (cpf == '88888888888') ||
							(cpf == '99999999999') || (cpf == '00000000000') ) {
								jQuery(settings.cpf).focus();
								jQuery(settings.cpf).addClass("erro");
								x = 1;
						}
							
						var c = cpf.substr(0,9);
						var dv = cpf.substr(9,2);			 
						var d1 = 0;

						for (i = 0; i < 9; i++){
							d1 += c.charAt(i)*(10-i);
						}
						 
						if (d1 == 0) {
							jQuery(settings.cpf).focus();
							jQuery(settings.cpf).addClass("erro");
							x = 1;
						}
						 
						d1 = 11 - (d1 % 11);
						if (d1 > 9) 
							d1 = 0;
							
						if (dv.charAt(0) != d1) {
							jQuery(settings.cpf).focus();
							jQuery(settings.cpf).addClass("erro");
							x = 1;
						}
						 
						 
						d1 *= 2;
						for (i = 0; i < 9; i++) {
							d1 += c.charAt(i)*(11-i);
						}
						 
						d1 = 11 - (d1 % 11);
						if (d1 > 9) 
							d1 = 0;
							
						if (dv.charAt(1) != d1) {
							jQuery(settings.cpf).focus();
							jQuery(settings.cpf).addClass("erro");
							
							var elemento = jQuery(settings.cpf);
							
							if(jQuery('#'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="'+elemento.attr('name')+'" class="msgErro">CPF inválido.</span>').insertAfter(elemento);
							
							x = 1;
						} 							
            		}
    			}
        	}
        	
            
			/*  
				@ 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);
						} 
					}
    			}
        	}

			 
			/* @ 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("#mensagem").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("#mensagem").html(jQuery("#mensagem").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;
    });
};