/*                                                        */
/*  Tree Tools Informática Ltda                           */
/*  Funções para preenchimento de campos de formulario    */
/*                                                        */
var AgntUsr=navigator.userAgent.toLowerCase();
var DomYes=document.getElementById?1:0;
var NavYes=AgntUsr.indexOf('mozilla')!=-1&&AgntUsr.indexOf('compatible')==-1?1:0;
var ExpYes=AgntUsr.indexOf('msie')!=-1?1:0;
var Opr=AgntUsr.indexOf('opera')!=-1?1:0;
var Opr6orless=window.opera && navigator.userAgent.search(/opera.[1-6]/i)!=-1 //DynamicDrive.com added code
var DomNav=DomYes&&NavYes?1:0;
var DomExp=DomYes&&ExpYes?1:0;
var Nav4=NavYes&&!DomYes&&document.layers?1:0;
var Exp4=ExpYes&&!DomYes&&(document.all!=null?1:0)?1:0;
var PosStrt=(NavYes||ExpYes)&&!Opr6orless?1:0;

function adjustSize(v, type){
	switch(type){
		case "cpf"  : 
		case "time" : 
		case "cep"  : 
		case "month_year" : 
		case "cnpj" : 
		case "date" : return paddLeft(v, '0', getTypeSize(type));
		case "phone": {
			var len  = v.length;
			if (len == 12); 
			if (len == 11);
			if (len == 10) v = "55"+v;
			if (len ==  9) v = "55"+v;
			if (len ==  8) v = "5541"+v;
			if (len ==  7) v = "5541"+v;
			return v;
		}
		default: return v;
	}
}
function calcDV(vl){
	var soma=0;
	for (i=0;i<vl.length;i++)
		soma+=parseInt(vl.charAt(i),10)*(i+1);
	return (soma%11)%10;
}
function cleanNumberStr(s){return String(s).replace(/\D*/g,"");}
function clearField(f, type){
	var vl = unformatField(f.value, type);
	if (f.value!= vl)f.value=vl;
}
function focusField(f){
	f.value="";
	setTimeout("document."+f.form.name+"."+f.name+".focus()",10);
}
function formatCurrency(num) {
	num = num.toString().replace(/\$|\./g,'');
	num = num.toString().replace(/\,/g,'.');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).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 (((sign)?'':'-') + num + ',' + cents);
}
function formatFloat(num, arg1) {
	num = num.toString().replace(/\$|\./g,'');
	num = num.toString().replace(/\,/g,'.');
	digits = Math.pow(10,arg1);
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*digits+0.50000000001);
	cents = num%digits;
	qtd = arg1-String(cents).length;
	for(var i = 0; i < qtd; i++) cents = "0" + cents;
	num = Math.floor(num/digits).toString();
	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 (((sign)?'':'-') + num + ',' + String(cents).replace(/0*$/,"")).replace(/,$/,"");
}
function getKeyPressed(ev){
	return (isIE()?ev.keyCode:ev.which);
}
function getKeyPressedAsString(ev){
	return String.fromCharCode(getKeyPressed(ev));
}
function getTypeSize(type){
	switch(type){
		case "cpf"  : return 11;
		case "nit"  : return 11;
		case "time" : return 4;
		case "cep"  : 
		case "date" : return 8;
		case "money" : 
		case "float" : return 10;
		case "month_year" : 
		case "percent" : return 6;
		case "cpf_cnpj" : 
        case "cnpj" : return 14;
        case "cei" : return 12;
		case "phone" : return 12;
		default: return 0;
	}
}
function paddLeft(src, vl, size){
	var r=String(src);
	while(r.length<size)r=vl+r;
	return r;
}
function paddRight(src, vl, size){
	var r=String(src);
	while(r.length<size)r=r+vl;
	return r;
}
function random(arg1,arg2){return Math.round(Math.random()*(arg2-arg1))+ arg2>arg1?arg1:arg2;}
function trim(s){return String(s).replace(/^\s*/,"").replace(/\s*$/,"");}
function writeln(vl){document.write(vl + '<br>')};

