/*********************************************
 **                                         **
 **    Funções de Manipulação de strings    **
 **                                         **
 *********************************************/

// -> Funções Auxiliares para ReplaceStr
function getFront(mainStr, searchStr)
{
	foundOffset = mainStr.indexOf(searchStr);
	if (foundOffset == -1)
	{
		return null;
	}
	return mainStr.substring(0, foundOffset);
}

function getEnd(mainStr, searchStr)
{
	foundOffset = mainStr.indexOf(searchStr);
	if (foundOffset == -1)
	{
		return null;
	}
	return mainStr.substring(foundOffset + searchStr.length, mainStr.length);
}

function insertString(mainStr, searchStr, insertStr)
{
	var front = getFront(mainStr, searchStr);
	var end   = getEnd  (mainStr, searchStr);
	if (front != null && end != null)
	{
		return front + insertStr + searchStr + end;
	}
	return null;
}

function deleteString(mainStr, deleleStr)
{
	return replaceString(mainStr, deleleStr, '');
}

// -> Substitui o texto de uma string
function replaceString(mainStr, searchStr, replaceStr)
{
	if (mainStr == null)
	{
		return null;
	}
	var front = getFront(mainStr, searchStr);
	var end   = getEnd  (mainStr, searchStr);
	if (front != null && end != null)
	{
		return front + replaceStr + end;
	}
	return null;
}


/*********************************************
 **                                         **
 **     Funções de Formatação de Inputs     **
 **                                         **
 *********************************************/


/* 
	Função que permite a digitação somente de números 
	Deve ser usada no evento onkeypress dos Inputs
*/
function KeyNumber(objeto)
{
	if ((window.event.keyCode >= 48) && (window.event.keyCode <= 57))
	{
  	  return;
	}
	else
	{
		if (window.event) // -> Ccódigo para IE
		{
			window.event.keyCode = 0;
		}
		else // -> Ccódigo para firefox
		{
			e.preventDefault();
		}
  		return;
	}
}

/*
	Função que permite somente a digitação de números e de uma vÃ­rgula
	Deve ser usada no evento onkeypress dos Inputs
*/
function KeyFloat(objeto)
{
	// -> Números
	if ((window.event.keyCode >= 48) && (window.event.keyCode <= 57))
	{
		return;
	}
	
	// -> VÃ­rgula e Ponto - Somente VÃ­rgula
	else if ((window.event.keyCode == 44) || (window.event.keyCode == 46)) 
	{
		window.event.keyCode = 44;
		
		var i;
		// -> Tratamento para scó ter uma vÃ­rgula		
		for ( i = 0; i < objeto.value.length; i++)
		{
			if ( objeto.value.substr(i,1) == "," )
			{
				if (window.event) // -> Ccódigo para IE
				{
					window.event.keyCode = 0;
				}
				else // -> Ccódigo para firefox
				{
					e.preventDefault();
				}
			}
		}
	}
	else
	{
		window.event.keyCode = 0;
  		return;
	}
}

/*
	Função que formata os campos com um número pré-definido de casas decimais, arredondadas
	Deve ser usada no evento onblur dos Inputs
*/
function BlurDec(objeto, CasasDec)
{
	// -> Se estiver vazio, nÃ£o hÃ¡ nada a fazer.
	if (objeto.value.length == 0)
	{
		return;
	}
	
	var i, posVirgula, nDec;
	
	posVirgula = -1;
	nDec = 0;
	
	// -> Busca a posição da vÃ­rgula
	for ( i = 0; i < objeto.value.length; i++)
	{
		if ( objeto.value.substr(i,1) == "," )
		{
			posVirgula = i;
		}
		else
		{
			if (posVirgula != -1)
			{
				nDec += 1;
			}
		}
	}
	
	if (nDec > CasasDec) // -> Corta as casas decimais excessivas
	{
		objeto.value = objeto.value.substr(0, posVirgula) + "," + objeto.value.substr(posVirgula + 1, 2);
	}
	else if (nDec == CasasDec) // -> Se o número de casas decimais informado for correto, sai da função.
	{
		return;
	}
	else // -> Acrescenta zeros
	{
		var str = "";
		
		for (i = 0; i < CasasDec - nDec; i++)
		{
			str += "0";
		}
		
		if (objeto.value.indexOf(",") > 0)
		{
			objeto.value = objeto.value + str;
		}
		else if (objeto.value.indexOf(",") == 0)
		{
			objeto.value = "0," + str;
		}
		else
		{
			objeto.value = objeto.value + "," + str;
		}
		
		// -> Chamada recursiva
		BlurDec(objeto, CasasDec);
	}
}


