//***************************************************
//* rotinas em javascript
//***************************************************

function addZerosLeft(strField, intLength) {
// adiciona zeros aa esquerda
  var intDifer = intLength - strField.length;

  for (var i = 0; i < intDifer; i++) {
    strField = "0" + strField;
  }  //end for

  return strField;
}

function exists(strField) {
// consitencia fisica, verifica se campo foi informado e nao possui "branco(s)"

  var intFieldL, intBlankFound;

  intFieldL = strField.length;
  intBlankFound = 0;

  if (intFieldL == 0) { // nao informado, nulo
     return false; 
  }
  else {
     for (var i = 0; i < intFieldL; i++) { //verifica se existe algum caracter "branco" na string

       if (strField.charAt(i) == " ") {
         intBlankFound = 1;
         break;
       }
     } //end for

     if (intBlankFound) {
       return false;
     }
     else {
       return true;
     }
  }
}

function isANumber(strField) {
//consistencia fisica, verifica se eh numerico

  if (!parseFloat(strField)) {
     return false;
  }
  else {
     for (var i=0; i < strField.length; i++) {
       if (strField.charAt(i) != "0") {
          if (!parseInt(strField.charAt(i))) {
             return false;
          }
       }
     } //end for

     return true;
  }
}

function isCNPJorCPFValid(strField) {
//verifica se CNPJ ou CPF sao validos

  var strFieldL = strField.length;

  if (strFieldL < 12) {
//--------------------------------------inicio CPF -------------------------//
    if (strFieldL < 6) {
	   return false;
	}
    
    strField = addZerosLeft(strField, 11);

    //verifica CPF
    var intDGCalc = 0;
    var strCPF = strField.substring(0, 9);
    var strDG = strField.substring(9, 11);
	var invalidCPFs = new Array("11111111111", "22222222222", "333333333", "44444444444", "55555555555", "66666666666", "77777777777", "88888888888", "999999999");
	var flagCPF = false;
	
	for (var i = 0; i < 9; i++) {
		flagCPF = strField.indexOf(invalidCPFs[i]);

		if (flagCPF > -1) {
		   return false;
		}
	}

    //calcula primeiro digito
    for (var i = 0; i < 9; i++) {
       intDGCalc += parseInt(strCPF.charAt(i)) * (10-i);
    }//end for

    intDGCalc = 11 - (intDGCalc % 11);

    if (intDGCalc > 9) { intDGCalc = 0; }
    //verifica se digito 1 estah correto
    if ( intDGCalc != parseInt(strDG.charAt(0)) ) {
      return false;
    }

    // calcula segundo digito
    intDGCalc *=2;

    for (var i = 0; i < 9; i++) {
       intDGCalc += parseInt(strCPF.charAt(i)) * (11-i);
    }//end for

    intDGCalc = 11 - (intDGCalc % 11);

    if (intDGCalc > 9) { intDGCalc = 0; }
    //verifica se digito 2 estah correto
    if (intDGCalc != parseInt(strDG.charAt(1)) ) {
      return false;
    }

    // consistencia OK
    return true;

  }
//---------------------------fim CPF ---------------------------------------------//

  else {
//---------------------------inicio CNPJ -----------------------------------------//
    var intFatorA = new Array(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2);
    strField = addZerosLeft(strField, 14);

    //verifica CNPJ
    var intDGCalc = 0;
    var strCNPJ = strField.substring(0, 12);
    var strDG = strField.substring(12, 14);

    //calcula primeiro digito
    for (var i = 0; i < 12; i++) {
       intDGCalc += parseInt(strCNPJ.charAt(i)) * intFatorA[i+1];
    }//end for

    intDGCalc = 11 - (intDGCalc % 11);

    if (intDGCalc > 9) { intDGCalc = 0; }

    //verifica se digito 1 estah correto
    if ( intDGCalc != parseInt(strDG.charAt(0)) ) {
      return false;
    }

    // calcula segundo digito
    intDGCalc *=2;

    for (var i = 0; i < 12; i++) {
       intDGCalc += parseInt(strCNPJ.charAt(i)) * intFatorA[i];
    }//end for

    intDGCalc = 11 - (intDGCalc % 11);

    if (intDGCalc > 9) { intDGCalc = 0; }

    //verifica se digito 2 estah correto
    if (intDGCalc != parseInt(strDG.charAt(1)) ) {
      return false;
    }

    // consistencia OK
    return true;

//---------------------------fim CNPJ  -------------------------------------------//
  }  

}

function existsWithBlank(strField) {
// consitencia fisica, verifica se campo foi informado

  var intFieldL, intBlankFound;

  intFieldL = strField.length;
  intBlankFound = 0;

  if (intFieldL == 0) { // nao informado, nulo
     return false; 
  }
  else {
     for (var i = 0; i < intFieldL; i++) { //conta "branco(s)" na string

       if (strField.charAt(i) == " ") {
         intBlankFound += 1;
       }
     } //end for

     if (intBlankFound == intFieldL) {
       return false;
     }
     else {
       return true;
     }
  }
}

