//regras de validacao (Expressoes Regulares)
if(!self.g_IS&&parent.g_IS)var g_IS=parent.g_IS
if(!self.isArray&&parent.isArray) var isArray = parent.isArray
if(!self.isObject&&parent.isObject) var isObject = parent.isObject
if(!self.isDate&&parent.isDate) var isDate = parent.isDate
if(!self.isString&&parent.isString) var isString = parent.isString
var reSpaces			= /^\s+$/
var reLetra 			= /^[a-zA-Z]$/
var reAlfabetico 		= /^[a-zA-Z]+$/
var reAlfanumerico 		= /^[a-zA-Z0-9]+$/
var reAlfaSpaces		= /^[a-zA-Z0-9\s]+$/
var reDigito 			= /^\d/
var reLetraOuDigito 	= /^([a-zA-Z]|\d)$/
var reInteiro 			= /^\d+$/
var reSinalInteiro 		= /^(\+|\-)?\d+$/
var reDecimais 			= /((^\d*),?$)|((^\d*),(\d*)$)/
var reSinalDecimais     = /^(\+|\-)?((\d*,?$)|(\d*,\d*$))/
var re2Decimais			= /(^\d*,?$)|(^\d*,\d{1,2}$)/
var reSinal2Decimais    = /^(\+|\-)?((\d*,?$)|(\d*,\d{1,2}$))/
var re4Decimais			= /(^\d*,?$)|(^\d*,\d{1,4}$)/
var reSinal4Decimais    = /^(\+|\-)?((\d*,?$)|(\d*,\d{1,4}$))/
var re7Decimais			= /(^\d*,?$)|(^\d*,\d{1,7}$)/
var reSinal7Decimais    = /^(\+|\-)?((\d*,?$)|(\d*,\d{1,7}$))/
var reEmail 			= /^.+\@.+\..+$/
var reSN				= /^[SNsn]$/
var reCPFCGC            = /(^(\d{3})\W?(\d{3})\W?(\d{3})\W?(\d{2})$)|(^(\d{8})\W?(\d{4})\W?(\d{2})$)/ 
var feCPFCGC			= "$2$3$4$5$7$8$9"
var fsCPFCGC			= "$2$3$4$5$7$8$9"
var reCPF               = /^(\d{3})\W?(\d{3})\W?(\d{3})\W?(\d{2})$/ 
var fsCPF				= "$1.$2.$3-$4"
var feCPF				= "$1$2$3$4"
var reCGCMF             = /^(\d{8})\W?(\d{4})\W?(\d{2})$/
var fsCGCMF				= "$1/$2-$3"
var feCGCMF				= "$1$2$3"
var reCEP				=/^(\d{5})\W?(\d{3})$/
var feCEP				="$1$2"
var fsCEP				="$1$-2"
var reIERS              = /^(\d{3})\W?(\d{3})\W?(\d{4})$/
var fsIERS				= "$1/$2$3"
var feIERS				= "$1$2$3"
var reData		    	= /^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([1-9][0-9]{1,3})$/
var fsData				= "$1/$5/$8"
var feData				= "$1$5$8"
var reMMAAAA		    = /^(([0]?[1-9])|([1][0-2]))\W?([1-9]\d{3})$/
var fsMMAAAA			= "$1/$4"
var feMMAAAA			= "$1$4"
var reDDMMAAAA			= /^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([1-9][0-9]{3})$/
var fsDDMMAAAA			= "$1/$5/$8"
var feDDMMAAAA			= "$1$5$8"
var reDDMMAA			= /^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([0-9][0-9]{1})$/
var fsDDMMAA			= "$1/$5/$8"
var feDDMMAA			= "$1$5$8"
var reDDMM				=/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))$/
var feDDMM              = "$1$5"
var fsDDMM              = "$1/$5"
var reDia				=/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))$/ 
var reMes				=/^(([0]?[1-9])|([1][0-2]))$/ 
var reAno4				=/^[1-9][0-9]{3}$/
var reAno2				=/^[0-9][0-9]{1}$/
var reCtaCtb			=/^(\d{1})\W?(\d{2})\W?(\d{2})\W?(\d{4})$/
var feCtaCtb			="$1$2$3$4"
var fsCtaCtb			="$1.$2.$3.$4"
var reRubrica           =/^(\d{4})$/
var reProjSub	   		=/^(\d{4})\W?(\d{3})$/
var feProjSub			="$1$2"
var fsProjSub			="$1.$2"
var reProcesso			=/^(\d{6})\W?(\d{4})\W?(\d{2})\W?(\d)$/
var feProcesso			="$1$2$3$4"
var fsProcesso			="$1.$2.$3-$4"
var reUO				=/^(\d{2})\W?(\d{2})$/
var feUO				="$1$2"
var fsUO				="$1.$2"
var reClassRec			=/^(\d{4})\W?(\d{2})\W?(\d{3})$/
var feClassRec			="$1$2$3$"
var fsClassRec			="$1.$2.$3"
var reCurrency			= /^(R\$\s*)?(([0-9]{1,3})+(\,([0-9]{2}$)))/;
var feCurrency			="$2"
var fsCurrency			="R$ $2"
// usar no onkeyUp -  realiza avanco automatico - nao impede o avanco com tab para outro campo
// para isso combinar com onBlur
//
var impPararNoUltimo=true  				 // Usado para fazer ciclo : false= retorna ao primeiro - true = trava no ultimo campo 

