// JavaScript Document
var v_monto, v_tasa, v_plazo, v_formcar;

function f_tasa(p_monto,p_plazo)
{
   var param = new Array
                   (
		[200000,1499999.5,1,6,63.158,0],       [200000,1499999.5,7,14,51.835,50000], [200000,1499999.5,15,17,50,50000], [200000,1499999.5,18,23,49,50000], [200000,1499999.5,24,99,46.001,50000],
		[1500000,1999999.5,1,6,59.418,0],      [1500000,1999999.5,7,14,51.835,50000], [1500000,1999999.5,15,17,50,50000], [1500000,1999999.5,18,23,49,50000], [1500000,1999999.5,24,99,46,50000],
		[2000000,2499999.5,1,6,62.973,0],      [2000000,2499999.5,7,14,57.200,50000], [2000000,2499999.5,15,17,51.835,50000], [2000000,2499999.5,18,23,51,50000], [2000000,2499999.5,24,99,48,50000],
		[2500000,2999999.5,1,6,58.185,0],      [2500000,2999999.5,7,14,53.600,50000], [2500000,2999999.5,15,17,50,50000], [2500000,2999999.5,18,23,48,50000], [2500000,2999999.5,24,99,45.5,50000],
		[3000000,3499999.5,1,6,54.902,0],      [3000000,3499999.5,7,14,51.100,50000], [3000000,3499999.5,15,17,48,50000], [3000000,3499999.5,18,23,45.995,50000], [3000000,3499999.5,24,99,44,50000],
		[3500000,3999999.5,1,6,52.245,0],      [3500000,3999999.5,7,14,49,50000], [3500000,3999999.5,15,17,46,50000], [3500000,3999999.5,18,23,45,50000], [3500000,3999999.5,24,99,43,50000],
		[4000000,4499999.5,1,6,51.951,0],      [4000000,4499999.5,7,14,49.157,50000], [4000000,4499999.5,15,17,45,50000], [4000000,4499999.5,18,23,44,50000], [4000000,4499999.5,24,99,42.135,50000],
		[4500000,4999999.5,1,6,50.52,0],       [4500000,4999999.5,7,14,48,50000], [4500000,4999999.5,15,17,44,50000], [4500000,4999999.5,18,23,43,50000], [4500000,4999999.5,24,99,41,50000],
                [5000000,5499999.5,1,6,49.264,0],      [5000000,5499999.5,7,14,47,50000], [5000000,5499999.5,15,17,43,50000], [5000000,5499999.5,18,23,42,50000], [5000000,5499999.5,24,99,41,50000],
                [5500000,5999999.5,1,6,48.053,0],      [5500000,5999999.5,7,14,46,50000], [5500000,5999999.5,15,17,42.5,50000], [5500000,5999999.5,18,23,41.5,50000], [5500000,5999999.5,24,99,40.5,50000],
		[6000000,6499999.5,1,6,47.380,0],      [6000000,6499999.5,7,14,45.5,50000], [6000000,6499999.5,15,17,42,50000], [6000000,6499999.5,18,23,41,50000], [6000000,6499999.5,24,99,40,50000],
		[6500000,6999999.5,1,6,46.734,0],      [6500000,6999999.5,7,14,45,50000], [6500000,6999999.5,15,17,41.5,50000], [6500000,6999999.5,18,23,40.9,50000], [6500000,6999999.5,24,99,40,50000],
		[7000000,7499999.5,1,6,46.109,0],      [7000000,7499999.5,7,14,44.5,50000], [7000000,7499999.5,15,17,41,50000], [7000000,7499999.5,18,23,40.5,50000], [7000000,7499999.5,24,99,39.5,50000],
		[7500000,7999999.5,1,6,38.956,0],      [7500000,7999999.5,7,14,37.480,50000], [7500000,7999999.5,15,17,35.5,50000], [7500000,7999999.5,18,23,35.5,50000], [7500000,7999999.5,24,99,35.5,50000],
		[8000000,8499999.5,1,6,38.865,0],      [8000000,8499999.5,7,14,37.480,50000], [8000000,8499999.5,15,17,35.5,50000], [8000000,8499999.5,18,23,35.5,50000], [8000000,8499999.5,24,99,35.5,50000],
		[8500000,8999999.5,1,6,38.783,0],      [8500000,8999999.5,7,14,37.480,50000], [8500000,8999999.5,15,17,35.5,50000], [8500000,8999999.5,18,23,35.5,50000], [8500000,8999999.5,24,99,35.5,50000],
		[9000000,9499999.5,1,6,38.711,0],      [9000000,9499999.5,7,14,37.480,50000], [9000000,9499999.5,15,17,35.449,50000], [9000000,9499999.5,18,23,35.5,50000], [9000000,9499999.5,24,99,35.5,50000],
                [9500000,9999999.5,1,6,38.646,0],      [9500000,9999999.5,7,14,37.480,50000], [9500000,9999999.5,15,17,35.5,50000], [9500000,9999999.5,18,23,35.5,50000], [9500000,9999999.5,24,99,35.5,50000],
                [10000000,50000001,1,6,38.588,0],      [10000000,50000001,7,14,37.480,50000], [10000000,50000001,15,17,35.5,50000], [10000000,50000001,18,23,35.5,50000], [10000000,50000001,24,99,35.5,50000]
                    );
   var fi,i, ii, p, c0,c1, c2, f, posc, tasa, su, ms, mi;
   //, v_tasa, v_formcar;
   var imi, ims, ipi, ips, iporc, iformcar;

   imi = 0;
   ims = 1;
   ipi = 2;
   ips = 3;
   iporc = 4   ; 
   iformcar = 5	

   for (i=0; i<param.length - 1; i++)
   {  
        // alert('antes '+param[i][0]+' Posicion '+i);
        // Verifica montos
        if (param[i][ims] > p_monto ) 
        {
          mi = param[i][imi];
          ms = param[i][ims];
          //alert('Rangos de la matriz mi/ms '+mi+' superior '+ms+ ' Posicion '+i + ' p_monto ' + p_monto );
          // Verifica plazo
          if (p_plazo <= param[i][ips])
           { 
             if (p_plazo >= param[i][ipi])
              {
                 v_tasa    = param[i][iporc];             
                 v_formcar = param[i][iformcar];
                
                 v_monto   = p_monto; 
                 v_plazo   = p_plazo;


                 //alert('Tasa '+v_tasa+' Formación de Carpeta '+v_formcar);
                 break; 
              }
           }
           
           while (!(p_plazo <= param[i][ips] && p_plazo >= param[i][ipi] ))
           {
             i++;
           }

           v_tasa    = param[i][iporc];             
           v_formcar = param[i][iformcar];
           v_plazo   = p_plazo;

           v_monto   = p_monto; 
          break;

        }
   }
   return(mi);
}

