/* 

#  $Id: validate_ITE.js,v 1.1 2008/04/03 19:13:12 antonioa Exp $

*/

var objBrow,LAST_ERR_VALUE="";

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_MONEY=10,

SZ_FLOAT=10,

SZ_CPF=11,

SZ_CNPJ=14,

SZ_CPF_CNPJ=SZ_CNPJ,

SZ_PERCENT=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"){

	if(nArg<=4) par3="";

	return formatType(campo,tp,par3,par1,par2);

}else return formatType(campo,tp,par1);

}

function formatType(f,tp,msgErr,adarg1,adarg2){

var vr=unformatField(f.value,tp);

LAST_FIELD=f;

var ret=isValidValue(vr,tp,adarg1,adarg2);

if(!ret){

	showError(tp,msgErr);

	return false;

}else f.value=getFmtValue((typeof ret=="boolean")?vr:ret,tp);

ERRO=false;

return true;

}

function validaConteudo(event,el,tp)

{

var t=(typeof event.which!="undefined"&& event.which!=null?event.which:event.keyCode),key=String.fromCharCode(t);

if(t<20)return true;

var tp_sp=/^sp_/.test(tp);

if(/^(percent|(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":

		case "uppercase":return true;

		case "text":return isAlfa(key)|| /[ ]/.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){

	var vr=(typeof valor=="object")?valor.value:String(valor);

	var t=(arguments.length<1)?"default":String(tipo);

	if(!trim(vr)||trim(vr).length==0)return "";

	if(/^(date|month_year|time|ag_account|ag_savings|branch|account|cep|(neg_)?numeric|interval)$/.test(t))

		vr=(/^neg_/.test(t)&&vr.indexOf("-")==0?"-":"")+justNumbersStr(vr);

	else if(/^(percent|(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;

	else return vr;

}

function removeCaracs(f,type){

	var vr=unformatField(f.value,type);

	if(f.value!=vr)f.value=vr;

	focusNetscape(f);

}

function isValidValue(vr,tp,adarg1,adarg2){

var re,isNum=isNumeric(vr);

if(/^(ag_account|ag_savings|account|branch|cep)$/.test(tp))

	return isNum && vr.length==eval("SZ_"+tp.toUpperCase());

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(/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 "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 "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_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":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,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|ag_account|ag_savings)$/.test(tp))

		max=eval("SZ_"+tp.toUpperCase());

	else if(/^(text|uppercase|interval|(sp_)?alfanumeric|(sp_)?textnumber|default|(neg_)?numeric|email)$/.test(tp))

		max=size;

	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"){

	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_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;

		default:msg="Valor inválido"+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; 

}

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_ITE("\"")[1];

}

function isTextNumber(v){return /^[0-9a-zA-ZáéíóúçãõâêôàÁÉÍÓÚÇÃÕÂÊÔÀ]+$/.test(v);}

function isFloatNumber(n){return /^\-?\d+(,\d+|\d*)$/.test(n);}