/*****************************************************************************************************

 *                                                                                                   *

 * FUNÇÃO                                RETORNO   DESCRIÇÃO                                         *

 * ------                                -------   ---------                                         *
* Ajusta_Data(input, evnt)							Ajusta máscara de Data e só permite digitação de números 
* isDigit(c)                            Boolean   	Testa se o caracter c é numero (0 a 9)            *
* isInteger (s)                         Boolean   	Testa se a string só contem numeros               *
* emailCheck(emailStr)                  Boolean   	Testa se o E-mail é valido                        *
* trim(str)                             String    	comprime espaços da string                        *
* testaCep(campoCep)                    Boolean   	Testa se o Cep é valido                           * 
* testaRadioGroup(radioObj, descricao)  Boolean   	checa se existeb alguma opção selecionada         * 
* checa_cpf (numcpf)                    Boolean   	Testa se o Cpf é valido                           *
* formatCurrency(num)                   String    	Formata número separando por (.) e (,)            *
*                                                 	Ex: formatCurrency(1000.5) = "1.000,50"           *
* validaemail(email)					string		Valida e-mail			
* FmascTempoReal(ConteudoCampo)			
* FtrataBackSpace(dado)
* FmascTempoRealDt(ConteudoCampo)
* formatar(this, '#####-###')
* testaData(dateStr)                    Boolean   	Testa se a data é valida                          *
* validaCNPJ(vlrcnpj)
* testaCgc(campoCgc)                    Boolean   	Testa se o CGC é valido                           *
* initArray()
******************************************************************************************************/
//Verifica qual o browser do visitante e armazena na variável púbica clientNavigator,
//Caso Internet Explorer(IE) outros (Other)
if (navigator.appName.indexOf('Microsoft') != -1){
	clientNavigator = "IE";
}else{
	clientNavigator = "Other";
}




function Ajusta_Data(input, evnt){
//Ajusta máscara de Data e só permite digitação de números
		if (input.value.length == 2 || input.value.length == 5){
			if(clientNavigator == "IE"){
				input.value += "/";
			}else{
				if(evnt.keyCode == 0){
					input.value += "/";
				}
			}
		}

}


function isDigit (c){
	return ((c >= "0") && (c <= "9"));
}

function isInteger (s)
{   var i;
    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }
    // All characters are numbers.
    return true;
}
function emailCheck (emailStr) {
        //remove espaços antes da verificação
        var emailStr = trim(emailStr);
        /* Critica de e-mail */
        var emailPat="/^(.+)@(.+)$/";
        var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
        var validChars="\[^\\s" + specialChars + "\]";
        var quotedUser="(\"[^\"]*\")";
        var ipDomainPat="/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/";
        var atom=validChars + "+";
        var word="(" + atom + "|" + quotedUser + ")";
        var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
        var matchArray=emailStr.match(emailPat);

        if (matchArray==null) {
                alert("O endereço de e-mail parece incorreto (verifique @ e .'s)");
                return false;
        }

        var user=matchArray[1];
        var domain=matchArray[2];

		if (user.match(userPat)==null) {
            alert("O nome de usuário do e-mail não parece ser válido.");
            return false;
        }

        var IPArray=domain.match(ipDomainPat);

        if (IPArray!=null) {
                  for (var i=1;i<=4;i++) {
	                  if (IPArray[i]>255) {

                        alert("O endereço IP de destino do e-mail é inválido!");

                        return false;

                    }

            }

            return true;
        }

        var domainArray=domain.match(domainPat);

        if (domainArray==null) {
            alert("O nome do domínio do e-mail não parece ser válido.");
            return false;
        }

        var atomPat=new RegExp(atom,"g");
        var domArr=domain.match(atomPat);
        var len=domArr.length;
		
        if (domArr[domArr.length-1].length<2 ||
           domArr[domArr.length-1].length>3) {
           alert("O endereço de e-mail deve terminar com um domínio de 3 letras ou um país com 2 letras.");
           return false;
        }
        if (len<2) {
           var errStr="Este endereço de e-mail não possui um nome de Host!";
           alert(errStr);
           return false;
        }
        return true;
}

