// JavaScript Document
// Funções para validação de campos
// Luciana de Paula Brito
// Janeiro de 2004

// Decodifica valores passados por get 
function escapeTxt(os)
{
	var ns='';
	var t;
	var chr='';
	var cc='';
	var tn='';
	for(i=0;i<256;i++)
		{
		tn=i.toString(16);
		if(tn.length<2)
			tn="0"+tn;
		cc+=tn;
		chr+=unescape('%'+tn);
		}
	cc=cc.toUpperCase();
	os.replace(String.fromCharCode(13)+'',"%13");
	for(q=0;q<os.length;q++)
		{
			t=os.substr(q,1);
			for(i=0;i<chr.length;i++)	
			{
			if(t==chr.substr(i,1))
				{
				t=t.replace(chr.substr(i,1),"%"+cc.substr(i*2,2));
				i=chr.length;
				}
			}
		ns+=t;
		}
	return ns;
}

function unescapeTxt(s)
{
	return unescape(s);
}

//limpa os campos
function LimpaCampos(form)
{
	var  len = form.length
	for (i=0;i<len;i++)
		{
		if (form.elements[i].type == 'text')
			form.elements[i].value = "";
		}
}

// Ajusta o foco para o primeiro campo do formulário
function setFocus()
{
	if (document.forms.length > 0)
	 	for (j = 0; document.forms[j]; j++)
		{
			for (i = 0; document.forms[j].elements[i]; i++)
			{
				tipo = document.forms[j].elements[i].type;
				if (tipo == "text" || tipo == "checkbox" || tipo == "file" || tipo == "radio")
				{
					if (!document.forms[j].elements[i].disabled)
					{
						document.forms[j].elements[i].focus();
						return true;
					}
				}
			}
		}
}
//Compara duas Datas
//saida
//-1 se data1 é menor que data2
//0 se forem iguais
//1 se data1 é maior que data2
function cmp_date(dt1, dt2)
{
	var date1 = new Date(dt1.substring(6,10), dt1.substring(3,5)-1,dt1.substring(0,2));
	var date2 = new Date(dt2.substring(6,10), dt2.substring(3,5)-1,dt2.substring(0,2));

//(form.DtFinal.value, form.DtInicial.value) != 1)

	if (date1 >= date2)
		return 1;
	else if(date1 < date2)
		return -1;
	else 
		return 0;
}

function cmp_dateOP(dt1, dt2)
{
	var date1 = new Date(dt1.substring(6,10), dt1.substring(3,5)-1,dt1.substring(0,2));
	var date2 = new Date(dt2.substring(6,10), dt2.substring(3,5)-1,dt2.substring(0,2));

//(form.DtFinal.value, form.DtInicial.value) != 1)

	if (date1 > date2)
		return 1;
	else if(date1 <= date2)
		return -1;
	else 
		return 0;
}

// desabilita todos os objetos
function DesabilitaTudo()
{
	for (j = 0; document.forms[j]; j++)
		for (i = 0; document.forms[j].elements[i]; i++)
			document.forms[j].elements[i].disabled = true;
}

// habilita e desabilita elementos de form
function Habilita(Elemento)
{
	Elemento.disabled = false;
	Elemento.style.background  = "white";
}

function Desabilita(Elemento)
{
	Elemento.disabled = true;
	Elemento.style.background  = "silver";
}

// habilita e desabilita field segundo checkbox
function HabilitarCheckbox(ckb,field)
{
	if (ckb.checked == true)
		Habilita(field);
	else
		Desabilita(field);
}

// n é o número do radio
function HabilitarRadio(rd,n,field)
{
	if (rd[parseInt(n)].checked == true)
		Habilita(field);
	else
		Desabilita(field);
}

function Integer()
{
	tecla = event.keyCode;
	Vchar = String.fromCharCode(tecla);
	er = /^[0-9]$/;
	if (!er.test(Vchar))
		event.returnValue = false;
}
function ValidarRadio(radio, size)
{
	for (i = 0; i < size; i++)
	{
		if (radio[i].checked == true)
			return true;
	}
	return false;
}
function ValidarEmail(email)
{
    er = /^[a-z0-9\._-]+@([a-z0-9-]{2,26}(\.[a-z0-9-]{2,26})+)|([0-9-]{1,3}\.[0-9-]{1,3}\.[0-9-]{1,3}\.[0-9-]{1,3})1$/;
    if (!er.test(email.toLowerCase())) return false;
    else return true;
}

