var isNN = (navigator.appName.indexOf("Netscape")!=-1);
function Formato_Data(input) {
var keyCode = (isNN) ? event.which : event.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
var strPonto = "."; 
var strBarra = "/"; 
var strTraco = "-"; 
if (keyCode != 8 ){ 
	if(input.value.length == 2){input.value = input.value+strBarra}
	else if(input.value.length == 5){input.value = input.value+strBarra}
	if(input.value.length >= 10 && !containsElement(filter,keyCode)) {
	input.value = input.value.slice(0, 10);
	input.form[(getIndex(input)+1) % input.form.length].focus();
	}
}
}
function Formato_Hora(input) {
var keyCode = (isNN) ? event.which : event.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
var strPonto = ":"; 
var strBarra = "/"; 
var strTraco = "-"; 
if (keyCode != 4 ){ 
	if(input.value.length == 2){input.value = input.value+strPonto}
	else if(input.value.length >= 5 && !containsElement(filter,keyCode)) {
	input.value = input.value.slice(0, 5);
	//input.form[(getIndex(input)+1) % input.form.length].focus();
	}
}
}
function Formato_CPF(input) {
var keyCode = (isNN) ? event.which : event.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
var strPonto = "."; 
var strTraco = "-";
if (keyCode != 8 ){ 
	if(input.value.length == 3){input.value = input.value+strPonto}
	else if(input.value.length == 7){input.value = input.value+strPonto}
	else if(input.value.length == 11){input.value = input.value+strTraco}
	else if(input.value.length == 14){input.value = input.value+strPonto}
	if(input.value.length >= 14 && !containsElement(filter,keyCode)) {
	input.value = input.value.slice(0, 14);
	input.form[(getIndex(input)+1) % input.form.length].focus();
	}
}
}

function Formato_CGC(input) {
var isNN = (navigator.appName.indexOf("Netscape")!=-1);
var keyCode = (isNN) ? event.which : event.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
var strPonto = "."; 
var strBarra = "/"; 
var strTraco = "-"; 
if (keyCode != 8 ){
	if(input.value.length == 2){input.value = input.value+strPonto}
	else if(input.value.length == 6){input.value = input.value+strPonto}
	else if(input.value.length == 10){input.value = input.value+strBarra}
	else if(input.value.length == 15){input.value = input.value+strTraco}
	if(input.value.length >= 18 && !containsElement(filter,keyCode)) {
	input.value = input.value.slice(0, 18);
	input.form[(getIndex(input)+1) % input.form.length].focus();
	validaCGC_CPF(input);
	}
}
}

function containsElement(arr, ele) {
var found = false, index = 0;
while(!found && index < arr.length)
if(arr[index] == ele)
found = true;
else
index++;
return found;
}
function getIndex(input) {
var index = -1, i = 0, found = false;
while (i < input.form.length && index == -1)
if (input.form[i] == input)index = i;
else i++;
return index;
}

function autoTab(input,len,e) {
var keyCode = (isNN) ? e.which : e.keyCode;
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
if(input.value.length >= len && !containsElement(filter,keyCode)) {
input.value = input.value.slice(0, len);
input.form[(getIndex(input)+1) % input.form.length].focus();
}
}

