/* author: IBERBULEI, Lda */
/* Creation date: 07-03-2006 */
//------------------------------------------------------------------------
//	Seguros e etc
//------------------------------------------------------------------------
/*SEGURO MULTIRISCOS*/
function getCalSeguroM(p_fin,valImovel,mensal_anual){
  /*FORMULA SEGURO MULTIRISCOS ANUAL*/
  //Seguro Multiriscos = 1,080/1000 sobre o campo de input "Valor do Imóvel (EUR):"
  // (TxSeguro/1000)/Valor do Imovel = SM  
  var strReturn,cal,cota,PercSegMult;
  //Só nao aparece no sinal
 if(p_fin=='3'){	
	strReturn= 'Não Aplicável';
  }else{
  	cota = getSeguroMultiRiscos();
	PercSegMult = getPercSegMult();
	//Formula a calcular sobre os 100% do imovel
	//cal = ((eval(cota)/1000)*eval(valImovel)); 	
	//Formula a calcular sobre os 60% do imovel, dia alteração 23/05/2006	
	cal = ((eval(cota)/1000)*(eval(valImovel)*(eval(PercSegMult)/100)));
	if (mensal_anual =='m'){
					cal = eval(cal) / 12; 
					//se o seguro mensal for inferior a 35 Euros acresec-se 2 Euros na mensalidade
					if (eval(cal) < 35){
						cal = eval(cal) + 2;
					}    	
	}
	strReturn = cal;	
  }	
  return strReturn;
}

/*SEGURO VIDA com combo box*/
function getCalSeguroV(p_fin,p_seg,age1,age2,valFinanciamento,valAquisicao,mensal_anual){
/*FORMULA SEGURO VIDA ANUAL*/
// (((capital * taxa)* INEN)/1000) = SV
//INEM ja esta na taxa
// INEN = 1.01
var strReturn,cal,tx_sg,tx_inem;
tx_inem = getTaxaINEM();
//Só nao aparece no sinal
if(p_fin =='3'){	
//alert('en sg v sinal');
	if (p_seg=='0'){
		//calculo :seguro 1 vida
		tx_sg = getSeguroVida1(age1)
		cal = (eval(valAquisicao) * eval(tx_sg))/1000;
	}else if(p_seg=='1'){
		//calculo :seguro 2 vidas  
		tx_sg = getSeguroVida2(age1,age2)
		cal = (eval(valAquisicao) * eval(tx_sg))/1000;
	}	 
}else{
	if (p_seg=='0'){
		//calculo :seguro 1 vida
		tx_sg = getSeguroVida1(age1);
		cal = (eval(valFinanciamento) * eval(tx_sg))/1000;
	}else if(p_seg=='1'){
		//calculo :seguro 2 vidas  
		tx_sg = getSeguroVida2(age1,age2);
		cal = (eval(valFinanciamento) * eval(tx_sg))/1000;
	} 
}  

if (mensal_anual =='m'){
	cal = eval(cal) / 12; 
	//se o seguro mensal for inferior a 35 Euros acresec-se 2 Euros na mensalidade
	if (eval(cal) < 35){
		cal = eval(cal) + 2;
	}    
}
strReturn = cal;   
return strReturn;
}

/*PROTECCAO AO CREDITO*/
function getCalSeguroPXXXXX(mensal_anual){
  /*FORMULA SEGURO DE PROTECCAO AO CREDITO ANUAL/MENSAL*/
  //
  var strReturn,cal;
  cal = "0";   
  if (mensal_anual =='m'){
  	cal = eval(cal) / 12;     
  }
  strReturn = cal;   
  return strReturn;
}


/*PROTECCAO AO CREDITO*/
function getCalSeguroP(prestacao){
  /*FORMULA SEGURO DE PROTECCAO AO CREDITO ANUAL/MENSAL*/
  //1,4% sobre a prestação =Prestacao*(1,4/100)
  var strReturn,cal,perSegPCred;
  perSegPCred = getPercSegPCred();
  cal = (parseFloat(prestacao) * (eval(perSegPCred)/100));  
  strReturn = cal;   
  return strReturn;
}

/*PROTECCAO AO CREDITO*/
function getCalValSeguroP(ValFinanciamento){
  /*FORMULA SEGURO DE PROTECCAO AO CREDITO Global*/
  //1,6% o valor global do emprestimo =Valor de Financiamento*(1,6/100)
  var strReturn,cal,perSegPCred;
  perSegPCred = getPercSegPCred();
  //alert(perSegPCred);
  cal = (eval(ValFinanciamento) * ((eval(perSegPCred)/100)/100));
  //strReturn = getCalMeses(cal);   
  strReturn = cal;
  return strReturn;
}


