var optionsWindow = 'directories=1,location=1,menubar=1,resizable=1,toolbar=1,status=1,scrollbars=1,width=600,height=400,left=10,top=10';
var optionsWindowHelp = 'directories=0,location=0,menubar=0,resizable=0,toolbar=0,status=0,scrollbars=0,width=300,height=200,left=10,top=10';
var jsValidCharsOnlyFloat = '0123456789,';

function openUrl(url)
{
	window.open(url, 'window', optionsWindow);
}

function openHelp(url)
{
	window.open("help/"+url, 'window', optionsWindowHelp);
}

function closeWindow()
{
	window.close();
}

function validaCampo(campo, tamMax, caracteres)
{
  //Uso: onKeyPress="return validaCampo(this, <tamanho>);"
  return (validaCaracteres(String.fromCharCode(event.keyCode).toUpperCase(), caracteres) || event.keyCode == 13) && campo.value.length < tamMax;
}

function validaCaracteres(item, strValida)
{
	var auxStr;
	var auxCode;

	for (var i=0; i<item.length; i++)
	{
		auxStr = item.substring(i, (i + 1));
		auxCode = auxStr.charCodeAt(0);
		if((auxCode != 13)&&(auxCode != 10))
		{
			if (strValida.indexOf(auxStr) == -1)
			{
				return false;
			}
		}
	}

	return true;
}

function doSetMonetaryFields(campo, casas)
{
	var posPoint = campo.value.indexOf(",");
	if(posPoint != -1)
	{
		return;
	}

	posPoint = campo.value.indexOf(".");

	if(posPoint==-1)
	{
		beforePoint = campo.value.substring(0, campo.value.length);
		afterPoint = "";
	}
	else
	{
		beforePoint = campo.value.substring(0, posPoint);
		afterPoint = campo.value.substring(posPoint+1, posPoint+casas);
	}
	var i = 2;

	if (campo.value.length > 0)
	{
		while(afterPoint.length<i)
		{
			afterPoint += "0";
		}
		campo.value = beforePoint + "," +afterPoint;
	}
	else
	{
		campo.value = 0,00;
	}
}

function undoSetMonetaryFields(campo, casas)
{
	var posComma = campo.value.indexOf(".");
	if(posComma != -1)
	{
		return;
	}
		
	posComma = campo.value.indexOf(",");
	if(posComma==-1)
	{
		beforeComma = campo.value.substring(0, campo.value.length);
		afterComma = "";
	}
	else
	{
		beforeComma = campo.value.substring(0, posComma);
		afterComma = campo.value.substring(posComma+1, posComma+casas);
	}
	var i = 2;

	if (campo.value.length > 0)
	{
		while(afterComma.length<i)
		{
			afterComma += "0";
		}
		campo.value = beforeComma + "." +afterComma;
	}
	else
	{
		campo.value = 0.00;
	}
}

// Calcula o acrescimo de field2 sobre field1 (%) e joga em field3
function vlrAcrescimo(field1, field2, field3)
{
	var f1 = 0;
	var f2 = 0;
	var res = 0;
	
	if((field1.value!="") && (field2.value!=""))
	{
	    undoSetMonetaryFields(field1, 3);
		undoSetMonetaryFields(field2, 3);
		f1=field1.value;
		f2=field2.value;
		res=(((f2/f1)-1)*100);
		field3.value=res;	
		doSetMonetaryFields(field1, 3);
		doSetMonetaryFields(field2, 3);
		doSetMonetaryFields(field3, 3);
	}
}

function calcGastolk(field1, field2)
{
	var f1 = 0;
	var f2 = 0;
	var res = 0;
	
	if(field1.value!="")
	{
	    undoSetMonetaryFields(field1, 5);
		f1=eval(field1.value);
		res=(1/f1);
		field2.value=res;	
		doSetMonetaryFields(field1, 5);
		doSetMonetaryFields(field2, 5);
	}
}

function calcularGastosMensais(form)
{
	var resA = 0;
	var resG = 0;
	
	if (verifyFieldsAgency(form))
	{
		calcGastosMensaisAlcool(form);
		calcGastosMensaisGasolina(form);
		calcularCustosAnuais(form);
		vlrAcrescimo(form.cMAlcool, form.cMGasolina, form.diffCustoM);
	}
}

