// Cotizador ARRENDAMEX v1.1
// By: QDSoft
// (C) Copyright 2007 - Todos los derechos reservados
// Taza TIR a calcular
var tazaCalculo = .0290;

// No cambiar nada apartir de aqui.
//================================================================================
var mens12 = new Array(12);
var mens24 = new Array(24);
var mens36 = new Array(36);
//var mens39 = new Array(39);
var mens48 = new Array(48);

// Array of day names
var dayNames = new Array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado");

// Array of month Names
var monthNames = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");

function getDate() {
	var now = new Date();
	return dayNames[now.getDay()] + ", " + now.getDate() + " de " + monthNames[now.getMonth()] +  " del " + now.getFullYear();
	}
	
function verifyEmail(form) {
	if(checkEmail(document.forma.email.value)) { document.forma.submit(); }
	}

function checkEmail(str) {
	return true          
	}

function refill(form) {
	// Calcula los valores
	ump = form.ultMensSelect.options[form.ultMensSelect.selectedIndex].value;
	//ump = Number(form.ultMensSelect.value);
	if(ump == 0) { form.ultimaMensualidad.value = Math.floor(0); }
	
	if(form.tipov[0].checked) {
		form.valorComercial.value = Number(form.valorFactura.value / 1.16);
		if((form.pagoInicial.value * 1.16) < form.valorComercial.value * .20) {
			form.pagoInicial.value = (form.valorComercial.value * .20)*1.16;
			}
		}
	else {
		form.valorComercial.value = Number(form.valorFactura.value);
		if((form.pagoInicial.value * 1.16) < form.valorComercial.value * .25) {
			form.pagoInicial.value = (form.valorComercial.value * .25)*1.16;
			}
		}

	form.seguro.value = Math.floor(form.impseguro.value);
	if(form.tseguro[0].checked) {
		document.getElementById('condiciones').innerHTML = "M&aacute;s seguro, placas y tenencia.";
		}
	else if(form.tseguro[1].checked) {
		document.getElementById('condiciones').innerHTML = "M&aacute;s placas y tenencia. Seguro incluido por el primer aņo del financiamiento.";
		}
	else {
		document.getElementById('condiciones').innerHTML = "M&aacute;s placas y tenencia. Seguro incluido por todo el financiamiento.";
		}

	//form.pagoInicial.value = form.pagoInicial.value / 1.16;
	form.importeCredito.value = form.valorComercial.value  - (form.pagoInicial.value/1.16);

	if(ump > 0) {
		form.ultimaMensualidad.value = Math.floor(Number(Number(form.importeCredito.value) * ump)*1.16);
		}

	// redondea los valores
	form.valorFactura.value = Math.floor(form.valorFactura.value);
	form.valorComercial.value = Math.floor(form.valorComercial.value);
	form.importeCredito.value = Math.floor(form.importeCredito.value);
	form.pagoInicial.value = Math.floor(form.pagoInicial.value);

	document.getElementById('valcom').innerHTML = Math.floor(form.valorComercial.value);
	document.getElementById('impcred').innerHTML = Math.floor(form.importeCredito.value);
	if(form.valorComercial.value > 1000 && form.valorFactura.value > 1000) { form.botonCalcula.disabled = false; }
	}

function datosCotizacion() {
	form = document.forma;
	document.getElementById('cotFecha').innerHTML = getDate();
	document.getElementById('cotNombre').innerHTML = form.nombre.value;
	document.getElementById('cotEmail').innerHTML = form.email.value;
	document.getElementById('cotVehiculo').innerHTML = form.vehiculo.value;
	document.getElementById('cotModelo').innerHTML = form.modelo.value;
	document.getElementById('cotVendedor').innerHTML = form.vendedor.value;
	//document.getElementById('cotAgencia').innerHTML = form.agencia.value;

	document.getElementById('cotValFac').innerHTML = addCommas(form.valorFactura.value);
	document.getElementById('cotPagoIni').innerHTML = addCommas(form.pagoInicial.value);
	document.getElementById('cotPagoIni2').innerHTML = addCommas(form.pagoInicial.value);
	document.getElementById('cotImpCred').innerHTML = addCommas(form.importeCredito.value);
	document.getElementById('cotUltMens').innerHTML = addCommas(form.ultimaMensualidad.value);
	document.getElementById('valResidual').innerHTML = addCommas(Number(form.ultimaMensualidad.value)+Number(form.pagoInicial.value));
	document.getElementById('cotFin').innerHTML = Math.floor(Number(((form.valorComercial.value - (form.pagoInicial.value/1.16)) / form.valorComercial.value) * 100))+"%";
	}

