/**
 * Mascara Dinâmica
 */
if (document.layers)
	window.captureEvents(Event.KEYDOWN | Event.KEYUP);
 
function mask(isNum, event, field, mask, maxLength) {

	var keyCode;
	if (event.srcElement)
		keyCode = event.keyCode;
	else if (event.target)
		keyCode = event.which;
		
	var maskStack = new Array();
		
	var isDynMask = false;
	if (mask.indexOf('[') != -1)
		isDynMask = true;
				
	var length = mask.length;
	
	for (var i = 0; i < length; i++)
		maskStack.push(mask.charAt(i));
		
	var value = field.value;
	var i = value.length;
	
	if (keyCode == 0 || keyCode == 8)
		return true;

	//código adaptado para aceitar X (maiúsculo) ou x (minúsculo), além de números
	if (isNum && (keyCode < 48 || keyCode > 57) && (keyCode != 88) && (keyCode != 120))
		return false;
	
	if (!isDynMask && i < length) {
		
		if (maskStack.toString().indexOf(String.fromCharCode(keyCode)) != -1 && keyCode != 8) {
			return false;
		} else {
			if (keyCode != 8) {
				if (maskStack[i] != '#') {
					var old = field.value;
					field.value = old + maskStack[i];
				}			
			}
			
			if (autoTab(field, keyCode, length)) {
				if (!document.layers) {
					return true;
				} else if (keyCode != 8) {
					field.value += String.fromCharCode(keyCode);
					return false;
				} else {
					return true;
				}
			} else {
				return false;
			}				
		}
		
	} else if (isDynMask) { 
							
		var maskChars = "";
		for (var j = 0; j < maskStack.length; j++)
			if (maskStack[j] != '#' && maskStack[j] != '[' && maskStack[j] != ']')
				maskChars += maskStack[j];

		var tempValue = "";
		for (var j = 0; j < value.length; j++) {
			if (maskChars.indexOf(value.charAt(j)) == -1)
				tempValue += value.charAt(j);
		}
		
		value = tempValue + String.fromCharCode(keyCode);
						
		if (maskChars.indexOf(String.fromCharCode(keyCode)) != -1) {
			return false;
		} else {
		
			var staticMask = mask.substring(mask.indexOf(']') + 1);
			var dynMask = mask.substring(mask.indexOf('[') + 1, mask.indexOf(']'));
		
			var realMask = new Array;
		
			if (mask.indexOf('[') == 0) {
				var countStaticMask = staticMask.length - 1;
				var countDynMask = dynMask.length - 1;
				for (var j = value.length - 1; j >= 0; j--) {
					if (countStaticMask >= 0) {
						realMask.push(staticMask.charAt(countStaticMask));
						countStaticMask--; 
					} 
					if (countStaticMask < 0) {
						if (countDynMask >= 0) {
							if (dynMask.charAt(countDynMask) != '#') {
								realMask.push(dynMask.charAt(countDynMask));
								countDynMask--;
							}
						}
						if (countDynMask == -1) {
							countDynMask = dynMask.length - 1;
						}
						realMask.push(dynMask.charAt(countDynMask));
						countDynMask--; 
					}
				}
			}
			
			var result = "";
				
			var countValue = 0;
			while (realMask.length > 0) {
				var c = realMask.pop();	
				if (c == '#') {
					result += value.charAt(countValue);
					countValue++;	
				} else {
					result += c;
				}
			}
			
			field.value = result;
		
			if (maxLength != undefined &&  value.length == maxLength) {
				
				var form = field.form;
				for (var i = 0; i < form.elements.length; i++) {
					if (form.elements[i] == field) {
						field.blur();
						//if alterado para quando a máscara for utilizada no último campo, não dê mensagem de erro quando tentar colocar o foco no "Salvar"
						//if (form.elements[i + 1] != null)										 
						if ((form.elements[i + 1] != null) && (form.elements[i + 1].name != "METHOD"))
							form.elements[i + 1].focus();
						break;
					}
				}
			}
			
			return false;
		}
	} else {
		return false;
	}
	
	
	function autoTab(field, keyCode, length) {
		var i = field.value.length;
			
		if (i == length - 1) {
		
			field.value += String.fromCharCode(keyCode);
		
			var form = field.form;
			for (var i = 0; i < form.elements.length; i++) {
				if (form.elements[i] == field) {
					field.blur();										 
					//if alterado para quando a máscara for utilizada no último campo, não dê mensagem de erro quando tentar colocar o foco no "Salvar"
					//if (form.elements[i + 1] != null)
					if ((form.elements[i + 1] != null) && (form.elements[i + 1].name != "METHOD"))
						form.elements[i + 1].focus();
					break;
				}
			}
			
			return false;
		} else {
			return true;
		}	
	}
}

