// Valors per configurar la calculadora
CapitalInicial = ""
CapitalMinimText = "10.000"
CapitalMaximText = "100.000.000"
CapitalMinim = TreureMilers(CapitalMinimText)
CapitalMaxim = TreureMilers(CapitalMaximText)
InteresInicial = ""
InteresMinim = 1
InteresMaxim = 20
TerminiInicial = ""
TerminiMinim = 1
TerminiMaxim = 30

// Neteja els camps i posiciona el focus al primer camp
function Reset()
   {
   form = document.formCalcul
   form.Capital.value = CapitalInicial;  
   form.Interes.value = InteresInicial;  
   form.NombreAnys.value = TerminiInicial;
   form.NombreDePagaments.value = ""; 
   form.PagamentMensual.value = "";
   form.Capital.focus();
   }
   
// Neteja els camps resultat
function ResetResults()
   {
   form = document.formCalcul       
   form.NombreDePagaments.value = ""; 
   form.PagamentMensual.value = "";       
   }
 
// Valida que tots els camps estiguin emplenats i siguin numérics 
function ValidarCamps() {
   
   form = document.formCalcul
   var str = form.Capital.value;       
   if (str == "")
         {
         alert("\nEl campo Capital esta vacio.\n\nPor favor indique el capital.");
         form.Capital.focus();
         return false;
         }       
   for (var i = 0; i < str.length; i++) 
      {
      var ch = str.substring(i, i + 1);
      if ((ch < "0" || "9" < ch) && ch != '.' && ch != ',') 
         {
         alert("\nEl campo Capital solo admite caracteres numéricos. \n\nPor favor introduzca de nuevo el capital.");
         form.Capital.select();
         form.Capital.focus();
         return false;
         }
      }
   var str = form.Interes.value;       
   if (str == "")
         {
         alert("\nEl campo Interés esta vacio.\n\nPor favor indique el interés.");
         form.Interes.focus();
         return false;
         }       
   for (var i = 0; i < str.length; i++) 
      {
      var ch = str.substring(i, i + 1);
      if ((ch < "0" || "9" < ch) && ch != '.' && ch != ',') 
         {
         alert("\nEl campo Interes solo admite caracteres numéricos. \n\nPor favor introduzca de nuevo el interés.");
         form.Interes.select();
         form.Interes.focus();
         return false;
         }
      }
   var str = form.NombreAnys.value;       
   if (str == "")
         {
         alert("\nEl campo Plazo esta vacio.\n\nPor favor indique el número de años.");
         form.NombreAnys.focus();
         return false;
         }       
   for (var i = 0; i < str.length; i++) 
      {
      var ch = str.substring(i, i + 1);
      if ((ch < "0" || "9" < ch) && ch != '.' && ch != ',') 
         {
         alert("\nEl campo Plazo solo admite caracteres numéricos. \n\nPor favor introduzca de nuevo el número de años.");
         form.NombreAnys.select();
         form.NombreAnys.focus();
         return false;
         }
      }
   return true;
}

// Valida que els valors estiguin dins el rang establert
function ValidarValors(capital, interes, anys) {
   if (capital < CapitalMinim || capital > CapitalMaxim) {
        alert("\nEl capital ha de ser un valor entre " + CapitalMinimText + " pts. y " + 
            CapitalMaximText + " pts.\n\nPor favor indique de nuevo el capital.");
        form.Capital.select();
        form.Capital.focus();
        return false;
   }
   if (interes < InteresMinim/100 || interes > InteresMaxim/100) {
        alert("\nEl interés ha de ser un valor entre " + InteresMinim + "% i " + 
            InteresMaxim + "%.\n\nPor favor indique de nuevo el interés.");
        form.Interes.select();
        form.Interes.focus();
        return false;
   }
   if (anys < TerminiMinim || anys > TerminiMaxim) {
        alert("\nEl Plazo ha de ser un valor entre " + TerminiMinim + " i " + 
            TerminiMaxim + " años.\n\nPor favor indique de nuevo el número de años.");
        form.NombreAnys.select();
        form.NombreAnys.focus();
        return false;
   }
   return true;
}

// Valida els valors per calcular la taula d'amortització
function ValidarDadesTaula(npagaments, capital, quota, interes) {
   if (npagaments < 12*TerminiMinim || npagaments > 12*TerminiMaxim || 
            capital < CapitalMinim || capital > CapitalMaxim ||
            quota <=0 || interes < InteresMinim/1200 || 
            interes > InteresMaxim/1200) {
        alert("\nAntes de generar la tabla de amortizaciones, realice el cálculo.");            
        return false;
   }       
   return true;
}

