// create the prototype on the String object
String.prototype.trim = function() {
 // skip leading and trailing whitespace
 // and return everything in between
	return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}



// create the prototype on the String object
String.prototype.trimLeadingZeros = function(todos) { //true, false
    if (""+todos=="undefined") todos=false;

    //tirando os zeros do começo
    var i=0;
    while ((i < this.length- (todos?0:1) ) && (this.substring(i,i+1)=='0')) i++;
    valor = this.substring(i);
	return valor;
}

function stripCharsNotInBag(bag, campo) { //campo só deve ser passado se for para alterar seu valor
	//bag = "0123456789";

	var temp="";
	if (campo==null) temp=this;
	if (campo!=null) temp=campo.value;

	var result = "";
	for (i=0; i<temp.length; i++){
		character = temp.charAt(i);
		if (bag.indexOf(character) != -1)
			result += character;
	}
	if (campo!=null && campo.value!=result) {
		campo.value=result;
	}
	return result;
}

// create the prototype on the String object
String.prototype.stripCharsNotInBag = stripCharsNotInBag;

function stripNotNumber(num) {
	return num.stripCharsNotInBag("0123456789");
}


var BASE_DATE = new Date("1997","09","07")  // 1999-out-07
var MAX_DATE = new Date("2025","01","21")   // 2025-fev-21

function ValidaData (data) {
	dt = data.value;

	if (dt.length<10) {
		alert("Tamnho inválido, digitar no formato dd/mm/aaaa.");
		data.select();
		return false;
	}

	dia = dt.substring(0,2);
	mes = dt.substring(3,5);
	ano = dt.substring(6,10);

	// month argument must be in the range 1 - 12
	// javascript month range : 0- 11
	var tempDate = new Date(ano,mes-1,dia);

	if ( (ano == tempDate.getFullYear()) &&
	     (mes == (tempDate.getMonth()+1)) &&
	     (dia == tempDate.getDate()) ) {
		var tmp = new Date();
		var todayDate = new Date(tmp.getFullYear(), tmp.getMonth(), tmp.getDate());

	     	//return (tempDate >= BASE_DATE && tempDate<=MAX_DATE && tempDate>=todayDate)
	     	return (tempDate >= BASE_DATE && tempDate<=MAX_DATE)
	} else {
		alert("Data inválida, digitar no formato dd/mm/aaaa.");
		data.select();
		return false;
	}
}


function formataDataDigitada(campo) {
    // retira tudo que nao eh numerico
    var temp=campo.value;
    var valor="";

    valor=stripNotNumber(temp);

    if (valor.length>8) { valor=valor.substring(0,8); }

    var j=0;
    temp="";
    for (var tam=0;tam<valor.length;tam++) {
        if (j==0) {
            temp+=valor.substring(tam,tam+1);
            if ( (tam==1) && (valor.length>2) ) { j++; temp+="/"; }
        } else if (j==1) {
            temp+=valor.substring(tam,tam+1);
            if ( (tam==3) && (valor.length>4) ) { j++; temp+="/"; }
        } else if (j==2) {
            temp+=valor.substring(tam,tam+1);
        }
    }

    if (campo.value!=temp) {
        campo.value=temp;
    }
}



function FormataNumero(num,decimalNum,bolLeadingZero,bolParens,bolCommas)
/**********************************************************************
	IN:
		NUM - the number to format
		decimalNum - the number of decimal places to format the number to
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
		bolCommas - put commas as number separators.

	RETVAL:
		The formatted number!
 **********************************************************************/
{
        if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1;		// Get sign of number

	// Adjust number so only the specified number of numbers after
	// the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign;					// Readjust for sign

	// Create a string object to do our formatting on
	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);

	tmpNumStr = tmpNumStr.replace(/\./g,",");


	// Complete all decimal places
	if (decimalNum>0) {
		var iStart = tmpNumStr.indexOf(",");
		if (iStart < 0) {
			tmpNumStr+=",";
			iStart = tmpNumStr.indexOf(",");
		}

		for (i=(decimalNum-(tmpNumStr.length-iStart)); i>=0 ; i--) {
			tmpNumStr+="0";
		}
	}


	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(",");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "." + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}