function emailOK(strField) {

  if (strField.indexOf("@") < 3){
     return false;
  }

  if ((strField.indexOf(".com") < 5)&&(strField.indexOf(".org") < 5) &&(strField.indexOf(".gov") < 5)&&(strField.indexOf(".net") < 5) &&(strField.indexOf(".mil") < 5)&&(strField.indexOf(".edu")<5)){
     return false;
  }
  return true;
}
function maskInput (keyPressed, obj, option) {
//funcao para ajuda na entrada de dados, formatando os campos de cep, data e telefone
	var numeric = "01234567890";
	
	if (option=="cep") {
		if (String.fromCharCode(keyPressed) == parseInt(String.fromCharCode(keyPressed)) ) {
			if (obj.value.length == 5) {
			   obj.value = obj.value + "-";
			}
		}
		else {
			event.returnValue = false;
		}
	}
	else if (option=="date") {
		if (String.fromCharCode(keyPressed) == parseInt(String.fromCharCode(keyPressed)) ) {
			if ( (obj.value.length == 2) || (obj.value.length == 5) ) {
			   obj.value = obj.value + "/";
			}
		}
		else {
			event.returnValue = false;
		}
	}
	else { //telefone
		if (String.fromCharCode(keyPressed) == parseInt(String.fromCharCode(keyPressed)) ) {
			if (obj.value.length == 1) {
			   obj.value = "(" + obj.value;
			}
			else if (obj.value.length == 3) {
			   obj.value = obj.value + ")";
			}
			else if (obj.value.length == 8) {
			   obj.value = obj.value + "-"
			}
		}
		else {
			event.returnValue = false;
		}
	}
}

function dateValid(dateInput) {
    var now = new Date();
    var ano = now.getYear();
    var strDate = dateInput;

	var dayDate = strDate.substring(0,2);
	var slash1Date = strDate.substring(2,3);
	var monthDate = strDate.substring(3,5);
	var slash2Date = strDate.substring(5,6);
	var yearDate = strDate.substring(6,10);		
	
	//verifica se as barras estao no lugar certo
	if ( (slash1Date != "/") || (slash2Date != "/") ) {
	   return false;
	}
	
	//consistencia de data propriamente dito
    if ( (isANumber(dayDate)) && (isANumber(monthDate)) && (isANumber(yearDate)) ) {

     //consiste ANO
        if (yearDate.length < 4) {
		   return false;
		}
//		if ( (yearDate < 1900) || (yearDate > ano) ) { // tirado, validade da habilitacao
		if (yearDate < 1900) {
		   return false;
		}
     //consiste MES
        if ( (monthDate < 1) || (monthDate > 12) ) {
		   return false;
		}
     //consiste DIA
	    if ( (dayDate < 1) || (dayDate > 31) ) {
		   return false;
		}
        if ( (dayDate =="31") && ( (monthDate =="04") || (monthDate =="06") || (monthDate =="09") || (monthDate =="11") ) ) {
           return false;
		}

     //consiste Ano Bissexto
		if (monthDate == "02") {
			if (!(yearDate%4)) {
				if (dayDate > 29) {
					return false;
				}
			}
			else if (dayDate > 28) {
				return false;
			}
		}
    }
	else {
	  return false;
	}
	
	return true;
}

function diffDates(dtInputEnd, dtInputStart) {
//verifica diferenca de datas

	var dayDtEnd = dtInputEnd.substring(0,2);
	var monthDtEnd = dtInputEnd.substring(3,5);
	var yearDtEnd = dtInputEnd.substring(6,10);		

	var dayDtStart = dtInputStart.substring(0,2);
	var monthDtStart = dtInputStart.substring(3,5);
	var yearDtStart = dtInputStart.substring(6,10);		

    var dtEndFmtYMD = parseFloat(yearDtEnd + monthDtEnd + dayDtEnd);
	var dtStartFmtYMD = parseFloat(yearDtStart + monthDtStart + dayDtStart);

    var diff = dtEndFmtYMD - dtStartFmtYMD;

    return diff;  
}

function pisPasep(strField) {
//verifica pis/pasep

	var intFatorA = new Array(3, 2, 9, 8, 7, 6, 5, 4, 3, 2);
    strField = addZerosLeft(strField, 11);

    var intDGCalc = 0;
    var strPisPasep = strField.substring(0, 10);
    var strDG = strField.substring(10, 11);

    //calcula digito
    for (var i = 0; i < 10; i++) {
       intDGCalc += parseInt(strPisPasep.charAt(i)) * intFatorA[i];
    }//end for

    intDGCalc = 11 - (intDGCalc % 11);

    if (intDGCalc > 9) { intDGCalc = 0; }

    //verifica se digito 1 estah correto
    if ( intDGCalc != parseInt(strDG.charAt(0)) ) {
      return false;
    }
	
	return true;
}