function ValidarCNPJ(cnpj)
{
   cnpj = cnpj.replace(/[^0-9]/g,"");
   dac1=0; dac2=0; dac=""; dact=""; sum=0;
   dac = cnpj.substring(cnpj.length-2,cnpj.length);
   cnpj = cnpj.substring(0,cnpj.length-2);
   for(i=cnpj.length-1,j=2;i>=0;i--,j++)
   {
      j = (j==10) ? 2 : j;
      sum += (cnpj.substring(i,i+1)*j);
   }
   dac1 = ((sum*10)% 11);
   dac1 = (dac1==10) ? 0 : dac1;
   sum = 0;
   for (i=cnpj.length-1,j=3;i>=0;i--,j++)
   {
      j = (j==10) ? 2 : j;
      sum += (cnpj.substring(i, i + 1) * j);
   }
   sum+= (dac1*2);
   dac2 = ((sum*10)%11);
   dac2 = (dac2==10) ? 0 : dac2;
   dact = dac1+""+dac2;
   if (dact == dac)
      return true;
   else
      return false;
}

function ValidarCPF(cpf)
{
	er = /$1{11}^/;
	if (er.test(cpf))
		return false;
    cpf = cpf.replace(/[^0-9]/g,"");
    if (cpf.length!=11)
		return false;
    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)
		return false;
    d1 = 11 - (d1%11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(0) != d1)
		return false;
    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)
        return false;
    return true;
}

function ValidarData(data)
{
    data = data.replace(/[^0-9]/g,"");
    if (data.length != 8)
		return false;
    if (isNaN(data))
		return false;
    var dia = data.substr(0,2);
	var mes = data.substr(2,2);
	var ano = data.substr(4,4);
    if ((dia<1) || (dia>31))
		return false;
    if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && (dia>31))
		return false;
    if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && (dia>30))
		return false;
	if ((mes > 12) || (mes<1))
		return false;
	if ((mes==2) && (isAnoBisexto(ano)) && (dia>29))
		return false;
    else if ((mes==2) && (!isAnoBisexto(ano)) && (dia>28))
		return false;
	else if (ano < 1900 || ano > 2078) //como data eh do tipo smalldatetime nao eh permitido salvar uma ano anterior a 1900, por restricoes do banco
		return false;
    return true;
}


function isAnoBisexto(ano)
{
    if ((ano%100==0) && (ano%400==0))
		return true;
    else if ((ano%4)==0)
		return true;
    return false;
}

function ValidarCEP(valor)
{
    er= /^[0-9]{5}-?[0-9]{3}$/;
    if (!er.test(valor)) return false;
    else return true;
}

function ValidarValor(Campo, Teto)
{ 
	vr = Campo;
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ",", "." );
	if (parseFloat(vr) > parseFloat(Teto))
		return false;
	else
		return true;
}

function ValidarValorZero(Campo)
{ 
	vr = Campo;
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ",", "." );
	if (parseFloat(vr) > parseFloat("0,00"))
		return true;
	else
		return false;
}