function formataValorDigitado(campo, decimal) {
	var decimalNum=2;
	if (decimal!=null)
		decimalNum=decimal;

	var temp = FormataNumero(campo.value.stripCharsNotInBag("0123456789").trimLeadingZeros() / Math.pow(10,decimalNum), decimalNum, true, false, true);

    if (campo.value!=temp) {
        campo.value=temp;
    }
}

function Valido(texto,valores)
{
  var valido = true;

  for (var i = 0;  i < texto.length;  i++)
  {
    var ch = texto.charAt(i);

    for (var j = 0;  j < valores.length;  j++)
      if (ch == valores.charAt(j))
        break;

    if (j == valores.length)
    {
      valido = false;
      break;
    }
  }
  return(valido);
}


/**
 * Funcao que valida todos campos do formulario
 */
function Consiste(theForm)
{
	cnpj = /(\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2})|(\d{3}\.\d{3}\.\d{3}-\d{2})/;
	telefone = /\(\d{2}\)\d{4}-\d{4}/;
	data = /(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}/;
	cep = /\d{5}-\d{3}/;

  if ((theForm.nome.value == "") || (theForm.nome.value.length < 3) || (theForm.nome.value.length > 60))
  {
    alert("Informar o campo Nome (pessoa ou empresa) com no máximo 60 carcteres!");
    theForm.nome.focus();
    return (false);
  }

  if (!cnpj.exec(theForm.CPF.value))
  {
    alert("Informar o campo cpf/cnpj nos formatos (000.000.000-00 ou 00.000.000/0000-00)");
    theForm.cpf.focus();
    return (false);
  }

  if ((theForm.endereco.value == "")||(theForm.endereco.value.length > 255))
  {
    alert("Informar o campo Endereço com no máximo 255 caracteres");
    theForm.endereco.focus();
    return (false);
  }

  if ((theForm.bairro.value == "")||(theForm.bairro.value.length > 60))
  {
    alert("Informar o campo Bairro com no máximo 60 caracteres");
    theForm.bairro.focus();
    return (false);
  }

  if (theForm.cidade.value == "")
  {
    alert("Informar o campo Cidade");
    theForm.cidade.focus();
    return (false);
  }

  if (!cep.exec(theForm.CEP.value))
  	{
  	 alert("Informar o campo CEP no formato 00000-000!");
  	 theForm.CEP.focus();
  	 return (false);
  	}


  if (!telefone.exec(theForm.telefone1.value))
  	{
  	 alert("Informar o campo Telefone no formato (00)0000-0000!");
  	 theForm.telefone1.focus();
  	 return (false);
  	}

  if (!data.exec(theForm.datanascimento.value))
  {
    alert("Informar o campo Data de Nascimento no formato 00/00/0000");
    theForm.datanascimento.focus();
    return (false);
  }

 if ((theForm.email.value == "") || (theForm.email.value.length < 3)||(theForm.email.value.indexOf('@')==-1))
  {
    alert("Informar o campo Email com um Email válido! ");
    theForm.email.focus();
    return (false);
  }

  if ((theForm.senha.value == "") || (theForm.senha.value.length < 3) || (theForm.senha.value.length > 8))
  {
    alert("Informar o campo Senha com 3 a 8 caracteres!");
    theForm.senha.focus();
    return (false);
  }

  if (theForm.resenha.value != theForm.senha.value)
  {
    alert("A senha e a confimação da senha não conferem!");
    theForm.senha.focus();
    return (false);
  }

  return (true);
}



/**
 * Funcao que mascara o valor CEP.
 * Valor retornado com separador "-"
  * Ex.: 12345-678
 */

