var isNav4, isNav, isIE;
if (parseInt(navigator.appVersion.charAt(0)) >= 4) {
  isNav = (navigator.appName=="Netscape") ? true : false;
  isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
}

if (navigator.appName=="Netscape") {
        isNav4 = (parseInt(navigator.appVersion.charAt(0))==4);
}

var NUM_DIGITOS_CPF  = 11;

/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
	var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
} //String.lpad

/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim

/**
 * Elimina caracteres de formatação e zeros à esquerda da string
 * de número fornecida.
 * @param String pNum
 *      String de número fornecida para ser desformatada.
 * @return String de número desformatada.
 */
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "").lpad(NUM_DIGITOS_CPF, '0');
} //unformatNumber

/**
 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de
 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
 * informa se o número-efetivo fornecido é CNPJ (default = false).
 * @param String pEfetivo
 *      String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é de um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String com os dois dígitos verificadores.
 */
function dvCpf(pEfetivo)
{
	var i, j, k, soma, dv;
	var cicloPeso = NUM_DIGITOS_CPF;
	var maxDigitos = NUM_DIGITOS_CPF;
	var calculado = unformatNumber(pEfetivo);
	calculado = calculado.substring(2, maxDigitos);
	var result = "";

	for (j = 1; j <= 2; j++)
	{
		k = 2;
		soma = 0;
		for (i = calculado.length-1; i >= 0; i--)
		{
			soma += (calculado.charAt(i) - '0') * k;
			k = (k-1) % cicloPeso + 2;
		}
		dv = 11 - soma % 11;
		if (dv > 9) dv = 0;
		calculado += dv;
		result += dv
	}

	return result;
} //dvCpfCnpj

/**
 * Testa se a String pCpf fornecida é um CPF válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpf
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF válido.
 */
function isCpf(pCpf)
{
	var numero = unformatNumber(pCpf);
	var base = numero.substring(0, numero.length - 2);
	var digitos = dvCpf(base);
	var algUnico, i;

	// Valida dígitos verificadores
	if (numero != base + digitos) return false;

	/* Não serão considerados válidos os seguintes CPF:
	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
	 */
	algUnico = true;
	for (i=1; i<NUM_DIGITOS_CPF; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	return (!algUnico);
} //isCpf

function exibirValorFormatado(e) {
   var obj,tecla;
   //verificando se o que foi digitado <E9> um n<FA>mero
   if (!soNumero(e)){
      return false;
   }
   obj = (isNav) ? e.target : event.srcElement;
   codTecla = (isNav) ? e.which : event.keyCode;
   switch (codTeclaKeyDown) {
      case 8:
         obj.value = formatarValor(obj.value.substring(0,obj.value.length-1));
         break;
      case 9:
         return true;
         break;
      case 46:
         obj.value = formatarValor(obj.value.substring(0,obj.value.length-1));
         break;
      default :
         if ((codTecla>47)&&(codTecla<58))
         {
            if (obj.maxLength>obj.value.length){
               obj.value = formatarValor(obj.value + String.fromCharCode(codTecla));
            }
         }
   }
   return false;
}

function soNumero(e) {
   var keyNumber = (isIE) ? event.keyCode : e.which;
   if (((keyNumber<48)||(keyNumber>57)) && (keyNumber!=13) && (keyNumber!="0") && (keyNumber!=8)) {
      if (isIE) {
        event.keyCode=0
      }
      return false;
   }
   return true;
}

function capturaCodTecla(e){
   codTeclaKeyDown = (isNav) ? e.which : event.keyCode;
   if (isIE) {
      switch (codTeclaKeyDown) {
         case 8:
            event.srcElement.value = formatarValor(event.srcElement.value.substring(0,event.srcElement.value.length-1));
            return false;
         break;
         case 46:
            event.srcElement.value = formatarValor(event.srcElement.value.substring(0,event.srcElement.value.length-1));
            return false;
         break;
      }
   }
}

function formatarValor(str){
   var decimal,inteiro;
   var i,count;
   STR = new String(str);
   STR = tirarZerosEsquerda(STR);
   inteiro='';
   if (STR.length == 1){
      inteiro = '0';
      decimal = '0' + STR;
   }
   else {
      if (STR.length == 2){
         inteiro  = '0';
         decimal = STR;
      }
      else{
         decimal = STR.substring(STR.length-2,STR.length);
         i=3;
         count=0;
         while (i<=STR.length){
            if (count==3) {
               inteiro = '.' + inteiro;
               count = 0;
            }
            inteiro = STR.charAt(STR.length-i) + inteiro;
            count++;
            i++;
         }
      }
   }
   if (inteiro == '') {
      inteiro = '0';
   }
   if (decimal == '') {
      decimal = '00';
   }
   return inteiro+','+decimal;
}

function tirarZerosEsquerda(STR){
   var sAux = '';
   STR = new String(STR);
   var i = 0;
   while (i < STR.length ){
      if ((STR.charAt(i)!='.') && (STR.charAt(i)!=',')){
         sAux += STR.charAt(i);
      }
      i++
   }
   STR = new String(sAux);
   sAux = '';
   i = 0;
   while (i < STR.length ){
      if (STR.charAt(i) != '0'){
         sAux = STR.substring(i,STR.length)
         i = STR.length;
      }
      i++;
   }
   return  sAux;
}

function validaEmail(email)
{
  var re;
  re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
  if (re.test(email) == true)
    return true;
  else
    return false;
}

function Mascara(formato, keypress, objeto)
{
  campo = eval (objeto);
  if (formato=='CEP')
  {
    caracteres = '0123456789';
    separacoes = 1;
    separacao1 = '-';
    conjuntos = 2;
    conjunto1 = 5;
    conjunto2 = 3;
    if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (conjunto1 + conjunto2 + 1))
    {
      if (campo.value.length == conjunto1)
        campo.value = campo.value + separacao1;
    }
    else
      event.returnValue = false;
  }
  if (formato=='TEL')
  {
    caracteres = '0123456789 ';
    separacoes = 1;
    separacao1 = '-';
    conjuntos = 2;
    conjunto1 = 4;
    conjunto2 = 4;
    if ((caracteres.search(String.fromCharCode (keypress))!=-1) && campo.value.length < (conjunto1 + conjunto2 + 1))
    {
      if (campo.value.length == conjunto1)
        campo.value = campo.value + separacao1;
    }
    else
      event.returnValue = false;
  }
}