function trim(str) {

  str = str.toString().replace(/\$|\ /g,'');

  return str;

}


function testaCep(campoCep)
{
        /* Critica de CEP - função principal */
        var num1 = new initArrayCep(9);
        if((campoCep == null) || (campoCep == "00000-000")) {
              alert("CEP nulo");
            return false; }
        if(campoCep.length != 9) {
            alert("CEP diferente de 9 posições");
            return false; }
        if((campoCep.substr(5,1) != "-") || (!isInteger(campoCep.substr(0,5)))
                 || (!isInteger(campoCep.substr(6,3))))
         {
            alert("CEP deve estar no formato NNNNN-NNN");
            return false;
         }
	return true;
}

function initArrayCep(){
	/* Critica de Cep - Sub-funcao */
	this.length = initArrayCep.arguments.length;
	for (var i = 0 ; i < 9 ; i++){
		this[i] = " ";
	}
}

function testaRadioGroup(radioObj, descricao){
	for(i = 0; i < radioObj.length; i++) {
	    if (radioObj[i].checked)
	    	return true;
		}

        if (trim(descricao) != "" && trim(descricao) != " "){
            alert("Deve ser selecionada uma opção de " + descricao);
            return false;
		}

}

function checa_cpf (numcpf){
		// teste se o cpf tem 11 numeros repetidos (iguais)  
        if (temRepeticao(numcpf,10)) {
          //alert ("Número do CPF inválido !!!");
          return false;
        }
        x = 0;

        soma = 0;

        dig1 = 0;

        dig2 = 0;

        texto = "";

        numcpf1="";

        len = numcpf.length; x = len -1;

        // var numcpf = "12345678909";

        for (var i=0; i <= len - 3; i++) {

                y = numcpf.substring(i,i+1);

                soma = soma + ( y * x);

                x = x - 1;

                texto = texto + y;

        }

        dig1 = 11 - (soma % 11);

        if (dig1 == 10) dig1=0 ;

        if (dig1 == 11) dig1=0 ;

        numcpf1 = numcpf.substring(0,len - 2) + dig1 ;

        x = 11; soma=0;

        for (var i=0; i <= len - 2; i++) {

                soma = soma + (numcpf1.substring(i,i+1) * x);

                x = x - 1;

        }

        dig2= 11 - (soma % 11);

        if (dig2 == 10) dig2=0;

        if (dig2 == 11) dig2=0;

        //alert ("Digito Verificador : " + dig1 + "" + dig2);

        if ((dig1 + "" + dig2) == numcpf.substring(len,len-2)) {

                return true;

        }

        //alert ("Número do CPF inválido !!!");

        falso = "F";

        return false;
}

function temRepeticao(str, num){
  var cont = 0;
  var num = parseInt(num,10);
  for (i = 0; i <= str.length - 1; i++) {
    cont = 0; 
    for (j = i + 1; j <= str.length - 1; j++) {
	  if (str.substr(i,1) == str.substr(j,1))
	    cont++;
	  else
	    break;
	}
	if (cont >= num) 
	  break;
  }
  return (cont >= num);
}