//------------------------------------------------------------------------
//	Gerais,etc
//------------------------------------------------------------------------
function getCalMeses(prazo_anual){
  /*FORMULA para tranformar os anos em meses*/
  //prazo_anos * 12 = meses 
  var strReturn,cal;
  cal = eval(prazo_anual)*12;   
  strReturn = cal;   
  return strReturn;
}
function getCalRestoMeses(prazo_anual,carencia){
  /*FORMULA para ir buscar o resto dos meses da carencia*/
  //meses - total carencia = resto de meses 
  var strReturn,cal,meses;
  meses = getCalMeses(prazo_anual);
  cal = eval(meses)- eval(carencia);   
  strReturn = cal;   
  return strReturn;
}
//------------------------------------------------------------------------
//	Comissoes,Custos,Impostos,registos,etc
//------------------------------------------------------------------------
function getCalComissaoProcesso(){
  /*FORMULA CALCULAR a Comissão de Processo */  
  //DOCUMENTO CELIA_: comissao processo + imposto selo (4%)
  var strReturn,cal,tx_desp,tx_s;
  tx_desp = getComissaoProcesso();
  tx_s = getImpSelo();
  cal = (eval(tx_desp)*(1+eval(tx_s)/100));  
  strReturn = cal;
  return strReturn;
}
function getCalImpSeloMutuo(valfinanciado){
  /*FORMULA CALCULAR Imposto de Selo sobre o Mútuo*/  
  //Imposto de Selo sobre o Mútuo = 0.6% sobre o campo de input "Valor de Financiamento (EUR):"
  var strReturn,cal,tx_s_m;
  tx_s_m = getImpSeloEscM();
  cal = (eval(valfinanciado)*parseFloat(tx_s_m))/100;
  strReturn = cal;
  return strReturn;
}
function getCalImpSeloAberturaCredito(prazo_meses,valfinanciado){
  /*FORMULA CALCULAR Imposto de Selo sobre abertura de credito*/  
  //Imposto de Selo sobre a abertura de crédito = imposto * valor financiado do sinal
  var strReturn,cal,tx_imp;
  tx_imp = getRegImpostoSeloAbertCredito(prazo_meses,valfinanciado);
  cal = (eval(valfinanciado)*eval(tx_imp))/100;
  strReturn = cal;
  return strReturn;
}
function getCalImpSeloAquisicao(p_fin,ValAquisicao,prazo_meses){
  /*FORMULA CALCULAR Imposto de Selo sobre a Aquisição*/  
  //Imposto de Selo sobre a Aquisição = 0.8% sobre o campo de input "Valor de Aquisição (EUR):"
  var strReturn,cal,tx_s_aq;
  	if(p_fin =='3'){	
		tx_s_aq = getImpSeloA(p_fin,prazo_meses);
		cal = (eval(ValAquisicao)*eval(tx_s_aq))/100;
	}else if(p_fin =='0'){
		tx_s_aq = getImpSeloA(p_fin,0);
		cal = (eval(ValAquisicao)*eval(tx_s_aq))/100;
	}else{
		cal = 'Não Aplicável';
	}
  strReturn = cal;
  return strReturn;
}
function getCalConversaoRegistos(){
  /*FORMULA CALCULAR a Conversão de Registos */  
  //DOCUMENTO CELIA_: comissao processo + imposto selo (4%)
  var strReturn,cal,tx_desp,tx_s;
  tx_desp = getComissaoConversaoRegistos();
  tx_s = getImpSelo();
  cal = (eval(tx_desp)*(1+eval(tx_s)/100));  
  strReturn = cal;
  return strReturn;
}
function getCalDespesasAvaliacao(){
  /*FORMULA CALCULAR a Despesas de Avaliacao */  
  //DOCUMENTO CELIA_: Despesas de Avaliacao + IVA 
  var strReturn,cal,tx_desp,tx_iva;
  tx_desp = getAvaliacao();
  tx_iva = getIVA();
  cal = (eval(tx_desp)*(1+eval(tx_iva)/100));
  strReturn = cal;
  return strReturn;
}

function getCalDespesasVistorias(p_fin){
  /*FORMULA CALCULAR a Despesas de Vistorias */  
  //DOCUMENTO CELIA_: Despesas de Vistorias + IVA 
  var strReturn,cal,tx_desp,tx_iva;
  tx_desp = getRegComVistorias(p_fin);
  tx_iva = getIVA();
  cal = (eval(tx_desp)*(1+eval(tx_iva)/100));
  strReturn = cal;
  return strReturn;
}

