/*Desarrollo realizado por Asesores Bancarios y Financieros www.abanfin.com Prohibida la reproducción total o parcial por cualquier medio salvo autorización expresa de Asesores Bancarios y Financieros
// Cálculo del seguro de incendios lo quito para bolsamania
Utilizado por bolsamania*/
<!--
function calculos(form){
// controles
if(form.importecv.value==="" || esNumero(form.importecv.value)=="false"){alert("Debe introducir el importe de la compraventa");return(false);}
if(form.importeh.value==="" || esNumero(form.importeh.value)=="false"){alert("Debe introducir el importe de la hipoteca");return(false);}
if(form.comision.value==="" || esNumero(form.comision.value)=="false") {alert("Debe introducir el importe de la comisión de apertura");return(false);}
if(form.tipoinmueble.value===0){alert("Debe seleccionar el tipo de inmueble que adquiere");return(false);}
if(form.provincia.value===0){alert("Debe seleccionar la Comunidad Autónoma de localización del inmueble");return(false);}

// Determinación de las variables
var moneda,numero,importecv,importeh,comision,tipoinmueble,provincia,notariacv,registrocv,ajd;
var impuestos,notascv;
// Obtención de datos y cálculos
if(form.moneda[0].checked){moneda=0;}
if(form.moneda[1].checked){moneda=1;}
var iva = new Array(0.04,0.07,0.16,0);
var igic = new Array(0.00,0.02,0.05,0);

importecv = form.importecv.value*1;
importeh= form.importeh.value*1;

//tipoinmueble: 1=VPO; 2=Libre; 3=Otros; 4=Segunda Transmisión
tipoinmueble = form.tipoinmueble.value;

//1=Alava,2=Andalucia,3=Aragón,4=Asturias,5=C. Valenciana,6=Canarias,7=Cantabria,8=Castilla la Mancha,9=Castilla Leon, 10=Cataluña,11=Ceuta y Melilla,12=Extremadura,13=Galicia,14=Guipuzcoa,15=Islas Baleares,16=La Rioja,17=Madrid,18=Navarra,19=Región de Murcia, 20=Vizcaya

provincia = form.provincia.value;
if (provincia !== 6){ivacv = iva[tipoinmueble-1];} else {ivacv = igic[tipoinmueble-1];}

var itp = new Array(0.06,0.07,0.07,0.07,0.07,0.06,0.07,0.07,0.07,0.07,0.07,0.07,0.07,0.06,0.07,0.07,0.07,0.06,0.07,0.06);
// En AJD existen múltiples ajustes autonómicos, siendo el caso de Cataluña y Madrid dos entramados calculados aparte.

itpcv = itp[provincia-1];

// Cálculo gastos compraventa-------------------------------------------------------------------

// impuestos IVA, IGIC ó Transmisiones
if (ivacv==0){impuestos=itpcv*importecv;} else {impuestos=ivacv*importecv;}
form.ivacv.value=formatodec(impuestos,moneda);

// gastos notariales y registrales compraventa ------------------------------

var notaria = hnotreg(importecv,0,moneda);
var registro = hnotreg(importecv,1,moneda);

switch(provincia)
{
	case 6:
	 tivanot = igic[2];
	 break;
	case 11:
	 tivanot = 0.04;
	 break;
	default:
	 tivanot=iva[2];
}


// Otros gastos notaria
var foliomatriz = new Array (3.005,500);
var cfautorizado = new Array(3.005,500);
var cfsimple = new Array(0.601012,100);
var nfolexentomat = 4;
var nfoliosbase = 11;
var nfolioscv = 15;
var nfoliosh = 30;
var ncopiaautorizada = 1;
var ncopiasimple = 4;
var cercontinuado = new Array(48.080,8000);

// Otros gastos registro
var presentacion = new Array(6.01021,1000);
var notas = new Array(3.005,500);
var refcatastro = new Array(9.015,1500);
var nnotas = 2;
var certnegativacarga = new Array (9.015182,1500);
var otrosnotaria;
var otrosregistro;
// Cálculos
if(moneda==1)
	{
	var excesocaras = (nfolioscv - nfolexentomat) * 2 * foliomatriz[0];
	var cautorizada = ((nfoliosbase * cfautorizado[0]) + ((nfolioscv - nfoliosbase) * cfautorizado[0] / 2)) * ncopiaautorizada;
	var csimple = cfsimple[0] * nfolioscv * ncopiasimple;
	var cerregistro = cercontinuado[0];
	
	otrosregistro = (notas[0] * nnotas) + presentacion[0] + refcatastro[0] + certnegativacarga[0];
	}
	else
	{
	var excesocaras = (nfolioscv - nfolexentomat) * 2 * foliomatriz[1];
	var cautorizada = ((nfoliosbase * cfautorizado[0]) + ((nfolioscv - nfoliosbase) * cfautorizado[1] / 2)) * ncopiaautorizada;
	var csimple = cfsimple[1] * nfolioscv * ncopiasimple;
	var cerregistro = cercontinuado[1];
	
	otrosregistro = (notas[1] * nnotas) + presentacion[1] + refcatastro[1] + certnegativacarga[1] ;	
	}
	
	//alert(excesocaras);
	//alert(cautorizada);
	//alert(csimple);
	
	otrosnotaria = excesocaras + cautorizada + csimple + cerregistro;
	
// Ajuste compraventa viviendas Real decreto 6/1999
notaria = notaria * 0.75;
registro = registro * 0.75;

// Ajuste compraventa VPO
if (tipoinmueble==1){notaria=notaria*0.5;registro=registro*0.5;}

// Inclusión del IVA
//alert("compraventa");
//alert(notaria);
//alert(otrosregistro);

notaria = (notaria + otrosnotaria) * (1 + tivanot);
registro = (registro + otrosregistro) * (1 + tivanot);



//--------------------------------------------------------------------------

// Actos Jurídicos documentados
// Cuando el inmueble es de segunda transmisión, no se liquida ajd, en principio esto se aplica
// cuando la compraventa no está sujeta a IVA.
if (tipoinmueble==4){ajdcv=0;}else{ajdcv = calculaajd(importecv,moneda,provincia,tipoinmueble);}

// Gastos Totales
totalcv = impuestos+notaria+registro+ajdcv;

// Notas
var notascv = new Array("La compraventa esta gravada con un impuesto municipal, denominado plusvalía, que grava la revalorización del suelo desde la última transmisión. ","Al tratarse de una vivienda de protección oficial, es posible que los costes notariales y registrales sean menores a los calculados dependiendo de la extensión de la misma. ")

// Introducción en el formulario

form.notariacv.value=formatodec(notaria,moneda);
form.registrocv.value=formatodec(registro,moneda);
form.ajdcv.value=formatodec(ajdcv,moneda);
form.totalcv.value=formatodec(totalcv,moneda);
if (tipoinmueble==1){form.notascv.value=notascv[0] + notascv[1];}else{form.notascv.value=notascv[0];}

// Cálculo gastos de formalización de la hipoteca-------------------------------------------------------------------
comision = form.comision.value/100;
var reshipotecaria =  importeh*1.55;

// Cálculo comisión de apertura
cah = importeh*comision;

// Cálculo ajd hipoteca
ajdh = calculaajd(reshipotecaria,moneda,provincia,2);


// Cálculo notaria y registro hipoteca
notaria = hnotreg(reshipotecaria,0,moneda);
registro = hnotreg(reshipotecaria,1,moneda);

// Cálculos
if(moneda==1)
	{
	var excesocaras = (nfoliosh - nfolexentomat) * 2 * foliomatriz[0];
	var cautorizada = ((nfoliosbase * cfautorizado[0]) + ((nfoliosh - nfoliosbase) * cfautorizado[0] / 2)) * ncopiaautorizada;
	var csimple = cfsimple[0] * nfoliosh * ncopiasimple;
	
	otrosregistro = (notas[0] * nnotas) + presentacion[0] + refcatastro[0] + certnegativacarga[0];
	}
	else
	{
	var excesocaras = (nfoliosh - nfolexentomat) * 2 * foliomatriz[1];
	var cautorizada = ((nfoliosbase * cfautorizado[0]) + ((nfoliosh - nfoliosbase) * cfautorizado[1] / 2)) * ncopiaautorizada;
	var csimple = cfsimple[1] * nfoliosh * ncopiasimple;
	
	otrosregistro = (notas[1] * nnotas) + presentacion[1] + refcatastro[1] + certnegativacarga[1] ;	
	}
	
	//alert(excesocaras);
	//alert(cautorizada);
	//alert(csimple);
	
	otrosnotaria = excesocaras + cautorizada + csimple;

// Ajuste hipotecas el arancel notarial de cuantia se reduce en un 25 % + Real decreto 6/1999, se vuelve a reducir en otro 25 % sobre la base anterior con lo que se produce una aminoración del 43.75 %	
notaria = notaria * 0.5625;	
	
// Ajuste hipotecas el arancel registro de cuantia se reduce en un 25 % + Real decreto 6/1999, se vuelve a reducir en otro 25 % sobre la base anterior con lo que se produce una aminoración del 43.75 % a la que hay que añadir otra aminoración del 5 % en las hipotecas RDL 6/2000 con lo que la reducción global pasa a ser de 46.56%
registro = registro * 0.53437;

// Ajuste hipoteca VPO
if (tipoinmueble==1){notaria=notaria*0.5;registro=registro*0.5;}	

// Inclusión del IVA
//alert("hipoteca");
//alert(notaria);
//alert(registro);
notaria = (notaria + otrosnotaria) * (1 + tivanot);
registro = (registro + otrosregistro) * (1 + tivanot);

//--------------------------------------------------------------------------
// Cálculo tasación
// Las tarifas de la tasación utilizadas son las publicadas por tasamadrid a 30/08/2004

if (moneda==1){factor=1;}else{factor=166.386;}
var tramotasacion = new Array(60000,120000,180000,240000,300000,360000);
var costetasacion = new Array(125,150,200,225,275,350,0.00062);

	if (importecv < tramotasacion[0]*factor){tasacion = costetasacion[0]*factor;}
	if (importecv >= tramotasacion[0]*factor & importecv < tramotasacion[1]*factor){tasacion = costetasacion[1]*factor;}
	if (importecv >= tramotasacion[1]*factor & importecv < tramotasacion[2]*factor){tasacion = costetasacion[2]*factor;}
	if (importecv >= tramotasacion[2]*factor & importecv < tramotasacion[3]*factor){tasacion = costetasacion[3]*factor;}
	if (importecv >= tramotasacion[3]*factor & importecv < tramotasacion[4]*factor){tasacion = costetasacion[4]*factor;}
	if (importecv >= tramotasacion[4]*factor & importecv < tramotasacion[5]*factor){tasacion = costetasacion[5]*factor;}
	if (importecv >= tramotasacion[5]*factor){tasacion = (costetasacion[5]*factor) + ((importecv - (tramotasacion[5]*factor))*costetasacion[6]);}

// Cálculo del seguro de incendios lo quito para bolsamania
//var seguro= new Array(7.5,1248);
//if (moneda==0){seguroh = (importecv/1000000)*seguro[1];}else{seguroh = (importecv/6010)*seguro[0];}


// Total gastos hipotecarios
var totalh = ajdh + notaria + registro + tasacion + cah; //+ seguroh

// notas
notash="Los anteriores gastos se pueden ver incrementados por el seguro de amortización( un seguro de vida por el importe de la hipoteca) más el coste de la gestoría que gestione los pagos de impuestos y la presentación de la documentación en el registro"
form.notash.value=notash;

// Introducción en el formulario
form.ajdh.value=formatodec(ajdh,moneda);
form.notariah.value=formatodec(notaria,moneda);
form.registroh.value=formatodec(registro,moneda);	
//form.seguroh.value=formatodec(seguroh,moneda);
form.tasacionh.value=formatodec(tasacion,moneda);
form.cah.value=formatodec(cah,moneda);
form.totalh.value=formatodec(totalh,moneda);
form.total.value=formatodec(totalh+totalcv,moneda);

}
//-------------------------------------------------------------------------------------------------------------
// Cálculo de la base de honorarios notariales y registrales.
function hnotreg(importe,tipo,moneda)
{
var tramo = new Array(1000000,5000000,10000000,25000000,100000000,1000000000);
var hnot = new Array(15000,0.0045,0.0015,0.001,0.0005,0.0003);
var hreg = new Array(4000,0.00175,0.00125,0.00075,0.0003,0.0002);
var factor = new Array(0,0,0,0,0,0);
// Ajuste de la moneda
if(moneda==1)
	{
	for (i = 0; i<=5; i++)
		{
		tramo[i]=tramo[i]/166.386;
		}
	hnot[0]=hnot[0]/166.386;
	hreg[0]=hreg[0]/166.386;
	}	
// Ajuste factores y honorarios, tipo=0 calcula honorarios notariales, tipo=1 calcula honorarios registrales.
if(tipo==0)
	{
	for (i = 0; i<=5; i++)
		{
		factor[i]=hnot[i];
		}
	}
	else
	{
	for (i = 0; i<=5; i++)
		{
		factor[i]=hreg[i];
		}
	}
// Cálculo de los honorarios base
var honorarios = new Array(0,0,0,0,0,0);
var valor = 0;
i = 1;
var z = 1000;
	while(valor < importe)
	{
		valor = (z * i);
		if (valor <= tramo[0]){honorarios[0]=factor[0]; }
		if (valor > tramo[0] & valor <= tramo[1]){honorarios[1] =(valor-tramo[0])*factor[1];}
		if (valor > tramo[1]& valor <= tramo[2]){honorarios[2] =(valor-tramo[1])*factor[2];}
		if (valor > tramo[2] & valor <= tramo[3]){honorarios[3] =(valor-tramo[2])*factor[3];}
		if (valor > tramo[3] & valor <= tramo[4]){honorarios[4] =(valor-tramo[3])*factor[4];}
		if (valor > tramo[4] & valor <= tramo[5]){honorarios[5] =(valor-tramo[4])*factor[5];}
		i++;
	}

// Suma de honoraios
var resultado = 0;
for (i = 0; i<=5; i++)
	{
	resultado = honorarios[i] + resultado;
	}	

return resultado		
}