function ValidarCampo(Campo, Descricao, Tamanho, TipoValidacao)
{
// 1 - N dígitos,  2 - Vazio, 3 - E-mail, 4 - CNPJ, 5 - CEP, 6 - Mínimo N dígitos, 7 - Mínimo N caracteres
// 8 - CPF, 9 - Data, 10 - Valor > Teto, 11 - Valor == 0,00, 12 - Seleção de select, 13 - Seleção de Radio
	switch (TipoValidacao)
	{
		// Valida tamanho
		case 1:
			if (Campo.value.length != Tamanho)
			{
				alert("O campo " + Descricao + " deve conter " + Tamanho + " dígitos.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida se o campo está vazio
		case 2:
			if (Campo.value.length == 0)
			{
				alert("O campo " + Descricao + " é de preenchimento obrigatório.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida e-mail
		case 3:
			if (!ValidarEmail(Campo.value))
			{
				alert("O campo " + Descricao + " não é um e-mail válido.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida CNPJ
		case 4:
			if (!ValidarCNPJ(Campo.value))
			{
				alert("O campo " + Descricao + " é inválido.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida CEP
		case 5:
			if (!ValidarCEP(Campo.value))
			{
				alert("O campo " + Descricao + " é inválido.");
				Campo.focus();
				return false;				
			}
			else
				break;
		// Valida tamanho mínimo em dígitos
		case 6:
			if (Campo.value.length < Tamanho)
			{
				alert("O campo " + Descricao + " deve conter no mínimo " + Tamanho + " dígitos.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida tamanho mínimo em caracteres
		case 7:
			if (Campo.value.length < Tamanho)
			{
				alert("O campo " + Descricao + " deve conter no mínimo " + Tamanho + " caracteres.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida CPF
		case 8:
			if (!ValidarCPF(Campo.value))
			{
				alert("O campo " + Descricao + " é inválido.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida data
		case 9:
			if (!ValidarData(Campo.value,Tamanho))
			{
				alert("O campo " + Descricao + " é inválido.");
				if(Tamanho!=99)
				{
					Campo.focus();
				}
				return false;
			}
			else
				break;
		// Valida campo > teto
		case 10:
			if (!ValidarValor(Campo.value, Tamanho))
			{
				alert("O campo " + Descricao + " não pode ser maior que " + Tamanho + "%")
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida campo == 0,00
		case 11:
			if (!ValidarValorZero(Campo.value))
			{
				alert("O campo " + Descricao + " deve ser maior que 0,00")
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida seleção de select
		case 12:
			if (Campo.value == "")
			{
				alert("O campo " + Descricao + " é de seleção obrigatória")
				Campo.focus();
				return false;
			}
			else
				break;
		// Valida seleção de radio
		case 13:
			if (!ValidarRadio(Campo, Tamanho))
			{
				alert(Descricao)
				return false;
			}
			else
				break;
		// Valida tamanho minimo
		case 14:
			if (Campo.value.length != Tamanho)
			{
				alert("O campo " + Descricao + " deve conter até " + Tamanho + " dígitos.");
				Campo.focus();
				return false;
			}
			else
				break;
		// Verifica se o valor do campo é um CNPJ ou um CPF
		case 15:
			if (!ValidarCNPJ(Campo.value))
			{
				if (!ValidarCPF(Campo.value))
				{
					alert("O campo " + Descricao + " é inválido.");
					Campo.focus();
					return false;
				}
			}
			else
				break;
	}
	return true;
}

// Move elementos selecionados da lista I para lista II
function MoverElementosLista(ListaI,ListaII)
{
  tamanho_ListaI = ListaI.length;

  for (var i=tamanho_ListaI-1; i>=0; i--)
  {
    if (ListaI.options[i].selected)
    {
      valor = ListaI[i].value;
      nome = ListaI[i].text;
      var option0 = new Option(nome, valor);
      ListaII.options[ListaII.length] = option0;
	  ListaI.options[i] = null;
	}
  }
}

// Move todos os elementos da lista 1 para lista 2, indicando se á da direita para esq ou contrário
function MoverTodosElementosLista(ListaI,ListaII,dir_ou_esq)
{
  teste = true;

  // 1 adiciona, 2 remove
  if (dir_ou_esq == "1" && !confirm('Você quer realmente adicionar toda a lista?'))
  	teste = false;
  else if (dir_ou_esq == "2" && !confirm('Você quer realmente apagar a lista?'))
   	teste = false;
  
  if (teste)
  {
    tamanho_ListaI = ListaI.length;

    for (var i=tamanho_ListaI-1; i>=0; i--)
    { 
	  	valor = ListaI[i].value;
     	nome = ListaI[i].text;
     	var option0 = new Option(nome, valor);
        ListaII.options[ListaII.length] = option0;
	    ListaI.options[i] = null;	
	}	
  }
}
//Valida se a data digitada pelo usuario é maior que a data atual, fornecida pelo servidor
function DataAtual(dt1, dt2, mensagem)
{
	var data1 = dt1.value;
	var data2 = dt2;

	var hj = new Date(data2.substring(6,10), data2.substring(3,5)-1,data2.substring(0,2));
	var otra = new Date(data1.substring(6,10), data1.substring(3,5)-1,data1.substring(0,2));
	
	var dias = (hj - otra) / (1000 * 60 * 60 * 24);

	if (dias < 0)
	{
	if (mensagem == "")
		alert ("A data deve ser inferior a data atual.");
	if (mensagem != "")
		alert ("A data "+mensagem+" deve ser inferior a data atual.");
	dt1.focus();
	return false;
	}

	return true;
}
function ShowCep()
{
	open('../cep/cepFrm.php','ShowCep','location=no,resize=no, width=368,height=370,left=18,top=18,maximized=0,scrollbars=1');
	/*open('http://www.correios.com.br/servicos/cep/cep_default.cfm','ShowCep','location=no,resize=no, width=730,height=400,left=18,top=18,maximized=0,scrollbars=1');*/
}
function ShowEnd()
{
	open('../cep/lagFrm.php','ShowCep','location=no,resize=no, width=368,height=230,left=18,top=18,maximized=0,scrollbars=1');
	/*open('http://www.correios.com.br/servicos/cep/cep_default.cfm','ShowCep','location=no,resize=no, width=730,height=400,left=18,top=18,maximized=0,scrollbars=1');*/
}
