var nCodigoTecla = 0;

/* Tratamento de filtros especiais Opera */
function filtro_down(e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		nCodigoTecla = e.keyCode;
	};
};

function filtro_up(e) {
	nCodigoTecla = 0;
};

/* Não permite digitação de Aspas simples nem duplas */
function semaspas(e) {
	var evento = (window.event) ? event : e;
	var codigo = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
	if (evento.ctrlKey) return true;
	if (codigo == 34 || codigo == 39) return false;
return true;};

/* Não permite digitação de ponto */
function semponto(e) {
	var evento = (window.event) ? event : e;
	var codigo = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
	if (evento.ctrlKey) return true;
	if (codigo == 46) return false;
return true;};

/* Permite apenas números */
function sonumero(e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		if ((codigo < 48 && codigo != 8 && codigo != 9 && codigo != 13) || codigo > 57) return false;
		return true;
	};
};

/* Permite apenas números e uma virgula */
function sonumdecimal(oTexto,e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		if ((codigo < 48 && codigo != 8 && codigo != 9 && codigo != 13 & codigo != 44 && codigo != 45) || codigo > 57) return false;
		var nCtMenos = (oTexto.value.indexOf('-') != -1) ? 1 : 0;
		if (nCtMenos == 1 && codigo == 45) return false;
		if (codigo == 45 && oTexto.value.length != 0) return false;
		var nCtVirg = (oTexto.value.indexOf(',') != -1) ? 1 : 0;
		if (codigo == 44 && nCtVirg == 1) return false;
		return true;
	};
};

function filtrodata(oTexto,e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		if ((codigo < 48 && codigo != 8 && codigo != 9 && codigo != 13 & codigo != 47) || codigo > 57) return false;
		var nCtBarra, iBarra=0, nTam, aData;
		aData = oTexto.value.split('/');
		nTam = oTexto.value.length;
		nCtBarra = aData.length - 1;
		if (codigo == 47) iBarra = 1;
		if (iBarra == 1) {
			if (nTam == 0) return false;
			if (nCtBarra == 1 && oTexto.value.substring(nTam-1,nTam) == '/') return false;
			if (nCtBarra >= 2) return false;
		}
		return true;
	};
};

function barraautomatica(oTexto,e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		var nCtBarra, nTam, aData;
		aData = oTexto.value.split('/');
		nTam = oTexto.value.length;
		nCtBarra = aData.length - 1;
		if (nCtBarra == 2) return true;
		if (nTam == 2) {
			if (nCtBarra != 1) oTexto.value = oTexto.value + '/';
		};
		if (nTam == 5) {
			if (nCtBarra != 2) oTexto.value = oTexto.value + '/';
		}
		return true;
	};
};

function preenchedata(oTexto) {
	var cDia, cMes, cAno, aData, nCtBarra;
	var dData = new Date();
	var nAno = dData.getFullYear();
	var cAnoAtu = new String(nAno);
	var cAnoAnt = new String();
	var cAnoPos = new String();
	var nAnoAux, nAnoIni, nAnoFim;
	aData = oTexto.value.split('/');
	nCtBarra = aData.length - 1;
	cDia = aData[0];
	cMes = aData[1];
	cAno = aData[2];
	if (nCtBarra != 2) return true;
	if (cDia.length == 1) cDia = '0' + cDia;
	if (cMes.length == 1) cMes = '0' + cMes;
	if (cAno.length == 1) {
		cAno = cAnoAtu.substring(0,3) + cAno;
	};
	if (cAno.length == 2) {
		cAnoAnt = String(parseInt(cAnoAtu.substring(0,2),10) - 1);
		cAnoPos = String(parseInt(cAnoAtu.substring(0,2),10) + 1);
		nAnoAux = parseInt(cAnoAtu.substring(2,4),10);
		cAnoAtu = cAnoAtu.substring(0,2);
		
		if (nAnoAux >= 82) {
			nAno = (nAnoAux + 18) - 100;
			if (parseInt(cAno,10) <= nAno) {
				cAno = cAnoPos + cAno;
			} else {
				cAno = cAnoAtu + cAno;
			};
		} else {
			nAno = nAnoAux + 18;
			if (parseInt(cAno,10) <= nAno) {
				cAno = cAnoAtu + cAno
			} else {
				cAno = cAnoAnt + cAno;
			}
		};
	};
	if (cAno.length == 3) {
		cAnoAtu = cAnoAtu.substring(0,1)
		cAno = cAnoAtu + cAno;
	};
	oTexto.value = cDia + '/' + cMes + '/' + cAno;
};

function filtromesano(oTexto,e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		if ((codigo < 48 && codigo != 8 && codigo != 9 && codigo != 13 & codigo != 47) || codigo > 57) return false;
		var nCtBarra, iBarra=0, nTam, aData;
		aData = oTexto.value.split('/');
		nTam = oTexto.value.length;
		nCtBarra = aData.length - 1;
		if (codigo == 47) iBarra = 1;
		if (iBarra == 1) {
			if (nTam == 0) return false;
			if (nCtBarra == 1 && oTexto.value.substring(nTam-1,nTam) == '/') return false;
			if (nCtBarra >= 1) return false;
		}
		return true;
	};
};

