	function trim(texto) {
		if (texto == null)
			return '';

		var temp = texto.charAt(0);

		while ((temp == ' ') || (temp == '\t') || (temp == '\n') || (temp == '\r')) {
			texto = texto.substr(1, texto.length - 1);
			temp = texto.charAt(0);
		}

		var temp = texto.charAt(texto.length-1);

		while ((temp == ' ') || (temp == '\t') || (temp == '\n') || (temp == '\r')) {
			texto = texto.substr(0, texto.length - 1);
			temp = texto.charAt(texto.length-1);
		}

		return texto;
	}

	function str_replace(antigo, novo, texto) {
		if ((texto != null) && (texto != '')) {
			while (texto.indexOf(antigo) != -1) {
				texto = texto.replace(antigo, novo);
			}

			return texto;
		}
		else {
			return '';
		}
	}

	function explode(separador, valor) {
		var temp = '';
		var retorno = new Array();
		for (i = 0; i < valor.length; i++) {
			caracter = valor.substr(i, 1);

			if (caracter != separador) {
				temp += caracter;
			}
			else {
				retorno[retorno.length] = temp;
				temp = '';
			}
		}
		if (temp != '')
			retorno[retorno.length] = temp;
		return retorno;
	}

	function FiltraTexto(texto, dominio) {
		var i, j, c;
		var temp = '';

		for (i = 0; i < texto.length; i++) {
			c = texto.substr(i, 1);

			for (j = 0; j < dominio.length; j++) {
				if (c == dominio.substr(j, 1)) {
					break;
				}
			}

			if (j < dominio.length) {
				temp = temp + c;
			}
		}

		return temp;
	}

	function SomenteNumeros(texto) {
		return FiltraTexto(texto, '0123456789');
	}

	function StringReplace(string, old_char, new_char) {
		var temp = string;

		while (temp.indexOf(old_char) != -1) {
			temp = temp.replace(old_char, new_char);
		}

		return temp;
	}

	function MaxLength(field, maxlimit) {
		if (field.value.length > maxlimit) {
			field.value = field.value.substring(0, maxlimit);
		}
	}

	function EmailValido(email) {
		if (email.length > 0) {
			if (!/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/.test(email)) {
				return false;
			}
		}

		return true;
	}

	function DataValida(data) {
		data  = SomenteNumeros(data);

		if (data  == '') {
			return true;
		}

		var dia = data.substr(0, 2);
		var mes = data.substr(2, 2);
		var ano = data.substr(4, 4);

		if (mes > 12) {
			return false;
		}

		var dias = 31;

		switch (mes) {
			case '02':
				if ((ano % 4) == 0) {
					dias = 29;
				}
				else {
					dias = 28;
				}

				break;
			case '04':
			case '06':
			case '09':
			case '11':
				dias = 30;
				break;
		}

		if (dia > dias) {
			return false;
		}

		return true;
	}

	function DataMaior(data1, data2) {
		data1 = SomenteNumeros(data1);
		data1 = parseInt(SomenteNumeros(data1.substr(4, 4)+' '+data1.substr(2, 2)+' '+data1.substr(0, 2)), 10);

		data2 = SomenteNumeros(data2);
		data2 = parseInt(SomenteNumeros(data2.substr(4, 4)+' '+data2.substr(2, 2)+' '+data2.substr(0, 2)), 10);

		return (data1 > data2);
	}

	function HoraValida(hora, completa) {
		hora = SomenteNumeros(hora);

		if (hora == '') {
			return true;
		}

		if ((hora.substr(0, 2) > 23) || (hora.substr(2, 2) > 59)) {
			return false;
		}

		if (completa) {
			if (hora.substr(4, 2) > 59) {
				return false;
			}
		}

		return true;
	}

	function CPFValido(cpf) {
		cpf = SomenteNumeros(cpf);

		if (cpf == '') {
			return true;
		}

		var i;
		var c = cpf.substr(0, 9);
		var dv = cpf.substr(9, 2);
		var d1 = 0;

		for (i = 0; i < 9; i++) {
			d1 += c.charAt(i) * (10 - i);
		}

		if (d1 == 0) {
			return false;
		}

		d1 = 11 - (d1 % 11);

		if (d1 > 9) {
			d1 = 0;
		}

		if (dv.charAt(0) != d1) {
			return false;
		}

		d1 *= 2;

		for (i = 0; i < 9; i++) {
			d1 += c.charAt(i) * (11 - i);
		}

		d1 = 11 - (d1 % 11);

		if (d1 > 9) {
			d1 = 0;
		}

		if (dv.charAt(1) != d1) {
			return false;
		}

		return true;
	}

	function CNPJValido(cnpj) {
		cnpj = SomenteNumeros(cnpj);

		if (cnpj == '') {
			return true;
		}

		var i;

		if (cnpj.length > 14) {
			if (cnpj.substr(0,1) == 0) {
				var c = cnpj.substr(1, 12);
				var dv = cnpj.substr(13, 2);
			}
			else{
				var c = cnpj.substr(0, 12);
				var dv = cnpj.substr(12, 2);
			}
		}
		else{
			var c = cnpj.substr(0, 12);
			var dv = cnpj.substr(12, 2);
		}

		var d1 = 0;

		if (cnpj.length < 14) {
			return false;
		}

		for (i = 0; i < 12; i++) {
			d1 += c.charAt(11 - i) * (2 + (i % 8));
		}

		if (d1 == 0) {
			return false;
		}

		d1 = 11 - (d1 % 11);

		if (d1 > 9) {
			d1 = 0;
		}

		if (dv.charAt(0) != d1) {
			return false;
		}

		d1 *= 2;

		for (i = 0; i < 12; i++) {
			d1 += c.charAt(11 - i) * (2 + ((i + 1) % 8));
		}

		d1 = 11 - (d1 % 11);

		if (d1 > 9) {
			d1 = 0;
		}

		if (dv.charAt(1) != d1) {
			return false;
		}

		return true;
	}

	function urlencode(str) {
		if (str == null) {
			str = '';
		}

		return str_replace('@', '%40', str_replace('/', '%2F', str_replace('*', '%2A', str_replace('%20', '+', str_replace('+', '%2B', encodeURIComponent(str))))));
	}

	function urldecode(str) {
		return unescape(str_replace('+', ' ', str));
	}

	function PostHTTP(url, params) {
		var retorno = '';
		var XMLHTTP = NewXMLHttpRequest();

		if (XMLHTTP != null) {
			if (params != null) {
				XMLHTTP.open('POST', url, false);
				XMLHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				XMLHTTP.setRequestHeader("Content-Length", params.length);
				XMLHTTP.setRequestHeader("Connection", "close");
			}
			else {
				XMLHTTP.open('GET', url, false);
			}

			if (window.XMLHttpRequest && XMLHTTP.overrideMimeType) {
				XMLHTTP.overrideMimeType("text/plain");
			}

			XMLHTTP.send(params);

			if ((XMLHTTP.readyState == 4) && (XMLHTTP.status == 200)) {
				var retorno = urldecode(XMLHTTP.responseText);
			}
		}

		return retorno;
	}

	function RequisicaoHTTPSincrono(url, resposta) {
		if (window.XMLHttpRequest) {
			XMLHTTP = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");

			if (!XMLHTTP) {
				XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}

		if (XMLHTTP) {
			XMLHTTP.open('GET', url, false);

			if (window.XMLHttpRequest && XMLHTTP.overrideMimeType) {
				XMLHTTP.overrideMimeType("text/plain");
			}

			XMLHTTP.send(null);

			if ((resposta != null) && resposta) {
				if ((XMLHTTP.readyState == 4) && (XMLHTTP.status == 200)) {
					return XMLHTTP.responseText;
				}
				else {
					return '';
				}
			}
		}
	}

	function NewXMLHttpRequest() {
		var XMLHTTP = null;

		if (window.ActiveXObject) {
			for (var i = 5; i > 2; i--) {
				try {
					XMLHTTP = new ActiveXObject('MSXML2.XMLHTTP.'+i+'.0');
				}
				catch (E) {
					XMLHTTP = null;
				}
			}
			if (XMLHTTP == null) {
				XMLHTTP = new ActiveXObject('MSXML2.XMLHTTP')

				if (XMLHTTP == null) {
					XMLHTTP = new ActiveXObject('Microsoft.XMLHTTP');
				}
			}
		}

		if ((XMLHTTP == null) && window.XMLHttpRequest) {
			XMLHTTP = new XMLHttpRequest();
		}

		return XMLHTTP;
	}

	function RequisicaoHTTP(url, funcaoRetorno, celula, i, funcaoData) {
		var XMLHTTP = NewXMLHttpRequest();

		if (XMLHTTP != null) {
			if (funcaoRetorno != null) {
				XMLHTTP.onreadystatechange = function() {
					if ((XMLHTTP.readyState == 1)&&(funcaoData != null)) {
						funcaoData();
					}
					if(XMLHTTP.readyState == 4) {
						if (celula != null)
							funcaoRetorno(XMLHTTP.responseText, celula, i);
						else
							funcaoRetorno(XMLHTTP.responseText);
					}
				}
			}
			XMLHTTP.open('GET', url);

			if (window.XMLHttpRequest && XMLHTTP.overrideMimeType) {
				XMLHTTP.overrideMimeType("text/plain");
			}

			XMLHTTP.send(null);
		}
	}

	function consulta_cep(valor) {
		if ((valor.length == 9)&&(valor != '_____-___')) {
			var CEP = valor;
			dados = RequisicaoHTTPSincrono('./consulta_cep.php?CEP='+encodeURIComponent(CEP), true);
			if (dados != 'NAO ENCONTRADO') {
				while (dados.indexOf('§') > -1) {
					linha = dados.substr(0, dados.indexOf('§'));
					dados = dados.substr(dados.indexOf('§') + 1);

					temp = linha.substr(0, linha.indexOf('='));
					linha = linha.substr(linha.indexOf('=') + 1);
					eval('document.frmCadastro.'+temp+'.value=linha');
					eval('document.frmCadastro.'+temp+'.disabled=true');
					eval('document.frmCadastro.'+temp+'.style.background="#efefef"');
				}
				document.frmCadastro.NUMERO.focus();
			}
			else {
				document.frmCadastro.ENDERECO.value = '';
				document.frmCadastro.ENDERECO.disabled = false;
				document.frmCadastro.ENDERECO.style.background = '#FFFFFF';
				document.frmCadastro.BAIRRO.value = '';
				document.frmCadastro.BAIRRO.disabled = false;
				document.frmCadastro.BAIRRO.style.background = '#FFFFFF';
				document.frmCadastro.CIDADE.value = '';
				document.frmCadastro.CIDADE.disabled = false;
				document.frmCadastro.CIDADE.style.background = '#FFFFFF';
				document.frmCadastro.ESTADO.value = '0';
				document.frmCadastro.ESTADO.disabled = false;
				document.frmCadastro.ESTADO.style.background = '#FFFFFF';
			}
		}
	}

	function get_radio_value(campo) {
		var retorno = 0;
		if (campo != null) {
			if (campo.length == null)
				retorno = campo.value;
			for (var i=0; i < campo.length; i++) {
				if (campo[i].checked) {
					retorno = campo[i].value;
					break;
				}
			}
		}
		return retorno;
	}

	// constantes para máscara
	var msNenhuma = 0;
	var msCustom = 1;
	var msData = 2;
	var msHoraS = 3;
	var msHoraC = 4;
	var msDataHoraS = 5;
	var msDataHoraC = 6;
	var msCEP = 7;
	var msCPF = 8;
	var msCNPJ = 9;
	var msCPFCNPJ = 10;
	var msDDI = 11;
	var msISBN = 12;
	var msNumerico = 13;
	var msValor = 14;
	var msAlphaNum = 15;
	var msEmail = 16;

	// máscaras
	var mscData = '99/99/9999';
	var mscHoraS = '99:99';
	var mscHoraC = '99:99:99';
	var mscDataHoraS = '99/99/9999 99:99';
	var mscDataHoraC = '99/99/9999 99:99:99';
	var mscCEP = '99999-999';
	var mscCPF = '999.999.999-99';
	var mscCNPJ = '99.999.999/9999-99';
	var mscISBN = '999-99-999-9999-9';
	var mscAlpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	var mscEmail = '-._';

	// tipos de valor
	var tvNenhum = 0;
	var tvMoeda = 11;
	var tvPercentual = 12;

	// estado das teclas Shift/Ctrl/Alt
	var ShiftState = false;
	var CtrlState = false;
	var AltState = false;

	var Selecao = '';
	var MascaraAtual = '';
	var Mascara = msNenhuma;
	var TipoValor = tvNenhum;
	var CasasDecimais = 2;
	var Tamanho = 0;
	var TeclaAnterior = 0;
	var Apagou = false;
	var Seguido = false;
	var Colando = false;
	var UltimaTecla = false;
	var CampoAtual = null;
	var CampoFocar = null;
	var TratarNumero = true;
	var CaracteresExtras = '';

	// Código das teclas
	var VK_BACKSPACE = 8;
	var VK_TAB = 9;
	var VK_ENTER = 13;
	var VK_SHIFT = 16;
	var VK_CTRL = 17;
	var VK_ALT = 18;
	var VK_ESC = 27;
	var VK_SPACE = 32;
	var VK_LEFT = 37;
	var VK_UP = 38;
	var VK_RIGHT = 39;
	var VK_DOWN = 40;
	var VK_DELETE = 46

	function PreencheMascara(texto, mascara) {
		var temp = '';
		var j = 0;

		texto = FiltraTexto(texto, '0123456789AX');

		for (var i = 0; i < texto.length; i++) {
			while ((mascara.substr(j, 1) != '9') && (mascara.substr(j, 1) != 'A') && (mascara.substr(j, 1) != 'X') && (mascara.substr(j, 1) != '')) {
				temp = temp + mascara.substr(j, 1);
				j++;
			}

			temp = temp + texto.substr(i, 1);
			j++;
		}

		return temp.substr(0, mascara.length);
	}

	function RestauraMascara(mascara) {
		return str_replace('A', '_', str_replace('X', '_', str_replace('9', '_', mascara)));
	}

	function FocarCampo() {
		if (CampoFocar != null) {
			CampoFocar.focus();

			if (CampoFocar.select) {
				CampoFocar.select();
			}

			CampoFocar = null;
		}
	}

	function ValorInvalido(mensagem) {
		CampoFocar = CampoAtual;
		dlErro(mensagem);
		return false;
	}

	function SetaMascara() {
		if (arguments[0] == null) {
			if (CampoAtual != null) {
				if (CampoAtual.readOnly) {
					CampoAtual = null;
					return false;
				}

				if ((Mascara == msValor) || ((Mascara == msNumerico) && TratarNumero)) {
					CampoAtual.style.textAlign = 'right';
				}

				if (CampoAtual.value == '') {
					if (Mascara == msValor) {
						var valor = FloatToStr(0, CasasDecimais, false);

						if (TipoValor == tvMoeda) {
							CampoAtual.value = 'R$ '+valor;
						}
						else if (TipoValor == tvPercentual) {
							CampoAtual.value = valor+'%';
						}
						else {
							CampoAtual.value = valor;
						}
					}
					else if (MascaraAtual != '$') {
						CampoAtual.value = RestauraMascara(MascaraAtual);
					}
				}
				else {
					switch (Mascara) {
						case msData:
							var data = SomenteNumeros(CampoAtual.value);
							var invalida = (data.length != 6) && (data.length != 8);

							if (!invalida) {
								var dia = data.substr(0, 2);
								var mes = data.substr(2, 2);
								var ano = data.substr(4, 4);

								if (ano.length <= 2) {
									ano = parseInt(ano, 10);

									if (ano > 40) {
										ano += 1900;
									}
									else {
										ano += 2000;
									}

									CampoAtual.value = dia+'/'+mes+'/'+ano;
								}

								invalida = !DataValida(CampoAtual.value);
							}

							if (invalida) {
								return ValorInvalido('Data inválida.');
							}
							else if (arguments[2] != null) {
								var valor = arguments[2];
								var data = CampoAtual.value;

								var hoje = new Date();
								var dia = hoje.getDate();
								var mes = (hoje.getMonth()+1);
								var ano = hoje.getYear();

								if (dia < 10) {
									dia = '0'+dia;
								}

								if (mes < 10) {
									mes = '0'+mes;
								}

								hoje = dia+'/'+mes+'/'+ano;

								if ((valor == '>') || (valor == '>=')) {
									var menor = false;

									if (data == hoje) {
										if (valor == '>') {
											menor = true;
										}
									}
									else {
										menor = DataMaior(hoje, data);
									}

									if (menor) {
										if (valor == '>=') {
											return ValorInvalido('Data informada deve ser maior ou igual a data atual.');
										}
										else {
											return ValorInvalido('Data informada deve ser maior que a data atual.');
										}
									}
								}
								else if ((valor == '<') || (valor == '<=')) {
									var maior = false;

									if (data == hoje) {
										if (valor == '<') {
											maior = true;
										}
									}
									else {
										maior = DataMaior(data, hoje);
									}

									if (maior) {
										if (valor == '<=') {
											return ValorInvalido('Data informada deve ser menor ou igual a data atual.');
										}
										else {
											return ValorInvalido('Data informada deve ser menor que a data atual.');
										}
									}
								}
							}

							break;
						case msHoraS:
						case msHoraC:
							if ((arguments[2] == null) || (arguments[2] !== false)) {
								if (!HoraValida(CampoAtual.value, (Mascara == msHoraC))) {
									return ValorInvalido('Hora inválida.');
								}
							}

							break;
						case msDataHoraS:
						case msDataHoraC:
/*
							var data_hora = SomenteNumeros(CampoAtual.value);

							if (msDataHoraS) {
								;
							}
							var invalida = (data.length != 6);

							if (!invalida) {
								var dia = data.substr(0, 2);
								var mes = data.substr(2, 2);
								var ano = data.substr(4, 4);

								if (ano.length <= 2) {
									ano = parseInt(ano, 10);

									if (ano > 40) {
										ano += 1900;
									}
									else {
										ano += 2000;
									}

									CampoAtual.value = dia+'/'+mes+'/'+ano;
								}

								invalida = !DataValida(CampoAtual.value);
							}

							if (invalida) {
								return ValorInvalido('Data inválida.');
							}

							if (!HoraValida(CampoAtual.value, (Mascara == msDataHoraC))) {
								return ValorInvalido('Hora inválida.');
							}
*/
							break;
						case msCEP:
							var temp = SomenteNumeros(CampoAtual.value);

							if ((temp.length > 0) && (temp.length != 8)) {
								return ValorInvalido('CEP inválido.');
							}

							break;
						case msCPF:
							if (!CPFValido(CampoAtual.value)) {
								return ValorInvalido('CPF inválido.');
							}

							break;
						case msCNPJ:
							if (!CNPJValido(CampoAtual.value)) {
								return ValorInvalido('CNPJ inválido.');
							}

							break;
						case msCPFCNPJ:
							if (CampoAtual.value != '') {
								var valido = (CampoAtual.value.length == 14) || (CampoAtual.value.length == 18);

								if (valido) {
									if (CampoAtual.value.length == 18) {
										valido = CNPJValido(CampoAtual.value);
									}
									else {
										valido = CPFValido(CampoAtual.value);
									}
								}

								if (!valido) {
									return ValorInvalido('CPF / CPNJ inválido.');
								}
							}

							break;
						case msISBN:
							if (!ISBNValido(CampoAtual.value)) {
								return ValorInvalido('ISBN inválido.');
							}

							break;
						case msNumerico:
							if (TratarNumero) {
								CampoAtual.value = parseInt(CampoAtual.value, 10);
							}

							break;
						case msValor:
							if (TipoValor != tvPercentual) {
								CampoAtual.value = FloatToStr(StrToFloat(CampoAtual.value), CasasDecimais, (TipoValor == tvMoeda));
							}
							else {
								CampoAtual.value = FloatToStr(StrToFloat(CampoAtual.value), CasasDecimais, false)+'%';
							}

							break;
						case msEmail:
							if (!EmailValido(CampoAtual.value)) {
								return ValorInvalido('E-mail inválido.');
							}

							break;
					}

					switch (Mascara) {
						case msData:
						case msHoraS:
						case msHoraC:
						case msDataHoraS:
						case msDataHoraC:
						case msCEP:
						case msCPF:
						case msCNPJ:
						case msISBN:
							temp = PreencheMascara(CampoAtual.value, MascaraAtual);

							if (CampoAtual.value != temp) {
								CampoAtual.value = temp;
							}

							break;
						case msCPFCNPJ:
							if (CampoAtual.value != '') {
								var temp = SomenteNumeros(CampoAtual.value);

								if (temp.length > 11) {
									temp = PreencheMascara(temp, mscCNPJ);
								}
								else {
									temp = PreencheMascara(temp, mscCPF);
								}

								if (CampoAtual.value != temp) {
									CampoAtual.value = temp;
								}
							}

							break;
					}
				}
			}

			Apagou = false;
			Seguido = false;
			Tamanho = 0;
			Colando = false;
			UltimaTecla = false;
			TeclaAnterior = 0;
			Mascara = 0;
		}

		CampoAtual = arguments[0];

		if ((CampoAtual != null) && CampoAtual.readOnly) {
			CampoAtual = null;
			return false;
		}

		Mascara = arguments[1];

		switch (Mascara) {
			case msNenhuma:
			case msNumerico:
			case msEmail:
				MascaraAtual = '';

				if (arguments[2] != null) {
					TratarNumero = arguments[2];
				}
				else {
					TratarNumero = true;
				}

				if (arguments[3] != null) {
					CaracteresExtras = arguments[3];
				}
				else {
					CaracteresExtras = '';
				}

				break;
			case msAlphaNum:
				MascaraAtual = '';
				Mascara = msNumerico;
				TratarNumero = false;
				CaracteresExtras = mscAlpha;
				break;
			case msCustom: MascaraAtual = arguments[2]; break;
			case msData: MascaraAtual = mscData; break;
			case msHoraS: MascaraAtual = mscHoraS; break;
			case msHoraC: MascaraAtual = mscHoraC; break;
			case msDataHoraS: MascaraAtual = mscDataHoraS; break;
			case msDataHoraC: MascaraAtual = mscDataHoraC; break;
			case msCEP: MascaraAtual = mscCEP; break;
			case msCPF: MascaraAtual = mscCPF; break;
			case msCNPJ: MascaraAtual = mscCNPJ; break;
			case msCPFCNPJ: MascaraAtual = ''; break;
			case msDDI: MascaraAtual = ''; break;
			case msISBN: MascaraAtual = mscISBN; break;
			case msValor:
				MascaraAtual = '$';

				if ((arguments[2] != null) && !isNaN(arguments[2])) {
					CasasDecimais = parseInt(arguments[2], 10);
				}
				else {
					CasasDecimais = 2;
				}

				if ((Mascara == msValor) && (arguments[3] != null)) {
					TipoValor = arguments[3];
				}
				else {
					TipoValor = tvNenhum;
				}

				CaracteresExtras = '';
				break;
		}

		if (CampoAtual != null) {
			if ((Mascara != msNumerico) && (Mascara != msValor) && (Mascara != msEmail)) {
				if (Mascara == msCPFCNPJ) {
					CampoAtual.maxLength = 18;
				}
				else if (Mascara == msDDI) {
					CampoAtual.maxLength = 5;
				}
				else {
					CampoAtual.maxLength = MascaraAtual.length;

					if ((CampoAtual.value == '0,00') || (CampoAtual.value == '0,000') || (CampoAtual.value == RestauraMascara(MascaraAtual))) {
						CampoAtual.value = '';
					}
				}
			}
			else {
				if (Mascara == msValor) {
					var zeros = '';

					for (var i = 0; i < CasasDecimais; i++) {
						zeros += '0';
					}

					CampoAtual.value = str_replace('.', '', str_replace('R$ ', '', str_replace('%', '', CampoAtual.value)));

					var i = CampoAtual.value.indexOf(','+zeros);

					if (i > -1) {
						CampoAtual.value = CampoAtual.value.substr(0, i);
					}

					CampoAtual.select();
				}

				if (TratarNumero) {
					CampoAtual.style.textAlign = 'left';
				}
			}
		}

		return true;
	}

	function DocumentKeyDown(e) {
		if (navigator.appName != 'Netscape') {
			var key = window.event.keyCode;
		}
		else {
			var key = e.which;
		}

		switch (key) {
			case VK_SHIFT: ShiftState = true; break;
			case VK_CTRL: CtrlState = true; break;
			case VK_ALT: AltState = true; break;
		}

		if (CampoAtual != null) {
			Colando = (CtrlState && (String.fromCharCode(key).toLowerCase() == 'v'))

			if ((Mascara != msNumerico) && (Mascara != msValor) && (Mascara != msEmail)) {
				if ((key == VK_BACKSPACE) || (key == VK_DELETE)) {
					Apagou = true;

					if (!Seguido) {
						Tamanho = SomenteNumeros(CampoAtual.value).length;
					}

					Seguido = true;
				}
				else if (key == VK_ESC) {
					Apagou = false;

					if (CampoAtual.defaultValue != MascaraAtual) {
						CampoAtual.value = CampoAtual.defaultValue;
					}
					else {
						CampoAtual.value = '';
					}
				}
				else {
					Apagou = (SomenteNumeros(CampoAtual.value).length < (Tamanho - 1)) && (CampoAtual.value != '');
					Seguido = false;
				}
			}
		}
	}

	function DocumentKeyUp(e) {
		if (navigator.appName != 'Netscape') {
			var key = window.event.keyCode;
		}
		else {
			var key = e.which;
		}

		switch (key) {
			case VK_SHIFT: ShiftState = false; break;
			case VK_CTRL: CtrlState = false; break;
			case VK_ALT: AltState = false; break;
		}

		if (CampoAtual != null) {
			if (Mascara == msCPFCNPJ) {
				var temp = SomenteNumeros(CampoAtual.value);

				if (temp.length > 11) {
					temp = PreencheMascara(temp, mscCNPJ);
				}
				else {
					temp = PreencheMascara(temp, mscCPF);
				}

				if (CampoAtual.value != temp) {
					CampoAtual.value = temp;
				}
			}
			else if (Mascara == msDDI) {
				if (CampoAtual.value.substr(0, 1) != '+') {
					var temp = SomenteNumeros(CampoAtual.value);

					if (temp != '') {
						CampoAtual.value = '+'+temp;
					}
				}
			}
			else if ((Mascara != msNumerico) && (Mascara != msValor)&& (Mascara != msEmail)) {
				if (CampoAtual.value == '') {
					Tamanho = 0;
				}

				if ((key == VK_BACKSPACE) || (key == VK_DELETE)) {
					var len = CampoAtual.value.length;
					var temp = CampoAtual.value.substr((len - 1), 1);

					if (SomenteNumeros(temp) == '') {
						CampoAtual.value = CampoAtual.value.substr(0, (len - 1));
					}

					return;
				}

				var tecla_valida = (UltimaTecla && (((key >= 48) && (key <= 57)) || ((key >= 96) && (key <= 105)))) || Colando;

				if (!tecla_valida || Apagou) {
					return false;
				}

				temp = PreencheMascara(CampoAtual.value, MascaraAtual);

				if (CampoAtual.value != temp) {
					CampoAtual.value = temp;
				}
			}
		}
	}

	function DocumentKeyPress(e) {
		if (CampoAtual != null) {
			if (navigator.appName != 'Netscape') {
				var key = window.event.keyCode;
			}
			else {
				var key = e.which;
			}

			if (key != VK_ENTER) {
				var caracter = String.fromCharCode(key);
				var tecla_valida = !isNaN(caracter);

				if (window.getSelection) {
					Selecao = window.getSelection();
				}
				else if (document.getSelection) {
					Selecao = document.getSelection();
				}
				else if (document.selection) {
					Selecao = document.selection.createRange().text;
				}
				else {
					Selecao = '';
				}

				if (CampoAtual.createTextRange) {
					var range = document.selection.createRange().duplicate();

					range.moveEnd('character', CampoAtual.value.length);

					if (range.text != '') {
						var cursor_position = CampoAtual.value.lastIndexOf(range.text);
					}
					else {
						var cursor_position = CampoAtual.value.length;
					}
				}
				else {
					var cursor_position = CampoAtual.selectionStart;
				}

				if (MascaraAtual.length > 1) {
					if (Selecao.length == 0) {
						tecla_valida = tecla_valida && (CampoAtual.value.length < MascaraAtual.length);
					}
					else if (Selecao.length < MascaraAtual.length) {
						Tamanho = CampoAtual.value.length;
					}
				}
				else if (MascaraAtual == '$') {
					if (caracter == ',') {
						tecla_valida = (CampoAtual.value.indexOf(',') == -1);
					}
				}
				else if (Mascara == msEmail) {
					if (caracter == '@') {
						tecla_valida = (CampoAtual.value.indexOf('@') == -1);
					}
					else if (caracter == '_') {
						tecla_valida = (CampoAtual.value.indexOf('@') == -1) || (cursor_position <= CampoAtual.value.indexOf('@'));
					}
					else {
						tecla_valida = tecla_valida || (mscAlpha.indexOf(caracter) > -1) || (mscEmail.indexOf(caracter) > -1);
					}
				}

				if (Mascara == msNumerico) {
					if (CaracteresExtras)
						tecla_valida = tecla_valida || (CaracteresExtras.indexOf(caracter) > -1);
				}

				tecla_valida = tecla_valida && (key != VK_SPACE);

				if (navigator.appName == 'Netscape') {
					tecla_valida = tecla_valida || (key == 0) || (key == 8);
					tecla_valida = tecla_valida || Colando;
					tecla_valida = tecla_valida || (CtrlState && (key == 99));
					tecla_valida = tecla_valida || (CtrlState && (key == 120));
					tecla_valida = tecla_valida || (CtrlState && (key == 122));
				}

				UltimaTecla = tecla_valida;

				if (!tecla_valida) {
					return false;
				}

				if (MascaraAtual.length > 1) {
					if (Selecao.length == 0) {
						if ((TeclaAnterior == key) && !Apagou) {
							DocumentKeyUp(e);
						}
					}

					TeclaAnterior = key;
				}
			}
		}
	}

	document.onkeydown = DocumentKeyDown;
	document.onkeyup = DocumentKeyUp;
	document.onkeypress = DocumentKeyPress;

	function dlErro(mensagem, titulo, tipo){
		if (titulo == null)
			titulo = 'Validação do formulário';
		if (tipo == null) tipo = 0;
		$('body').append('<div id="dlErro"></div>');

		if (tipo == 0)
			mensagem = '<p><font color="#CC0000" size=1>'+mensagem+'</font></p>';
		else
			mensagem = '<p><font size=1>'+mensagem+'</font></p>';

		$("#dlErro").html(mensagem).dialog({
			width:'350px',
			autoOpen: false,
			bgiframe: true,
			modal: true,
			resizable: false,
			draggable: false,
			title: titulo,
			close: function (event, ui){setTimeout('FocarCampo()', 100); },
			buttons: { "Ok": function() { $(this).dialog("close"); } } }).dialog('open')
	}

	function dlRecuperarSenha(){
		$("#dlRecuperarSenha").dialog({
			width:'400px',
			autoOpen: false,
			bgiframe: true,
			modal: true,
			resizable: false,
			draggable: false,
			title: 'Recuperação de senha',
			buttons: { "Enviar":function() { RecuperarSenha(); },
				"Cancelar": function() { $(this).dialog("close"); } } }).dialog('open')
	}

	function dlAlterarSenha(){
		$("#dlAlterarSenha").dialog({
			width:'400px',
			autoOpen: false,
			bgiframe: true,
			modal: true,
			resizable: false,
			draggable: false,
			title: 'Alteração de senha',
			buttons: { "Alterar":function() { AlterarSenha(); },
				"Cancelar": function() { $(this).dialog("close"); } } }).dialog('open')
	}