function calcular(form) {	
	showMesage("Reiniciando Campos");
	refill(form);

	if(!form.p12.checked && !form.p24.checked && !form.p36.checked && !form.p48.checked) { alert("Capture al menos un plazo para calcular"); }
	else {
		clearFields(form,12); clearFields(form,24); clearFields(form,36); //clearFields(form,39);
		clearFields(form,48);

		if(form.p12.checked) { showMesage("Calculando 12 meses"); calcula(12,form); }
		if(form.p24.checked) { showMesage("Calculando 24 meses"); calcula(24,form); }
		if(form.p36.checked) { showMesage("Calculando 36 meses"); calcula(36,form); }
		//if(form.p39.checked) { showMesage("Calculando 39 meses"); calcula(39,form); }
		if(form.p48.checked) { showMesage("Calculando 48 meses"); calcula(48,form); }

		datosCotizacion();

		displayArea("cotizacion");
		}
	showMesage("");
	if(form.botonCalcula.disabled == true) { form.botonCalcula.disabled = false; }
	}

function showMesage(text) { window.status = text; }
	
// ---------------------------------------------------------------------
// Calcula la mensualidad a XX Meses
// ---------------------------------------------------------------------
function clearFields(form,totalMeses) {
	for(mes = 0; mes < totalMeses; mes++) {
		mname = "mens"+totalMeses+mes;
		document.getElementById(mname).innerHTML = "0.00";
		}
	document.getElementById('cotMensualidad'+totalMeses).innerHTML = "---";
	document.getElementById('cotIVA'+totalMeses).innerHTML = "---";
	document.getElementById('cotTotal'+totalMeses).innerHTML = "---";

	form.mens12.value = ""; form.total12.value = "";
	form.mens24.value = ""; form.total24.value = "";
	form.mens36.value = ""; form.total36.value = "";
	//form.mens39.value = ""; form.total39.value = "";
	form.mens48.value = ""; form.total48.value = "";
	}

function displayArea(area) {
	document.getElementById('getDatos').style.display = 'none';
	document.getElementById('comprobacion').style.display = 'none';
	document.getElementById('cotizacion').style.display = 'none';
	document.getElementById(area).style.display = 'block';
	if(area == "cotizacion") { datosCotizacion(); }
	document.getElementById('printTop').style.display = 'none';
	document.getElementById('topArea').style.display = 'block';
	document.getElementById('baseArea').style.display = 'block';
	}

function preprint(){
	//document.getElementById('printTop').style.display = 'block';
	//document.getElementById('topArea').style.display = 'none';
	//document.getElementById('baseArea').style.display = 'none';
	window.print();
	}

