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,25000001,1,6,38.588,0], [10000000,25000001,7,14,37.480,50000], [10000000,25000001,15,17,35.5,50000],   [10000000,25000001,18,23,35.5,50000],   [10000000,25000001,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; 

			//alert('Tasa!!2 '+v_tasa+' Formación de Carpeta '+v_formcar);



			// i--;
			// ii=i;


			break;

		}
		//alert('param[i][0]) '+param[i][0]);

	}
	return(mi);
}



//Inicio de replaceAll: 


function replaceAll(str, from, to){
	var idx = str.indexOf( from );
	while(idx > -1){
		str = str.replace( from, to );
		idx = str.indexOf( from );
	}
	return str;
}

//Fin de replaceAll: 


//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.length;
		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 computeField(input){
	if(input.value != null && input.value.length != 0)
		input.value = "" + eval(input.value);
	computeForm(input.form);
}

function computeForm(form){
	if(form.principal.value != null){
		var numero = new oNumero(form.principal.value);
		form.principal.value = numero.formato(-1,true);
	}

	if((form.payments.value == null || form.payments.value.length == 0) || (form.principal.value == null || form.principal.value.length == 0)){
		return;
	}

	if(!checkNumber(form.payments, 2, 24, "# de cuotas") || !checkNumber(form.principal, 200000, 25000000, "Principal")){
		form.payment.value = "No válido.";
		return;
	}

	var cuota, costo, monto, monto_financiado, v_formcar;
  
	v_formcar = 50000;

	costo = form.principal.value;
	costo = replaceAll(costo,",","");

	cuota = form.payments.value;
	costo = form.principal.value;

	//monto = pv (form);

	f_tasa(costo,cuota);

	//v_tasa, v_plazo, v_formcar
	//nuevo


	costo = v_monto;
	cuota = v_plazo;
         
	if(cuota <= 6){
		v_formcar = 0;        
	}        

	monto = pv(costo,cuota, v_formcar);

	monto_financiado = cuota * monto;
	form.payment.value = monto;

	var numero = new oNumero(costo); 
	// form.principal.value = numero.formato(-1,true);

	form.principal.value = numero.formato(-1, true);

	var numero = new oNumero(monto);
	form.payment.value = numero.formato(-1, true);
	form.payment.value = 'Gs. ' + form.payment.value.replace(/,/g, '.');



	form.financiado.value = monto_financiado;
	var numero = new oNumero(monto_financiado);
	form.financiado.value = numero.formato(-1, 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;
	//--DEFINIR MONTO DE FORMACION DE CARPETA


	//if(cuotas <=6){
	//	p_FormCarp = 0;
	//	}
	//else{
	//	p_FormCarp = 50000;
	//}

	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 clearForm(form){
	form.payments.value = "";
	form.interest.value = "";
	form.principal.value = "";
}


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;
	}
}

