/************************/
/* Autor: Felipe Jaekel */
/************************/

/********************************************************/
/* Classe para realizar formatações na entrada de dados */
/********************************************************/
/* Terá apenas métodos estáticos para facilitar seu uso */
/********************************************************/
//Construtor
var formata =
{

	//-----------------------------------------------------------------------------
	//Remove acentos
   //htmlentities retorna na forma de código ASCII os caracteres acentuados
   //A letra que está entre parenteses é a letra sem acento, portanto por ser o primeiro parenteses ela é armazenada em $1. Exemplo: ç = &ccedil; portanto a variável recebe o primeiro 'c'
	removeAcentos: function(str)
	{
		return str.htmlEntities().replace(/&([a-z])[a-z]+;/gi, '$1');
	},
	//-----------------------------------------------------------------------------
	//Formata a mensagem de erro para o singular ou plural de acordo com a quantidade de erros
	PHPerror: function(str)
	{
		return str.replace(/(<\/?b>)|(<br \/>)/g, '');
	},
	//-----------------------------------------------------------------------------
	//Formata a mensagem de erro para o singular ou plural de acordo com a quantidade de erros
	msgErro: function(str)
	{
      //1a chave: mensagem de erro
      //2a chave: 1o erro
		if(str.length > 2)
		{
         //Plural
      	str[0] = str[0].replace(/[()]/g, '');
		}
		else
		{
         //am e são devem ser alterados apenas quando encontrados como sufixos, evitando erros como por exemplo campo virar ceupo
         //am pode ocorrer precedido de ':'
         //Ocorrências em que 'são' deve ser susbstituído: sozinho(precedido de um espaço) ou no final da palavra
      	str[0] = str[0].replace(/(ram:?$)|(\(s\))|( são)|(são$)|(ções)/g, function(m){return replaceSingular(m)});
		}
		return str;
	},
   //Função auxiliar
	replaceSingular: function(c)
	{
   	switch(c)
   	{
         case 'ram' : return 'u';
         case 'ram:': return 'u:';
      	case '(s)' : return '';
      	case 'são' : return 'é';
      	case ' são': return ' é';
	     	case 'ções': return 'ção';
   	}
	},
	//-----------------------------------------------------------------------------
	//Data
	data: function(campo)
	{
		//this.ultimoValor evita que fique travado caso o usuário tente editar apagando com backspace
		if(campo.value.match(/^\d{2}$/) && !this.ultimoValor.match(/^\d{2}\/$/))
		{
			campo.value = campo.value.replace(/^(\d{2})$/, '$1/');
		}
		else if(campo.value.match(/^\d{2}\/\d{2}$/) && !this.ultimoValor.match(/^\d{2}\/\d{2}\/$/))
		{
			campo.value = campo.value.replace(/^(\d{2}\/\d{2})$/, '$1/');
		}

		this.ultimoValor = campo.value;
		
		/*if(campo.value.length == 8)
		{
			campo.value = campo.value.substr(0, 2) + '/' + campo.value.substr(2, 2) + '/' + campo.value.substr(4, 4);
		}*/
	},
	ultimoValor: '',
	//-----------------------------------------------------------------------------
	//Coloca zeros a esquerda até complementar o tamanho passado em tamanho
	strZero: function(str, tamanho)
	{
		//Se str for um número converte para string
		if(typeof(str) == 'number')
		{
			str += '';
		}

		//Deve ser criada uma variável para armazenar o total de zeros porque str.length muda no decorrer do FOR
		var numZeros = tamanho - str.length;

		for(var i = 0; i < numZeros; i++)
		{
			str = '0' + str;
		}
		return str;
	},
	//-----------------------------------------------------------------------------
	//CPF
	CPF: function(campo)
	{
		//A segunda condição serve para não repetir a formatação em um campo já formatado
		if(trim(campo.value) != '' && !campo.value.match(/-/))
		{
			campo.value = formata.strZero(campo.value, 11);

			campo.value	=	campo.value.substr(0, 3) + '.' +
								campo.value.substr(3, 3) + '.' +
								campo.value.substr(6, 3) + '-' +
								campo.value.substr(9, 2);
		}
	},
	//-----------------------------------------------------------------------------
	//CEP
	CEP: function(campo)
	{
		if(trim(campo.value) != '' && !campo.value.match(/-/))
		{
			campo.value = formata.strZero(campo.value, 8);

			campo.value = campo.value.substr(0, 5) + '-' + campo.value.substr(5, 8);
		}
	}
};	