function isAlfa(v){return /^[a-zA-ZáéíóúçãõâêôàÁÉÍÓÚÇÃÕÂÊÔÀ]+$/.test(v);}
function isAlfaNumeric(v){return /^[0-9a-zA-Z]+$/.test(v);}
function isCNPJ(cnpj){
	cnpj= trim(cnpj);
	if(cnpj.length==0) return false;
	var sDig=0,resto=0,dVer1=-1,dVer2=-1;
	var fat1=[5,4,3,2,9,8,7,6,5,4,3,2];
	var fat2=[6,5,4,3,2,9,8,7,6,5,4,3,2];
	var digs=[],i;
	for(i=0; i<14; i++)digs[i]= parseInt(cnpj.charAt(i),10);
	for(var i=0; i<12; i++) sDig+= (digs[i]*fat1[i]);
	resto= sDig % 11;
	dVer1= (resto==0)?0:(11 - resto)%10;
	if(digs[12]==dVer1) {
		sDig=resto=0;
		for(i=0;i<13;i++) 
			sDig+= (digs[i]*fat2[i]);
		resto=sDig%11;
		dVer2=(resto==0)?0:(11-resto)%10;
	}
	return digs[12]==dVer1 && digs[13]==dVer2;
}
function isCPF(cpf){
	cpf = cleanNumberStr(trim(cpf));
	if (cpf.length==0) return false;
	if (!isNumeric(cpf)||isRepeatedChars(cpf)) return false;
	var OK;
	var size=cpf.length;
	if(size>10)
	{
		var vr=cpf.substring(0,size-2)
		var dv= calcDV(vr);
		OK= (dv==parseInt(cpf.charAt(size-2)));
		if(OK){
			vr=vr.substring(1)+dv;
			dv=calcDV(vr);
			OK= (dv==parseInt(cpf.charAt(size-1)));
		}
	}
	return OK;
}
function isCEI(cei){
        cei = cleanNumberStr(trim(cei));
        if (cei.length==0) return false;
        if (!isNumeric(cei)||isRepeatedChars(cei)) return false;
        var size=cei.length;
        if(size>=12){
                var soma = 0;
                var digitoVerificador = parseInt(cei.substring(11,12));
                soma += parseInt(cei.substring(0,1))*7;
                soma += parseInt(cei.substring(1,2))*4;
                soma += parseInt(cei.substring(2,3))*1;
                soma += parseInt(cei.substring(3,4))*8;
                soma += parseInt(cei.substring(4,5))*5;
                soma += parseInt(cei.substring(5,6))*2;
                soma += parseInt(cei.substring(6,7))*1;
                soma += parseInt(cei.substring(7,8))*6;
                soma += parseInt(cei.substring(8,9))*3;
                soma += parseInt(cei.substring(9,10))*7;
                soma += parseInt(cei.substring(10,11))*4;
                var strSoma = soma.toString();
                var dezena = strSoma.length > 2 
                        ? strSoma.substring(1,2) 
                        : strSoma.substring(0,1);
                var unidade = strSoma.charAt(strSoma.length-1);
                var total = parseInt(dezena) + parseInt(unidade);
                var resultado = 10 - total.toString().charAt(total.toString().length-1);
                if (resultado == digitoVerificador){
                        return true ;
                }else{
                        return false ;
                }
        }else{
          return false;
        }
}