function barraautomesano(oTexto,e) {
	var evento = (window.event) ? event : e;
	if (evento) {
		if (evento.ctrlKey) return true;
		var comando = (window.event && navigator.appName != 'Opera') ? evento.keyCode : evento.which;
		if (comando == 0) return true;
		var codigo = (evento.charCode) ? evento.charCode : evento.keyCode;
		if (navigator.appName == 'Opera') {
			if (codigo == 35 && nCodigoTecla == 35) return true;
			if (codigo == 36 && nCodigoTecla == 36) return true;
			if (codigo == 46 && nCodigoTecla == 46) return true;
		};
		var nCtBarra, nTam, aData;
		aData = oTexto.value.split('/');
		nTam = oTexto.value.length;
		nCtBarra = aData.length - 1;
		if (nCtBarra == 1) return true;
		if (nTam == 2) {
			if (nCtBarra == 0) oTexto.value = oTexto.value + '/';
		};
		return true;
	};
};

function preenchemesano(oTexto) {
	var cMes, cAno, aData, nCtBarra;
	var dData = new Date();
	var nAno = dData.getFullYear();
	var cAnoAtu = new String(nAno);
	var cAnoAnt = new String();
	var cAnoPos = new String();
	var nAnoAux, nAnoIni, nAnoFim;
	aData = oTexto.value.split('/');
	nCtBarra = aData.length - 1;
	cMes = aData[0];
	cAno = aData[1];
	if (nCtBarra != 1) return true;
	if (cMes.length == 1) cMes = '0' + cMes;
	if (cAno.length == 1) {
		cAno = cAnoAtu.substring(0,3) + cAno;
	};
	if (cAno.length == 2) {
		cAnoAnt = String(parseInt(cAnoAtu.substring(0,2),10) - 1);
		cAnoPos = String(parseInt(cAnoAtu.substring(0,2),10) + 1);
		nAnoAux = parseInt(cAnoAtu.substring(2,4),10);
		cAnoAtu = cAnoAtu.substring(0,2);
		
		if (nAnoAux >= 82) {
			nAno = (nAnoAux + 18) - 100;
			if (parseInt(cAno,10) <= nAno) {
				cAno = cAnoPos + cAno;
			} else {
				cAno = cAnoAtu + cAno;
			};
		} else {
			nAno = nAnoAux + 18;
			if (parseInt(cAno,10) <= nAno) {
				cAno = cAnoAtu + cAno
			} else {
				cAno = cAnoAnt + cAno;
			}
		};
	};
	if (cAno.length == 3) {
		cAnoAtu = cAnoAtu.substring(0,1)
		cAno = cAnoAtu + cAno;
	};
	oTexto.value = cMes + '/' + cAno;
};

/* Limita o tamanho de caracteres de um TextArea */
function vertextarea(oObj, nLim, cObjCt) {
	var limite = nLim;
	myTextArea = oObj;
	if (myTextArea.value.length > limite) {
		myTextArea.value = myTextArea.value.substr(0, (myTextArea.value.length - (myTextArea.value.length - limite)));
	};
	if (cObjCt != "") {
		document.getElementById(cObjCt).value = myTextArea.value.length;
	}
};

/* Aplica os filtros de acordo com a classe */
function filtros(cDivForm) {
	var oInput, nCt=0;
	while (oInput = document.getElementById(cDivForm).getElementsByTagName ('INPUT') [nCt++]) {
		if (oInput.className.indexOf('ftexto') != -1) {
			oInput.onkeypress = function(event) {return semaspas(event)};
		};
		if (oInput.className.indexOf('finteiro') != -1) {
			if (navigator.appName == 'Opera') {oInput.onkeydown = function(event) {return filtro_down(event)};};
			oInput.onkeypress = function(event) {return sonumero(event)};
			if (navigator.appName == 'Opera') {oInput.onkeyup = function(event) {return filtro_up(event)};};
		};
		if (oInput.className.indexOf('fdecimal') != -1) {
			if (navigator.appName == 'Opera') {oInput.onkeydown = function(event) {return filtro_down(event)};};
			oInput.onkeypress = function(event) {return sonumdecimal(this,event)};
			if (navigator.appName == 'Opera') {oInput.onkeyup = function(event) {return filtro_up(event)};};
		};
		if (oInput.className.indexOf('fdata') != -1) {
			if (navigator.appName == 'Opera') {oInput.onkeydown = function(event) {return filtro_down(event)};};
			oInput.onkeypress = function(event) {return filtrodata(this,event)};
			oInput.onblur = function(event) {return preenchedata(this)};
			if (navigator.appName == 'Opera') {
				oInput.onkeyup = function(event) {return barraautomatica(this,event);filtro_up(event);};
			} else {
				oInput.onkeyup = function(event) {return barraautomatica(this,event);};
			};
		};
		if (oInput.className.indexOf('fmesano') != -1) {
			if (navigator.appName == 'Opera') {oInput.onkeydown = function(event) {return filtro_down(event)};};
			oInput.onkeypress = function(event) {return filtromesano(this,event)};
			oInput.onblur = function(event) {return preenchemesano(this)};
			if (navigator.appName == 'Opera') {
				oInput.onkeyup = function(event) {return barraautomesano(this,event);filtro_up(event);};
			} else {
				oInput.onkeyup = function(event) {return barraautomesano(this,event);};
			};
		};
	};
};