function strcount(texto,caracter)
{
  var c, cont;
  cont=0;
  for(c=0;c<texto.length;c++)
    if (texto.charAt(c) == caracter)
        cont++;
  return cont;
}

function KeyBlock(formato)
{
  if (formato=='Numero')
  {
    if ((window.event.keyCode < 48) || (window.event.keyCode > 57))
      window.event.keyCode = 0;
  }
}

function validamask(num,formato)
{
   if (formato='TEL')
     var Numeros = "0123456789- ";
   else
     var Numeros = "0123456789-";
   var Posic, Carac;
   var Temp = num.length;
   var Cont = 0;
   for (var i=0; i < Temp; i++)
   {
     Carac =  num.charAt (i);
     Posic  = Numeros.indexOf (Carac);
     if (Posic == -1)
    	return (false);
   }
   return(true);
}

function validanum(num)
{
   var Numeros = "0123456789";
   var Posic, Carac;
   var Temp = num.length;
   var Cont = 0;
   for (var i=0; i < Temp; i++)
   {
     Carac =  num.charAt (i);
     Posic  = Numeros.indexOf(Carac);
     if (Posic == -1)
    	return (false);
   }
   return(true);
}

  function limparstring(s)
  {
    while (s.search(" ")!=-1)
      s=s.replace(" ","");
    return(s);
  }

  function set_focus(elemento)
  {
    elemento.focus();
  }

  function validaEmail(email)
  {
    var re;
    re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;
    if (re.test(email) == true)
      return true;
    else
      return false;
  }

  function valida_form(form)
  {
    var temp;
    var s;
    var i;
    var campo;
    var msg_erro;

    msg_erro="";

    for(var i=0;i<form.elements.length; i++)
    {
       temp = form.elements[i].value;
       campo = 'document.'+form.name+'.'+form.elements[i].name;
       switch(form.elements[i].getAttribute("tipo"))
       {
          case "texto":
            s = limparstring(temp);
            if (form.elements[i].getAttribute("required")==1 && s.length<=0)
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].getAttribute("desc") + " deve ser preenchido.</li>";
          break;

          case "email":
            s = limparstring(temp);
            if (form.elements[i].getAttribute("required")==1 && s.length<=0)
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].getAttribute("desc") + " deve ser preenchido.</li>";
            else if (s.length>0)
               if (!validaEmail(s))
                  msg_erro = msg_erro+"<li>Valor informado para o campo " + form.elements[i].getAttribute("desc") + " é inválido.</li>";
          break;

          case "tel":
            s = limparstring(temp);
            if (form.elements[i].getAttribute("required")==1 && s.length <=0)
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].getAttribute("desc") + " deve ser preenchido.</li>";
            else if (s.length>0)
               if (!validamask(s,'TEL'))
                  msg_erro = msg_erro+"<li>Valor informado para o campo " + form.elements[i].getAttribute("desc") + " é inválido.</li>";
          break;

          case "cpf":
            s = limparstring(temp);
            if (form.elements[i].getAttribute("required")==1 && s.length<=0)
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].desc + " deve ser preenchido.</li>";
            else if (s.length>0)
               if (!isCpf(s))
                  msg_erro = msg_erro+"<li>" + form.elements[i].desc + " inválido.</li>";
          break;

          case "cep":
            s = limparstring(temp);
            if (form.elements[i].getAttribute("required")==1 || s.length>0)
               if (!validamask(s,'CEP'))
                  msg_erro = msg_erro+"<li>Valor informado para o campo " + form.elements[i].getAttribute("desc") + " é inválido.</li>";
          break;

          case "radio":
            if (form.elements[i].getAttribute("required")==1 && !form.elements[i].checked)
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].getAttribute("desc") + " deve ser selecionado.</li>";
          break;

          case "select":
            if (form.elements[i].getAttribute("required")==1 &&
                (form.elements[i].options.selectedIndex <= 0 ||
                 form.elements[i].value.length <= 0))
               msg_erro = msg_erro+"<li>O campo " + form.elements[i].getAttribute("desc") + " deve ser selecionado.</li>";
          break;
       }
    }

    if (msg_erro.length > 0)
    {
      document.getElementById("erro").innerHTML = "Foram encontrados os seguintes erros:<br><br>"+ msg_erro;
      return false;
    }
    return true;
  }

function mOvr(src,clrOver) {
  if (!src.contains(event.fromElement)) {
	src.style.cursor = 'default';
	src.style.backgroundColor = clrOver;
  }
}

function mOut(src,clrIn) {
  if (!src.contains(event.toElement)) {
	src.style.cursor = 'default';
	src.style.backgroundColor = clrIn;
  }
}