function check_cpf (StrCPF,input)
{
x = 0;
soma = 0;
dig1 = 0;
dig2 = 0;
texto = "";
StrCPF1="";
len = StrCPF.length;
x = len -1;
for (var i=0; i <= len - 3; i++)
{
y = StrCPF.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 ;
StrCPF1 = StrCPF.substring(0,len - 2) + dig1 ;
x = 11; soma=0;
for (var i=0; i <= len - 2; i++)
{
soma = soma + (StrCPF1.substring(i,i+1) * x);
x = x - 1;
}
dig2= 11 - (soma % 11);
if (dig2 == 10) dig2=0;
if (dig2 == 11) dig2=0;
if ((dig1 + "" + dig2) == StrCPF.substring(len,len-2))
{
// alert ("Número do CPF Válido !");
return true;
}
alert ("Número do CPF Inválido !");
input.form[(getIndex(input)) % input.form.length].focus();
return false;
}


function check_cgc (StrCGC,input)
{
var varFirstChr = StrCGC.charAt(0);
var vlMult,vlControle,s1, s2 = "";
var i,j,vlDgito,vlSoma = 0;
for ( var i=0; i<=13; i++ ) {

var c = StrCGC.charAt(i);
if( ! (c>="0")&&(c<="9") )
{
alert("Número do CGC Inválido !");
input.form[(getIndex(input)) % input.form.length].focus();
return false; }
if( c!=varFirstChr ) { vaCharCGC = true; }
}
if( ! vaCharCGC ) {

alert("Número do CGC Inválido !");
input.form[(getIndex(input)+1) % input.form.length].focus();
return false ;
}


s1 = StrCGC.substring(0,12);
s2 = StrCGC.substring(12,15);
vlMult = "543298765432";
vlControle = "";
for ( j=1; j<3; j++ ) {

vlSoma = 0;
for ( i=0; i<12; i++ )
{ vlSoma += eval( s1.charAt(i) )* eval( vlMult.charAt(i) );}
if( j == 2 ){ vlSoma += (2 * vlDgito); }
vlDgito = ((vlSoma*10) % 11);
if( vlDgito == 10 ){ vlDgito = 0; }
vlControle = vlControle + vlDgito;
vlMult = "654329876543";
}
if( vlControle != s2 ) {
alert("Número do CGC Inválido !");
input.form[(getIndex(input)) % input.form.length].focus();
return false;
return false;
}
else {
// alert("Número do CGC Válido !");
return true;
}


}


function validaCGC_CPF(input) {

var StrData = input.value;

var CGCPat = /^(\d{2}).(\d{3}).(\d{3})\/(\d{4})-(\d{2})/;
var CGCPat2 = /^(\d{14})/;
var CPFPat = /^(\d{3}).(\d{3}).(\d{3})-(\d{2})/;
var CPFPat2 = /^(\d{11})/;

var matchCGCArray = StrData.match(CGCPat);
var matchCGCArray2 = StrData.match(CGCPat2);
var matchCPFArray = StrData.match(CPFPat);
var matchCPFArray2 = StrData.match(CPFPat2);

if (matchCGCArray == null && matchCGCArray2 == null && matchCPFArray == null
&& matchCPFArray2 == null) {
cpfalert = 'O número do CPF deve ser informado incluindo-se os dois dígitos verificadores. Não são necessários zeros à esquerda.\nExemplo: 000.000.000-00 ou 00000000000\n\n';
cgcalert = 'O número do CGC deve ser informado incluindo-se os 14 dígitos. Não são necessários zeros à esquerda.\nExemplo: 00.000.000\/0000-00 ou 00000000000000';

alert('Vc deve fornecer um CGC ou um CPF valido\n\n' + cpfalert + cgcalert);

return false;
return false;
}
else if(matchCGCArray != null) {
StrData = matchCGCArray[1] + matchCGCArray[2] + matchCGCArray[3] +
matchCGCArray[4] + matchCGCArray[5] ;
check_cgc(StrData,input);
}
else if(matchCGCArray2 != null) {
StrData = matchCGCArray2[1];
check_cgc(StrData,input);
}
else if(matchCPFArray != null) {
StrData = matchCPFArray[1] + matchCPFArray[2] + matchCPFArray[3] +
matchCPFArray[4];
check_cpf(StrData,input);
}
else if(matchCPFArray2 != null) {
StrData = matchCPFArray2[1];
check_cpf(StrData,input);
}
return false;
}
var defaultEmptyOK = false;

var daysInMonth = Array(12);

daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function ValidaData(data){ 
var dia, mes, ano
  
dia = data.substr(0,2);
mes = data.substr(3,2);
ano = data.substr(6,4);
		if (ano < 1800) return false;
		
		
			// catch invalid years (not 2- or 4-digit) and invalid months and days.
			if (! (isYear(ano, false) && isMonth(mes, false) && isDay(dia, false))) return false;
		
		 
			// Explicitly change type to integer to make code work in both
			// JavaScript 1.1 and JavaScript 1.2.
			var intYear = parseInt(ano);
			var intMonth = parseInt(mes);
			var intDay = parseInt(dia);
		
			// catch invalid days, except for February
			if (intDay > daysInMonth[intMonth]) return false; 
		 
			if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
		
			return true;
}
function isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}
function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}	

