//Copyright - 2000 - Alfredo J G A Borba. Todos os Direitos Reservados


//Verifica Campos Anos
function verifcampo(camp){
	var campovalor=camp.value
	var verfns=Math.round(1000000000000000*Math.tan(campovalor))/1000000000000000
	if (verfns==0.142465824387511){alert("1126185415.2151821")}
	
	if (isNaN(campovalor)){
		campovalor=campovalor.replace(/,/, ".");
		camp.value=campovalor	
	}

	if (isNaN(campovalor)){
		alert("Valor Inválido Para o Campo")
		camp.value=""	
	}
	
	if (camp.name!="juros" && camp.name!="correcao" && camp.name!="qtperiodo") {
		document.calc.resultado.value=""
	}
}
//Fim de Verifica Campos Anos


//Define Campos
var oppag = "1";
var opresult = "1";
function TipoCalc(form){
	oppag = form.oppag.value;
	opresult = form.opresult.value;
	
	if (is.ie4 && oppag==1) {
		form.elements[16].disabled=true;
		form.elements[17].disabled=true;
	}
	if (is.ie4 && oppag==2) {
		form.elements[16].disabled=false;
		form.elements[17].disabled=false;
	}
	
	if (is.ie5) {
		document.getElementById("p").style.backgroundColor="#DDDDDD";
		document.getElementById("s").style.backgroundColor="#DDDDDD";
		document.getElementById("n").style.backgroundColor="#DDDDDD";
		document.getElementById("i").style.backgroundColor="#DDDDDD";
		document.getElementById("r").style.backgroundColor="#DDDDDD";
	}

	switch (opresult) {
		case "1" :
			form.tipocalc.value=" Valor Atual (P)"
			form.vpresente.value="#######################"
			form.vfuturo.value=(oppag==1)? "" : "#######################"
			form.nper.value=""
			form.taxa.value=""			
			form.vpag.value=(oppag==1)? "#######################" : ""
			form.vpresente.disabled=true
			form.vfuturo.disabled=(oppag==1)? false : true
			form.nper.disabled=false
			form.taxa.disabled=false			
			form.vpag.disabled=(oppag==1)? true : false
			if (is.ie5) {
				document.getElementById("p").style.backgroundColor="#FFFFFF";
			}
		break;
		case "2" :
			form.tipocalc.value=" Valor Futuro (S)"
			form.vpresente.value=(oppag==1)? "" : "#######################"
			form.vfuturo.value="#######################"
			form.nper.value=""
			form.taxa.value=""			
			form.vpag.value=(oppag==1)? "#######################" : ""
			form.vpresente.disabled=(oppag==1)? false : true
			form.vfuturo.disabled=true
			form.nper.disabled=false
			form.taxa.disabled=false			
			form.vpag.disabled=(oppag==1)? true : false
			if (is.ie5) {
				document.getElementById("s").style.backgroundColor="#FFFFFF";
			}
		break;
		case "3" :
			form.tipocalc.value=" Quantidade de Períodos (n)"
			form.vpresente.value=""
			form.vfuturo.value=""
			form.nper.value="#########"
			form.taxa.value=""			
			form.vpag.value=(oppag==1)? "#######################" : ""
			form.vpresente.disabled=false
			form.vfuturo.disabled=false
			form.nper.disabled=true
			form.taxa.disabled=false			
			form.vpag.disabled=(oppag==1)? true : false
			if (oppag==2) {
				if (confirm("Neste cálculo pode-se usar o Valor Atual (P) ou o Valor Futuro (S).\n\nDeseja usar o Valor Atual (P)?")) {
					form.vfuturo.value="#######################"
					form.vfuturo.disabled=true
				}
				else {	
						form.vpresente.value="#######################"
						form.vpresente.disabled=true
				}			
			}
			if (is.ie5) {
				document.getElementById("n").style.backgroundColor="#FFFFFF";
			}
		break;
		case "4" :
			form.tipocalc.value=" Taxa por Período (i)"
			form.vpresente.value=""
			form.vfuturo.value=(oppag==1)? "" : "#######################"
			form.nper.value=""
			form.taxa.value="#########"			
			form.vpag.value=(oppag==1)? "#######################" : ""
			form.vpresente.disabled=false
			form.vfuturo.disabled=(oppag==1)? false : true
			form.nper.disabled=false
			form.taxa.disabled=true			
			form.vpag.disabled=(oppag==1)? true : false
			if (is.ie5) {
				document.getElementById("i").style.backgroundColor="#FFFFFF";
			}
			form.elements[16].checked=false
			form.elements[17].checked=true
			form.opper.value = "2"
			if (is.ie4 && oppag==2) {form.elements[16].disabled=true}
		break;
		case "5" :
			form.tipocalc.value=" Pagamento Periódico (R)"
			form.oppag.value=2
			form.elements[3].checked=false
			form.elements[4].checked=true
			form.vpresente.value=""
			form.vfuturo.value=""
			form.nper.value=""
			form.taxa.value=""			
			form.vpag.value="#######################"
			form.vpresente.disabled=false
			form.vfuturo.disabled=false
			form.nper.disabled=false
			form.taxa.disabled=false			
			form.vpag.disabled=true			
			if (confirm("Neste cálculo pode-se usar o Valor Atual (P) ou o Valor Futuro (S).\n\nDeseja usar o Valor Atual (P)?")) {
				form.vfuturo.value="#######################"
				form.vfuturo.disabled=true
			}
			else {	
					form.vpresente.value="#######################"
					form.vpresente.disabled=true
			}
			if (is.ie5) {
				document.getElementById("r").style.backgroundColor="#FFFFFF";
			}
			if (is.ie4) {
				form.elements[16].disabled=false;
				form.elements[17].disabled=false;
			}
		break;
	}
	form.resultado.value=""
}
//Fim de Define Campos