// Calculos mensais para carro a alcool
function calcGastosMensaisAlcool(form)
{
	var precoAlc = 0;
	var b7  = 0;
	var b8  = 0;
	var b10 = 0;
	var b11 = 0;
	var resAlc = 0;
		
	undoSetMonetaryFields(form.precoAlcool,3); // preco do alcool
	undoSetMonetaryFields(form.kmRAlcool,3);   // Kilometros rodados por ano
	undoSetMonetaryFields(form.kmRAlcoolC,3);  // estimativa rodado na cidade
	undoSetMonetaryFields(form.ccAlcoollk,5);  // estimativa consumo l/Km cidade
	undoSetMonetaryFields(form.ccAlcoolek,5);  // estimativa consumo l/Km estrada
	
	precoAlc=form.precoAlcool.value;
	b7=form.ccAlcoollk.value;
	b8=form.ccAlcoolek.value;
	b10=form.kmRAlcool.value;
	b11=(form.kmRAlcoolC.value)/100;
	resAlc=(precoAlc*(((b10/12)*b11*b7)+((b10/12)*(1-b11)*b8)));
    form.cMAlcool.value=resAlc;
	
	doSetMonetaryFields(form.precoAlcool,3);
	doSetMonetaryFields(form.kmRAlcool,3);
	doSetMonetaryFields(form.kmRAlcoolC,3);
	doSetMonetaryFields(form.ccAlcoollk,5);
	doSetMonetaryFields(form.ccAlcoolek,5);
	doSetMonetaryFields(form.cMAlcool,3);	
}

// Calculos mensais para carro a gasolina
function calcGastosMensaisGasolina(form)
{
	var precoGas = 0;
	var c7  = 0;
	var c8  = 0;
	var c10 = 0;
	var c11 = 0;
	var aux = 0;
	var resGas = 0;
		
	undoSetMonetaryFields(form.precoGasolina,3); // preco da gasolina
	undoSetMonetaryFields(form.kmRGasolina,3);   // Kilometros rodados por ano
	undoSetMonetaryFields(form.kmRGasolinaC,3);  // estimativa rodado na cidade
	undoSetMonetaryFields(form.ccGasolinalk,5);  // estimativa consumo l/Km cidade
	undoSetMonetaryFields(form.ccGasolinaek,5);  // estimativa consumo l/Km estrada
	
	precoGas=form.precoGasolina.value;
	c7=form.ccGasolinalk.value;
	c8=form.ccGasolinaek.value;
	c10=form.kmRGasolina.value;
	c11=(form.kmRGasolinaC.value)/100;
	resGas=(precoGas*(((c10/12)*c11*c7)+((c10/12)*(1-c11)*c8)));
    form.cMGasolina.value=resGas;
	
	doSetMonetaryFields(form.precoGasolina,3);
	doSetMonetaryFields(form.kmRGasolina,3);
	doSetMonetaryFields(form.kmRGasolinaC,3);
	doSetMonetaryFields(form.ccGasolinalk,5);
	doSetMonetaryFields(form.ccGasolinaek,5);
	doSetMonetaryFields(form.cMGasolina,3);
}

function verifyFieldsAgency(form)
{
	var js_bufferError = "";
	var achouErro = false;

	if(form.precoAlcool.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe o preço do Álcool." + "\n";
	}
	
	if(form.precoGasolina.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe o preço da Gasolina." + "\n";
	}

	if(form.ccAlcoolkl.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a estimativa de consumo na cidade para o motor a Álcool." + "\n";
	}
	
	if(form.ccGasolinakl.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a estimativa de consumo na cidade para motor a Gasolina." + "\n";
	}

	if(form.ccAlcoolke.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a estimativa de consumo na estrada para motor a Álcool." + "\n";
	}

	if(form.ccGasolinake.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a estimativa de consumo na estrada para motor a Gasolina." + "\n";
	}

	if(form.vlrAAlcool.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe o valor para aquisição do seu carro com motor a Álcool." + "\n";
	}

	if(form.vlrAGasolina.value=='')
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe o valor para aquisição do seu carro com motor a Gasolina." + "\n";
	}

	if((form.kmRAlcool.value=='')||(form.kmRGasolina.value==''))
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a quantidade de kilometros rodados em um ano." + "\n";
	}

	if((form.kmRAlcoolC.value=='')||(form.kmRGasolinaC.value==''))
	{
		achouErro = true;
		js_bufferError = js_bufferError + "Informe a proporção de kilometros rodados dentro da cidade." + "\n";
	}

        if(form.jurosAlcool.value=='')
        {
                achouErro = true;
                js_bufferError = js_bufferError + "Informe a estimativa dos juros de oportunidade para os gastos com Álcool." + "\n";
        }

        if(form.jurosGasolina.value=='')
        {
                achouErro = true;
                js_bufferError = js_bufferError + "Informe a estimativa dos juros de oportunidade para os gastos com Gasolina." + "\n";
        }

	if(achouErro == true)
	{
		alert(js_bufferError);
		return false;
	}
	else
	{		
		return true;
	}
}

