
var objBrow,LAST_ERR_VALUE="",errorCode=0;
var ERRO=REPET_ERR=false;
var LAST_FIELD=CURRENT_FIELD=LAST_ERR_FIELD=null;
var SZ_DATE=8,
SZ_CEP=8,
SZ_ACCOUNT=7,
SZ_AG_ACCOUNT=11,
SZ_AG_SAVINGS=SZ_AG_ACCOUNT, 
SZ_AG_CC_CP=SZ_AG_ACCOUNT, 
SZ_MONEY=10,
SZ_FLOAT=10,
SZ_CPF=11,
SZ_CNPJ=14,
SZ_CPF_CNPJ=SZ_CNPJ,
SZ_PERCENT=6,
SZ_PERCENT_INTERVAL=6,
SZ_BRANCH=4,
SZ_MONTH_YEAR=6,
SZ_TIME=4,
MAX_VALUE=9999999.99;
function formatCamp(campo,tp,par1,par2,par3){
var ie=(brow().isIE()&&!brow().isMac()),v=brow().getVersion();
var b=parent.buttons;
if(ie&&(v>=5 && v<5.2)&&b&&b.myBarra&&b.myBarra.clicked==true){
	parent.buttons.myBarra.clicked=false;
	eval("try{campo.focus();}catch(e){}");
	return false;
}
var nArg=formatCamp.arguments.length;
ERRO=false;
var vr=trim(campo.value);
if(!campo|| !vr ||vr.length==0){
	if(/^(neg_)?(money|money2)$/.test(tp))campo.value="0,00";
	return false;
}
if(nArg==2)par1="";
if(tp=="interval" || tp=="percent_interval"){
	if(nArg<=4)par3="";
	return formatType(campo,tp,par3,par1,par2);
}else return formatType(campo,tp,par1);
}
function formatType(f,tp,msgErr,adarg1,adarg2){
if(tp=="none"){f.value=removeSpcChars(f.value);return true;}
var vr=unformatField(f.value,tp,f.type);
LAST_FIELD=f;
var ret=isValidValue(vr,tp,adarg1,adarg2);
if(!ret){showError(tp,msgErr);return false;}
else if(!_isRE(tp))f.value=getFmtValue((typeof ret=="boolean")?vr:ret,tp);
ERRO=false;
return true;
}
function removeSpcChars(vr,type){
var ret="",re=/197|198|208|215|216|222|223|229|230|240|247|248/,c=0,s=String(vr);
for(var i=0;i<s.length;i++){
	c=s.charCodeAt(i);
	if((c>31&&c<253&&(c<127||c>191)&&!re.test(c))||(type=="textarea"&& (c==9||c==13||c==10)))ret+=s.charAt(i);
}
return ret;
}
function validaConteudo(event,el,tp){   
var t=(typeof event.which!="undefined"&& event.which!=null?event.which:event.keyCode),key;
if(tp=='none' || t<20)return true;
key=removeSpcChars(String.fromCharCode(t),el.type);
if(key=="")return false;
var tp_sp=/^sp_/.test(tp);
if(_isRE(tp))return tp.test(key);
else if(/^(percent|percent_interval|(neg_)?(numeric|float(\d{0,1})|money(\d{0,1})))$/.test(tp)){
	return isNumeric(key)||(!/numeric/.test(tp)&&key==","&&el.value.indexOf(",")==-1)||(/^neg_/.test(tp)&&key=="-" && el.value.indexOf("-")==-1)||(el.value.trim().length==0&&key=="-");
}else if(/^(sp_)?alfanumeric$/.test(tp))
	return isAlfaNumeric(key)||(tp_sp && key==" ");
else if(/^(sp_)?textnumber$/.test(tp))   
	return isTextNumber(key)||(tp_sp && key==" ");
else{
	switch(tp){
	case "email":return true;
	case "uppercase":return !/[\'\"]/.test(key);
	case "text":case "full_name":return isAlfa(key)|| /[ ]/.test(key);
	case "text_entry":return isTextNumber(key)||/[\.\-\/\,=]|\s/.test(key);
	case "default":return !/'|"/.test(key);
	default:return isNumeric(key);
	}
}
}
function _getNDec(t){
	var arr=t.match(/(\d+)\s*$/);
	return arr?parseInt(arr[1],10):2;
}
function unformatField(valor,tipo,inputType){
var t=(arguments.length<1)?"default":String(tipo),
vr=trim(removeSpcChars((typeof valor=="object"?valor.value:valor),(inputType?inputType:valor.type)));
if(!vr||vr.length==0)return "";
if(/^(date|month_year|time|ag_account|ag_cc_cp|ag_savings|branch|account|cep|(neg_)?numeric|interval)$/.test(t))
	vr=(/^neg_/.test(t)&&vr.indexOf("-")==0?"-":"")+justNumbersStr(vr);
else if(/^(percent|percent_interval|(neg_)?(float(\d{0,1})|money(\d{0,1})))$/.test(t))vr=toFloat(vr,_getNDec(t));
else{
	if(/^(cpf|cnpj|cpf_cnpj)$/.test(t)){
		vr=justNumbersStr(vr);
		var isCPF=tipo=="cpf"||(tipo=="cpf_cnpj" && vr.length<=SZ_CPF);
		vr=repeatStr(vr,"0",isCPF?SZ_CPF:SZ_CNPJ);
		if(parseInt(vr,10)==0)vr="";
	}else if(t=="email")vr=trim(vr)
}
if(typeof valor=="object")valor.value=vr;
return vr;
}
function removeCaracs(f,type){
if(_isRE(type))return;
var vr=unformatField(f.value,type,f.type);
if(f.value!=vr)f.value=vr;
focusNetscape(f);
}
function _isRE(re){return typeof re=="object" && typeof re.test=="function";}
function isValidValue(vr,tp,adarg1,adarg2){
var re,isNum=isNumeric(vr);
if(_isRE(tp))return tp.test(vr);
else if(/^(ag_account|ag_cc_cp|ag_savings|account|branch|cep)$/.test(tp))
	return isNum && vr.length==eval("SZ_"+tp.toUpperCase());
else if(/^percent$/.test(tp))
	return isFloatNumber(vr)&& Number(String(vr).replace(/,/g,"."))<1000;
else if(/^(percent|(neg_)?(float(\d{0,1})|money(\d{0,1})))$/.test(tp))
	return (!/^neg_/.test(tp)&&vr.indexOf("-")!=-1?false:isFloatNumber(vr));
else if(/textnumber$/.test(tp))
	return isTextNumber((tp.indexOf("sp_")==0)?removeStr(vr," "):vr);
else if(/text_entry$/.test(tp))
	return isTextNumber(vr.replace(/[\.\-\/\,=]|\s/g,""));
else if(/alfanumeric$/.test(tp))
	return isAlfaNumeric((tp.indexOf("sp_")==0)?removeStr(vr," "):vr);
else{
	switch(tp){
	case "time":
		switch(vr.length){
		case 1:vr="0"+vr+"00";break;
		case 2:vr+="00";break;
		case 3:vr="0"+vr+"0";break;
		}
		vr=repeatStr(vr,"0",4,"right");
		return(isNum && /^([0-1]\d[0-5]\d)|(2[0-3][0-5]\d)$/.test(vr))?vr:null;
	case "date":var obj=new DateValidation(vr);return (isNum && obj.isDate())?obj:null;
	case "month_year":var obj=new DateValidation("01"+vr);return (isNum && obj.isDate())?obj:null;
	case "text":return isAlfa(vr.replace(/[ ]/g,""));
	case "full_name":return isFullName(vr);
	case "email":return isEmail(vr);
	case "cpf":return isCPF(vr);
	case "cnpj":return isCNPJ(vr);
	case "cpf_cnpj":return (vr.length <=SZ_CPF)?isCPF(vr):isCNPJ(vr);
	case "interval":vr=parseInt(vr,10);return vr>=adarg1 && vr<=adarg2;
	case "percent_interval":
  	if(!isFloatNumber(vr))return false;
	  vr=parseFloat(String(vr).replace(/,/g,"."),10);
    return vr>=adarg1 && vr<=adarg2;    
	case "default":return !/'|"/.test(vr);
	default:return true;
	}
}
}
function getFmtValue(vr,tp){
	if(tp=="cpf_cnpj")tp=(vr.length <=SZ_CPF)?"cpf":"cnpj";
	if(/^(neg_)?money/.test(tp))return fmtMoney(vr,_getNDec(tp));
	else{
		switch(tp){
		case "time":return vr.slice(0,2)+":"+vr.slice(2,4); 
		case "date":return vr.getDateValue();
		case "month_year":return vr.getMonthDateValue();
		case "ag_account":return vr.slice(0,4)+"-"+vr.slice(4,9)+"-"+vr.slice(9,11);
		case "ag_cc_cp":return vr.slice(0,4)+"-"+vr.slice(4,11);
		case "ag_savings":return vr.slice(0,4)+"-"+vr.slice(4,10)+"-"+vr.slice(10,11);
		case "account":return vr.slice(0,5)+"-"+vr.slice(5,7);
		case "cep":return vr.slice(0,5)+"-"+vr.slice(5,8);
		case "uppercase":case "full_name": return vr.toUpperCase();
		case "cpf":return vr.slice(0,3)+"."+vr.slice(3,6)+"."+ vr.slice(6,9)+ "-"+vr.slice(9,11);
		case "cnpj":return vr.slice(0,2)+"."+vr.slice(2,5)+"."+vr.slice(5,8)+"/"+vr.slice(8,12)+"-"+vr.slice(12,14);
		default:return vr;
		}
	}
}
function fmtMoney(vr,ndec){
var neg=vr.indexOf("-")==0;
if(verifyMaxValue(vr)){ERRO=true;return "0,00";}
vr=toFloat(vr,ndec);
var vraux="",p,pDec=vr.indexOf(","),vrDec=vr.slice(pDec+1);
for(var i=pDec;i>(neg?1:0);i--){
	p=i-pDec;
	if(i!=pDec&&(p%3==0))vraux+=".";
	vraux+=vr.charAt(i-1);
}
return (neg?"-":"")+invertStr(vraux)+","+vrDec;
}
function setMaxValue(vr){MAX_VALUE=vr;}
function verifyMaxValue(vr){return vr.length>0 &&(parseFloat(vr)>MAX_VALUE);}
function toFloat(src,ndec){
src=trim(src);
if(!/^\-?([0-9]|\.)*\,{0,1}[0-9]*$/.test(src)||src.charAt(0)==".")return src;
var tam=src.length,pDec=src.indexOf(",");
if(src.length==0)src="0";
if(pDec==-1){
	var p=src.indexOf(".");
	if(p!=-1&&p==(tam-ndec-1))src=src.replace(/\.(\d*)$/,",$1");
	else return removeStr(src,".")+","+repeatNStr("0",ndec);
	pDec=src.indexOf(",");
}
src=removeStr(src,".");
if(pDec==0)return "0"+src+repeatNStr("0",ndec+1-src.length);
else{
	if(pDec>(tam-ndec-1))src+=repeatNStr("0",pDec-(tam-ndec-1));
	pDec=src.indexOf(",");
	return parseInt(src.slice(0,pDec),10)+src.slice(pDec,pDec+ndec+1);
}
}
function saltaCampo(ev,field,tp,size){
var tc,max=size,nargs=saltaCampo.arguments.length;
if(/^(neg_)?float/.test(tp))max=(nargs>3)?size:SZ_FLOAT;
else if(/^(neg_)?money/.test(tp)){
	if(!verifyMaxValue(field.value))max=(nargs>3)?size:SZ_MONEY;
	else field.value="0,00";
}else if(/^(date|month_year|time|cpf|cnpj|cpf_cnpj|cep|account|branch|percent|percent_interval|ag_account|ag_cc_cp|ag_savings)$/.test(tp))
	max=eval("SZ_"+tp.toUpperCase());
tc=brow().isNetscape()?ev.which:ev.keyCode;
if(String(field.value).length>=max && tc>=48){autoSkip(field);return true;}
else return false;
}
function showError(type,msgU){
ERRO=true;
var b=brow(),canShow=true;
if(typeof type=="object" && !_isRE(type)){alert(msgU);focusCamp(type);return;}
if(b.isIE() && parseInt(b.getMajorver(),10)<5){
	if(CURRENT_FIELD && LAST_ERR_FIELD==CURRENT_FIELD && LAST_ERR_VALUE==CURRENT_FIELD.value){
		REPET_ERR=true;
		CURRENT_FIELD.value=LAST_ERR_VALUE="";
		LAST_ERR_FIELD=null;
		canShow=false;
	}else{
		LAST_ERR_FIELD=CURRENT_FIELD;
		LAST_ERR_VALUE=(CURRENT_FIELD?CURRENT_FIELD.value:null);
		REPET_ERR=false;
	}
}
if(canShow){
	var m=". Digite novamente.";
	switch(type){
	case "date":msg="Data inválida"+m;break;
	case "time":msg="Hora inválida"+m;break;
	case "ag_account":msg="Agência/Conta corrente incorretos"+m;break;
	case "ag_cc_cp":msg="Agência/Conta corrente ou Agência/Conta poupança incorretos"+m;break;
	case "ag_savings":msg="Agência/Conta poupança incorretos"+m;break;
	case "branch":msg="Agência inválida"+m;break;
	case "account":msg="Conta corrente inválida"+m;break;
	case "cep":msg="CEP inválido"+m;break;
	case "email":msg="E-mail incorreto"+m;break;
	case "cpf":msg="CPF inválido"+m;break;
	case "cnpj":msg="CNPJ inválido"+m;break;
	case "cpf_cnpj":msg="CPF/CNPJ inválido"+m;break;
	case "month_year":msg="Mês e ano inválidos"+m;break;
	case "full_name":
		switch(errorCode){
			case 0:msg="Nome inválido."+m;break;
			case 1:msg="Informe sobrenome.";break;
			case 2:msg="Informe primeiro nome com mais de 2 caracteres.";break;
			case 3:msg="Informe nome sem caracteres repetidos mais de 3 vezes.";break;
		}
		break;
	default:
		if(/money/.test(type))msg="Valor inválido"+m;
		else msg="Dados inválidos"+m;
	}
	alert((!msgU || msgU=="")?msg:msgU);
}
if(brow().isNetscape())LAST_FIELD.value="";
if(LAST_FIELD)LAST_FIELD.focus();
}
function focusCamp(f){
if(brow().isNetscape())f.value="";
else f.focus();
ERRO=true;
}
function focusNetscape(f){
CURRENT_FIELD=f;
var b=brow();
if(b.isNetscape()){
	if(ERRO){LAST_FIELD.focus();ERRO=false;}
}else if(b.isIE()&& parseInt(b.getMajorver(),10)>4)if(f.select)f.select();
}
function focusField(f){
if(!f){alert("focusField: Campo não encontrado.");return;}
var ie=(brow().isIE()&&!brow().isMac()),v=brow().getVersion(),b=parent.buttons;
if(ie&&(v>=5 && v<5.2)&&b&&b.myBarra){
	var tp=f.type;
	if(tp && /^(text|password)$/.test(tp)&& f.onblur&&/formatCamp\(/.test(f.onblur)){
	  if(!window.event)window.focus();
	}else b.myBarra.clicked=false; 
}
if(f.type!="hidden" && !f.disabled)f.focus();
}
function brow(){if(typeof objBrow!="object")objBrow=new Browser();return objBrow;}
function repeatNStr(vr,n){
var r="",i;
for(i=0;i<n;i++)r+=vr;
return r;
}
function unformatFields(form){
var f,i,tp;
if(!form)return;
for(i=0;i<form.length;i++){
	f=form.elements[i];
	if(f.type=="text"){
		tp=getFieldType(f);
		if(tp){vr=unformatField(f.value,tp);f.value=(!vr?"":vr);}
	}
}
}
function getFieldType(f){
var blur=f.onblur;
if(!blur)return null;
var c=changeStr(removeStr(blur.toString()," "),"\'","\"");
c=c.replace(/[\n\t]/g,"").toLowerCase();
var ret=/^.*formatcamp\((.*)\).*$/.exec(c)[1];
return ret.split("\"")[1];
}
function isTextNumber(v){return /^[0-9a-zA-ZáéíóúçãõâêôàÁÉÍÓÚÇÃÕÂÊÔÀ]+$/.test(v);}
function isFloatNumber(n){return /^\-?\d+(,\d+|\d*)$/.test(n);}

function DateValidation(d){
	this.dtSrc=d;
	this.dtValue="";
	this.isDate=_isDate;
	this.getDateValue=function() {return(this.dtValue);};
	this.getMonthDateValue=function() {return(this.dtValue.slice(3));} 
}
function _isDate(){
	var vrs=/^(0[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])(\d{2}|19\d{2}|20\d{2})$/.exec(justNumbersStr(this.dtSrc));
	if(!vrs || vrs.length<4)return false;
	var d=parseInt(vrs[1],10),m=parseInt(vrs[2],10),a=parseInt(vrs[3],10);		
	if(a<100)a+=(a<30?2000:1900);
	if(/^(4|6|9|11)$/.test(m) && d==31)return false;
	if(m==2){
		var bissexto=(((a%4==0)&&a%100!=0)||a%400==0);
		if(d>29 ||(d==29 && !bissexto))return false;
	}
	this.dtValue=repeatStr(d,"0",2)+"/"+repeatStr(m,"0",2)+"/"+a;
	return true;
}
function DateObj(d){
	d=trim(d);
	if(!d)return;
	var t=d.length,tamDia=2,tamMes=2;
	if(t==10||t==8||t==6||t==9){
		this.isValid=true;
		this.srcDate=d;
		this.setDay=function(d){this.day=repeatStr(d,"0",2);}
		this.setMonth=function(m){this.month=repeatStr(m,"0",2);}
		this.setYear=function(a){
			var nAno=parseInt(a,10);
                	if(nAno<100){
				nAno+=(nAno<30?2000:1900);
				this.year=String(nAno);
			}else this.year=String(a);
		}
		this.date=d.replace(/\//g,"");
		this.day=this.month=this.year='';
		if(t==8 && /^\d\/\d\/\d{4}$/.test(d)){
			tamDia=1;
			tamMes=1;
		}else if( t==9 && /^\d\/\d{2}\/\d{4}$/.test(d)){
			tamDia=1;
			tamMes=2;
		}
		this.setDay(this.date.slice(0,tamDia));
		this.setMonth(this.date.slice(tamDia,tamDia+tamMes));
		this.setYear(this.date.slice(tamDia+tamMes));
		this.daysTo=_DaysTo;
		this.lesserThan=function(d){return Number(this.year+this.month+this.day) < Number(d.year+d.month+d.day)};
		this.biggerThan=function(d){return (!this.lesserThan(d)&& !this.equal(d));}
		this.equal=function(d){return (Number(this.day)==Number(d.day)&& Number(this.month)==Number(d.month) && Number(this.year)==Number(d.year));}
		this.biggerOrEqualThan=function(d){return this.biggerThan(d)||this.equal(d)};
		this.lesserOrEqualThan=function(d){return this.lesserThan(d)||this.equal(d)};
		this.add=_DOAdd;
		this.formatDate=_DOFormat;
	}else this.isValid=false;
}
function _DOFormat(d){
if(!d)d="dd/mm/aaaa";
var t=d.length,i=0,s="",m=["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],tk;
	while(i<t){
		tk=d.substring(i,i+2);
		if(/^aa|mm|dd|MM$/.test(tk)){
			switch(tk){
			case "dd":s+=this.day;break;
			case "mm":s+=this.month;break;
			case "MM":s+=m[Number(this.month)-1];break;
			case "aa":
				if(d.substring(i+2,i+4)=="aa"){s+=this.year;i+=2;}
				else s+=String(this.year).substring(2,4);
				break;
			}
			i+=2;
		}else{s+=d.substring(i,i+1);i+=1;}
	}
	return s;
}
function _DOAdd(d){
	if(typeof d!="number")return;
	var dA=new Date(this.month+"/"+this.day+"/"+this.year);
	dA.setDate(Number(d)+Number(this.day));
	this.day=repeatStr(dA.getDate(),"0",2);
	this.month=repeatStr(dA.getMonth()+1,"0",2);
	this.year=dA.getUTCFullYear();
}
function _DaysTo(d){
	var msDay=24*60*60*1000;
	var s=new Date(this.month+"/"+this.day+"/"+this.year);
	var f=new Date(d.month+"/"+d.day+"/"+d.year);
	return Math.floor((f.getTime()-s.getTime())/msDay);
}
function isInInterval(dtIn,dtFi,pIn,pFi,msg1,msg2,msg3){
	var iDt=new DateObj(dtIn),fDt=new DateObj(dtFi);
	var iPer=new DateObj(pIn),fPer=new DateObj(pFi);
	if(!msg1||msg1=="")msg1='Data inicial maior que a data final. Digite novamente.';
	if(!msg2||msg2=="")msg2='Data inicial fora do período disponível. Digite novamente.';
	if(!msg3||msg3=="")msg3='Data final fora do período disponível. Digite novamente.';
	if(iDt.isValid&&fDt.isValid&&iPer.isValid&&fPer.isValid){
		if(fDt.lesserThan(iDt)){alert(msg1);return false;}
		else if(iDt.lesserThan(iPer)){alert(msg2);return false;}
		else if(fPer.lesserThan(fDt)){alert(msg3);return false;}
		return true;
	}
}
function isInDaysLimit(dtIn,dtFi,dias,msg){
	if(!msg)msg="O intervalo entre as datas não pode ultrapassar "+dias+(dias>1?" dias":" dia")+". Digite novamente.";
	var sDt=new DateObj(dtIn),fDt=new DateObj(dtFi);
	if(sDt.isValid && fDt.isValid){
		if((sDt.daysTo(fDt)+1)>dias){alert(msg);return false;}
		return true;
	}
}