function getCalSoma_1(avaliacao,comconvregistos,comvistorias,comprogresso,comiAnasInfComerciais){
  var strReturn,cal;
  //Despesas de Avaliaco
  //comissao de conversao de registos
  //Despesas de vistorias
  //Comissao de Processo
  Somar = new Array(4);	  
	campo=parseFloat(avaliacao);
	if(isNaN(campo)){
		Somar[0] = '0';
	}else{
		Somar[0] = campo;
	}	
	campo=parseFloat(comconvregistos);
	if(isNaN(campo)){
		Somar[1] = '0';
	}else{
		Somar[1] = campo;
	}		
	campo=parseFloat(comvistorias);
	if(isNaN(campo)){
		Somar[2] = '0';
	}else{
		Somar[2] = campo;
	}		
	campo=parseFloat(comprogresso);
	if(isNaN(campo)){
		Somar[3] = '0';
	}else{
		Somar[3] = campo;
	}				
	campo=parseFloat(comiAnasInfComerciais);
	if(isNaN(campo)){
		Somar[4] = '0';
	}else{
		Somar[4] = campo;
	}	
  cal = parseFloat(Somar[0]) + parseFloat(Somar[1]) + parseFloat(Somar[2]) + parseFloat(Somar[3]) + parseFloat(Somar[4]);  
  strReturn = cal;
  return strReturn;
}

function getCalSoma_2(regprovaquisicao,reghipoteca,regesccvimoveis,impseloaquisicao,escrhipoteca,impselomutuo,impseloabcred,imt){
  var strReturn,cal;
  //imt
  //registo provisorio de Aquisicao
  //registo provisorio de Hipoteca
  //escritura de conpra e venda de imoveis
  //imposto de selo sobre aquisicao
  //escritura de hipoteca
  //imposto de selo sobre mutuo
  //imposto de selo de abertura ao credito 
  Somar = new Array(8);	  
	campo=parseFloat(regprovaquisicao);
	if(isNaN(campo)){
		Somar[0] = '0';
	}else{
		Somar[0] = campo;
	}	
	campo=parseFloat(reghipoteca);
	if(isNaN(campo)){
		Somar[1] = '0';
	}else{
		Somar[1] = campo;
	}		
	campo=parseFloat(regesccvimoveis);
	if(isNaN(campo)){
		Somar[2] = '0';
	}else{
		Somar[2] = campo;
	}		
	campo=parseFloat(impseloaquisicao);
	if(isNaN(campo)){
		Somar[3] = '0';
	}else{
		Somar[3] = campo;
	}				
	campo=parseFloat(escrhipoteca);
	if(isNaN(campo)){
		Somar[4] = '0';
	}else{
		Somar[4] = campo;
	}		
	campo=parseFloat(impselomutuo);
	if(isNaN(campo)){
		Somar[5] = '0';
	}else{
		Somar[5] = campo;
	}			
	campo=parseFloat(impseloabcred);
	if(isNaN(campo)){
		Somar[6] = '0';
	}else{
		Somar[6] = campo;
	}		
	campo=parseFloat(imt);
	if(isNaN(campo)){
		Somar[7] = '0';
	}else{
		Somar[7] = campo;
	}			
  cal = parseFloat(Somar[0]) + parseFloat(Somar[1]) + parseFloat(Somar[2]) + parseFloat(Somar[3]) + parseFloat(Somar[4]) + parseFloat(Somar[5]) + parseFloat(Somar[6]) + parseFloat(Somar[7]);  
  strReturn = cal;
  return strReturn;
}

function getCalSoma_3(segvida,segmult,segprot){
  var strReturn,cal;
  //Seguro vida
  //Seguro multiriscos
  Somar = new Array(3);	  
	campo=parseFloat(segvida);
	if(isNaN(campo)){
		Somar[0] = '0';
	}else{
		Somar[0] = campo;
	}	
	campo=parseFloat(segmult);
	if(isNaN(campo)){
		Somar[1] = '0';
	}else{
		Somar[1] = campo;
	}		
	campo=parseFloat(segprot);
	if(isNaN(campo)){
		Somar[2] = '0';
	}else{
		Somar[2] = campo;
	}		
  cal = parseFloat(Somar[0]) + parseFloat(Somar[1]) + parseFloat(Somar[2]);  
  strReturn = cal;
  return strReturn;
}

