/**
 *
 * function mask(_mask, val)
 *
 * _mask = Mascara Exemplo: ##/##/#### ou ###.###.###-##
 * val   = Valor a ser formatado.
 *
 * Formata um valor  para a mascara definida.
 *
 * pedro.leao@ig.com.br 2003/08/16
 *
 * Acrescentado o tamanho maximo da data. 
 * andre sipac
 */
function mask(field, _mask, val) {
	var i, mki;
	var aux="";
	
	/*limite para o tamanho maximo da data. Aceita o tamanho maximo 10 -> xx/xx/xxxx */
	if (val.length >= field.maxLength){
		return val.substr(0,field.maxLength);
	}else{ 	
		for(i=mki=0; i<val.length; i++, mki++) {
			if(_mask.charAt(mki)=='' || _mask.charAt(mki)=='#' || _mask.charAt(i)==val.charAt(i)) {
				aux+=val.charAt(i);
			} else {
				aux+=_mask.charAt(mki)+val.charAt(i);
				mki++;
			}
		}
	}
	return aux;
}

/**
 * function maskEvent(field, _mask, event)
 *
 * field = Objeto que esta enviando o evendo onKeyPress()
 * _mask = Mascara Exemplo: ##/##/#### ou ###.###.###-##
 * event = Evento a ser observado.
 *
 * Formata um valor para a mascara definida conforma o valor vai sendo digitado.
 *
 * pedro.leao@ig.com.br 2003;08/16
 */
function maskEvent(field, _mask, event) {

		var key ='';
	var aux='';
	var len=0;
	var i=0;
	var strCheck = '0123456789';
	var rcode = (window.Event) ? event.which : event.keyCode;
	
	// Enter, Backspace, e delete
	if ((rcode == 13) || (rcode == 8) || (rcode == 46)) {
		return true;
	}
	
	//Get key value from key code
	key=String.fromCharCode(rcode);
	
	if(strCheck.indexOf(key)==-1) {
		//Not a valid key
		return false;
	}
	
	aux=field.value+key;
	//window.alert(aux);
	aux=mask(field, _mask,aux);
	//window.alert(aux);
	field.value=aux;	
	return false;
}

/**
 * formataData maskEvent(field,  event)
 *
 * field		= Objeto que esta enviando o evendo onKeyPress()
 * nextField	= Campo que ganhar? foco ao final da digita??o
 * event		= Evento a ser observado.
 *
 * Formata um textfield para o formato de tada valor vai sendo digitado.
 * Sobrecarga de maskEvent(field, _mask, event)
 *
 * Rafael Borja
 */
function formataData(field, event) {
    var _mask = '##/##/####';
	var key ='';
	var aux='';
	var len=0;
	var i=0;
	var strCheck = '0123456789';
	var rcode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	
	// Enter, Backspace, TAB e delete
	if ((rcode == Event.KEY_RETURN) 
		|| (rcode == Event.KEY_BACKSPACE) 
		|| (rcode == Event.KEY_TAB)
		|| (rcode == Event.KEY_LEFT) 
		|| (rcode == Event.KEY_RIGHT)  
		|| (rcode == Event.KEY_DELETE)  ) {
		return true;
	}
	
	//Get key value from key code
	key=String.fromCharCode(rcode);
		
	if(strCheck.indexOf(key)==-1) {
		//Not a valid key
		return false;
	}
	
	aux=field.value+key;
	//window.alert(aux);
	aux=mask(field, _mask ,aux);
	//window.alert(aux);
	field.value=aux;	
	return false;
}

/**
 * function maskEventJump(field, _mask, event)
 *
 * field		= Objeto que esta enviando o evendo onKeyPress()
 * nextField	= Campo que ganhar? foco ao final da digita??o
 * event		= Evento a ser observado.
 *
 * Formata um valor para a mascara definida conforma o valor vai sendo digitado e a
 * final muda o foco para o campo especificado como par?metro. 
 *
 * Rafael Borja
 */
function formataDataJump(field, nextField, event) {
	var _mask = '##/##/####';
	var key ='';
	var aux='';
	var len=0;
	var i=0;
	var strCheck = '0123456789';
	var rcode = (window.Event) ? event.which : event.keyCode;
	
	// Enter, Backspace, e delete
	if((rcode == 13) || (rcode == 8) || (rcode == 46)) {
		return true;
	}
	
	//Get key value from key code
	key=String.fromCharCode(rcode);
	
	if (field.value.length >= 9)
		nextField.focus();
		
	if(strCheck.indexOf(key)==-1) {
		//Not a valid key
		return false;
	}
	
	aux=field.value+key;
	//window.alert(aux);
	aux=mask(field, _mask,aux);
	//window.alert(aux);
	field.value=aux;	
	return false;
}


function maskEventJump(field, _mask, event, nextField) {

		var key ='';
	var aux='';
	var len=0;
	var i=0;
	var strCheck = '0123456789';
	var rcode = (window.Event) ? event.which : event.keyCode;
	
	// Enter, Backspace, e delete
	if ((rcode == 13) || (rcode == 8) || (rcode == 46)) {
		return true;
	}
	
	//Get key value from key code
	key=String.fromCharCode(rcode);
	
	
	if (field.value.length >= field.maxLength){
		nextField.focus();
	}
		
	if(strCheck.indexOf(key)==-1) {
		//Not a valid key
		return false;
	}
	
	aux=field.value+key;
	//window.alert(aux);
	aux=mask(field, _mask,aux);
	//window.alert(aux);
	field.value=aux;	
	return false;
}


function formatarMascara(src, event, mask) {
	var i;
	
	if (document.selection) // Internet Explorer
		i = Math.abs(document.selection.createRange().moveStart("character", -1000000));
	else // Firefox
		i = src.selectionStart;

	var saida = mask.substring(0,1);
	var texto = mask.substring(i);
	var rcode = event.which ? event.which : event.keyCode;

	// Enter, backspace, delete e setas direcionais
	if (teclasEspeciais.indexOf(rcode) != -1) {
		return true;
	}
	if (rcode >= 48 && rcode <= 57) {
		if (texto.substring(0,1) != saida)
			src.value = src.value.substring(0,i) + texto.substring(0,1) + src.value.substring(i);
		return true;
	} else {
		return false;
	}
}

function formataData(src, event) {
	return formatarMascara(src, event, '##/##/####');
}

function formataDataJump(src, nextField, event) {
	var rcode = (window.Event) ? event.which : event.keyCode;
	var result = formatarMascara(src, event, '##/##/####');
	
	// Enter, backspace, delete e setas direcionais
	if ((rcode != 13) && (rcode != 0) && (rcode != 8) && (rcode != 46)) {
		if ((src.value.length >= 9) && (nextField != null))
			setTimeout("changeFocus('"+nextField.id+"')", 100);
	}

	return result;
}