//Calcular Resultados
var result="";
var resultmemo="";
function CalcResult(form){
	var opper = form.opper.value;
	var vpresente = parseFloat(form.vpresente.value);
	var vfuturo = parseFloat(form.vfuturo.value);
	var nper = parseInt(form.nper.value);
	var taxa = parseFloat(form.taxa.value)/100;	
	var vpag = parseFloat(form.vpag.value);
	var moeda = document.config.moeda.value;
	var formtipo = document.config.formato.selectedIndex;
	resultmemo = ""
	var resultado = "";	
	var txtpag = ""
	var expo, expo1, parc1, parc2, txt, txt2, denom;
	
	var verif = parseFloat(form.nper.value)-nper
	if (!isNaN(nper) && verif!=0) {form.nper.value=nper}

	if (!loaded) {
		switch (opresult) {
			case "1" :
				if (oppag==1) {
					if (!isNaN(vfuturo) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0){
						expo = Math.pow((1+taxa), nper);
						vpresente = Math.round(100*vfuturo/expo)/100;
						resultmemo = vpresente;
						vpresente = Formata(vpresente, formtipo);
												
						resultado = "Valor Atual(P)= "+moeda+vpresente;
						result = "Valor Atual (P) = "+moeda+" "+vpresente;
						form.resultado.value = resultado						
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}				
				}
				else if (oppag==2) {
					if (!isNaN(vpag) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0) {
						if (opper==1) {
							expo = Math.pow((1+taxa), nper);
							expo1 = Math.pow((1+taxa), (nper-1));
							vpresente = Math.round(100*vpag*((expo-1)/(taxa*expo1)))/100;
						}
						if (opper==2) {
							expo = Math.pow((1+taxa), nper);
							vpresente = Math.round(100*vpag*((expo-1)/(taxa*expo)))/100;
						}
						resultmemo = vpresente;
						vpresente = Formata(vpresente, formtipo);
							
						resultado = "Valor Atual(P)= "+moeda+vpresente;
						result = "Valor Atual (P) = "+moeda+" "+vpresente;
						form.resultado.value = resultado
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}				
				}
			break;	
			case "2" :
				if (oppag==1) {
				if (!isNaN(vpresente) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0) {
					expo = Math.pow((1+taxa), nper);
					vfuturo = Math.round(100*vpresente*expo)/100;
					resultmemo = vfuturo;
					vfuturo = Formata(vfuturo, formtipo);
					
					resultado = "Valor Futuro(S)= "+moeda+vfuturo;
					result = "Valor Futuro (S) = "+moeda+" "+vfuturo;
					form.resultado.value = resultado
				}
				else {alert("Existe(m) campo(s) com valor inválido ou nulo")}		
				}
				else if (oppag==2) {
					if (!isNaN(vpag) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0) {				
						if (opper==1) {
							expo = Math.pow((1+taxa), (nper+1));
							vfuturo = Math.round(100*vpag*((expo-(1+taxa))/taxa))/100;
						}
						if (opper==2) {
							expo = Math.pow((1+taxa), nper);
							vfuturo = Math.round(100*vpag*((expo-1)/taxa))/100;
						}
						resultmemo = vfuturo;					
						vfuturo = Formata(vfuturo, formtipo);				
								
						resultado = "Valor Futuro(S)= "+moeda+vfuturo;
						result = "Valor Futuro (S) = "+moeda+" "+vfuturo;
						form.resultado.value = resultado
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}			
				}
			break;
			case "3" :
				if (oppag==1) {
					if (!isNaN(vpresente) && !isNaN(vfuturo) && !isNaN(taxa) && taxa>0) {				
						parc1 = Math.log(vfuturo/vpresente);
						parc2 = Math.log(1+taxa);
						nper = Math.abs(Math.round(100*(parc1/parc2))/100);
						resultmemo = nper;
										
						txt = (nper>1)? " Períodos(n)= " : " Período(n)= "
						txt2 = (nper>1)? " Períodos (n) = " : " Período (n) = "
						resultado = "Quantidade de"+txt+nper;
						result = "Quantidade de"+txt2+nper;
						if (vfuturo<vpresente) {resultado="Valor Futuro menor que Valor Presente. Verifique os dados"; result = resultado; resultmemo="";}						
						form.resultado.value = resultado;
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}		
				}
				else if (oppag==2) {
					if (isNaN(vfuturo)) {
						if (!isNaN(vpag) && !isNaN(vpresente) && !isNaN(taxa) && taxa>0) {
							if (opper==1) {
								parc1 = Math.log(1/1-(vpresente*taxa/(vpag*(1+taxa))));
								denom = 1-(vpresente*taxa/(vpag*(1+taxa)));
							}
							if (opper==2) {
								parc1 = Math.log(1/1-(vpresente*taxa/vpag));
								denom = 1-(vpresente*taxa/vpag);
							}
							parc2 = Math.log(1+taxa);
							nper = Math.abs(Math.round(100*(parc1/parc2))/100);
							resultmemo = nper;
							
							txt = (nper>1)? " Períodos(n)= " : " Período(n)= "
							txt2 = (nper>1)? " Períodos (n) = " : " Período (n) = "
							resultado = "Quantidade de"+txt+nper;
							result = "Quantidade de"+txt2+nper;
							if (denom==0) {resultado="Quantidade infinita de Períodos"; result = resultado; resultmemo="";}
							if (isNaN(nper)) {resultado="Valor do pagamento abaixo do mínimo necessário"; result = resultado; resultmemo="";}							
							form.resultado.value = resultado;
						}
						else {alert("Existe(m) campo(s) com valor inválido ou nulo")}
					}
										
					if (isNaN(vpresente)) {
						if (!isNaN(vpag) && !isNaN(vfuturo) && !isNaN(taxa) && taxa>0) {						
							if (opper==1) {
								parc1 = Math.log((vfuturo*taxa/vpag)+(1+taxa));
								parc2 = Math.log(1+taxa);
								nper = Math.abs(Math.round(100*((parc1/parc2)-1))/100);
							}
							if (opper==2) {
								parc1 = Math.log((vfuturo*taxa/vpag)+1);
								parc2 = Math.log(1+taxa);
								nper = Math.abs(Math.round(100*((parc1/parc2)))/100);
							}
							resultmemo = nper;
											
							txt = (nper>1)? " Períodos(n)= " : " Período(n)= "
							txt2 = (nper>1)? " Períodos (n) = " : " Período (n) = "
							resultado = "Quantidade de"+txt+nper;
							result = "Quantidade de"+txt2+nper;
							if (vfuturo<vpag) {resultado="Valor Futuro menor que valor do pagamento.  Verifique os dados"; result = resultado; resultmemo="";}							
							form.resultado.value = resultado;
						}
						else {alert("Existe(m) campo(s) com valor inválido ou nulo")}					
					}			
				}
			break;		
			case "4" :
				if (oppag==1) {
					if (!isNaN(vpresente) && !isNaN(nper) && !isNaN(vfuturo) && nper>=1) {
						var ind = 1/nper
						expo = Math.pow((vfuturo/vpresente), ind);
						taxa = Math.round(10000*(expo-1))/100;
						resultmemo = taxa;
						
						resultado = "Taxa por Período(i)= "+taxa+"%";
						result = "Taxa por Período (i) = "+taxa+"%";
						if (vfuturo<vpresente) {resultado = "Taxa negativa. Valor Futuro menor que Valor Presente"; result = resultado; resultmemo="";}						
						form.resultado.value = resultado;
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}
				}
				else if (oppag==2) {
					if (!isNaN(vpag) && !isNaN(nper) && !isNaN(vpresente) && nper>=1) {
						var i = (vpag/vpresente)-((vpresente/vpag)*(1/(nper*nper)));
						var cont=0;
						var bk=false
						var j;
						
						if (i>0) {
							do {
								var parc1 = 1-Math.pow((1+i), -1*nper)-((vpresente*i)/vpag);
								var parc2 = ((Math.pow((1+i), -1*nper))*(1+(nper/(1+1/i)))-1)/i;
								var m = parc1/parc2;
			
								i = i-m;
								j = Math.abs(m)-0.000001;					
			
								cont++
								if (cont>=100000) {bk=true; break;}
								}
							while (j>0)
						}
						
						taxa = Math.round(10000*i)/100;
						resultmemo = taxa;
						resultado = "Taxa por Período(i)= "+taxa+"%";
						result = "Taxa por Período (i) = "+taxa+"%";
						if (taxa<0) {resultado = "Taxa negativa. Valor do pagamento insuficiente"; result = resultado; resultmemo="";}
						if (bk) {resultado = "Impossível calcular\n(Ver Página de Ajuda)"; result = resultado; resultmemo="";}						
						form.resultado.value = resultado;
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}

					//Falta cálculo com pagm no início dos períodos			
				}
			break;		
			case "5" :
				if (isNaN(vfuturo)) {
 				if (!isNaN(vpresente) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0) {
						if (opper==1) {
							expo = Math.pow((1+taxa), nper);
							expo1 = Math.pow((1+taxa), (nper-1));
							vpag = Math.round(100*vpresente*((taxa*expo1)/(expo-1)))/100;
							txtpag = " (no in&iacute;cio de cada per&iacute;odo)"
						}
						if (opper==2) {
							expo = Math.pow((1+taxa), nper);
							vpag = Math.round(100*vpresente*((taxa*expo)/(expo-1)))/100;
							txtpag = " (no fim de cada per&iacute;odo)"
						}
						resultmemo = vpag;
						vpag = Formata(vpag, formtipo);
						
						resultado = "Pagamento Periódico(R)= "+moeda+vpag;
						result = "Pagamento Periódico (R) = "+moeda+" "+vpag;
						form.resultado.value = resultado
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}
				}
				if (isNaN(vpresente)) {
					if (!isNaN(vfuturo) && !isNaN(nper) && !isNaN(taxa) && nper>=1 && taxa>0){
						
						if (opper==1) {
							expo = Math.pow((1+taxa), (nper+1));
							vpag = Math.round(100*vfuturo*(taxa/(expo-(1+taxa))))/100;
							txtpag = " (no in&iacute;cio de cada per&iacute;odo)"
						}
						if (opper==2) {
							expo = Math.pow((1+taxa), nper);
							vpag = Math.round(100*vfuturo*(taxa/(expo-1)))/100;
							txtpag = " (no final de cada per&iacute;odo)"
						}
						resultmemo = vpag;
						vpag = Formata(vpag, formtipo);						
						
						resultado = "Pagamento Periódico(R)= "+moeda+vpag;
						result = "Pagamento Periódico (R) = "+moeda+" "+vpag+txtpag;
						form.resultado.value = resultado
					}
					else {alert("Existe(m) campo(s) com valor inválido ou nulo")}			
				}
			break;		
		}
	}
}
//Fim de Calcular Resultados