//------------------------------------------------------------------------
//	Taxas e etc
//------------------------------------------------------------------------
function getCalTaxaNominal(spread){
  /*FORMULA para calcular a taxa Nominal*/
  // Spread + Euribor = Taxa Nominal ->SEMPRE A 3 meses
  var strReturn,ValEuribor;
  // 3 meses
  euribor = eval(getEuriborValue('0'));
  strReturn = eval(spread) + eval(euribor);
  return strReturn;
}

function getCalBonificacoesSpread(cal,r_spread1,r_spread2,r_spread3,r_spread4){
  var strReturn,MinSpread;
  MinSpread = parseFloat(getMinSpread());
  //Retorna spread menos as Bonificações
  //alert(cal);  
  if(r_spread1=='0'){
  	cal = parseFloat(cal) - 0.1;//25.000
  }
  if(r_spread1=='1'){
  	cal = parseFloat(cal) - 0.2;//50.000
  }
  if(r_spread1=='2'){
  	cal = parseFloat(cal) - 0.3;//100.000
  }
  if(r_spread1=='3'){
  	cal = parseFloat(cal) - 0.0;//Não
  }

  if(r_spread2=='0'){ //SIM
  	cal = parseFloat(cal) - 0.15;
  }  
  if(r_spread2=='1'){ //NAO
  	cal = parseFloat(cal) - 0.00;
  }  	  			 
    
  if(r_spread2=='0' && r_spread3=='0'){ //SIM	 
    //r_spread2 SIM, o spread 3 não  bloqueado e faz as contas
  	cal = parseFloat(cal) - 0.0;
  }		
     
  if(r_spread2=='1' && (r_spread3=='0' || r_spread3=='1')){ //NAO	 
    //r_spread2 não, o spread 3 é bloqueado e faz as contas	a 0
  	cal = parseFloat(cal) - 0.0;
  }

  if(r_spread4=='0'){//SIM
  	cal = parseFloat(cal) - 0.15;
  }
  if(r_spread4=='1'){//Não
  	cal = parseFloat(cal) - 0.00;
  }
  
  
  //Clientes faz a validação do spread minimo mas não mostra a mensagem ao cliente	
  if(parseFloat(cal)<parseFloat(MinSpread)){
  	//alert('O Spread mínimo permitido é de: '+MinSpread);
	strReturn = dec2(MinSpread);
  }else{
  	strReturn = dec2(cal);
  }
  
  //alert(cal);
  //alert(strReturn);  
  return strReturn;
}


function getCalLTV(ValFinanciamento,ValImovel){
  /*FORMULA CALCULAR O LTV DO CLIENTE*/
  //Valor Financiado / Valor Imovel = LTV (Celia Lopes disse)
  var strReturn,cal;
  cal = eval(ValFinanciamento) / eval(ValImovel);
//  alert(cal);
  cal = eval(cal)*100;
  cal = Math.round(cal);
//  alert(cal);  
  strReturn = cal;
  return strReturn;
}
/* Apanha a IMT */
function getIMT(p_fin,ValAquisicao,t_habitacao){
  var strReturn = "";
	// O campo IMT SÓ APARECE COM VALORES CASO O CLIENTE NAO TENHA SELECCIONADO A AQUISIÇÃO
	if(eval(p_fin)!=0){	
		strReturn = 'Não Aplicável';
	}else{
		strReturn = getCalIMT(ValAquisicao,t_habitacao);
	}
  return strReturn;
} 
function getCalIMT(valAquisicao,t_habitacao){
  /*FORMULA IMT*/
  //valor da transação x percentagem - a parcela a abater = IMT
  var strReturn,cal,perc,p_abt,imt;
		if(t_habitacao =='0'){
			imt = getValIMT_T1(valAquisicao);
		}else if(t_habitacao =='1'){
			imt = getValIMT_T2(valAquisicao);	
		}else if(t_habitacao =='2'){
			imt = getValIMT_T2(valAquisicao);	
		}	  
  perc = imt[0];
  p_abt = imt[1];
  cal = ((parseInt(valAquisicao)*(parseInt(perc)/100))- parseInt(p_abt));   
  strReturn = cal;
  return strReturn;
}