function impAutoTab(input,tam, e,reBusca,fsSaida) { //netscape nao tem .maxLength o que exige reinformar 'len'
	var keyCode = (g_IS.ns4) ? e.which : e.keyCode; 
	var filter = (g_IS.ns4) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	if(reBusca!=null&&fsSaida!=null) {
			input.value=input.value.replace(reBusca,fsSaida)
	}
	if(input.value.length >= tam && impContainsElement(filter,keyCode)==-1) {
		input.value = input.value.slice(0, tam);
		impAvancaCampo(input);
	}
	return true;
}
function impAvancaCampo(input){	
	input.form[(impGetProxIndex(input))].focus();
	return		
}
function impGetProxIndex(input){
		var ind=impGetIndex(input)
		var indpx=ind;
		var flag =impPararNoUltimo // Evita loop infinito em forms com camo hidden
		do {//ignorar campos hidden
			if( ++indpx==input.form.length){ //rodar no form (do ultimo para o primeiro)
				if (flag){
					indpx=ind;
					break
				}
				indpx= 0;     
				flag=true;
			}
		} while(input.form[indpx].type=='hidden');
		return indpx
	}
	
//usar no onfocus=impReadonly(this) e no onkeyup=impReadonly(this) - readonly para netscape	
function impReadonly(obj){
	if(!obj.defaultvalue)obj.defaultvalue=obj.value
	obj.value=obj.defaultvalue
}
// verifica existencia de 'ele' no array 'arr'
function impContainsElement(arr, ele) {
		var found = -1, index = 0;
		while(found==-1 && index < arr.length){
			if(arr[index] == ele){
				found = index;
			}
			else {
				index++;
			}
		}
		return found;
	}
//obtem posicao atual do campo no forms
function impGetIndex(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;
}

// usar no onBlur - inpede passagem para outro campo se nao bate com formato
// 
function impVInput (input,repadrao,msgerr,formatar,aIns){
	if(repadrao){

		if (input.value!=""){
			if(!repadrao.test(input.value)){
				if(msgerr){alert(msgerr)}
				input.select();input.focus();
				return false
			}
			else{
				if(isString(formatar)&&!aIns){ //compatibilidade com interface anterior
				input.value =impFormat(input.value,repadrao,formatar)
			    }
				else if(formatar) input.value =impFormat(input.value,repadrao,aIns)
			}
		}
	}
	return true
}
//substitui todas as ocorrencias de uma string expressão regular por outra
function impFormat(instr, reBusca, sTroca,umavez,ignorecase) {
    if (isString(reBusca)){ 
	  	reBusca = new RegExp(reBusca,((ignorecase)?"i":"")+((umavez)?"":"g"))
	}
    return instr.replace(reBusca,sTroca);
}

function formatDMA(sStr,numZeros){	//Completa Zeros - para impFormatCampo
	var  i, sRes;
	if (sStr.length < numZeros && sStr.length > 0)
		for (i=sStr.length;i < numZeros; i++)
			sStr = "0" + sStr;
			
	return sStr;	
}

