/*****************************************************
*				
*				-  FIELDMASK.JS  -
*
*	@ DESCRIÇÃO
*		Conjunto de funções para formatar campos de formulário do tipo:
*
*			- Data (dd/mm/aaaa);
*				Chamada: onblur="fieldMask.data(this)";
*
*			- Hora (hh:mm);
*				Chamada: onblur="fieldMask.hora(this)";
*
*			- CPF (999.999.999-99);
*				Chamada: onblur="fieldMask.cpf(this)";
*
*			- CNPJ (99.999.999/0001-99);
*				Chamada: onblur="fieldMask.cnpj(this)";
*
*			- CEP (99999-99);
*				Chamada: onblur="fieldMask.cep(this)";
*
*			- Telefone sem DDD ('999-9999' ou '9999-9999');
*				Chamada: onblur="fieldMask.telefone(this)";
*
*			- Telefone com DDD ('(99) 999-9999' ou '(99) 9999-9999');
*				Chamada: onblur="fieldMask.telefoneComDDD(this)";
*
*			- Permitir somente númericos;
*				Chamada: onblur="fieldMask.soNumeros(this)";
*
*			- Permitir somente alfa;
*				Chamada: onblur="fieldMask.soAlfa(this)";
*
*			- Transformar texto para caixa alta (letras maiúsculas);
*				Chamada: onblur="fieldMask.allUpper(this)";
*
*			- Transformar texto para caixa baixa (letras minúsculas);
*				Chamada: onblur="fieldMask.allLower(this)";
*
*	@ AUTOR:
*		- Fábio Hemkemaier (fabiohhfarias@yahoo.com.br)
*
*****************************************************/

var fieldMask = {
	/* GLOBALS */
	_versao: '1.0',
	_dataVersao: '06/2008', // mês/ano
	_fieldValueTemp: '',
	
	/* DATA (dd/mm/aaaa) */
	data: function(field){
		field.maxLength = 10;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{10}/,"");
		
		var fieldLen = _fieldValueTemp.length;
		
		if(fieldLen >= 2 && fieldLen <= 4)	
			_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{1,2})/,"$1/$2");
		else if(fieldLen > 4)	
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{2})(\d{1,4})/,"$1/$2/$3");

		field.value = _fieldValueTemp;
	},
	
	/* HORA (hh:mm) */
	hora: function(field){
		field.maxLength = 5;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{5}/,"");
		
		_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{1})/,"$1:$2");
		
		field.value = _fieldValueTemp;
	},
	
	/* CPF (999.999.999-99) */
	cpf: function(field){
		field.maxLength = 14;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{14}/,"");
		
		var fieldLen = _fieldValueTemp.length;
		
		if(fieldLen >=3 && fieldLen < 7)
			_fieldValueTemp = _fieldValueTemp.replace(/(\d{3})(\d{1,3})/,"$1.$2");
		else if(fieldLen >= 7 && fieldLen < 10)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{3})(\d{1,3})(\d{1,3})/,"$1.$2.$3");
		else if(fieldLen >= 10)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{3})(\d{3})(\d{3})(\d{1,2})/,"$1.$2.$3-$4");

		field.value = _fieldValueTemp;
	},
	
	/* CNPJ (99.999.999/9999-99) */
	cnpj: function(field){
		field.maxLength = 18;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{18}/,"");
		
		var fieldLen = _fieldValueTemp.length;

		if(fieldLen >=2 && fieldLen <= 5)
			_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{1,3})/,"$1.$2");
		else if(fieldLen > 5 && fieldLen <= 8)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{3})(\d{1,3})/,"$1.$2.$3");
		else if(fieldLen > 8 && fieldLen <= 12)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{3})(\d{3})(\d{1,4})/,"$1.$2.$3/$4");
		else if(fieldLen > 12)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{3})(\d{3})(\d{4})(\d{1,2})/,"$1.$2.$3/$4-$5");
		
		field.value = _fieldValueTemp;
	},
	
	/* CEP (99999-999) */
	cep: function(field){
		field.maxLength = 9;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{9}/,"");
		
		_fieldValueTemp = _fieldValueTemp.replace(/(\d{5})(\d{1,3})/,"$1-$2");
		
		field.value = _fieldValueTemp;
	},
	
	/* TELEFONE ('999-9999' ou '9999-9999') */
	telefone: function(field){
		field.maxLength = 9;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{9}/,"");
		
		var fieldLen = _fieldValueTemp.length;
		
		if(fieldLen >=3 && fieldLen <= 7)
			_fieldValueTemp = _fieldValueTemp.replace(/(\d{3})(\d{1,4})/,"$1-$2");
		else if(fieldLen > 7)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{4})(\d{1,4})/,"$1-$2");
		
		field.value = _fieldValueTemp;
	},
	
	/* TELEFONE COM DDD ('(99) 999-9999' ou '(99) 9999-9999') */
	telefoneComDDD: function(field){
		field.maxLength = 14;
		_fieldValueTemp = this.soNumeros(field.value);
		_fieldValueTemp = _fieldValueTemp.replace(/[0-9]{14}/,"");
		
		var fieldLen = _fieldValueTemp.length;
		
		if(fieldLen > 0 && fieldLen <= 3)
			_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})/,"($1) ");
		else if(fieldLen > 3 && fieldLen <= 9)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{1,3})(\d{1,4})/,"($1) $2-$3");
		else if(fieldLen > 9)
				_fieldValueTemp = _fieldValueTemp.replace(/(\d{2})(\d{4})(\d{1,4})/,"($1) $2-$3");
		
		field.value = _fieldValueTemp;
	},
	
	/* SOMENTE NÚMEROS */
	soNumeros: function(p){
		if(typeof p == 'string')
			return(p.replace(/\D/g,''));
		
		if(typeof p == 'object')
			p.value = this.soNumeros(p.value);
	},
	
	/* SOMENTE ALFA (a-z ou A-Z ou letras acentuadas ou ç) */
	soAlfa: function(p){
		if(typeof p == 'string')
			return(p.replace(/([^a-záéíóúàèìòùâêîôûãõç])/gi,''));
		
		if(typeof p == 'object')
			p.value = this.soAlfa(p.value);
	},

	/* TEXO PARA CAIXA ALTA */
	allUpper: function(field){
		field.value = field.value.toUpperCase();
	},

	/* TEXO PARA CAIXA BAIXA */
	allLower: function(field){
		field.value = field.value.toLowerCase();
	}

}