function formatCurrency(num){
	num = num.toString().replace(/\$|\./g,'');
	num = num.toString().replace(/\$|\,/g,'.');
	if(isNaN(num)) num = "0";
	cents = Math.floor((num*100+0.5)%100);
	num = Math.floor(num).toString();
	if(cents < 10) cents = "0" + cents;
		for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
			num = num.substring(0,num.length-(4*i+3))+'.'+num.substring(num.length-(4*i+3));
		return (num + ',' + cents);
}

	function validaemail(email){
		invalidChars = "/:,;"
		if(email == ""){ //nao pode ser vazio
			return false
		}
		for(i=0; i<invalidChars.length; i++){ // contem algum caracter invalido?
			badChar = invalidChars.charAt(i)
			if(email.indexOf(badChar,0) > -1){
				return false
			}
		}
		atPos = email.indexOf("@", 1) //deve haver um simbolo @
		if(atPos == -1){
			return false
		}
		if(email.indexOf("@", atPos+1) != -1){	//e somente um simbolo @
			return false
		}
		periodPos = email.indexOf(".", atPos)
		if(periodPos == -1){	//e pelo menos um "." apos o @
			return false
		}
		if(periodPos+3 >email.lengh){	//deve haver pelo menos 2 caracteres apos "."
			return false
		}
		return true
	}
	
	
function FmascTempoReal(ConteudoCampo){
  if (((event.keyCode) > 47) && ((event.keyCode) < 58)){
    NumDig = ConteudoCampo.value;
    TamDig = NumDig.length;
    Contador = 0;
    if (TamDig > 1){
      numer = "";
      for (i = TamDig; (i >= 0); i--){
          if ((parseInt(NumDig.substr(i,1))>=0) && (parseInt(NumDig.substr(i, 1))<=9))
            {
             Contador++;
             if ((Contador == 2) && ((TamDig -i) < 4))
              {numer = ","+numer;
               Contador = 0;
               }
             else if (Contador == 3)
              {numer = "."+numer;
               Contador = 0;
              }
             numer = NumDig.substr(i, 1)+numer;
            }
           }
      ConteudoCampo.value = numer;
      };
   return(true)}
   else return(false)
}
	
function FtrataBackSpace(dado)
{
   NumDig = dado.value;
   TamDig = NumDig.length;
   TamDig--;
   Contador = 0;
   if ((TamDig >= 0) && (event.keyCode == 8))
    { numer = "";
      for (i = TamDig; (i >= 0); i--){
          if ((parseInt(NumDig.substr(i,1))>=0) && (parseInt(NumDig.substr(i, 1))<=9))
            {
             Contador++;
			 /*alert(NumDig.substr(i, 1) + " Contador " + Contador+ " numer "+ numer+ " TamDig " +TamDig + " i " + i );*/
             if ((Contador == 4) && ((TamDig -i) < 5))
              {numer = ","+numer;
               Contador = 0;
               }
             else if ((Contador == 3) && ((numer.length) > 4))
              {numer = "."+numer;
               Contador = 0;
              }

             numer = NumDig.substr(i, 1)+numer;

            }
			}
			if (numer == "001")
			    numer="";
			if ((numer.length) == 3 )
			    numer= "0," + numer;

		dado.value = numer;
      };
}

function FmascTempoRealDt(ConteudoCampo)
{

if (((event.keyCode) > 47) && ((event.keyCode) < 58))
  {
   NumDig = ConteudoCampo.value;
   
   TamDig = NumDig.length;
   if (TamDig == 2)
      ConteudoCampo.value = NumDig.substr(0,2)+"/";
   else if (TamDig == 5)
      ConteudoCampo.value = NumDig.substr(0,5)+"/";
   else if (TamDig == 9)
       ConteudoCampo.value = NumDig.substr(0,10);

   return(true);}
else return(false)}


/*
Formatação para qualquer mascara 
Cep OnKeyPress="formatar(this, '#####-###')"
Cpf OnKeyPress="formatar(this, '###.###.###-##')"
DATA OnKeyPress="formatar(this, '##/##/####')"


*/
function formatar(src, mask){
	var i = src.value.length;
  	var saida = mask.substring(0,1);
  	var texto = mask.substring(i)
	
	if (texto.substring(0,1) != saida){
		src.value += texto.substring(0,1);
	}
}