//------------------------------------------------------------------------
//	TAE - Taxa anual efectiva. & TAER - Taxa anual efectiva Revista
//------------------------------------------------------------------------
function getCalTAE(tipo_tae,p_fin,carencia_residual,ValFinanciado,tx_nominal,prazo_meses,valCarencia,valResidual,seguro_vida,seguro_multiriscos,juros_impselo,tx_sgVida,titulares,idade1,idade2,r_spread3,r_spread4){
  //FORMULA TAE E TAER:
  /*Descrição da Formula:
  Total de Empréstimo: 	Valor Total de Financiamento - Total Despesas Iniciais
  Total de Datas:		Desde 1-1-2006 até ao final dos anos pretendidos
  Prestação Total:		Prestação Mensal(pag.mensal) + Seguro de Vida(pag.mensal) + S. Multiriscos(pag.anual) + Despesas de Manutenção(pag.mensal)
  */
  var strReturn,cal,capital,n_prest,comissoes;
  var tot_comissoes,com_processo,com_avaliacao,segProteccaoCredito;
  var tot_seguros,desp_manutencao,tot_custos,valanual;
  /*DESPESAS INICIAIS & UNICAS*/
  //Total de Comissoes pagas pelo cliente (comissao processo e avaliaçao) --Conta para todas as finalidades
  com_processo = getCalComissaoProcesso();//com imposto de selo
  com_avaliacao = getCalDespesasAvaliacao();//com taxa IVA
  comissoes = 0;
  comissoes = eval(com_processo)+eval(com_avaliacao);
  capital = eval(ValFinanciado);
//  alert('Tot Comissoes = '+comissoes);
  //DESPESAS MENSAIS------------------------------------------------------------------------------
  desp_manutencao = getDespesasManutencaoDB();
  tx_sgVida = parseFloat(tx_sgVida);//Seguro de vida calculado na formula, só é enviada a taxa aplicada. (e um seguro obrigatorio)
  //Seguro de Protecao ao credito
  segProteccaoCredito = 0;  
  if(r_spread4==0){	segProteccaoCredito = dec2(getCalValSeguroP(ValFinanciado));
  }else{segProteccaoCredito = 0;}
  tot_seguros=0;
  if(tipo_tae=='n'){
  	tot_seguros=0.0;
  }else if(tipo_tae=='r'){
  	tot_seguros = dec2(eval(segProteccaoCredito));
  }
  tot_custos = dec2(eval(tot_seguros)) + dec2(eval(desp_manutencao)) + dec2(eval(juros_impselo));
  //alert('Tot seguros mensais = '+tot_custos);
  //DESPESAS ANUAIS------------------------------------------------------------------------------
  if(p_fin=='3'){seguro_multiriscos = 0;}//No Sinal não existe este seguro, no resto das finalidades é um seguro obrigatorio
  valanual = parseFloat(seguro_multiriscos);
  //alert('Tot valor anual = '+valanual);
  //-----------------------------------------------------------------------------------------------
  //Informação a enviar para a rotina de calculo da TAE
  cal = getCalTAE_RES(carencia_residual,ValFinanciado,tx_nominal,prazo_meses,valCarencia,valResidual,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,tipo_tae,r_spread3,r_spread4);
  strReturn = cal;
  return strReturn;
}


/*	Rotina que vai buscar o valor da tae, ligação rotina Luis*/
function getCalTAE_RES(tipo_cr,ValFinanciado,tx_nominal,prazo_meses,valCarencia,valResidual,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4){
  var strReturn = "";
	//alert(tipo_cr+', '+ValFinanciado+', '+tx_nominal+', '+prazo_meses+', '+tot_custos+', '+comissoes+', '+valanual);
	if(tipo_cr == 'n'){
		//Normal
		strReturn = pmtae(ValFinanciado,tx_nominal,prazo_meses,0,0,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4);
	}else if(tipo_cr == 'c'){
		//carencia
		strReturn = pmtae(ValFinanciado,tx_nominal,prazo_meses,valCarencia,0,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4);
	}else if(tipo_cr == 'r'){
		//Valor residual
        strReturn = pmtae(ValFinanciado,tx_nominal,prazo_meses,0,valResidual,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4);
	}else{
		//Normal SinaL
		strReturn = pmtae(ValFinanciado,tx_nominal,prazo_meses,0,100,tot_custos,comissoes,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4);
	}	
  strReturn = round_decimals(strReturn, 3);
  return strReturn;		
}