function clearFields(form)
{
	form.reset();
	for(var i=0; i<form.length; i++)
	{
		if(form.elements[i].type == 'text')	
		{
			form.elements[i].value = '';
		}
		
		if(form.elements[i].type == 'hidden')
		{		
			form.elements[i].value = '-1';		
		}		
	}
	form.ipvaAlcool.value = "2,00";
	form.ipvaGasolina.value = "3,00";
	form.vlrDAlcool.value = "20,00";
	form.vlrDGasolina.value = "20,00";
}

function calcularCustosAnuais(form)
{
	var gastoMensalAlc = 0;
	var gastoMensalGas = 0;
	var debInicialAlc = 0;
	var debInicialGas = 0;
	var vlrAquisicaoAlc = 0;
	var vlrAquisicaoGas = 0;
	var resAlcA = 0;
	var resGasA = 0;
	var f1 = 0;
	var fator = 0;
	var ipva = 0;
	var dif = 0;
	
	undoSetMonetaryFields(form.cMAlcool,3);
	undoSetMonetaryFields(form.cMGasolina,3);
	undoSetMonetaryFields(form.vlrAAlcool,3);
	undoSetMonetaryFields(form.vlrAGasolina,3);
	gastoMensalAlc = eval(form.cMAlcool.value);
	gastoMensalGas = eval(form.cMGasolina.value);
	vlrAquisicaoAlc = eval(form.vlrAAlcool.value);
	vlrAquisicaoGas = eval(form.vlrAGasolina.value);

	for (i = 0; i <= 11; i++)
	{
		f1 = Math.pow(1.02, i);
		fator = (1/f1);
		if (i==0)
		{
 			ipva = (vlrAquisicaoAlc*0.02);
			resAlcA=(ipva+gastoMensalAlc+vlrAquisicaoAlc);
 			ipva = (vlrAquisicaoGas*0.03);
			resGasA=(gastoMensalGas+ipva+vlrAquisicaoGas);
		}
		else
		{
			if (i==11)
			{
				resAlcA = resAlcA + ((gastoMensalAlc - (vlrAquisicaoAlc*(1-0.15)))*fator);
				resGasA = resGasA + ((gastoMensalGas - (vlrAquisicaoAlc*(1-0.15)))*fator);
			}
			else
			{
				resAlcA = (resAlcA + (gastoMensalAlc*fator));
				resGasA = (resGasA + (gastoMensalGas*fator));
			}
		}
	}
    dif = resGasA - resAlcA;	
	form.vlrTotalAlcool.value = resAlcA;
	form.vlrTotalGasolina.value = resGasA;
	form.diffAlcGas.value = dif;
	doSetMonetaryFields(form.cMAlcool,3);
	doSetMonetaryFields(form.cMGasolina,3);
	doSetMonetaryFields(form.vlrAAlcool,3);
	doSetMonetaryFields(form.vlrAGasolina,3);
	doSetMonetaryFields(form.vlrTotalAlcool,3);
	doSetMonetaryFields(form.vlrTotalGasolina,3);
	doSetMonetaryFields(form.diffAlcGas,3);
	vlrAcrescimo(form.vlrTotalAlcool, form.vlrTotalGasolina, form.diffTotal);
}