function impFormatCampo(campo, reBusca, sTroca,umavez,ignorecase)
{
	// - Completa Zeros em Dia e Mês
	var arrDMA
	arrDMA = campo.value.split("/");
	if (arrDMA.length>2)
	campo.value = formatDMA(arrDMA[0],2)+"/"+formatDMA(arrDMA[1],2)+"/"+arrDMA[2];	// DD/MM/AAAA
	// - - - 
	
    campo.value=impFormat(campo.value, reBusca, sTroca,umavez,ignorecase) 
	campo.select()
}
// Funções de validação - CPF
// true = ok
// false = com erro
// 0 = vazio
function impValCPFCGC(field,bmsg,itipo) {
    var atipo=["CPF/CNPJ","CPF","CNPJ"]
    itipo=(itipo)?itipo:0 //0=qualquer, 1=cpf,2=cgc   
	var cpf='', cgc='', digito='',dg='', dgc='', digitoc='', k=0; i=0, j=0, soma=0, mt=0;
	if (field.value=='') return 0
	var cpfcgc = field.value;
	var bcpf=false
	var bcgc=false
	if (itipo==0||itipo==1) bcpf= reCPF.test(cpfcgc)	// valida tamanho e formato do CPF
	if (itipo==0||itipo==2) bcgc= reCGCMF.test(cpfcgc)	// valida tamanho e formato do CCG
	if ((!bcpf)&&(!bcgc)){// formato não reconhecido
	 	 if(bmsg) alert ("Conteúdo informado não reconhecido como "+atipo[itipo]+"\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
// tirar separadores
if (bcpf){cpfcgc=cpfcgc.replace(reCPF,feCPF) }
else     {cpfcgc=cpfcgc.replace(reCGCMF,feCGCMF)} 
//valida entradas fáceis
var cpferr = "0000000000011111111111222222222223333333333344444444444"+
             "5555555555566666666666777777777778888888888899999999999"
if ( cpferr.indexOf(cpfcgc)>=0){// informado campo de facil entrada
	 	 if(bmsg) alert ("Conteúdo não é aceito como "+atipo[itipo]+"\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
mult = [2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9]; // tabela de pesos para colunas 
if (bcgc)
	{  	cgc = cpfcgc.substring(0,12);
		digito = cpfcgc.substring(12,14);
		for (j = 1; j <= 2; j++) {
		    digitoc = impCalcDig11(cgc)
		    if (digitoc == 10){digitoc = 0}
		    dgc +=digitoc;
			cgc+=digitoc;
		}
  }
  else {
	  cpf = cpfcgc.substring(0,9);
	  digito = cpfcgc.substring(9,11);
	  for (j = 1; j <= 2; j++) {
	    soma = 0;
	    mt = 2;
	    for (i = 8 + j; i >= 1; i--) {
	      soma += parseInt(cpf.charAt(i-1),10) * mt;
	      mt++;
	    }
	    dg = 11 - (soma % 11);
	    if (dg > 9) {dg = 0};
	    cpf += dg;
		dgc+=dg
	  }
  } 
  if (dgc != digito) {// digito inválido
	 	 if(bmsg) alert (((bcgc)?"CNPJ":"CPF")+" com dígitos inválidos\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
  else {
   field.value=impFormat(field.value,((bcgc)?reCGCMF:reCPF),((bcgc)?fsCGCMF:fsCPF))
   return true }
 
  }
// valida digito do inscrição estadual
// 0 = CAMPO vazio
// true = ok
// false = erro
function impValIERS(field,bmsg) {
var dg='',ie='',IERS='',dgc=''
if (field.value=='') return 0
var IERS = field.value;
bIERS= reIERS.test(IERS)	// valida tamanho e formato do CPF
if (!bIERS){// formato não reconhecido
	 	 if(bmsg) alert ("Conteúdo informado não reconhecido como Inscrição Estadual -RS\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
IERS=impFormat(IERS,reIERS,feIERS)
ie=IERS.substring(0,9)
dg=IERS.substring(9)
dgc=impCalcDig11(ie)
if (dgc==10) dgc=0
if (dg!=dgc) {// Dígito inválido
	 	 if(bmsg) alert ("Inscrição Estadual com dígitos inválidos\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
else  {
   field.value=impFormat(field.value,reIERS,fsIERS)
   return true }
 
}
//digito módulo 11 - pode retornar digito 10  para verificação de aproveitamento
// 					 
function impCalcDig11(numero)
{var pesos=[2,3,4,5,6,7,8,9,2,3,4,5,6,7,8,9]
 var calc= 0 , x=''
 var numero=String(numero).split("")
 var limite=numero.length -1
 var result = 0
 var pso=0
 for (var i=limite; i>=0; i--)
 { x+="\npso:"+pesos[pso]+" * "+ numero[i] + " = " + (pesos[pso] * parseInt(numero[i]))
   calc += (pesos[pso++] * parseInt(numero[i]))
 } 
 result = 11 - ((calc)%11)
  if (result == 11){result = 0}
  return result	 
  
}

// Valida datas
// true = ok
// false = com erro
// 0 = vazio
  function impValData(field,bmsg,itipo) {
  	if (field.value==""){return 0};
    var atipo=["data","dd/mm/aa","dd/mm/aaaa","dd/mm","mm/aaaa"]
    itipo=(itipo)?itipo:0 //0=qualquer, 1=dmaa,2=dmaaaa,3=ddmm,4=mmaaaa   
    var bformatoData = formatoData(field.value)
	var bDDMMAA 	=((bformatoData==1)&&(itipo==0||itipo==1))
	var bDDMMAAAA	=((bformatoData==2)&&(itipo==0||itipo==2))
	var bDDMM 		=((bformatoData==3)&&(itipo==0||itipo==3))
	var bMMAAAA		=((bformatoData==4)&&(itipo==0||itipo==4))

	if ((!bDDMMAA)&&(!bDDMMAAAA)&&(!bDDMM)&&(!bMMAAAA)){// formato não reconhecido
	 	 if(bmsg) alert ("Conteúdo informado não reconhecido como sendo "+atipo[itipo]+"\nVerifique sua digitação")
		 field.select();field.focus();
		 return false 
	 }
  	var dia0,mes0,ano0
  	var auxData;
  	var dData=""
	var dHoje=new Date()
	
	if (bDDMMAAAA) dData = impFormat(field.value,reDDMMAAAA,fsDDMMAAAA);
  	else if (bDDMMAA) dData = impFormat(field.value,reDDMMAA,fsDDMMAA);
		 else dData=impFormat(field.value+"/"+dHoje.getFullYear(),reDDMMAAAA,fsDDMMAAAA)
		 	  if (bMMAAAA) dData=impFormat(field.value,reMMAAAA,fsMMAAAA) //MMAAAA

  	dma=dData.split("/")
	
	if (bDDMMAA){dma[2]= (dma[2]<20)?parseInt(dma[2])+2000:parseInt(dma[2])+1900} // janelamento de data
	
	if (bMMAAAA){dma[2]= dma[1];  dma[1]= dma[0];} //ajusta array comparativo para MMAAAA
		
	var obj = new Date(dma[2], dma[1]-1, dma[0])//cria data no browser


	dma[0]= "00" + dma[0]
	dma[1]= "00" + dma[1]
	dma[2]= "0000" + dma[2]
  	dma[0] = dma[0].substr(dma[0].length-2) 
  	dma[1] = dma[1].substr(dma[1].length-2)
  	dma[2] = dma[2].substr(dma[2].length-4)
  	dData=dma.join("/")
	
	dia0 = "00" + obj.getDate()
  	mes0 = "00" + (obj.getMonth()+1)
  	ano0 = "0000" + obj.getFullYear()
  	dia0 = dia0.substr(dia0.length-2) 
  	mes0 = mes0.substr(mes0.length-2)
  	ano0 = ano0.substr(ano0.length-4)
	if (bMMAAAA)
		{ auxData =  mes0 + "/"+ ano0
		  dData = dma[1] + "/"+ dma[2]}
	else{ auxData = dia0 + "/"+  mes0 + "/"+ ano0}

	if ((auxData != dData)) { 
		if (bmsg) alert("Data incorreta\nVerifique sua Digitação")
		field.select();field.focus()
		return false     
	}
  	else {  if (bMMAAAA){field.value=mes0+"/"+ano0}
			else 		{field.value=dia0+"/"+mes0+((itipo==3)?"":("/"+((itipo==1)?ano0.substring(ano0,2):ano0)))}
			return true}
  }
function dma2amd(sdata)
{	dma=sdata.split("/")
	if (dma.length==2){
		var dHoje=new Date()
		dma[2]=dHoje.getFullYear()
	}
	dma[0]= "00" + dma[0]
	dma[1]= "00" + dma[1]
	dma[2]= "0000" + dma[2]
	dma[0] = dma[0].substr(dma[0].length-2) 
	dma[1] = dma[1].substr(dma[1].length-2)
	dma[2] = dma[2].substr(dma[2].length-4)
	return dma[2]+"/"+dma[1]+"/"+dma[0]
}
function limpaNum(num){
num=""+num+""
var temp=num.replace(/\./g,"")
return temp.replace(/\,/g,".")
}

function LimpaEspacosCampo(obj) {
	if ((!obj) || (obj.type == null)) return;
	obj.value = LimpaEspacosTexto(obj.value)
}

function LimpaEspacosTexto(str) {
	if (!str) return str;
	return str.replace(/\s+/g," ")
}
function formatoData(data){
	if  (bMMAAAA=reMMAAAA.test(data)) return 4	
	if  (reDDMMAA.test(data))  return 1
	if  (reDDMMAAAA.test(data)) return 2
	if  (bDDMM=reDDMM.test(data)) return 3
	return false
}
/*
function difData(data1,data2){
var fdata1=formatoData(data1)
var fdata2=formatoData(data2)
if (!formatoData(data1)){
	alert(data1+" não é de formato dd/mm/aa, dd/mm/aaaa ou dd/mm")
	return false
}
if (!formatoData(data2)){
	alert(data2+" não é de formato dd/mm/aa, dd/mm/aaaa ou dd/mm")
	return false
}
if (fdata1!=fdata2){
	alert ('datas não estão no mesmo formato:\n'+data1+" / "+data2)
}
	var bDDMMAA 	=(fdata1==1)
	var bDDMMAAAA	=(fdata1==2)
	var bDDMM 		=(fdata1==3)
if (bDDMMAAAA) 
{ data1 = impFormat(data1,reDDMMAAAA,fsDDMMAAAA);
  data2=impFormat(data2,reDDMMAAAA,fsDDMMAAAA);
}
else
{ 	if (bDDMMAA) 
	{data1 = impFormat(data1,reDDMMAA,fsDDMMAA);
	 data2=  impFormat(data2,reDDMMAA,fsDDMMAA);
	}
	 else{
	 data1=impFormat(data1+"/"+dHoje.getFullYear(),reDDMMAAAA,fsDDMMAAAA)
	 data2=impFormat(data2+"/"+dHoje.getFullYear(),reDDMMAAAA,fsDDMMAAAA)
	 }
}
dma1=data1.split("/");dma2=data2.split("/")
var b= new Date(dma2[2], dma2[1]-1, dma2[0]) 
var a= new Date(dma1[2], dma1[1]-1, dma1[0])
return (b.getTime() - a.getTime())/(24 * 60 * 60 * 1000)//nro de dias de diferença a partir dos milisegundos desde 1970
}
*/

function impValCurrency(obj,foco){
	if (foco) {
		if (obj.value.indexOf("R$ ") == 0) {
			obj.value = obj.value.substr(3,obj.value.length)
			obj.select()
		}
	} else {
//		if ((!obj || obj != '[object]') || (obj.value == "") || (obj.value.indexOf(",") > 0 && obj.value.length > obj.value.indexOf(",") + 2) && (obj.value.indexOf("R$ ") >= 0)) {
		if ((!obj || obj != '[object]') || (obj.value == "") || (obj.value.indexOf(".") > 0 && obj.value.length > obj.value.indexOf(".") + 2)) {
			return;
		}
		if (obj.value.indexOf(",") > 0) {
			obj.value = "R$ " + obj.value + ("00").substr(0,parseInt((obj.value.indexOf(",") + 3) - obj.value.length))
		} else {
//			obj.value = "R$ " + obj.value + ",00"
			obj.value = obj.value + ".00"
		}
	}
}


function impValNumerico(obj,str) {
	if (!obj || obj != '[object]') {
		alert("Erro, obj não declarado ou não é objeto.\nLocal: PRInputs.js # impValNumerico.")
		return false
	}
	if (isNaN(obj.value)) {
		if (str) {
			alert("O conteúdo informado para " + str + " deve ser numérico.")
		} else {
			alert("O conteúdo informado deve ser numérico.")
		}
		obj.focus()
		obj.select()
		return false;
	}
	return true
}

function igualaCampos(campo1,campo2) {
	var bSelect = true
	if (igualaCampos.arguments.length=3)
	{
		if (!igualaCampos.arguments[3])
			bSelect = false
	}		
	if (campo1.value.indexOf("/") > 0 || campo2.value.indexOf("/") > 0) {
		if (campo2.value == "") {
			campo2.value = campo1.value
			return;
		}
		var s1, s2, arr1, arr2
		if (campo1.value != "")
			s1 = (campo1.value.split("/"))[2] + (campo1.value.split("/"))[1] + (campo1.value.split("/"))[0]
		if (campo2.value != "")
			s2 = (campo2.value.split("/"))[2] + (campo2.value.split("/"))[1] + (campo2.value.split("/"))[0]
		if (s2 == "" || s2 < s1) {
			campo2.value = campo1.value
			if (campo2.select){
				if (bSelect)
					campo2.select()
			}	
		}
	} else {
		if (campo1.value == "") { return;}
		if ((campo2.value == "") || ( campo2.value < campo1.value )) {
		   campo2.value=campo1.value
			if (campo2.select){
				if (bSelect)
					campo2.select()
			}	
		}
	}
}

function valCurrency(obj,nInt,nDig,sMsgErro,fEntrada) {
	if (fEntrada) {
		obj.value.replace(/\,/gi,'');
		obj.select()
		return true;
	}
	if (sMsgErro) { // validação de conteudo
		if (!testeCurrency(obj,nInt,nDig)) {
			alert(sMsgErro)
			obj.focus()
			obj.select()
			return false;
		}
		return true;
	} else { // validação no momento da digitação
		sKeyCode = "48,49,50,51,52,53,54,55,56,57,45,44"
		if (sKeyCode.indexOf(event.keyCode) < 0) {
			event.keyCode = ""
			return;
		}
	}
}

function testeCurrency(obj,nInt,nDig) {
		if (obj.value.indexOf("-",1) > 0) {
			return false;
		}
		if (obj.value.split(",").length > 2) {
			return false;
		}
		if (obj.value.split(",").length == 2) {
			if (obj.value.charAt(0) == "-") {
				if (obj.value.split(",")[0].length > nInt+1) {
					return false;
				}
			} else {
				if (obj.value.split(",")[0].length > nInt) {
					return false;
				}
			}
			if (obj.value.split(",")[1].length < nDig) {
					while(obj.value.split(",")[1].length < nDig) { 
					obj.value += "0"
				}
			} else {
				if (obj.value.split(",")[1].length > nDig) {
				t1 = obj.value.split(",")[1].substr(0,nDig)
				t2 = obj.value.split(",")[1].substr(nDig,obj.value.split(",")[1].length)
				tf = "1"
				for (var i = 0 ; i < t2.length; i++) {
					tf += "0"
				}
				if ((tf/t2) > 2) { // é menor que 5
					obj.value = obj.value.split(",")[0] + "," + t1
				}else{
					obj.value = obj.value.split(",")[0] + "," + (parseInt(t1) + 1)
				}
//					alert(Math.round(parseFloat(obj.value.split(",")[1].substr(0,nDig) + ","  + obj.value.split(",")[1].substr(nDig,obj.value.split(",")[1].length))))
				}
			}
		}
		if (obj.value.split(",").length == 1) {
			if (obj.value == "") {
				return true;
			}
			if (obj.value.charAt(0) == "-") {
				if (obj.value.length > nInt+1) {
					return false;
				}
			} else {
				if (obj.value.length > nInt) {
					return false;
				}
			}
			obj.value += ","
			while(obj.value.split(",")[1].length < nDig) { 
				obj.value += "0"
			}
		}
		return true;
}

function limpaZerosEsquerda(inputString,tipo){
// uso: limpaZerosAEsquerda('000123abc')
// usar tipo = 1 para permitir zero
	var outputString  = '';
	var espacosAntes  = 0;
	tipo = 0
	if (tipo == 1) {
		re = /^0*$/;
		res = inputString.match(re);
		if (inputString.substr(0,1) != "-" && res == null) inic = 0;
		else  inic = 1;
	}
	else inic = 0;
	for(var i = inic ; i < inputString.length ; i++){
		if(inputString.charAt(i) == '0'){ espacosAntes++; }
		else {	break;	}
	}
	outputString =  String(inputString).substr(espacosAntes);
	return outputString;
}

function procuraRepetidos(arr,procura,indice) {
	if (procura) {
		for (var i = indice ; i < arr.length; i++ ) {
			if (arr[i] == procura) {
				return procura
			}
		}
	} else {
		for (var i = 0 ; i < arr.length - 1; i++ ) {
			bRet = procuraRepetidos(arr,arr[i],i+1)
			if (bRet) {
				return bRet
			}
		}
	}
	return false
}

function procuraForaIntervalo(arr,vMin,vMax) {
	if ((!arr) || (!vMin) || (!vMax)) {
		alert("parâmetros errados.")
		return false;
	}
	if (vMin > vMax) {
		alert("Foram passados parâmetros em posições erradas. A função vai funcionar mesmo assim.")
		vTemp = vMax
		vMax = vMin
		vMin = vTemp
	}
	if (!arr.sort) {
		arr = arr.split(",")
	}
	for (var i = 0 ; i < arr.length; i++) {
		if (parseInt(limpaZerosEsquerda(arr[i])) < parseInt(limpaZerosEsquerda(vMin)) ||  parseInt(limpaZerosEsquerda(arr[i])) > parseInt(limpaZerosEsquerda(vMax)) || isNaN(limpaZerosEsquerda(arr[i]))) {
			return [arr[i],vMin,vMax]
		}
	}
	return false;
}

function valCampoPesq(obj,Multiplo,valMin,valMax) {
	if ((!valMin && valMax) || (valMin && !valMax)) {
		alert("ATENÇÃO !!!\nErro na chamada da função");
		return false;
	}
	if (!valMin && !valMax && !obj) { // valida digitação
		var sKeyCode = "48,49,50,51,52,53,54,55,56,57"
		sKeyCode = (Multiplo)?sKeyCode + ",44":sKeyCode
		if (sKeyCode.indexOf(event.keyCode) < 0) {
			event.keyCode = ""
			return false;
		}
	} else { // valida valor digitado
		if (obj.value == "") { return true;}
		if (!Multiplo) {
			obj.value = limpaZerosEsquerda(obj.value)
			if (obj.value.indexOf(",") >= 0) {
				alert("Esse campo não aceita pesquisa múltipla")
				obj.select(); obj.focus(); return false;					
			}
			if (isNaN(parseInt(obj.value))) {
				alert("O conteúdo do campo não é válido")
				obj.select(); obj.focus(); return false;					
			}
			if (valMin && valMax) {
				if (valMin > valMax) {
					alert("ATENÇÃO. Foram passados parâmetros em posições erradas. A função vai funcionar mesmo assim.")
					valTemp = valMax
					valMax = valMin
					valMin = valTemp
				}
				if ((obj.value < valMin) || obj.value > valMax) {
					alert("O valor digitado esta fora do intervalo válido que é [" + valMin + "," + valMax + "]")
					obj.select(); obj.focus(); return false;					
				}
			}
		} else {
			var arrTeste = obj.value.split(",")
			var sRepet = procuraRepetidos(arrTeste)
			if (sRepet) {
				alert("Dados repetidos : " + sRepet + "\nA pesquisa não pode ser executada.")
				obj.focus()
				return false;
				
			}
			sRepet = procuraForaIntervalo(arrTeste,valMin,valMax)
			if (sRepet) {
				alert("O valor digitado '" + sRepet[0] + "' esta fora do limite [" + sRepet[1] + "," + sRepet[2] + "] ou não é um valor válido.")
				obj.focus()
				return false;
			}
		}
	}
	return true;
}

function difData(d1,d2,tipo) {
	/*
	TIPO :
		Tipo 1 => DD/MM/AA
		Tipo 2 => DD/MM/AAAA
		Tipo 3 => DD/MM
		Tipo 4 => MM/AAAA
	*/
	if (!tipo) {
		return "ERRO - Esta faltando informar o tipo de data"
	}
	var dif = "#ERRO#"
	switch (parseInt(tipo)) {
		case 1 :
			// ================ DD/MM/AA =======================
			if ( !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([0-9][0-9]{1})$/.test(d1)) || !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([0-9][0-9]{1})$/.test(d2)) ) {
				return "ERRO - Datas no formato errado"			
			}
			d1 = d1.split("/")
			d2 = d2.split("/")
			d1[2] = (d1[2] <= 19)?"20" + d1[2]:"19" + d1[2]
			d2[2] = (d2[2] <= 19)?"20" + d2[2]:"19" + d2[2]
			dif = (( (new Date(d2[2], (d2[1]-1) , d2[0], 00, 00, 00)) - (new Date(d1[2], (d1[1]-1) , d1[0], 00, 00, 00)) )/86400000)
			return dif
			break;
		case 2 :
			// ================ DD/MM/AAAA =======================
			if ( !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([1-9][0-9]{3})$/.test(d1)) || !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))\W?([1-9][0-9]{3})$/.test(d2)) ) {
				return "ERRO - Datas no formato errado"
			}
			d1 = d1.split("/")
			d2 = d2.split("/")
			dif = (( (new Date(d2[2], (d2[1]-1) , d2[0], 00, 00, 00)) - (new Date(d1[2], (d1[1]-1) , d1[0], 00, 00, 00)) )/86400000)
			return dif
			break;
		case 3 :
			// ================ DD/MM =======================
			if ( !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))$/.test(d1)) || !(/^(([0]?[1-9])|([1,2]\d)|([3][0,1]))\W?(([0]?[1-9])|([1][0-2]))$/.test(d2)) ) {
				return "ERRO - Datas no formato errado"
			}
			d1 = d1.split("/")
			d2 = d2.split("/")
			dif = (( (new Date(2000, (d2[1]-1) , d2[0], 00, 00, 00)) - (new Date(2000, (d1[1]-1) , d1[0], 00, 00, 00)) )/86400000)
			return dif
			break;
		case 4 :
			// ================ MM/AAAA =======================
			if ( !(/^(([0]?[1-9])|([1][0-2]))\W?([1-9]\d{3})$/.test(d1)) || !(/^(([0]?[1-9])|([1][0-2]))\W?([1-9]\d{3})$/.test(d2)) ) {
				return "ERRO - Datas no formato errado"
			}
			d1 = d1.split("/")
			d2 = d2.split("/")
			dif = (( (new Date(d2[1], (d2[0]-1) , 1, 00, 00, 00)) - (new Date(d1[1], (d1[0]-1) , 1, 00, 00, 00)) )/86400000) // / 30.4366666666666666666666666666666666666666666667
			return dif
			break;
		default :
			return "ERRO - Tipo de Data Informada não é válida"
	}
	return dif;
}

// funcao paar tornar campos  readonly caso um campo seja preenchido
// parametros 
// 1 parametro campo a ser verificado
// na sequencia campos a serem colocados como readonly 
// se 1 parametro for igual a false da mensagem de erro e não continua na função, 
// antes era para uma possivel não desabilitação de botão de pesquisa
// exemplos
// onBlur="travaCampo(this,txUO,txUE)
// onBlur="travaCampo(false,this,txUO,txUE)

function travaCampo(){
	var flg
	if (travaCampo.arguments[0]==false) {
		alert("Favor entrar em contato com o responsavel JavaScript./nFunção travaCampo # PRInputs.js #")
		return false;
	}
	if (travaCampo.arguments[0].type == "checkbox"){
		if (travaCampo.arguments[0].checked) {
			// campo base contém valor, desabilitar os campos seguintes no 'travaCampo.arguments'
			flg = true
		} else {
		// campo base vazio, habilitar os campos seguintes no 'travaCampo.arguments'
			flg = false
		}
	}else{
		if (travaCampo.arguments[0].value!="") {
		// campo base contém valor, desabilitar os campos seguintes no 'travaCampo.arguments'
			flg = true
		} else {
		// campo base vazio, habilitar os campos seguintes no 'travaCampo.arguments'
			flg = false
		}
	}

	for (var i = 1 ; i < travaCampo.arguments.length; i++ ) {
		travaCampo.arguments[i].readOnly = flg
		travaCampo.arguments[i].disabled = flg
		obj = travaCampo.arguments[i]
		do {
			obj = obj.nextSibling
			if (obj && obj.type=='button') {
				obj.disabled=flg
			}
		} while (obj && obj.type!='button')
	}
}

function valDtLancto (data,data_Rede) {
// validar dataLancamento.
	arrTempRede = data_Rede.split("/")	
	hoje = new Date(arrTempRede[2], (arrTempRede[1]-1), (parseInt(arrTempRede[0])), 00, 00, 00)	
	hoje = new Date(hoje.getYear(),hoje.getMonth(),hoje.getDate(),00,00,00)

	
	arrTemp = data.split("/")	
	data = new Date(arrTemp[2], (arrTemp[1]-1), (parseInt(arrTemp[0])), 00, 00, 00)	
	
	mes = data.getMonth()
	
	if (hoje.getTime()<data.getTime())
	{	  
	  return false
	}
	else  
	{
		if (hoje.getTime()==data.getTime())
		{
			return true
		}
		else
		{
		
			data = new Date(arrTemp[2], (arrTemp[1]-1), (parseInt(arrTemp[0])+1), 00, 00, 00)
			//data = new Date(arrTemp[2], (arrTemp[1]), (parseInt(arrTemp[0]))+1,00, 00, 00)
		
			if (parseInt(mes) == parseInt(data.getMonth())) { // se somar um dia na data e o mes continuar o mesmo, retorna false			
				return false;
			}
			else {				
				return true	
			}	
		}
	}
	
	
}


function valHora(obj,entrada) {
	if (entrada) {
		obj.value = obj.value.replace(/\:|[a-zA-Z]/g,"")
		obj.select();
	} else {
		if (obj.value == "") return
		obj.value = obj.value.replace(/\:[a-zA-Z]/g,"")
		if (obj.value.length > 4) {
			valHoraErro(obj)
			return false;
		} else {
			if (obj.value.length < 4) {
				obj.value = ("0000").substr(0,(4-obj.value.length)) + obj.value
			}
			var a = obj.value
			if ((parseInt(a.substr(0,2)) > 23) || (parseInt(a.substr(a.length-2,2)) > 59)) {
				valHoraErro(obj)
				return false;
			}
			obj.value = a.substr(0,2) + ":" + a.substr(a.length-2,2)
		}
	}
	return true;
}

function valHoraErro(obj) {
	alert("Conteúdo informado não reconhecido como sendo hora\nVerifique a sua digitação")
	obj.focus();
	obj.select();
}

function resetTabIndex() {
	for ( var i = 0 ; i < document.all.length ; i++) {
		document.all[i].tabIndex = -1
	}
}



function DifMesAno(mesi,anoi,mesf,anof,sMsgErro) {
	if ( (parseFloat(mesi) + anoi*100 ) <= (parseFloat(mesf) + anof*100) ) {
		return true;
	} else {
		if ((mesf !== '') || (anof !== '')){	    
			if (sMsgErro) {
				alert(sMsgErro);
			}
			return false;
		} else {
			return true;
		}
	}
}

/*
Função que trata o retorno de pesquisa auxiliar múltipla

retira os nomes do retorno, evitando problemas de array em 
jscript ocasionados por possíveis virgulas existentes em campos texto

Parâmetros
sObj = Nome do campo ao qual o valor será atribuido
iIndex = Posicao relativa a funcao transf() na página pesquisar_in/pesquisar_Acoes_in 
		 do campo a ser retornado		 
iQtdElem = Quantidade de campos do retorno da pesquisar_in que são numericos

exemplos de chamada :

MontaRetMult('txProjeto',0,4)

para concatenacao de dois campos de retorno 


MontaRetMult('txProjeto',[1,2],4)


*/
function MontaRetMult(sObj, iIndex, iQtdElem){
    var arrStr =""
	var arrStr2
	var arrResp =""
	var arrAux1
	var arrAux2 = new Array()
	
	if (iQtdElem!=1){

	if (this.window.AUXCOMUM.length != 0) {	
	
	for(var i=0;i<this.window.AUXCOMUM.length;i++){
		arrAux1=this.window.AUXCOMUM[i]
	    k=0;		
		
	    for (j=0;j<arrAux1.length;j++) {				
	       if ((!isNaN(arrAux1[j])) && (arrAux1[j]!="")){
   		      arrAux2[k]=arrAux1[j];
			  k++;
		   } 	 
	    }
		this.window.AUXCOMUM[i]=arrAux2
		   arrStr= arrStr + this.window.AUXCOMUM[i] + ","	 	  
   } 
     	  arrStr2=arrStr.split(",")
	
	for(j=0;j<this.window.AUXCOMUM.length ;j++){
		  if (typeof(iIndex)=="object"){
		  	  for (l=0;l<iIndex.length;l++){
	    		 arrResp =arrResp + arrStr2[j *iQtdElem +iIndex[l]] 	     
		 	  }
			  arrResp =arrResp  + ","
	 	}	  	
	 	else
	   	  arrResp =arrResp + arrStr2[j *iQtdElem +iIndex] + ","
	  }  	  
	  pegaObjeto(sObj).value = arrResp.substring(0, arrResp.length -1)
      
	}
	}else{pegaObjeto(sObj).value = this.window.AUXCOMUM
      }
}
//passa o campo e o numeros de zeros a  serem preenchidos a esquerda
//ex : <INPUT type="text" name ="exemplo" onblur="completaZeros(this,4)">
//   para saida tipo 0003
function completaZeros(poTxt,numZeros){
	var sSrt, i;
	sStr = poTxt.value;
	if (sStr.length < numZeros && sStr.length > 0)
		for (i=sStr.length;i < numZeros; i++)
			sStr = "0" + sStr;
			
	poTxt.value = sStr;	

}

// permite entrada somente de numerico
// ex: <INPUT type="text" name ="exemplo" onkeydown="return tcl();"> 
function tcl(e){
if (((event.keyCode > 45) || (event.keyCode == 9) || (event.keyCode == 8) || (event.keyCode == 37) || (event.keyCode == 39))  && (event.keyCode < 58) || ((event.keyCode < 106) && (event.keyCode > 95))){
    return true;
    }else{
	return false;
	}
  }

function RemoveEspacos(campo){
	campo.value=gerTrim(campo.value);
	LimpaEspacosCampo(campo);
	if (campo.value==' ') 
	    campo.value=''
}

function putFocus(oDiv,campo)
{
	parent.Acoes.mAbas.selTab(oDiv);
	campo.focus();
}

// Limita a digitação em um textarea
// ex.: <textarea name="exemplo" id="exemplo" onChange="checkTamTextarea(this,'5');" onKeyDown="checkTamTextarea(this,'5');" onKeyUp="checkTamTextarea(this,'5');"></textarea>
function checkTamTextarea(campo,valor){
  StrLen = campo.value.length;
  if (StrLen == 1 && campo.value.substring(0,1) == " ")
    {
        campo.value = "";
        StrLen = 0;
    }
  else if (StrLen > valor)
    {
       campo.value = campo.value.substring(0,campo.value.length-1);
    }
}
