/**
 *	
 * Copyleft (c) 2010 Carlos Alan P. Alves (carlosalan86 [at] gmail [dot] com)
 * --------------------------------------------------------------------------------------
 * Plugin com a funcao de duplicar elementos. Pe�o apenas que n�o tire a minha autoria. 
 * Muito Obrigado.
 * --------------------------------------------------------------------------------------
 *
 * Vers�o: 1.1.1	
 *
 * LOG:
	Vers�o: 1.1.1 - 29/06/10 - Melhoria no sistema de validacao de arquivos;
	Vers�o: 1.1.0 - 25/06/09 - Melhoria no sistema de validacao de arquivos;
	Vers�o: 1.0.9 - 26/08/09 - Melhoria na verificacao de e-mails;
	Vers�o: 1.0.8 - 14/04/09 - Melhoria no sistema de validacao de arquivos;
							 - removido o bug, que impedia o atributo id nos elementos;
	Vers�o: 1.0.7 - 13/02/09 - Validacao dos inputs type radio;
							 - Remocao da variavel vl_elementos;
	Vers�o: 1.0.6 - 19/12/08 - Melhoramento da validacao de e-mail;
	Vers�o: 1.0.5 - 12/09/08 - Melhoramento da validacao 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 validacao 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 pagina;
	Vers�o: 1.0.1 - 27/08/08 - Organizacao da estrutura dos settings;
 *
 *
 */
jQuery.fn.validacao = function(options) 
{
    var form = this;
    var settings = 
	{
		vl_botao: 'button[id="submit"]', //Elemento que ativa a valida��o;
		vl_formaenvio: 'validar' //file, ajax, validar;
	};

	if(options) { jQuery.extend(settings, options); } 
	
    jQuery(settings.vl_botao).click(function() 
	{
		if(form.is('form')) 
		{
            var x = 0;
            var ca = "";
			
			/*  
				@ Inicio  
				@ Verificao 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('#e_'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="e_'+elemento.attr('name')+'" class="msgErro">'+elemento.attr('title')+'</span>').insertBefore(jQuery('input[name="'+jQuery(this).attr('name')+'"]:last'));
							x = (x + 1);
						}
					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('#e_'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="e_'+elemento.attr('name')+'" class="msgErro">'+elemento.attr('title')+'</span>').insertAfter(elemento);
						}
					break;
				}
				
				jQuery("[name="+elemento.attr('name')+"]").click(function (e) { if(jQuery('#e_'+jQuery(this).attr('name'))) { jQuery('#e_'+jQuery(this).attr('name')).remove(); } });
                jQuery("[name="+elemento.attr('name')+"]").keypress(function (e) { if(jQuery('#e_'+jQuery(this).attr('name'))) jQuery('#e_'+jQuery(this).attr('name')).remove(); });
            });
			
			/*  
				@ Inicio  
				@ Verificacao do campo e-mail; 
			*/	
			if(x == 0) 
			{
	            jQuery.each(jQuery(form).find('[id="email"]'), function()
    			{ 
	                var elemento = jQuery(this);
					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('#e_'+elemento.attr('name')).attr('id') == null)
								jQuery('<span id="e_'+elemento.attr('name')+'" class="msgErro">Por favor confira seu e-mail.</span>').insertAfter(elemento);
						} 
					}
					
					jQuery("[name="+elemento.attr('name')+"]").click(function (e) { if(jQuery('#e_'+jQuery(this).attr('name'))) { jQuery('#e_'+jQuery(this).attr('name')).remove(); } });
	                jQuery("[name="+elemento.attr('name')+"]").keypress(function (e) { if(jQuery('#e_'+jQuery(this).attr('name'))) jQuery('#e_'+jQuery(this).attr('name')).remove(); });
	            });						
			}
        	
			/*
			 *  Verificao de arquivos;  
			*/				
        	if (settings.vl_file) 
			{
				//Verifica se todos os erros ja foram concertados
				if(x == 0) 
				{
					//Separa o grupo de arquivos
					var tipos = settings.vl_file.split('|');
					
					//Total de grupos
					var totalTipos = tipos.length;
					
					//Dar um loop na quantidade de grupos
					var i;
					for (i = 0; i < totalTipos; i++) 
					{
						//Grava o nome do grupo
						var campoFile = jQuery(tipos[i]);
						//Quebra o nome do grupo para pegar a extensao
						var spli = tipos[i].split('-');
						
						//Da um loop em todos os elementos de um determinado grupo
						jQuery.each(campoFile, function()
						{
							if(jQuery(this).attr('class') != null) 
							{
								if(jQuery(this).val() != '')
								{
									if(spli[1] == 'jpg') { var ext = /(.jpg|.JPG)$/; textArq = '.jpg' }
									if(spli[1] == 'doc') { var ext = /(.doc|.DOC|.pdf|.PDF)$/; textArq = '.doc ou .pdf' }
									
									if (!ext.test(jQuery(this).val()))
									{
										x = (x + 1);
										if(jQuery('#e_'+jQuery(this).attr('name')).attr('id') == null)
											jQuery('<span id="e_'+jQuery(this).attr('name')+'" class="msgErro">Aceita&ccedil;&atilde;o apenas de arquivos '+textArq+'</span>').insertAfter(jQuery(this));					
									}
									
									jQuery(this).click(function (e) 
									{
										if(jQuery('#e_'+jQuery(this).attr('name')).attr('id'))
											jQuery('span[id="e_'+jQuery(this).attr('name')+'"]').remove();
									});	
								}	
							}
						});
					}
				}
        	 }	
 
			/*  
				@ Se todos os campos estiverem ok, a variavel x deve estar como 0;
				@ Entao os dados serao enviados; 
			*/		
			jQuery('.sucesso,.erro').css('display', 'none');	
			if(x == 0) 
			{
				switch(settings.vl_formaenvio) 
				{
					case 'ajax':	
						var avisoOriginal = jQuery(".aviso").html();	
						jQuery(".aviso").css('display', 'block');
					    jQuery(".aviso").html('Aguarde...');
					    jQuery.ajax({
					        type: "POST",
		                    url: settings.vl_pgexterna,
		                    data: jQuery(form).serialize(),
		                    success: function(msg) 
							{
								/* 
								 * Area Livre para desenvolvimento do retorno
								 */
								switch(msg)
								{
									default:
										jQuery(".aviso").html(avisoOriginal);
										jQuery(":input", form).each(function() 
										{
											var elemento = jQuery(this);
											elemento.val('');
										});
										jQuery('.sucesso').css('display', 'block');									
									break;
								}
		                    }
		                })
					break;
					
					case 'file':
					    window.document.geralFile.action = settings.vl_pgexterna;
		                window.document.geralFile.submit();
					break;					
					
					default:
					    return true;
					break;
				}
			}
			else
			{
				jQuery('.erro').css('display', 'block')
			}
		}
	 return false;
    });
};
