﻿    //**************************************************************************/
    
    //Calculamos los ingredientes
    function calculos(){
        var alcalisSuma = 0.
        var porcentajeTotal = 0

        miFormula.pesoGrasas       = 0
        miFormula.pesoIngredientes = 0
        miFormula.sobreEngrasado   = selSE.value
        miFormula.concentracion    = selConcentracion.value
        
        //Sumamos los pesos de las grasas, ingredientes y los álcalis
        var ingr = miFormula.listaIngredientes 
        //var ingr = miFormula.listaIngredientes a partir de ahora
        
        for(n=0;n<ingr.length;n++){
            if(ingr[n].esGrasa){
                miFormula.pesoGrasas += parseFloat(ingr[n].peso)}
            miFormula.pesoIngredientes += parseFloat(ingr[n].peso)
            ingr[n].KOH = ingr[n].sap * ingr[n].peso / miFormula.tipoAlcali
            alcalisSuma += ingr[n].KOH
            
            pesoIngrediente[n].value = redondeo(ingr[n].peso, 0)
            alcalisIngrediente[n].value = redondeo(ingr[n].KOH, 1)
            sapIngrediente[n].value = ingr[n].sap
        }
        txTotalGramos.value = redondeo(miFormula.pesoIngredientes,0)
        txTotalAlcalis.value = redondeo(alcalisSuma, 1)
                
        //Calculamnos el descuento de alcali
        var desc = alcalisSuma * miFormula.sobreEngrasado / 100
        miFormula.KOH = alcalisSuma - desc
        txAlcalisDescuento.value = redondeo(miFormula.KOH, 1)
       
        //Calculamos la cantidad de agua
        miFormula.agua = (100 - miFormula.concentracion) * miFormula.KOH / miFormula.concentracion
        txAgua.value = redondeo(miFormula.agua, 1)
        
        //Sumamos todos los ingredientes
        miFormula.pesoTotal = miFormula.pesoIngredientes + miFormula.KOH + miFormula.agua
        txPesoTotalFormula.value = redondeo(miFormula.pesoTotal,1)
        
        //inicializamos el ingrediente temporal para almacenar la media de los valores de las grasas
        ingrMedia.peso        = miFormula.pesoGrasas
        ingrMedia.esGrasa     = true
        ingrMedia.sap         = 0
        ingrMedia.iodo        = 0
        ingrMedia.ins         = 0 
        ingrMedia.laurico     = 0
        ingrMedia.linoleico   = 0
        ingrMedia.myristico   = 0
        ingrMedia.oleico      = 0   
        ingrMedia.palmitico   = 0
        ingrMedia.ricinoleico = 0
        ingrMedia.estearico   = 0   
        ingrMedia.linolenico  = 0
        ingrMedia.resultado.dureza        = 0
        ingrMedia.resultado.limpieza      = 0
        ingrMedia.resultado.burbujas      = 0
        ingrMedia.resultado.persistencia  = 0
        ingrMedia.resultado.acondicionado = 0
        
        //Calculamos y plasmamos el porcentaje de cada GRASA e INGREDIENTE respecto a la cantidad total de grasas e ingredientes.
        for(n=0;n<ingr.length;n++){
            // Si el peso es válido
            if(ingr[n].peso != 0){
                //Calculamos el porcentaje de cada INGREDIENTE respecto a la fórmula.   
                ingr[n].porcentajeFormula = 100 * ingr[n].peso / miFormula.pesoTotal
                porFormulaIngrediente[n].value = redondeo(ingr[n].porcentajeFormula, 1)
                porcentajeTotal += ingr[n].porcentajeFormula
                
                // Calculamos el porcentaje de cada GRASA
                if(ingr[n].esGrasa){
                    ingr[n].porcentajeGrasas = 100 * ingr[n].peso / miFormula.pesoGrasas
                    porGrasaIngrediente[n].value = redondeo(ingr[n].porcentajeGrasas, 1)
                    
                    //y calculamos los valores medios de cada propiedad y ácido graso de la fórmula
                    ingrMedia.sap         += ingr[n].porcentajeGrasas * ingr[n].sap / 100.
                    ingrMedia.iodo        += ingr[n].porcentajeGrasas * ingr[n].iodo / 100.
                    ingrMedia.ins         += ingr[n].porcentajeGrasas * ingr[n].ins / 100.
                    ingrMedia.laurico     += ingr[n].porcentajeGrasas * ingr[n].laurico / 100.
                    ingrMedia.linoleico   += ingr[n].porcentajeGrasas * ingr[n].linoleico / 100.
                    ingrMedia.myristico   += ingr[n].porcentajeGrasas * ingr[n].myristico / 100.
                    ingrMedia.oleico      += ingr[n].porcentajeGrasas * ingr[n].oleico / 100.
                    ingrMedia.palmitico   += ingr[n].porcentajeGrasas * ingr[n].palmitico / 100.
                    ingrMedia.ricinoleico += ingr[n].porcentajeGrasas * ingr[n].ricinoleico / 100.
                    ingrMedia.estearico   += ingr[n].porcentajeGrasas * ingr[n].estearico / 100.
                    ingrMedia.linolenico  += ingr[n].porcentajeGrasas * ingr[n].linolenico / 100.
                    
                    ingrMedia.resultado.dureza        += ingr[n].porcentajeGrasas * ingr[n].resultado.dureza / 100.
                    ingrMedia.resultado.limpieza      += ingr[n].porcentajeGrasas * ingr[n].resultado.limpieza / 100.
                    ingrMedia.resultado.burbujas      += ingr[n].porcentajeGrasas * ingr[n].resultado.burbujas / 100.
                    ingrMedia.resultado.persistencia  += ingr[n].porcentajeGrasas * ingr[n].resultado.persistencia / 100.
                    ingrMedia.resultado.acondicionado += ingr[n].porcentajeGrasas * ingr[n].resultado.acondicionado / 100.}                    
                else{
                    // Si no es grasa aplicamos la media en función del porcentaje total de la fórmula
                    ingr[n].porcentajeGrasas = 0
                    porGrasaIngrediente[n].value = 0 
                    
                    ingrMedia.resultado.dureza        += ingr[n].porcentajeFormula * ingr[n].resultado.dureza / 100.
                    ingrMedia.resultado.limpieza      += ingr[n].porcentajeFormula * ingr[n].resultado.limpieza / 100.
                    ingrMedia.resultado.burbujas      += ingr[n].porcentajeFormula * ingr[n].resultado.burbujas / 100.
                    ingrMedia.resultado.persistencia  += ingr[n].porcentajeFormula * ingr[n].resultado.persistencia / 100.
                    ingrMedia.resultado.acondicionado += ingr[n].porcentajeFormula * ingr[n].resultado.acondicionado / 100.}}
            else{
                ingr[n].porcentajeFormula      = 0
                ingr[n].porcentajeGrasas       = 0  
                porFormulaIngrediente[n].value = 0
                porGrasaIngrediente[n].value   = 0 }
        }
        txTotalSap.value = redondeo(ingrMedia.sap,3)
        txIodo.value     = redondeo(ingrMedia.iodo,0)
        txIns.value      = redondeo(ingrMedia.ins,0)
        
        //Aplicamos el total de los ingredientes menos el agua y el alcali
        txPorcentajeTotal.value = redondeo(porcentajeTotal,1)
                
        infoIngr(ingrMedia)
        miResul = aplicaVariantes(ingrMedia.resultado)
        
        // Aplicando el azúcar
        if(hayAzucar() != 0){
            porcentajeAzucar  = hayAzucar().porcentajeFormula / 100
            ingrMedia.resultado.dureza    = (valorCentradoAzucar * porcentajeAzucar * factorInfluenciaAzucar) + (ingrMedia.resultado.dureza * (1 - (porcentajeAzucar * factorInfluenciaAzucar)))
            ingrMedia.resultado.burbujas  = (valorBurbujasAzucar * porcentajeAzucar * factorInfluenciaAzucar) + (ingrMedia.resultado.burbujas * (1 - (porcentajeAzucar * factorInfluenciaAzucar)))
        }
        
        //Plasmando en pantalla 
        txDureza.value        = redondeo(miResul.dureza,0)
	    txLimpieza.value      = redondeo(miResul.limpieza,0)
        txBurbujas.value      = redondeo(miResul.burbujas,0)
        txPersistencia.value  = redondeo(miResul.persistencia,0)
        txAcondicionado.value = redondeo(miResul.acondicionado,0)
        
        //Alertas
        mensajeAlerta(txDureza)
        mensajeAlerta(txAcondicionado)
        mensajeAlerta(txLimpieza)
        mensajeAlerta(txBurbujas)
        mensajeAlerta(txPersistencia)
    }
    
    //Método para buscar el ingrediente azúcar
    function hayAzucar(){
        for(n=0; n<miFormula.listaIngredientes.length; n++){
	        if(miFormula.listaIngredientes[n].id==36){return miFormula.listaIngredientes[n]}
	    }
	    return 0   
	}        
	
	function redondeo(numero, dec){
	    pot = Math.pow(10, dec)
	    var num = new String(Math.round(numero * pot) / pot)
	    return num
	}
	
	//Reescala los pesos de los ingredientes en función de la fórmula o las grasas
	function reescala(){
	    valorFinal  = parseFloat(txReescalar.value);
	    if(selReescala.value==0){
	        // Si es reescalar la formula
	        valorInicio = miFormula.pesoTotal;
	        factor = valorFinal / valorInicio;
	        for(n=0; n<miFormula.listaIngredientes.length; n++){
	            miFormula.listaIngredientes[n].peso = miFormula.listaIngredientes[n].peso * factor }
	        }
	    else
	    {
	        // Si es reescalar las grasas
	        valorInicio = miFormula.pesoGrasas;
	        factor = valorFinal / valorInicio;
	        for(n=0; n<miFormula.listaIngredientes.length; n++){
	            if(miFormula.listaIngredientes[n].esGrasa){
	                miFormula.listaIngredientes[n].peso = miFormula.listaIngredientes[n].peso * factor
                    pesoIngrediente[n].value = redondeo(miFormula.listaIngredientes[n].peso, 0);
	            }
	        }
	    }
	    chiva("factor: "+factor);
	    calculos();
	}    
	
    
	