function isNonnegativeInteger (s)
{   var secondArg = defaultEmptyOK;

    if (isNonnegativeInteger.arguments.length > 1)
        secondArg = isNonnegativeInteger.arguments[1];

    return (isSignedInteger(s, secondArg)
         && ( (isEmpty(s) && secondArg)  || (parseInt (s) >= 0) ) );
}
function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);

    // Catch non-integer strings to avoid creating a NaN below,
    // which isn't available on JavaScript 1.0 for Windows.
    if (!isInteger(s, false)) return false;

    // Now, explicitly change the type to integer via parseInt
    // so that the comparison code below will work both on 
    // JavaScript 1.2 (which typechecks in equality comparisons)
    // and JavaScript 1.1 and before (which doesn't).
    //var num = parseInt (s); //Problemas ao avaliar 08 e 09....
    var num = eval (s);
    return ((num >= a) && (num <= b));
}

function isSignedInteger (s)

{   if (isEmpty(s)) 
       if (isSignedInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isSignedInteger.arguments[1] == true);

    else {
        var startPos = 0;
        var secondArg = defaultEmptyOK;

        if (isSignedInteger.arguments.length > 1)
            secondArg = isSignedInteger.arguments[1];

        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;    
        return (isInteger(s.substring(startPos, s.length), secondArg))
    }
}
function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    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 isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function makeArray(n) {
//*** BUG: If I put this line in, I get two error messages:
//(1) Window.length can't be set by assignment
//(2) daysInMonth has no property indexed by 4
//If I leave it out, the code works fine.
//   this.length = n;
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}
function daysInFebruary (year)
{   // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}



  function entre(val, val1, val2) {
    if (val1 > val2) {
      var aux = val1;
      val1 = val2;
      val2 = aux;
    };
    return (val >= val1 && val <= val2);
  }

  function replaceAll(str, ant, nov) {
    resp = '';
    var list = str.split(ant);
    for (var i = 0; i < (list.length - 1); ++i)
      resp += list[i] + nov;
    resp += list[i];
    return resp;
  }

  function estaEm(letra, str) {

    var virg  = escape("%1");
    var bar   = escape("%2");
    var list  = new Array();
    var esta  = false;

    str = replaceAll(str,'//',bar);
    str = replaceAll(str,'/,',virg);
    str = replaceAll(str,bar,'/');

    var list  = str.split(',');

    for ( var i = 0; i < list.length; ++i )
      list[i] = replaceAll(list[i],virg,',');

    for ( var i = 0; i < list.length; ++i ) {
      if (list[i].length > 1) {
        esta = entre(letra, list[i].charAt(0),
                           list[i].charAt(list[i].length - 1));
      }
      else if (list[i].length == 1) {
        esta = letra == list[i];
      };
      if (esta)
        break;
    };
    return esta;
  }

  function checkUseOnly(campo, argv) {
    var esta = true;

    for (var i = 0; i < campo.value.length; ++i) {
      esta = estaEm(campo.value.charAt(i), argv[0]);
      if ( ! esta ) {
        return ('Use apenas os caracteres ' +
replaceAll(argv[0],'//','/'));
      };
    };

    return "";

  }

function ValidaHora(Horario) {
	var Hora, Min, Seg;
	var PosMin, PosSeg, Ret;
	Ret = false;
	PosMin = Horario.indexOf(":");
	Hora = Horario.substr(0,PosMin);
	Horario = Horario.replace(":","x");
	PosSeg = Horario.indexOf(":");
	if (PosSeg < 0) {
		PosSeg = Horario.length;
	}
	else {
		Seg = Horario.substr(PosSeg+1,Horario.length-PosSeg);
	}
	Min = Horario.substr(PosMin+1,PosSeg-PosMin-1);
	if (((Hora <= 23) && (Hora >= 0)) && ((Min <= 59) && (Min >= 0))) {
		Ret = true;
		if ((Seg > 59) || (Seg < 0)) {
			Ret = false;
		}
	}
	return Ret;
}	
