//http://www.bcb.gov.br/pec/calculo/calc_financiamento/
function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
}	 

function checkInput(i)
{
	if (i.value == "" || isWhitespace(i.value))
	{
		return false
	}
	else
	{
		return true
	}
}
	
function isWhitespace(s)
{
	var i;

	// Is s empty?
	if (isEmpty(s)) return true;

	for (i = 0; i < s.length; i++)
	{   
		// Check that current character isn't whitespace.
		var c = s.charAt(i);

		if (whitespace.indexOf(c) == -1) return false;
	}

	// All characters are whitespace.
	return true;
}
   
function isFloat (s)
{
	var i;
	var seenDecimalPoint = false;

	if (isEmpty(s))
	{
		if (isFloat.arguments.length == 1)
		{
			return defaultEmptyOK;
		}
		else
		{
			return (isFloat.arguments[1] == true);
		}
	}

	if (s == decimalPointDelimiter) return false;

	for (i = 0; i < s.length; i++)
	{   
		// Check that current character is number.
		var c = s.charAt(i);

		if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
		else if (!isDigit(c)) return false;
	}

	// All characters are numbers.
	return true;
}	   
   
function Calcular(opcao)
{
	var s;

	if (!checkInput(document.form1.periodo))
	{
		if (!checkInput(document.form1.juros) || !checkInput(document.form1.parcela) || !checkInput(document.form1.montante))
		{
			alert("Preencha 3 valores para calcular o 4º.")
			return false;
		}
		opcao = 1
	}
	else
	{
		if (!checkInput(document.form1.juros))
		{
			if (!checkInput(document.form1.periodo) || !checkInput(document.form1.parcela) || !checkInput(document.form1.montante))
			{
				alert("Preencha 3 valores para calcular o 4º.")
				return false;
			}
			opcao = 2
		}
		else
		{
			if (!checkInput(document.form1.parcela))
			{
				if (!checkInput(document.form1.periodo) || !checkInput(document.form1.juros) || !checkInput(document.form1.montante))
				{
					alert("Preencha 3 valores para calcular o 4º.")
					return false;
				}
				opcao = 3
			}
			else
			{
				if (!checkInput(document.form1.montante))
				{
					if (!checkInput(document.form1.juros) || !checkInput(document.form1.parcela) || !checkInput(document.form1.periodo))
					{
						alert("Preencha 3 valores para calcular o 4º.")
						return false;
					}
					opcao = 4
				}
				else
				{
					alert("Preencha apenas 3 valores para calcular o 4º.")
					return false;
				}
			}
		}
	}

  if (opcao != 1) {
	  s = document.form1.periodo.value
	  s = s.replace(",", ".")
	  if(!isFloat(s))
	  {
		alert("Período deve ser um valor inteiro.")
		return
	  }

	  per_int = parseFloat(s)
  }

  if (opcao != 2) {

	  s = document.form1.juros.value
	  s = s.replace(",", ".")

		if(!isFloat(s))
		{
		  alert("Taxa de Juros deve ser um valor númerico, tendo a vírgula(,) como delimitador da parte fracionária.")
		  return
		}

		juros_float = parseFloat(s)/100


  }

  if (opcao != 3) {
	  s = document.form1.parcela.value;
	  s = s.replace(",", ".");
		  if(!isFloat(s))
		  {
				alert("Valor da prestação deve ser um valor númerico, tendo a vírgula(,) como delimitador dos centavos.")
				return
		  }

		  parcela_float = parseFloat(s)


  }

  if (opcao != 4) {
	  s = document.form1.montante.value
	  s = s.replace(",", ".")

		  if(!isFloat(s))
		  {
				alert("Valor do Financiamento deve ser um valor númerico maior que zero, tendo a vírgula(,) como delimitador dos centavos.")
				return
		  }

		  montante_float = parseFloat(s)


  }

  if (opcao==1) {

	per_int = Math.log(1-(montante_float*juros_float/parcela_float))/Math.log(1/(1+juros_float))
	per_int = Math.round(per_int*100)/100

	var s = String(per_int)
	i = s.indexOf(".")
		if (i != -1)
		{
				s = s.substring(0,i) + "," + s.substring(i+1,s.length)

		}
	document.form1.periodo.value = s
  }

	if (opcao==2) {
		juros_inicial = parseFloat("-1")
		juros_final = parseFloat("99999")
		suposto_juros = parseFloat("0")
		suposto_parcela = parseFloat("0")
		var cont = 1
		var achou = false
		while (true) {
			suposto_juros = (juros_final + juros_inicial)/2
			suposto_parcela = (montante_float*suposto_juros)/(1-Math.pow(1/(1+suposto_juros),per_int))
			suposta_diferenca = Math.abs(parcela_float-suposto_parcela)
			if (suposta_diferenca > 0.000000001) {
				if (suposto_parcela > parcela_float) {
					juros_final = suposto_juros
				}
				else {
					juros_inicial = suposto_juros
				}
			}
			else {
				achou = true
				break
			}
			if (cont > 5000) {
				break
			}
			cont++
		}
		if (achou==false) {
			document.form1.juros.value = "NaN"
		}
		else {
			if (suposto_juros!=-100) {
				suposto_juros = suposto_juros*100
			}
			juros_float = Math.round(suposto_juros*100000)/100000
			var s = String(juros_float)
			i = s.indexOf(".")
			if (i != -1) {
				s = s.substring(0,i) + "," + s.substring(i+1,s.length)
			}
			document.form1.juros.value = s
			return
		}
	}

	if (opcao==3) {
		parcela_float = (montante_float*juros_float)/(1 - Math.pow(1/(1+juros_float),per_int))
		parcela_float = Math.round(parcela_float*100)/100
		var s = String(parcela_float)
		i = s.indexOf(".")
		if (i != -1) {
			s = s.substring(0,i) + "," + s.substring(i+1,s.length)
		}
		document.form1.parcela.value = s
		return
	}

	if (opcao==4) {
		montante_float = (parcela_float*(1 - Math.pow(1/(1+juros_float),per_int))/juros_float)
		montante_float = Math.round(montante_float*100)/100
		var s = String(montante_float)
		i = s.indexOf(".")
		if (i != -1) {
			s = s.substring(0,i) + "," + s.substring(i+1,s.length)
		}
		document.form1.montante.value = s
		return
	}
}