/**
 * Retorna um texto mascarado.
 * 
 * @param String mascara Máscara a ser usada no texto
 * @param String texto Texto a ser mascarado
 * @param EventObjHTML eventKey Evento a novo char (keyCode) adicionado em objHTML
 * @return String
 */
function mascara(mask, text, eventKey) {
	// Código da tecla pressionada.
	var _TXT = 0;
	if(eventKey) {
		if(window.event) {
			_TXT = eventKey.keyCode;
		} else if(eventKey) {
			if(eventKey.which) {
				_TXT = eventKey.which;
			}
		}
		if(typeof _TXT == 'undefined') {
			_TXT = 0;
		}
		
		if (_TXT == 9) return true; //Habilita TAB
	}
	
	// Se a tecla pressionada for um número, faz a análise de caractere.
	// Far-se-á tbm, se não for teclado nada e este método for acionado fora do evento.
	if((_TXT > 47 && _TXT < 58) || (_TXT == 0)) {
		// Código que substituição da máscara.
		var cod_mask = '#';
		
		// Informações do texto trabalhado.
		var text_index = 0;
		
		// Prepara o retorno.
		var retorno = '';
		if(_TXT != 0) {
			text += String.fromCharCode(_TXT);
		}
		
		// Varre a máscara.
		for(var i = 0, m = mask.length; i < m; i++) {
			// Se não mais existe texto para preenchimento, pára a execução da máscara.
			if(text.length == text_index) {
				break;
			}
			
			var mask_part = mask.charAt(i);
			
			// Se a parte da máscara é o código de substituição, troca o seu conteúdo pelo texto existente.
			if(mask_part == cod_mask) {
				retorno += text.charAt(text_index);
				text_index++;
			}
			// Se não é o código, usa o contexto da máscara.
			else {
				retorno += mask_part;
				
				// E se o contexto está na máscara e no texto, então "pula" este dado do texto.
				if(mask_part == text.charAt(text_index)) {
					text_index++;
				}
			}
		}
	}
	return(retorno);
}