function testaData(dateStr) {
	// testa data em branco -> usa função trim
	dateStr = trim(dateStr);
	if (trim(dateStr) == "") {
		alert("Data é Campo Obrigatório");
		return false;
	}
	
	// testa numero de caracteres da data
	if (dateStr.length != 10) {
		alert("Formato de data inválido. Utilize o formato dd/mm/aaaa");
		return false;
	}
	
	// Checks for the following valid date formats:
	// DD/MM/YY   DD/MM/YYYY   DD-MM-YY   DD-MM-YYYY
	// Also separates date into month, day, and year variables
	// To require a 2 digit year entry, use this line instead:
	var datePat = "/^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/";
	
	// To require a 4 digit year entry, use this line instead:
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (matchArray == null) {
		alert("Data deve estar no formato DD/MM/AAAA");
		return false;
	}
	
	day = matchArray[1];
	month = matchArray[3]; // parse date into variables
	year = matchArray[4];
	
	if (day < 1 || day > 31) {
		alert("Dia deve ser entre 1 e 31.");
		return false;
	}
	
	if (month < 1 || month > 12) { // check month range
		alert("Mês deve ser entre 1 e 12.");
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("Mês "+month+" não tem 31 dias!");
		return false;
	}
	
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	
		if (day>29 || (day==29 && !isleap)) {
		
			alert("Fevereiro " + year + " não tem " + day + " dias!");
			return false;
		}
	}

	return true;  // date is valid

}

function FmascTempoReal(ConteudoCampo){
  if (((event.keyCode) > 47) && ((event.keyCode) < 58)){
    NumDig = ConteudoCampo.value;
    TamDig = NumDig.length;
    Contador = 0;
    if (TamDig > 1){
      numer = "";
      for (i = TamDig; (i >= 0); i--){
          if ((parseInt(NumDig.substr(i,1))>=0) && (parseInt(NumDig.substr(i, 1))<=9))
            {
             Contador++;
             if ((Contador == 2) && ((TamDig -i) < 4))
              {numer = ","+numer;
               Contador = 0;
               }
             else if (Contador == 3)
              {numer = "."+numer;
               Contador = 0;
              }
             numer = NumDig.substr(i, 1)+numer;
            }
           }
      ConteudoCampo.value = numer;
      };
   return(true)}
   else return(false)
}


function validaCNPJ(vlrcnpj) {
	CNPJ = vlrcnpj; //document.validacao.CNPJID.value;
	erro = new String;
	if (CNPJ.length < 18) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
	if (erro.length == 0) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	}
	//substituir os caracteres que nao sao numeros
	if(document.layers && parseInt(navigator.appVersion) == 4){
	x = CNPJ.substring(0,2);
	x += CNPJ.substring(3,6);
	x += CNPJ.substring(7,10);
	x += CNPJ.substring(11,15);
	x += CNPJ.substring(16,18);
	CNPJ = x;
	} else {
	CNPJ = CNPJ.replace(".","");
	CNPJ = CNPJ.replace(".","");
	CNPJ = CNPJ.replace("-","");
	CNPJ = CNPJ.replace("/","");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro += "A verificacao de CNPJ suporta apenas numeros! \n\n";
	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])){
	erro +="Digito verificador com problema!";
	}
	if (erro.length > 0){
	alert(erro);
	return false;
	} else {
	alert("CNPJ valido!");
	}
	return true;
	}

function testaCgc(campoCgc){
	var num1 = new initArray(14);
	if(campoCgc == null){     //alert("CNPJ nulo");
		return false;
	}
	
	if(campoCgc.length != 14){
		//alert("CNPJ diferente de 14 posições");
		return false;
	}

	for (var i = 0 ; i < 14 ; i++){
		num1[i] = campoCgc.substring(i, i+1);
	}
	digito13 = calculaDigito(13, num1);
	digito14 = calculaDigito(14, num1);

	if (num1[12]==(digito13) && num1[13]==(digito14)){
		return true;  
	}
	else {
		//alert("CNPJ incorreto");
		return false;  
	}
}

function initArray(){
	this.length = initArray.arguments.length;
	for (var i = 0 ; i < 14 ; i++){
		this[i] = " ";
	}
}