function mascaraCEP (keypress, valorCEP) {
	caracteres = '01234567890';
	separacoes = 1;
	separacao1 = '-';
	conjuntos = 2;
	conjunto1 = 5;
	conjunto2 = 3;
	if ( (caracteres.search(String.fromCharCode (keypress))!=-1)
        && (valorCEP.value.length < (conjunto1 + conjunto2 + 1)) ){
		if (valorCEP.value.length == conjunto1)
		   valorCEP.value = valorCEP.value + separacao1;
	}
	else {
		event.returnValue = false;
	}
}

function mascaraTel (keypress, valorTel) {
	caracteres = '0123456789';
	separacoes = 3;
	separacao1 = '(';
	separacao2 = ')';
	separacao3 = '-';
	conjuntos = 3;
	conjunto1 = 2;
	conjunto2 = 4;
	conjunto3 = 4;
	if ( (caracteres.search(String.fromCharCode (keypress))!=-1)
        && (valorTel.value.length < (conjunto1 + conjunto2 + conjunto3 +3)) ){
		if (valorTel.value.length == 0)
		   valorTel.value = separacao1 + valorTel.value;
		if (valorTel.value.length == 1+conjunto1)
		   valorTel.value = valorTel.value+separacao2;
		if (valorTel.value.length == 2+conjunto1+conjunto2)
		   valorTel.value = valorTel.value+separacao3;
	}
	else {
		event.returnValue = false;
	}
}

function mascaraNasc (keypress, valorNasc) {
	caracteres = '0123456789';
	separacoes = 1;
	separacao1 = '/';
	conjuntos = 3;
	conjunto1 = 2;
	conjunto2 = 2;
	conjunto3 = 4;
	if ( (caracteres.search(String.fromCharCode (keypress))!=-1)
        && (valorNasc.value.length < (conjunto1 + conjunto2 + conjunto3 +2)) ){
		if (valorNasc.value.length == 2)
		   valorNasc.value = valorNasc.value+separacao1;
		if (valorNasc.value.length == conjunto1+1+conjunto2)
		   valorNasc.value = valorNasc.value+separacao1;
	}
	else {
		event.returnValue = false;
	}
}

function mascaraCodigoCedente(keypress, objCodigo) {
	// codigo_cedente = XXXX.870.000VVVVV-D
	caracteres = '0123456789';
	separacao1 = ".";
	separacao2 = ".";
	separacao3 = "-";
	bloco1 = 4; // XXXX
	bloco2 = 4; // caractere '.' + 870
	bloco3 = 9; // caractere '.' + 000VVVVV
	bloco4 = 2; // caratere '-' + D

	if ( (caracteres.search(String.fromCharCode (keypress))!=-1)
	&& (objCodigo.value.length < (bloco1+bloco2+bloco3+bloco4+1)) ) {
		if (objCodigo.value.length == bloco1)  // preencheu XXXX
			objCodigo.value = objCodigo.value + separacao1;
		if (objCodigo.value.length == (bloco1+bloco2))  // prencheu XXXX.870
			objCodigo.value = objCodigo.value + separacao2;
		if (objCodigo.value.length == (bloco1+bloco2+bloco3)) // preencheu XXX.870.000VVVVV
			objCodigo.value = objCodigo.value + separacao3;
	}
	else {
		event.returnValue = false;
	}
}



// dado um objeto, verifica se este eh um numero
function verificaDigito(obj){
 	string = obj.value;

	if (!numero(string))
		obj.value = obj.value.substring(0, obj.value.length - 1);
	return;
}


// funcao que verifica se dado um string eh string numerico
function numero(string){
    if (!string) return false;
    var Chars = "0123456789";

    for (var i = 0; i < string.length; i++) {
       if (Chars.indexOf(string.charAt(i)) == -1)
          return false;
    }
    return true;
}