function pmtae(C,tn,np,npc,pctres,segs,gi,valanual,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4) {
   		tx_sgVida = tx_sgVida;
        pres = segs+pmt(C,tn,np,npc,pctres);
        valres = C*pctres/100.0;
        cpres = segs+C*tn/1200.0;
        r1 = 0.05;
        flg = 1;
        delta = r1/2.0;
        cn = C-gi;
        Lpi = 0;
		//alert(segs+', '+pres+', '+cpres+', '+tn+', '+cn+', '+np+', '+npc+', '+valres);
		while (true) {
                res = sumrii(cn,r1,np,npc,valres,pres,cpres,valanual,tn,gi,segs,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4);
                if (Math.abs(res) <= 0.001) break;
                Lpi++;
                if (Lpi >= 200) {
                        //alert(100);
						break;
                }
                if (res > 0)
                {        if (flg != 1) {
                                flg = 1; delta = delta / 2.0; 
                        }
                        r1 = r1 + delta;
                }
                else
                {        if (flg == 1) {
                                flg = -1; delta = delta / 2.0; 
                        }
                        r1 = r1 - delta;
                }
        }
		//alert(Lpi);
        return r1*100.0;
}


function datediff(date1,date0) {
        //var x = Math.ceil(date1.getTime()/86400000);
        //var y = Math.ceil(date0.getTime()/86400000);
        return Math.ceil((date1.getTime()-date0.getTime())/86400000);
}

function sumrii(cn,r1,np,npc,valres,pres,cpres,valanual,tn,gi,segs,tx_sgVida,titulares,idade1,idade2,ttae,r_spread3,r_spread4) {
        ano = 2009;
        mes = 0;
        suma = -cn;
        pnet = 0;
		dias0 = 0;
		dias = 0;
		C = cn;
        for (i=1; i<=np;i++) {
                if (mes == 12) {
                        mes = 1; ano++;
                }
                else
                        mes++;
                date1 = new Date(ano,mes,1);
				if (i > 1) dias += 30.0;
				dias0 = dias;	
				if (i<=npc) pnet = cpres;
                else if (i==np) pnet = pres+valres;
                else pnet = pres;
				
				//alert(' Nprest- ( '+i+' ) Mes- ( '+mes+' ) Ano - ( '+ano+' )'+' CD - ( '+C+' )'+'  PREST-  ( '+dec2(pnet-3.12)+' )');				
				//Calcula Seguro de vida mensal  		
				r = tn/1200;
				am = 0; 
				sv = 0;
				e = 0;
				jr = 0;
				if(i!=1){
					jr = r * C;
					am = pnet - segs - jr;
					C = C - am;
				}
				//Taxa de Seguro de Vida
				if(titulares=='0'){
				    //taxa :seguro 1 vida
					tx_sgVida = getSeguroVida1(idade1);
				}else if(titulares=='1'){
				    //taxa :seguro 2 vidas  
					tx_sgVida = getSeguroVida2(idade1,idade2);
				} 
				
				//No seguro de vida o Capital é o Original, sem a redução das comissões
				if(r_spread3==0) {
					Cv = C + gi;
				}else if(r_spread3==1) {
			    	Cv = cn + gi;
				}
				sv = dec2(eval(((eval(Cv)*eval(tx_sgVida))/1000)));
				sv = dec2(eval((eval(sv)/12))); 
				if (eval(sv) < 35){
					sv = eval(sv) + 2;
				}
				if (eval(sv) < 1){
					sv = eval(0.0);
				}
				pnet = pnet + sv;	
				//alert(' CDapos- ( '+dec2(C)+' CA- ( '+dec2(am)+' ) Ju- ( '+dec2(jr)+' ) SV- ( '+dec2(sv)+' ) PRESTsv- ( '+dec2(pnet)+') Mes('+mes+')');	
				if (mes == 1) pnet = pnet + valanual;
                suma = suma + (pnet/Math.pow((1.0 +r1*1.0),i*1.0/(12.0)));

        }
        return suma;
}