//---------------------------------------------------------------------------------------
// Calcula el importe de actos jurídicos documentados
function calculaajd(importe,moneda,provincia,vpo)
{
// vpo=1, se trata de vivienda de protección oficial, igual a 0 o cualquier otro hipoteca o otra cosa
//1=Alava,2=Andalucia,3=Aragón,4=Asturias,5=C. Valenciana,6=Canarias,7=Cantabria,8=Castilla la Mancha,9=Castilla Leon, 10=Cataluña,11=Ceuta y Melilla,12=Extremadura,13=Galicia,14=Guipuzcoa,15=Islas Baleares,16=La Rioja,17=Madrid,18=Navarra,19=Región de Murcia, 20=Vizcaya
var ajd, factor;
var ajdnew = new Array(0.01,0.01,0.01,0.01,0.01,0.0075,0.01,0.01,0.01,0,0.01,0.01,0.01,0.01,0.01,0.01,0,0.01,0.01,0.01);
                          
ajd = ajdnew[provincia-1];
ajd = importe*ajd;

// Recálculo de ajd de la comunidad autónoma Catalana y Madrileña
if (moneda==1){factor=1;}else{factor=166.386;}
// Cataluña ajd compraventa
var tramosc = new Array(30000,60000);
var tiposc = new Array(0.005,0.0075,0.01);

if (provincia==10)
	{
		if (importe<tramosc[0]*factor){ajd=importe*tiposc[0];}
		if (importe>=tramosc[0]*factor & importe<tramosc[1]*factor){ajd=importe*tiposc[0];}
		if (importe>tramosc[1]*factor){ajd=importe*tiposc[0];}			
	}

// Madrid ajd compraventa
	var tramosm = new Array(120000,180000);
	var tiposm = new Array(0.002,0.004,0.005,0.01);
	
	if (provincia==17)
		{
		if (vpo==1){ajd=importe*0.002;}
			else
			{
			if (importe<tramosm[0]*factor){ajd=importe*tiposm[1];}
			if (importe>=tramosm[0]*factor & importe<tramosm[1]*factor){ajd=importe*tiposm[2];}
			if (importe>tramosm[1]*factor){ajd=importe*tiposm[3];}
			}
				
		}
	return ajd;
}
//---------------------------------------------------------------------------------------
// Cambia la moneda de la operación con dos campos

function cambiardos(form)
{
var importecv;
var importeh;
var informa;
importecv=form.importecv.value*1;
importeh=form.importeh.value*1;

if(form.moneda[0].checked){form.moneda[0].checked=0;informa=1;}
if(form.moneda[1].checked){form.moneda[1].checked=0;informa=0;}
if (informa==1)
{
form.importecv.value=Math.round((importecv/166.386)*100)/100;
form.importeh.value=Math.round((importeh/166.386)*100)/100;
form.moneda[1].checked=1;
}
if (informa==0)
{
form.importecv.value=Math.round(importecv*166.386);
form.importeh.value=Math.round(importeh*166.386);
form.moneda[0].checked=1;
}
calculos(form)
}