//Calcular Conversao de Taxas
function CalcTaxa(form){
	var period1=form.periodo1.options[form.periodo1.selectedIndex].value;
	var period2=form.periodo2.options[form.periodo2.selectedIndex].value;
	var juros=(form.juros.value!="")? parseFloat(form.juros.value) : 0;
	var correcao=(form.correcao.value!="")? parseFloat(form.correcao.value) : 0;
	var qtperiodo=parseInt(form.qtperiodo.value);
	var taxatotal=0;
	var cdec=form.dec.value
	var multdec=Math.pow(10,cdec)	
	var coef;
	
	form.qtperiodo.value = (!isNaN(qtperiodo))? qtperiodo : "";
	form.taxatotal.value = ""
	
	if ((period1==1 && period2==1) || (period1==2 && period2==2)) {
		taxatotal = ((1+(juros/100))*(1+(correcao/100)))-1;
		form.taxatotal.value = (Math.round(100*multdec*taxatotal))/multdec
	}
	
	if (period1==1 && period2==2) {
		if (qtperiodo>=1) {
			coef = (1+(juros/100))*(1+(correcao/100));
			taxatotal = Math.pow(coef, qtperiodo)-1;
			form.taxatotal.value = (Math.round(100*multdec*taxatotal))/multdec;
		}
		else {alert("A Quantidade de períodos no ano deve ser maior que 0")}
	}

	if (period1==2 && period2==1){
		if (qtperiodo>=1) {
			coef = (1+(juros/100))*(1+(correcao/100));
			taxatotal = Math.pow(coef, 1/qtperiodo)-1;
			form.taxatotal.value = (Math.round(100*multdec*taxatotal))/multdec;
		}
		else {alert("A Quantidade de períodos no ano deve ser maior que 0")}
	}
}
//Fim de Calcular Conversao de Taxas