//Inicio del objeto oNumero: 
function oNumero(numero){ 
//Propiedades 
this.valor = numero || 0 
this.dec = -1; 
//Métodos 
this.formato = numFormat; 
this.ponValor = ponValor; 

//Definición de los métodos 
function ponValor(cad) 
{ 
if (cad =='-' || cad=='+') return 
if (cad.length ==0) return 
if (cad.indexOf('.') >=0) 
this.valor = parseFloat(cad); 
else 
this.valor = parseInt(cad); 
} 

function numFormat(dec, miles) 
{ 
var num = this.valor, signo=3, expr; 
var cad = ""+this.valor; 
var ceros = "", pos, pdec, i; 
for (i=0; i < dec; i++) 
ceros += '0'; 
pos = cad.indexOf('.') 
if (pos < 0) 
cad = cad+"."+ceros; 
else 
{ 
pdec = cad.length - pos -1; 
if (pdec <= dec) 
{ 
for (i=0; i< (dec-pdec); i++) 
cad += '0'; 
} 
else 
{ 
num = num*Math.pow(10, dec); 
num = Math.round(num); 
num = num/Math.pow(10, dec); 
cad = new String(num); 
} 
} 
pos = cad.indexOf('.') 
if (pos < 0) pos = cad.lentgh 
if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+') 
signo = 4; 
if (miles && pos > signo) 
do{ 
expr = /([+-]?\d)(\d{3}[\.\,]\d*)/ 
cad.match(expr) 
cad=cad.replace(expr, RegExp.$1+','+RegExp.$2) 
} 
while (cad.indexOf(',') > signo) 
if (dec<0) cad = cad.replace(/\./,'') 
return cad; 
} 
} 
//Fin del objeto oNumero: 

function checkNumber(input, min, max, msg)
{
    msg = msg + " tiene un valor no válido: " + input.value;

    var str = input.value;

    str = replaceAll(str,",","");

    for (var i = 0; i < str.length; i++) {
        var ch = str.substring(i, i + 1)
        if ((ch < "0" || "9" < ch) && ch != '.') {
            alert(msg);
            return false;
        }
    }

    var num = parseFloat(str)
    if (num < min || max < num) {
        alert(msg + " no está en el rango de [" + min + ".." + max + "]");
        return false;
    }
    input.value = str;
    return true;
}


