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=99999999.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);
}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;alert('O valor excedeu o limite para cadastro online.');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);}
