//**********************************************************************************//
//																					//
// 									VALIDAÇÃO ÚNICA									//
//								   - DENIS FERRARI - 								//
//																					//
//**********************************************************************************//

// Vetor com as expressões regulares que serão utilizadas na validação.
var	ExReg 		= new Array();
	ExReg[0]	= /[0-9]{5}\-[0-9]{3}/; 			                // CEP
	ExReg[1]	= /\(\d{2}\)?[ ]?\d{4}[-]?\d{4}$/; 	                // Telefone com DDD
	ExReg[2]	= /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/    // E-Mail
	ExReg[3]	= /^\d{1,2}\/\d{1,2}\/\d{4}$/;		 	            // Data
	ExReg[4]	= /\d{3}\.\d{3}\.\d{3}\-\d{2}/;						// CPF
	ExReg[5]	= /\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}/;				// CNPJ
	ExReg[6]	= /^[http:\/\/www.|www.][\S]+$/;					// URL
		
// Teclas que devem ser desconsideradas na construção da máscara.
var	Teclas		= [8, 9, 37, 38, 39, 40, 46, 16];

function PVU()
{
	// Dados recebidos
	this.formulario = document.getElementById(arguments[0]);
	
	// Métodos
	this.setCEP 	= setCEP;
	this.setTel		= setTelefone;
	this.setMail	= setMail;
	this.setData	= setData;
	this.setCPF		= setCPF;
	this.setCNPJ	= setCNPJ;
	this.setURL		= setURL;
}

// Confirgurar um campo com as restrições de URL.
function setURL()
{
	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] );
		
		obj.onblur = function()
		{
			if( this.value != "" && !ExReg[6].test(this.value) )
			{
				alert( "Digite a url corretamente." );
				this.focus();
			}
		}		
	}
}

// Confirgurar um campo com as restrições de CNPJ.
function setCNPJ()
{
	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] );
		
		obj.onkeypress = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( this.value.length == 2 || this.value.length == 6 )
				{
					this.value += ".";
				}
				if( this.value.length == 10 )
				{
					this.value += "/"; 
				}
				if( this.value.length == 15 )
				{
					this.value += "-"; 
				}
			}
		}
		
		// Travar tamanho máximo e permitir somente números
		obj.onkeydown = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( !isNumero( event.keyCode ) || this.value.length == 18 )
				{
					return false;
				}
				else
				{
					return true;
				}
			}
		}
		
		obj.onblur = function()
		{
			if( this.value != "" && ( !ExReg[5].test(this.value) || !isCNPJ(this.value) ) )
			{
				alert( "Digite o cnpj corretamente." );
				this.select();
			}
		}		
	}
}

function setCPF()
{

	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] );
		
		obj.onkeypress = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{				
				if( this.value.length == 3  || this.value.length == 7 )
				{
					this.value += ".";
				}
				if( this.value.length == 11 )
				{
					this.value += "-"; 					
				}
			}
		}
		
		obj.onkeydown = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( !isNumero( event.keyCode ) )
				{
					return false;
				}
				else
				{
					return true;
				}
			}
		}
		
		obj.onblur = function()
		{
			if( this.value != "" && ( !ExReg[4].test(this.value) || !isCPF(this.value) ) )
			{
				alert( "Digite o cpf corretamente." );
				this.focus();
			}
		}		
	}
}

function setData()
{
	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] );
		
		obj.onkeypress = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				var	txt = this.value;
				
				if( Number(txt.charAt(0)) > 3 )
				{
					txt = "0" + txt;
				}
				if( Number(txt.substr(0,2)) > 31 )
				{
					txt = Format("{0}{1}/{2}","0",txt.charAt(0),txt.charAt(1));	
				}
				if( Number(txt.charAt(3)) > 1 )
				{
					txt = Format("{0}{1}{2}",txt.substr(0,3),"0",txt.charAt(3));
				}
				if( txt.length == 2 || txt.length == 5 )
				{
					this.value = txt + "/";
				}
			}
		}
		
		obj.onkeydown = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( !isNumero( event.keyCode ) )
				{
					return false;
				}
				else
				{
					return true;
				}
			}
		}
		
		obj.onblur = function()
		{
			if( this.value != "" && !ExReg[3].test(this.value) )
			{
				alert( "Digite a data corretamente." );
				this.focus();
			}
		}
	
	}
	
}

// Configura um campo com as restrições de e-mail.
function setMail()
{
	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] );
		
		obj.onblur = function()
		{
			if( this.value != "" && !ExReg[2].test(this.value) )
			{
				alert( "Digite o e-mail corretamente." );
				this.select();
			}
		}
	}
	
}