function pv (p_capital,p_plazo,p_FormCarp)
{
 			  
    var v_segvida, v_iva_FormCarp, v_gastos, v_cap_men_gasto,
  	v_dif_neto_capital, v_capit_nuevo, v_interes_mensual, v_monto_solicitado;

    p_capital      = parseInt(p_capital);
    p_plazo        = parseInt(p_plazo);


    var tasa = f_segvida(p_plazo);

    v_segvida = (p_capital * tasa)/1000;

    v_iva_FormCarp = p_FormCarp * 10 / 100;
    v_gastos = v_segvida + p_FormCarp + v_iva_FormCarp;
    v_cap_men_gasto = p_capital - v_gastos;
    v_dif_neto_capital = Math.round(p_capital - v_cap_men_gasto);

    while (v_dif_neto_capital > 0)
	{
       v_capit_nuevo = p_capital + v_gastos;     //-- Incrementa el contador.
	   // Calcular Seguro de vida por el nuevo (capital + gastos)
       v_segvida = (v_capit_nuevo * tasa)/1000;
	   // Sumar los gastos
       v_gastos = v_segvida + p_FormCarp + v_iva_FormCarp;
	   // Capital nuevo menos gastos
       v_cap_men_gasto = v_capit_nuevo - v_gastos;
	   // Capital original menos capital neto
       v_dif_neto_capital = Math.round(p_capital - v_cap_men_gasto);
       // Carga el interes mensual
	   v_interes_mensual = pmt(p_plazo,v_capit_nuevo,v_tasa);
       v_interes_mensual = Math.abs(Math.round(v_interes_mensual));
    }
	return(v_interes_mensual);
}

function pmt (p_plazo,p_costo,p_tasa)
{			  
	var i = p_tasa; //pform.interest.value;
	if (i > 1.0) {
	    i = i / 100.0;
	    //pform.interest.value = i;
	}
	i /= 12;
	var pow = 1;
	var j, interes;
    for (j=0; j<p_plazo; j++)
	{
        pow = pow * (1 + i);
    }
    interes = Math.round((p_costo*pow*i)/(pow-1));
	return(interes);
}


function f_segvida(pcuota)
{
	var seguro = new Array(0.66, 0.99, 1.32, 1.65, 1.98, 2.31, 2.64, 2.97, 3.30, 3.63,
                           3.96, 4.29, 4.62, 4.95, 5.28, 5.61, 5.94, 6.27, 6.60, 6.93,
						   7.26, 7.59, 7.92, 8.25, 8.58, 8.91, 9.24, 9.57, 9.90,10.23,
						  10.89,11.22,11.55,11.88,12.21,12.54,12.87,13.20,13.53,13.86,
						  14.19,14.52,14.85,15.18,15.51,15.84,16.17,18.48,20.79);
	var i, pos, tasa;
	for (i=0; i<seguro.length; i++)
	{
		if (i == pcuota-1) {
			tasa = seguro[i];
			break;
		}
	}
	return(tasa);
}

function oNumero(numero)
{
//Propiedades 
this.valor = numero || 0
this.dec = -1;
//Métodos 
this.formato = numFormat;
this.ponValor = ponValor;
//Definición de los métodos 
function ponValor(cad)
{
if (cad =='-' || cad=='+') return
if (cad.length ==0) return
if (cad.indexOf('.') >=0)
    this.valor = parseFloat(cad);
else 
    this.valor = parseInt(cad);
} 
function numFormat(dec, miles)
{
var num = this.valor, signo=3, expr;
var cad = ""+this.valor;
var ceros = "", pos, pdec, i;
for (i=0; i < dec; i++)
ceros += '0';
pos = cad.indexOf('.')
if (pos < 0)
    cad = cad+"."+ceros;
else
    {
    pdec = cad.length - pos -1;
    if (pdec <= dec)
        {
        for (i=0; i< (dec-pdec); i++)
            cad += '0';
        }
    else
        {
        num = num*Math.pow(10, dec);
        num = Math.round(num);
        num = num/Math.pow(10, dec);
        cad = new String(num);
        }
    }
pos = cad.indexOf('.')
if (pos < 0) pos = cad.lentgh
if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+') 
       signo = 4;
if (miles && pos > signo)
    do{
        expr = /([+-]?\d)(\d{3}[\.\,]\d*)/
        cad.match(expr)
        cad=cad.replace(expr, RegExp.$1+','+RegExp.$2)
        }
while (cad.indexOf(',') > signo)
    if (dec<0) cad = cad.replace(/\./,'')
        return cad;
}
}//
function calcular_cuotas (costo)
{
//	var cuota, monto, monto_financiado, i;
	var cuota, costo, monto, monto_financiado, v_formcar;
	cuota = 12;
	v_formcar = 50000;
	if (costo >1000000) { cuota = 24; }
	f_tasa (costo,cuota);
	costo = v_monto;
	cuota = v_plazo;
	if (cuota<=6) { v_formcar = 0; } 	
	monto = pv (costo,cuota,v_formcar);
	monto_financiado = cuota*monto;
	cuota_mensual = monto;
	var numero = new oNumero(costo);
	costo = numero.formato(-1,true);
	var numero = new oNumero(cuota_mensual);
	cuota_mensual = numero.formato(-1,true);
	var numero = new oNumero(monto_financiado);
	monto_financiado = numero.formato(-1,true);
	var resultado = "<span class=tx_cuotas>" + cuota+" cuotas de </span><span class=tx_cuotasnum>Gs " + cuota_mensual+"</span>";
	document.write(resultado)
}