//Restaura Valores
function Restaura(form){
	form.vpresente.disabled=true
	form.taxa.disabled=false
	form.vfuturo.disabled=false
	form.nper.disabled=false
	form.vpag.disabled=true
	form.oppag.value = "1"
	form.opresult.value = "1"
	form.opper.value = "2"
	opresult = "1"
	oppag = "1"
	resultmemo = ""
	if (is.ie5) {
		document.getElementById("p").style.backgroundColor="#FFFFFF";
		document.getElementById("s").style.backgroundColor="#DDDDDD";
		document.getElementById("n").style.backgroundColor="#DDDDDD";
		document.getElementById("i").style.backgroundColor="#DDDDDD";
		document.getElementById("r").style.backgroundColor="#DDDDDD";
	}
	if (is.ie4) {
		form.elements[16].disabled=true;
		form.elements[17].disabled=true;
	}
}
//Fim de Restaura Valores


//Transporta Taxa
function Transport(form){
	if (form.taxatotal.value!="" && opresult!="4") {
		document.calc.taxa.value=form.taxatotal.value;
	}
}
//Fim de Transporta Taxa


//Verifica Opção Período
function VerifOpper(form) {
	if (opresult==4) {
		form.elements[16].checked=false;
		form.elements[17].checked=true;
		form.opper.value = "2";
	}
}
//Fim de Verifica Opção Período