/*
	Função que formata os campos com o formato de moeda
	Deve ser usada no evento onblur dos Inputs
*/
function BlurMoney(objeto)
{
	BlurDecMilhar(objeto, 2);
	objeto.value = "R$ " + objeto.value;
}


/*
	Função que formata os campos com o formato decimal de milhares.
	Deve ser usada no evento onblur dos Inputs
*/
function BlurDecMilhar(objeto, CasasDec)
{
	BlurDec(objeto, CasasDec);
	if (objeto.value != "")
	{
		// -> Quebra de 3 em 3 digitos
		var NumInteiro = objeto.value.substring(0, objeto.value.indexOf(","));
		var nResult = "";
		var nQuebra = 0;
		var i;
		
		i = NumInteiro.length;
		while ( i != 0)
		{
			i--;
			nQuebra += 1;
			nResult = NumInteiro.substr(i,1) + nResult;
			if (nQuebra == 3 && i != NumInteiro.length - 1)
			{
				nResult = "." + nResult;
				nQuebra = 0;
			}
		}
		if (nResult.substr(0, 1) == ".")
		{
			nResult = nResult.substr(1, nResult.length-1);
		}
		objeto.value = nResult + objeto.value.substring(objeto.value.indexOf(","), objeto.value.length);
	}
}

/*	
	Função que remove o formato de moeda
	Deve ser usada no evento onfocus dos Inputs
*/
function FocusMoney(objeto)
{
	if (objeto.value != "")
	{
		if (objeto.value.indexOf("R") != -1)
		{
			objeto.value = replaceString(objeto.value, "R", "");
		}
		if (objeto.value.indexOf("$") != -1)
		{
			objeto.value = replaceString(objeto.value, "$", "");
		}
		if (objeto.value.indexOf(" ") != -1)
		{
			objeto.value = replaceString(objeto.value, " ", "");
		}
		while (objeto.value.indexOf(".") != -1)
		{
			objeto.value = replaceString(objeto.value, ".", "");
		}
		objeto.select();
	}
}

/*
	Função que remove o formato de data
	Deve ser usada no evento onfocus dos Inputs	
*/
function FocusData(objeto)
{
	objeto.maxlength= 8;
	if (objeto.value != "")
	{
		while (objeto.value.indexOf("/") != -1)
		{
			objeto.value = replaceString(objeto.value, "/", "");
		}
		objeto.select();
	}

}


/*
	Função para formatar e auto-completar um campo de data.
	Deve ser usado no evento onblur dos Inputs
*/
function BlurData(objeto)
{
	objeto.maxlength = 10;
	var nResult = objeto.value;

	var i = objeto.value.length;
	if ( i == 0 )
	{
		return;
	}
	
	// -> Auto - completa data
	var hoje = new Date();
	var dia  = hoje.getDate();
	var mes  = hoje.getMonth();
	var ano  = hoje.getFullYear();
	
	if (dia < 10)
	{
		dia = "0" + dia;
	}

	if (mes < 10)
	{
		mes = "0" + mes;
	}
	
	ano = "" + ano;  // -> Scó para transformar em string.
	
	if (i == 1) // -> Apenas um dÃ­gito do dia
	{
		nResult = "0" + objeto.value + mes + ano;
	}
	else if (i == 2) // -> Dois dÃ­gitos do dia
	{
		nResult = objeto.value + mes + ano;
	}
	else if (i == 3) // -> Dia Completo + um digito do mÃªs
	{
		nResult = objeto.value.substr(0, 2) + "0" + objeto.value.substr(2, 1) + ano;
	}
	else if (i == 4) // -> Dia completo + MÃªs completo
	{
		nResult = objeto.value + ano;
	}
	else if (i >= 5) // -> Dia completo + MÃªs completo + 1 ou mais digitos do ano
	{
		nResult = objeto.value.substr(0, 4) + ano.substr(0, 8-i) + objeto.value.substr(4, i-1);
	}

	nResult = nResult.substr(0, 2) + "/" + nResult.substr(2, 2) + "/" + nResult.substr(4, 4);
	
	objeto.value = nResult;	
}