/* Retorna o valor numérico de uma string com decimal vírgula */
function valor(num,decimais) {
	if (num == '') return 0;
	var tmpNumStr = num.replace(/\./g,'').replace(/\,/g,'.');
	var tmpNum = parseFloat(tmpNumStr);
	if (isNaN(tmpNum)) return 0;
	var iSinal = (tmpNum < 0)?-1:1;
	tmpNum *= Math.pow(10,decimais);
	tmpNum = Math.round(Math.abs(tmpNum));
	tmpNum /= Math.pow(10,decimais);
	tmpNum *= iSinal;
	return parseFloat(tmpNum);
};

/* Formata o valor numérico com decimal e milhar */
function formatavalor(num,decimais,lLeadingZero,lMilhar) {
	var tmpNum = num;
	if (isNaN(parseInt(tmpNum))) tmpNum = 0;
	var iSinal = (tmpNum < 0)?-1:1;
	tmpNum *= Math.pow(10,decimais);
	tmpNum = Math.round(Math.abs(tmpNum));
	tmpNum /= Math.pow(10,decimais);
	tmpNum *= iSinal;
	var tmpNumStr = new String(tmpNum);
	if (!lLeadingZero && tmpNum < 1 && tmpNum > -1 && tmpNum != 0) {
		if (tmpNum > 0) {
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		} else {
			tmpNumStr = '-' + tmpNumStr.substring(2,tmpNumStr.length);
		};
	};
	tmpNumStr = tmpNumStr.replace(/\./g,',');
	if (lMilhar && (tmpNum >= 1000 || tmpNum <= -1000)) {
		var iStart = tmpNumStr.indexOf(',');
		if (iStart < 0) iStart = tmpNumStr.length;
		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + '.' + tmpNumStr.substring(iStart,tmpNumStr.length);
			iStart -= 3;
		}	
	};
	var cInt = (tmpNumStr.indexOf(',')==-1)?tmpNumStr:tmpNumStr.substring(0,tmpNumStr.indexOf(','));
	var cDec = (tmpNumStr.indexOf(',')==-1)?'00':tmpNumStr.substring(tmpNumStr.indexOf(',')+1);
	while (cDec.length < decimais) cDec = cDec + '0';
	return cInt + (decimais==0?'':',' + cDec);
};

/* Left Trim */
function ltrim( value ) {
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, '$1');
};

/* Right Trim */
function rtrim( value ) {
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, '$1');
};

/* All Trim */
function trim( value ) {
	return ltrim(rtrim(value));
};

/* Validação de data na consistência */
function validadata(oTexto) {
	var aData, cDia, cMes, cAno, nDia, nMes, nAno;
	if (oTexto.length < 10) return false;
	aData = oTexto.value.split('/');
	if (aData.length != 3) {
		return false;
	} else {
		cDia = aData[0];
		cMes = aData[1];
		cAno = aData[2]; }
		nDia = parseInt(cDia, 10);
		if (isNaN(nDia)) return false;
		nMes = parseInt(cMes, 10);
		if (isNaN(nMes)) return false;
		nAno = parseInt(cAno, 10);
		if (isNaN(nAno)) return false;
		if (nMes>12 || nMes<1) return false;
		if ((nMes == 1 || nMes == 3 || nMes == 5 || nMes == 7 || nMes == 8 || nMes == 10 || nMes == 12) && (nDia > 31 || nDia < 1)) return false;
		if ((nMes == 4 || nMes == 6 || nMes == 9 || nMes == 11) && (nDia > 30 || nDia < 1)) return false;
		if (nMes == 2) {
		if (nDia < 1) return false;
		if (AnoBissexto(nAno) == true) {
			if (nDia > 29) {
				return false;
			}
		} else {
			if (nDia > 28) {
				return false;
			}
		}
	}
	return true;
};

function AnoBissexto(nAno) {
	if (nAno % 100 == 0) {
		if (nAno % 400 == 0) return true;
	} else {
		if ((nAno % 4) == 0) return true;
	}
	return false;
} ;

function validamesano(oTexto) {
	var cData, aData;
	var cMes, cAno;
	var nMes, nAno;
	cData = oTexto;
	if (cData.length < 7) return false;
	aData = cData.value.split('/');
	if (aData.length != 2) {
		return false;
	} else {
		cMes = aData[0];
		cAno = aData[1];
	};
	nMes = parseInt(cMes, 10);
	if (isNaN(nMes)) return false;
	nAno = parseInt(cAno, 10);
	if (isNaN(nAno)) return false;
	if (nMes>12 || nMes<1) return false;
	return true;
};