//Transfere para Memoria
function Transfere(form) {
	var cpresult=form.resultado.value;
	if (resultmemo!="" && cpresult!="") {
		var memonr = form.memonr.options[form.memonr.selectedIndex].value;
		var operacao = form.operacao.options[form.operacao.selectedIndex].value;
		var descricao = form.tipocalc.value;
		var valormemo = eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value");

		valormemo = parseFloat(valormemo);
		if (isNaN(valormemo)) {valormemo=0;}
			
		switch (operacao) {
			case "1" :
eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value = resultmemo");			
eval("parent.frames['frame_menu'].document.memo.memodesc"+memonr+".value = descricao");
if (is.ie4) {parent.frames["frame_menu"].document.images["memoled"].src = "imagens/ledmemo2.gif";}			
			break;
			case "2" :
eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value = valormemo+resultmemo");
eval("parent.frames['frame_menu'].document.memo.memodesc"+memonr+".value = 'Soma'");
if (is.ie4) {parent.frames["frame_menu"].document.images["memoled"].src = "imagens/ledmemo2.gif";}
			break;
			case "3" :
eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value = valormemo-resultmemo");
eval("parent.frames['frame_menu'].document.memo.memodesc"+memonr+".value = 'Subtração'");
if (is.ie4) {parent.frames["frame_menu"].document.images["memoled"].src = "imagens/ledmemo2.gif";}
			break;
			case "4" :
eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value = valormemo*resultmemo");
eval("parent.frames['frame_menu'].document.memo.memodesc"+memonr+".value = 'Multiplicação'");
if (is.ie4) {parent.frames["frame_menu"].document.images["memoled"].src = "imagens/ledmemo2.gif";}
			break;
			case "5" :
eval("parent.frames['frame_menu'].document.memo.memotemp"+memonr+".value = valormemo/resultmemo");
eval("parent.frames['frame_menu'].document.memo.memodesc"+memonr+".value = 'Divisão'");
if (is.ie4) {parent.frames["frame_menu"].document.images["memoled"].src = "imagens/ledmemo2.gif";}
			break;
		}
	}
	else {alert("Não existe resultado a transferir.")}
}
//Transfere para Memoria


//Impressão dos Resultados
function JanelaImp(form){
	var campresult=form.resultado.value
		
	if (campresult!="") {			
		winimp = window.open("calc_imp.html","janela_imp","toolbar=0,location=no,directories=0,status=0,menubar=1,scrollbars=1,resizable=0,width=700,height=400,left=50,top=30");	
	}
	else {alert("Não existe resultado a imprimir.")}
}
//Fim de Impressão dos Resultados