function sumrii_360(cn,r1,np,npc,valres,pres,cpres,valanual,tn,gi,segs,tx_sgVida,titulares,idade1,idade2,ttae,spread4) {
        ano = 2009;
        mes = 0;
        suma = -cn;
        pnet = 0;
		dias0 = 0;
        date0 = new Date(ano,mes,1);
		date2 = date0;
		C = cn;
        for (i=1; i<=np;i++) {
                if (mes == 12) {
                        mes = 1; ano++;
                }
                else
                        mes++;
                date1 = new Date(ano,mes,1);
                dias = datediff(date1,date0);
				dias0 = dias;
				if (i<=npc) pnet = cpres;
                else if (i==np) pnet = pres+valres;
                else pnet = pres;
				//Calcula Seguro de vida mensal  		
				r = tn/1200;
				am = 0; 
				sv = 0;
				jr = 0;
				if(i!=1){
					jr = r * C;
					am = pnet - segs - jr;
					C = C - am;
				}
				//Taxa de Seguro de Vida
				if(titulares=='0'){
				    //taxa :seguro 1 vida
					tx_sgVida = getSeguroVida1(idade1);
				}else if(titulares=='1'){
				    //taxa :seguro 2 vidas  
					tx_sgVida = getSeguroVida2(idade1,idade2);
				} 
				//No seguro de vida o Capital é o Original, sem a redução das comissões
			    Cv = C + gi;
				sv = dec2(eval(((eval(Cv)*eval(tx_sgVida))/1000)));
				sv = dec2(eval((eval(sv)/12))); 
				if (eval(sv) < 35){
					sv = eval(sv) + 2;
				}
				if (eval(sv) < 1){
					sv = eval(0.0);
				}
				pnet = pnet + sv;	
				if (mes == 1) pnet = pnet + valanual;
                suma = suma +(pnet/Math.pow(1.0+r1,dias/360.00));
                //suma = suma +(pnet/Math.pow(1.0+r1,dias/365.00));
		
        }
        return suma;
}