<!--
//Bloco de c?digo para esconder e mostra form
var Ver4 = parseInt(navigator.appVersion) >= 4
var IE4 = ((navigator.userAgent.indexOf("MSIE") != -1) && Ver4)
var block = "formulario";
function esconde() {	document.form.style.visibility = "hidden" }
function mostra() { document.form.style.visibility = "visible" }
//Bloco de c?digo para esconder e mostra form

function showApplet(caminhoApplet, versaoApplet)
{
	var d = document.getElementById('tclTecladoContent');
	if( d.style.display == "block" )
		return false;
	d.style.display = "block";
	d.innerHTML = '<applet alt="Senha do auto-atendimento" tabindex="4" code="br/com/bb/aapf/bbteclado/CampoTeclado.class" cabbase="' + caminhoApplet + '/teclado/BBTeclado' + versaoApplet + '.cab" archive="' + caminhoApplet + '/teclado/BBTeclado' + versaoApplet + '.jar" codebase="' + caminhoApplet + '/teclado/" name="tclJava" id="tclJava" width="254" height="80" mayscript> <param name="local" value="login"> <param name="campoAnterior" value="dependenciaOrigem"> <param name="campoPosterior" value="botaoOk"> <param name="valorContr" value="4"> <param name="showCamposLogin" value="true"> Para abrir o campo<br> "Senha Auto-Atendimento",<br><a href="http://www.bancobrasil.com.br/appbb/portal/bb/ds/ajudaTecladoVirtual.jsp">clique aqui</a> e habilite o <br>seu teclado virtual<br> </applet>';
	return true;
}



// C?digo para o teclado 
function tecladown (digito){
	if (digito == ''){
		document.form.senha.value = '';
		return;	
	}
	var pass = document.form.senha.value;
	if (pass.length >= 8){
		return;
	}
	document.form.senha.value = document.form.senha.value + digito;
}
function teclaclick(tecla){
	return false;
}
function teclaup(tecla){
	tecladown(tecla);
}

function SetHelp(txt) {
	var oHelp = document.getElementById('help');
	if (oHelp) oHelp.innerHTML = txt ;
}

function main(campofoco) { 
	if ( campofoco == '' || document.form.elements.length == 0 ) 
		return false;
			
	var num = parseInt(campofoco);

	if ( num || num == 0 )
	{
		if ( document.form[num] )
			document.form[num].focus();
	}
	else 
	{
		if ( (campofoco == "senhaConta" || campofoco == "senhaAtual") && document.applets["tclJava"] ) 
			document.applets["tclJava"].setFocus();
		else if ( document.form[campofoco] )
			document.form[campofoco].focus();
	}
}

function FormataDado(campo,tammax,pos,teclapres){
	var keyCode;
	if (teclapres.srcElement)
		keyCode = teclapres.keyCode;
	else if (teclapres.target)
		keyCode = teclapres.which;
	
	if (keyCode == 0 || keyCode == 8)
		return true;
		
	if ((keyCode < 48 || keyCode > 57) && (keyCode != 88) && (keyCode != 120))
		return false;

		var tecla = keyCode;
		vr = document.formContaBrasil.numeroContratoOrigem.value;
		vr = vr.replace( "-", "" );
		vr = vr.replace( "/", "" );
		tam = vr.length ;
		
		if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }
		
		if (tecla == 8 ){ tam = tam - 1 ; }
		if ( tecla == 8 || tecla == 88 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 || tecla == 120){
			if ( tam <= 2 ){
		 		document.formContaBrasil.numeroContratoOrigem.value = vr ;}
			if ( tam > pos && tam <= tammax ){
				document.formContaBrasil.numeroContratoOrigem.value = vr.substr( 0, tam - pos ) + '-' + vr.substr( tam - pos, tam );}
		}
}
//função que altera os labels dos campos - hsg.
function letreiro(campo,texto){
	if (campo.value == texto){
		campo.value="";
	}else if(campo.value==""){
		campo.value=texto;
	}
}