function setTelefone()
{
	for( var i = 0 ; i < arguments.length ; i++ )
	{

		var obj = document.getElementById( arguments[i] )
		
		obj.onkeypress = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( this.value.length == 1 && this.value.charAt(0) != "(" )
				{
					this.value = "(" + this.value;
				}
				if( this.value.length == 3 )
				{
					this.value += ")";
				}
				if( this.value.length == 8 )
				{
					this.value += "-";
				}
			}
		}
		
		// Travar tamanho máximo e permitir somente números
		obj.onkeydown = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( !isNumero( event.keyCode ) )
				{
					return false;
				}
				else
				{
					return true;
				}
			}
		}
		
		// Validação ao perder o foco
		obj.onblur = function()
		{
			if( this.value != "" && !ExReg[1].test(this.value) )
			{
				alert( "Digite o telefone corretamente." );
				this.select();
			}
		}
	}
}

// Configura um campo com as restrições de cep.
function setCEP()
{	
	for( var i = 0 ; i < arguments.length ; i++ )
	{
		var obj = document.getElementById( arguments[i] )
		
		obj.onkeypress = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( this.value.length == 5 )
				{
					this.value += "-";
				}
			}
		}
		
		obj.onkeydown = function()
		{
			if( !Pesquisa(Teclas, event.keyCode) )
			{
				if( !isNumero( event.keyCode ) )
				{
					return false;
				}
				else
				{
					return true;
				}
			}
		}
		
		// Validação ao perder o foco
		obj.onblur = function()
		{
			if( this.value != "" && !ExReg[0].test(this.value) )
			{
				alert( "Digite o CEP corretamente." );
				this.focus();
			}
		}
	}
}

function isNumero( codigo )
{
    return ( codigo >= 48 && codigo <= 57 ) || ( codigo >= 96 && codigo <= 105 );
}

function Pesquisa( vetor, vp )
{
	var	resp = false;
	for( var i = 0 ; i < vetor.length ; i++ )
	{
		if( vetor[i] == vp )
		{
			resp = true;
			break;
		}
	}
	return resp;
}

function Format()
{
	
	var	t	= arguments[0].toString(),
		n	= arguments.length - 1,
		j;
		
	for( var i = 0 ; i < n ; i++ )
	{
		j 	= "{".concat(i,"}");
		t 	= t.replace(j, arguments[i+1].toString());
	}
	
	return	t;	
	
}

function isData() // Alterar
{
	var	dia = Number(arguments[0].substr(0,2)),
		mes = Number(arguments[0].substr(3,2)) - 1,
		ano = Number(arguments[0].substr(6,4));
		
	var	data = new Date(ano, mes, dia);	
	
	return dia == data.getDate() && mes == data.getMonth() && ano == data.getFullYear();
}

function remove( string, char )
{
	while( string.indexOf(char) != -1 )
	{
		string = string.replace(char, "");
	}
	return string;
}

function isCPF( cpf )
{
	cpf = remove(remove(cpf, "."), "-");
	
	if( cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999" )
	{
		return false;
	}
	var	t = 0,
		resto,
		d1,
		d2;
	
	// D1
	for( var i = 0 ; i <= 8 ; i++ )
	{
		t += cpf.charAt(i) * (10 - i);
	}
	
	resto = t % 11;
	if( resto < 2 )
	{
		d1 = 0;
	}
	else
	{
		d1 = 11 - ( t % 11);
	}
	t = 0;
	
	// D2
	for( var i = 0 ; i <= 9 ; i++ )
	{
		t += cpf.charAt(i) * (11 - i);
	}
	resto = t % 11;
	if( resto < 2 )
	{
		d2 = 0;
	}
	else
	{
		d2 = 11 - ( t % 11);
	}
	if( d1 != cpf.charAt(9) || d2 != cpf.charAt(10) )
	{
		return false;
	}
	
	return true;
	
}

function isCNPJ( CNPJ )
{
	
	if (CNPJ.length < 18)
	{
		return false; 
	}
	
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-"))
	{
		return false;
	}
	//substituir os caracteres que não são números
	CNPJ = remove(remove(remove(CNPJ, "."), "/"), "-");
	
	if ( /\D/.test(CNPJ) ) 
	{
		return false;
	}
	
	var a = [];
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++)
	{
		   a[i] = CNPJ.charAt(i);
		   b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) 
	{ 
		a[12] = 0 
	} 
	else 
	{ 
		a[12] = 11-x 
	}
	b = 0;
	for (y=0; y<13; y++)
	{
		   b += (a[y] * c[y]); 
	}
	if ((x = b % 11) < 2)
	{ 
		a[13] = 0; 
	} 
	else 
	{ 
		a[13] = 11-x; 
	}
	
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13]))
	{
		   return false;
	}
	return true;

}