// ---------------------------------------------------------------------
// Calcula la mensualidad a XX Meses
// ---------------------------------------------------------------------
function calcula(totalMeses,form,mmin,mmax) {
	var mensArray = new Array(totalMeses);
	var tazaCalculoMax = tazaCalculo + .0001

	form.importeCredito.value = Number(form.importeCredito.value) + 3000;

	if(!mmin) { mmin = Number((form.importeCredito.value - form.ultimaMensualidad.value)/totalMeses).toFixed(0); }
	if(!mmax) { mmax = Number(form.valorComercial.value/totalMeses).toFixed(0); }

	//Calcula la mensualidad hasta que TIR sea igual a tazaCalculo
	salida = 0; incremento = 1000; lastm = 0; van = 0;
	mensualidad = Number(mmin);
	do {
		// Rellena el arreglo de variables
		mensualidad = Number(mensualidad) + Number(incremento);
		for(mes = 0; mes <= totalMeses; mes++) {
			mensArray[mes] = mensualidad;
			if(mes == 0) {
				if(form.tseguro[0].checked) { mensArray[mes] = Number(-1 * form.importeCredito.value).toFixed(0); }
				else { mensArray[mes] = Number(-1 * (Number(form.importeCredito.value) + Number(form.seguro.value))).toFixed(0); }
				}
			if(mes == totalMeses) { mensArray[mes] = Number(mensualidad + Number(form.ultimaMensualidad.value)).toFixed(0); }
			//else if(form.tseguro[2].checked && mes == 36 && totalMeses == 39) { mensArray[mes] = Number(Number(mensualidad) - (Number(form.seguro.value)/2)).toFixed(0); }
			else if(form.tseguro[2].checked && (mes == 12 || mes == 24 || mes == 36 || mes == 48)) { mensArray[mes] = Number(Number(mensualidad) - Number(form.seguro.value)).toFixed(0); }
			}

		//calcula el TIR
		TIRvalue = Number(TIR(mensArray),0.1);
		if(lastm != mensualidad) { lastm = mensualidad; }
		else { van++; if(van > 5) { salida = 1; } } // Se sale si se cicla el resultado

		// sepaso regresar al valor anterior y reduce el incremento
		if(Number(TIRvalue) >= tazaCalculoMax) {
			mensualidad = mensualidad - incremento;
			if(incremento == 1000) { incremento = 500; }
			else if(incremento == 500) { incremento = 100; }
			else if(incremento == 100) { incremento = 50; }
			else if(incremento == 50) { incremento = 1; }
			}
		// Sale si el calculo llego a los limites
		if(Number(TIRvalue) >= tazaCalculo && Number(TIRvalue) < tazaCalculoMax) { salida = 1; }
		} while(salida == 0);

	for(mes = 0; mes <= totalMeses; mes++) {
		name = 'mens'+totalMeses+mes;
		campo = 	document.getElementById(name);
		campo.innerHTML = Number(mensualidad).toFixed(0);
		if(mes == 0) {
			if(form.tseguro[0].checked) { campo.innerHTML = Number(-1 * form.importeCredito.value).toFixed(0); }
			else { campo.innerHTML = Number(-1 * (Number(form.importeCredito.value) + Number(form.seguro.value))).toFixed(0); }
			}
		if(mes == totalMeses) { campo.innerHTML = Number(mensualidad + Number(form.ultimaMensualidad.value)).toFixed(0); }
		//else if(form.tseguro[2].checked && mes == 36 && totalMeses == 39) { campo.innerHTML = Number(Number(mensualidad) - (Number(form.seguro.value)/2)).toFixed(0); }
		else if(form.tseguro[2].checked && (mes == 12 || mes == 24 || mes == 36 || mes == 48)) { campo.innerHTML = Number(Number(mensualidad) - Number(form.seguro.value)).toFixed(0); }
		}
	iva  = Number(mensualidad * .16).toFixed(0);
	mensualidad = Number(mensualidad).toFixed(0);
	total = Number(Number(mensualidad) + Number(iva)).toFixed(0);

	document.getElementById('cotValCom').innerHTML = addCommas(Math.floor(form.valorComercial.value));

	if(form.tseguro[0].checked) { document.getElementById('cotTipoSeguro').innerHTML = "Contado"; }
	else { document.getElementById('cotTipoSeguro').innerHTML = "Financiado"; }

	document.getElementById('cotSeguro').innerHTML = addCommas(Math.floor(form.seguro.value));
	document.getElementById('cotMensualidad'+totalMeses).innerHTML = "$"+addCommas(Math.floor(mensualidad));
	document.getElementById('cotIVA'+totalMeses).innerHTML = "$"+addCommas(Math.floor(iva));
	document.getElementById('cotTotal'+totalMeses).innerHTML = "$"+addCommas(Math.floor(total));

	if(totalMeses == 12) { form.mens12.value = Math.floor(mensualidad); form.total12.value = Math.floor(total); }
	if(totalMeses == 24) { form.mens24.value = Math.floor(mensualidad); form.total24.value = Math.floor(total); }
	if(totalMeses == 36) { form.mens36.value = Math.floor(mensualidad); form.total36.value = Math.floor(total); }
	//if(totalMeses == 39) { form.mens39.value = Math.floor(mensualidad); form.total39.value = Math.floor(total); }
	if(totalMeses == 48) { form.mens48.value = Math.floor(mensualidad); form.total48.value = Math.floor(total); }

	document.getElementById('tirval').innerHTML = Number(tazaCalculo * 100)+"%";
	form.importeCredito.value = Number(form.importeCredito.value) - 3000;
	}

function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
	return x1 + x2;
	}

// ---------------------------------------------------------------------
// Calculo del TIR
// ---------------------------------------------------------------------
function TIR(values){
	taza_ant = 0; taza_ult = 0; taza = 0.0; vpn = 0.0; meses = values.length;
	for(m = 0; m < meses; m++) { vpn = vpn + Number((Number(values[m]) / Math.pow((1+taza),m))); }
	if (vpn > 0) {
		for (x = taza; vpn > 0; x += .0001){
			vpn = Number(values[0]); for(m = 1; m < meses; m++) { vpn = vpn + Number((Number(values[m]) / Math.pow((1+x),m))); }
			taza_ant = x - .0001; taza_ult = x;
			if(x > 1) { return false; }
			}
		return taza_ult;
		}
	else { return false; }
	}