function isEmail(email){
	var e=trim(email);
	return(/^([\w\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e));
	//return(/^[\w]+[\w\-]*\@[\w\-]+\.+[\w\-]+/.test(e));
}
function isFloatNumber(nb){return /^[-+]{0,1}\d+(,\d+|\d*)$/.test(nb);}
function isIE(){return ExpYes;}
function isNS(){return NavYes;}
function isNumeric(v){return /^[-+]{0,1}[0-9]+$/.test(v);}
function isRepeatedChars(v){return /^(.)(\1)*$/.test(v);}
function isTextNumber(vl){return /^[áéíóúçãõâêôàÁÉÍÓÚÇÃÕÂÊÔÀ0-9a-zA-Z]+$/.test(vl);}
function isNIT(nit)
{
	txtPis = nit;
	txtPis = fTiraTracoPontoBarra(txtPis);
	if (txtPis == ""){return false;}
	if (parseInt(txtPis) == 0){return false;}
	if (txtPis.length != 11){return false;}
	if(fTiraTracoPontoBarra(nit) != fTiraNaoNumericos(nit)){return false;}
	
	//verifica se é valido o numero do pis
	sString = fTiraNaoNumericos(nit);
	sAux = sString.substring(0,sString.length-1);
	sDigito = sString.substring(sString.length-1,sString.length);
		
	if(sCalculaDigitoMod11(sAux,1,2) != sDigito){return false;}	
	return true;
}
function sCalculaDigitoMod11(sValor,iDigSaida,sTipoValidacao)
{
  if (sTipoValidacao == 1) iCod = 12  
  if (sTipoValidacao == 2) iCod = 9   
  if (sTipoValidacao == 3) iCod = 10   

  for (t=1;t<=iDigSaida;t++)
    {
      soma = 0
      mult = 2
      for (j=sValor.length;j>0;j--)
      {
        soma = soma + (mult * parseInt(sValor.substring(j,j-1),10))
        mult++
        if (mult > iCod) mult = 2
      }
      soma = (soma * 10) % 11
      if (soma == 10) sValor = sValor + "0"
      else sValor = sValor + soma
    }
  	return sValor.substring(sValor.length-iDigSaida,sValor.length)
}

function fTiraNaoNumericos(sStr)
{
	var sAux = '';
	for(i=0;i<sStr.length;i++)
	{
		if(sStr.charAt(i)>='0' && sStr.charAt(i)<='9')
		{
			sAux = sAux + sStr.charAt(i);
		}
	}
	return sAux;
}

function fTiraTracoPontoBarra(sNum)
{
	sAux = "";
	for(i=0;i<sNum.length;i++)
	{
		if(sNum.charAt(i)!='.' && sNum.charAt(i)!='-' && sNum.charAt(i) != '/')
		{
			sAux = sAux + sNum.charAt(i);
		}
	}
	return sAux;
}

function formatField(field, type, arg1, arg2, arg3){
	if (!field||!field.value||field.value.length==0) return false;
	var vl = unformat(field.value, type);
	if (isValidValue(vl, type, arg1, arg2))
		field.value = formatStr(vl, type, arg1);
	else{
		if (type=='interval'){
			if (formatField.arguments.length==5 &&arg3)
				alert(arg3);
			else
				showErrorMessage(type, arg1, arg2);
		}
		else{
			if (type=='cpf_cnpj') type=((field.value.length<=getTypeSize('cpf'))?"cpf":"cnpj");
			showErrorMessage(type);
		}
		focusField(field);
		return false;
	}
	return true;
}
function formatStr(vl, type, a1){
	var str = adjustSize(String(vl),type);
	//if (/^(money|percent|float)/.test(type)) return formatCurrency(vl);
	if (/^(money|percent)/.test(type)) return formatCurrency(vl);
	if (type=='upper') return vl.toUpperCase();
	if (type=='lower') return vl.toLowerCase();
    if (type=='float') return formatFloat(vl, a1);
    if (type=='cei') type="cei";
	if (type=='cpf_cnpj') type=((str.length<=getTypeSize('cpf'))?"cpf":"cnpj");
	if (type=='phone') type=((vl.length == 7 ||  vl.length == 9 || vl.length == 11) ? "phone_short" : "phone_long");
	return str.replace(getFormatRe(type), getFormatStr(type));
}
function getFormatRe(type){
	switch(type){
		case "cep"  : return /^(\d{5})(\d{3})$/;
		case "cpf"  : return /^(\d{3})(\d{3})(\d{3})(\d{2})$/;
		case "nit"  : return /^(\d{3})(\d{5})(\d{2})(\d{1})$/;
		case "time" : return /^(\d{2})(\d{2})$/;
		case "date" : return /^(\d{2})(\d{2})(\d{4})$/;
		case "month_year" : return /^(\d{2})(\d{4})$/;
        case "cnpj" : return /^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
        case "cei" : return /^(\d{2})(\d{3})(\d{5})(\d{2})$/;
		case "phone_long" : return /^(\d{2})(\d{2})(\d{4})(\d{4})$/;
		case "phone_short" : return /^(\d{2})(\d{2})(\d{3})(\d{4})$/;
		default: return /^$/;
	}
}
function getFormatStr(type){
	switch(type){
		case "cep"  : return "$1-$2";
		case "cpf"  : return "$1.$2.$3-$4";
		case "nit"  : return "$1.$2.$3-$4";
		case "time" : return "$1:$2";
		case "date" : return "$1/$2/$3";
		case "month_year" : return "$1/$2";
        case "cnpj" : return "$1.$2.$3/$4-$5";
        case "cei" : return "$1.$2.$3-$4";
		case "phone_short":
		case "phone_long" : return "$1 ($2) $3-$4";
		default: return "";
	}
}
function unformat(vl, type){return unformatField(vl, type);}
function unformatField(vl, type){
	var vlr=trim(String((typeof vl == "object")?vl.value:vl));
	var tp =(arguments.length<1)?"default":String(type);
	if (!vl||vlr.length==0) return "";
	if (/^(cep|cpf|time|date|month_year|cnpj|cpf_cnpj|phone|cei)$/.test(type)){
		vlr=cleanNumberStr(vlr);
		var sz = getTypeSize('cpf');
		if ((/^(cpf|cpf_cnpj)$/.test(type)) && (vlr.length <= sz))
			paddLeft(vlr, '0', sz);
		else if (type=='cnpj') vlr=paddLeft(vlr, '0', getTypeSize('cnpj'));
	} else if (/^(money|float|percent)$/.test(type)){
		vlr = vlr.replace(/\./g,'');
	} else if (/^(email|phone)$/.test(type))vlr=trim(vlr);
	return vlr;
}
function isValidValue(vl, type, a1, a2){
	switch(type){
		case 'cep': return isNumeric(vl) && (vl.length==getTypeSize(type));
		case 'percent':
		case 'float':
		case 'money': return isFloatNumber(vl);
		case 'textnumber': return isTextNumber(vl);
		case 'alfanumeric': return isAlfaNumeric(vl);
		case 'time' : if (vl.length <= 2) vl=vl+"00";
			      vl=paddLeft(vl, '0', 4);
			      return (isNumeric(vl) && /^([01]\d[0-5]\d|2[0-3][0-5]\d)$/.test(vl));
		case 'date' : if (typeof isDate !='function'){alert('biblioteca CalendarPopup.js não encontrada');return false;}
			      return isDate(vl,'ddMMyyyy');
		case 'month_year' : if (typeof isDate !='function'){alert('biblioteca CalendarPopup.js não encontrada');return false;}
			      return isDate(vl,'MMyyyy');
		case 'text': return isAlfa(vl.replace(/[ ]/g,''));
		case 'email': return isEmail(vl);
		case 'cpf' : return isCPF(vl);
        case 'cnpj': return isCNPJ(vl);
        case 'cei' : return isCEI(vl);
		case 'nit': return isNIT(vl);
		case 'cpf_cnpj' : return (vl.length <= getTypeSize('cpf')? isCPF(vl):isCNPJ(vl));
		case 'interval' : return (isNumeric(a1)&&isNumeric(a2)&&(vl>=a1)&&(vl<=a2));
		case 'phone': return isNumeric(vl) && vl.length > 6;
		default: return true;
	}
}
function findFieldIndex(fld){
	var fldForm=fld.form;
	for(i=0;i<fldForm.elements.length;i++)
		if(fld==fldForm.elements[i])return i;
	return -1;
}
function findFieldByIndex(fldForm, ind){
	var fld=null;
	if (ind<fldForm.elements.length)
		fld=fldForm.elements[ind];
	return fld;
}
function skipNext(ev,fld,type,sz){
	var maxLen=0;
	type=(!type?'default':type);
	sz=(!sz?fld.size:sz);
	sz=(!sz?0:sz);
	switch(type){
		case 'cep':
		case 'cnpj':
		case 'cpf':
		case 'nit':
		case 'cpf_cnpj':
		case 'date':
		case 'money':
		case 'float':
		case 'month_year':
		case 'time':
		case 'percent': maxLen = getTypeSize(type);break;
		default: maxLen=sz;
	}
	var key=getKeyPressed(ev);
	var vl=fld.value.toString();
	if (vl.length >= maxLen && key >= 48){
		var ind=findFieldIndex(fld);
		var newFld=null;
		if (ind >= 0) {
			ind++;
			do{
				newFld=findFieldByIndex(fld.form, ind++);
				if (!newFld) break;
			}while(!/^(password|text|select)/.test(newFld.type))
		}
		fld.blur();
		if (newFld){
			newFld.focus();
			return true;
		}
	}
	return false;
}

function checkValidInput(event, el, type){
	var ch=getKeyPressedAsString(event); 
	if (isNS() &&event.which<=8)return true;
	switch(type){
		case 'alfanumeric': return (ch==' '||isAlfaNumeric(ch));
		case 'text': return (ch==' '||isAlfa(ch));
		case 'email': return /[\w\-\@\.]/.test(ch);
		case 'textnumer' : return isTextNumber(ch);
		case 'percent':
		case 'money':
		case 'float': return isNumeric(ch)||(ch==',' && el.value.indexOf(',')==-1)||(ch=='-'&&el.value.indexOf('-')==-1);
		case 'upper':
		case 'lower':
		case 'default':return true;
		case 'interval': return isNumeric(ch)||(ch=='-'&&el.value.indexOf('-')==-1);
		case 'phone': 
		default : return isNumeric(ch);
	}
	return false;
}

function showErrorMessage(type, arg1, arg2){
	var msg=null;
	switch(type){
		case 'cep': msg='CEP inválido'; break;
		case 'percent':
		case 'float':
		case 'money': msg='Valor inválido'; break;;
		case 'time' : msg='Hora inválida'; break;;
		case 'date' : msg='Data inválida'; break;
		case 'month_year' : msg='Data inválida'; break;
		case 'email': msg='Email inválido'; break;;
		case 'cpf' : msg='CPF inválido'; break;
        case 'cnpj': msg='CNPJ inválido'; break;
        case 'cei' : msg='CEI inválido'; break;
		case 'nit': msg='NIT inválido'; break;
		case 'interval': msg='Valor inválido! Deve estar entre ' + String(arg1) + ' e ' + String(arg2); break;
		case 'phone': msg='Telefone inválido'; break;
	}
	if (msg) alert(msg);
}

//// ********************************
function formatCamp(campo, tp, par1, par2, par3){
	return formatField(campo, tp, par1, par2, par3);
}

function removeCaracs(f, type){
	clearField(f, type);
}

function saltaCampo(ev,fld,type,sz){
	return skipNext(ev,fld,type,sz);
}

function validaConteudo(event,el,tp){
	return checkValidInput(event,el,tp);
}

/*******************************/
function removeStr(src,arg){
	return src.replace(arg,"");
}
/*******************************/