// Canvia les comes del numero x per punts. Retorna el resultat com a float
function TreureComes(x) {
	var l = x.length
	var y = ''
	for(var i=0;i<l;i++) {
		if(x.charAt(i) != ' ') {
			if(x.charAt(i) == ',') y += '.'
			else y += x.charAt(i)
		}
	}
	return parseFloat(y)
} 

// Canvia les comes del numero x per punts i elimina els punts
// Retorna el resultat com a float
function TreureMilers(x) {
	var l = x.length
	var y = ''
	for(var i=0;i<l;i++) {
		if(x.charAt(i) != ' ') {
			if(x.charAt(i) == ',') y += '.'
			else if(x.charAt(i) != '.') y += x.charAt(i)
		}
	}
	return parseFloat(y)
}  

// Afegeix al numero x els separadors de milers. Retorna el resultat arrodonit
function AfegeixMilers(x)
{
	x = Math.round(x)
	x = x.toString()    	
	var l = x.length
	var y = ''
	for(var i=l-1;i>=3;i-=3) {
		y='.'+x.charAt(i-2)+x.charAt(i-1)+x.charAt(i)+y
	}
	while(i>=0) {
		y=x.charAt(i--)+y
	}
	return y
}

// Converteix els punts d'un float en comes
function AfegeixComes(x)
{	
	x = x.toString()    	
	var l = x.length
	var y = ''
	for(var i=0;i<l;i++) {
		if(x.charAt(i) != ' ') {
			if(x.charAt(i) == '.') y += ','
			else y += x.charAt(i)
		}
	}
	return y
}

//Calcula i emplena els camps del nombre de pagaments i la quota mensual  
function Calcular()
{
    form = document.formCalcul
    if (ValidarCamps()) {
        Capital = TreureMilers(form.Capital.value)
        InteresAnual = TreureComes(form.Interes.value)/100
        Anys = Math.floor(TreureMilers(form.NombreAnys.value))
        if (ValidarValors(Capital, InteresAnual, Anys)) {
            form.Capital.value = AfegeixMilers(Capital)
            form.Interes.value = AfegeixComes(InteresAnual*100)
            form.NombreAnys.value = AfegeixMilers(Anys)
            InteresMensual = InteresAnual/12
            NombrePagaments = Anys*12        
            QuotaMensual = Math.floor((Capital*InteresMensual)/(1-Math.pow((1+InteresMensual),(-1*NombrePagaments)))*100)/100
            form.NombreDePagaments.value = NombrePagaments
            form.PagamentMensual.value = AfegeixMilers(QuotaMensual)
        }
    }
}

function Taula() {

    npagaments = form.NombreDePagaments.value
    capital = TreureMilers(form.Capital.value)
    quota = TreureMilers(form.PagamentMensual.value)        
    interes = TreureComes(form.Interes.value)/1200
    if (ValidarDadesTaula(npagaments, capital, quota, interes)) {
        taula = window.open("","Taula","toolbar=no,menubar=yes,status=no,scrollbars=yes,resizable=no,width=480,height=420"); 
        taula.document.write("<html>") 
        taula.document.write ("<head><title>Tabla de Amortizaciones - " + AfegeixMilers(capital) +
            " pts al "+ form.Interes.value + "% a " + form.NombreAnys.value +" años.</title>")
        taula.document.write("<style>td { text-align: center;" +
            "font-family: Arial, Verdana, Helvetica; font-size: smaller}" +
            ".title {background-color: #002b78; font-size:smaller; color:white;" +
            "font-family: Verdana, Arial, Helvetica;font-weight:bold}</style></head>") 
        taula.document.write("<body>") 
        taula.document.write("<table width=\"450\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"ffcc00\"") 
        taula.document.write("<tr><td class=\"title\">Periodo</td>" +
            "<td class=\"title\">Cuota</td><td class=\"title\">Intereses</td>" +
            "<td class=\"title\">Capital amortizado</td><td class=\"title\">Capital Pendiente</td></tr>") 
        for(var i=0;i<npagaments;i++) {
    		taula.document.write("<tr><td>")
    		taula.document.write(i+1);
    		taula.document.write("</td><td>")
    		taula.document.write(AfegeixMilers(quota));
    		taula.document.write("</td><td>")
    		interesPagament = capital * interes
    		taula.document.write(AfegeixMilers(interesPagament));    		
    		taula.document.write("</td><td>")
    		capitalPagat = quota-interesPagament
    		taula.document.write(AfegeixMilers(capitalPagat));
    		taula.document.write("</td><td>")
    		capital -= capitalPagat
    		taula.document.write(AfegeixMilers(capital));
    		taula.document.write("</td><tr>")
    	}
        taula.document.write("</table>") 
        taula.document.write("</body>") 
        taula.document.write("</html>") 
        taula.document.close() 
    }   
}