/*********************************************************************************************/
//------------------------------------------------------------------------
//	Juros e prestações.
//------------------------------------------------------------------------
/*	Rotina que vai buscar o detalhe das varias prestações durante os anos de prazo, ligação rotina Luis*/
//function Carrega_Prestacoes_resultado(tipo_prestacao,anosdet,capital,taxa,anos,mcar,pctres,seguros){
function Carrega_Prestacoes_resultado(finalidade,tipo_prestacao,mesesdet,capital,taxa,prazo_meses,mcar,pctres,seguros,t_TaxaPlano,tx_sgVida,r_spread3,titulares,idade1,idade2){
		

    //Tratamento das taxas nominais a enviar para as subidas de prestação
	if (t_TaxaPlano=='n')  {
		taxa = parseFloat(taxa);
	}else if(t_TaxaPlano=='s1'){
		taxa = eval(taxa)+parseFloat('1');
	}else if(t_TaxaPlano=='s2'){	
		taxa = parseFloat(taxa)+parseFloat('2');
	}	

	if(finalidade=='3'){
		fillprestm(window,mesesdet,capital,taxa,prazo_meses,0,100,seguros,tx_sgVida,r_spread3,titulares,idade1,idade2)
	}else{
		if(tipo_prestacao == 'n'){
			//fillprest(window,anosdet,capital,taxa,anos,0,0,seguros);	//Normal
			fillprestm(window,mesesdet,capital,taxa,prazo_meses,0,0,0,tx_sgVida,r_spread3,titulares,idade1,idade2)	
		}else if(tipo_prestacao == 'c'){
	    	//fillprest(window,anosdet,capital,taxa,anos,mcar,0,seguros);   //carencia 36 meses
			fillprestm(window,mcar,capital,taxa,prazo_meses,mcar,0,seguros,tx_sgVida,r_spread3,titulares,idade1,idade2)
		}else if(tipo_prestacao == 'r'){
       	//fillprest(window,anosdet,capital,taxa,anos,0,pctres,seguros);   //Valor residual 30%	
			fillprestm(window,mesesdet,capital,taxa,prazo_meses,0,pctres,seguros,tx_sgVida,r_spread3,titulares,idade1,idade2)
		}else{
			//fillprest(window,anosdet,capital,taxa,anos,0,0,seguros);	//Normal
			fillprestm(window,mesesdet,capital,taxa,prazo_meses,0,0,seguros,tx_sgVida,r_spread3,titulares,idade1,idade2)
		}					
	}
}
/*	Rotina que vai buscar o valor da prestaçãos, ligação rotina Luis*/
function getCalPrestacao(tipo_prestacao,ValFinanciado,TxNominal,Meses,valCarencia,valResidual){
  var strReturn = "";
	if(tipo_prestacao == 'n'){
		//Normal
		strReturn = pmt(ValFinanciado,TxNominal,Meses,0,0);
	}else if(tipo_prestacao == 'c'){
	    //carencia
		strReturn = pmt(ValFinanciado,TxNominal,Meses,valCarencia,0);
	}else if(tipo_prestacao == 'r'){
		//Valor residual
        strReturn = pmt(ValFinanciado,TxNominal,Meses,0,valResidual);  
	}else{
		//Normal
		strReturn = pmt(ValFinanciado,TxNominal,Meses,0,0);	
	}	
  strReturn = dec2(strReturn);
  return strReturn;		
}
//	juros(valor,tn) devolve os juros mensais do capital [valor] com uma 
//  taxa de juro anual de [tn] em percentagem.
//	Ex. juros(100000.0,2.9) devolve os juros mensais sobre 100.000,00 euros
//  a taxa anual do 2,90% 
function juros(valor,tn) {
    r = tn/1200;
    p = r*valor;
    return p;
}
//------------------------------------------------------------------------
//	pmt(C,tn,np,npc,pctes) devolve a prestação mensail do capital [C] com uma 
//  taxa de juro anual de [tn] em percentagem, para um número de presatações
//  total igual a [np] e número de presatações de carência = [npc], e com um
//  valor residual em perdentagem do [pctres]%
//	Ex. Prestações sobre 120000 euros à taxa de 2,75% em 30 anos.
//		Normal:							pr = pmt(120000,2.75,360,0,0);
//		Valor residual 20%:				pr = pmt(120000,2.75,360,0,20);
//		Período de carência 18 meses:	pr = pmt(120000,2.75,360,18,0);
//			Se queremos saber a importância para os primeiros 18 meses
//			e calcular apenas os juros: jcar = juros(120000,2.75);
//
function pmt(C,tn,np,npc,pctres) {
	pctres /= 100.0;
    r = tn/1200;
	p = C*(r*pctres + (((1 - pctres) * r) / (1.0 - Math.pow(1.0 + r, -(np-npc)))));
	return p;
}
/*Ao transferir o seu Crédito Habitação para o Deutsche Bank, 
beneficia do reembolso de despesas até 3% do capital em dívida na Outra Instituição de Crédito*/
function getCalReembolsoDespesas(MontCapitalDivida){
  /*FORMULA CALCULAR REEMBOLSO DAS DESPENSAS*/
  //(MONTANTE DO CAPITAL EM DÍVIDA) X (PERCENTAGEM PRETENDIDA) / (PELO TOTAL DE PERCENTAGEM(100%)) = VALOR DO REEMBOLSO DESPESAS DE ACORDO COM A PERCENTAGEM PRETENDIDA
  var strReturn,cal,perc;
  perc = getPercCapitalDivida();
  cal = (eval(MontCapitalDivida)*eval(perc))/100;   
  var campo=parseFloat(cal);
  if(isNaN(campo)){
  	cal= '0.00';
  }else{cal= fmt2(dec2(cal));}
  strReturn = 'Se transferir o seu Crédito Habitação para o Deutsche Bank, beneficia, dentro do período de campanha, do reembolso de despesas até '+eval(perc)+'% do capital em dívida na Outra Instituição de Crédito, o que no seu caso representa ' + cal + ' EUR.';
  return strReturn;
}
/*subida da taxa de 1% e 2% - a prestação passará a ser de EUR (efectuar cálculo)*/
function getCalSubidaPrestacao(ValorSubidaPercento,finalidade,tipo_prestacao,valFinanciamento,valAquisicao,valImovel,prazo_meses,valCarencia,valResidual,spread,ltv,juros_impselo){
  /*FORMULA CALCULAR SUBIDA DA PRESTAÇÃO*/
  //CALCULAR DE NOVO A PRESTAÇÃO MAS COM A SUBIDA DO Euribor DE ACORDO COM A NOVA PERCENTAGEM
  var strReturn,cal,sub_euribor,euribor,ltv,tx_nominal,ValEuribor;
  ValEuribor = '0';  //3 meses
  euribor = eval(getEuriborValue(ValEuribor));
  sub_euribor = eval(euribor)+eval(ValorSubidaPercento); //somo a percentagem na taxa de euribor
  tx_nominal =  parseFloat(spread)+parseFloat(sub_euribor); 
  if(finalidade=='3'){
		cal = juros(valFinanciamento,tx_nominal)+juros_impselo;
	}else{
  		if (carencia_residual=='c'){
			cal = juros(valFinanciamento,tx_nominal);
  		}else if (carencia_residual=='r'){
    		cal = getCalPrestacao(tipo_prestacao,valFinanciamento,tx_nominal,prazo_meses,valCarencia,valResidual)	
  		}else{
    		// getCalPrestacao(tipo_prestacao,ValFinanciado,TxNominal,Meses,valCarencia,valResidual)
    		cal = getCalPrestacao(tipo_prestacao,valFinanciamento,tx_nominal,prazo_meses,valCarencia,valResidual)	
  		} 
  }
  strReturn = dec2(cal);
  return strReturn;
}
/*********************************************************************************************/
