Code optimisation for compressed javascript in the product editor

Fri, 06 Sep 2019 22:59:59 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 06 Sep 2019 22:59:59 +0200
changeset 469
3d532097860d
parent 468
371f2da785d9
child 470
94a69f6b0f35

Code optimisation for compressed javascript in the product editor

www/js/prod_edit-min.js file | annotate | diff | comparison | revisions
www/js/prod_edit.js file | annotate | diff | comparison | revisions
--- a/www/js/prod_edit-min.js	Fri Sep 06 14:11:56 2019 +0200
+++ b/www/js/prod_edit-min.js	Fri Sep 06 22:59:59 2019 +0200
@@ -1,1 +1,1 @@
-function createDelElements(){$("#eventWindow").jqxWindow({theme:theme,position:{x:490,y:210},width:300,height:175,resizable:false,isModal:true,modalOpacity:0.4,okButton:$("#delOk"),cancelButton:$("#delCancel"),initContent:function(){$("#delOk").jqxButton({template:"danger",width:"65px",theme:theme});$("#delCancel").jqxButton({template:"success",width:"65px",theme:theme});$("#delCancel").focus()}});$("#eventWindow").jqxWindow("hide")}$(document).ready(function(){var k=false;var al=0;var aZ=0;var a0=0;var I=0;var ac=0;var aD=77;var ap=0;var w=0.75;var aa=0;var p=1;var ab=1;var ai=1;var P=1;var c=1;var aY=0;var V=0;var D=0;var aU="";var ag="";var B=40.048;var aq=24.305;var ad=22.98976928;var q=35.453;var aI=96.0626;var r=61.01684;var an=172.171;var T=147.015;var g=100.087;var aK=246.475;var aF=84.007;var z=105.996;var b=58.443;var aJ=74.06268;var u=0;var aL={};var C=1;var a=0;var e={};var aw=0;var aH={};var aE=0;var f={};var ak=0;var E={};$("#jqxMenu").jqxMenu("destroy");console.log("record:"+my_record+"  return:"+my_return+"  theme:"+theme);$("#jqxLoader").jqxLoader({width:250,height:150,isModal:true,text:"Laden product ...",theme:theme});function H(){if(d.inventory_reduced>6){$("#ok_pmpt").hide();return}if(p&&ab&&ai&&P&&c){$("#ok_supplies").html("<img src='images/dialog-ok-apply.png'>")}else{$("#ok_supplies").html("<img src='images/dialog-error.png'>")}}function aW(){console.log("calcPercentages()");var a5=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a5>1){var a3=0;for(ae=0;ae<a5;ae++){var a4=$("#fermentableGrid").jqxGrid("getrowdata",ae);if(a4.f_added<4){a3+=Math.round(a4.f_amount*1000)/1000}}a3=Math.round(a3*1000)/1000;for(ae=0;ae<a5;ae++){var a4=$("#fermentableGrid").jqxGrid("getrowdata",ae);if(a4.f_added<4){var i=Math.round(a4.f_amount/a3*1000)/10;$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",i)}else{$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",0)}}}else{$("#fermentableGrid").jqxGrid("setcellvalue",0,"f_percentage",100)}}function U(){var bB=0;var bt=0;I=0;ac=0;ap=0;p=1;P=1;var br=0;var bj=0;var bs=0;var bC=0;var bb=0;var bm=0;var bf=0;var bk=false;var bp=0;var ba=0;var bw=0.925;var bo=0.95;var a9=0;if((bc=$("#mashGrid").jqxGrid("getrows"))){for(var bq=0;bq<bc.length;bq++){var a8=bc[bq];if(a8.step_type==0){bC+=parseFloat(a8.step_infuse_amount)}if(a8.step_temp<=75){var bi=a8.step_time+a8.ramp_time;bp+=bi;ba+=bi*a8.step_temp}}if(bp>5){bp-=5}ba=Round(ba/bp,2)}if(!(bc=$("#fermentableGrid").jqxGrid("getrows"))){return}var bg=0;for(var bq=0;bq<bc.length;bq++){var a8=bc[bq];if(a8.f_adjust_to_total_100){bk=true}if(a8.f_type==1&&a8.f_added<4){I+=a8.f_percentage}if(a8.f_graintype==2&&a8.f_added<4){ac+=a8.f_percentage}var by=a8.f_amount*(a8.f_yield/100)*(1-a8.f_moisture/100);if(a8.f_added==0){if(bC>0){bC+=a8.f_amount*a8.f_moisture/100;bg+=by}by=parseFloat(d.efficiency)/100*by;bt+=by;ap+=parseFloat(a8.f_amount)}if(a8.f_added==0||a8.f_added==1){bB+=by}if(a8.f_added==2||a8.f_added==3){var bd=(a8.f_yield/100)*(1-a8.f_moisture/100);bj+=a8.f_amount*bd;bs+=a8.f_amount;br+=(bd*sugardensity+(1-bd)*1)*a8.f_amount}if(a8.f_added<4){bb+=a8.f_amount*ebc_to_srm(a8.f_color);bm+=a8.f_amount*a8.f_color*get_kt(a8.f_color);bf+=(a8.f_percentage/100)*a8.f_color}if(C){if(a8.f_added==4){$("#bottle_priming_total").val(a8.f_amount*1000);$("#bottle_priming_sugar").jqxDropDownList("selectItem",a8.f_name)}if(a8.f_added==5){$("#keg_priming_total").val(a8.f_amount*1000);$("#keg_priming_sugar").jqxDropDownList("selectItem",a8.f_name)}}if((((d.inventory_reduced<=2)&&(a8.f_added<=1))||((d.inventory_reduced<=3)&&(a8.f_added==2))||((d.inventory_reduced<=5)&&(a8.f_added==3))||((d.inventory_reduced<=6)&&(a8.f_added==4))||((d.inventory_reduced<=6)&&(a8.f_added==5)))&&a8.f_inventory<a8.f_amount){p=0}if(a8.f_added==0&&(a8.f_type==0||a8.f_type==4)&&a8.f_color<50){a9+=a8.f_diastatic_power*a8.f_amount}}C=0;$("#ferm_lintner").val(Math.round(parseFloat(a9/ap)));$("#mash_kg").val(ap);console.log("calcFermentables() supplies:"+p+" moutsuiker:"+bt+"/"+bB);k=bk;if(k){$("#wf_amount").jqxNumberInput({width:90,readOnly:true,spinButtons:false})}else{$("#wf_amount").jqxNumberInput({width:110,readOnly:false,spinButtons:true})}if(bC>0){var be=bg/sugardensity+bC;bg=1000*bg/(be*10);a0=Math.round(plato_to_sg(bg)*10000)/10000;$("#est_mash_sg").val(a0)}d.est_og=estimate_sg(bB+bj,parseFloat(d.batch_size));$("#est_og").val(d.est_og);$("#est_og2").val(d.est_og);var a3=d.est_og;aZ=estimate_sg(bB,parseFloat(d.batch_size));$("#est_og3").val(aZ);al=estimate_sg(bt,parseFloat(d.boil_size));$("#est_pre_sg").val(al);var a4=parseFloat(d.batch_size);if(d.brew_aboil_volume>0){a4=d.brew_aboil_volume/1.04}if(d.brew_fermenter_tcloss==0){d.brew_fermenter_tcloss=d.eq_trub_chiller_loss;$("#brew_fermenter_tcloss").val(d.brew_fermenter_tcloss)}d.brew_fermenter_volume=a4-d.brew_fermenter_tcloss+d.brew_fermenter_extrawater;$("#brew_fermenter_volume").val(d.brew_fermenter_volume);var bx=(d.boil_size-D+(ap*my_grain_absorbtion)+d.eq_lauter_deadspace)*1.03;$("#brew_sparge_est").val(bx);var bz=d.brew_aboil_sg;if(bz<1.002){bz=aZ}var bh=d.brew_fermenter_extrawater;if(d.brew_fermenter_volume>0){var a6=sg_to_plato(bz)*d.brew_fermenter_volume*bz/100;a6+=bj;if((d.brew_fermenter_volume*bz+bs)>0){var bl=100*a6/(d.brew_fermenter_volume*bz+bs+bh);d.brew_fermenter_sg=Round(plato_to_sg(bl),4);$("#brew_fermenter_sg").val(d.brew_fermenter_sg);if(d.color_method==4){d.brew_fermenter_color=Math.round(((bl/8.6)*bf)+(d.boil_time/60))}else{if(d.color_method==3){d.brew_fermenter_color=Math.round((4.46*bw*bo)/(a4+bh)*bm)}else{var a5=bb/(a4+bh)*8.34436;d.brew_fermenter_color=kw_to_ebc(d.color_method,a5)}}$("#brew_fermenter_color").val(d.brew_fermenter_color);var bu=ebc_to_color(d.brew_fermenter_color);$("#bcolorf").show();document.getElementById("bcolorf").style.background=bu}}else{d.brew_fermenter_sg=d.brew_fermenter_color=0;$("#brew_fermenter_sg").val(0);$("#brew_fermenter_color").val(0);$("#bcolorf").hide()}if(d.color_method==4){var bn=Math.round(((sg_to_plato(d.est_og)/8.6)*bf)+(d.boil_time/60))}else{if(d.color_method==3){var bn=Math.round((4.46*bw*bo)/parseFloat(d.batch_size)*bm)}else{var a5=bb/parseFloat(d.batch_size)*8.34436;var bn=kw_to_ebc(d.color_method,a5)}}d.est_color=bn;$("#est_color").val(bn);$("#est_color2").val(bn);var bu=ebc_to_color(bn);document.getElementById("bcolor").style.background=bu;document.getElementById("bcolor2").style.background=bu;pmalts=ap/d.eq_mash_max*100;$("#perc_malts").jqxProgressBar("val",pmalts);$("#perc_sugars").jqxProgressBar("val",I);$("#perc_cara").jqxProgressBar("val",ac);aV();aD=0;aa=0;var bc=$("#yeastGrid").jqxGrid("getrows");for(var bq=0;bq<bc.length;bq++){var a8=bc[bq];if(a8.y_use==0){if(parseFloat(a8.y_attenuation)>aD){aD=parseFloat(a8.y_attenuation)}if(a8.y_form==0){aa+=(parseFloat(a8.y_cells)/1000000000)*parseFloat(a8.y_amount)*(d.starter_viability/100)}else{aa+=(parseFloat(a8.y_cells)/1000000)*parseFloat(a8.y_amount)}}if((((d.inventory_reduced<=3)&&(a8.y_use==0))||((d.inventory_reduced<=4)&&(a8.y_use==1))||((d.inventory_reduced<=5)&&(a8.y_use==2))||((d.inventory_reduced<=6)&&(a8.y_use==3)))&&(a8.y_inventory<a8.y_amount)){P=0}}H();if(aD==0){aD=77}if((ap>0)&&(D>0)&&(bp>0)&&(ba>0)){d.est_fg=estimate_fg(I,ac,D/ap,bp,ba,aD,d.est_og)}else{d.est_fg=estimate_fg(I,ac,0,0,0,aD,d.est_og)}$("#est_fg").val(d.est_fg);$("#est_fg2").val(d.est_fg);$("#est_fg3").val(d.est_fg);var bA=d.est_fg;d.est_abv=abvol(d.est_og,d.est_fg);$("#est_abv").val(d.est_abv);$("#est_abv2").val(d.est_abv);if((d.stage>=6)&&(d.fg>0.99)&&(d.fg<d.brew_fermenter_sg)){aD=100*(d.brew_fermenter_sg-d.fg)/(d.brew_fermenter_sg-1);a3=d.brew_fermenter_sg;bA=d.fg}$("#yeast_cells").val(aa);$("#need_cells").val(v());var a7=1881.22*bA*(a3-bA)/(1.775-a3);var a6=3550*bA*(0.1808*a3+0.8192*bA-1.0004);$("#kcal").val(Math.round((a7+a6)/(12*0.0295735296)))}function aO(){if(!(rows=$("#mashGrid").jqxGrid("getrows"))){return}if(ap==0){return}var a3=0;for(var a4=0;a4<rows.length;a4++){var a5=$("#mashGrid").jqxGrid("getrowdata",a4);if(a5.step_type==0){a3+=a5.step_infuse_amount}$("#mashGrid").jqxGrid("setcellvalue",a4,"step_thickness",a3/ap)}}function af(a4){console.log("calcFermentablesFromOG("+a4+")");var a3=parseFloat($("#efficiency").jqxNumberInput("decimal"));var bb=sg_to_plato(a4)*parseFloat($("#batch_size").jqxNumberInput("decimal"))*a4/100;var a8=0;var ba=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;for(var a5=0;a5<ba;a5++){var bc=$("#fermentableGrid").jqxGrid("getrowdata",a5);if(bc.f_added<4){var a9=bc.f_percentage/100*(bc.f_yield/100)*(1-bc.f_moisture/100);if(bc.f_added==0){a9=a3/100*a9}a8+=a9}}var a7=0;if(a8){a7=Math.round((bb/a8)*1000)/1000}if(a7){for(a5=0;a5<ba;a5++){var bc=$("#fermentableGrid").jqxGrid("getrowdata",a5);if(bc.f_added<4){var a6=Math.round(bc.f_percentage*10*a7)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",a5,"f_amount",a6)}}}}function v(){var a4=d.brew_fermenter_sg;if(a4<=1.0001&&d.fg>1){a4=d.fg}else{if(a4<=1.0001){a4=d.est_og}}var a3=sg_to_plato(a4);var a5=d.brew_fermenter_volume;if(a5<=0){a5=d.batch_size-d.eq_trub_chiller_loss}var i=w*a5*a3;return i}function L(a4,a6,a3,a5){var i;if(a3==1){i=0.15}else{if(a4>50){i=0.1}else{i=15.25/(6*Math.sqrt(2*Math.PI))*Math.exp(-0.5*Math.pow((a4-21)/6,2));if(i<0.1){i=0.1}}}return(i*a5*1000)/a6}function h(a4,a6,a3,a5){var i=0;if(a3==5){i=1.33}else{if(a4>20){i=0}else{if(a4>7.5){i=10.03/(4*Math.sqrt(2*Math.PI))*Math.exp(-0.5*Math.pow((a4-7.5)/4,2))}else{if(a3==2){i=1}else{if(a3==3){i=1.2}else{if(a3==4){i=1.2}}}}}}return(i*a5*1000)/a6}function at(){var a4=0;var a3=0;var a6={};V=aY=0;if(!(a6=$("#hopGrid").jqxGrid("getrows"))){return}ab=1;for(var a5=0;a5<a6.length;a5++){var a7=a6[a5];a4+=toIBU(a7.h_useat,a7.h_form,al,parseFloat(d.batch_size),parseFloat(a7.h_amount),parseFloat(a7.h_time),parseFloat(a7.h_alpha),d.ibu_method);a3+=toIBU(a7.h_useat,a7.h_form,al,parseFloat(d.brew_fermenter_volume)+parseFloat(d.brew_fermenter_tcloss),parseFloat(a7.h_amount),parseFloat(a7.h_time),parseFloat(a7.h_alpha),d.ibu_method);aY+=L(parseFloat(a7.h_time),parseFloat(d.batch_size),a7.h_useat,parseFloat(a7.h_amount));V+=h(parseFloat(a7.h_time),parseFloat(d.batch_size),a7.h_useat,parseFloat(a7.h_amount));if((((d.inventory_reduced<=2)&&(a7.h_useat<=4))||((d.inventory_reduced<=6)&&(a7.h_useat==5)))&&(a7.h_inventory<a7.h_amount)){ab=0}}a4=Math.round(a4*10)/10;a3=Math.round(a3*10)/10;aY=Math.round(aY*1000/5)/10;V=Math.round(V*1000/6)/10;if(aY>100){aY=100}if(V>100){V=100}console.log("calcIBUs(): "+a4+"  flavour: "+aY+"  aroma: "+V+"  fermenter:"+a3+" supplies:"+ab);d.est_ibu=a4;$("#est_ibu").val(a4);$("#est_ibu2").val(a4);$("#hop_flavour").jqxProgressBar("val",aY);$("#hop_aroma").jqxProgressBar("val",V);$("#brew_fermenter_ibu").val(a3);aV();H()}function O(a4,a5,a3){var i=a5/a3;if(i>3.5){return 0}if(a4==2){return 0.4}if(a4==1){return 0.62}if(i<=1.4){return 1.4}return 2.33-(0.67*i)}function aC(a4,a9,a3){var i=2.72715;var ba=a3/a4*1000;var a5=Math.round(ba*10)/10;var a6=(d.starter_sg-1)*a4*i;var a7=O(a9,a3,a6);var a8=Math.round(a6*a7*10)/10;var bb=parseFloat(a8)+a3;console.log("svol:"+a4+" start:"+a3+" irate:"+a5+" egrams:"+a6+" grate:"+a7+" ncells:"+a8);return{svol:a4,irate:a5,prate:Math.round(ba*10)/10,ncells:a8,totcells:bb,growf:Math.round(a8/a3*100)/100}}function G(a9,a3,ba){var a8=[20,40,60,80,100,150,200,250,375,500,625,750,875,1000,1250,1500,2000,2500,3000,4000,5000];var a4=a8.length;var a5=0;var a6=0;var bb={};if((parseFloat($("#prop1_volume").jqxNumberInput("decimal"))+parseFloat($("#prop2_volume").jqxNumberInput("decimal"))+parseFloat($("#prop3_volume").jqxNumberInput("decimal"))+parseFloat($("#prop4_volume").jqxNumberInput("decimal")))==0){for(var a7=1;a7<5;a7++){$("#prop"+a7+"_type").hide();$("#r"+a7+"_pmpt").show();$("#prop"+a7+"_type").val(a9);$("#prop"+a7+"_volume").hide();$("#prop"+a7+"_volume").val(0);$("#prop"+a7+"_irate").hide();$("#prop"+a7+"_ncells").hide();$("#prop"+a7+"_tcells").hide();$("#prop"+a7+"_growf").hide()}if(a3>ba){return}$("#prop1_type").show();$("#r1_pmpt").hide();$("#prop1_volume").show();$("#prop1_irate").show();$("#prop1_ncells").show();$("#prop1_tcells").show();$("#prop1_growf").show();for(var a7=a6;a7<=a4;a7++){a6=a7;a5=a8[a6];bb=aC(a5,a9,a3);if(bb.irate<25){a6=a7-1;a5=a8[a6];bb=aC(a5,a9,a3);break}if(bb.totcells>ba||a7==a4){break}}$("#prop1_volume").val(bb.svol/1000);$("#prop1_irate").val(bb.prate);$("#prop1_ncells").val(bb.ncells);$("#prop1_tcells").val(bb.totcells);$("#prop1_growf").val(bb.growf);if(bb.totcells>ba){return}$("#r2_pmpt").hide();$("#prop2_type").val(a9);$("#prop2_type").show();$("#prop2_volume").show();$("#prop2_irate").show();$("#prop2_ncells").show();$("#prop2_tcells").show();$("#prop2_growf").show();for(var a7=a6;a7<=a4;a7++){a6=a7;a5=a8[a6];bb=aC(a5,a9,$("#prop1_tcells").val());if(bb.irate<25){a6=a7-1;a5=a8[a6];bb=aC(a5,a9,$("#prop1_tcells").val());break}if(bb.totcells>ba||a7==a4){break}}$("#prop2_volume").val(bb.svol/1000);$("#prop2_irate").val(bb.prate);$("#prop2_ncells").val(bb.ncells);$("#prop2_tcells").val(bb.totcells);$("#prop2_growf").val(bb.growf);if(bb.totcells>ba){return}$("#r3_pmpt").hide();$("#prop3_type").val(a9);$("#prop3_type").show();$("#prop3_volume").show();$("#prop3_irate").show();$("#prop3_ncells").show();$("#prop3_tcells").show();$("#prop3_growf").show();for(var a7=a6;a7<=a4;a7++){a6=a7;a5=a8[a6];bb=aC(a5,a9,$("#prop2_tcells").val());if(bb.irate<25){a6=a7-1;a5=a8[a6];bb=aC(a5,a9,$("#prop2_tcells").val());break}if(bb.totcells>ba||a7==a4){break}}$("#prop3_volume").val(bb.svol/1000);$("#prop3_irate").val(bb.prate);$("#prop3_ncells").val(bb.ncells);$("#prop3_tcells").val(bb.totcells);$("#prop3_growf").val(bb.growf);if(bb.totcells>ba){return}$("#r4_pmpt").hide();$("#prop4_type").val(a9);$("#prop4_type").show();$("#prop4_volume").show();$("#prop4_irate").show();$("#prop4_ncells").show();$("#prop4_tcells").show();$("#prop4_growf").show();for(var a7=a6;a7<=a4;a7++){a6=a7;a5=a8[a6];bb=aC(a5,a9,$("#prop3_tcells").val());if(bb.totcells>ba||a7==a4){$("#prop4_volume").val(bb.svol/1000);$("#prop4_irate").val(bb.prate);$("#prop4_ncells").val(bb.ncells);$("#prop4_tcells").val(bb.totcells);$("#prop4_growf").val(bb.growf);return}}}else{if(d.prop1_volume>0){$("#r1_pmpt").hide();$("#prop1_type").show();$("#prop1_volume").show();$("#prop1_irate").show();$("#prop1_ncells").show();$("#prop1_tcells").show();$("#prop1_growf").show();bb=aC($("#prop1_volume").val()*1000,d.prop1_type,a3);$("#prop1_irate").val(bb.prate);$("#prop1_ncells").val(bb.ncells);$("#prop1_tcells").val(bb.totcells);$("#prop1_growf").val(bb.growf)}if(d.prop2_volume>0){$("#r2_pmpt").hide();$("#prop2_type").show();$("#prop2_volume").show();$("#prop2_irate").show();$("#prop2_ncells").show();$("#prop2_tcells").show();$("#prop2_growf").show();bb=aC($("#prop2_volume").val()*1000,d.prop2_type,$("#prop1_tcells").val());$("#prop2_irate").val(bb.prate);$("#prop2_ncells").val(bb.ncells);$("#prop2_tcells").val(bb.totcells);$("#prop2_growf").val(bb.growf)}if(d.prop3_volume>0){$("#r3_pmpt").hide();$("#prop3_type").show();$("#prop3_volume").show();$("#prop3_irate").show();$("#prop3_ncells").show();$("#prop3_tcells").show();$("#prop3_growf").show();bb=aC($("#prop3_volume").val()*1000,d.prop3_type,$("#prop2_tcells").val());$("#prop3_irate").val(bb.prate);$("#prop3_ncells").val(bb.ncells);$("#prop3_tcells").val(bb.totcells);$("#prop3_growf").val(bb.growf)}if(d.prop4_volume>0){$("#r4_pmpt").hide();$("#prop4_type").show();$("#prop4_volume").show();$("#prop4_irate").show();$("#prop4_ncells").show();$("#prop4_tcells").show();$("#prop4_growf").show();bb=aC($("#prop4_volume").val()*1000,d.prop4_type,$("#prop3_tcells").val());$("#prop4_irate").val(bb.prate);$("#prop4_ncells").val(bb.ncells);$("#prop4_tcells").val(bb.totcells);$("#prop4_growf").val(bb.growf)}}}function Y(){var a6=d.brew_fermenter_sg;if(a6<=1.0001&&d.fg>1){a6=d.fg}else{if(a6<=1.0001){a6=d.est_og}}var a3=sg_to_plato(a6);var a8=d.brew_fermenter_volume;if(a8>0){if(d.brew_fermenter_extrawater>0){a8+=d.brew_fermenter_extrawater}}else{a8=d.batch_size-d.eq_trub_chiller_loss}$("#yeast_cells").val(aa);if(!(rows=$("#yeastGrid").jqxGrid("getrows"))){return}var ba=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(ba==0){return}for(var a4=0;a4<ba;a4++){var a9=$("#yeastGrid").jqxGrid("getrowdata",a4);if(a9.y_use==0){w=0.75;if(d.est_og>1.06){w=1}if(a9.y_type==0){w*=2}if(a9.y_form==1){}else{}}}var a7=w*a8*a3;console.log("calcYeast() pitchrate:"+w+" start:"+aa+" needed:"+a7+" volume:"+a8);$("#need_cells").val(a7);var a5=aa;if(d.starter_enable){G(d.starter_type,aa,a7);for(var a4=1;a4<5;a4++){$("#r"+a4+"_irate").html("");$("#r"+a4+"_growf").html("");$("#r"+a4+"_tcells").html("");if(parseFloat($("#prop"+a4+"_volume").val())>0){if((parseFloat($("#prop"+a4+"_irate").val())<25)||(parseFloat($("#prop"+a4+"_irate").val())>100)){$("#r"+a4+"_irate").html("<img src='images/dialog-error.png'>")}else{$("#r"+a4+"_irate").html("<img src='images/dialog-ok-apply.png'>")}if(parseFloat($("#prop"+a4+"_growf").val())<1){$("#r"+a4+"_growf").html("<img src='images/dialog-error.png'>")}if(($("#prop"+a4+"_type").val()>0)&&(parseFloat($("#prop"+a4+"_growf").val())>3)){$("#r"+a4+"_growf").html("<img src='images/dialog-error.png'>")}if(parseFloat($("#prop"+a4+"_tcells").val())>a7){$("#r"+a4+"_tcells").html("<img src='images/dialog-ok-apply.png'>")}a5=parseFloat($("#prop"+a4+"_tcells").val())}else{$("#r"+a4+"_irate").html("")}}}$("#plato_cells").val(parseFloat(a5/(a8*a3)))}function aj(a5){console.log("adjustHops("+a5+")");var a7=$("#hopGrid").jqxGrid("getdatainformation").rowscount;if(a7==0){return}for(var a4=0;a4<a7;a4++){var a6=$("#hopGrid").jqxGrid("getrowdata",a4);var a3=a6.h_amount*a5;$("#hopGrid").jqxGrid("setcellvalue",a4,"h_amount",a3)}}function aG(){ai=1;var a5=$("#miscGrid").jqxGrid("getdatainformation").rowscount;if(a5==0){return}for(var a3=0;a3<a5;a3++){var a4=$("#miscGrid").jqxGrid("getrowdata",a3);if((((d.inventory_reduced<=2)&&(a4.m_use_use<=2))||((d.inventory_reduced<=3)&&(a4.m_use_use==3))||((d.inventory_reduced<=5)&&(a4.m_use_use==4))||((d.inventory_reduced<=6)&&(a4.m_use_use==5)))&&(a4.m_inventory<a4.m_amount)){ai=0}}H()}function a2(a5){console.log("adjustMiscs("+a5+")");var a7=$("#miscGrid").jqxGrid("getdatainformation").rowscount;if(a7==0){return}for(var a4=0;a4<a7;a4++){var a6=$("#miscGrid").jqxGrid("getrowdata",a4);var a3=a6.m_amount*a5;$("#miscGrid").jqxGrid("setcellvalue",a4,"m_amount",a3);switch(a6.m_name){case"CaCl2":$("#wa_cacl2").val(a6.m_amount*1000);break;case"CaSO4":$("#wa_caso4").val(a6.m_amount*1000);break;case"MgSO4":$("#wa_mgso4").val(a6.m_amount*1000);break;case"NaCl":$("#wa_nacl").val(a6.m_amount*1000);break;case"Melkzuur":case"Zoutzuur":case"Fosforzuur":case"Zwavelzuur":$("#wa_acid").val(a6.m_amount*1000);break;case"NaHCO3":case"Na2CO3":case"CaCO3":case"Ca(OH)2":$("#wa_base").val(a6.m_amount*1000);break}}}function aP(a5){console.log("adjustYeasts("+a5+")");var a7=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(a7==0){return}for(var a4=0;a4<a7;a4++){var a6=$("#yeastGrid").jqxGrid("getrowdata",a4);if(a6.y_form==1){var a3=a6.y_amount*a5;$("#yeastGrid").jqxGrid("setcellvalue",a4,"y_amount",a3)}}Y()}function av(a5){console.log("adjustWaters("+a5+")");var a7=$("#mashGrid").jqxGrid("getdatainformation").rowscount;if(a7==0){return}D=0;for(var a4=0;a4<a7;a4++){var a6=$("#mashGrid").jqxGrid("getrowdata",a4);if(a6.step_type==0){var a3=Math.round(a6.step_infuse_amount*a5*10)/10;$("#mashGrid").jqxGrid("setcellvalue",a4,"step_infuse_amount",a3);D+=a3}}if(d.w2_amount==0){d.w1_amount=D;$("#w1_amount").val(D)}else{d.w1_amount=(d.w1_amount/(d.w1_amount+d.w2_amount))*D;d.w2_amount=(d.w2_amount/(d.w1_amount+d.w2_amount))*D;$("#w1_amount").val(d.w1_amount);$("#w2_amount").val(d.w2_amount)}$("#wg_amount").val(D)}function a1(){if(parseFloat($("#brew_mash_sg").jqxNumberInput("decimal"))<1.002){return}var a3=sg_to_plato(a0);var i=sg_to_plato(parseFloat($("#brew_mash_sg").jqxNumberInput("decimal")));if(a3>0.5){$("#brew_mash_efficiency").val(100*i/a3)}else{$("#brew_mash_efficiency").val(0)}}function y(){var a4=0;var a7={};if(!(a7=$("#fermentableGrid").jqxGrid("getrows"))){return}for(var a6=0;a6<a7.length;a6++){var a8=a7[a6];if(a8.f_added==0){a4+=a8.f_amount*(a8.f_yield/100)*(1-a8.f_moisture/100)}}var a5=sg_to_plato(d.brew_preboil_sg)*(d.brew_preboil_volume/1.04)*d.brew_preboil_sg*10/1000;var a3=0;if(a4>0){a3=Math.round((a5/a4*100)*10)/10}if(a3<0){a3=0}$("#brew_preboil_efficiency").val(a3)}function S(){var a5=0;var a4=0;var a8={};if(!(a8=$("#fermentableGrid").jqxGrid("getrows"))){return}for(var a7=0;a7<a8.length;a7++){var a9=a8[a7];if(a9.f_added==0){a5+=a9.f_amount*(a9.f_yield/100)*(1-a9.f_moisture/100)}else{if(a9.f_added==1){a4+=a9.f_amount*(a9.f_yield/100)*(1-a9.f_moisture/100)}}}var a6=sg_to_plato(d.brew_aboil_sg)*(d.brew_aboil_volume/1.04)*d.brew_aboil_sg*10/1000;a6-=a4;var a3=0;if(a5>0){a3=Math.round((a6/a5*100)*10)/10}if(a3<0){a3=0}d.brew_aboil_efficiency=a3;$("#brew_aboil_efficiency").val(a3)}function R(){var i=(d.est_og-1)*1000;if(i>0){return d.est_ibu/i}else{return 0.5}}function l(){var i=R();return(-1.2*i+1.4)}function aB(a3,a5){var a8=$("#miscGrid").jqxGrid("getrows");if(a5==0){for(var a4=0;a4<a8.length;a4++){var a9=a8[a4];if(a9.m_name==a3){var ba=$("#miscGrid").jqxGrid("getrowid",a4);$("#miscGrid").jqxGrid("deleterow",ba)}}}else{var a7=false;for(var a4=0;a4<a8.length;a4++){var a9=a8[a4];if(a9.m_name==a3){a7=true;$("#miscGrid").jqxGrid("setcellvalue",a4,"m_amount",a5/1000);break}}if(!a7){var a6=new $.jqx.dataAdapter(miscInvSource,{loadComplete:function(){var bc=a6.records;for(var bd=0;bd<bc.length;bd++){var bb=bc[bd];if(bb.name==a3){var be={};be.m_name=bb.name;be.m_amount=a5/1000;be.m_cost=bb.cost;be.m_type=bb.type;be.m_use_use=bb.use_use;be.m_time=0;be.m_amount_is_weight=bb.amount_is_weight;be.m_inventory=bb.inventory;be.m_avail=1;$("#miscGrid").jqxGrid("addrow",null,be)}}}});a6.dataBind();return}}}function m(a3,i){if((i=="laag")||(i=="hoog")){$("#wr_"+a3).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+i+"</span>")}else{$("#wr_"+a3).html("<img src='images/dialog-ok-apply.png'>")}}function aQ(a5,a4,a3,i){if((a5+a4)>0){return((a5*a3)+(a4*i))/(a5+a4)}return 0}function ar(a4,a3,i){return a4-(a3/1.4+i/1.7)}var aA=4.445e-7;var ay=4.68e-11;function A(a3){var i=Math.pow(10,-a3);return 100*aA*ay/(i*i+i*aA+aA*ay)}function az(a3){var i=Math.pow(10,-a3);return 100*aA*i/(i*i+i*aA+aA*ay)}function ax(i){return(-2*A(i)-az(i))}function K(a3){var a6=ax(4.3);var a4=ax(parseFloat($("#wg_ph").jqxNumberInput("decimal")));var i=ax(a3);var a8=-a6+a4;var a7=parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal"))/50/a8;var a5=-i+a4;return a7*a5}function am(a3){var i=parseFloat($("#wg_calcium").jqxNumberInput("decimal"))/(B/2);var a4=parseFloat($("#wg_magnesium").jqxNumberInput("decimal"))/(aq/2);var a5=K(a3);return a5-(i/3.5+a4/7)}function M(a4){var a9=am(a4)*parseFloat($("#wg_amount").jqxNumberInput("decimal"));var a7=$("#fermentableGrid").jqxGrid("getrows");for(var a5=0;a5<a7.length;a5++){var a8=a7[a5];if(a8.f_added==0&&a8.f_graintype!=6){var a6=0;if((a8.f_di_ph!=5.7)&&((a8.f_acid_to_ph_57<-0.1)||(a8.f_acid_to_ph_57>0.1))){a6=a8.f_acid_to_ph_57/(a8.f_di_ph-5.7)}else{var a3=a8.f_color;switch(a8.f_graintype){case 0:case 3:case 5:a6=0.014*a3-34.192;break;case 2:a6=-0.0597*a3-32.457;break;case 1:a6=0.0107*a3-54.768;break;case 4:a6=-149;break}}x=a6*(a4-a8.f_di_ph);a9+=x*a8.f_amount}}return a9}function aN(){var a6=0;var a4=5.4;var a3=0.001;var a5=0.1;var i=M(a4);while(((i<-a5)||(i>a5))&&(a6<2000)){a6++;if(i<-a5){a4-=a3}else{if(i>a5){a4+=a3}}i=M(a4)}console.log("MashpH() n: "+a6+" pH: "+a4);return a4}function t(i){switch(i){case 0:return{pK1:3.86,pK2:20,pK3:20,MolWt:90.08,AcidSG:1214,AcidPrc:0.88};case 1:return{pK1:-7,pK2:20,pK3:20,MolWt:36.46,AcidSG:1142,AcidPrc:0.28};case 2:return{pK1:2.12,pK2:7.2,pK3:12.44,MolWt:98,AcidSG:1170,AcidPrc:0.25};case 3:return{pK1:-1,pK2:1.92,pK3:20,MolWt:98.07,AcidSG:1700,AcidPrc:0.93}}}function Q(){console.log("calcWater()");var bk=0;var bz=0;var ba=0;var bl=0;var bb=0;var bw=0;var bc=0;var bu=0;var be=0;var bn=0;var bF=0;var bD=0;var bA=0;if(d.w1_name==""){return}if(d.w2_name!=""){bk=d.w1_amount+d.w2_amount;bz=aQ(d.w1_amount,d.w2_amount,d.w1_calcium,d.w2_calcium);ba=aQ(d.w1_amount,d.w2_amount,d.w1_magnesium,d.w2_magnesium);bl=aQ(d.w1_amount,d.w2_amount,d.w1_sodium,d.w2_sodium);bc=aQ(d.w1_amount,d.w2_amount,d.w1_chloride,d.w2_chloride);bu=aQ(d.w1_amount,d.w2_amount,d.w1_sulfate,d.w2_sulfate);bb=aQ(d.w1_amount,d.w2_amount,d.w1_total_alkalinity,d.w2_total_alkalinity);be=-Math.log10(((Math.pow(10,-d.w1_ph)*d.w1_amount)+(Math.pow(10,-d.w2_ph)*d.w2_amount))/bk)}else{bk=d.w1_amount;bz=d.w1_calcium;ba=d.w1_magnesium;bl=d.w1_sodium;bc=d.w1_chloride;bu=d.w1_sulfate;bb=d.w1_total_alkalinity;be=d.w1_ph}$("#wg_amount").val(bk);var bB=bz;$("#wg_calcium").val(Math.round(bz*10)/10);$("#wg_magnesium").val(Math.round(ba*10)/10);var bm=bl;$("#wg_sodium").val(Math.round(bl*10)/10);var bC=bb;$("#wg_total_alkalinity").val(Math.round(bb*10)/10);var a8=bc;$("#wg_chloride").val(Math.round(bc*10)/10);var bv=bu;$("#wg_sulfate").val(Math.round(bu*10)/10);$("#wg_ph").val(Math.round(be*10)/10);$("#wb_ph").val(Math.round(aN()*10)/10);$("#est_mash_ph").val(Math.round(aN()*10)/10);bw=bb*1.22;var a4=bw;bn=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*B/T+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*B/an;bz+=1000*bn/bk;bn=parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*aq/aK;ba+=1000*bn/bk;bn=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ad/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ad/aF;bl+=1000*bn/bk;bn=parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*aI/an+parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*aI/aK;bu+=1000*bn/bk;bn=2*parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*q/T+parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*q/b;bc+=1000*bn/bk;if($("#wa_acid_name").val()<0||$("#wa_acid_name").val()>3){$("#wa_acid_name").val(0);d.wa_acid_name=0}if(ag==""){ag=AcidTypeData[$("#wa_acid_name").val()].nl}if($("#wa_base_name").val()<0||$("#wa_base_name").val()>3){$("#wa_base_name").val(0);d.wa_base_name=0}if(aU==""){aU=BaseTypeData[$("#wa_base_name").val()].nl}var by=d.wa_acid_name;var bo=d.wa_base_name;var bg=t(by);var a5=bg.pK1;var a3=bg.pK2;var i=bg.pK3;var bf=bg.MolWt;var a7=bg.AcidSG;var a6=bg.AcidPrc;if(d.calc_acid){bD=parseFloat(d.mash_ph);bA=M(bD);console.log("calc_acid tgt: "+bD+" protonDeficit: "+bA);if(bA>0){$("#wa_base").val(0);aB(aU,0);bF=CalcFrac(bD,a5,a3,i);Acid=bA/bF;Acid*=bf;Acidmg=Acid;Acid=Acid/a7;if(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))==0){$("#wa_acid_perc").val(a6)}Acid=Acid*a6/(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))/100);console.log("Final ml: "+Acid);$("#wa_acid").val(Math.round(Acid*100)/100);aB(AcidTypeData[by].nl,Math.round(Acid*100)/100);bw=bw-bA*bF/bk;bb=bw*50/61}else{if(bA<0){$("#wa_acid").val(0);aB(ag,0);var bq=Math.pow(10,(bD-6.38));var bi=Math.pow(10,(bD-10.38));var a9=1/(1+bq+bq*bi);var br=a9*bq;var bj=br*bi;switch(bo){case 0:bn=-bA/(a9-bj);bn=bn*aF/1000;$("#wa_base").val(Math.round(bn*100)/100);aB("NaHCO3",Math.round(bn*100)/100);if(bk>0){bn=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ad/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ad/aF;bn=1000*bn/bk;bl=bm+bn;bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/aF;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 1:bn=-bA/(2*a9+br);bn=bn*z/1000;$("#wa_base").val(Math.round(bn*100)/100);aB("Na2CO3",Math.round(bn*100)/100);if(bk>0){bn=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ad/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*2*ad/z;bn=1000*bn/bk;bl=bm+bn;bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/z;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 2:bn=-bA*(a9-bj);bn=bn*g/1000;bn=3*bn;$("#wa_base").val(Math.round(bn*100)/100);aB("CaCO3",Math.round(bn*100)/100);if(bk>0){bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))/3*r/g;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*B/T+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*B/an+parseFloat($("#wa_base").jqxNumberInput("decimal"))*B/g;bn=1000*bn/bk;bz=bB+bn;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 3:bn=-bA/19.3;$("#wa_base").val(Math.round(bn*100)/100);aB("Ca(OH)2",Math.round(bn*100)/100);if(bk>0){bn=-bA/bk;bb=bC+bn;bw=bb*61/50;bn=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*B/T+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*B/an+parseFloat($("#wa_base").jqxNumberInput("decimal"))*B/aJ;bn=1000*bn/bk;bz=bB+bn;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium)}break}}}be=bD;$("#wb_ph").val(Math.round(be*10)/10);$("#est_mash_ph").val(Math.round(be*10)/10)}else{console.log("calc_acid no");if(parseFloat($("#wa_base").jqxNumberInput("decimal"))>0){if(bk>0){switch(bo){case 0:bn=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ad/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ad/aF;bn=1000*bn/bk;bl=bm+bn;bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/aF;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium);break;case 1:bn=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ad/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*2*ad/z;bn=1000*bn/bk;bl=bm+bn;bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/z;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium);break;case 2:bn=parseFloat($("#wa_base").jqxNumberInput("decimal"))/3*r/g;bn=1000*bn/bk;bw=a4+bn;bb=bw*50/61;bn=ar(wb_total_alkalinity,wb_calcium,wb_magnesium);bn=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*B/T+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*B/an+parseFloat($("#wa_base").jqxNumberInput("decimal"))*B/g;bn=1000*bn/bk;bz=bB+bn;break}}}bD=parseFloat(d.mash_ph);pHa=aN();if(parseFloat($("#wa_acid").jqxNumberInput("decimal"))>0){console.log("TpH: "+bD+" water: "+pHa);Acid=parseFloat($("#wa_acid").jqxNumberInput("decimal"));if(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))==0){$("#wa_acid_perc").val(a6)}Acid=Acid/a6*(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))/100);Acid*=a7;Acid/=bf;Acidmg=Acid;bF=CalcFrac(pHa,a5,a3,i);bA=Acid*bF;var bx=0.001;var bp=0.1;var bh=M(pHa);var bt=0;while(((bh<(bA-bp))||(bh>(bA+bp)))&&(bt<2000)){bt++;if(bh<(bA-bp)){pHa-=bx}else{if(bh>(bA+bp)){pHa+=bx}}bF=CalcFrac(pHa,a5,a3,i);bA=Acid*bF;bh=M(pHa)}console.log("n: "+bt+" pd: "+bh+" protonDeficit: "+bA+" frac: "+bF+" pHa: "+pHa);bn=a4-bA*bF/bk;bw=bn;bb=bn*50/61;be=pHa;$("#wb_ph").val(Math.round(be*10)/10);$("#est_mash_ph").val(Math.round(be*10)/10)}}if((by==3)&&(bk>0)){bn=parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*aI/an+parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*aI/aK+Acidmg/1000*aI/(aI+2);bn=1000*bn/bk;bu=bv+bn}else{if((by==1)&&(bk>0)){bn=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*q/T+parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*q/b+Acidmg/1000*q/(q+1);bn=1000*bn/bk;bc=a8+bn}}$("#tgt_bu").val(Math.round(R()*100)/100);if(R()<0.32){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Zeer moutig en zoet</span>")}else{if(R()<0.43){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Moutig, zoet</span>")}else{if(R()<0.52){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Evenwichtig</span>")}else{if(R()<0.63){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Licht hoppig, bitter</span>")}else{$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Extra hoppig, zeer bitter</span>")}}}}$("#tgt_cl_so4").val(Math.round(l()*10)/10);if(bu>0){bn=bc/bu}else{bn=10}$("#got_cl_so4").val(Math.round(bn*10)/10);var bE=0.8*l();var bs=1.2*l();var bd="normaal";if(bn<bE){bd="laag"}else{if(bn>bs){bd="hoog"}}m("cl_so4",bd);$("#wb_calcium").val(Math.round(bz*10)/10);$("#wb_magnesium").val(Math.round(ba*10)/10);$("#wb_sodium").val(Math.round(bl*10)/10);$("#wb_sulfate").val(Math.round(bu*10)/10);$("#wb_chloride").val(Math.round(bc*10)/10);$("#wb_total_alkalinity").val(Math.round(bb*10)/10);if(bz<40){m("calcium","laag")}else{if(bz>150){m("calcium","hoog")}else{m("calcium","normaal")}}if(ba>=0&&ba<=30){m("magnesium","normaal")}else{m("magnesium","hoog")}if(bl<=150){m("sodium","normaal")}else{m("sodium","hoog")}if(bc<=50){m("chloride","laag")}else{if(bc<=100){m("chloride","normaal")}else{m("chloride","hoog")}}if(bu<=50){m("sulfate","laag")}else{if(bu<=350){m("sulfate","normaal")}else{m("sulfate","hoog")}}if(be<5.2){m("ph","laag")}else{if(be>5.6){m("ph","hoog")}else{m("ph","normaal")}}j();aG();H()}function j(){var a5=d.sparge_ph;var bh=d.w1_ph;var bf=d.w1_total_alkalinity;if(d.sparge_source==1){if(d.w2_ph>0){bh=d.w2_ph;bf=d.w2_total_alkalinity}else{d.sparge_source=0;$("#sparge_source").val(0)}}else{if(d.sparge_source==2){if(d.w2_ph>0){bh=parseFloat($("#wg_ph").jqxNumberInput("decimal"));bf=parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal"))}else{d.sparge_source=0;$("#sparge_source").val(0)}}}var bn=Math.pow(10,bh-6.38);var bm=Math.pow(10,bh-10.373);var bq=1+bn+bn*bm;var bk=1/bq;var bj=bn*bm/bq;var bl=Math.pow(10,4.3-6.38);var a8=Math.pow(10,4.3-10.373);var bv=1+bl+bl*a8;var bt=1/bv;var a3=bl*a8/bv;var a7=bf/50;var ba=(a7-1000*(Math.pow(10,-4.3)-Math.pow(10,-bh)))/((bt-bk)+(bj-a3));var bg=Math.pow(10,a5-6.38);var br=Math.pow(10,a5-10.373);var bp=1+bg+bg*br;var bs=1/bp;var bi=bg*br/bp;var a4=ba*((bs-bk)+(bj-bi))+Math.pow(10,-a5)-Math.pow(10,-bh);a4+=0.01;if(d.sparge_acid_type<0||d.sparge_acid_type>3){d.sparge_acid_type=0;$("#sparge_acid_type").val(0)}var a9=d.sparge_acid_type;var be=t(a9);var bd=be.pK1;var bc=be.pK2;var bb=be.pK3;var bu=be.MolWt;var a6=be.AcidSG;var i=be.AcidPrc;var bo=CalcFrac(a5,bd,bc,bb);a4/=bo;a4*=bu;a4=a4/a6;var bk=d.sparge_acid_perc;if(bk<=0.1){bk=i}a4=a4*i/(bk/100);a4*=d.sparge_volume;a4=Math.round(a4*100)/100;d.sparge_acid_amount=a4/1000;$("#sparge_acid_amount").val(a4)}function N(){if(d.brew_fermenter_sg<1.02){return}if((d.primary_end_sg>0.99)&&(d.primary_end_sg<d.brew_fermenter_sg)){var a3=Round(100*(d.brew_fermenter_sg-d.primary_end_sg)/(d.brew_fermenter_sg-1),1);$("#primary_svg").val(a3);if((d.secondary_end_sg>0.99)&&(d.secondary_end_sg<d.brew_fermenter_sg)){var i=Round(100*(d.brew_fermenter_sg-d.secondary_end_sg)/(d.brew_fermenter_sg-1),1);$("#secondary_svg").val(i);if((d.fg>0.99)&&(d.fg<d.brew_fermenter_sg)){var a5=Round(100*(d.brew_fermenter_sg-d.fg)/(d.brew_fermenter_sg-1),1);$("#final_svg").val(a5);var a4=Round(abvol(d.brew_fermenter_sg,d.fg),2);$("#final_abv").val(a4)}}}}function ao(a3,i){var a4=i*1.8+32;return 3.0378-0.050062*a4+0.00026555*a4*a4}function X(a3,i,a5){var a4=a5*(a3-ao(a3,i))/0.286;if(a4<0){a4=0}return Round(a4,3)}function o(a3,a6,a5){var i=a3-ao(a3,a6);if(i<0){return 0}var a4=-1.09145427669121+0.00800006989646477*a5+0.000260276315484684*a5*a5+0.0215142075945119*a5*i+0.674996600795854*i+-0.00471757220150754*i*i;if(a4<0){a4=0}a4=a4*1.01325;return Round(a4,1)}function Z(a3,i){return(a3-(-0.000005594056*Math.pow(i,4)+0.000144357886*Math.pow(i,3)+0.000362999168*i*i-0.064872987645*i+1.641145175049))/(0.00000498031*Math.pow(i,4)-0.00024358267*Math.pow(i,3)+0.00385867329*i*i-0.05671206825*i+1.53801423376)}function aT(){var ba=d.secondary_temp;if(ba<1){ba=d.primary_end_temp}if(ba<1){ba=18}if(d.fg==0){var a7=abvol(d.brew_fermenter_sg,parseFloat($("#est_fg").jqxNumberInput("decimal")))}else{var a7=abvol(d.brew_fermenter_sg,d.fg)}var bb=d.package_volume-(a7*d.package_volume)/100;var a9=d.package_volume-bb;var bf=d.package_infuse_amount-(d.package_infuse_abv*d.package_infuse_amount)/100;var bc=d.package_infuse_amount-bf;var bh=a9+bc;var a3=bb+bf;a7=Round(bh/(a3+bh)*100,2);d.package_abv=a7;$("#package_abv").val(a7);if(!(rows=$("#fermentableGrid").jqxGrid("getrows"))){return}d.bottle_priming_amount=0;d.bottle_priming_total=0;for(var a6=0;a6<rows.length;a6++){var bi=rows[a6];if(bi.f_added==4){var be=1/((bi.f_yield/100)*(1-bi.f_moisture/100));d.bottle_priming_amount=X(d.bottle_carbonation,ba,be);d.bottle_priming_total=Round(d.bottle_amount*d.bottle_priming_amount,2);$("#fermentableGrid").jqxGrid("setcellvalue",a6,"f_amount",d.bottle_priming_total/1000)}}$("#bottle_priming_amount").val(Round(d.bottle_priming_amount,1));$("#bottle_priming_total").val(d.bottle_priming_total);var a8=a7+d.bottle_priming_amount*0.47/7.907;var a4=d.bottle_amount-(a8*d.bottle_amount)/100;var bh=d.bottle_amount-a4;var a3=a4+d.bottle_priming_water;var a5=Round(bh/(a3+bh)*100,2);$("#bottle_abv").val(a5);$("#bottle_pressure").val(o(d.bottle_carbonation,ba,d.bottle_carbonation_temp));var bd=Z(d.keg_carbonation,d.keg_carbonation_temp);if(bd<0){bd=0}d.keg_pressure=bd;$("#keg_pressure").val(Round(bd,1));d.keg_priming_amount=0;d.keg_priming_total=0;if(!d.keg_forced_carb){for(var a6=0;a6<rows.length;a6++){var bi=rows[a6];if(bi.f_added==5){var be=1/((bi.f_yield/100)*(1-bi.f_moisture/100));d.keg_priming_amount=X(d.keg_carbonation,ba,be);d.keg_priming_total=Round(d.keg_amount*d.keg_priming_amount,2);$("#fermentableGrid").jqxGrid("setcellvalue",a6,"f_amount",d.keg_priming_total/1000)}}$("#keg_priming_amount").val(Round(d.keg_priming_amount,1));$("#keg_priming_total").val(d.keg_priming_total);var a8=a7+d.keg_priming_amount*0.47/7.907;var a4=d.keg_amount-(a8*d.keg_amount)/100;var bh=d.keg_amount-a4;var a3=a4+d.keg_priming_water;var bg=Round(bh/(a3+bh)*100,2);$("#keg_abv").val(bg)}else{$("#keg_priming_amount").val(0);$("#keg_priming_total").val(0);$("#keg_abv").val(a7)}}function aV(){var a6=d.stage;if(a6==0&&d.est_og>1.005&&d.est_color>3&&d.est_ibu>3){a6=1}if(a6==1&&parseFloat($("#brew_date_start").val())>2000){a6=2}if(a6==2&&($("#brew_date_start").val()=="")){a6=1}if(a6==2&&parseFloat($("#brew_date_end").val())>2000){a6=3}if(a6==3&&parseFloat($("#primary_end_date").val())>2000){a6=4}if(a6==4&&parseFloat($("#secondary_end_date").val())>2000){a6=5}if(a6==5&&parseFloat($("#package_date").val())>2000){a6=6}if(a6>=6&&a6<9){var a5=new Date();var a3=$("#package_date").val();a3=a3.split("-");date1=new Date(a5.getFullYear(),a5.getMonth(),a5.getDate());a3=new Date(a3[0],a3[1]-1,a3[2]);date1_unixtime=parseInt(date1.getTime()/1000);date2_unixtime=parseInt(a3.getTime()/1000);var i=date1_unixtime-date2_unixtime;var a4=i/60/60/24;if(a4>0){if(a4>=42){a6=9}else{if(a4>=14){a6=8}else{a6=7}}}}if(a6==9&&parseFloat($("#taste_date").val())>2000){a6=10}if(a6!=d.stage){console.log("calcStage() old: "+d.stage+" new: "+a6);d.stage=a6}$("#stage").val(StageData[d.stage].nl);if(d.stage>=10){$("#locked").jqxCheckBox({disabled:false})}if(d.stage>1){$("#equipmentSelect").jqxDropDownList({disabled:true});$("#Delete").jqxButton({disabled:true})}if(d.stage<1){$("#jqxTabs").jqxTabs("disableAt",8)}else{$("#jqxTabs").jqxTabs("enableAt",8)}if(d.stage<3){$("#jqxTabs").jqxTabs("disableAt",9)}else{$("#jqxTabs").jqxTabs("enableAt",9);$("#name").jqxInput({disabled:true});$("#code").jqxInput({disabled:true});$("#batch_size").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#boil_size").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#boil_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#efficiency").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#est_og").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#type").jqxDropDownList({disabled:true});$("#styleSelect").jqxDropDownList({disabled:true});$("#color_method").jqxDropDownList({disabled:true});$("#ibu_method").jqxDropDownList({disabled:true});$("#mash_select").jqxDropDownList({disabled:true});$("#w1_name").jqxDropDownList({disabled:true});$("#w2_name").jqxDropDownList({disabled:true});$("#w2_amount").jqxNumberInput({readOnly:true});$("#pr_name").jqxDropDownList({disabled:true});$("#wa_cacl2").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_caso4").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_mgso4").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_nacl").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#mash_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#calc_acid").jqxCheckBox({disabled:true});$("#wa_base_name").jqxDropDownList({disabled:true});$("#wa_base").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_acid_name").jqxDropDownList({disabled:true});$("#wa_acid").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_acid_perc").jqxNumberInput({spinButtons:false,readOnly:true,width:70});$("#sparge_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_source").jqxDropDownList({disabled:true});$("#sparge_acid_type").jqxDropDownList({disabled:true});$("#sparge_acid_perc").jqxNumberInput({spinButtons:false,readOnly:true,width:false});$("#starter_enable").jqxCheckBox({disabled:true});$("#starter_type").jqxDropDownList({disabled:true});$("#starter_try").jqxButton({disabled:true});$("#starter_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#starter_viability").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage>3){$("#brew_date_start").jqxDateTimeInput({disabled:true});$("#brew_date_end").jqxDateTimeInput({disabled:true});$("#brew_mash_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_mash_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool9").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_to").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool7").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_method").jqxDropDownList({disabled:true});$("#brew_whirlpool6").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_sparge_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool2").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_type").jqxDropDownList({disabled:true});$("#brew_fermenter_tcloss").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_fermenter_extrawater").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_speed").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage==5){$("#package_date").jqxDateTimeInput({disabled:false})}else{$("#package_date").jqxDateTimeInput({disabled:true})}if(d.stage>=5){$("#primary_start_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_max_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_brix").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_date").jqxDateTimeInput({disabled:true})}if(d.stage>=6){$("#secondary_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#secondary_end_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#secondary_end_date").jqxDateTimeInput({disabled:true});$("#tertiary_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#fg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#final_brix").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_date").jqxDateTimeInput({disabled:true});$("#package_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_abv").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_notes").jqxInput({disabled:true});$("#package_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_priming_water").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_priming_water").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_carbonation").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_carbonation").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_priming_sugar").jqxDropDownList({disabled:true});$("#keg_priming_sugar").jqxDropDownList({disabled:true});$("#keg_forced_carb").jqxCheckBox({disabled:true});$("#bottle_carbonation_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_carbonation_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage<8){$("#jqxTabs").jqxTabs("disableAt",11)}else{$("#jqxTabs").jqxTabs("enableAt",11)}if(d.stage==11){$("#taste_date").jqxDateTimeInput({disabled:true});$("#taste_rate").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#taste_color").jqxInput({disabled:true});$("#taste_transparency").jqxInput({disabled:true});$("#taste_head").jqxInput({disabled:true});$("#taste_aroma").jqxInput({disabled:true});$("#taste_taste").jqxInput({disabled:true});$("#taste_aftertaste").jqxInput({disabled:true});$("#taste_mouthfeel").jqxInput({disabled:true});$("#taste_notes").jqxInput({disabled:true});$("#notes").jqxInput({disabled:true})}else{$("#notes").jqxInput({disabled:false})}}function J(){if(d.starter_enable){$("#propagator").show();$("#starter_type").jqxDropDownList({disabled:false});$("#starter_try").jqxButton({disabled:false});$("#starter_sg").jqxNumberInput({spinButtons:true,readOnly:false,width:110});$("#starter_viability").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}else{$("#propagator").hide();$("#starter_type").jqxDropDownList({disabled:true});$("#starter_try").jqxButton({disabled:true});$("#starter_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#starter_viability").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}}function aX(){console.log("calcInit()");a1();y();S();$("#starter_enable").on("checked",function(i){d.starter_enable=1;J();Y()});$("#starter_enable").on("unchecked",function(i){d.starter_enable=0;J();Y()});$("#starter_try").click(function(){$("#prop1_volume").val(0);$("#prop2_volume").val(0);$("#prop3_volume").val(0);$("#prop4_volume").val(0);Y()});$("#starter_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.starter_type=i;Y()}});$("#starter_sg").on("change",function(i){if(i.args){d.starter_sg=i.args.value;Y()}});$("#starter_viability").on("change",function(i){if(i.args){d.starter_viability=i.args.value;U();Y()}});$("#prop1_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.prop1_type=i;Y()}});$("#prop1_volume").on("change",function(i){if(i.args){d.prop1_volume=i.args.value;Y()}});$("#prop2_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.prop2_type=i;Y()}});$("#prop2_volume").on("change",function(i){if(i.args){d.prop2_volume=i.args.value;Y()}});$("#prop3_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.prop3_type=i;Y()}});$("#prop3_volume").on("change",function(i){if(i.args){d.prop3_volume=i.args.value;Y()}});$("#prop4_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.prop4_type=i;Y()}});$("#prop4_volume").on("change",function(i){if(i.args){d.prop4_volume=i.args.value;Y()}});$("#calc_acid").on("checked",function(i){d.calc_acid=1;Q()});$("#calc_acid").on("unchecked",function(i){d.calc_acid=0;Q()});$("#w1_name").jqxDropDownList("selectItem",d.w1_name);$("#w2_name").jqxDropDownList("selectItem",d.w2_name);if(parseFloat($("#w1_amount").jqxNumberInput("decimal"))==0&&D>0){$("#w1_amount").val(D);d.w1_amount=D;$("#wg_amount").val(D);$("#w2_amount").val(0);d.w2_amount=0}Q();$("#w2_amount").on("change",function(i){var a3=parseFloat(i.args.value);if(a3>D){$("#w2_amount").val(d.w2_amount);return}d.w1_amount=parseFloat($("#wg_amount").jqxNumberInput("decimal"))-a3;$("#w1_amount").val(d.w1_amount);d.w2_amount=a3;console.log("new: "+i.args.value+" w1: "+d.w1_amount+"  w2: "+d.w2_amount);Q()});$("#wa_cacl2").on("change",function(i){if(i.args){aB("CaCl2",0);aB("CaCl2",i.args.value);Q()}});$("#wa_caso4").on("change",function(i){if(i.args){aB("CaSO4",0);aB("CaSO4",i.args.value);Q()}});$("#wa_mgso4").on("change",function(i){if(i.args){aB("MgSO4",0);aB("MgSO4",i.args.value);Q()}});$("#wa_nacl").on("change",function(i){if(i.args){aB("NaCl",0);aB("NaCl",i.args.value);Q()}});$("#wa_base_name").on("change",function(a3){if(a3.args){var i=a3.args.index;console.log("wa_base_name "+i);aB(aU,0);aU=BaseTypeData[i].nl;aB(aU,parseFloat($("#wa_base").jqxNumberInput("decimal")));d.wa_base_name=i;Q()}});$("#wa_base").on("change",function(a3){var i=BaseTypeData[$("#wa_base_name").val()].nl;aB(i,parseFloat(a3.args.value));Q()});$("#wa_acid_name").on("change",function(a3){if(a3.args){var i=a3.args.index;console.log("wa_acid_name "+i);aB(ag,0);ag=AcidTypeData[i].nl;aB(ag,parseFloat($("#wa_acid").jqxNumberInput("decimal")));d.wa_acid_name=i;Q()}});$("#wa_acid").on("change",function(a3){var i=AcidTypeData[$("#wa_acid_name").val()].nl;aB(i,parseFloat(a3.args.value));Q()});$("#wa_acid_perc").on("change",function(i){Q()});$("#color_method").on("change",function(i){d.color_method=i.args.index;U()});$("#ibu_method").on("change",function(i){d.ibu_method=i.args.index;U();at()});$("#batch_size").on("change",function(a4){console.log("batch_size change:"+a4.args.value+" old:"+d.batch_size);$("#est_a_vol").val(a4.args.value*1.04);var a3=parseFloat(a4.args.value)+d.boil_size-d.batch_size;var i=parseFloat(a4.args.value)/d.batch_size;d.boil_size=a3;$("#boil_size").val(Math.round(a3*100)/100);$("#est_pre_vol").val(Math.round(a3*1.04*100)/100);d.sparge_volume*=i;$("#sparge_volume").val(d.sparge_volume);$("#brew_sparge_volume").val(d.sparge_volume);d.batch_size=parseFloat(a4.args.value);af(parseFloat($("#est_og").jqxNumberInput("decimal")));av(i);U();aj(i);a2(i);aP(i);at();Q();j();aO()});$("#boil_time").on("change",function(a4){console.log("boil_time change:"+parseFloat(a4.args.value)+" old:"+d.boil_time);var a5=parseFloat(d.boil_size)-parseFloat(d.batch_size);var i=a5*(parseFloat(a4.args.value)/d.boil_time);var a3=parseFloat(d.batch_size)+i;d.boil_time=parseFloat(a4.args.value);d.boil_size=a3;$("#est_pre_vol").val(Math.round(a3*1.04*100)/100);$("#boil_size").val(Math.round(a3*100)/100);U();at();Y()});$("#efficiency").on("change",function(a3){var i=parseFloat($("#est_og").jqxNumberInput("decimal"));d.efficiency=parseFloat(a3.args.value);console.log("efficiency change:"+d.efficiency+" est_og:"+i);af(i);U();at();Y()});$("#est_og").on("change",function(i){d.est_og=parseFloat(i.args.value);console.log("est_og change:"+d.est_og);$("#est_og2").val(d.est_og);af(d.est_og);U();at();aO();Y()});$("#mash_ph").on("change",function(i){d.mash_ph=parseFloat(i.args.value);Q()});$("#sparge_ph").on("change",function(i){d.sparge_ph=parseFloat(i.args.value);j()});$("#sparge_volume").on("change",function(i){d.sparge_volume=parseFloat(i.args.value);$("#brew_sparge_volume").val(d.sparge_volume);j()});$("#sparge_temp").on("change",function(i){d.sparge_temp=parseFloat(i.args.value);$("#brew_sparge_temperature").val(d.sparge_temp)});$("#sparge_source").on("change",function(a3){if(a3.args){var i=a3.args.index;d.sparge_source=i;j()}});$("#sparge_acid_type").on("change",function(a3){if(a3.args){var i=a3.args.index;d.sparge_acid_type=i;console.log("new sparge_acid_type: "+d.sparge_acid_type);j()}});$("#sparge_acid_perc").on("change",function(i){d.sparge_acid_perc=parseFloat(i.args.value);j()});N();aT();$("#package_volume").on("change",function(a3){var i=d.package_volume+d.package_infuse_amount;d.package_volume=parseFloat(a3.args.value);if(d.package_volume>d.brew_fermenter_volume){d.package_volume=d.brew_fermenter_volume;$("#package_volume").val(d.package_volume)}var a5=d.package_volume+d.package_infuse_amount;var a4=a5-i;if(i>0){d.bottle_amount+=(d.bottle_amount/i)*a4;d.keg_amount+=(d.keg_amount/i)*a4}else{d.bottle_amount=a5;d.keg_amount=0}console.log("diff:"+a4+" old:"+i+" bottle:"+d.bottle_amount+" keg:"+d.keg_amount);$("#bottle_amount").val(parseFloat(d.bottle_amount*1000)/1000);$("#keg_amount").val(parseFloat(d.keg_amount*1000)/1000);aT()});$("#package_infuse_amount").on("change",function(a3){var i=d.package_volume+d.package_infuse_amount;d.package_infuse_amount=parseFloat(a3.args.value);var a5=d.package_volume+d.package_infuse_amount;var a4=a5-i;if(i>0){d.bottle_amount+=(d.bottle_amount/i)*a4;d.keg_amount+=(d.keg_amount/i)*a4}else{d.bottle_amount=a5;d.keg_amount=0}console.log("diff:"+a4+" old:"+i+" bottle:"+d.bottle_amount+" keg:"+d.keg_amount);$("#bottle_amount").val(parseFloat(d.bottle_amount*1000)/1000);$("#keg_amount").val(parseFloat(d.keg_amount*1000)/1000);aT()});$("#package_infuse_abv").on("change",function(i){d.package_infuse_abv=parseFloat(i.args.value);aT()});$("#bottle_amount").on("change",function(a4){var a3=parseFloat(a4.args.value);var i=d.package_volume+d.package_infuse_amount;if(a3>i){a3=i}diff=d.bottle_amount-a3;d.bottle_amount=Math.round((d.bottle_amount-diff)*1000)/1000;d.keg_amount=Math.round((d.keg_amount+diff)*1000)/1000;$("#bottle_amount").val(parseFloat(d.bottle_amount));$("#keg_amount").val(parseFloat(d.keg_amount));aT()});$("#bottle_priming_water").on("change",function(i){d.bottle_priming_water=parseFloat(i.args.value);aT()});$("#keg_amount").on("change",function(a4){var a3=parseFloat(a4.args.value);var i=d.package_volume+d.package_infuse_amount;if(a3>i){a3=i}diff=d.keg_amount-a3;d.bottle_amount=Math.round((d.bottle_amount+diff)*1000)/1000;d.keg_amount=Math.round((d.keg_amount-diff)*1000)/1000;$("#bottle_amount").val(parseFloat(d.bottle_amount));$("#keg_amount").val(parseFloat(d.keg_amount));aT()});$("#keg_priming_water").on("change",function(i){d.keg_priming_water=parseFloat(i.args.value);aT()});$("#bottle_carbonation").on("change",function(i){d.bottle_carbonation=parseFloat(i.args.value);aT()});$("#bottle_carbonation_temp").on("change",function(i){d.bottle_carbonation_temp=parseFloat(i.args.value);aT()});$("#keg_carbonation").on("change",function(i){d.keg_carbonation=parseFloat(i.args.value);aT()});$("#keg_forced_carb").on("checked",function(i){d.keg_forced_carb=1;aT()});$("#keg_forced_carb").on("unchecked",function(i){d.keg_forced_carb=0;aT()});$("#keg_carbonation_temp").on("change",function(i){d.keg_carbonation_temp=parseFloat(i.args.value);aT()});$("#brew_fermenter_extrawater").on("change",function(i){d.brew_fermenter_extrawater=parseFloat(i.args.value);U();at();Y()});$("#brew_fermenter_tcloss").on("change",function(i){d.brew_fermenter_tcloss=parseFloat(i.args.value);U();at();Y()});$("#primary_end_sg").on("change",function(i){d.primary_end_sg=parseFloat(i.args.value);N()});$("#primary_end_brix").on("change",function(a3){if(d.brew_fermenter_sg>=1.02){OBrix=sg_to_brix(d.brew_fermenter_sg);FBrix=parseFloat(a3.args.value);var i=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-3.4e-8*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+8.6e-8*Math.pow(FBrix,3),4);if(FBrix>0.05){$("#primary_end_sg").val(i);d.primary_end_sg=i}N()}});$("#secondary_end_sg").on("change",function(i){d.secondary_end_sg=parseFloat(i.args.value);N()});$("#secondary_end_brix").on("change",function(a3){if(d.brew_fermenter_sg>=1.02){OBrix=sg_to_brix(d.brew_fermenter_sg);FBrix=parseFloat(a3.args.value);var i=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-3.4e-8*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+8.6e-8*Math.pow(FBrix,3),4);if(FBrix>0.05){$("#secondary_end_sg").val(i);d.secondary_end_sg=i}N()}});$("#final_brix").on("change",function(a3){if(d.brew_fermenter_sg>=1.02){OBrix=sg_to_brix(d.brew_fermenter_sg);FBrix=parseFloat(a3.args.value);var i=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-3.4e-8*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+8.6e-8*Math.pow(FBrix,3),4);if(FBrix>0.05){$("#fg").val(i);d.fg=i}N()}});$("#fg").on("change",function(i){d.fg=parseFloat(i.args.value);N()});$("#BLog").jqxButton({disabled:(d.log_brew)?false:true});$("#FLog").jqxButton({disabled:(d.log_fermentation)?false:true})}$("#styleSelect").jqxDropDownList({placeHolder:"Kies bierstijl:",theme:theme,source:styleslist,displayMember:"name",width:180,height:23,dropDownVerticalAlignment:"top",dropDownWidth:500,dropDownHeight:380,renderer:function(a3,i,a5){var a4=styleslist.records[a3];return a4.style_guide+" "+a4.style_letter+" "+a4.name}});$("#styleSelect").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=styleslist.records[i];$("#st_name").val(a3.name);$("#st_category").val(a3.category);$("#st_category_number").val(a3.category_number);$("#st_letter").val(a3.style_letter);$("#st_guide").val(a3.style_guide);$("#st_type").val(StyleTypeData[a3.type].nl);$("#st_og_min").val(a3.og_min);$("#st_og_max").val(a3.og_max);$("#st_fg_min").val(a3.fg_min);$("#st_fg_max").val(a3.fg_max);$("#st_ibu_min").val(a3.ibu_min);$("#st_ibu_max").val(a3.ibu_max);$("#st_color_min").val(a3.color_min);$("#st_color_max").val(a3.color_max);$("#st_carb_min").val(a3.carb_min);$("#st_carb_min2").val(a3.carb_min);$("#st_carb_max").val(a3.carb_max);$("#st_carb_max2").val(a3.carb_max);$("#st_abv_min").val(a3.abv_min);$("#st_abv_max").val(a3.abv_max)}});$("#equipmentSelect").jqxDropDownList({placeHolder:"Kies apparatuur:",theme:theme,source:equipmentlist,displayMember:"name",width:170,height:23,dropDownWidth:300,renderer:function(a3,i,a5){var a4=equipmentlist.records[a3];return a4.batch_size+" liter "+a4.name}});$("#equipmentSelect").on("select",function(a5){if(a5.args){var i=a5.args.index;var a4=equipmentlist.records[i];var a3=a4.batch_size/d.batch_size;$("#eq_name").val(a4.name);$("#eq_boil_size").val(a4.boil_size);d.boil_size=a4.boil_size;$("#boil_size").val(a4.boil_size);$("#eq_batch_size").val(a4.batch_size);d.batch_size=a4.batch_size;$("#batch_size").val(a4.batch_size);$("#est_a_vol").val(a4.batch_size*1.04);$("#eq_tun_volume").val(a4.tun_volume);d.eq_tun_weight=a4.tun_weight;d.eq_tun_specific_heat=a4.tun_specific_heat;d.eq_tun_material=a4.tun_material;d.eq_tun_height=a4.tun_height/100;$("#eq_top_up_water").val(a4.top_up_water);d.eq_trub_chiller_loss=a4.trub_chiller_loss;$("#eq_trub_chiller_loss").val(a4.trub_chiller_loss);$("#eq_evap_rate").val(a4.evap_rate);$("#eq_boil_time").val(a4.boil_time);d.eq_calc_boil_volume=a4.calc_boil_volume;$("#eq_top_up_kettle").val(a4.top_up_kettle);$("#eq_hop_utilization").val(a4.hop_utilization);$("#eq_notes").val(a4.notes);$("#eq_lauter_volume").val(a4.lauter_volume);d.eq_lauter_height=a4.lauter_height/100;$("#eq_lauter_deadspace").val(a4.lauter_deadspace);$("#eq_kettle_volume").val(a4.kettle_volume);d.eq_kettle_height=a4.kettle_height/100;$("#eq_mash_volume").val(a4.mash_volume);$("#eq_mash_max").val(a4.mash_max);d.eq_mash_max=a4.mash_max;$("#mash_max").val(a4.mash_max);$("#eq_efficiency").val(a4.efficiency);d.efficiency=a4.efficiency;$("#efficiency").val(a4.efficiency);d.sparge_volume=Math.round(a4.boil_size*5)/10;$("#sparge_volume").val(d.sparge_volume);$("#brew_sparge_volume").val(d.sparge_volume);$("#est_pre_vol").val(a4.boil_size*1.04);af(parseFloat($("#est_og").jqxNumberInput("decimal")));av(a3);U();aj(a3);a2(a3);aP(a3);at();Q();j()}});function s(){console.log("saveRecord()");var a3=$("#fermentableGrid").jqxGrid("getrows");var a6=$("#hopGrid").jqxGrid("getrows");var a4=$("#miscGrid").jqxGrid("getrows");var i=$("#yeastGrid").jqxGrid("getrows");var a5=$("#mashGrid").jqxGrid("getrows");var a8={record:my_record,uuid:d.uuid,name:$("#name").val(),code:$("#code").val(),birth:$("#birth").val(),stage:d.stage,notes:$("#notes").val(),log_brew:d.log_brew,log_fermentation:d.log_fermentation,inventory_reduced:d.inventory_reduced,locked:d.locked,eq_name:$("#eq_name").val(),eq_boil_size:parseFloat($("#eq_boil_size").jqxNumberInput("decimal")),eq_batch_size:parseFloat($("#eq_batch_size").jqxNumberInput("decimal")),eq_tun_volume:parseFloat($("#eq_tun_volume").jqxNumberInput("decimal")),eq_tun_weight:d.eq_tun_weight,eq_tun_specific_heat:d.eq_tun_specific_heat,eq_tun_material:d.eq_tun_material,eq_tun_height:d.eq_tun_height,eq_top_up_water:parseFloat($("#eq_top_up_water").jqxNumberInput("decimal")),eq_trub_chiller_loss:parseFloat($("#eq_trub_chiller_loss").jqxNumberInput("decimal")),eq_evap_rate:parseFloat($("#eq_evap_rate").jqxNumberInput("decimal")),eq_boil_time:parseFloat($("#eq_boil_time").jqxNumberInput("decimal")),eq_calc_boil_volume:d.eq_calc_boil_volume,eq_top_up_kettle:parseFloat($("#eq_top_up_kettle").jqxNumberInput("decimal")),eq_hop_utilization:parseFloat($("#eq_hop_utilization").jqxNumberInput("decimal")),eq_notes:$("#eq_notes").val(),eq_lauter_volume:parseFloat($("#eq_lauter_volume").jqxNumberInput("decimal")),eq_lauter_height:d.eq_lauter_height,eq_lauter_deadspace:parseFloat($("#eq_lauter_deadspace").jqxNumberInput("decimal")),eq_kettle_volume:parseFloat($("#eq_kettle_volume").jqxNumberInput("decimal")),eq_kettle_height:d.eq_kettle_height,eq_mash_volume:parseFloat($("#eq_mash_volume").jqxNumberInput("decimal")),eq_mash_max:parseFloat($("#eq_mash_max").jqxNumberInput("decimal")),eq_efficiency:parseFloat($("#eq_efficiency").jqxNumberInput("decimal")),brew_date_start:$("#brew_date_start").val(),brew_mash_ph:parseFloat($("#brew_mash_ph").jqxNumberInput("decimal")),brew_mash_sg:parseFloat($("#brew_mash_sg").jqxNumberInput("decimal")),brew_mash_efficiency:parseFloat($("#brew_mash_efficiency").jqxNumberInput("decimal")),brew_sparge_est:parseFloat($("#brew_sparge_est").jqxNumberInput("decimal")),brew_sparge_ph:parseFloat($("#brew_sparge_ph").jqxNumberInput("decimal")),brew_preboil_volume:parseFloat($("#brew_preboil_volume").jqxNumberInput("decimal")),brew_preboil_sg:parseFloat($("#brew_preboil_sg").jqxNumberInput("decimal")),brew_preboil_ph:parseFloat($("#brew_preboil_ph").jqxNumberInput("decimal")),brew_preboil_efficiency:parseFloat($("#brew_preboil_efficiency").jqxNumberInput("decimal")),brew_aboil_volume:parseFloat($("#brew_aboil_volume").jqxNumberInput("decimal")),brew_aboil_sg:parseFloat($("#brew_aboil_sg").jqxNumberInput("decimal")),brew_aboil_ph:parseFloat($("#brew_aboil_ph").jqxNumberInput("decimal")),brew_aboil_efficiency:parseFloat($("#brew_aboil_efficiency").jqxNumberInput("decimal")),brew_cooling_method:$("#brew_cooling_method").val(),brew_cooling_time:parseFloat($("#brew_cooling_time").jqxNumberInput("decimal")),brew_cooling_to:parseFloat($("#brew_cooling_to").jqxNumberInput("decimal")),brew_whirlpool9:parseFloat($("#brew_whirlpool9").jqxNumberInput("decimal")),brew_whirlpool7:parseFloat($("#brew_whirlpool7").jqxNumberInput("decimal")),brew_whirlpool6:parseFloat($("#brew_whirlpool6").jqxNumberInput("decimal")),brew_whirlpool2:parseFloat($("#brew_whirlpool2").jqxNumberInput("decimal")),brew_fermenter_volume:parseFloat($("#brew_fermenter_volume").jqxNumberInput("decimal")),brew_fermenter_extrawater:parseFloat($("#brew_fermenter_extrawater").jqxNumberInput("decimal")),brew_fermenter_tcloss:parseFloat($("#brew_fermenter_tcloss").jqxNumberInput("decimal")),brew_aeration_time:parseFloat($("#brew_aeration_time").jqxNumberInput("decimal")),brew_aeration_speed:parseFloat($("#brew_aeration_speed").jqxNumberInput("decimal")),brew_aeration_type:$("#brew_aeration_type").val(),brew_fermenter_sg:parseFloat($("#brew_fermenter_sg").jqxNumberInput("decimal")),brew_fermenter_ibu:parseFloat($("#brew_fermenter_ibu").jqxNumberInput("decimal")),brew_fermenter_color:parseFloat($("#brew_fermenter_color").jqxNumberInput("decimal")),brew_date_end:$("#brew_date_end").val(),og:d.og,fg:parseFloat($("#fg").jqxNumberInput("decimal")),primary_start_temp:parseFloat($("#primary_start_temp").jqxNumberInput("decimal")),primary_max_temp:parseFloat($("#primary_max_temp").jqxNumberInput("decimal")),primary_end_temp:parseFloat($("#primary_end_temp").jqxNumberInput("decimal")),primary_end_sg:parseFloat($("#primary_end_sg").jqxNumberInput("decimal")),primary_end_date:$("#primary_end_date").val(),secondary_temp:parseFloat($("#secondary_temp").jqxNumberInput("decimal")),secondary_end_sg:parseFloat($("#secondary_end_sg").jqxNumberInput("decimal")),secondary_end_date:$("#secondary_end_date").val(),tertiary_temp:parseFloat($("#tertiary_temp").jqxNumberInput("decimal")),package_date:$("#package_date").val(),package_volume:parseFloat($("#package_volume").jqxNumberInput("decimal")),package_infuse_amount:parseFloat($("#package_infuse_amount").jqxNumberInput("decimal")),package_infuse_abv:parseFloat($("#package_infuse_abv").jqxNumberInput("decimal")),package_infuse_notes:$("#package_infuse_notes").val(),package_abv:parseFloat($("#package_abv").jqxNumberInput("decimal")),package_ph:parseFloat($("#package_ph").jqxNumberInput("decimal")),bottle_amount:parseFloat($("#bottle_amount").jqxNumberInput("decimal")),bottle_carbonation:parseFloat($("#bottle_carbonation").jqxNumberInput("decimal")),bottle_priming_water:parseFloat($("#bottle_priming_water").jqxNumberInput("decimal")),bottle_priming_amount:parseFloat($("#bottle_priming_amount").jqxNumberInput("decimal")),bottle_carbonation_temp:parseFloat($("#bottle_carbonation_temp").jqxNumberInput("decimal")),keg_amount:parseFloat($("#keg_amount").jqxNumberInput("decimal")),keg_carbonation:parseFloat($("#keg_carbonation").jqxNumberInput("decimal")),keg_priming_water:parseFloat($("#keg_priming_water").jqxNumberInput("decimal")),keg_priming_amount:parseFloat($("#keg_priming_amount").jqxNumberInput("decimal")),keg_carbonation_temp:parseFloat($("#keg_carbonation_temp").jqxNumberInput("decimal")),keg_forced_carb:d.keg_forced_carb,keg_pressure:parseFloat($("#keg_pressure").jqxNumberInput("decimal")),taste_notes:$("#taste_notes").val(),taste_rate:parseFloat($("#taste_rate").jqxNumberInput("decimal")),taste_date:$("#taste_date").val(),taste_color:$("#taste_color").val(),taste_transparency:$("#taste_transparency").val(),taste_head:$("#taste_head").val(),taste_aroma:$("#taste_aroma").val(),taste_taste:$("#taste_taste").val(),taste_mouthfeel:$("#taste_mouthfeel").val(),taste_aftertaste:$("#taste_aftertaste").val(),st_name:$("#st_name").val(),st_letter:$("#st_letter").val(),st_guide:$("#st_guide").val(),st_type:d.st_type,st_category:$("#st_category").val(),st_category_number:parseFloat($("#st_category_number").jqxNumberInput("decimal")),st_og_min:parseFloat($("#st_og_min").jqxNumberInput("decimal")),st_og_max:parseFloat($("#st_og_max").jqxNumberInput("decimal")),st_fg_min:parseFloat($("#st_fg_min").jqxNumberInput("decimal")),st_fg_max:parseFloat($("#st_fg_max").jqxNumberInput("decimal")),st_ibu_min:parseFloat($("#st_ibu_min").jqxNumberInput("decimal")),st_ibu_max:parseFloat($("#st_ibu_max").jqxNumberInput("decimal")),st_color_min:parseFloat($("#st_color_min").jqxNumberInput("decimal")),st_color_max:parseFloat($("#st_color_max").jqxNumberInput("decimal")),st_carb_min:parseFloat($("#st_carb_min").jqxNumberInput("decimal")),st_carb_max:parseFloat($("#st_carb_max").jqxNumberInput("decimal")),st_abv_min:parseFloat($("#st_abv_min").jqxNumberInput("decimal")),st_abv_max:parseFloat($("#st_abv_max").jqxNumberInput("decimal")),type:$("#type").val(),batch_size:parseFloat($("#batch_size").jqxNumberInput("decimal")),boil_size:parseFloat($("#boil_size").jqxNumberInput("decimal")),boil_time:parseFloat($("#boil_time").jqxNumberInput("decimal")),efficiency:parseFloat($("#efficiency").jqxNumberInput("decimal")),est_og:parseFloat($("#est_og").jqxNumberInput("decimal")),est_fg:parseFloat($("#est_fg").jqxNumberInput("decimal")),est_abv:parseFloat($("#est_abv").jqxNumberInput("decimal")),est_color:parseFloat($("#est_color").jqxNumberInput("decimal")),color_method:$("#color_method").val(),est_ibu:parseFloat($("#est_ibu").jqxNumberInput("decimal")),ibu_method:$("#ibu_method").val(),est_carb:parseFloat($("#est_carb").jqxNumberInput("decimal")),mash_name:$("#mash_name").val(),mash_ph:parseFloat($("#mash_ph").jqxNumberInput("decimal")),sparge_temp:parseFloat($("#sparge_temp").jqxNumberInput("decimal")),sparge_ph:parseFloat($("#sparge_ph").jqxNumberInput("decimal")),sparge_volume:parseFloat($("#sparge_volume").jqxNumberInput("decimal")),sparge_source:$("#sparge_source").val(),sparge_acid_type:$("#sparge_acid_type").val(),sparge_acid_perc:parseFloat($("#sparge_acid_perc").jqxNumberInput("decimal")),sparge_acid_amount:d.sparge_acid_amount,calc_acid:d.calc_acid,w1_name:$("#w1_name").val(),w1_amount:parseFloat($("#w1_amount").jqxNumberInput("decimal")),w1_calcium:parseFloat($("#w1_calcium").jqxNumberInput("decimal")),w1_sulfate:parseFloat($("#w1_sulfate").jqxNumberInput("decimal")),w1_chloride:parseFloat($("#w1_chloride").jqxNumberInput("decimal")),w1_sodium:parseFloat($("#w1_sodium").jqxNumberInput("decimal")),w1_magnesium:parseFloat($("#w1_magnesium").jqxNumberInput("decimal")),w1_total_alkalinity:parseFloat($("#w1_total_alkalinity").jqxNumberInput("decimal")),w1_ph:parseFloat($("#w1_ph").jqxNumberInput("decimal")),w1_cost:d.w1_cost,w2_name:$("#w2_name").val(),w2_amount:parseFloat($("#w2_amount").jqxNumberInput("decimal")),w2_calcium:parseFloat($("#w2_calcium").jqxNumberInput("decimal")),w2_sulfate:parseFloat($("#w2_sulfate").jqxNumberInput("decimal")),w2_chloride:parseFloat($("#w2_chloride").jqxNumberInput("decimal")),w2_sodium:parseFloat($("#w2_sodium").jqxNumberInput("decimal")),w2_magnesium:parseFloat($("#w2_magnesium").jqxNumberInput("decimal")),w2_total_alkalinity:parseFloat($("#w2_total_alkalinity").jqxNumberInput("decimal")),w2_ph:parseFloat($("#w2_ph").jqxNumberInput("decimal")),w2_cost:d.w2_cost,wg_amount:parseFloat($("#wg_amount").jqxNumberInput("decimal")),wg_calcium:parseFloat($("#wg_calcium").jqxNumberInput("decimal")),wg_sulfate:parseFloat($("#wg_sulfate").jqxNumberInput("decimal")),wg_chloride:parseFloat($("#wg_chloride").jqxNumberInput("decimal")),wg_sodium:parseFloat($("#wg_sodium").jqxNumberInput("decimal")),wg_magnesium:parseFloat($("#wg_magnesium").jqxNumberInput("decimal")),wg_total_alkalinity:parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal")),wg_ph:parseFloat($("#wg_ph").jqxNumberInput("decimal")),wb_calcium:parseFloat($("#wb_calcium").jqxNumberInput("decimal")),wb_sulfate:parseFloat($("#wb_sulfate").jqxNumberInput("decimal")),wb_chloride:parseFloat($("#wb_chloride").jqxNumberInput("decimal")),wb_sodium:parseFloat($("#wb_sodium").jqxNumberInput("decimal")),wb_magnesium:parseFloat($("#wb_magnesium").jqxNumberInput("decimal")),wb_total_alkalinity:parseFloat($("#wb_total_alkalinity").jqxNumberInput("decimal")),wb_ph:parseFloat($("#wb_ph").jqxNumberInput("decimal")),wa_acid_name:$("#wa_acid_name").val(),wa_acid_perc:parseFloat($("#wa_acid_perc").jqxNumberInput("decimal")),wa_base_name:$("#wa_base_name").val(),starter_enable:d.starter_enable,starter_type:$("#starter_type").val(),starter_sg:parseFloat($("#starter_sg").jqxNumberInput("decimal")),starter_viability:parseFloat($("#starter_viability").jqxNumberInput("decimal")),prop1_type:$("#prop1_type").val(),prop1_volume:parseFloat($("#prop1_volume").jqxNumberInput("decimal")),prop2_type:$("#prop2_type").val(),prop2_volume:parseFloat($("#prop2_volume").jqxNumberInput("decimal")),prop3_type:$("#prop3_type").val(),prop3_volume:parseFloat($("#prop3_volume").jqxNumberInput("decimal")),prop4_type:$("#prop4_type").val(),prop4_volume:parseFloat($("#prop4_volume").jqxNumberInput("decimal")),fermentables:a3,hops:a6,miscs:a4,yeasts:i,mashs:a5};var a7="update=true&"+$.param(a8);$.ajax({dataType:"json",url:F,cache:false,data:a7,async:false,type:"POST",success:function(ba,a9,bb){console.log("saveRecord() success")},error:function(a9,bb,ba){console.log("saveRecord() error")}})}var d={};var F="includes/db_product.php";var aR={datatype:"json",cache:false,datafields:[{name:"record",type:"number"},{name:"uuid",type:"string"},{name:"name",type:"string"},{name:"code",type:"string"},{name:"birth",type:"string"},{name:"stage",type:"int"},{name:"notes",type:"string"},{name:"log_brew",type:"int"},{name:"log_fermentation",type:"int"},{name:"inventory_reduced",type:"int"},{name:"locked",type:"int"},{name:"eq_name",type:"string"},{name:"eq_boil_size",type:"float"},{name:"eq_batch_size",type:"float"},{name:"eq_tun_volume",type:"float"},{name:"eq_tun_weight",type:"float"},{name:"eq_tun_specific_heat",type:"float"},{name:"eq_tun_material",type:"int"},{name:"eq_tun_height",type:"float"},{name:"eq_top_up_water",type:"float"},{name:"eq_trub_chiller_loss",type:"float"},{name:"eq_evap_rate",type:"float"},{name:"eq_boil_time",type:"float"},{name:"eq_calc_boil_volume",type:"int"},{name:"eq_top_up_kettle",type:"float"},{name:"eq_hop_utilization",type:"float"},{name:"eq_notes",type:"string"},{name:"eq_lauter_volume",type:"float"},{name:"eq_lauter_height",type:"float"},{name:"eq_lauter_deadspace",type:"float"},{name:"eq_kettle_volume",type:"float"},{name:"eq_kettle_height",type:"float"},{name:"eq_mash_volume",type:"float"},{name:"eq_mash_max",type:"float"},{name:"eq_efficiency",type:"float"},{name:"brew_date_start",type:"string"},{name:"brew_mash_ph",type:"float"},{name:"brew_mash_sg",type:"float"},{name:"brew_mash_efficiency",type:"float"},{name:"brew_sparge_est",type:"float"},{name:"brew_sparge_ph",type:"float"},{name:"brew_preboil_volume",type:"float"},{name:"brew_preboil_sg",type:"float"},{name:"brew_preboil_ph",type:"float"},{name:"brew_preboil_efficiency",type:"float"},{name:"brew_aboil_volume",type:"float"},{name:"brew_aboil_sg",type:"float"},{name:"brew_aboil_ph",type:"float"},{name:"brew_aboil_efficiency",type:"float"},{name:"brew_cooling_method",type:"int"},{name:"brew_cooling_time",type:"float"},{name:"brew_cooling_to",type:"float"},{name:"brew_whirlpool9",type:"float"},{name:"brew_whirlpool7",type:"float"},{name:"brew_whirlpool6",type:"float"},{name:"brew_whirlpool2",type:"float"},{name:"brew_fermenter_volume",type:"float"},{name:"brew_fermenter_extrawater",type:"float"},{name:"brew_fermenter_tcloss",type:"float"},{name:"brew_aeration_time",type:"float"},{name:"brew_aeration_speed",type:"float"},{name:"brew_aeration_type",type:"int"},{name:"brew_fermenter_sg",type:"float"},{name:"brew_fermenter_ibu",type:"float"},{name:"brew_fermenter_color",type:"float"},{name:"brew_date_end",type:"string"},{name:"og",type:"float"},{name:"fg",type:"float"},{name:"primary_start_temp",type:"float"},{name:"primary_max_temp",type:"float"},{name:"primary_end_temp",type:"float"},{name:"primary_end_sg",type:"float"},{name:"primary_end_date",type:"string"},{name:"secondary_temp",type:"float"},{name:"secondary_end_sg",type:"float"},{name:"secondary_end_date",type:"string"},{name:"tertiary_temp",type:"float"},{name:"package_date",type:"string"},{name:"package_volume",type:"float"},{name:"package_infuse_amount",type:"float"},{name:"package_infuse_abv",type:"float"},{name:"package_infuse_notes",type:"string"},{name:"package_abv",type:"float"},{name:"package_ph",type:"float"},{name:"bottle_amount",type:"float"},{name:"bottle_carbonation",type:"float"},{name:"bottle_priming_water",type:"float"},{name:"bottle_priming_amount",type:"float"},{name:"bottle_carbonation_temp",type:"float"},{name:"keg_amount",type:"float"},{name:"keg_carbonation",type:"float"},{name:"keg_priming_water",type:"float"},{name:"keg_priming_amount",type:"float"},{name:"keg_carbonation_temp",type:"float"},{name:"keg_forced_carb",type:"int"},{name:"keg_pressure",type:"float"},{name:"taste_notes",type:"string"},{name:"taste_rate",type:"float"},{name:"taste_date",type:"string"},{name:"taste_color",type:"string"},{name:"taste_transparency",type:"string"},{name:"taste_head",type:"string"},{name:"taste_aroma",type:"string"},{name:"taste_taste",type:"string"},{name:"taste_mouthfeel",type:"string"},{name:"taste_aftertaste",type:"string"},{name:"st_name",type:"string"},{name:"st_letter",type:"string"},{name:"st_guide",type:"string"},{name:"st_category",type:"string"},{name:"st_category_number",type:"float"},{name:"st_type",type:"int"},{name:"st_og_min",type:"float"},{name:"st_og_max",type:"float"},{name:"st_fg_min",type:"float"},{name:"st_fg_max",type:"float"},{name:"st_ibu_min",type:"float"},{name:"st_ibu_max",type:"float"},{name:"st_color_min",type:"float"},{name:"st_color_max",type:"float"},{name:"st_carb_min",type:"float"},{name:"st_carb_max",type:"float"},{name:"st_abv_min",type:"float"},{name:"st_abv_max",type:"float"},{name:"type",type:"int"},{name:"batch_size",type:"float"},{name:"boil_size",type:"float"},{name:"boil_time",type:"float"},{name:"efficiency",type:"float"},{name:"est_og",type:"float"},{name:"est_fg",type:"float"},{name:"est_abv",type:"float"},{name:"est_color",type:"float"},{name:"color_method",type:"int"},{name:"est_ibu",type:"float"},{name:"ibu_method",type:"int"},{name:"est_carb",type:"float"},{name:"sparge_temp",type:"float"},{name:"sparge_ph",type:"float"},{name:"sparge_volume",type:"float"},{name:"sparge_source",type:"int"},{name:"sparge_acid_type",type:"int"},{name:"sparge_acid_perc",type:"float"},{name:"sparge_acid_amount",type:"float"},{name:"mash_ph",type:"float"},{name:"mash_name",type:"string"},{name:"calc_acid",type:"int"},{name:"w1_name",type:"string"},{name:"w1_amount",type:"float"},{name:"w1_calcium",type:"float"},{name:"w1_sulfate",type:"float"},{name:"w1_chloride",type:"float"},{name:"w1_sodium",type:"float"},{name:"w1_magnesium",type:"float"},{name:"w1_total_alkalinity",type:"float"},{name:"w1_ph",type:"float"},{name:"w1_cost",type:"float"},{name:"w2_name",type:"string"},{name:"w2_amount",type:"float"},{name:"w2_calcium",type:"float"},{name:"w2_sulfate",type:"float"},{name:"w2_chloride",type:"float"},{name:"w2_sodium",type:"float"},{name:"w2_magnesium",type:"float"},{name:"w2_total_alkalinity",type:"float"},{name:"w2_ph",type:"float"},{name:"w2_cost",type:"float"},{name:"wg_amount",type:"float"},{name:"wg_calcium",type:"float"},{name:"wg_sulfate",type:"float"},{name:"wg_chloride",type:"float"},{name:"wg_sodium",type:"float"},{name:"wg_magnesium",type:"float"},{name:"wg_total_alkalinity",type:"float"},{name:"wg_ph",type:"float"},{name:"wb_calcium",type:"float"},{name:"wb_sulfate",type:"float"},{name:"wb_chloride",type:"float"},{name:"wb_sodium",type:"float"},{name:"wb_magnesium",type:"float"},{name:"wb_total_alkalinity",type:"float"},{name:"wb_ph",type:"float"},{name:"wa_acid_name",type:"int"},{name:"wa_acid_perc",type:"int"},{name:"wa_base_name",type:"int"},{name:"starter_enable",type:"int"},{name:"starter_type",type:"int"},{name:"starter_sg",type:"float"},{name:"starter_viability",type:"int"},{name:"prop1_type",type:"int"},{name:"prop1_volume",type:"float"},{name:"prop2_type",type:"int"},{name:"prop2_volume",type:"float"},{name:"prop3_type",type:"int"},{name:"prop3_volume",type:"float"},{name:"prop4_type",type:"int"},{name:"prop4_volume",type:"float"},{name:"fermentables",type:"array"},{name:"hops",type:"array"},{name:"miscs",type:"array"},{name:"yeasts",type:"array"},{name:"mashs",type:"array"}],id:"record",url:F+"?record="+my_record};var ah=new $.jqx.dataAdapter(aR,{loadComplete:function(){var i=ah.records;d=i[0];$("#name").val(d.name);$("#code").val(d.code);$("#birth").val(d.birth);$("#stage").val(StageData[d.stage].nl);$("#notes").val(d.notes);$("#locked").val(d.locked);$("#eq_name").val(d.eq_name);$("#eq_notes").val(d.eq_notes);$("#eq_boil_size").val(d.eq_boil_size);$("#eq_batch_size").val(d.eq_batch_size);$("#eq_tun_volume").val(d.eq_tun_volume);$("#eq_top_up_water").val(d.eq_top_up_water);$("#eq_trub_chiller_loss").val(d.eq_trub_chiller_loss);$("#eq_evap_rate").val(d.eq_evap_rate);$("#eq_boil_time").val(d.eq_boil_time);$("#eq_top_up_kettle").val(d.eq_top_up_kettle);$("#eq_hop_utilization").val(d.eq_hop_utilization);$("#eq_lauter_volume").val(d.eq_lauter_volume);$("#eq_lauter_deadspace").val(d.eq_lauter_deadspace);$("#eq_kettle_volume").val(d.eq_kettle_volume);$("#eq_mash_volume").val(d.eq_mash_volume);$("#eq_mash_max").val(d.eq_mash_max);$("#eq_efficiency").val(d.eq_efficiency);$("#brew_date_start").val(d.brew_date_start);$("#brew_mash_ph").val(d.brew_mash_ph);$("#brew_mash_sg").val(d.brew_mash_sg);$("#brew_mash_efficiency").val(d.brew_mash_efficiency);$("#brew_sparge_temperature").val(d.sparge_temp);$("#brew_sparge_volume").val(d.sparge_volume);$("#brew_sparge_est").val(d.brew_sparge_est);$("#brew_sparge_ph").val(d.brew_sparge_ph);$("#brew_aeration_type").val(d.brew_aeration_type);$("#brew_aeration_time").val(d.brew_aeration_time);$("#brew_aeration_speed").val(d.brew_aeration_speed);$("#brew_preboil_ph").val(d.brew_preboil_ph);$("#brew_preboil_sg").val(d.brew_preboil_sg);$("#brew_preboil_volume").val(d.brew_preboil_volume);$("#brew_preboil_efficiency").val(d.brew_preboil_efficiency);$("#brew_whirlpool9").val(d.brew_whirlpool9);$("#brew_whirlpool7").val(d.brew_whirlpool7);$("#brew_whirlpool6").val(d.brew_whirlpool6);$("#brew_whirlpool2").val(d.brew_whirlpool2);$("#brew_fermenter_volume").val(d.brew_fermenter_volume);$("#brew_fermenter_sg").val(d.brew_fermenter_sg);$("#brew_fermenter_sg2").val(d.brew_fermenter_sg);$("#brew_fermenter_ibu").val(d.brew_fermenter_ibu);$("#brew_fermenter_color").val(d.brew_fermenter_color);$("#brew_fermenter_extrawater").val(d.brew_fermenter_extrawater);$("#brew_fermenter_tcloss").val(d.brew_fermenter_tcloss);$("#brew_aboil_ph").val(d.brew_aboil_ph);$("#brew_aboil_sg").val(d.brew_aboil_sg);$("#brew_aboil_volume").val(d.brew_aboil_volume);$("#brew_aboil_efficiency").val(d.brew_aboil_efficiency);$("#brew_cooling_to").val(d.brew_cooling_to);$("#brew_cooling_method").val(d.brew_cooling_method);$("#brew_cooling_time").val(d.brew_cooling_time);$("#brew_date_end").val(d.brew_date_end);$("#og").val(d.og);$("#fg").val(d.fg);$("#primary_start_temp").val(d.primary_start_temp);$("#primary_max_temp").val(d.primary_max_temp);$("#primary_end_temp").val(d.primary_end_temp);$("#primary_end_sg").val(d.primary_end_sg);$("#primary_end_date").val(d.primary_end_date);$("#secondary_temp").val(d.secondary_temp);$("#secondary_end_sg").val(d.secondary_end_sg);$("#secondary_end_date").val(d.secondary_end_date);$("#tertiary_temp").val(d.tertiary_temp);$("#package_date").val(d.package_date);$("#package_volume").val(d.package_volume);$("#package_infuse_amount").val(d.package_infuse_amount);$("#package_infuse_abv").val(d.package_infuse_abv);$("#package_infuse_notes").val(d.package_infuse_notes);$("#package_abv").val(d.package_abv);$("#package_ph").val(d.package_ph);$("#bottle_amount").val(d.bottle_amount);$("#bottle_carbonation").val(d.bottle_carbonation);$("#bottle_priming_water").val(d.bottle_priming_water);$("#bottle_priming_amount").val(d.bottle_priming_amount);$("#bottle_carbonation_temp").val(d.bottle_carbonation_temp);$("#keg_amount").val(d.keg_amount);$("#keg_carbonation").val(d.keg_carbonation);$("#keg_priming_water").val(d.keg_priming_water);$("#keg_priming_amount").val(d.keg_priming_amount);$("#keg_carbonation_temp").val(d.keg_carbonation_temp);$("#keg_forced_carb").val(d.keg_forced_carb);$("#keg_pressure").val(d.keg_pressure);$("#taste_notes").val(d.taste_notes);$("#taste_rate").val(d.taste_rate);$("#taste_date").val(d.taste_date);$("#taste_color").val(d.taste_color);$("#taste_transparency").val(d.taste_transparency);$("#taste_head").val(d.taste_head);$("#taste_aroma").val(d.taste_aroma);$("#taste_taste").val(d.taste_taste);$("#taste_mouthfeel").val(d.taste_mouthfeel);$("#taste_aftertaste").val(d.taste_aftertaste);$("#st_name").val(d.st_name);$("#st_letter").val(d.st_letter);$("#st_guide").val(d.st_guide);$("#st_category").val(d.st_category);$("#st_category_number").val(d.st_category_number);$("#st_type").val(StyleTypeData[d.st_type].nl);$("#st_og_min").val(d.st_og_min);$("#st_og_max").val(d.st_og_max);$("#st_fg_min").val(d.st_fg_min);$("#st_fg_max").val(d.st_fg_max);$("#st_abv_min").val(d.st_abv_min);$("#st_abv_max").val(d.st_abv_max);$("#st_color_min").val(d.st_color_min);$("#st_color_max").val(d.st_color_max);$("#st_ibu_min").val(d.st_ibu_min);$("#st_ibu_max").val(d.st_ibu_max);$("#st_carb_min").val(d.st_carb_min);$("#st_carb_min2").val(d.st_carb_min);$("#st_carb_max").val(d.st_carb_max);$("#st_carb_max2").val(d.st_carb_max);$("#type").val(d.type);$("#batch_size").val(d.batch_size);$("#est_a_vol").val(d.batch_size*1.04);$("#boil_size").val(d.boil_size);$("#est_pre_vol").val(d.boil_size*1.04);$("#boil_time").val(d.boil_time);$("#efficiency").val(d.efficiency);$("#est_og").val(d.est_og);$("#est_og2").val(d.est_og);$("#est_og3").val(0);$("#est_fg").val(d.est_fg);$("#est_fg2").val(d.est_fg);$("#est_fg3").val(d.est_fg);$("#est_color").val(d.est_color);$("#est_color2").val(d.est_color);$("#est_abv").val(d.est_abv);$("#color_method").val(d.color_method);$("#est_ibu").val(d.est_ibu);$("#est_ibu2").val(d.est_ibu);$("#ibu_method").val(d.ibu_method);$("#est_carb").val(d.est_carb);$("#mash_name").val(d.mash_name);$("#mash_ph").val(d.mash_ph);$("#sparge_temp").val(d.sparge_temp);$("#sparge_ph").val(d.sparge_ph);$("#sparge_volume").val(d.sparge_volume);$("#sparge_source").val(d.sparge_source);$("#sparge_acid_type").val(d.sparge_acid_type);$("#sparge_acid_perc").val(d.sparge_acid_perc);$("#sparge_acid_amount").val(d.sparge_acid_amount*1000);$("#calc_acid").val(d.calc_acid);$("#w1_name").val(d.w1_name);$("#w1_amount").val(d.w1_amount);$("#w1_calcium").val(d.w1_calcium);$("#w1_sulfate").val(d.w1_sulfate);$("#w1_chloride").val(d.w1_chloride);$("#w1_sodium").val(d.w1_sodium);$("#w1_magnesium").val(d.w1_magnesium);$("#w1_total_alkalinity").val(d.w1_total_alkalinity);$("#w1_ph").val(d.w1_ph);$("#w1_cost").val(d.w1_cost);$("#w2_name").val(d.w2_name);$("#w2_amount").val(d.w2_amount);$("#w2_calcium").val(d.w2_calcium);$("#w2_sulfate").val(d.w2_sulfate);$("#w2_chloride").val(d.w2_chloride);$("#w2_sodium").val(d.w2_sodium);$("#w2_magnesium").val(d.w2_magnesium);$("#w2_total_alkalinity").val(d.w2_total_alkalinity);$("#w2_ph").val(d.w2_ph);$("#w2_cost").val(d.w2_cost);$("#wg_amount").val(d.wg_amount);$("#wg_calcium").val(d.wg_calcium);$("#wg_sulfate").val(d.wg_sulfate);$("#wg_chloride").val(d.wg_chloride);$("#wg_sodium").val(d.wg_sodium);$("#wg_magnesium").val(d.wg_magnesium);$("#wg_total_alkalinity").val(d.wg_total_alkalinity);$("#wg_ph").val(d.wg_ph);$("#wb_calcium").val(d.wb_calcium);$("#wb_sulfate").val(d.wb_sulfate);$("#wb_chloride").val(d.wb_chloride);$("#wb_sodium").val(d.wb_sodium);$("#wb_magnesium").val(d.wb_magnesium);$("#wb_total_alkalinity").val(d.wb_total_alkalinity);$("#wb_ph").val(d.wb_ph);$("#wa_acid_name").val(d.wa_acid_name);$("#wa_acid_perc").val(d.wa_acid_perc);$("#wa_base_name").val(d.wa_base_name);$("#starter_enable").val(d.starter_enable);$("#starter_type").val(d.starter_type);$("#starter_sg").val(d.starter_sg);$("#starter_viability").val(d.starter_viability);$("#prop1_type").val(d.prop1_type);$("#prop1_volume").val(d.prop1_volume);$("#prop2_type").val(d.prop2_type);$("#prop2_volume").val(d.prop2_volume);$("#prop3_type").val(d.prop3_type);$("#prop3_volume").val(d.prop3_volume);$("#prop4_type").val(d.prop4_type);$("#prop4_volume").val(d.prop4_volume);n(d);aS(d);W(d);aM(d);au(d);aV();$("#jqxTabs").jqxTabs("select",2)},loadError:function(a4,i,a3){},beforeLoadComplete:function(i){$("#jqxLoader").jqxLoader("open")}});ah.dataBind();var n=function(a3){var i={localdata:a3.fermentables,datatype:"local",cache:false,async:false,datafields:[{name:"f_name",type:"string"},{name:"f_origin",type:"string"},{name:"f_supplier",type:"string"},{name:"f_amount",type:"float"},{name:"f_cost",type:"float"},{name:"f_type",type:"int"},{name:"f_yield",type:"float"},{name:"f_color",type:"float"},{name:"f_coarse_fine_diff",type:"float"},{name:"f_moisture",type:"float"},{name:"f_diastatic_power",type:"float"},{name:"f_protein",type:"float"},{name:"f_max_in_batch",type:"float"},{name:"f_graintype",type:"int"},{name:"f_added",type:"int"},{name:"f_dissolved_protein",type:"float"},{name:"f_recommend_mash",type:"int"},{name:"f_add_after_boil",type:"int"},{name:"f_adjust_to_total_100",type:"int"},{name:"f_percentage",type:"float"},{name:"f_di_ph",type:"float"},{name:"f_acid_to_ph_57",type:"float"},{name:"f_inventory",type:"float"},{name:"f_avail",type:"int"}],addrow:function(a6,a8,a5,a7){a7(true)},deleterow:function(a5,a6){a6(true)},updaterow:function(a5,a7,a6){a6(true)}};var a4=new $.jqx.dataAdapter(i);$("#fermentableGrid").jqxGrid({width:1240,height:470,source:a4,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a6){var a5=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a6.append(a5);a5.append('<div style="float: left; margin-left: 165px;" id="faddrowbutton"></div>');a5.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a5.append('<div style="float: left; margin-left: 10px;" id="finstockbutton"></div>');a5.append('<input style="float: left; margin-left: 400px;" id="fdeleterowbutton" type="button" value="Verwijder mout" />');$("#faddrowbutton").jqxDropDownList({placeHolder:"Kies mout:",theme:theme,template:"primary",source:fermentablelist,displayMember:"name",disabled:(d.stage>3),width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a8,a7,ba){var a9=fermentablelist.records[a8];return a9.supplier+" / "+a9.name+" ("+a9.color+" EBC)"}});$("#faddrowbutton").on("select",function(a9){if(a9.args){var bb=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;var a7=a9.args.index;var a8=fermentablelist.records[a7];var ba={};ba.f_name=a8.name;ba.f_origin=a8.origin;ba.f_supplier=a8.supplier;ba.f_amount=0;ba.f_cost=a8.cost;ba.f_type=a8.type;ba.f_yield=a8.yield;ba.f_color=a8.color;ba.f_coarse_fine_diff=a8.coarse_fine_diff;ba.f_moisture=a8.moisture;ba.f_diastatic_power=a8.diastatic_power;ba.f_protein=a8.protein;ba.f_max_in_batch=a8.max_in_batch;ba.f_graintype=a8.graintype;if(a8.add_after_boil){ba.f_added=2}else{if((a8.type==1)||(a8.type==4)){ba.f_added=1}else{ba.f_added=0}}ba.f_dissolved_protein=a8.dissolved_protein;ba.f_recommend_mash=a8.recommend_mash;ba.f_add_after_boil=a8.add_after_boil;if(bb==0){ba.f_adjust_to_total_100=1;ba.f_percentage=100}else{ba.f_adjust_to_total_100=0;ba.f_percentage=0}ba.f_di_ph=a8.di_ph;ba.f_acid_to_ph_57=a8.acid_to_ph_57;ba.f_inventory=a8.inventory;$("#fermentableGrid").jqxGrid("addrow",null,ba)}});$("#finstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#finstockbutton").on("change",function(a7){fermentableinstock=a7.args.checked;fermentablelist.dataBind()});$("#fdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#fdeleterowbutton").on("click",function(){var a9=$("#fermentableGrid").jqxGrid("getselectedrowindex");var bd=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a9>=0&&a9<bd){var bc=$("#fermentableGrid").jqxGrid("getrowid",a9);var ba=$("#fermentableGrid").jqxGrid("getcellvalue",bc,"f_percentage");var a8=$("#fermentableGrid").jqxGrid("getcellvalue",bc,"f_amount");$("#fermentableGrid").jqxGrid("deleterow",bc)}bd=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(bd>1){if(k){for(var a7=0;a7<bd;a7++){var bb=$("#fermentableGrid").jqxGrid("getrowdata",a7);if(bb.f_adjust_to_total_100){bb.f_percentage+=ba;bb.f_amount+=a8}}}else{aW()}}else{$("#fermentableGrid").jqxGrid("setcellvalue",0,"f_percentage",100)}U();at()})},ready:function(){U();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Vergistbaar ingredi&euml;nt",datafield:"f_name",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+ba.f_supplier+" / "+ba.f_name+" ("+ba.f_color+" EBC)</span>"}},{text:"Type",width:100,datafield:"f_type",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+FermentableTypeData[a9].nl+"</span>"}},{text:"Moment",width:110,datafield:"f_added",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+AddedData[a9].nl+"</span>"}},{text:"Maxinbatch",datafield:"f_max_in_batch",hidden:true},{text:"Opbrengst",datafield:"f_yield",width:90,align:"right",cellsalign:"right",cellsformat:"p1"},{text:"Gewicht Kg",datafield:"f_amount",width:120,align:"right",cellsalign:"right",cellsformat:"f3"},{text:"Voorraad Kg",datafield:"f_inventory",width:120,align:"right",cellsrenderer:function(a9,a7,a8,a5,bb,ba){var a6="#ffffff";if(((d.inventory_reduced<=2)&&(ba.f_added<=1))||((d.inventory_reduced<=3)&&(ba.f_added==2))||((d.inventory_reduced<=5)&&(ba.f_added==3))||((d.inventory_reduced<=6)&&(ba.f_added==4))||((d.inventory_reduced<=6)&&(ba.f_added==5))){if(a8<ba.f_amount){a6="#ff4040"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a6+';">'+a4.formatNumber(a8,"f3")+"</span>"}else{return"<span></span>"}}},{text:"Procent",datafield:"f_percentage",width:90,align:"right",cellsrenderer:function(a9,a7,a8,a5,bb,ba){if(ba.f_added>=4){return"<span></span>"}var a6="#ffffff";if(a8>ba.f_max_in_batch){a6="#ff4040"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a6+';">'+a4.formatNumber(a8,"p1")+"</span>"}},{text:"100%",datafield:"f_adjust_to_total_100",width:70,align:"center",cellsalign:"center",cellsrenderer:function(a6,a5,a9,a8,a7,ba){if(a9==0){return"<span></span>"}return'<span><img style="float:left; margin-left:25px; margin-top:4px;" src="images/dialog-ok-apply.png"></span>'}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a5){u=a5;aL=$("#fermentableGrid").jqxGrid("getrowdata",u);if(aL.f_added>=4){alert("Wijzig dit in de Verpakken tab")}else{if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{$("#wf_name").val(aL.f_name);$("#wf_amount").val(aL.f_amount);$("#wf_percentage").val(aL.f_percentage);$("#wf_max_in_batch").val(aL.f_max_in_batch);$("#wf_adjust_to_total_100").val(aL.f_adjust_to_total_100);$("#wf_added").val(aL.f_added);$("#popupFermentable").jqxWindow("open")}}}}]})};var aS=function(i){var a4={localdata:i.hops,datatype:"local",cache:false,async:false,datafields:[{name:"h_name",type:"string"},{name:"h_origin",type:"string"},{name:"h_amount",type:"float"},{name:"h_cost",type:"float"},{name:"h_type",type:"int"},{name:"h_form",type:"int"},{name:"h_useat",type:"int"},{name:"h_time",type:"float"},{name:"h_alpha",type:"float"},{name:"h_beta",type:"float"},{name:"h_hsi",type:"float"},{name:"h_humulene",type:"float"},{name:"h_caryophyllene",type:"float"},{name:"h_cohumulone",type:"float"},{name:"h_myrcene",type:"float"},{name:"h_total_oil",type:"float"},{name:"h_inventory",type:"float"},{name:"h_avail",type:"int"}],addrow:function(a6,a8,a5,a7){console.log("hop addrow "+a6);a7(true)},deleterow:function(a5,a6){console.log("hop deleterow "+a5);a6(true)},updaterow:function(a5,a7,a6){console.log("hop updaterow "+a5);a6(true)}};var a3=new $.jqx.dataAdapter(a4);$("#hopGrid").jqxGrid({width:1240,height:560,source:a3,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a6){var a5=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a6.append(a5);a5.append('<div style="float: left; margin-left: 165px;" id="haddrowbutton"></div>');a5.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a5.append('<div style="float: left; margin-left: 10px;" id="hinstockbutton"></div>');a5.append('<input style="float: left; margin-left: 400px;" id="hdeleterowbutton" type="button" value="Verwijder hop" />');$("#haddrowbutton").jqxDropDownList({placeHolder:"Kies hop:",theme:theme,template:"primary",source:hoplist,disabled:(d.stage>3),displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a8,a7,ba){var a9=hoplist.records[a8];return a9.origin+" - "+a9.name+" / "+HopFormData[a9.form].nl+" ("+a9.alpha+"% &alpha;)"}});$("#haddrowbutton").on("select",function(a9){if(a9.args){var a7=a9.args.index;var a8=hoplist.records[a7];var ba={};ba.h_name=a8.name;ba.h_origin=a8.origin;ba.h_amount=0;ba.h_cost=a8.cost;ba.h_type=a8.type;ba.h_form=a8.form;ba.h_useat=2;ba.h_time=0;ba.h_alpha=a8.alpha;ba.h_beta=a8.beta;ba.h_hsi=a8.hsi;ba.h_humulene=a8.humulene;ba.h_caryophyllene=a8.caryophyllene;ba.h_cohumulone=a8.cohumulone;ba.h_myrcene=a8.myrcene;ba.h_total_oil=a8.total_oil;ba.h_inventory=a8.inventory;$("#hopGrid").jqxGrid("addrow",null,ba)}$("#haddrowbutton").jqxDropDownList("clearSelection")});$("#hinstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#hinstockbutton").on("change",function(a7){hopinstock=a7.args.checked;hoplist.dataBind()});$("#hdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#hdeleterowbutton").on("click",function(){var a7=$("#hopGrid").jqxGrid("getselectedrowindex");var a9=$("#hopGrid").jqxGrid("getdatainformation").rowscount;if(a7>=0&&a7<a9){var a8=$("#hopGrid").jqxGrid("getrowid",a7);$("#hopGrid").jqxGrid("deleterow",a8)}at()})},ready:function(){at();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Hop",datafield:"h_name",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+ba.h_origin+" / "+ba.h_name+"</span>"},},{text:"Type",width:90,datafield:"h_type",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopTypeData[a9].nl+"</span>"}},{text:"Vorm",width:90,datafield:"h_form",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopFormData[a9].nl+"</span>"}},{text:"Alpha",datafield:"h_alpha",width:80,align:"right",cellsalign:"right",cellsformat:"p1"},{text:"Gebruik",width:110,datafield:"h_useat",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopUseData[a9].nl+"</span>"}},{text:"Tijdsduur",datafield:"h_time",width:90,align:"right",cellsrenderer:function(a6,a5,a9,a8,a7,bb){var ba="";if((bb.h_useat==2)||(bb.h_useat==4)){ba=ah.formatNumber(a9,"f0")+" min."}else{if(bb.h_useat==5){ba=ah.formatNumber(a9/1440,"f0")+" dagen"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ba+"</span>"}},{text:"IBU",datafield:"ibu",width:80,align:"right",cellsrenderer:function(a6,a5,a9,a8,a7,bb){var ba=toIBU(bb.h_useat,bb.h_form,al,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(bb.h_amount),parseFloat(bb.h_time),parseFloat(bb.h_alpha),$("#ibu_method").val());return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ah.formatNumber(ba,"f1")+"</span>"}},{text:"Gewicht",datafield:"h_amount",width:110,align:"right",cellsrenderer:function(a6,a5,ba,a9,a8,bb){var a7=ah.formatNumber(ba,"f1")+" kg";if(ba<1){a7=ah.formatNumber(ba*1000,"f1")+" gr"}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a7+"</span>"}},{text:"Voorraad",datafield:"h_inventory",width:110,align:"right",cellsrenderer:function(a7,a6,bb,ba,a9,bc){if(((d.inventory_reduced<=2)&&(bc.h_useat<=4))||((d.inventory_reduced<=6)&&(bc.h_useat==5))){var a5="#ffffff";if(bb<bc.h_amount){a5="#ff4040"}var a8=ah.formatNumber(bb,"f1")+" kg";if(bb<1){a8=ah.formatNumber(bb*1000,"f1")+" gr"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a5+';">'+a8+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a5){if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{console.log("edit button row "+a5);a=a5;e=$("#hopGrid").jqxGrid("getrowdata",a);$("#wh_name").val(e.h_name);$("#wh_amount").val(e.h_amount*1000);var a6=toIBU(e.h_useat,e.h_form,al,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(e.h_amount),parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());$("#wh_ibu").val(a6);if(e.h_useat==5){$("#wh_time").val(e.h_time/1440)}else{$("#wh_time").val(e.h_time)}$("#wh_useat").val(e.h_useat);$("#popupHop").jqxWindow("open")}}}]})};var W=function(a4){var a3={localdata:a4.miscs,datatype:"local",cache:false,async:false,datafields:[{name:"m_name",type:"string"},{name:"m_amount",type:"float"},{name:"m_cost",type:"float"},{name:"m_type",type:"int"},{name:"m_use_use",type:"int"},{name:"m_time",type:"float"},{name:"m_amount_is_weight",type:"int"},{name:"m_inventory",type:"float"},{name:"m_avail",type:"int"}],addrow:function(a6,a8,a5,a7){console.log("misc addrow "+a6);a7(true)},deleterow:function(a5,a6){console.log("misc deleterow "+a5);a6(true)},updaterow:function(a5,a7,a6){console.log("misc updaterow "+a5);a6(true)}};var i=new $.jqx.dataAdapter(a3,{beforeLoadComplete:function(a5){var a7=new Array();for(var a6=0;a6<a5.length;a6++){var a8=a5[a6];a7.push(a8);switch(a8.m_name){case"CaCl2":$("#wa_cacl2").val(a8.m_amount*1000);break;case"CaSO4":$("#wa_caso4").val(a8.m_amount*1000);break;case"MgSO4":$("#wa_mgso4").val(a8.m_amount*1000);break;case"NaCl":$("#wa_nacl").val(a8.m_amount*1000);break;case"Melkzuur":$("#wa_acid_name").val(0);$("#wa_acid").val(a8.m_amount*1000);$("#wa_acid_perc").val(80);ag="Melkzuur";break;case"Zoutzuur":$("#wa_acid_name").val(1);$("#wa_acid").val(a8.m_amount*1000);$("#wa_acid_perc").val(80);ag="Zoutzuur";break;case"Fosforzuur":$("#wa_acid_name").val(2);$("#wa_acid").val(a8.m_amount*1000);$("#wa_acid_perc").val(80);ag="Fosforzuur";break;case"Zwavelzuur":$("#wa_acid_name").val(3);$("#wa_acid").val(a8.m_amount*1000);$("#wa_acid_perc").val(80);ag="Zwavelzuur";break;case"NaHCO3":$("#wa_base_name").val(0);$("#wa_base").val(a8.m_amount*1000);aU="NaHCO3";break;case"Na2CO3":$("#wa_base_name").val(1);$("#wa_base").val(a8.m_amount*1000);aU="Na2CO3";break;case"CaCO3":$("#wa_base_name").val(2);$("#wa_base").val(a8.m_amount*1000);aU="CaCO3";break;case"Ca(OH)2":$("#wa_base_name").val(3);$("#wa_base").val(a8.m_amount*1000);aU="Ca(OH)2";break}}return a7},loadError:function(a7,a5,a6){$("#err").text(a5+" "+a6)},});$("#miscGrid").jqxGrid({width:1240,height:575,source:i,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a6){var a5=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a6.append(a5);a5.append('<div style="float: left; margin-left: 165px;" id="maddrowbutton"></div>');a5.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a5.append('<div style="float: left; margin-left: 10px;" id="minstockbutton"></div>');a5.append('<input style="float: left; margin-left: 400px;" id="mdeleterowbutton" type="button" value="Verwijder ingredient" />');$("#maddrowbutton").jqxDropDownList({placeHolder:"Kies ingredi&euml;nt:",theme:theme,template:"primary",source:misclist,disabled:(d.stage>3),displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500});$("#maddrowbutton").on("select",function(a9){if(a9.args){var a7=a9.args.index;var a8=misclist.records[a7];var ba={};ba.m_name=a8.name;ba.m_amount=0;ba.m_cost=a8.cost;ba.m_type=a8.type;ba.m_use_use=a8.use_use;ba.m_time=0;ba.m_amount_is_weight=a8.amount_is_weight;ba.m_inventory=a8.inventory;$("#miscGrid").jqxGrid("addrow",null,ba)}});$("#minstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#minstockbutton").on("change",function(a7){miscinstock=a7.args.checked;misclist.dataBind()});$("#mdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#mdeleterowbutton").on("click",function(){var a7=$("#miscGrid").jqxGrid("getselectedrowindex");var ba=$("#miscGrid").jqxGrid("getdatainformation").rowscount;var a8=$("#miscGrid").jqxGrid("getcellvalue",a7,"m_type");if(a7>=0&&a7<ba&&a8!=4){var a9=$("#miscGrid").jqxGrid("getrowid",a7);$("#miscGrid").jqxGrid("deleterow",a9)}})},ready:function(){aG();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Ingredient",datafield:"m_name"},{text:"Type",width:140,datafield:"m_type",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+MiscTypeData[a9].nl+"</span>"}},{text:"Gebruik",width:140,datafield:"m_use_use",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+MiscUseData[a9].nl+"</span>"}},{text:"Tijd",datafield:"m_time",width:90,align:"right",cellsrenderer:function(a6,a5,a9,a8,a7,bb){var ba="";if(bb.m_use_use==2){ba=ah.formatNumber(a9,"f0")+" min."}else{if((bb.m_use_use==3)||(bb.m_use_use==4)){ba=ah.formatNumber(a9/1440,"f0")+" dagen"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ba+"</span>"},},{text:"Hoeveel",datafield:"m_amount",width:110,align:"right",cellsrenderer:function(a6,a5,ba,a8,a7,bb){var a9=bb.m_amount_is_weight?"gr":"ml";return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ah.formatNumber(ba*1000,"f2")+" "+a9+"</span>"}},{text:"Voorraad",datafield:"m_inventory",width:110,align:"right",cellsrenderer:function(a9,a5,ba,bc,a6,bd){if(((d.inventory_reduced<=2)&&(bd.m_use_use<=2))||((d.inventory_reduced<=3)&&(bd.m_use_use==3))||((d.inventory_reduced<=5)&&(bd.m_use_use==4))||((d.inventory_reduced<=6)&&(bd.m_use_use==5))){var bb=bd.m_amount_is_weight?"gr":"ml";var a7="#ffffff";if(ba<bd.m_amount){a7="#ff4040"}var a8=ah.formatNumber(ba*1000,"f2")+" "+bb;return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a7+';">'+a8+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a5){aw=a5;aH=$("#miscGrid").jqxGrid("getrowdata",aw);if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{if(aH.m_type==4){alert("Brouwzouten wijzigen in de water tab.")}else{console.log("edit button row "+a5);if(aH.m_amount_is_weight){$("#wm_pmpt_amount").html("Gewicht gram:")}else{$("#wm_pmpt_amount").html("Volume ml:")}$("#wm_name").val(aH.m_name);$("#wm_amount").val(aH.m_amount*1000);if((aH.m_use_use==3)||(aH.m_use_use==4)){$("#wm_time").val(aH.m_time/1440)}else{$("#wm_time").val(aH.m_time)}$("#wm_use_use").val(aH.m_use_use);$("#popupMisc").jqxWindow("open")}}}}]})};var aM=function(a3){var i={localdata:a3.yeasts,datatype:"local",cache:false,async:false,datafields:[{name:"y_name",type:"string"},{name:"y_laboratory",type:"string"},{name:"y_product_id",type:"string"},{name:"y_amount",type:"float"},{name:"y_cost",type:"float"},{name:"y_type",type:"int"},{name:"y_form",type:"int"},{name:"y_flocculation",type:"int"},{name:"y_min_temperature",type:"float"},{name:"y_max_temperature",type:"float"},{name:"y_attenuation",type:"float"},{name:"y_use",type:"int"},{name:"y_cells",type:"float"},{name:"y_tolerance",type:"float"},{name:"y_inventory",type:"float"},{name:"y_avail",type:"int"}],addrow:function(a6,a8,a5,a7){console.log("yeast addrow "+a6);a7(true)},deleterow:function(a5,a6){console.log("yeast deleterow "+a5);a6(true)},updaterow:function(a5,a7,a6){console.log("yeast updaterow "+a5);a6(true)}};var a4=new $.jqx.dataAdapter(i);$("#yeastGrid").jqxGrid({width:1240,height:350,source:a4,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a6){var a5=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a6.append(a5);a5.append('<div style="float: left; margin-left: 165px;" id="yaddrowbutton"></div>');a5.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a5.append('<div style="float: left; margin-left: 10px;" id="yinstockbutton"></div>');a5.append('<input style="float: left; margin-left: 400px;" id="ydeleterowbutton" type="button" value="Verwijder gist" />');$("#yaddrowbutton").jqxDropDownList({placeHolder:"Kies gist:",theme:theme,source:yeastlist,disabled:(d.stage>3),template:"primary",displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a8,a7,ba){var a9=yeastlist.records[a8];return a9.laboratory+" "+a9.product_id+" "+a9.name}});$("#yaddrowbutton").on("select",function(a9){if(a9.args){var a7=a9.args.index;var a8=yeastlist.records[a7];var ba={};ba.y_name=a8.name;ba.y_laboratory=a8.laboratory;ba.y_product_id=a8.product_id;ba.y_type=a8.type;ba.y_form=a8.form;ba.y_amount=0;ba.y_cost=a8.cost;ba.y_use=0;ba.y_min_temperature=a8.min_temperature;ba.y_max_temperature=a8.max_temperature;ba.y_attenuation=a8.attenuation;ba.y_flocculation=a8.flocculation;ba.y_cells=a8.cells;ba.y_tolerance=a8.tolerance;ba.y_inventory=a8.inventory;$("#yeastGrid").jqxGrid("addrow",null,ba)}Y();$("#yaddrowbutton").jqxDropDownList("clearSelection")});$("#yinstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#yinstockbutton").on("change",function(a7){yeastinstock=a7.args.checked;yeastlist.dataBind()});$("#ydeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#ydeleterowbutton").on("click",function(){var a7=$("#yeastGrid").jqxGrid("getselectedrowindex");var a9=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(a7>=0&&a7<a9){var a8=$("#yeastGrid").jqxGrid("getrowid",a7);$("#yeastGrid").jqxGrid("deleterow",a8);Y()}})},ready:function(){U();J();Y();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Gist",datafield:"y_name"},{text:"Laboratorium",width:150,datafield:"y_laboratory"},{text:"Code",width:90,datafield:"y_product_id"},{text:"Soort",width:100,datafield:"y_form",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+YeastFormData[a9].nl+"</span>"}},{text:"Min. &deg;C",width:70,align:"right",cellsalign:"right",datafield:"y_min_temperature"},{text:"Max. &deg;C",width:70,align:"right",cellsalign:"right",datafield:"y_max_temperature"},{text:"Tol. %",width:60,align:"right",cellsalign:"right",datafield:"y_tolerance",cellsrenderer:function(a7,a6,bb,ba,a9,bc){var a5="#ffffff";var a8="";if(bb>0){a8=ah.formatNumber(bb,"f1");if(d.est_abv>bb){a5="#ff4040"}}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a5+';">'+a8+"</span>"}},{text:"Attn. %",width:70,align:"right",cellsalign:"right",datafield:"y_attenuation",cellsformat:"f1"},{text:"Voor",width:120,datafield:"y_use",cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+YeastUseData[a9].nl+"</span>"}},{text:"Hoeveel",datafield:"y_amount",width:90,align:"right",cellsrenderer:function(a6,a5,ba,a9,a8,bb){var a7=ah.formatNumber(ba*1000,"f0")+" ml";if(bb.y_form==0){a7=ah.formatNumber(ba,"f0")+" pk"}else{if(bb.y_form==1){a7=ah.formatNumber(ba*1000,"f1")+" gr"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a7+"</span>"}},{text:"Voorraad",datafield:"y_inventory",width:90,align:"right",cellsrenderer:function(a7,a6,bb,ba,a9,bc){if(((d.inventory_reduced<=3)&&(bc.y_use==0))||((d.inventory_reduced<=4)&&(bc.y_use==1))||((d.inventory_reduced<=5)&&(bc.y_use==2))||((d.inventory_reduced<=6)&&(bc.y_use==3))){var a5="#ffffff";if(bb<bc.y_amount){a5="#ff4040"}var a8=ah.formatNumber(bb*1000,"f0")+" ml";if(bc.y_form==0){a8=ah.formatNumber(bb,"f0")+" pk"}else{if(bc.y_form==1){a8=ah.formatNumber(bb*1000,"f1")+" gr"}}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a5+';">'+a8+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:90,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a5){if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{aE=a5;f=$("#yeastGrid").jqxGrid("getrowdata",aE);if(f.y_form==0){$("#wy_pmpt_amount").html("Pak(ken):");$("#wy_amount").val(f.y_amount);$("#wy_amount").jqxNumberInput({decimalDigits:0})}else{if(f.y_form==1){$("#wy_pmpt_amount").html("Gewicht gram:");$("#wy_amount").val(f.y_amount*1000);$("#wy_amount").jqxNumberInput({decimalDigits:1})}else{$("#wy_pmpt_amount").html("Volume ml:");$("#wy_amount").val(f.y_amount*1000);$("#wy_amount").jqxNumberInput({decimalDigits:0})}}$("#wy_name").val(f.y_name);$("#wy_laboratory").val(f.y_laboratory);$("#wy_product_id").val(f.y_product_id);$("#wy_use").val(f.y_use);$("#popupYeast").jqxWindow("open")}}}]})};var au=function(a4){var a3={localdata:a4.mashs,datatype:"local",cache:false,async:false,datafields:[{name:"step_name",type:"string"},{name:"step_type",type:"int"},{name:"step_infuse_amount",type:"float"},{name:"step_temp",type:"float"},{name:"step_time",type:"float"},{name:"step_thickness",type:"float"},{name:"ramp_time",type:"float"},{name:"end_temp",type:"float"}],addrow:function(a6,a8,a5,a7){a7(true)},deleterow:function(a5,a6){a6(true)}};var i=new $.jqx.dataAdapter(a3,{beforeLoadComplete:function(a5){D=0;var a7=new Array();for(var a6=0;a6<a5.length;a6++){var a8=a5[a6];if(a8.step_type==0){D+=parseFloat(a8.step_infuse_amount)}a8.step_thickness=0;a7.push(a8)}},});$("#mashGrid").jqxGrid({width:1240,height:400,source:i,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a6){var a5=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a6.append(a5);a5.append('<input style="float: left; margin-left: 165px;" id="saddrowbutton" type="button" value="Nieuwe stap" />');a5.append('<input style="float: left; margin-left: 565px;" id="sdeleterowbutton" type="button" value="Verwijder stap" />');$("#saddrowbutton").jqxButton({template:"primary",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#saddrowbutton").on("click",function(){var a8=$("#mashGrid").jqxGrid("getdatainformation").rowscount;var a7={};a7.step_name="Stap "+(a8+1);if(a8>0){a7.step_type=1}else{a7.step_type=0;a7.step_infuse_amount=15}a7.step_temp=62;a7.step_time=20;a7.step_thickness=0;a7.ramp_time=1;a7.end_temp=62;$("#mashGrid").jqxGrid("addrow",null,a7)});$("#sdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#sdeleterowbutton").on("click",function(){var a7=$("#mashGrid").jqxGrid("getselectedrowindex");var a9=$("#mashGrid").jqxGrid("getdatainformation").rowscount;if(a7>=0&&a7<a9){var a8=$("#mashGrid").jqxGrid("getrowid",a7);$("#mashGrid").jqxGrid("deleterow",a8)}})},ready:function(){aX();aO();$("#jqxLoader").jqxLoader("close");$("#jqxTabs").jqxTabs("first")},columns:[{text:"Stap naam",datafield:"step_name"},{text:"Stap type",datafield:"step_type",width:175,cellsrenderer:function(a6,a5,a9,a8,a7,ba){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+MashStepTypeData[a9].nl+"</span>"}},{text:"Start &deg;C",datafield:"step_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Eind &deg;C",datafield:"end_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Rust min.",datafield:"step_time",width:90,align:"right",cellsalign:"right"},{text:"Stap min.",datafield:"ramp_time",width:90,align:"right",cellsalign:"right"},{text:"Infuse L.",datafield:"step_infuse_amount",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"L/Kg.",datafield:"step_thickness",width:90,align:"right",cellsalign:"right",cellsformat:"f2"},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a5){if(d.stage>3){alert("Het maichen is al gedaan.")}else{ak=a5;E=$("#mashGrid").jqxGrid("getrowdata",ak);$("#wstep_name").val(E.step_name);$("#wstep_type").val(E.step_type);$("#wstep_infuse_amount").val(E.step_infuse_amount);$("#wstep_temp").val(E.step_temp);$("#wend_temp").val(E.end_temp);$("#wstep_time").val(E.step_time);$("#wramp_time").val(E.ramp_time);if(E.step_type==0){$("#wstep_infuse_amount").show();$("#wstep_pmpt").show()}else{$("#wstep_infuse_amount").hide();$("#wstep_pmpt").hide()}$("#popupMash").jqxWindow("open")}}}]})};$("#name").jqxTooltip({content:"De naam voor dit product."});$("#name").jqxInput({theme:theme,width:640,height:23});$("#code").jqxTooltip({content:"Product code nummer."});$("#code").jqxInput({theme:theme,width:100,height:23});$("#birth").jqxTooltip({content:"De ontwerp datum van dit product."});$("#birth").jqxInput({theme:theme,width:120,height:23});$("#stage").jqxTooltip({content:"De productie fase van dit product."});$("#stage").jqxInput({theme:theme,width:100,height:23});$("#locked").jqxCheckBox({theme:theme,width:120,height:23,disabled:true});$("#locked").on("checked",function(i){if(d.stage>=10){d.locked=1;d.stage=11;aV()}});$("#locked").on("unchecked",function(i){if(d.stage>=10){d.locked=0;d.stage=10;aV()}});$("#notes").jqxTooltip({content:"De uitgebreide opmerkingen over dit product."});$("#notes").jqxInput({theme:theme,width:960,height:100});$("#type").jqxTooltip({content:"Het brouw type van dit recept."});$("#type").jqxDropDownList({theme:theme,source:RecipeTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#efficiency").jqxTooltip({content:"Het rendement van maischen en koken."});$("#efficiency").jqxNumberInput(Perc1dec);$("#batch_size").jqxTooltip({content:"Het volume van het gekoelde wort na het koken."});$("#batch_size").jqxNumberInput(Spin1dec);$("#batch_size").jqxNumberInput({min:4});$("#boil_time").jqxTooltip({content:"De kooktijd in minuten."});$("#boil_time").jqxNumberInput(PosInt);$("#boil_time").jqxNumberInput({min:4,max:360});$("#boil_size").jqxTooltip({content:"Het volume van het wort voor het koken."});$("#boil_size").jqxNumberInput({inputMode:"simple",theme:theme,width:90,height:23,decimalDigits:2,readOnly:true});$("#st_guide").jqxTooltip({content:"De bierstijl gids voor dit recept."});$("#st_guide").jqxInput({theme:theme,width:250,height:23});$("#st_name").jqxTooltip({content:"De bierstijl naam voor dit recept."});$("#st_name").jqxInput({theme:theme,width:250,height:23});$("#st_letter").jqxTooltip({content:"De bierstijl letter voor dit recept."});$("#st_letter").jqxInput({theme:theme,width:90,height:23});$("#st_type").jqxTooltip({content:"Het bierstijl type."});$("#st_type").jqxInput({theme:theme,width:250,height:23});$("#st_category").jqxTooltip({content:"De Amerikaanse bierstijl categorie."});$("#st_category").jqxInput({theme:theme,width:250,height:23});$("#st_category_number").jqxTooltip({content:"De Amerikaanse bierstijl categorie sub nummer."});$("#st_category_number").jqxNumberInput(Smal0dec);$("#est_og").jqxTooltip({content:"Het begin SG wat je wilt bereiken. De moutstort wordt automatisch herberekend."});$("#est_og").jqxNumberInput(SGopts);$("#st_og_min").jqxTooltip({content:"Het minimum begin SG voor deze bierstijl."});$("#st_og_min").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#st_og_max").jqxTooltip({content:"Het maximum begin SG voor deze bierstijl."});$("#st_og_max").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#est_fg").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg").jqxNumberInput(Show3dec);$("#st_fg_min").jqxTooltip({content:"Het minimum eind SG voor deze bierstijl."});$("#st_fg_min").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#st_fg_max").jqxTooltip({content:"Het maximum eind SG voor deze bierstijl."});$("#st_fg_max").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#est_abv").jqxTooltip({content:"Alcohol volume %. Dit wordt automatisch berekend."});$("#est_abv").jqxNumberInput(Smal1dec);$("#st_abv_min").jqxTooltip({content:"Het minimum alcohol volume % voor deze bierstijl."});$("#st_abv_min").jqxNumberInput(Smal1dec);$("#st_abv_max").jqxTooltip({content:"Het maximum alcohol volume % voor deze bierstijl."});$("#st_abv_max").jqxNumberInput(Smal1dec);$("#est_color").jqxTooltip({content:"De kleur in EBC. Dit wordt automatisch berekend."});$("#est_color").jqxNumberInput(Show0dec);$("#st_color_min").jqxTooltip({content:"De minimum kleur voor deze bierstijl."});$("#st_color_min").jqxNumberInput(Smal0dec);$("#st_color_max").jqxTooltip({content:"De maximum kleur voor deze bierstijl."});$("#st_color_max").jqxNumberInput(Smal0dec);$("#color_method").jqxDropDownList({theme:theme,source:ColorMethodAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#est_ibu").jqxTooltip({content:"De bitterheid in IBU. Dit wordt automatisch berekend."});$("#est_ibu").jqxNumberInput(Show0dec);$("#st_ibu_min").jqxTooltip({content:"De minimum bitterheid voor deze bierstijl."});$("#st_ibu_min").jqxNumberInput(Smal0dec);$("#st_ibu_max").jqxTooltip({content:"De maximum bitterheid voor deze bierstijl."});$("#st_ibu_max").jqxNumberInput(Smal0dec);$("#ibu_method").jqxDropDownList({theme:theme,source:IBUmethodAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#kcal").jqxTooltip({content:"Energie-inhoud in kcal/liter."});$("#kcal").jqxNumberInput(Smal0dec);$("#est_carb").jqxTooltip({content:"Koolzuur volume. Dit wordt automatisch berekend."});$("#est_carb").jqxNumberInput(Smal1dec);$("#st_carb_min").jqxTooltip({content:"Het minimum koolzuur volume voor deze bierstijl."});$("#st_carb_min").jqxNumberInput(Smal1dec);$("#st_carb_max").jqxTooltip({content:"Het maximum koolzuur volume voor deze bierstijl."});$("#st_carb_max").jqxNumberInput(Smal1dec);$("#eq_name").jqxTooltip({content:"De naam van deze brouw apparatuur."});$("#eq_name").jqxInput({theme:theme,width:250,height:23});$("#eq_boil_size").jqxTooltip({content:"Normaal kook volume in liters"});$("#eq_boil_size").jqxNumberInput(Show1dec);$("#eq_batch_size").jqxTooltip({content:"Berekende batch grootte in liters aan het eind van de kook."});$("#eq_batch_size").jqxNumberInput(Show1dec);$("#eq_tun_volume").jqxTooltip({content:"Maisch ketel volume."});$("#eq_tun_volume").jqxNumberInput(Show1dec);$("#eq_top_up_water").jqxTooltip({content:"Extra water in het gistvat."});$("#eq_top_up_water").jqxNumberInput(Show1dec);$("#eq_trub_chiller_loss").jqxTooltip({content:"Standaard verlies bij het overbrengen naar het gistvat."});$("#eq_trub_chiller_loss").jqxNumberInput(Show1dec);$("#eq_evap_rate").jqxTooltip({content:"Verdamping in liters per uur."});$("#eq_evap_rate").jqxNumberInput(Show2dec);$("#eq_boil_time").jqxTooltip({content:"Normale kooktijd in minuten."});$("#eq_boil_time").jqxNumberInput(Show0dec);$("#eq_top_up_kettle").jqxTooltip({content:"Extra water toevoegen tijdens de kook."});$("#eq_top_up_kettle").jqxNumberInput(Show1dec);$("#eq_hop_utilization").jqxTooltip({content:"100% voor kleine installaties, hoger voor grote brouwerijen."});$("#eq_hop_utilization").jqxNumberInput(Show0dec);$("#eq_notes").jqxTooltip({content:"Opmerkingen over deze apparatuur."});$("#eq_notes").jqxInput({theme:theme,width:960,height:200});$("#eq_lauter_volume").jqxTooltip({content:"Filterkuip volume."});$("#eq_lauter_volume").jqxNumberInput(Show1dec);$("#eq_lauter_deadspace").jqxTooltip({content:"Filterkuip verlies in liters."});$("#eq_lauter_deadspace").jqxNumberInput(Show1dec);$("#eq_kettle_volume").jqxTooltip({content:"Kook ketel volume in liters."});$("#eq_kettle_volume").jqxNumberInput(Show1dec);$("#eq_mash_volume").jqxTooltip({content:"Maisch water voor de eerste stap."});$("#eq_mash_volume").jqxNumberInput(Show1dec);$("#eq_mash_max").jqxTooltip({content:"De maximale moutstort in Kg."});$("#eq_mash_max").jqxNumberInput(Show1dec);$("#eq_efficiency").jqxTooltip({content:"Gemiddeld brouwzaal rendement."});$("#eq_efficiency").jqxNumberInput(Show1dec);$("#est_color2").jqxTooltip({content:"De kleur in EBC. Dit wordt automatisch berekend."});$("#est_color2").jqxNumberInput(Show0dec);$("#est_og2").jqxTooltip({content:"Het geschatte begin SG van dit product."});$("#est_og2").jqxNumberInput(Show3dec);$("#mash_kg").jqxTooltip({content:"Het gewicht van alle mouten in de maisch."});$("#mash_kg").jqxNumberInput(Show3dec);$("#perc_malts").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:120,animationDuration:0,colorRanges:[{stop:90,color:"#008C00"},{stop:100,color:"#EB7331"},{stop:120,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*1.2))+"%"}});$("#perc_sugars").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:50,animationDuration:0,colorRanges:[{stop:20,color:"#008C00"},{stop:50,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*5)/10)+"%"}});$("#perc_cara").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:50,animationDuration:0,colorRanges:[{stop:25,color:"#008C00"},{stop:50,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*5)/10)+"%"}});$("#ferm_lintner").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:200,animationDuration:0,colorRanges:[{stop:30,color:"#FF0000"},{stop:40,color:"#EB7331"},{stop:200,color:"#008C00"}],renderText:function(i){return(parseInt(i)*2)+" lintner"}});$("#popupFermentable").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#FermentableReady"),modalOpacity:0.4});$("#FermentableReady").jqxButton({template:"success",width:"90px",theme:theme});$("#FermentableReady").click(function(){var i=$("#fermentableGrid").jqxGrid("getrowid",u);console.log("FermentableReady row:"+u+" ID:"+i);var a3={f_name:aL.f_name,f_origin:aL.f_origin,f_supplier:aL.f_supplier,f_amount:aL.f_amount,f_cost:aL.f_cost,f_type:aL.f_type,f_yield:aL.f_yield,f_color:aL.f_color,f_coarse_fine_diff:aL.f_coarse_fine_diff,f_moisture:aL.f_moisture,f_diastatic_power:aL.f_diastatic_power,f_protein:aL.f_protein,f_max_in_batch:aL.f_max_in_batch,f_graintype:aL.f_graintype,f_added:aL.f_added,f_dissolved_protein:aL.f_dissolved_protein,f_recommend_mash:aL.f_recommend_mash,f_add_after_boil:aL.f_add_after_boil,f_adjust_to_total_100:aL.f_adjust_to_total_100,f_percentage:aL.f_percentage,f_di_ph:aL.f_di_ph,f_acid_to_ph_57:aL.f_acid_to_ph_57,f_inventory:aL.f_inventory,f_avail:aL.f_avail};$("#fermentableGrid").jqxGrid("updaterow",i,a3);aW();U();at();aO()});$("#wf_name").jqxInput({theme:theme,width:320,height:23});$("#wf_instock").jqxCheckBox({theme:theme,height:23});$("#wf_instock").on("change",function(i){fermentableinstock=i.args.checked;fermentablelist.dataBind()});$("#wf_select").jqxDropDownList({placeHolder:"Kies mout:",theme:theme,source:fermentablelist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a3,i,a5){var a4=fermentablelist.records[a3];return a4.supplier+" / "+a4.name+" ("+a4.color+" EBC)"}});$("#wf_select").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=fermentablelist.records[i];$("#wf_name").val(a3.name);aL.f_name=a3.name;aL.f_origin=a3.origin;aL.f_supplier=a3.supplier;aL.f_type=a3.type;aL.f_cost=a3.cost;aL.f_yield=a3.yield;aL.f_color=a3.color;aL.f_coarse_fine_diff=a3.coarse_fine_diff;aL.f_moisture=a3.moisture;aL.f_diastatic_power=a3.diastatic_power;aL.f_protein=a3.protein;aL.f_max_in_batch=a3.max_in_batch;aL.f_graintype=a3.graintype;aL.f_dissolved_protein=a3.dissolved_protein;aL.f_recommend_mash=a3.recommend_mash;aL.f_add_after_boil=a3.add_after_boil;aL.f_di_ph=a3.di_ph;aL.f_acid_to_ph_57=a3.acid_to_ph_57;aL.f_inventory=a3.inventory}});$("#wf_amount").jqxNumberInput(Spin3dec);$("#wf_amount").on("change",function(i){console.log("amount changed: "+i.args.value);$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_amount",i.args.value);aL.f_amount=i.args.value;if(!k){aW();U();at();aO()}});$("#wf_percentage").jqxNumberInput(Perc1dec);$("#wf_percentage").on("change",function(a3){var a4=Math.round(aL.f_percentage*10)/10;var a5=a3.args.value;console.log("percentage changed: "+a5+" old: "+a4);aL.f_percent=a5;var a9=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if((a4!=a5)&&(a9>1)){var bb=$("#fermentableGrid").jqxGrid("getrowdata",u);if(bb.f_adjust_to_total_100){$("#wf_percentage").val(a4)}else{var ba=a5-a4;var a6=0;for(ae=0;ae<a9;ae++){var bb=$("#fermentableGrid").jqxGrid("getrowdata",ae);if(bb.f_added<4){a6+=Math.round(bb.f_amount*1000)/1000}}a6=Math.round(a6*1000)/1000;if(k){var a8=Math.round(a6*ba*10)/1000;var bb=$("#fermentableGrid").jqxGrid("getrowdata",u);var i=Math.round((bb.f_amount+a8)*1000)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_amount",i);$("#wf_amount").val(i);$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_percentage",bb.f_percentage+ba);for(ae=0;ae<a9;ae++){var bb=$("#fermentableGrid").jqxGrid("getrowdata",ae);if(bb.f_adjust_to_total_100){i=bb.f_amount-a8;$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",bb.f_percentage-ba);$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_amount",i)}}U();at();aO()}else{var a7=a6*ba/100;for(ae=0;ae<a9;ae++){var bb=$("#fermentableGrid").jqxGrid("getrowdata",ae);if(bb.f_added<4){if(ae==u){var i=Math.round((bb.f_amount+a7)*1000)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_amount",i);$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",a5)}else{var i=Math.round((bb.f_amount-(a7/(a9-1)))*1000)/1000;var bc=Math.round((i/a6)*1000)/10;$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_amount",i);$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",bc)}}else{$("#fermentableGrid").jqxGrid("setcellvalue",ae,"f_percentage",0)}}U();at();aO()}}}});$("#wf_max_in_batch").jqxNumberInput(Show1dec);$("#wf_adjust_to_total_100").jqxCheckBox({theme:theme,width:120,height:23});$("#wf_adjust_to_total_100").on("checked",function(a4){if(aL.f_adjust_to_total_100==0){if(k){var a5=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;for(var a3=0;a3<a5;a3++){if(a3!=u){$("#fermentableGrid").jqxGrid("setcellvalue",a3,"f_adjust_to_total_100",0)}}}$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_adjust_to_total_100",1);U()}});$("#wf_adjust_to_total_100").on("unchecked",function(i){if(aL.f_adjust_to_total_100!=0){$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_adjust_to_total_100",0);U()}});$("#wf_added").jqxDropDownList({theme:theme,source:AddedAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wf_added").on("select",function(a3){if(a3.args){var i=a3.args.index;$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_added",i);U();at();aO()}});$("#est_ibu2").jqxTooltip({content:"De bitterheid in IBU. Dit wordt automatisch berekend."});$("#est_ibu2").jqxNumberInput(Smal0dec);$("#hop_flavour").jqxProgressBar({width:300,height:23,theme:theme,showText:true,animationDuration:0,colorRanges:[{stop:20,color:"#004D00"},{stop:40,color:"#008C00"},{stop:60,color:"#00BF00"},{stop:80,color:"#00FF00"},{stop:100,color:"#80FF80"}],renderText:function(a3){var i=parseInt(a3);if(i<20){return"Weinig"}else{if(i<40){return"Matig"}else{if(i<60){return"Redelijk"}else{if(i<80){return"Veel"}else{return"Zeer veel"}}}}}});$("#hop_aroma").jqxProgressBar({width:300,height:23,theme:theme,showText:true,animationDuration:0,colorRanges:[{stop:20,color:"#004D00"},{stop:40,color:"#008C00"},{stop:60,color:"#00BF00"},{stop:80,color:"#00FF00"},{stop:100,color:"#80FF80"}],renderText:function(a3){var i=parseInt(a3);if(i<20){return"Weinig"}else{if(i<40){return"Matig"}else{if(i<60){return"Redelijk"}else{if(i<80){return"Veel"}else{return"Zeer veel"}}}}}});$("#popupHop").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#HopReady"),modalOpacity:0.4});$("#HopReady").jqxButton({template:"success",width:"90px",theme:theme});$("#HopReady").click(function(){var i=$("#hopGrid").jqxGrid("getrowid",a);console.log("HopReady row:"+a+" ID:"+i);var a3={h_name:$("#wh_name").val(),h_origin:e.h_origin,h_amount:parseFloat($("#wh_amount").jqxNumberInput("decimal"))/1000,h_cost:e.h_cost,h_type:e.h_type,h_form:e.h_form,h_useat:$("#wh_useat").val(),h_time:e.h_time,h_alpha:e.h_alpha,h_beta:e.h_beta,h_hsi:e.h_hsi,h_humulene:e.h_humulene,h_caryophyllene:e.h_caryophyllene,h_cohumulone:e.h_cohumulone,h_myrcene:e.h_myrcene,h_total_oil:e.h_total_oil,h_inventory:e.h_inventory,h_avail:e.h_avail};$("#hopGrid").jqxGrid("updaterow",i,a3);at()});$("#wh_name").jqxInput({theme:theme,width:320,height:23});$("#wh_instock").jqxCheckBox({theme:theme,height:23});$("#wh_instock").on("change",function(i){hopinstock=i.args.checked;hoplist.dataBind()});$("#wh_select").jqxDropDownList({placeHolder:"Kies hop:",theme:theme,source:hoplist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a3,i,a5){var a4=hoplist.records[a3];return a4.origin+" - "+a4.name+" / "+HopFormData[a4.form].nl+" ("+a4.alpha+" % &alpha;)"}});$("#wh_select").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=hoplist.records[i];$("#wh_name").val(a3.name);e.h_name=a3.name;e.h_origin=a3.origin;e.h_cost=a3.cost;e.h_type=a3.type;e.h_form=a3.form;e.h_alpha=a3.alpha;e.h_beta=a3.beta;e.h_hsi=a3.hsi;e.h_humulene=a3.humulene;e.h_caryophyllene=a3.caryophyllene;e.h_cohumulone=a3.cohumulone;e.h_myrcene=a3.myrcene;e.h_total_oil=a3.total_oil;e.h_inventory=a3.inventory}});$("#wh_amount").jqxNumberInput(Spin1dec);$("#wh_amount").on("change",function(a3){console.log("amount changed: "+a3.args.value+" time:"+e.h_time+" alpha:"+e.h_alpha);var i=parseFloat(a3.args.value)/1000;var a4=toIBU(e.h_useat,e.h_form,al,parseFloat($("#batch_size").jqxNumberInput("decimal")),i,parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());e.h_amount=i;$("#wh_ibu").val(a4)});$("#wh_ibu").jqxNumberInput(Show1dec);$("#wh_time").jqxNumberInput(PosInt);$("#wh_time").on("change",function(i){var a3=parseFloat(i.args.value);if(e.h_useat==2){if(a3>parseFloat($("#boil_time").jqxNumberInput("decimal"))){a3=parseFloat($("#boil_time").jqxNumberInput("decimal"));$("#wh_time").val(a3)}e.h_time=a3}else{if(e.h_useat==4){if(a3>120){a3=120;$("#wh_time").val(a3)}e.h_time=a3}else{if(e.h_useat==5){if(a3>21){a3=21;$("#wh_time").val(a3)}e.h_time=a3*1440}}}var a4=toIBU(e.h_useat,e.h_form,al,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(e.h_amount),parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());$("#wh_ibu").val(a4)});$("#wh_useat").jqxDropDownList({theme:theme,source:HopUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wh_useat").on("select",function(a3){if(a3.args){var i=a3.args.index;e.h_useat=i;if((i==0)||(i==1)){e.h_time=parseFloat(d.boil_time);$("#wh_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wh_time").val(e.h_time)}else{if(i==3){e.h_time=0;$("#wh_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wh_time").val(0)}else{$("#wh_time").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}}if(i==5){$("#wh_pmpt_time").html("Tijd in dagen")}else{$("#wh_pmpt_time").html("Tijd in minuten")}}});$("#popupMisc").jqxWindow({width:800,height:275,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#MiscReady"),modalOpacity:0.4});$("#MiscReady").jqxButton({template:"success",width:"90px",theme:theme});$("#MiscReady").click(function(){var i=$("#miscGrid").jqxGrid("getrowid",aw);console.log("MiscReady row:"+aw+" ID:"+i);var a3={m_name:aH.m_name,m_amount:aH.m_amount,m_cost:aH.m_cost,m_type:aH.m_type,m_use_use:aH.m_use_use,m_time:aH.m_time,m_amount_is_weight:aH.m_amount_is_weight,m_inventory:aH.m_inventory,m_avail:aH.m_avail};$("#miscGrid").jqxGrid("updaterow",i,a3);aG()});$("#wm_name").jqxInput({theme:theme,width:320,height:23});$("#wm_instock").jqxCheckBox({theme:theme,height:23});$("#wm_instock").on("change",function(i){miscinstock=i.args.checked;misclist.dataBind()});$("#wm_select").jqxDropDownList({placeHolder:"Kies ingredi&euml;nt:",theme:theme,source:misclist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500});$("#wm_select").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=misclist.records[i];$("#wm_name").val(a3.name);aH.m_name=a3.name;aH.m_cost=a3.cost;aH.m_type=a3.type;aH.m_use_use=a3.use_use;aH.m_amount_is_weight=a3.amount_is_weight;aH.m_inventory=a3.inventory}});$("#wm_amount").jqxNumberInput(Spin2dec);$("#wm_amount").on("change",function(i){console.log("amount changed: "+i.args.value);aH.m_amount=parseFloat(i.args.value)/1000});$("#wm_time").jqxNumberInput(PosInt);$("#wm_time").on("change",function(i){console.log("time changed: "+i.args.value);var a3=parseFloat(i.args.value);if(aH.m_use_use==2){if(a3>parseFloat($("#boil_time").jqxNumberInput("decimal"))){a3=parseFloat($("#boil_time").jqxNumberInput("decimal"));$("#wm_time").val(a3)}aH.m_time=a3}else{if((aH.m_use_use==3)||(aH.m_use_use==4)){if(a3>21){a3=21;$("#wm_time").val(a3)}aH.m_time=a3*1440}}});$("#wm_use_use").jqxDropDownList({theme:theme,source:MiscUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wm_use_use").on("select",function(a3){if(a3.args){var i=a3.args.index;aH.m_use_use=i;if((i==2)||(i==3)||(i==4)){$("#wm_time").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}else{$("#wm_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wm_time").val(0);aH.m_time=0}}});$("#est_fg2").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg2").jqxNumberInput(Show3dec);$("#est_abv2").jqxTooltip({content:"Alcohol volume %. Dit wordt automatisch berekend."});$("#est_abv2").jqxNumberInput(Smal1dec);$("#yeast_cells").jqxNumberInput(Show1dec);$("#need_cells").jqxNumberInput(Show1dec);$("#plato_cells").jqxNumberInput(Show2dec);$("#popupYeast").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#YeastReady"),modalOpacity:0.4});$("#YeastReady").jqxButton({template:"success",width:"90px",theme:theme});$("#YeastReady").click(function(){var i=$("#yeastGrid").jqxGrid("getrowid",aE);console.log("YeastReady row:"+aE+" ID:"+i);var a3={y_name:f.y_name,y_laboratory:f.y_laboratory,y_product_id:f.y_product_id,y_amount:f.y_amount,y_cost:f.y_cost,y_type:f.y_type,y_form:f.y_form,y_flocculation:f.y_flocculation,y_min_temperature:f.y_min_temperature,y_max_temperature:f.y_max_temperature,y_attenuation:f.y_attenuation,y_use:f.y_use,y_cells:f.y_cells,y_tolerance:f.y_tolerance,y_inventory:f.y_inventory,y_avail:f.y_avail};$("#yeastGrid").jqxGrid("updaterow",i,a3);U();Y()});$("#wy_name").jqxInput({theme:theme,width:320,height:23});$("#wy_laboratory").jqxInput({theme:theme,width:320,height:23});$("#wy_product_id").jqxInput({theme:theme,width:320,height:23});$("#wy_instock").jqxCheckBox({theme:theme,height:23});$("#wy_instock").on("change",function(i){yeastinstock=i.args.checked;yeastlist.dataBind()});$("#wy_select").jqxDropDownList({placeHolder:"Kies gist:",theme:theme,source:yeastlist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a3,i,a5){var a4=yeastlist.records[a3];return a4.laboratory+" "+a4.product_id+" "+a4.name}});$("#wy_select").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=yeastlist.records[i];$("#wy_name").val(a3.name);$("#wy_laboratory").val(a3.laboratory);$("#wy_product_id").val(a3.product_id);f.y_name=a3.name;f.y_cost=a3.cost;f.y_type=a3.type;f.y_form=a3.form;f.y_laboratory=a3.laboratory;f.y_product_id=a3.product_id;f.y_min_temperature=a3.min_temperature;f.y_max_temperature=a3.max_temperature;f.y_flocculation=a3.flocculation;f.y_attenuation=a3.attenuation;f.y_cells=a3.cells;f.y_inventory=a3.inventory;if(f.y_form==0){$("#wy_pmpt_amount").html("Pak(ken):")}else{if(f.y_form==1){$("#wy_pmpt_amount").html("Gewicht gram:")}else{$("#wy_pmpt_amount").html("Volume ml:")}}U();Y()}});$("#wy_amount").jqxNumberInput(Spin1dec);$("#wy_amount").on("change",function(a3){console.log("amount changed: "+a3.args.value);if(f.y_form==0){var i=parseFloat(a3.args.value)}else{var i=parseFloat(a3.args.value)/1000}f.y_amount=i;U();Y()});$("#wy_use").jqxDropDownList({theme:theme,source:YeastUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wy_use").on("select",function(a3){if(a3.args){var i=a3.args.index;f.y_use=i;U();Y()}});for(var ae=1;ae<5;ae++){$("#prop"+ae+"_type").jqxDropDownList({theme:theme,source:StarterTypeAdapter,valueMember:"id",displayMember:"nl",width:120,height:23,autoDropDownHeight:true});$("#prop"+ae+"_type").hide();$("#prop"+ae+"_volume").jqxNumberInput(Spin3dec);$("#prop"+ae+"_volume").hide();$("#prop"+ae+"_irate").jqxNumberInput(Show1dec);$("#prop"+ae+"_irate").hide();$("#prop"+ae+"_ncells").jqxNumberInput(Show1dec);$("#prop"+ae+"_ncells").hide();$("#prop"+ae+"_tcells").jqxNumberInput(Show1dec);$("#prop"+ae+"_tcells").hide();$("#prop"+ae+"_growf").jqxNumberInput(Show2dec);$("#prop"+ae+"_growf").hide()}$("#starter_enable").jqxCheckBox({theme:theme,height:23});$("#starter_type").jqxDropDownList({theme:theme,source:StarterTypeAdapter,valueMember:"id",displayMember:"nl",width:120,height:23,autoDropDownHeight:true});$("#starter_sg").jqxNumberInput(SGopts);$("#starter_viability").jqxNumberInput(Perc0);$("#starter_try").jqxButton({template:"primary",width:"100px",height:23,theme:theme});$("#mash_name").jqxTooltip({content:"De omschrijving van dit maisch profiel."});$("#mash_name").jqxInput({theme:theme,width:320,height:23});$("#mash_select").jqxDropDownList({placeHolder:"Kies schema:",theme:theme,source:mashlist,displayMember:"name",width:250,height:23,dropDownWidth:500,dropDownHeight:500,dropDownHorizontalAlignment:"right"});$("#mash_select").on("select",function(a7){if(a7.args){var a4=a7.args.index;var a3=new Array();var a9=$("#mashGrid").jqxGrid("getdisplayrows");for(var a5=0;a5<a9.length;a5++){var ba=a9[a5];a3.push(ba.uid)}$("#mashGrid").jqxGrid("deleterow",a3);var a6=mashlist.records[a4];$("#mash_name").val(a6.name);for(a5=0;a5<a6.steps.length;a5++){var a8=a6.steps[a5];var ba={};ba.step_name=a8.step_name;ba.step_type=a8.step_type;if(D==0&&d.w1_amount>0){D=d.w1_amount}if(a5==0){ba.step_infuse_amount=D}else{ba.step_infuse_amount=0}if(ap>0){ba.step_thickness=parseFloat(D/ap)}else{ba.step_thickness=0}ba.step_temp=a8.step_temp;ba.end_temp=a8.end_temp;ba.step_time=a8.step_time;ba.ramp_time=a8.ramp_time;$("#mashGrid").jqxGrid("addrow",null,ba)}}});$("#popupMash").jqxWindow({width:800,height:350,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#MashReady"),modalOpacity:0.4});$("#MashReady").jqxButton({template:"success",width:"90px",theme:theme});$("#MashReady").click(function(){aO()});$("#wstep_name").jqxInput({theme:theme,width:320,height:23});$("#wstep_name").on("change",function(i){var a3=$("#mashGrid").jqxGrid("getrowdata",ak);a3.step_name=i.args.value});$("#wstep_type").jqxDropDownList({theme:theme,source:MashStepTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#wstep_type").on("select",function(a5){if(a5.args){var a3=a5.args.index;var a8=$("#mashGrid").jqxGrid("getrowdata",ak);a8.step_type=a3;if(a3==0){$("#wstep_infuse_amount").show();$("#wstep_pmpt").show()}else{a8.step_infuse_amount=0;$("#wstep_infuse_amount").hide();$("#wstep_pmpt").hide()}D=0;var a6=$("#mashGrid").jqxGrid("getrows");for(var a4=0;a4<a6.length;a4++){var a7=a6[a4];if(a7.step_type==0){D+=parseFloat(a7.step_infuse_amount)}}}});$("#wstep_temp").jqxNumberInput(Spin1dec);$("#wstep_temp").on("change",function(i){var a3=$("#mashGrid").jqxGrid("getrowdata",ak);a3.step_temp=parseFloat(i.args.value)});$("#wend_temp").jqxNumberInput(Spin1dec);$("#wend_temp").on("change",function(i){var a3=$("#mashGrid").jqxGrid("getrowdata",ak);a3.end_temp=parseFloat(i.args.value)});$("#wstep_time").jqxNumberInput(PosInt);$("#wstep_time").on("change",function(i){var a3=$("#mashGrid").jqxGrid("getrowdata",ak);a3.step_time=parseFloat(i.args.value)});$("#wramp_time").jqxNumberInput(PosInt);$("#wramp_time").on("change",function(i){var a3=$("#mashGrid").jqxGrid("getrowdata",ak);a3.ramp_time=parseFloat(i.args.value)});$("#wstep_infuse_amount").jqxNumberInput(Spin1dec);$("#wstep_infuse_amount").on("change",function(a4){var a7=$("#mashGrid").jqxGrid("getrowdata",ak);a7.step_infuse_amount=parseFloat(a4.args.value);D=0;var a5=$("#mashGrid").jqxGrid("getrows");for(var a3=0;a3<a5.length;a3++){var a6=a5[a3];if(a6.step_type==0){D+=parseFloat(a6.step_infuse_amount)}}if(d.w2_amount==0){d.w1_amount=D;$("#w1_amount").val(D)}else{d.w1_amount=(d.w1_amount/(d.w1_amount+d.w2_amount))*D;d.w2_amount=(d.w2_amount/(d.w1_amount+d.w2_amount))*D;$("#w1_amount").val(d.w1_amount);$("#w2_amount").val(d.w2_amount)}$("#wg_amount").val(D)});$("#tgt_bu").jqxNumberInput(Show2wat);$("#tgt_cl_so4").jqxNumberInput(Show1wat);$("#got_cl_so4").jqxNumberInput(Show1wat);$("#w1_name").jqxDropDownList({placeHolder:"Kies hoofd water:",theme:theme,source:waterlist,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:400});$("#w1_name").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=waterlist.records[i];d.w1_name=a3.name;$("#w1_calcium").val(a3.calcium);d.w1_calcium=a3.calcium;$("#w1_sulfate").val(a3.sulfate);d.w1_sulfate=a3.sulfate;$("#w1_chloride").val(a3.chloride);d.w1_chloride=a3.chloride;$("#w1_sodium").val(a3.sodium);d.w1_sodium=a3.sodium;$("#w1_magnesium").val(a3.magnesium);d.w1_magnesium=a3.magnesium;$("#w1_total_alkalinity").val(a3.total_alkalinity);d.w1_total_alkalinity=a3.total_alkalinity;$("#w1_ph").val(a3.ph);d.w1_ph=a3.ph;$("#w1_cost").val(a3.cost);d.w1_cost=a3.cost;Q()}});$("#w1_amount").jqxNumberInput(Show1wat);$("#w1_calcium").jqxNumberInput(Show1wat);$("#w1_magnesium").jqxNumberInput(Show1wat);$("#w1_sodium").jqxNumberInput(Show1wat);$("#w1_total_alkalinity").jqxNumberInput(Show1wat);$("#w1_chloride").jqxNumberInput(Show1wat);$("#w1_sulfate").jqxNumberInput(Show1wat);$("#w1_ph").jqxNumberInput(Show1wat);$("#w2_name").jqxDropDownList({placeHolder:"Kies meng water:",theme:theme,source:waterlist,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:400});$("#w2_name").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=waterlist.records[i];d.w2_name=a3.name;$("#w2_calcium").val(a3.calcium);d.w2_calcium=a3.calcium;$("#w2_sulfate").val(a3.sulfate);d.w2_sulfate=a3.sulfate;$("#w2_chloride").val(a3.chloride);d.w2_chloride=a3.chloride;$("#w2_sodium").val(a3.sodium);d.w2_sodium=a3.sodium;$("#w2_magnesium").val(a3.magnesium);d.w2_magnesium=a3.magnesium;$("#w2_total_alkalinity").val(a3.total_alkalinity);d.w2_total_alkalinity=a3.total_alkalinity;$("#w2_ph").val(a3.ph);d.w2_ph=a3.ph;$("#w2_cost").val(a3.cost);d.w2_cost=a3.cost;$("#w2_amount").jqxNumberInput({max:100000,readOnly:false});Q()}});$("#w2_amount").jqxTooltip({content:"De verdeling van het hoofd en meng water. Het totale maisch water volume blijft gelijk."});$("#w2_amount").jqxNumberInput({inputMode:"simple",spinMode:"simple",theme:theme,width:94,height:23,min:0,max:0,decimalDigits:1,spinButtons:true,spinButtonsStep:0.5,readOnly:true});$("#w2_calcium").jqxNumberInput(Show1wat);$("#w2_magnesium").jqxNumberInput(Show1wat);$("#w2_sodium").jqxNumberInput(Show1wat);$("#w2_total_alkalinity").jqxNumberInput(Show1wat);$("#w2_chloride").jqxNumberInput(Show1wat);$("#w2_sulfate").jqxNumberInput(Show1wat);$("#w2_ph").jqxNumberInput(Show1wat);$("#wg_amount").jqxNumberInput(Show1wat);$("#wg_calcium").jqxNumberInput(Show1wat);$("#wg_magnesium").jqxNumberInput(Show1wat);$("#wg_sodium").jqxNumberInput(Show1wat);$("#wg_total_alkalinity").jqxNumberInput(Show1wat);$("#wg_chloride").jqxNumberInput(Show1wat);$("#wg_sulfate").jqxNumberInput(Show1wat);$("#wg_ph").jqxNumberInput(Show1wat);$("#wb_calcium").jqxTooltip({content:"De ideale hoeveelheid Calcium is tussen 40 en 150."});$("#wb_calcium").jqxNumberInput(Show1wat);$("#wb_magnesium").jqxTooltip({content:"De ideale hoeveelheid Magnesium is lager dan 30."});$("#wb_magnesium").jqxNumberInput(Show1wat);$("#wb_sodium").jqxTooltip({content:"De ideale hoeveelheid Natrium is lager dan 150."});$("#wb_sodium").jqxNumberInput(Show1wat);$("#wb_total_alkalinity").jqxNumberInput(Show1wat);$("#wb_chloride").jqxTooltip({content:"De ideale hoeveelheid Chloride is tussen 50 en 100."});$("#wb_chloride").jqxNumberInput(Show1wat);$("#wb_sulfate").jqxTooltip({content:"De ideale hoeveelheid Sulfaat is tussen 50 en 350."});$("#wb_sulfate").jqxNumberInput(Show1wat);$("#wb_ph").jqxNumberInput(Show1wat);$("#pr_name").jqxDropDownList({placeHolder:"Kies doel profiel:",theme:theme,source:waterprofiles,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:300});$("#pr_name").on("select",function(a4){if(a4.args){var i=a4.args.index;var a3=waterprofiles.records[i];$("#pr_calcium").val(a3.calcium);$("#pr_sulfate").val(a3.sulfate);$("#pr_chloride").val(a3.chloride);$("#pr_sodium").val(a3.sodium);$("#pr_magnesium").val(a3.magnesium);$("#pr_total_alkalinity").val(a3.total_alkalinity)}});$("#pr_calcium").jqxNumberInput(Show1wat);$("#pr_magnesium").jqxNumberInput(Show1wat);$("#pr_sodium").jqxNumberInput(Show1wat);$("#pr_total_alkalinity").jqxNumberInput(Show1wat);$("#pr_chloride").jqxNumberInput(Show1wat);$("#pr_sulfate").jqxNumberInput(Show1wat);$("#wa_cacl2").jqxTooltip({content:"Voor het maken van een ander waterprofiel. Voegt calcium en chloride toe. Voor het verbeteren van zoetere bieren."});$("#wa_cacl2").jqxNumberInput(Spin1dec);$("#wa_caso4").jqxTooltip({content:"Gips. Voor het maken van een ander waterprofiel. Voegt calcium en sulfaat toe. Voor het verbeteren van bittere bieren."});$("#wa_caso4").jqxNumberInput(Spin1dec);$("#wa_mgso4").jqxTooltip({content:"Epsom zout. Voor het maken van een ander waterprofiel. Voegt magnesium en sulfaat toe. Gebruik spaarzaam!"});$("#wa_mgso4").jqxNumberInput(Spin1dec);$("#wa_nacl").jqxTooltip({content:"Keukenzout. Voor het maken van een ander waterprofiel. Voegt natrium en chloride toe. Voor het accentueren van zoetheid. Bij hoge dosering wordt het bier ziltig."});$("#wa_nacl").jqxNumberInput(Spin1dec);$("#mash_ph").jqxTooltip({content:"Maisch pH tussen 5.2 en 5.6. Gebruik 5.2 voor lichte en 5.5 voor donkere bieren."});$("#mash_ph").jqxNumberInput(SpinpH);$("#calc_acid").jqxCheckBox({theme:theme,width:120,height:23});$("#wa_base_name").jqxDropDownList({theme:theme,source:BaseTypeAdapter,valueMember:"id",displayMember:"nl",width:170,height:23,autoDropDownHeight:true});$("#wa_base").jqxNumberInput(Spin2dec);$("#wa_base").jqxNumberInput({symbol:" gr",symbolPosition:"right"});$("#wa_acid_name").jqxDropDownList({theme:theme,source:AcidTypeAdapter,valueMember:"id",displayMember:"nl",width:170,height:23,autoDropDownHeight:true});$("#wa_acid").jqxNumberInput(Spin2dec);$("#wa_acid").jqxNumberInput({symbol:" ml",symbolPosition:"right"});$("#wa_acid_perc").jqxNumberInput(Perc0);$("#wa_acid_perc").jqxNumberInput({width:70,symbol:"%",symbolPosition:"right"});$("#sparge_temp").jqxNumberInput(Spin1dec);$("#sparge_volume").jqxNumberInput(Spin1dec);$("#sparge_ph").jqxNumberInput(SpinpH);$("#sparge_source").jqxDropDownList({theme:theme,source:SpargeSourceAdapter,valueMember:"id",displayMember:"nl",width:110,height:23,autoDropDownHeight:true});$("#sparge_acid_amount").jqxNumberInput(Spin2dec);$("#sparge_acid_amount").jqxNumberInput({spinButtons:false,readOnly:true,symbol:" ml",symbolPosition:"right"});$("#sparge_acid_type").jqxDropDownList({theme:theme,source:AcidTypeAdapter,valueMember:"id",displayMember:"nl",width:110,height:23,autoDropDownHeight:true});$("#sparge_acid_perc").jqxNumberInput(Perc0);$("#sparge_acid_perc").jqxNumberInput({symbol:"%",symbolPosition:"right"});$("#brew_date_start").jqxTooltip({content:"Brouw datum en tijd. Voor planning laat de tijd op 00:00:00 staan."});$("#brew_date_start").jqxDateTimeInput(DateTimeopts);$("#brew_date_start").on("close",function(i){aV()});$("#brew_date_end").jqxTooltip({content:"End datum en tijd van de brouw. Leeg laten als er nog niet gebrouwen is."});$("#brew_date_end").jqxDateTimeInput(DateTimeopts);$("#brew_date_end").on("close",function(i){aV()});$("#brew_mash_ph").jqxTooltip({content:"De gemeten pH tijdens het maischen eventueel na correctie."});$("#brew_mash_ph").jqxNumberInput(SpinpH);$("#est_mash_ph").jqxTooltip({content:"De gewenste pH tijdens het maischen."});$("#est_mash_ph").jqxNumberInput(Show1wat);$("#brew_preboil_ph").jqxTooltip({content:"De gemeten pH in de kookketel na het spoelen en voor de kook."});$("#brew_preboil_ph").jqxNumberInput(SpinpH);$("#brew_aboil_ph").jqxTooltip({content:"De gemeten pH na het koken."});$("#brew_aboil_ph").jqxNumberInput(SpinpH);$("#brew_mash_sg").jqxTooltip({content:"Het bereikte SG na het maischen."});$("#brew_mash_sg").jqxNumberInput(SGopts);$("#brew_mash_sg").on("valueChanged",function(){a1()});$("#est_mash_sg").jqxTooltip({content:"Het berekende verwachte SG na het maischen."});$("#est_mash_sg").jqxNumberInput(Show3wat);$("#brew_preboil_sg").jqxTooltip({content:"Het gemeten SG in de kookketel na het spoelen en voor het koken."});$("#brew_preboil_sg").jqxNumberInput(SGopts);$("#brew_preboil_sg").on("valueChanged",function(i){d.brew_preboil_sg=i.args.value;y()});$("#est_pre_sg").jqxTooltip({content:"Het berekende SG in de kookketel na het spoelen en voor het koken."});$("#est_pre_sg").jqxNumberInput(Show3wat);$("#brew_aboil_sg").jqxTooltip({content:"Het gemeten SG in de kookketel na het koken."});$("#brew_aboil_sg").jqxNumberInput(SGopts);$("#brew_aboil_sg").on("valueChanged",function(i){d.brew_aboil_sg=i.args.value;S();U();at()});$("#est_og3").jqxTooltip({content:"Het gewenste SG in de kookketel na het koken."});$("#est_og3").jqxNumberInput(Show3wat);$("#brew_mash_efficiency").jqxTooltip({content:"Het behaalde maisch rendement."});$("#brew_mash_efficiency").jqxNumberInput(Show1dec);$("#brew_preboil_volume").jqxTooltip({content:"Het gemeten volume van het wort voor het koken."});$("#brew_preboil_volume").jqxNumberInput(Spin1dec);$("#brew_preboil_volume").on("valueChanged",function(i){d.brew_preboil_volume=i.args.value;y()});$("#est_pre_vol").jqxTooltip({content:"Het berekende volume van het wort voor het koken."});$("#est_pre_vol").jqxNumberInput(Show1wat);$("#brew_aboil_volume").jqxTooltip({content:"Het gemeten volume van het wort na het koken."});$("#brew_aboil_volume").jqxNumberInput(Spin1dec);$("#brew_aboil_volume").on("valueChanged",function(i){d.brew_aboil_volume=i.args.value;S();U();at()});$("#est_a_vol").jqxTooltip({content:"Het gewenste volume na het koken."});$("#est_a_vol").jqxNumberInput(Show1wat);$("#brew_preboil_efficiency").jqxTooltip({content:"Het berekende rendement voor het koken."});$("#brew_preboil_efficiency").jqxNumberInput(Show1dec);$("#brew_aboil_efficiency").jqxTooltip({content:"Het bereikte rendement na het koken."});$("#brew_aboil_efficiency").jqxNumberInput(Show1dec);$("#brew_sparge_temperature").jqxTooltip({content:"De spoelwater temperatuur, in te stellen in de Water tab."});$("#brew_sparge_temperature").jqxNumberInput(Show1dec);$("#brew_sparge_volume").jqxTooltip({content:"Het spoelwater voorraad volume, in te stellen in de Water tab."});$("#brew_sparge_volume").jqxNumberInput(Show1dec);$("#brew_sparge_est").jqxNumberInput(Show1dec);$("#brew_whirlpool9").jqxNumberInput(PosInt);$("#brew_whirlpool9").jqxNumberInput({max:120});$("#brew_cooling_to").jqxNumberInput(Spin1dec);$("#brew_sparge_ph").jqxNumberInput(SpinpH);$("#brew_whirlpool7").jqxNumberInput(PosInt);$("#brew_whirlpool7").jqxNumberInput({max:120});$("#brew_cooling_method").jqxDropDownList({theme:theme,source:CoolingTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#brew_whirlpool6").jqxNumberInput(PosInt);$("#brew_whirlpool6").jqxNumberInput({max:120});$("#brew_cooling_time").jqxNumberInput(PosInt);$("#brew_cooling_time").jqxNumberInput({max:1440});$("#brew_whirlpool2").jqxNumberInput(PosInt);$("#brew_whirlpool2").jqxNumberInput({max:120});$("#brew_aeration_type").jqxDropDownList({theme:theme,source:AerationTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#brew_aeration_time").jqxNumberInput(PosInt);$("#brew_aeration_time").jqxNumberInput({max:1440});$("#brew_aeration_speed").jqxNumberInput(PosInt);$("#brew_aeration_speed").jqxNumberInput({max:1440});$("#brew_fermenter_volume").jqxNumberInput(Show1dec);$("#brew_fermenter_extrawater").jqxNumberInput(Spin1dec);$("#brew_fermenter_sg").jqxNumberInput(Show3dec);$("#brew_fermenter_tcloss").jqxNumberInput(Spin1dec);$("#brew_fermenter_ibu").jqxNumberInput(Show0dec);$("#brew_fermenter_color").jqxNumberInput(Show0dec);$("#BLog").jqxButton({template:"info",width:"150px",theme:theme});$("#BLog").click(function(){var i="log_brew.php?code="+d.code+"&name="+d.name;window.open(i)});$("#brew_fermenter_sg2").jqxTooltip({content:"Het behaalde SG in het gistvat, overgenomen van de brouwdag."});$("#brew_fermenter_sg2").jqxNumberInput(Show3dec);$("#primary_start_temp").jqxTooltip({content:"De begintemperatuur van de hoofdvergisting."});$("#primary_start_temp").jqxNumberInput(YeastT);$("#primary_max_temp").jqxTooltip({content:"De hoogst bereikte piek temperatuur tijdens de hoofgvergisting."});$("#primary_max_temp").jqxNumberInput(YeastT);$("#primary_end_temp").jqxTooltip({content:"De eind temperatuur van de hoofdvergisting."});$("#primary_end_temp").jqxNumberInput(YeastT);$("#primary_end_sg").jqxTooltip({content:"Het gemeten SG aan het eind van de hoofdvergisting."});$("#primary_end_sg").jqxNumberInput(SGopts);$("#primary_end_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#primary_end_brix").jqxNumberInput(Spin1dec);$("#primary_svg").jqxTooltip({content:"De schijnbare vergisting graad behaald na de hoofdgisting."});$("#primary_svg").jqxNumberInput(Show1dec);$("#primary_end_date").jqxTooltip({content:"De eind datum van de hoofdvergisting en eventueel overhevelen."});$("#primary_end_date").jqxDateTimeInput(Dateopts);$("#primary_end_date").on("close",function(i){aV()});$("#secondary_temp").jqxNumberInput(YeastT);$("#secondary_end_sg").jqxTooltip({content:"Het gemeten SG aan het eind van de navergisting."});$("#secondary_end_sg").jqxNumberInput(SGopts);$("#secondary_end_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#secondary_end_brix").jqxNumberInput(Spin1dec);$("#secondary_svg").jqxTooltip({content:"De schijnbare vergisting graad behaald na de nagisting."});$("#secondary_svg").jqxNumberInput(Show1dec);$("#secondary_end_date").jqxTooltip({content:"De eind datum van de navergisting en het begin van het lageren."});$("#secondary_end_date").jqxDateTimeInput(Dateopts);$("#secondary_end_date").on("close",function(i){aV()});$("#tertiary_temp").jqxNumberInput(YeastT);$("#fg").jqxNumberInput(Spin3dec);$("#est_fg3").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg3").jqxNumberInput(Show3dec);$("#final_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#final_brix").jqxNumberInput(Spin1dec);$("#final_abv").jqxNumberInput(Show2dec);$("#final_svg").jqxNumberInput(Show1dec);$("#FLog").jqxButton({template:"info",width:"150px",theme:theme});$("#FLog").click(function(){var i="log_fermentation.php?code="+d.code+"&name="+d.name;window.open(i)});$("#package_date").jqxTooltip({content:"De verpakkings datum van dit bier."});$("#package_date").jqxDateTimeInput(Dateopts);$("#package_date").on("close",function(i){aV()});$("#package_volume").jqxTooltip({content:"Het beschikbare volume om te bottelen of op fust te zetten."});$("#package_volume").jqxNumberInput(Spin1dec);$("#package_infuse_amount").jqxTooltip({content:"De hoeveelheid water of drank extra toe te voegen."});$("#package_infuse_amount").jqxNumberInput(Spin3dec);$("#package_infuse_abv").jqxTooltip({content:"De hoeveelheid alcohol in de drank, of 0.0 als het water is."});$("#package_infuse_abv").jqxNumberInput(Spin1dec);$("#package_infuse_notes").jqxTooltip({content:"Omschrijving van de extra toevoeging."});$("#package_infuse_notes").jqxInput({theme:theme,width:640,height:23});$("#package_abv").jqxTooltip({content:"De uiteindelijke hoeveelheid alcohol volume %."});$("#package_abv").jqxNumberInput(Show2dec);$("#package_ph").jqxTooltip({content:"De gemeten pH vlak voor het verpakken."});$("#package_ph").jqxNumberInput(SpinpH);$("#st_carb_min2").jqxTooltip({content:"Het minimum aanbevolen koolzuur volume voor deze bierstijl."});$("#st_carb_min2").jqxNumberInput(Smal1dec);$("#st_carb_max2").jqxTooltip({content:"Het maximum aamnevolen koolzuur volume voor deze bierstijl."});$("#st_carb_max2").jqxNumberInput(Smal1dec);$("#bottle_amount").jqxTooltip({content:"De totale hoeveelheid te bottelen bier."});$("#bottle_amount").jqxNumberInput(Spin1dec);$("#keg_amount").jqxTooltip({content:"De totale hoeveelheid op fust te zetten bier."});$("#keg_amount").jqxNumberInput(Spin1dec);$("#bottle_carbonation").jqxTooltip({content:"Het gewenste CO2 volume in de flessen."});$("#bottle_carbonation").jqxNumberInput(Spin2dec);$("#bottle_carbonation").jqxNumberInput({max:5});$("#keg_carbonation").jqxTooltip({content:"Het gewenste CO2 volume door de suiker in de fusten."});$("#keg_carbonation").jqxNumberInput(Spin2dec);$("#keg_carbonation").jqxNumberInput({max:5});$("#bottle_priming_sugar").jqxDropDownList({placeHolder:"Kies suiker:",theme:theme,source:fermentablesugars,displayMember:"name",width:200,height:23,dropDownWidth:300,dropDownHeight:400});$("#bottle_priming_sugar").on("select",function(a7){if(a7.args){var a3=a7.args.index;var a6=-1;var a5=fermentablesugars.records[a3];var a9=$("#fermentableGrid").jqxGrid("getrows");for(var a4=0;a4<a9.length;a4++){if(a9[a4].f_added==4){a6=a4}}var ba={};ba.f_name=a5.name;ba.f_origin=a5.origin;ba.f_supplier=a5.supplier;ba.f_amount=parseFloat($("#bottle_priming_total").jqxNumberInput("decimal"))/1000;ba.f_cost=a5.cost;ba.f_type=a5.type;ba.f_yield=a5.yield;ba.f_color=a5.color;ba.f_coarse_fine_diff=a5.coarse_fine_diff;ba.f_moisture=a5.moisture;ba.f_diastatic_power=a5.diastatic_power;ba.f_protein=a5.protein;ba.f_max_in_batch=a5.max_in_batch;ba.f_graintype=a5.graintype;ba.f_added=4;ba.f_dissolved_protein=a5.dissolved_protein;ba.f_recommend_mash=a5.recommend_mash;ba.f_add_after_boil=1;ba.f_adjust_to_total_100=0;ba.f_percentage=0;ba.f_di_ph=a5.di_ph;ba.f_acid_to_ph_57=a5.acid_to_ph_57;ba.f_inventory=a5.inventory;if(a6>=0){var a8=$("#fermentableGrid").jqxGrid("getrowid",a6);$("#fermentableGrid").jqxGrid("updaterow",a8,ba)}else{$("#fermentableGrid").jqxGrid("addrow",null,ba)}aT()}});$("#keg_priming_sugar").jqxDropDownList({placeHolder:"Kies suiker:",theme:theme,source:fermentablesugars,displayMember:"name",width:200,height:23,dropDownWidth:300,dropDownHeight:400});$("#keg_priming_sugar").on("select",function(a7){if(a7.args){var a3=a7.args.index;var a6=-1;var a5=fermentablesugars.records[a3];var a9=$("#fermentableGrid").jqxGrid("getrows");for(var a4=0;a4<a9.length;a4++){if(a9[a4].f_added==5){a6=a4}}var ba={};ba.f_name=a5.name;ba.f_origin=a5.origin;ba.f_supplier=a5.supplier;ba.f_amount=parseFloat($("#keg_priming_total").jqxNumberInput("decimal"))/1000;ba.f_cost=a5.cost;ba.f_type=a5.type;ba.f_yield=a5.yield;ba.f_color=a5.color;ba.f_coarse_fine_diff=a5.coarse_fine_diff;ba.f_moisture=a5.moisture;ba.f_diastatic_power=a5.diastatic_power;ba.f_protein=a5.protein;ba.f_max_in_batch=a5.max_in_batch;ba.f_graintype=a5.graintype;ba.f_added=5;ba.f_dissolved_protein=a5.dissolved_protein;ba.f_recommend_mash=a5.recommend_mash;ba.f_add_after_boil=1;ba.f_adjust_to_total_100=0;ba.f_percentage=0;ba.f_di_ph=a5.di_ph;ba.f_acid_to_ph_57=a5.acid_to_ph_57;ba.f_inventory=a5.inventory;if(a6>=0){var a8=$("#fermentableGrid").jqxGrid("getrowid",a6);$("#fermentableGrid").jqxGrid("updaterow",a8,ba)}else{$("#fermentableGrid").jqxGrid("addrow",null,ba)}aT()}});$("#bottle_priming_amount").jqxNumberInput(Show1dec);$("#bottle_priming_water").jqxTooltip({content:"De hoeveelheid water om de suiker op te lossen."});$("#bottle_priming_water").jqxNumberInput(Spin3dec);$("#keg_priming_amount").jqxNumberInput(Show1dec);$("#keg_priming_water").jqxTooltip({content:"De hoeveelheid water om de suiker op te lossen."});$("#keg_priming_water").jqxNumberInput(Spin3dec);$("#bottle_priming_total").jqxNumberInput(Show1dec);$("#bottle_pressure").jqxTooltip({content:"De maximaal te verwachten druk tijdens het hergisten."});$("#bottle_pressure").jqxNumberInput(Show1dec);$("#keg_priming_total").jqxNumberInput(Show1dec);$("#keg_forced_carb").jqxCheckBox({theme:theme,width:120,height:23});$("#keg_pressure").jqxNumberInput(Show1dec);$("#bottle_abv").jqxNumberInput(Show2dec);$("#keg_abv").jqxNumberInput(Show2dec);$("#bottle_carbonation_temp").jqxNumberInput(YeastT);$("#keg_carbonation_temp").jqxNumberInput(YeastT);$("#taste_date").jqxTooltip({content:"De proef datum van dit bier."});$("#taste_date").jqxDateTimeInput(Dateopts);$("#taste_date").on("close",function(i){aV()});$("#taste_rate").jqxTooltip({content:"Het cijfer voor dit bier van 1 tot 10."});$("#taste_rate").jqxNumberInput(Spin1dec);$("#taste_rate").jqxNumberInput({max:10});$("#taste_color").jqxTooltip({content:"De kleur van het bier."});$("#taste_color").jqxInput({theme:theme,width:320,height:23});$("#taste_transparency").jqxTooltip({content:"De helderheid van het bier."});$("#taste_transparency").jqxInput({theme:theme,width:320,height:23});$("#taste_head").jqxTooltip({content:"Het schuim op het bier."});$("#taste_head").jqxInput({theme:theme,width:320,height:23});$("#taste_aroma").jqxTooltip({content:"Het aroma van het bier."});$("#taste_aroma").jqxInput({theme:theme,width:960,height:23});$("#taste_taste").jqxTooltip({content:"De smaak van het bier."});$("#taste_taste").jqxInput({theme:theme,width:960,height:23});$("#taste_aftertaste").jqxTooltip({content:"De nasmaak van het bier."});$("#taste_aftertaste").jqxInput({theme:theme,width:960,height:23});$("#taste_mouthfeel").jqxTooltip({content:"Het mondgevoelvan het bier."});$("#taste_mouthfeel").jqxInput({theme:theme,width:960,height:23});$("#taste_notes").jqxTooltip({content:"Het oordeel en opmerkingen over dit bier."});$("#taste_notes").jqxInput({theme:theme,width:960,height:100});$("#jqxTabs").jqxTabs({theme:theme,width:1280,height:660,autoHeight:false,position:"top"});$("#Export").jqxButton({template:"info",width:"80px",theme:theme});$("#Export").bind("click",function(){s();var i="prod_export.php?record="+my_record+"&return="+my_return+"&select="+my_select+"&code="+d.code+"&name="+d.name;window.location.href=i});$("#Delete").jqxButton({template:"danger",width:"80px",theme:theme});$("#Delete").bind("click",function(){$("#eventWindow").jqxWindow("open");$("#delOk").click(function(){var i="delete=true&"+$.param({uuid:d.uuid});$.ajax({dataType:"json",url:F,cache:false,data:i,type:"POST",success:function(a4,a3,a5){window.location.href=my_return},error:function(a3,a5,a4){}})})});$("#Cancel").jqxButton({template:"primary",width:"80px",theme:theme});$("#Cancel").bind("click",function(){window.location.href=my_return});$("#Save").jqxButton({template:"success",width:"80px",theme:theme});$("#Save").bind("click",function(){s();window.location.href=my_return});createDelElements()});
\ No newline at end of file
+function createDelElements(){$("#eventWindow").jqxWindow({theme:theme,position:{x:490,y:210},width:300,height:175,resizable:false,isModal:true,modalOpacity:0.4,okButton:$("#delOk"),cancelButton:$("#delCancel"),initContent:function(){$("#delOk").jqxButton({template:"danger",width:"65px",theme:theme});$("#delCancel").jqxButton({template:"success",width:"65px",theme:theme});$("#delCancel").focus()}});$("#eventWindow").jqxWindow("hide")}$(document).ready(function(){var ad,l=false,ak=0,aY=0,a0=0,H=0,ab=0,aC=77,ao=0,x=0.75,Z=0,p=1,aa=1,ah=1,O=1,c=1,aX=0,U=0,C=0,aT="",af="",A=40.048,ap=24.305,ac=22.98976928,q=35.453,aH=96.0626,r=61.01684,am=172.171,S=147.015,g=100.087,aJ=246.475,aE=84.007,y=105.996,b=58.443,aI=74.06268,u=0,aK={},B=1,a=0,e={},av=0,aG={},aD=0,f={},aj=0,D={},az=4.445e-7,ax=4.68e-11,d={},E="includes/db_product.php",aQ={datatype:"json",cache:false,datafields:[{name:"record",type:"number"},{name:"uuid",type:"string"},{name:"name",type:"string"},{name:"code",type:"string"},{name:"birth",type:"string"},{name:"stage",type:"int"},{name:"notes",type:"string"},{name:"log_brew",type:"int"},{name:"log_fermentation",type:"int"},{name:"inventory_reduced",type:"int"},{name:"locked",type:"int"},{name:"eq_name",type:"string"},{name:"eq_boil_size",type:"float"},{name:"eq_batch_size",type:"float"},{name:"eq_tun_volume",type:"float"},{name:"eq_tun_weight",type:"float"},{name:"eq_tun_specific_heat",type:"float"},{name:"eq_tun_material",type:"int"},{name:"eq_tun_height",type:"float"},{name:"eq_top_up_water",type:"float"},{name:"eq_trub_chiller_loss",type:"float"},{name:"eq_evap_rate",type:"float"},{name:"eq_boil_time",type:"float"},{name:"eq_calc_boil_volume",type:"int"},{name:"eq_top_up_kettle",type:"float"},{name:"eq_hop_utilization",type:"float"},{name:"eq_notes",type:"string"},{name:"eq_lauter_volume",type:"float"},{name:"eq_lauter_height",type:"float"},{name:"eq_lauter_deadspace",type:"float"},{name:"eq_kettle_volume",type:"float"},{name:"eq_kettle_height",type:"float"},{name:"eq_mash_volume",type:"float"},{name:"eq_mash_max",type:"float"},{name:"eq_efficiency",type:"float"},{name:"brew_date_start",type:"string"},{name:"brew_mash_ph",type:"float"},{name:"brew_mash_sg",type:"float"},{name:"brew_mash_efficiency",type:"float"},{name:"brew_sparge_est",type:"float"},{name:"brew_sparge_ph",type:"float"},{name:"brew_preboil_volume",type:"float"},{name:"brew_preboil_sg",type:"float"},{name:"brew_preboil_ph",type:"float"},{name:"brew_preboil_efficiency",type:"float"},{name:"brew_aboil_volume",type:"float"},{name:"brew_aboil_sg",type:"float"},{name:"brew_aboil_ph",type:"float"},{name:"brew_aboil_efficiency",type:"float"},{name:"brew_cooling_method",type:"int"},{name:"brew_cooling_time",type:"float"},{name:"brew_cooling_to",type:"float"},{name:"brew_whirlpool9",type:"float"},{name:"brew_whirlpool7",type:"float"},{name:"brew_whirlpool6",type:"float"},{name:"brew_whirlpool2",type:"float"},{name:"brew_fermenter_volume",type:"float"},{name:"brew_fermenter_extrawater",type:"float"},{name:"brew_fermenter_tcloss",type:"float"},{name:"brew_aeration_time",type:"float"},{name:"brew_aeration_speed",type:"float"},{name:"brew_aeration_type",type:"int"},{name:"brew_fermenter_sg",type:"float"},{name:"brew_fermenter_ibu",type:"float"},{name:"brew_fermenter_color",type:"float"},{name:"brew_date_end",type:"string"},{name:"og",type:"float"},{name:"fg",type:"float"},{name:"primary_start_temp",type:"float"},{name:"primary_max_temp",type:"float"},{name:"primary_end_temp",type:"float"},{name:"primary_end_sg",type:"float"},{name:"primary_end_date",type:"string"},{name:"secondary_temp",type:"float"},{name:"secondary_end_sg",type:"float"},{name:"secondary_end_date",type:"string"},{name:"tertiary_temp",type:"float"},{name:"package_date",type:"string"},{name:"package_volume",type:"float"},{name:"package_infuse_amount",type:"float"},{name:"package_infuse_abv",type:"float"},{name:"package_infuse_notes",type:"string"},{name:"package_abv",type:"float"},{name:"package_ph",type:"float"},{name:"bottle_amount",type:"float"},{name:"bottle_carbonation",type:"float"},{name:"bottle_priming_water",type:"float"},{name:"bottle_priming_amount",type:"float"},{name:"bottle_carbonation_temp",type:"float"},{name:"keg_amount",type:"float"},{name:"keg_carbonation",type:"float"},{name:"keg_priming_water",type:"float"},{name:"keg_priming_amount",type:"float"},{name:"keg_carbonation_temp",type:"float"},{name:"keg_forced_carb",type:"int"},{name:"keg_pressure",type:"float"},{name:"taste_notes",type:"string"},{name:"taste_rate",type:"float"},{name:"taste_date",type:"string"},{name:"taste_color",type:"string"},{name:"taste_transparency",type:"string"},{name:"taste_head",type:"string"},{name:"taste_aroma",type:"string"},{name:"taste_taste",type:"string"},{name:"taste_mouthfeel",type:"string"},{name:"taste_aftertaste",type:"string"},{name:"st_name",type:"string"},{name:"st_letter",type:"string"},{name:"st_guide",type:"string"},{name:"st_category",type:"string"},{name:"st_category_number",type:"float"},{name:"st_type",type:"int"},{name:"st_og_min",type:"float"},{name:"st_og_max",type:"float"},{name:"st_fg_min",type:"float"},{name:"st_fg_max",type:"float"},{name:"st_ibu_min",type:"float"},{name:"st_ibu_max",type:"float"},{name:"st_color_min",type:"float"},{name:"st_color_max",type:"float"},{name:"st_carb_min",type:"float"},{name:"st_carb_max",type:"float"},{name:"st_abv_min",type:"float"},{name:"st_abv_max",type:"float"},{name:"type",type:"int"},{name:"batch_size",type:"float"},{name:"boil_size",type:"float"},{name:"boil_time",type:"float"},{name:"efficiency",type:"float"},{name:"est_og",type:"float"},{name:"est_fg",type:"float"},{name:"est_abv",type:"float"},{name:"est_color",type:"float"},{name:"color_method",type:"int"},{name:"est_ibu",type:"float"},{name:"ibu_method",type:"int"},{name:"est_carb",type:"float"},{name:"sparge_temp",type:"float"},{name:"sparge_ph",type:"float"},{name:"sparge_volume",type:"float"},{name:"sparge_source",type:"int"},{name:"sparge_acid_type",type:"int"},{name:"sparge_acid_perc",type:"float"},{name:"sparge_acid_amount",type:"float"},{name:"mash_ph",type:"float"},{name:"mash_name",type:"string"},{name:"calc_acid",type:"int"},{name:"w1_name",type:"string"},{name:"w1_amount",type:"float"},{name:"w1_calcium",type:"float"},{name:"w1_sulfate",type:"float"},{name:"w1_chloride",type:"float"},{name:"w1_sodium",type:"float"},{name:"w1_magnesium",type:"float"},{name:"w1_total_alkalinity",type:"float"},{name:"w1_ph",type:"float"},{name:"w1_cost",type:"float"},{name:"w2_name",type:"string"},{name:"w2_amount",type:"float"},{name:"w2_calcium",type:"float"},{name:"w2_sulfate",type:"float"},{name:"w2_chloride",type:"float"},{name:"w2_sodium",type:"float"},{name:"w2_magnesium",type:"float"},{name:"w2_total_alkalinity",type:"float"},{name:"w2_ph",type:"float"},{name:"w2_cost",type:"float"},{name:"wg_amount",type:"float"},{name:"wg_calcium",type:"float"},{name:"wg_sulfate",type:"float"},{name:"wg_chloride",type:"float"},{name:"wg_sodium",type:"float"},{name:"wg_magnesium",type:"float"},{name:"wg_total_alkalinity",type:"float"},{name:"wg_ph",type:"float"},{name:"wb_calcium",type:"float"},{name:"wb_sulfate",type:"float"},{name:"wb_chloride",type:"float"},{name:"wb_sodium",type:"float"},{name:"wb_magnesium",type:"float"},{name:"wb_total_alkalinity",type:"float"},{name:"wb_ph",type:"float"},{name:"wa_acid_name",type:"int"},{name:"wa_acid_perc",type:"int"},{name:"wa_base_name",type:"int"},{name:"starter_enable",type:"int"},{name:"starter_type",type:"int"},{name:"starter_sg",type:"float"},{name:"starter_viability",type:"int"},{name:"prop1_type",type:"int"},{name:"prop1_volume",type:"float"},{name:"prop2_type",type:"int"},{name:"prop2_volume",type:"float"},{name:"prop3_type",type:"int"},{name:"prop3_volume",type:"float"},{name:"prop4_type",type:"int"},{name:"prop4_volume",type:"float"},{name:"fermentables",type:"array"},{name:"hops",type:"array"},{name:"miscs",type:"array"},{name:"yeasts",type:"array"},{name:"mashs",type:"array"}],id:"record",url:E+"?record="+my_record},ag=new $.jqx.dataAdapter(aQ,{loadComplete:function(){var i=ag.records;d=i[0];$("#name").val(d.name);$("#code").val(d.code);$("#birth").val(d.birth);$("#stage").val(StageData[d.stage].nl);$("#notes").val(d.notes);$("#locked").val(d.locked);$("#eq_name").val(d.eq_name);$("#eq_notes").val(d.eq_notes);$("#eq_boil_size").val(d.eq_boil_size);$("#eq_batch_size").val(d.eq_batch_size);$("#eq_tun_volume").val(d.eq_tun_volume);$("#eq_top_up_water").val(d.eq_top_up_water);$("#eq_trub_chiller_loss").val(d.eq_trub_chiller_loss);$("#eq_evap_rate").val(d.eq_evap_rate);$("#eq_boil_time").val(d.eq_boil_time);$("#eq_top_up_kettle").val(d.eq_top_up_kettle);$("#eq_hop_utilization").val(d.eq_hop_utilization);$("#eq_lauter_volume").val(d.eq_lauter_volume);$("#eq_lauter_deadspace").val(d.eq_lauter_deadspace);$("#eq_kettle_volume").val(d.eq_kettle_volume);$("#eq_mash_volume").val(d.eq_mash_volume);$("#eq_mash_max").val(d.eq_mash_max);$("#eq_efficiency").val(d.eq_efficiency);$("#brew_date_start").val(d.brew_date_start);$("#brew_mash_ph").val(d.brew_mash_ph);$("#brew_mash_sg").val(d.brew_mash_sg);$("#brew_mash_efficiency").val(d.brew_mash_efficiency);$("#brew_sparge_temperature").val(d.sparge_temp);$("#brew_sparge_volume").val(d.sparge_volume);$("#brew_sparge_est").val(d.brew_sparge_est);$("#brew_sparge_ph").val(d.brew_sparge_ph);$("#brew_aeration_type").val(d.brew_aeration_type);$("#brew_aeration_time").val(d.brew_aeration_time);$("#brew_aeration_speed").val(d.brew_aeration_speed);$("#brew_preboil_ph").val(d.brew_preboil_ph);$("#brew_preboil_sg").val(d.brew_preboil_sg);$("#brew_preboil_volume").val(d.brew_preboil_volume);$("#brew_preboil_efficiency").val(d.brew_preboil_efficiency);$("#brew_whirlpool9").val(d.brew_whirlpool9);$("#brew_whirlpool7").val(d.brew_whirlpool7);$("#brew_whirlpool6").val(d.brew_whirlpool6);$("#brew_whirlpool2").val(d.brew_whirlpool2);$("#brew_fermenter_volume").val(d.brew_fermenter_volume);$("#brew_fermenter_sg").val(d.brew_fermenter_sg);$("#brew_fermenter_sg2").val(d.brew_fermenter_sg);$("#brew_fermenter_ibu").val(d.brew_fermenter_ibu);$("#brew_fermenter_color").val(d.brew_fermenter_color);$("#brew_fermenter_extrawater").val(d.brew_fermenter_extrawater);$("#brew_fermenter_tcloss").val(d.brew_fermenter_tcloss);$("#brew_aboil_ph").val(d.brew_aboil_ph);$("#brew_aboil_sg").val(d.brew_aboil_sg);$("#brew_aboil_volume").val(d.brew_aboil_volume);$("#brew_aboil_efficiency").val(d.brew_aboil_efficiency);$("#brew_cooling_to").val(d.brew_cooling_to);$("#brew_cooling_method").val(d.brew_cooling_method);$("#brew_cooling_time").val(d.brew_cooling_time);$("#brew_date_end").val(d.brew_date_end);$("#og").val(d.og);$("#fg").val(d.fg);$("#primary_start_temp").val(d.primary_start_temp);$("#primary_max_temp").val(d.primary_max_temp);$("#primary_end_temp").val(d.primary_end_temp);$("#primary_end_sg").val(d.primary_end_sg);$("#primary_end_date").val(d.primary_end_date);$("#secondary_temp").val(d.secondary_temp);$("#secondary_end_sg").val(d.secondary_end_sg);$("#secondary_end_date").val(d.secondary_end_date);$("#tertiary_temp").val(d.tertiary_temp);$("#package_date").val(d.package_date);$("#package_volume").val(d.package_volume);$("#package_infuse_amount").val(d.package_infuse_amount);$("#package_infuse_abv").val(d.package_infuse_abv);$("#package_infuse_notes").val(d.package_infuse_notes);$("#package_abv").val(d.package_abv);$("#package_ph").val(d.package_ph);$("#bottle_amount").val(d.bottle_amount);$("#bottle_carbonation").val(d.bottle_carbonation);$("#bottle_priming_water").val(d.bottle_priming_water);$("#bottle_priming_amount").val(d.bottle_priming_amount);$("#bottle_carbonation_temp").val(d.bottle_carbonation_temp);$("#keg_amount").val(d.keg_amount);$("#keg_carbonation").val(d.keg_carbonation);$("#keg_priming_water").val(d.keg_priming_water);$("#keg_priming_amount").val(d.keg_priming_amount);$("#keg_carbonation_temp").val(d.keg_carbonation_temp);$("#keg_forced_carb").val(d.keg_forced_carb);$("#keg_pressure").val(d.keg_pressure);$("#taste_notes").val(d.taste_notes);$("#taste_rate").val(d.taste_rate);$("#taste_date").val(d.taste_date);$("#taste_color").val(d.taste_color);$("#taste_transparency").val(d.taste_transparency);$("#taste_head").val(d.taste_head);$("#taste_aroma").val(d.taste_aroma);$("#taste_taste").val(d.taste_taste);$("#taste_mouthfeel").val(d.taste_mouthfeel);$("#taste_aftertaste").val(d.taste_aftertaste);$("#st_name").val(d.st_name);$("#st_letter").val(d.st_letter);$("#st_guide").val(d.st_guide);$("#st_category").val(d.st_category);$("#st_category_number").val(d.st_category_number);$("#st_type").val(StyleTypeData[d.st_type].nl);$("#st_og_min").val(d.st_og_min);$("#st_og_max").val(d.st_og_max);$("#st_fg_min").val(d.st_fg_min);$("#st_fg_max").val(d.st_fg_max);$("#st_abv_min").val(d.st_abv_min);$("#st_abv_max").val(d.st_abv_max);$("#st_color_min").val(d.st_color_min);$("#st_color_max").val(d.st_color_max);$("#st_ibu_min").val(d.st_ibu_min);$("#st_ibu_max").val(d.st_ibu_max);$("#st_carb_min").val(d.st_carb_min);$("#st_carb_min2").val(d.st_carb_min);$("#st_carb_max").val(d.st_carb_max);$("#st_carb_max2").val(d.st_carb_max);$("#type").val(d.type);$("#batch_size").val(d.batch_size);$("#est_a_vol").val(d.batch_size*1.04);$("#boil_size").val(d.boil_size);$("#est_pre_vol").val(d.boil_size*1.04);$("#boil_time").val(d.boil_time);$("#efficiency").val(d.efficiency);$("#est_og").val(d.est_og);$("#est_og2").val(d.est_og);$("#est_og3").val(0);$("#est_fg").val(d.est_fg);$("#est_fg2").val(d.est_fg);$("#est_fg3").val(d.est_fg);$("#est_color").val(d.est_color);$("#est_color2").val(d.est_color);$("#est_abv").val(d.est_abv);$("#color_method").val(d.color_method);$("#est_ibu").val(d.est_ibu);$("#est_ibu2").val(d.est_ibu);$("#ibu_method").val(d.ibu_method);$("#est_carb").val(d.est_carb);$("#mash_name").val(d.mash_name);$("#mash_ph").val(d.mash_ph);$("#sparge_temp").val(d.sparge_temp);$("#sparge_ph").val(d.sparge_ph);$("#sparge_volume").val(d.sparge_volume);$("#sparge_source").val(d.sparge_source);$("#sparge_acid_type").val(d.sparge_acid_type);$("#sparge_acid_perc").val(d.sparge_acid_perc);$("#sparge_acid_amount").val(d.sparge_acid_amount*1000);$("#calc_acid").val(d.calc_acid);$("#w1_name").val(d.w1_name);$("#w1_amount").val(d.w1_amount);$("#w1_calcium").val(d.w1_calcium);$("#w1_sulfate").val(d.w1_sulfate);$("#w1_chloride").val(d.w1_chloride);$("#w1_sodium").val(d.w1_sodium);$("#w1_magnesium").val(d.w1_magnesium);$("#w1_total_alkalinity").val(d.w1_total_alkalinity);$("#w1_ph").val(d.w1_ph);$("#w1_cost").val(d.w1_cost);$("#w2_name").val(d.w2_name);$("#w2_amount").val(d.w2_amount);$("#w2_calcium").val(d.w2_calcium);$("#w2_sulfate").val(d.w2_sulfate);$("#w2_chloride").val(d.w2_chloride);$("#w2_sodium").val(d.w2_sodium);$("#w2_magnesium").val(d.w2_magnesium);$("#w2_total_alkalinity").val(d.w2_total_alkalinity);$("#w2_ph").val(d.w2_ph);$("#w2_cost").val(d.w2_cost);$("#wg_amount").val(d.wg_amount);$("#wg_calcium").val(d.wg_calcium);$("#wg_sulfate").val(d.wg_sulfate);$("#wg_chloride").val(d.wg_chloride);$("#wg_sodium").val(d.wg_sodium);$("#wg_magnesium").val(d.wg_magnesium);$("#wg_total_alkalinity").val(d.wg_total_alkalinity);$("#wg_ph").val(d.wg_ph);$("#wb_calcium").val(d.wb_calcium);$("#wb_sulfate").val(d.wb_sulfate);$("#wb_chloride").val(d.wb_chloride);$("#wb_sodium").val(d.wb_sodium);$("#wb_magnesium").val(d.wb_magnesium);$("#wb_total_alkalinity").val(d.wb_total_alkalinity);$("#wb_ph").val(d.wb_ph);$("#wa_acid_name").val(d.wa_acid_name);$("#wa_acid_perc").val(d.wa_acid_perc);$("#wa_base_name").val(d.wa_base_name);$("#starter_enable").val(d.starter_enable);$("#starter_type").val(d.starter_type);$("#starter_sg").val(d.starter_sg);$("#starter_viability").val(d.starter_viability);$("#prop1_type").val(d.prop1_type);$("#prop1_volume").val(d.prop1_volume);$("#prop2_type").val(d.prop2_type);$("#prop2_volume").val(d.prop2_volume);$("#prop3_type").val(d.prop3_type);$("#prop3_volume").val(d.prop3_volume);$("#prop4_type").val(d.prop4_type);$("#prop4_volume").val(d.prop4_volume);n(d);aS(d);W(d);aL(d);au(d);aU();$("#jqxTabs").jqxTabs("select",2)},loadError:function(a3,i,a2){},beforeLoadComplete:function(i){$("#jqxLoader").jqxLoader("open")}}),n=function(a2){var i={localdata:a2.fermentables,datatype:"local",cache:false,async:false,datafields:[{name:"f_name",type:"string"},{name:"f_origin",type:"string"},{name:"f_supplier",type:"string"},{name:"f_amount",type:"float"},{name:"f_cost",type:"float"},{name:"f_type",type:"int"},{name:"f_yield",type:"float"},{name:"f_color",type:"float"},{name:"f_coarse_fine_diff",type:"float"},{name:"f_moisture",type:"float"},{name:"f_diastatic_power",type:"float"},{name:"f_protein",type:"float"},{name:"f_max_in_batch",type:"float"},{name:"f_graintype",type:"int"},{name:"f_added",type:"int"},{name:"f_dissolved_protein",type:"float"},{name:"f_recommend_mash",type:"int"},{name:"f_add_after_boil",type:"int"},{name:"f_adjust_to_total_100",type:"int"},{name:"f_percentage",type:"float"},{name:"f_di_ph",type:"float"},{name:"f_acid_to_ph_57",type:"float"},{name:"f_inventory",type:"float"},{name:"f_avail",type:"int"}],addrow:function(a5,a7,a4,a6){a6(true)},deleterow:function(a4,a5){a5(true)},updaterow:function(a4,a6,a5){a5(true)}},a3=new $.jqx.dataAdapter(i);$("#fermentableGrid").jqxGrid({width:1240,height:470,source:a3,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a5){var a4=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a5.append(a4);a4.append('<div style="float: left; margin-left: 165px;" id="faddrowbutton"></div>');a4.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a4.append('<div style="float: left; margin-left: 10px;" id="finstockbutton"></div>');a4.append('<input style="float: left; margin-left: 400px;" id="fdeleterowbutton" type="button" value="Verwijder mout" />');$("#faddrowbutton").jqxDropDownList({placeHolder:"Kies mout:",theme:theme,template:"primary",source:fermentablelist,displayMember:"name",disabled:(d.stage>3),width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a7,a6,a9){var a8=fermentablelist.records[a7];return a8.supplier+" / "+a8.name+" ("+a8.color+" EBC)"}});$("#faddrowbutton").on("select",function(a8){if(a8.args){var a6,a7,a9={},ba=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;a6=a8.args.index;a7=fermentablelist.records[a6];a9.f_name=a7.name;a9.f_origin=a7.origin;a9.f_supplier=a7.supplier;a9.f_amount=0;a9.f_cost=a7.cost;a9.f_type=a7.type;a9.f_yield=a7.yield;a9.f_color=a7.color;a9.f_coarse_fine_diff=a7.coarse_fine_diff;a9.f_moisture=a7.moisture;a9.f_diastatic_power=a7.diastatic_power;a9.f_protein=a7.protein;a9.f_max_in_batch=a7.max_in_batch;a9.f_graintype=a7.graintype;if(a7.add_after_boil){a9.f_added=2}else{if((a7.type==1)||(a7.type==4)){a9.f_added=1}else{a9.f_added=0}}a9.f_dissolved_protein=a7.dissolved_protein;a9.f_recommend_mash=a7.recommend_mash;a9.f_add_after_boil=a7.add_after_boil;if(ba==0){a9.f_adjust_to_total_100=1;a9.f_percentage=100}else{a9.f_adjust_to_total_100=0;a9.f_percentage=0}a9.f_di_ph=a7.di_ph;a9.f_acid_to_ph_57=a7.acid_to_ph_57;a9.f_inventory=a7.inventory;$("#fermentableGrid").jqxGrid("addrow",null,a9)}});$("#finstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#finstockbutton").on("change",function(a6){fermentableinstock=a6.args.checked;fermentablelist.dataBind()});$("#fdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#fdeleterowbutton").on("click",function(){var bc,bb,a9,a8,a7,ba,a6=$("#fermentableGrid").jqxGrid("getselectedrowindex");bc=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a6>=0&&a6<bc){bb=$("#fermentableGrid").jqxGrid("getrowid",a6);a9=$("#fermentableGrid").jqxGrid("getcellvalue",bb,"f_percentage");a8=$("#fermentableGrid").jqxGrid("getcellvalue",bb,"f_amount");$("#fermentableGrid").jqxGrid("deleterow",bb)}bc=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(bc>1){if(l){for(a7=0;a7<bc;a7++){ba=$("#fermentableGrid").jqxGrid("getrowdata",a7);if(ba.f_adjust_to_total_100){ba.f_percentage+=a9;ba.f_amount+=a8}}}else{aV()}}else{$("#fermentableGrid").jqxGrid("setcellvalue",0,"f_percentage",100)}T();ar()})},ready:function(){T();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Vergistbaar ingredi&euml;nt",datafield:"f_name",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+a9.f_supplier+" / "+a9.f_name+" ("+a9.f_color+" EBC)</span>"}},{text:"Type",width:100,datafield:"f_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+FermentableTypeData[a8].nl+"</span>"}},{text:"Moment",width:110,datafield:"f_added",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+AddedData[a8].nl+"</span>"}},{text:"Maxinbatch",datafield:"f_max_in_batch",hidden:true},{text:"Opbrengst",datafield:"f_yield",width:90,align:"right",cellsalign:"right",cellsformat:"p1"},{text:"Gewicht Kg",datafield:"f_amount",width:120,align:"right",cellsalign:"right",cellsformat:"f3"},{text:"Voorraad Kg",datafield:"f_inventory",width:120,align:"right",cellsrenderer:function(a8,a6,a7,a4,ba,a9){var a5="#ffffff";if(((d.inventory_reduced<=2)&&(a9.f_added<=1))||((d.inventory_reduced<=3)&&(a9.f_added==2))||((d.inventory_reduced<=5)&&(a9.f_added==3))||((d.inventory_reduced<=6)&&(a9.f_added==4))||((d.inventory_reduced<=6)&&(a9.f_added==5))){if(a7<a9.f_amount){a5="#ff4040"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a5+';">'+a3.formatNumber(a7,"f3")+"</span>"}else{return"<span></span>"}}},{text:"Procent",datafield:"f_percentage",width:90,align:"right",cellsrenderer:function(a8,a6,a7,a4,ba,a9){if(a9.f_added>=4){return"<span></span>"}var a5="#ffffff";if(a7>a9.f_max_in_batch){a5="#ff4040"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a5+';">'+a3.formatNumber(a7,"p1")+"</span>"}},{text:"100%",datafield:"f_adjust_to_total_100",width:70,align:"center",cellsalign:"center",cellsrenderer:function(a5,a4,a8,a7,a6,a9){if(a8==0){return"<span></span>"}return'<span><img style="float:left; margin-left:25px; margin-top:4px;" src="images/dialog-ok-apply.png"></span>'}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a4){u=a4;aK=$("#fermentableGrid").jqxGrid("getrowdata",u);if(aK.f_added>=4){alert("Wijzig dit in de Verpakken tab")}else{if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{$("#wf_name").val(aK.f_name);$("#wf_amount").val(aK.f_amount);$("#wf_percentage").val(aK.f_percentage);$("#wf_max_in_batch").val(aK.f_max_in_batch);$("#wf_adjust_to_total_100").val(aK.f_adjust_to_total_100);$("#wf_added").val(aK.f_added);$("#popupFermentable").jqxWindow("open")}}}}]})},aS=function(i){var a3={localdata:i.hops,datatype:"local",cache:false,async:false,datafields:[{name:"h_name",type:"string"},{name:"h_origin",type:"string"},{name:"h_amount",type:"float"},{name:"h_cost",type:"float"},{name:"h_type",type:"int"},{name:"h_form",type:"int"},{name:"h_useat",type:"int"},{name:"h_time",type:"float"},{name:"h_alpha",type:"float"},{name:"h_beta",type:"float"},{name:"h_hsi",type:"float"},{name:"h_humulene",type:"float"},{name:"h_caryophyllene",type:"float"},{name:"h_cohumulone",type:"float"},{name:"h_myrcene",type:"float"},{name:"h_total_oil",type:"float"},{name:"h_inventory",type:"float"},{name:"h_avail",type:"int"}],addrow:function(a5,a7,a4,a6){console.log("hop addrow "+a5);a6(true)},deleterow:function(a4,a5){console.log("hop deleterow "+a4);a5(true)},updaterow:function(a4,a6,a5){console.log("hop updaterow "+a4);a5(true)}},a2=new $.jqx.dataAdapter(a3);$("#hopGrid").jqxGrid({width:1240,height:560,source:a2,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a5){var a4=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a5.append(a4);a4.append('<div style="float: left; margin-left: 165px;" id="haddrowbutton"></div>');a4.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a4.append('<div style="float: left; margin-left: 10px;" id="hinstockbutton"></div>');a4.append('<input style="float: left; margin-left: 400px;" id="hdeleterowbutton" type="button" value="Verwijder hop" />');$("#haddrowbutton").jqxDropDownList({placeHolder:"Kies hop:",theme:theme,template:"primary",source:hoplist,disabled:(d.stage>3),displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a7,a6,a9){var a8=hoplist.records[a7];return a8.origin+" - "+a8.name+" / "+HopFormData[a8.form].nl+" ("+a8.alpha+"% &alpha;)"}});$("#haddrowbutton").on("select",function(a8){if(a8.args){var a7,a9={},a6=a8.args.index;a7=hoplist.records[a6];a9.h_name=a7.name;a9.h_origin=a7.origin;a9.h_amount=0;a9.h_cost=a7.cost;a9.h_type=a7.type;a9.h_form=a7.form;a9.h_useat=2;a9.h_time=0;a9.h_alpha=a7.alpha;a9.h_beta=a7.beta;a9.h_hsi=a7.hsi;a9.h_humulene=a7.humulene;a9.h_caryophyllene=a7.caryophyllene;a9.h_cohumulone=a7.cohumulone;a9.h_myrcene=a7.myrcene;a9.h_total_oil=a7.total_oil;a9.h_inventory=a7.inventory;$("#hopGrid").jqxGrid("addrow",null,a9)}$("#haddrowbutton").jqxDropDownList("clearSelection")});$("#hinstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#hinstockbutton").on("change",function(a6){hopinstock=a6.args.checked;hoplist.dataBind()});$("#hdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#hdeleterowbutton").on("click",function(){var a8,a7,a6=$("#hopGrid").jqxGrid("getselectedrowindex");a8=$("#hopGrid").jqxGrid("getdatainformation").rowscount;if(a6>=0&&a6<a8){a7=$("#hopGrid").jqxGrid("getrowid",a6);$("#hopGrid").jqxGrid("deleterow",a7)}ar()})},ready:function(){ar();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Hop",datafield:"h_name",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+a9.h_origin+" / "+a9.h_name+"</span>"},},{text:"Type",width:90,datafield:"h_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopTypeData[a8].nl+"</span>"}},{text:"Vorm",width:90,datafield:"h_form",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopFormData[a8].nl+"</span>"}},{text:"Alpha",datafield:"h_alpha",width:80,align:"right",cellsalign:"right",cellsformat:"p1"},{text:"Gebruik",width:110,datafield:"h_useat",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+HopUseData[a8].nl+"</span>"}},{text:"Tijdsduur",datafield:"h_time",width:90,align:"right",cellsrenderer:function(a5,a4,a8,a7,a6,ba){var a9="";if((ba.h_useat==2)||(ba.h_useat==4)){a9=ag.formatNumber(a8,"f0")+" min."}else{if(ba.h_useat==5){a9=ag.formatNumber(a8/1440,"f0")+" dagen"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a9+"</span>"}},{text:"IBU",datafield:"ibu",width:80,align:"right",cellsrenderer:function(a5,a4,a8,a7,a6,ba){var a9=toIBU(ba.h_useat,ba.h_form,ak,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(ba.h_amount),parseFloat(ba.h_time),parseFloat(ba.h_alpha),$("#ibu_method").val());return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ag.formatNumber(a9,"f1")+"</span>"}},{text:"Gewicht",datafield:"h_amount",width:110,align:"right",cellsrenderer:function(a5,a4,a9,a8,a7,ba){var a6=ag.formatNumber(a9,"f1")+" kg";if(a9<1){a6=ag.formatNumber(a9*1000,"f1")+" gr"}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a6+"</span>"}},{text:"Voorraad",datafield:"h_inventory",width:110,align:"right",cellsrenderer:function(a6,a5,ba,a9,a8,bb){if(((d.inventory_reduced<=2)&&(bb.h_useat<=4))||((d.inventory_reduced<=6)&&(bb.h_useat==5))){var a7,a4="#ffffff";if(ba<bb.h_amount){a4="#ff4040"}a7=ag.formatNumber(ba,"f1")+" kg";if(ba<1){a7=ag.formatNumber(ba*1000,"f1")+" gr"}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a4+';">'+a7+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a4){if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{console.log("edit button row "+a4);a=a4;e=$("#hopGrid").jqxGrid("getrowdata",a);$("#wh_name").val(e.h_name);$("#wh_amount").val(e.h_amount*1000);var a5=toIBU(e.h_useat,e.h_form,ak,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(e.h_amount),parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());$("#wh_ibu").val(a5);if(e.h_useat==5){$("#wh_time").val(e.h_time/1440)}else{$("#wh_time").val(e.h_time)}$("#wh_useat").val(e.h_useat);$("#popupHop").jqxWindow("open")}}}]})},W=function(a3){var a2={localdata:a3.miscs,datatype:"local",cache:false,async:false,datafields:[{name:"m_name",type:"string"},{name:"m_amount",type:"float"},{name:"m_cost",type:"float"},{name:"m_type",type:"int"},{name:"m_use_use",type:"int"},{name:"m_time",type:"float"},{name:"m_amount_is_weight",type:"int"},{name:"m_inventory",type:"float"},{name:"m_avail",type:"int"}],addrow:function(a5,a7,a4,a6){console.log("misc addrow "+a5);a6(true)},deleterow:function(a4,a5){console.log("misc deleterow "+a4);a5(true)},updaterow:function(a4,a6,a5){console.log("misc updaterow "+a4);a5(true)}},i=new $.jqx.dataAdapter(a2,{beforeLoadComplete:function(a4){var a7,a5,a6=new Array();for(a5=0;a5<a4.length;a5++){a7=a4[a5];a6.push(a7);switch(a7.m_name){case"CaCl2":$("#wa_cacl2").val(a7.m_amount*1000);break;case"CaSO4":$("#wa_caso4").val(a7.m_amount*1000);break;case"MgSO4":$("#wa_mgso4").val(a7.m_amount*1000);break;case"NaCl":$("#wa_nacl").val(a7.m_amount*1000);break;case"Melkzuur":$("#wa_acid_name").val(0);$("#wa_acid").val(a7.m_amount*1000);$("#wa_acid_perc").val(80);af="Melkzuur";break;case"Zoutzuur":$("#wa_acid_name").val(1);$("#wa_acid").val(a7.m_amount*1000);$("#wa_acid_perc").val(80);af="Zoutzuur";break;case"Fosforzuur":$("#wa_acid_name").val(2);$("#wa_acid").val(a7.m_amount*1000);$("#wa_acid_perc").val(80);af="Fosforzuur";break;case"Zwavelzuur":$("#wa_acid_name").val(3);$("#wa_acid").val(a7.m_amount*1000);$("#wa_acid_perc").val(80);af="Zwavelzuur";break;case"NaHCO3":$("#wa_base_name").val(0);$("#wa_base").val(a7.m_amount*1000);aT="NaHCO3";break;case"Na2CO3":$("#wa_base_name").val(1);$("#wa_base").val(a7.m_amount*1000);aT="Na2CO3";break;case"CaCO3":$("#wa_base_name").val(2);$("#wa_base").val(a7.m_amount*1000);aT="CaCO3";break;case"Ca(OH)2":$("#wa_base_name").val(3);$("#wa_base").val(a7.m_amount*1000);aT="Ca(OH)2";break}}return a6},loadError:function(a6,a4,a5){$("#err").text(a4+" "+a5)},});$("#miscGrid").jqxGrid({width:1240,height:575,source:i,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a5){var a4=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a5.append(a4);a4.append('<div style="float: left; margin-left: 165px;" id="maddrowbutton"></div>');a4.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a4.append('<div style="float: left; margin-left: 10px;" id="minstockbutton"></div>');a4.append('<input style="float: left; margin-left: 400px;" id="mdeleterowbutton" type="button" value="Verwijder ingredient" />');$("#maddrowbutton").jqxDropDownList({placeHolder:"Kies ingredi&euml;nt:",theme:theme,template:"primary",source:misclist,disabled:(d.stage>3),displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500});$("#maddrowbutton").on("select",function(a8){if(a8.args){var a7,a9={},a6=a8.args.index;a7=misclist.records[a6];a9.m_name=a7.name;a9.m_amount=0;a9.m_cost=a7.cost;a9.m_type=a7.type;a9.m_use_use=a7.use_use;a9.m_time=0;a9.m_amount_is_weight=a7.amount_is_weight;a9.m_inventory=a7.inventory;$("#miscGrid").jqxGrid("addrow",null,a9)}});$("#minstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#minstockbutton").on("change",function(a6){miscinstock=a6.args.checked;misclist.dataBind()});$("#mdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#mdeleterowbutton").on("click",function(){var a9,a7,a8,a6=$("#miscGrid").jqxGrid("getselectedrowindex");a9=$("#miscGrid").jqxGrid("getdatainformation").rowscount;a7=$("#miscGrid").jqxGrid("getcellvalue",a6,"m_type");if(a6>=0&&a6<a9&&a7!=4){a8=$("#miscGrid").jqxGrid("getrowid",a6);$("#miscGrid").jqxGrid("deleterow",a8)}})},ready:function(){aF();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Ingredient",datafield:"m_name"},{text:"Type",width:140,datafield:"m_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+MiscTypeData[a8].nl+"</span>"}},{text:"Gebruik",width:140,datafield:"m_use_use",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return"<span style='margin: 3px; margin-top: 6px; float: left;'>"+MiscUseData[a8].nl+"</span>"}},{text:"Tijd",datafield:"m_time",width:90,align:"right",cellsrenderer:function(a5,a4,a8,a7,a6,ba){var a9="";if(ba.m_use_use==2){a9=ag.formatNumber(a8,"f0")+" min."}else{if((ba.m_use_use==3)||(ba.m_use_use==4)){a9=ag.formatNumber(a8/1440,"f0")+" dagen"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a9+"</span>"},},{text:"Hoeveel",datafield:"m_amount",width:110,align:"right",cellsrenderer:function(a5,a4,a9,a7,a6,ba){var a8=ba.m_amount_is_weight?"gr":"ml";return'<span style="margin: 4px; margin-top: 6px; float: right;">'+ag.formatNumber(a9*1000,"f2")+" "+a8+"</span>"}},{text:"Voorraad",datafield:"m_inventory",width:110,align:"right",cellsrenderer:function(a8,a4,a9,bb,a5,bc){var ba,a6,a7;if(((d.inventory_reduced<=2)&&(bc.m_use_use<=2))||((d.inventory_reduced<=3)&&(bc.m_use_use==3))||((d.inventory_reduced<=5)&&(bc.m_use_use==4))||((d.inventory_reduced<=6)&&(bc.m_use_use==5))){ba=bc.m_amount_is_weight?"gr":"ml";a6="#ffffff";if(a9<bc.m_amount){a6="#ff4040"}a7=ag.formatNumber(a9*1000,"f2")+" "+ba;return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a6+';">'+a7+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a4){av=a4;aG=$("#miscGrid").jqxGrid("getrowdata",av);if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{if(aG.m_type==4){alert("Brouwzouten wijzigen in de water tab.")}else{console.log("edit button row "+a4);if(aG.m_amount_is_weight){$("#wm_pmpt_amount").html("Gewicht gram:")}else{$("#wm_pmpt_amount").html("Volume ml:")}$("#wm_name").val(aG.m_name);$("#wm_amount").val(aG.m_amount*1000);if((aG.m_use_use==3)||(aG.m_use_use==4)){$("#wm_time").val(aG.m_time/1440)}else{$("#wm_time").val(aG.m_time)}$("#wm_use_use").val(aG.m_use_use);$("#popupMisc").jqxWindow("open")}}}}]})},aL=function(a2){var i={localdata:a2.yeasts,datatype:"local",cache:false,async:false,datafields:[{name:"y_name",type:"string"},{name:"y_laboratory",type:"string"},{name:"y_product_id",type:"string"},{name:"y_amount",type:"float"},{name:"y_cost",type:"float"},{name:"y_type",type:"int"},{name:"y_form",type:"int"},{name:"y_flocculation",type:"int"},{name:"y_min_temperature",type:"float"},{name:"y_max_temperature",type:"float"},{name:"y_attenuation",type:"float"},{name:"y_use",type:"int"},{name:"y_cells",type:"float"},{name:"y_tolerance",type:"float"},{name:"y_inventory",type:"float"},{name:"y_avail",type:"int"}],addrow:function(a5,a7,a4,a6){console.log("yeast addrow "+a5);a6(true)},deleterow:function(a4,a5){console.log("yeast deleterow "+a4);a5(true)},updaterow:function(a4,a6,a5){console.log("yeast updaterow "+a4);a5(true)}},a3=new $.jqx.dataAdapter(i);$("#yeastGrid").jqxGrid({width:1240,height:350,source:a3,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a5){var a4=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a5.append(a4);a4.append('<div style="float: left; margin-left: 165px;" id="yaddrowbutton"></div>');a4.append('<div style="float: left; margin-left: 10px; margin-top: 5px;">In voorraad:</div>');a4.append('<div style="float: left; margin-left: 10px;" id="yinstockbutton"></div>');a4.append('<input style="float: left; margin-left: 400px;" id="ydeleterowbutton" type="button" value="Verwijder gist" />');$("#yaddrowbutton").jqxDropDownList({placeHolder:"Kies gist:",theme:theme,source:yeastlist,disabled:(d.stage>3),template:"primary",displayMember:"name",width:150,height:27,dropDownWidth:500,dropDownHeight:500,renderer:function(a7,a6,a9){var a8=yeastlist.records[a7];return a8.laboratory+" "+a8.product_id+" "+a8.name}});$("#yaddrowbutton").on("select",function(a8){if(a8.args){var a7,a9={},a6=a8.args.index;a7=yeastlist.records[a6];a9.y_name=a7.name;a9.y_laboratory=a7.laboratory;a9.y_product_id=a7.product_id;a9.y_type=a7.type;a9.y_form=a7.form;a9.y_amount=0;a9.y_cost=a7.cost;a9.y_use=0;a9.y_min_temperature=a7.min_temperature;a9.y_max_temperature=a7.max_temperature;a9.y_attenuation=a7.attenuation;a9.y_flocculation=a7.flocculation;a9.y_cells=a7.cells;a9.y_tolerance=a7.tolerance;a9.y_inventory=a7.inventory;$("#yeastGrid").jqxGrid("addrow",null,a9)}X();$("#yaddrowbutton").jqxDropDownList("clearSelection")});$("#yinstockbutton").jqxCheckBox({theme:theme,height:27,disabled:(d.stage>3)});$("#yinstockbutton").on("change",function(a6){yeastinstock=a6.args.checked;yeastlist.dataBind()});$("#ydeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#ydeleterowbutton").on("click",function(){var a8,a7,a6=$("#yeastGrid").jqxGrid("getselectedrowindex");a7=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(a6>=0&&a6<a7){a8=$("#yeastGrid").jqxGrid("getrowid",a6);$("#yeastGrid").jqxGrid("deleterow",a8);X()}})},ready:function(){T();I();X();$("#jqxTabs").jqxTabs("next")},columns:[{text:"Gist",datafield:"y_name"},{text:"Laboratorium",width:150,datafield:"y_laboratory"},{text:"Code",width:90,datafield:"y_product_id"},{text:"Soort",width:100,datafield:"y_form",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+YeastFormData[a8].nl+"</span>"}},{text:"Min. &deg;C",width:70,align:"right",cellsalign:"right",datafield:"y_min_temperature"},{text:"Max. &deg;C",width:70,align:"right",cellsalign:"right",datafield:"y_max_temperature"},{text:"Tol. %",width:60,align:"right",cellsalign:"right",datafield:"y_tolerance",cellsrenderer:function(a6,a5,ba,a9,a8,bb){var a7="",a4="#ffffff";if(ba>0){a7=ag.formatNumber(ba,"f1");if(d.est_abv>ba){a4="#ff4040"}}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a4+';">'+a7+"</span>"}},{text:"Attn. %",width:70,align:"right",cellsalign:"right",datafield:"y_attenuation",cellsformat:"f1"},{text:"Voor",width:120,datafield:"y_use",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+YeastUseData[a8].nl+"</span>"}},{text:"Hoeveel",datafield:"y_amount",width:90,align:"right",cellsrenderer:function(a5,a4,a9,a8,a7,ba){var a6=ag.formatNumber(a9*1000,"f0")+" ml";if(ba.y_form==0){a6=ag.formatNumber(a9,"f0")+" pk"}else{if(ba.y_form==1){a6=ag.formatNumber(a9*1000,"f1")+" gr"}}return'<span style="margin: 4px; margin-top: 6px; float: right;">'+a6+"</span>"}},{text:"Voorraad",datafield:"y_inventory",width:90,align:"right",cellsrenderer:function(a6,a5,ba,a9,a8,bb){var a4,a7;if(((d.inventory_reduced<=3)&&(bb.y_use==0))||((d.inventory_reduced<=4)&&(bb.y_use==1))||((d.inventory_reduced<=5)&&(bb.y_use==2))||((d.inventory_reduced<=6)&&(bb.y_use==3))){a4="#ffffff";if(ba<bb.y_amount){a4="#ff4040"}a7=ag.formatNumber(ba*1000,"f0")+" ml";if(bb.y_form==0){a7=ag.formatNumber(ba,"f0")+" pk"}else{if(bb.y_form==1){a7=ag.formatNumber(ba*1000,"f1")+" gr"}}return'<span style="margin: 4px; margin-top: 6px; float: right; color: '+a4+';">'+a7+"</span>"}else{return"<span></span>"}}},{text:"",datafield:"Edit",columntype:"button",width:90,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a4){if(d.stage>3){alert("Ingredieënt is al verwerkt.")}else{aD=a4;f=$("#yeastGrid").jqxGrid("getrowdata",aD);if(f.y_form==0){$("#wy_pmpt_amount").html("Pak(ken):");$("#wy_amount").val(f.y_amount);$("#wy_amount").jqxNumberInput({decimalDigits:0})}else{if(f.y_form==1){$("#wy_pmpt_amount").html("Gewicht gram:");$("#wy_amount").val(f.y_amount*1000);$("#wy_amount").jqxNumberInput({decimalDigits:1})}else{$("#wy_pmpt_amount").html("Volume ml:");$("#wy_amount").val(f.y_amount*1000);$("#wy_amount").jqxNumberInput({decimalDigits:0})}}$("#wy_name").val(f.y_name);$("#wy_laboratory").val(f.y_laboratory);$("#wy_product_id").val(f.y_product_id);$("#wy_use").val(f.y_use);$("#popupYeast").jqxWindow("open")}}}]})},au=function(a3){var a2={localdata:a3.mashs,datatype:"local",cache:false,async:false,datafields:[{name:"step_name",type:"string"},{name:"step_type",type:"int"},{name:"step_infuse_amount",type:"float"},{name:"step_temp",type:"float"},{name:"step_time",type:"float"},{name:"step_thickness",type:"float"},{name:"ramp_time",type:"float"},{name:"end_temp",type:"float"}],addrow:function(a5,a7,a4,a6){a6(true)},deleterow:function(a4,a5){a5(true)}},i=new $.jqx.dataAdapter(a2,{beforeLoadComplete:function(a4){C=0;var a5,a7,a6=new Array();for(a5=0;a5<a4.length;a5++){a7=a4[a5];if(a7.step_type==0){C+=parseFloat(a7.step_infuse_amount)}a7.step_thickness=0;a6.push(a7)}},});$("#mashGrid").jqxGrid({width:1240,height:400,source:i,theme:theme,selectionmode:"singlerow",showtoolbar:true,rendertoolbar:function(a5){var a4=$("<div style='overflow: hidden; position: relative; margin: 5px;'></div>");a5.append(a4);a4.append('<input style="float: left; margin-left: 165px;" id="saddrowbutton" type="button" value="Nieuwe stap" />');a4.append('<input style="float: left; margin-left: 565px;" id="sdeleterowbutton" type="button" value="Verwijder stap" />');$("#saddrowbutton").jqxButton({template:"primary",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#saddrowbutton").on("click",function(){var a6={},a7=$("#mashGrid").jqxGrid("getdatainformation").rowscount;a6.step_name="Stap "+(a7+1);if(a7>0){a6.step_type=1}else{a6.step_type=0;a6.step_infuse_amount=15}a6.step_temp=62;a6.step_time=20;a6.step_thickness=0;a6.ramp_time=1;a6.end_temp=62;$("#mashGrid").jqxGrid("addrow",null,a6)});$("#sdeleterowbutton").jqxButton({template:"danger",theme:theme,height:27,width:150,disabled:(d.stage>3)});$("#sdeleterowbutton").on("click",function(){var a8,a7,a6=$("#mashGrid").jqxGrid("getselectedrowindex");a8=$("#mashGrid").jqxGrid("getdatainformation").rowscount;if(a6>=0&&a6<a8){a7=$("#mashGrid").jqxGrid("getrowid",a6);$("#mashGrid").jqxGrid("deleterow",a7)}})},ready:function(){aW();aN();$("#jqxLoader").jqxLoader("close");$("#jqxTabs").jqxTabs("first")},columns:[{text:"Stap naam",datafield:"step_name"},{text:"Stap type",datafield:"step_type",width:175,cellsrenderer:function(a5,a4,a8,a7,a6,a9){return'<span style="margin: 4px; margin-top: 6px; float: left;">'+MashStepTypeData[a8].nl+"</span>"}},{text:"Start &deg;C",datafield:"step_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Eind &deg;C",datafield:"end_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Rust min.",datafield:"step_time",width:90,align:"right",cellsalign:"right"},{text:"Stap min.",datafield:"ramp_time",width:90,align:"right",cellsalign:"right"},{text:"Infuse L.",datafield:"step_infuse_amount",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"L/Kg.",datafield:"step_thickness",width:90,align:"right",cellsalign:"right",cellsformat:"f2"},{text:"",datafield:"Edit",columntype:"button",width:100,align:"center",cellsrenderer:function(){return"Wijzig"},buttonclick:function(a4){if(d.stage>3){alert("Het maichen is al gedaan.")}else{aj=a4;D=$("#mashGrid").jqxGrid("getrowdata",aj);$("#wstep_name").val(D.step_name);$("#wstep_type").val(D.step_type);$("#wstep_infuse_amount").val(D.step_infuse_amount);$("#wstep_temp").val(D.step_temp);$("#wend_temp").val(D.end_temp);$("#wstep_time").val(D.step_time);$("#wramp_time").val(D.ramp_time);if(D.step_type==0){$("#wstep_infuse_amount").show();$("#wstep_pmpt").show()}else{$("#wstep_infuse_amount").hide();$("#wstep_pmpt").hide()}$("#popupMash").jqxWindow("open")}}}]})};$("#jqxMenu").jqxMenu("destroy");console.log("record:"+my_record+"  return:"+my_return+"  theme:"+theme);$("#jqxLoader").jqxLoader({width:250,height:150,isModal:true,text:"Laden product ...",theme:theme});ag.dataBind();function G(){if(d.inventory_reduced>6){$("#ok_pmpt").hide();return}if(p&&aa&&ah&&O&&c){$("#ok_supplies").html("<img src='images/dialog-ok-apply.png'>")}else{$("#ok_supplies").html("<img src='images/dialog-error.png'>")}}function aV(){console.log("calcPercentages()");var a2=0,a4,i,a3=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a3>1){for(ad=0;ad<a3;ad++){a4=$("#fermentableGrid").jqxGrid("getrowdata",ad);if(a4.f_added<4){a2+=Round(a4.f_amount,3)}}a2=Round(a2,3);for(ad=0;ad<a3;ad++){a4=$("#fermentableGrid").jqxGrid("getrowdata",ad);if(a4.f_added<4){i=Round(a4.f_amount/a2*100,1);$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",i)}else{$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",0)}}}else{$("#fermentableGrid").jqxGrid("setcellvalue",0,"f_percentage",100)}}function T(){var bA=0,bs=0,bq=0,bi=0,br=0,bB=0,bb=0,bl=0,bf=0,bj=false,bo=0,ba=0,bu=0.925,bn=0.95,a9=0,bp,a8,bd,a2,bh,a3,bx,by,a6,bg=0,bw,be,bc,a5,a7,bk,a4,bm,bt,bz;H=0;ab=0;ao=0;p=1;O=1;if((bd=$("#mashGrid").jqxGrid("getrows"))){for(bp=0;bp<bd.length;bp++){a8=bd[bp];if(a8.step_type==0){bB+=parseFloat(a8.step_infuse_amount)}if(a8.step_temp<=75){bh=a8.step_time+a8.ramp_time;bo+=bh;ba+=bh*a8.step_temp}}if(bo>5){bo-=5}ba=Round(ba/bo,2)}if(!(bd=$("#fermentableGrid").jqxGrid("getrows"))){return}for(bp=0;bp<bd.length;bp++){a8=bd[bp];if(a8.f_adjust_to_total_100){bj=true}if(a8.f_type==1&&a8.f_added<4){H+=a8.f_percentage}if(a8.f_graintype==2&&a8.f_added<4){ab+=a8.f_percentage}bw=a8.f_amount*(a8.f_yield/100)*(1-a8.f_moisture/100);if(a8.f_added==0){if(bB>0){bB+=a8.f_amount*a8.f_moisture/100;bg+=bw}bw=parseFloat(d.efficiency)/100*bw;bs+=bw;ao+=parseFloat(a8.f_amount)}if(a8.f_added==0||a8.f_added==1){bA+=bw}if(a8.f_added==2||a8.f_added==3){bc=(a8.f_yield/100)*(1-a8.f_moisture/100);bi+=a8.f_amount*bc;br+=a8.f_amount;bq+=(bc*sugardensity+(1-bc)*1)*a8.f_amount}if(a8.f_added<4){bb+=a8.f_amount*ebc_to_srm(a8.f_color);bl+=a8.f_amount*a8.f_color*get_kt(a8.f_color);bf+=(a8.f_percentage/100)*a8.f_color}if(B){if(a8.f_added==4){$("#bottle_priming_total").val(a8.f_amount*1000);$("#bottle_priming_sugar").jqxDropDownList("selectItem",a8.f_name)}if(a8.f_added==5){$("#keg_priming_total").val(a8.f_amount*1000);$("#keg_priming_sugar").jqxDropDownList("selectItem",a8.f_name)}}if((((d.inventory_reduced<=2)&&(a8.f_added<=1))||((d.inventory_reduced<=3)&&(a8.f_added==2))||((d.inventory_reduced<=5)&&(a8.f_added==3))||((d.inventory_reduced<=6)&&(a8.f_added==4))||((d.inventory_reduced<=6)&&(a8.f_added==5)))&&a8.f_inventory<a8.f_amount){p=0}if(a8.f_added==0&&(a8.f_type==0||a8.f_type==4)&&a8.f_color<50){a9+=a8.f_diastatic_power*a8.f_amount}}B=0;$("#ferm_lintner").val(Math.round(parseFloat(a9/ao)));$("#mash_kg").val(ao);console.log("calcFermentables() supplies:"+p+" moutsuiker:"+bs+"/"+bA);l=bj;if(l){$("#wf_amount").jqxNumberInput({width:90,readOnly:true,spinButtons:false})}else{$("#wf_amount").jqxNumberInput({width:110,readOnly:false,spinButtons:true})}if(bB>0){be=bg/sugardensity+bB;bg=1000*bg/(be*10);a0=Round(plato_to_sg(bg),5);$("#est_mash_sg").val(a0)}d.est_og=estimate_sg(bA+bi,parseFloat(d.batch_size));$("#est_og").val(d.est_og);$("#est_og2").val(d.est_og);a2=d.est_og;aY=estimate_sg(bA,parseFloat(d.batch_size));$("#est_og3").val(aY);ak=estimate_sg(bs,parseFloat(d.boil_size));$("#est_pre_sg").val(ak);a3=parseFloat(d.batch_size);if(d.brew_aboil_volume>0){a3=d.brew_aboil_volume/1.04}if(d.brew_fermenter_tcloss==0){d.brew_fermenter_tcloss=d.eq_trub_chiller_loss;$("#brew_fermenter_tcloss").val(d.brew_fermenter_tcloss)}d.brew_fermenter_volume=a3-d.brew_fermenter_tcloss+d.brew_fermenter_extrawater;$("#brew_fermenter_volume").val(d.brew_fermenter_volume);bx=(d.boil_size-C+(ao*my_grain_absorbtion)+d.eq_lauter_deadspace)*1.03;$("#brew_sparge_est").val(bx);by=d.brew_aboil_sg;if(by<1.002){by=aY}a6=d.brew_fermenter_extrawater;if(d.brew_fermenter_volume>0){a5=sg_to_plato(by)*d.brew_fermenter_volume*by/100;a5+=bi;if((d.brew_fermenter_volume*by+br)>0){bk=100*a5/(d.brew_fermenter_volume*by+br+a6);d.brew_fermenter_sg=Round(plato_to_sg(bk),4);$("#brew_fermenter_sg").val(d.brew_fermenter_sg);if(d.color_method==4){d.brew_fermenter_color=Math.round(((bk/8.6)*bf)+(d.boil_time/60))}else{if(d.color_method==3){d.brew_fermenter_color=Math.round((4.46*bu*bn)/(a3+a6)*bl)}else{a4=bb/(a3+a6)*8.34436;d.brew_fermenter_color=kw_to_ebc(d.color_method,a4)}}$("#brew_fermenter_color").val(d.brew_fermenter_color);bt=ebc_to_color(d.brew_fermenter_color);$("#bcolorf").show();document.getElementById("bcolorf").style.background=bt}}else{d.brew_fermenter_sg=d.brew_fermenter_color=0;$("#brew_fermenter_sg").val(0);$("#brew_fermenter_color").val(0);$("#bcolorf").hide()}if(d.color_method==4){bm=Math.round(((sg_to_plato(d.est_og)/8.6)*bf)+(d.boil_time/60))}else{if(d.color_method==3){bm=Math.round((4.46*bu*bn)/parseFloat(d.batch_size)*bl)}else{a4=bb/parseFloat(d.batch_size)*8.34436;bm=kw_to_ebc(d.color_method,a4)}}d.est_color=bm;$("#est_color").val(bm);$("#est_color2").val(bm);bt=ebc_to_color(bm);document.getElementById("bcolor").style.background=bt;document.getElementById("bcolor2").style.background=bt;pmalts=ao/d.eq_mash_max*100;$("#perc_malts").jqxProgressBar("val",pmalts);$("#perc_sugars").jqxProgressBar("val",H);$("#perc_cara").jqxProgressBar("val",ab);aU();aC=0;Z=0;bd=$("#yeastGrid").jqxGrid("getrows");for(bp=0;bp<bd.length;bp++){a8=bd[bp];if(a8.y_use==0){if(parseFloat(a8.y_attenuation)>aC){aC=parseFloat(a8.y_attenuation)}if(a8.y_form==0){Z+=(parseFloat(a8.y_cells)/1000000000)*parseFloat(a8.y_amount)*(d.starter_viability/100)}else{Z+=(parseFloat(a8.y_cells)/1000000)*parseFloat(a8.y_amount)}}if((((d.inventory_reduced<=3)&&(a8.y_use==0))||((d.inventory_reduced<=4)&&(a8.y_use==1))||((d.inventory_reduced<=5)&&(a8.y_use==2))||((d.inventory_reduced<=6)&&(a8.y_use==3)))&&(a8.y_inventory<a8.y_amount)){O=0}}G();if(aC==0){aC=77}if((ao>0)&&(C>0)&&(bo>0)&&(ba>0)){d.est_fg=estimate_fg(H,ab,C/ao,bo,ba,aC,d.est_og)}else{d.est_fg=estimate_fg(H,ab,0,0,0,aC,d.est_og)}$("#est_fg").val(d.est_fg);$("#est_fg2").val(d.est_fg);$("#est_fg3").val(d.est_fg);bz=d.est_fg;d.est_abv=abvol(d.est_og,d.est_fg);$("#est_abv").val(d.est_abv);$("#est_abv2").val(d.est_abv);if((d.stage>=6)&&(d.fg>0.99)&&(d.fg<d.brew_fermenter_sg)){aC=100*(d.brew_fermenter_sg-d.fg)/(d.brew_fermenter_sg-1);a2=d.brew_fermenter_sg;bz=d.fg}$("#yeast_cells").val(Z);$("#need_cells").val(v());a7=1881.22*bz*(a2-bz)/(1.775-a2);a5=3550*bz*(0.1808*a2+0.8192*bz-1.0004);$("#kcal").val(Math.round((a7+a5)/(12*0.0295735296)))}function aN(){var a2=0,a3,a4;if(!(rows=$("#mashGrid").jqxGrid("getrows"))){return}if(ao==0){return}for(a3=0;a3<rows.length;a3++){a4=$("#mashGrid").jqxGrid("getrowdata",a3);if(a4.step_type==0){a2+=a4.step_infuse_amount}$("#mashGrid").jqxGrid("setcellvalue",a3,"step_thickness",a2/ao)}}function ae(a3){console.log("calcFermentablesFromOG("+a3+")");var a5,bb,a8,a4,ba,a7=0,a6=0,a9,a2=parseFloat($("#efficiency").jqxNumberInput("decimal"));ba=sg_to_plato(a3)*parseFloat($("#batch_size").jqxNumberInput("decimal"))*a3/100;a9=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;for(a4=0;a4<a9;a4++){bb=$("#fermentableGrid").jqxGrid("getrowdata",a4);if(bb.f_added<4){a8=bb.f_percentage/100*(bb.f_yield/100)*(1-bb.f_moisture/100);if(bb.f_added==0){a8=a2/100*a8}a7+=a8}}if(a7){a6=Round(ba/a7,3)}if(a6){for(a4=0;a4<a9;a4++){bb=$("#fermentableGrid").jqxGrid("getrowdata",a4);if(bb.f_added<4){a5=Math.round(bb.f_percentage*10*a6)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",a4,"f_amount",a5)}}}}function v(){var i,a3,a2=d.brew_fermenter_sg;if(a2<=1.0001&&d.fg>1){a2=d.fg}else{if(a2<=1.0001){a2=d.est_og}}i=sg_to_plato(a2);a3=d.brew_fermenter_volume;if(a3<=0){a3=d.batch_size-d.eq_trub_chiller_loss}return x*a3*i}function K(a3,a5,a2,a4){var i;if(a2==1){i=0.15}else{if(a3>50){i=0.1}else{i=15.25/(6*Math.sqrt(2*Math.PI))*Math.exp(-0.5*Math.pow((a3-21)/6,2));if(i<0.1){i=0.1}}}return(i*a4*1000)/a5}function h(a3,a5,a2,a4){var i=0;if(a2==5){i=1.33}else{if(a3>20){i=0}else{if(a3>7.5){i=10.03/(4*Math.sqrt(2*Math.PI))*Math.exp(-0.5*Math.pow((a3-7.5)/4,2))}else{if(a2==2){i=1}else{if(a2==3){i=1.2}else{if(a2==4){i=1.2}}}}}}return(i*a4*1000)/a5}function ar(){var a3=0,a2=0,a5={},a4,a6;U=aX=0;if(!(a5=$("#hopGrid").jqxGrid("getrows"))){return}aa=1;for(a4=0;a4<a5.length;a4++){a6=a5[a4];a3+=toIBU(a6.h_useat,a6.h_form,ak,parseFloat(d.batch_size),parseFloat(a6.h_amount),parseFloat(a6.h_time),parseFloat(a6.h_alpha),d.ibu_method);a2+=toIBU(a6.h_useat,a6.h_form,ak,parseFloat(d.brew_fermenter_volume)+parseFloat(d.brew_fermenter_tcloss),parseFloat(a6.h_amount),parseFloat(a6.h_time),parseFloat(a6.h_alpha),d.ibu_method);aX+=K(parseFloat(a6.h_time),parseFloat(d.batch_size),a6.h_useat,parseFloat(a6.h_amount));U+=h(parseFloat(a6.h_time),parseFloat(d.batch_size),a6.h_useat,parseFloat(a6.h_amount));if((((d.inventory_reduced<=2)&&(a6.h_useat<=4))||((d.inventory_reduced<=6)&&(a6.h_useat==5)))&&(a6.h_inventory<a6.h_amount)){aa=0}}a3=Math.round(a3*10)/10;a2=Math.round(a2*10)/10;aX=Math.round(aX*1000/5)/10;U=Math.round(U*1000/6)/10;if(aX>100){aX=100}if(U>100){U=100}console.log("calcIBUs(): "+a3+"  flavour: "+aX+"  aroma: "+U+"  fermenter:"+a2+" supplies:"+aa);d.est_ibu=a3;$("#est_ibu").val(a3);$("#est_ibu2").val(a3);$("#hop_flavour").jqxProgressBar("val",aX);$("#hop_aroma").jqxProgressBar("val",U);$("#brew_fermenter_ibu").val(a2);aU();G()}function N(a3,a4,a2){var i=a4/a2;if(i>3.5){return 0}if(a3==2){return 0.4}if(a3==1){return 0.62}if(i<=1.4){return 1.4}return 2.33-(0.67*i)}function aB(i,a3,a7){var a5=2.72715,a4=a7/i*1000,a6=Round(a4,1),a2=(d.starter_sg-1)*i*a5;grate=N(a3,a7,a2),ncells=Round(a2*grate,1),totcells=parseFloat(ncells)+a7;console.log("svol:"+i+" start:"+a7+" irate:"+a6+" egrams:"+a2+" grate:"+grate+" ncells:"+ncells);return{svol:i,irate:a6,prate:Round(a4,1),ncells:ncells,totcells:totcells,growf:Round(ncells/a7,2)}}function F(a8,a2,a9){var a7=[20,40,60,80,100,150,200,250,375,500,625,750,875,1000,1250,1500,2000,2500,3000,4000,5000],a3=a7.length,a4=0,a5=0,ba={},a6;if((parseFloat($("#prop1_volume").jqxNumberInput("decimal"))+parseFloat($("#prop2_volume").jqxNumberInput("decimal"))+parseFloat($("#prop3_volume").jqxNumberInput("decimal"))+parseFloat($("#prop4_volume").jqxNumberInput("decimal")))==0){for(a6=1;a6<5;a6++){$("#prop"+a6+"_type").hide();$("#r"+a6+"_pmpt").show();$("#prop"+a6+"_type").val(a8);$("#prop"+a6+"_volume").hide();$("#prop"+a6+"_volume").val(0);$("#prop"+a6+"_irate").hide();$("#prop"+a6+"_ncells").hide();$("#prop"+a6+"_tcells").hide();$("#prop"+a6+"_growf").hide()}if(a2>a9){return}$("#prop1_type").show();$("#r1_pmpt").hide();$("#prop1_volume").show();$("#prop1_irate").show();$("#prop1_ncells").show();$("#prop1_tcells").show();$("#prop1_growf").show();for(a6=a5;a6<=a3;a6++){a5=a6;a4=a7[a5];ba=aB(a4,a8,a2);if(ba.irate<25){a5=a6-1;a4=a7[a5];ba=aB(a4,a8,a2);break}if(ba.totcells>a9||a6==a3){break}}$("#prop1_volume").val(ba.svol/1000);$("#prop1_irate").val(ba.prate);$("#prop1_ncells").val(ba.ncells);$("#prop1_tcells").val(ba.totcells);$("#prop1_growf").val(ba.growf);if(ba.totcells>a9){return}$("#r2_pmpt").hide();$("#prop2_type").val(a8);$("#prop2_type").show();$("#prop2_volume").show();$("#prop2_irate").show();$("#prop2_ncells").show();$("#prop2_tcells").show();$("#prop2_growf").show();for(a6=a5;a6<=a3;a6++){a5=a6;a4=a7[a5];ba=aB(a4,a8,$("#prop1_tcells").val());if(ba.irate<25){a5=a6-1;a4=a7[a5];ba=aB(a4,a8,$("#prop1_tcells").val());break}if(ba.totcells>a9||a6==a3){break}}$("#prop2_volume").val(ba.svol/1000);$("#prop2_irate").val(ba.prate);$("#prop2_ncells").val(ba.ncells);$("#prop2_tcells").val(ba.totcells);$("#prop2_growf").val(ba.growf);if(ba.totcells>a9){return}$("#r3_pmpt").hide();$("#prop3_type").val(a8);$("#prop3_type").show();$("#prop3_volume").show();$("#prop3_irate").show();$("#prop3_ncells").show();$("#prop3_tcells").show();$("#prop3_growf").show();for(a6=a5;a6<=a3;a6++){a5=a6;a4=a7[a5];ba=aB(a4,a8,$("#prop2_tcells").val());if(ba.irate<25){a5=a6-1;a4=a7[a5];ba=aB(a4,a8,$("#prop2_tcells").val());break}if(ba.totcells>a9||a6==a3){break}}$("#prop3_volume").val(ba.svol/1000);$("#prop3_irate").val(ba.prate);$("#prop3_ncells").val(ba.ncells);$("#prop3_tcells").val(ba.totcells);$("#prop3_growf").val(ba.growf);if(ba.totcells>a9){return}$("#r4_pmpt").hide();$("#prop4_type").val(a8);$("#prop4_type").show();$("#prop4_volume").show();$("#prop4_irate").show();$("#prop4_ncells").show();$("#prop4_tcells").show();$("#prop4_growf").show();for(a6=a5;a6<=a3;a6++){a5=a6;a4=a7[a5];ba=aB(a4,a8,$("#prop3_tcells").val());if(ba.totcells>a9||a6==a3){$("#prop4_volume").val(ba.svol/1000);$("#prop4_irate").val(ba.prate);$("#prop4_ncells").val(ba.ncells);$("#prop4_tcells").val(ba.totcells);$("#prop4_growf").val(ba.growf);return}}}else{if(d.prop1_volume>0){$("#r1_pmpt").hide();$("#prop1_type").show();$("#prop1_volume").show();$("#prop1_irate").show();$("#prop1_ncells").show();$("#prop1_tcells").show();$("#prop1_growf").show();ba=aB($("#prop1_volume").val()*1000,d.prop1_type,a2);$("#prop1_irate").val(ba.prate);$("#prop1_ncells").val(ba.ncells);$("#prop1_tcells").val(ba.totcells);$("#prop1_growf").val(ba.growf)}if(d.prop2_volume>0){$("#r2_pmpt").hide();$("#prop2_type").show();$("#prop2_volume").show();$("#prop2_irate").show();$("#prop2_ncells").show();$("#prop2_tcells").show();$("#prop2_growf").show();ba=aB($("#prop2_volume").val()*1000,d.prop2_type,$("#prop1_tcells").val());$("#prop2_irate").val(ba.prate);$("#prop2_ncells").val(ba.ncells);$("#prop2_tcells").val(ba.totcells);$("#prop2_growf").val(ba.growf)}if(d.prop3_volume>0){$("#r3_pmpt").hide();$("#prop3_type").show();$("#prop3_volume").show();$("#prop3_irate").show();$("#prop3_ncells").show();$("#prop3_tcells").show();$("#prop3_growf").show();ba=aB($("#prop3_volume").val()*1000,d.prop3_type,$("#prop2_tcells").val());$("#prop3_irate").val(ba.prate);$("#prop3_ncells").val(ba.ncells);$("#prop3_tcells").val(ba.totcells);$("#prop3_growf").val(ba.growf)}if(d.prop4_volume>0){$("#r4_pmpt").hide();$("#prop4_type").show();$("#prop4_volume").show();$("#prop4_irate").show();$("#prop4_ncells").show();$("#prop4_tcells").show();$("#prop4_growf").show();ba=aB($("#prop4_volume").val()*1000,d.prop4_type,$("#prop3_tcells").val());$("#prop4_irate").val(ba.prate);$("#prop4_ncells").val(ba.ncells);$("#prop4_tcells").val(ba.totcells);$("#prop4_growf").val(ba.growf)}}}function X(){var ba,a3,a9,a5,a8,a2,a7,a6,a4=d.brew_fermenter_sg;if(a4<=1.0001&&d.fg>1){a4=d.fg}else{if(a4<=1.0001){a4=d.est_og}}ba=sg_to_plato(a4);a3=d.brew_fermenter_volume;if(a3>0){if(d.brew_fermenter_extrawater>0){a3+=d.brew_fermenter_extrawater}}else{a3=d.batch_size-d.eq_trub_chiller_loss}$("#yeast_cells").val(Z);if(!(a9=$("#yeastGrid").jqxGrid("getrows"))){return}a5=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(a5==0){return}for(a2=0;a2<a5;a2++){a8=$("#yeastGrid").jqxGrid("getrowdata",a2);if(a8.y_use==0){x=0.75;if(d.est_og>1.06){x=1}if(a8.y_type==0){x*=2}if(a8.y_form==1){}else{}}}a7=x*a3*ba;console.log("calcYeast() pitchrate:"+x+" start:"+Z+" needed:"+a7+" volume:"+a3);$("#need_cells").val(a7);a6=Z;if(d.starter_enable){F(d.starter_type,Z,a7);for(a2=1;a2<5;a2++){$("#r"+a2+"_irate").html("");$("#r"+a2+"_growf").html("");$("#r"+a2+"_tcells").html("");if(parseFloat($("#prop"+a2+"_volume").val())>0){if((parseFloat($("#prop"+a2+"_irate").val())<25)||(parseFloat($("#prop"+a2+"_irate").val())>100)){$("#r"+a2+"_irate").html("<img src='images/dialog-error.png'>")}else{$("#r"+a2+"_irate").html("<img src='images/dialog-ok-apply.png'>")}if(parseFloat($("#prop"+a2+"_growf").val())<1){$("#r"+a2+"_growf").html("<img src='images/dialog-error.png'>")}if(($("#prop"+a2+"_type").val()>0)&&(parseFloat($("#prop"+a2+"_growf").val())>3)){$("#r"+a2+"_growf").html("<img src='images/dialog-error.png'>")}if(parseFloat($("#prop"+a2+"_tcells").val())>a7){$("#r"+a2+"_tcells").html("<img src='images/dialog-ok-apply.png'>")}a6=parseFloat($("#prop"+a2+"_tcells").val())}else{$("#r"+a2+"_irate").html("")}}}$("#plato_cells").val(parseFloat(a6/(a3*ba)))}function ai(a4){console.log("adjustHops("+a4+")");var a5,a3,a2,a6=$("#hopGrid").jqxGrid("getdatainformation").rowscount;if(a6==0){return}for(a3=0;a3<a6;a3++){a5=$("#hopGrid").jqxGrid("getrowdata",a3);a2=a5.h_amount*a4;$("#hopGrid").jqxGrid("setcellvalue",a3,"h_amount",a2)}}function aF(){ah=1;var a3,a2,a4=$("#miscGrid").jqxGrid("getdatainformation").rowscount;if(a4==0){return}for(a2=0;a2<a4;a2++){a3=$("#miscGrid").jqxGrid("getrowdata",a2);if((((d.inventory_reduced<=2)&&(a3.m_use_use<=2))||((d.inventory_reduced<=3)&&(a3.m_use_use==3))||((d.inventory_reduced<=5)&&(a3.m_use_use==4))||((d.inventory_reduced<=6)&&(a3.m_use_use==5)))&&(a3.m_inventory<a3.m_amount)){ah=0}}G()}function a1(a4){console.log("adjustMiscs("+a4+")");var a5,a3,a2,a6=$("#miscGrid").jqxGrid("getdatainformation").rowscount;if(a6==0){return}for(a3=0;a3<a6;a3++){a5=$("#miscGrid").jqxGrid("getrowdata",a3);a2=a5.m_amount*a4;$("#miscGrid").jqxGrid("setcellvalue",a3,"m_amount",a2);switch(a5.m_name){case"CaCl2":$("#wa_cacl2").val(a5.m_amount*1000);break;case"CaSO4":$("#wa_caso4").val(a5.m_amount*1000);break;case"MgSO4":$("#wa_mgso4").val(a5.m_amount*1000);break;case"NaCl":$("#wa_nacl").val(a5.m_amount*1000);break;case"Melkzuur":case"Zoutzuur":case"Fosforzuur":case"Zwavelzuur":$("#wa_acid").val(a5.m_amount*1000);break;case"NaHCO3":case"Na2CO3":case"CaCO3":case"Ca(OH)2":$("#wa_base").val(a5.m_amount*1000);break}}}function aO(a4){console.log("adjustYeasts("+a4+")");var a5,a3,a2,a6=$("#yeastGrid").jqxGrid("getdatainformation").rowscount;if(a6==0){return}for(a3=0;a3<a6;a3++){a5=$("#yeastGrid").jqxGrid("getrowdata",a3);if(a5.y_form==1){a2=a5.y_amount*a4;$("#yeastGrid").jqxGrid("setcellvalue",a3,"y_amount",a2)}}X()}function at(a4){console.log("adjustWaters("+a4+")");var a3,a5,a2,a6=$("#mashGrid").jqxGrid("getdatainformation").rowscount;if(a6==0){return}C=0;for(a2=0;a2<a6;a2++){a5=$("#mashGrid").jqxGrid("getrowdata",a2);if(a5.step_type==0){a3=Round(a5.step_infuse_amount*a4,1);$("#mashGrid").jqxGrid("setcellvalue",a2,"step_infuse_amount",a3);C+=a3}}if(d.w2_amount==0){d.w1_amount=C;$("#w1_amount").val(C)}else{d.w1_amount=(d.w1_amount/(d.w1_amount+d.w2_amount))*C;d.w2_amount=(d.w2_amount/(d.w1_amount+d.w2_amount))*C;$("#w1_amount").val(d.w1_amount);$("#w2_amount").val(d.w2_amount)}$("#wg_amount").val(C)}function aZ(){var a2,i;if(parseFloat($("#brew_mash_sg").jqxNumberInput("decimal"))<1.002){return}a2=sg_to_plato(a0);i=sg_to_plato(parseFloat($("#brew_mash_sg").jqxNumberInput("decimal")));if(a2>0.5){$("#brew_mash_efficiency").val(100*i/a2)}else{$("#brew_mash_efficiency").val(0)}}function w(){var a3=0,a6={},a5,a7,a4,a2=0;if(!(a6=$("#fermentableGrid").jqxGrid("getrows"))){return}for(a5=0;a5<a6.length;a5++){a7=a6[a5];if(a7.f_added==0){a3+=a7.f_amount*(a7.f_yield/100)*(1-a7.f_moisture/100)}}a4=sg_to_plato(d.brew_preboil_sg)*(d.brew_preboil_volume/1.04)*d.brew_preboil_sg*10/1000;if(a3>0){a2=Round((a4/a3*100),1)}if(a2<0){a2=0}$("#brew_preboil_efficiency").val(a2)}function R(){var a4=0,a3=0,a7={},a6,a8,a5,a2=0;if(!(a7=$("#fermentableGrid").jqxGrid("getrows"))){return}for(a6=0;a6<a7.length;a6++){a8=a7[a6];if(a8.f_added==0){a4+=a8.f_amount*(a8.f_yield/100)*(1-a8.f_moisture/100)}else{if(a8.f_added==1){a3+=a8.f_amount*(a8.f_yield/100)*(1-a8.f_moisture/100)}}}a5=sg_to_plato(d.brew_aboil_sg)*(d.brew_aboil_volume/1.04)*d.brew_aboil_sg*10/1000;a5-=a3;if(a4>0){a2=Round((a5/a4*100),1)}if(a2<0){a2=0}d.brew_aboil_efficiency=a2;$("#brew_aboil_efficiency").val(a2)}function Q(){var i=(d.est_og-1)*1000;if(i>0){return d.est_ibu/i}else{return 0.5}}function k(){var i=Q();return(-1.2*i+1.4)}function aA(a2,a4){var a8,a3,a9,a7=false,a5,a6=$("#miscGrid").jqxGrid("getrows");if(a4==0){for(a3=0;a3<a6.length;a3++){a8=a6[a3];if(a8.m_name==a2){a9=$("#miscGrid").jqxGrid("getrowid",a3);$("#miscGrid").jqxGrid("deleterow",a9)}}}else{for(a3=0;a3<a6.length;a3++){a8=a6[a3];if(a8.m_name==a2){a7=true;$("#miscGrid").jqxGrid("setcellvalue",a3,"m_amount",a4/1000);break}}if(!a7){a5=new $.jqx.dataAdapter(miscInvSource,{loadComplete:function(){var ba,bc,bd={},bb=a5.records;for(bc=0;bc<bb.length;bc++){ba=bb[bc];if(ba.name==a2){bd.m_name=ba.name;bd.m_amount=a4/1000;bd.m_cost=ba.cost;bd.m_type=ba.type;bd.m_use_use=ba.use_use;bd.m_time=0;bd.m_amount_is_weight=ba.amount_is_weight;bd.m_inventory=ba.inventory;bd.m_avail=1;$("#miscGrid").jqxGrid("addrow",null,bd)}}}});a5.dataBind();return}}}function m(a2,i){if((i=="laag")||(i=="hoog")){$("#wr_"+a2).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+i+"</span>")}else{$("#wr_"+a2).html("<img src='images/dialog-ok-apply.png'>")}}function aP(a4,a3,a2,i){if((a4+a3)>0){return((a4*a2)+(a3*i))/(a4+a3)}return 0}function aq(a3,a2,i){return a3-(a2/1.4+i/1.7)}function z(a2){var i=Math.pow(10,-a2);return 100*az*ax/(i*i+i*az+az*ax)}function ay(a2){var i=Math.pow(10,-a2);return 100*az*i/(i*i+i*az+az*ax)}function aw(i){return(-2*z(i)-ay(i))}function J(a2){var a5=aw(4.3),a3=aw(parseFloat($("#wg_ph").jqxNumberInput("decimal"))),i=aw(a2),a7=-a5+a3,a6=parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal"))/50/a7,a4=-i+a3;return a6*a4}function al(a2){var a3,a4,i=parseFloat($("#wg_calcium").jqxNumberInput("decimal"))/(A/2);a3=parseFloat($("#wg_magnesium").jqxNumberInput("decimal"))/(ap/2);a4=J(a2);return a4-(i/3.5+a3/7)}function L(a4){var a7,a5,a6,a3,a2,a8=al(a4)*parseFloat($("#wg_amount").jqxNumberInput("decimal"));a7=$("#fermentableGrid").jqxGrid("getrows");for(a5=0;a5<a7.length;a5++){row=a7[a5];if(row.f_added==0&&row.f_graintype!=6){a6=0;if((row.f_di_ph!=5.7)&&((row.f_acid_to_ph_57<-0.1)||(row.f_acid_to_ph_57>0.1))){a6=row.f_acid_to_ph_57/(row.f_di_ph-5.7)}else{a3=row.f_color;switch(row.f_graintype){case 0:case 3:case 5:a6=0.014*a3-34.192;break;case 2:a6=-0.0597*a3-32.457;break;case 1:a6=0.0107*a3-54.768;break;case 4:a6=-149;break}}a2=a6*(a4-row.f_di_ph);a8+=a2*row.f_amount}}return a8}function aM(){var a5=0,a3=5.4,a2=0.001,a4=0.1,i=L(a3);while(((i<-a4)||(i>a4))&&(a5<2000)){a5++;if(i<-a4){a3-=a2}else{if(i>a4){a3+=a2}}i=L(a3)}console.log("MashpH() n: "+a5+" pH: "+a3);return a3}function t(i){switch(i){case 0:return{pK1:3.86,pK2:20,pK3:20,MolWt:90.08,AcidSG:1214,AcidPrc:0.88};case 1:return{pK1:-7,pK2:20,pK3:20,MolWt:36.46,AcidSG:1142,AcidPrc:0.28};case 2:return{pK1:2.12,pK2:7.2,pK3:12.44,MolWt:98,AcidSG:1170,AcidPrc:0.25};case 3:return{pK1:-1,pK2:1.92,pK3:20,MolWt:98.07,AcidSG:1700,AcidPrc:0.93}}}function P(){console.log("calcWater()");var bj=0,by=0,a9=0,bk=0,ba=0,bv=0,bb=0,bt=0,bd=0,bm=0,bE=0,bC=0,bz=0,bx,bn,bf,a4,a3,i,be,a6,a5,bp,bh,a8,bq,bi,bw,bo,bg,br,bD,bs,bc,bA,bl,bB,a7,bu,a2;if(d.w1_name==""){return}if(d.w2_name!=""){bj=d.w1_amount+d.w2_amount;by=aP(d.w1_amount,d.w2_amount,d.w1_calcium,d.w2_calcium);a9=aP(d.w1_amount,d.w2_amount,d.w1_magnesium,d.w2_magnesium);bk=aP(d.w1_amount,d.w2_amount,d.w1_sodium,d.w2_sodium);bb=aP(d.w1_amount,d.w2_amount,d.w1_chloride,d.w2_chloride);bt=aP(d.w1_amount,d.w2_amount,d.w1_sulfate,d.w2_sulfate);ba=aP(d.w1_amount,d.w2_amount,d.w1_total_alkalinity,d.w2_total_alkalinity);bd=-Math.log10(((Math.pow(10,-d.w1_ph)*d.w1_amount)+(Math.pow(10,-d.w2_ph)*d.w2_amount))/bj)}else{bj=d.w1_amount;by=d.w1_calcium;a9=d.w1_magnesium;bk=d.w1_sodium;bb=d.w1_chloride;bt=d.w1_sulfate;ba=d.w1_total_alkalinity;bd=d.w1_ph}$("#wg_amount").val(bj);bA=by;$("#wg_calcium").val(Math.round(by*10)/10);$("#wg_magnesium").val(Math.round(a9*10)/10);bl=bk;$("#wg_sodium").val(Math.round(bk*10)/10);bB=ba;$("#wg_total_alkalinity").val(Math.round(ba*10)/10);a7=bb;$("#wg_chloride").val(Math.round(bb*10)/10);bu=bt;$("#wg_sulfate").val(Math.round(bt*10)/10);$("#wg_ph").val(Round(bd,1));$("#wb_ph").val(Round(aM(),1));$("#est_mash_ph").val(Round(aM(),1));bv=ba*1.22;a2=bv;bm=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*A/S+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*A/am;by+=1000*bm/bj;bm=parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*ap/aJ;a9+=1000*bm/bj;bm=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ac/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ac/aE;bk+=1000*bm/bj;bm=parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*aH/am+parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*aH/aJ;bt+=1000*bm/bj;bm=2*parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*q/S+parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*q/b;bb+=1000*bm/bj;if($("#wa_acid_name").val()<0||$("#wa_acid_name").val()>3){$("#wa_acid_name").val(0);d.wa_acid_name=0}if(af==""){af=AcidTypeData[$("#wa_acid_name").val()].nl}if($("#wa_base_name").val()<0||$("#wa_base_name").val()>3){$("#wa_base_name").val(0);d.wa_base_name=0}if(aT==""){aT=BaseTypeData[$("#wa_base_name").val()].nl}bx=d.wa_acid_name;bn=d.wa_base_name;bf=t(bx);a4=bf.pK1;a3=bf.pK2;i=bf.pK3;be=bf.MolWt;a6=bf.AcidSG;a5=bf.AcidPrc;if(d.calc_acid){bC=parseFloat(d.mash_ph);bz=L(bC);console.log("calc_acid tgt: "+bC+" protonDeficit: "+bz);if(bz>0){$("#wa_base").val(0);aA(aT,0);bE=CalcFrac(bC,a4,a3,i);Acid=bz/bE;Acid*=be;Acidmg=Acid;Acid=Acid/a6;if(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))==0){$("#wa_acid_perc").val(a5)}Acid=Acid*a5/(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))/100);console.log("Final ml: "+Acid);$("#wa_acid").val(Round(Acid,2));aA(AcidTypeData[bx].nl,Round(Acid,2));bv=bv-bz*bE/bj;ba=bv*50/61}else{if(bz<0){$("#wa_acid").val(0);aA(af,0);bp=Math.pow(10,(bC-6.38));bh=Math.pow(10,(bC-10.38));a8=1/(1+bp+bp*bh);bq=a8*bp;bi=bq*bh;switch(bn){case 0:bm=-bz/(a8-bi);bm=bm*aE/1000;$("#wa_base").val(Round(bm,2));aA("NaHCO3",Round(bm,2));if(bj>0){bm=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ac/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ac/aE;bm=1000*bm/bj;bk=bl+bm;bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/aE;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 1:bm=-bz/(2*a8+bq);bm=bm*y/1000;$("#wa_base").val(Round(bm,2));aA("Na2CO3",Round(bm,2));if(bj>0){bm=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ac/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*2*ac/y;bm=1000*bm/bj;bk=bl+bm;bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/y;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 2:bm=-bz*(a8-bi);bm=bm*g/1000;bm=3*bm;$("#wa_base").val(Round(bm,2));aA("CaCO3",Round(bm,2));if(bj>0){bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))/3*r/g;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*A/S+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*A/am+parseFloat($("#wa_base").jqxNumberInput("decimal"))*A/g;bm=1000*bm/bj;by=bA+bm;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium)}break;case 3:bm=-bz/19.3;$("#wa_base").val(Round(bm,2));aA("Ca(OH)2",Round(bm,2));if(bj>0){bm=-bz/bj;ba=bB+bm;bv=ba*61/50;bm=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*A/S+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*A/am+parseFloat($("#wa_base").jqxNumberInput("decimal"))*A/aI;bm=1000*bm/bj;by=bA+bm;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium)}break}}}bd=bC;$("#wb_ph").val(Round(bd,1));$("#est_mash_ph").val(Round(bd,1))}else{console.log("calc_acid no");if(parseFloat($("#wa_base").jqxNumberInput("decimal"))>0){if(bj>0){switch(bn){case 0:bm=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ac/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*ac/aE;bm=1000*bm/bj;bk=bl+bm;bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/aE;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium);break;case 1:bm=parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*ac/b+parseFloat($("#wa_base").jqxNumberInput("decimal"))*2*ac/y;bm=1000*bm/bj;bk=bl+bm;bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))*r/y;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium);break;case 2:bm=parseFloat($("#wa_base").jqxNumberInput("decimal"))/3*r/g;bm=1000*bm/bj;bv=a2+bm;ba=bv*50/61;bm=aq(wb_total_alkalinity,wb_calcium,wb_magnesium);bm=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*A/S+parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*A/am+parseFloat($("#wa_base").jqxNumberInput("decimal"))*A/g;bm=1000*bm/bj;by=bA+bm;break}}}bC=parseFloat(d.mash_ph);pHa=aM();if(parseFloat($("#wa_acid").jqxNumberInput("decimal"))>0){console.log("TpH: "+bC+" water: "+pHa);Acid=parseFloat($("#wa_acid").jqxNumberInput("decimal"));if(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))==0){$("#wa_acid_perc").val(a5)}Acid=Acid/a5*(parseFloat($("#wa_acid_perc").jqxNumberInput("decimal"))/100);Acid*=a6;Acid/=be;Acidmg=Acid;bE=CalcFrac(pHa,a4,a3,i);bz=Acid*bE;bw=0.001;bo=0.1;bg=L(pHa);br=0;while(((bg<(bz-bo))||(bg>(bz+bo)))&&(br<2000)){br++;if(bg<(bz-bo)){pHa-=bw}else{if(bg>(bz+bo)){pHa+=bw}}bE=CalcFrac(pHa,a4,a3,i);bz=Acid*bE;bg=L(pHa)}console.log("n: "+br+" pd: "+bg+" protonDeficit: "+bz+" frac: "+bE+" pHa: "+pHa);bm=a2-bz*bE/bj;bv=bm;ba=bm*50/61;bd=pHa;$("#wb_ph").val(Round(bd,1));$("#est_mash_ph").val(Round(bd,1))}}if((bx==3)&&(bj>0)){bm=parseFloat($("#wa_caso4").jqxNumberInput("decimal"))*aH/am+parseFloat($("#wa_mgso4").jqxNumberInput("decimal"))*aH/aJ+Acidmg/1000*aH/(aH+2);bm=1000*bm/bj;bt=bu+bm}else{if((bx==1)&&(bj>0)){bm=parseFloat($("#wa_cacl2").jqxNumberInput("decimal"))*q/S+parseFloat($("#wa_nacl").jqxNumberInput("decimal"))*q/b+Acidmg/1000*q/(q+1);bm=1000*bm/bj;bb=a7+bm}}$("#tgt_bu").val(Round(Q(),2));if(Q()<0.32){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Zeer moutig en zoet</span>")}else{if(Q()<0.43){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Moutig, zoet</span>")}else{if(Q()<0.52){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Evenwichtig</span>")}else{if(Q()<0.63){$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Licht hoppig, bitter</span>")}else{$("#wr_bu").html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Extra hoppig, zeer bitter</span>")}}}}$("#tgt_cl_so4").val(Round(k(),1));if(bt>0){bm=bb/bt}else{bm=10}$("#got_cl_so4").val(Round(bm,1));bD=0.8*k();bs=1.2*k();bc="normaal";if(bm<bD){bc="laag"}else{if(bm>bs){bc="hoog"}}m("cl_so4",bc);$("#wb_calcium").val(Round(by,1));$("#wb_magnesium").val(Round(a9,1));$("#wb_sodium").val(Round(bk,1));$("#wb_sulfate").val(Round(bt,1));$("#wb_chloride").val(Round(bb,1));$("#wb_total_alkalinity").val(Round(ba,1));if(by<40){m("calcium","laag")}else{if(by>150){m("calcium","hoog")}else{m("calcium","normaal")}}if(a9>=0&&a9<=30){m("magnesium","normaal")}else{m("magnesium","hoog")}if(bk<=150){m("sodium","normaal")}else{m("sodium","hoog")}if(bb<=50){m("chloride","laag")}else{if(bb<=100){m("chloride","normaal")}else{m("chloride","hoog")}}if(bt<=50){m("sulfate","laag")}else{if(bt<=350){m("sulfate","normaal")}else{m("sulfate","hoog")}}if(bd<5.2){m("ph","laag")}else{if(bd>5.6){m("ph","hoog")}else{m("ph","normaal")}}j();aF();G()}function j(){var a4,bg,be,bm,bl,bp,bj,bi,bk,a7,bu,bs,a2,a6,a9,bf,bq,bo,br,bh,a3,a8,bd,bc,bb,ba,bt,a5,i,bn;a4=d.sparge_ph;bg=d.w1_ph;be=d.w1_total_alkalinity;if(d.sparge_source==1){if(d.w2_ph>0){bg=d.w2_ph;be=d.w2_total_alkalinity}else{d.sparge_source=0;$("#sparge_source").val(0)}}else{if(d.sparge_source==2){if(d.w2_ph>0){bg=parseFloat($("#wg_ph").jqxNumberInput("decimal"));be=parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal"))}else{d.sparge_source=0;$("#sparge_source").val(0)}}}bm=Math.pow(10,bg-6.38);bl=Math.pow(10,bg-10.373);bp=1+bm+bm*bl;bj=1/bp;bi=bm*bl/bp;bk=Math.pow(10,4.3-6.38);a7=Math.pow(10,4.3-10.373);bu=1+bk+bk*a7;bs=1/bu;a2=bk*a7/bu;a6=be/50;a9=(a6-1000*(Math.pow(10,-4.3)-Math.pow(10,-bg)))/((bs-bj)+(bi-a2));bf=Math.pow(10,a4-6.38);bq=Math.pow(10,a4-10.373);bo=1+bf+bf*bq;br=1/bo;bh=bf*bq/bo;a3=a9*((br-bj)+(bi-bh))+Math.pow(10,-a4)-Math.pow(10,-bg);a3+=0.01;if(d.sparge_acid_type<0||d.sparge_acid_type>3){d.sparge_acid_type=0;$("#sparge_acid_type").val(0)}a8=d.sparge_acid_type;bd=t(a8);bc=bd.pK1;bb=bd.pK2;ba=bd.pK3;bt=bd.MolWt;a5=bd.AcidSG;i=bd.AcidPrc;bn=CalcFrac(a4,bc,bb,ba);a3/=bn;a3*=bt;a3=a3/a5;bj=d.sparge_acid_perc;if(bj<=0.1){bj=i}a3=a3*i/(bj/100);a3*=d.sparge_volume;a3=Round(a3,2);d.sparge_acid_amount=a3/1000;$("#sparge_acid_amount").val(a3)}function M(){var a2,i,a4,a3;if(d.brew_fermenter_sg<1.02){return}if((d.primary_end_sg>0.99)&&(d.primary_end_sg<d.brew_fermenter_sg)){a2=Round(100*(d.brew_fermenter_sg-d.primary_end_sg)/(d.brew_fermenter_sg-1),1);$("#primary_svg").val(a2);if((d.secondary_end_sg>0.99)&&(d.secondary_end_sg<d.brew_fermenter_sg)){i=Round(100*(d.brew_fermenter_sg-d.secondary_end_sg)/(d.brew_fermenter_sg-1),1);$("#secondary_svg").val(i);if((d.fg>0.99)&&(d.fg<d.brew_fermenter_sg)){a4=Round(100*(d.brew_fermenter_sg-d.fg)/(d.brew_fermenter_sg-1),1);$("#final_svg").val(a4);a3=Round(abvol(d.brew_fermenter_sg,d.fg),2);$("#final_abv").val(a3)}}}}function an(a2,i){var a3=i*1.8+32;return 3.0378-0.050062*a3+0.00026555*a3*a3}function V(a2,i,a4){var a3=a4*(a2-an(a2,i))/0.286;if(a3<0){a3=0}return Round(a3,3)}function o(a2,a5,a4){var a3,i=a2-an(a2,a5);if(i<0){return 0}a3=-1.09145427669121+0.00800006989646477*a4+0.000260276315484684*a4*a4+0.0215142075945119*a4*i+0.674996600795854*i+-0.00471757220150754*i*i;if(a3<0){a3=0}a3=a3*1.01325;return Round(a3,1)}function Y(a2,i){return(a2-(-0.000005594056*Math.pow(i,4)+0.000144357886*Math.pow(i,3)+0.000362999168*i*i-0.064872987645*i+1.641145175049))/(0.00000498031*Math.pow(i,4)-0.00024358267*Math.pow(i,3)+0.00385867329*i*i-0.05671206825*i+1.53801423376)}function aR(){var a9,a6,ba,a8,a4,be,bb,a2,bg,a5,bh,bd,a3,a7,bc,bf;a9=d.secondary_temp;if(a9<1){a9=d.primary_end_temp}if(a9<1){a9=18}if(d.fg==0){a6=abvol(d.brew_fermenter_sg,parseFloat($("#est_fg").jqxNumberInput("decimal")))}else{a6=abvol(d.brew_fermenter_sg,d.fg)}ba=d.package_volume-(a6*d.package_volume)/100;a8=d.package_volume-ba;be=d.package_infuse_amount-(d.package_infuse_abv*d.package_infuse_amount)/100;bb=d.package_infuse_amount-be;bg=a8+bb;a2=ba+be;a6=Round(bg/(a2+bg)*100,2);d.package_abv=a6;$("#package_abv").val(a6);if(!(rows=$("#fermentableGrid").jqxGrid("getrows"))){return}d.bottle_priming_amount=0;d.bottle_priming_total=0;for(a5=0;a5<rows.length;a5++){bh=rows[a5];if(bh.f_added==4){bd=1/((bh.f_yield/100)*(1-bh.f_moisture/100));d.bottle_priming_amount=V(d.bottle_carbonation,a9,bd);d.bottle_priming_total=Round(d.bottle_amount*d.bottle_priming_amount,2);$("#fermentableGrid").jqxGrid("setcellvalue",a5,"f_amount",d.bottle_priming_total/1000)}}$("#bottle_priming_amount").val(Round(d.bottle_priming_amount,1));$("#bottle_priming_total").val(d.bottle_priming_total);a7=a6+d.bottle_priming_amount*0.47/7.907;a3=d.bottle_amount-(a7*d.bottle_amount)/100;bg=d.bottle_amount-a3;a2=a3+d.bottle_priming_water;a4=Round(bg/(a2+bg)*100,2);$("#bottle_abv").val(a4);$("#bottle_pressure").val(o(d.bottle_carbonation,a9,d.bottle_carbonation_temp));bc=Y(d.keg_carbonation,d.keg_carbonation_temp);if(bc<0){bc=0}d.keg_pressure=bc;$("#keg_pressure").val(Round(bc,1));d.keg_priming_amount=0;d.keg_priming_total=0;if(!d.keg_forced_carb){for(a5=0;a5<rows.length;a5++){bh=rows[a5];if(bh.f_added==5){bd=1/((bh.f_yield/100)*(1-bh.f_moisture/100));d.keg_priming_amount=V(d.keg_carbonation,a9,bd);d.keg_priming_total=Round(d.keg_amount*d.keg_priming_amount,2);$("#fermentableGrid").jqxGrid("setcellvalue",a5,"f_amount",d.keg_priming_total/1000)}}$("#keg_priming_amount").val(Round(d.keg_priming_amount,1));$("#keg_priming_total").val(d.keg_priming_total);a7=a6+d.keg_priming_amount*0.47/7.907;a3=d.keg_amount-(a7*d.keg_amount)/100;bg=d.keg_amount-a3;a2=a3+d.keg_priming_water;bf=Round(bg/(a2+bg)*100,2);$("#keg_abv").val(bf)}else{$("#keg_priming_amount").val(0);$("#keg_priming_total").val(0);$("#keg_abv").val(a6)}}function aU(){var a7=d.stage,a6,a4,a2,a8,a5,i,a3;if(a7==0&&d.est_og>1.005&&d.est_color>3&&d.est_ibu>3){a7=1}if(a7==1&&parseFloat($("#brew_date_start").val())>2000){a7=2}if(a7==2&&($("#brew_date_start").val()=="")){a7=1}if(a7==2&&parseFloat($("#brew_date_end").val())>2000){a7=3}if(a7==3&&parseFloat($("#primary_end_date").val())>2000){a7=4}if(a7==4&&parseFloat($("#secondary_end_date").val())>2000){a7=5}if(a7==5&&parseFloat($("#package_date").val())>2000){a7=6}if(a7>=6&&a7<9){a6=new Date();a2=$("#package_date").val();a2=a2.split("-");a4=new Date(a6.getFullYear(),a6.getMonth(),a6.getDate());a2=new Date(a2[0],a2[1]-1,a2[2]);a8=parseInt(a4.getTime()/1000);a5=parseInt(a2.getTime()/1000);i=a8-a5;a3=i/60/60/24;if(a3>0){if(a3>=42){a7=9}else{if(a3>=14){a7=8}else{a7=7}}}}if(a7==9&&parseFloat($("#taste_date").val())>2000){a7=10}if(a7!=d.stage){console.log("calcStage() old: "+d.stage+" new: "+a7);d.stage=a7}$("#stage").val(StageData[d.stage].nl);if(d.stage>=10){$("#locked").jqxCheckBox({disabled:false})}if(d.stage>1){$("#equipmentSelect").jqxDropDownList({disabled:true});$("#Delete").jqxButton({disabled:true})}if(d.stage<1){$("#jqxTabs").jqxTabs("disableAt",8)}else{$("#jqxTabs").jqxTabs("enableAt",8)}if(d.stage<3){$("#jqxTabs").jqxTabs("disableAt",9)}else{$("#jqxTabs").jqxTabs("enableAt",9);$("#name").jqxInput({disabled:true});$("#code").jqxInput({disabled:true});$("#batch_size").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#boil_size").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#boil_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#efficiency").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#est_og").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#type").jqxDropDownList({disabled:true});$("#styleSelect").jqxDropDownList({disabled:true});$("#color_method").jqxDropDownList({disabled:true});$("#ibu_method").jqxDropDownList({disabled:true});$("#mash_select").jqxDropDownList({disabled:true});$("#w1_name").jqxDropDownList({disabled:true});$("#w2_name").jqxDropDownList({disabled:true});$("#w2_amount").jqxNumberInput({readOnly:true});$("#pr_name").jqxDropDownList({disabled:true});$("#wa_cacl2").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_caso4").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_mgso4").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_nacl").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#mash_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#calc_acid").jqxCheckBox({disabled:true});$("#wa_base_name").jqxDropDownList({disabled:true});$("#wa_base").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_acid_name").jqxDropDownList({disabled:true});$("#wa_acid").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wa_acid_perc").jqxNumberInput({spinButtons:false,readOnly:true,width:70});$("#sparge_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#sparge_source").jqxDropDownList({disabled:true});$("#sparge_acid_type").jqxDropDownList({disabled:true});$("#sparge_acid_perc").jqxNumberInput({spinButtons:false,readOnly:true,width:false});$("#starter_enable").jqxCheckBox({disabled:true});$("#starter_type").jqxDropDownList({disabled:true});$("#starter_try").jqxButton({disabled:true});$("#starter_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#starter_viability").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage>3){$("#brew_date_start").jqxDateTimeInput({disabled:true});$("#brew_date_end").jqxDateTimeInput({disabled:true});$("#brew_mash_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_mash_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_preboil_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aboil_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool9").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_to").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool7").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_method").jqxDropDownList({disabled:true});$("#brew_whirlpool6").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_cooling_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_sparge_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_whirlpool2").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_type").jqxDropDownList({disabled:true});$("#brew_fermenter_tcloss").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_fermenter_extrawater").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#brew_aeration_speed").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage==5){$("#package_date").jqxDateTimeInput({disabled:false})}else{$("#package_date").jqxDateTimeInput({disabled:true})}if(d.stage>=5){$("#primary_start_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_max_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_brix").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#primary_end_date").jqxDateTimeInput({disabled:true})}if(d.stage>=6){$("#secondary_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#secondary_end_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#secondary_end_date").jqxDateTimeInput({disabled:true});$("#tertiary_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#fg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#final_brix").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_date").jqxDateTimeInput({disabled:true});$("#package_volume").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_abv").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#package_infuse_notes").jqxInput({disabled:true});$("#package_ph").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_priming_water").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_priming_water").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_amount").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_carbonation").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_carbonation").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#bottle_priming_sugar").jqxDropDownList({disabled:true});$("#keg_priming_sugar").jqxDropDownList({disabled:true});$("#keg_forced_carb").jqxCheckBox({disabled:true});$("#bottle_carbonation_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#keg_carbonation_temp").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}if(d.stage<8){$("#jqxTabs").jqxTabs("disableAt",11)}else{$("#jqxTabs").jqxTabs("enableAt",11)}if(d.stage==11){$("#taste_date").jqxDateTimeInput({disabled:true});$("#taste_rate").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#taste_color").jqxInput({disabled:true});$("#taste_transparency").jqxInput({disabled:true});$("#taste_head").jqxInput({disabled:true});$("#taste_aroma").jqxInput({disabled:true});$("#taste_taste").jqxInput({disabled:true});$("#taste_aftertaste").jqxInput({disabled:true});$("#taste_mouthfeel").jqxInput({disabled:true});$("#taste_notes").jqxInput({disabled:true});$("#notes").jqxInput({disabled:true})}else{$("#notes").jqxInput({disabled:false})}}function I(){if(d.starter_enable){$("#propagator").show();$("#starter_type").jqxDropDownList({disabled:false});$("#starter_try").jqxButton({disabled:false});$("#starter_sg").jqxNumberInput({spinButtons:true,readOnly:false,width:110});$("#starter_viability").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}else{$("#propagator").hide();$("#starter_type").jqxDropDownList({disabled:true});$("#starter_try").jqxButton({disabled:true});$("#starter_sg").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#starter_viability").jqxNumberInput({spinButtons:false,readOnly:true,width:90})}}function aW(){console.log("calcInit()");aZ();w();R();$("#starter_enable").on("checked",function(i){d.starter_enable=1;I();X()});$("#starter_enable").on("unchecked",function(i){d.starter_enable=0;I();X()});$("#starter_try").click(function(){$("#prop1_volume").val(0);$("#prop2_volume").val(0);$("#prop3_volume").val(0);$("#prop4_volume").val(0);X()});$("#starter_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.starter_type=i;X()}});$("#starter_sg").on("change",function(i){if(i.args){d.starter_sg=i.args.value;X()}});$("#starter_viability").on("change",function(i){if(i.args){d.starter_viability=i.args.value;T();X()}});$("#prop1_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.prop1_type=i;X()}});$("#prop1_volume").on("change",function(i){if(i.args){d.prop1_volume=i.args.value;X()}});$("#prop2_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.prop2_type=i;X()}});$("#prop2_volume").on("change",function(i){if(i.args){d.prop2_volume=i.args.value;X()}});$("#prop3_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.prop3_type=i;X()}});$("#prop3_volume").on("change",function(i){if(i.args){d.prop3_volume=i.args.value;X()}});$("#prop4_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.prop4_type=i;X()}});$("#prop4_volume").on("change",function(i){if(i.args){d.prop4_volume=i.args.value;X()}});$("#calc_acid").on("checked",function(i){d.calc_acid=1;P()});$("#calc_acid").on("unchecked",function(i){d.calc_acid=0;P()});$("#w1_name").jqxDropDownList("selectItem",d.w1_name);$("#w2_name").jqxDropDownList("selectItem",d.w2_name);if(parseFloat($("#w1_amount").jqxNumberInput("decimal"))==0&&C>0){$("#w1_amount").val(C);d.w1_amount=C;$("#wg_amount").val(C);$("#w2_amount").val(0);d.w2_amount=0}P();$("#w2_amount").on("change",function(i){var a2=parseFloat(i.args.value);if(a2>C){$("#w2_amount").val(d.w2_amount);return}d.w1_amount=parseFloat($("#wg_amount").jqxNumberInput("decimal"))-a2;$("#w1_amount").val(d.w1_amount);d.w2_amount=a2;console.log("new: "+i.args.value+" w1: "+d.w1_amount+"  w2: "+d.w2_amount);P()});$("#wa_cacl2").on("change",function(i){if(i.args){aA("CaCl2",0);aA("CaCl2",i.args.value);P()}});$("#wa_caso4").on("change",function(i){if(i.args){aA("CaSO4",0);aA("CaSO4",i.args.value);P()}});$("#wa_mgso4").on("change",function(i){if(i.args){aA("MgSO4",0);aA("MgSO4",i.args.value);P()}});$("#wa_nacl").on("change",function(i){if(i.args){aA("NaCl",0);aA("NaCl",i.args.value);P()}});$("#wa_base_name").on("change",function(a2){if(a2.args){var i=a2.args.index;console.log("wa_base_name "+i);aA(aT,0);aT=BaseTypeData[i].nl;aA(aT,parseFloat($("#wa_base").jqxNumberInput("decimal")));d.wa_base_name=i;P()}});$("#wa_base").on("change",function(a2){var i=BaseTypeData[$("#wa_base_name").val()].nl;aA(i,parseFloat(a2.args.value));P()});$("#wa_acid_name").on("change",function(a2){if(a2.args){var i=a2.args.index;console.log("wa_acid_name "+i);aA(af,0);af=AcidTypeData[i].nl;aA(af,parseFloat($("#wa_acid").jqxNumberInput("decimal")));d.wa_acid_name=i;P()}});$("#wa_acid").on("change",function(a2){var i=AcidTypeData[$("#wa_acid_name").val()].nl;aA(i,parseFloat(a2.args.value));P()});$("#wa_acid_perc").on("change",function(i){P()});$("#color_method").on("change",function(i){d.color_method=i.args.index;T()});$("#ibu_method").on("change",function(i){d.ibu_method=i.args.index;T();ar()});$("#batch_size").on("change",function(a3){console.log("batch_size change:"+a3.args.value+" old:"+d.batch_size);$("#est_a_vol").val(a3.args.value*1.04);var i,a2=parseFloat(a3.args.value)+d.boil_size-d.batch_size;i=parseFloat(a3.args.value)/d.batch_size;d.boil_size=a2;$("#boil_size").val(Round(a2,2));$("#est_pre_vol").val(Round(a2*1.04,2));d.sparge_volume*=i;$("#sparge_volume").val(d.sparge_volume);$("#brew_sparge_volume").val(d.sparge_volume);d.batch_size=parseFloat(a3.args.value);ae(parseFloat($("#est_og").jqxNumberInput("decimal")));at(i);T();ai(i);a1(i);aO(i);ar();P();j();aN()});$("#boil_time").on("change",function(a3){console.log("boil_time change:"+parseFloat(a3.args.value)+" old:"+d.boil_time);var a2,i,a4=parseFloat(d.boil_size)-parseFloat(d.batch_size);i=a4*(parseFloat(a3.args.value)/d.boil_time);a2=parseFloat(d.batch_size)+i;d.boil_time=parseFloat(a3.args.value);d.boil_size=a2;$("#est_pre_vol").val(Round(a2*1.04,2));$("#boil_size").val(Round(a2,2));T();ar();X()});$("#efficiency").on("change",function(a2){var i=parseFloat($("#est_og").jqxNumberInput("decimal"));d.efficiency=parseFloat(a2.args.value);console.log("efficiency change:"+d.efficiency+" est_og:"+i);ae(i);T();ar();X()});$("#est_og").on("change",function(i){d.est_og=parseFloat(i.args.value);console.log("est_og change:"+d.est_og);$("#est_og2").val(d.est_og);ae(d.est_og);T();ar();aN();X()});$("#mash_ph").on("change",function(i){d.mash_ph=parseFloat(i.args.value);P()});$("#sparge_ph").on("change",function(i){d.sparge_ph=parseFloat(i.args.value);j()});$("#sparge_volume").on("change",function(i){d.sparge_volume=parseFloat(i.args.value);$("#brew_sparge_volume").val(d.sparge_volume);j()});$("#sparge_temp").on("change",function(i){d.sparge_temp=parseFloat(i.args.value);$("#brew_sparge_temperature").val(d.sparge_temp)});$("#sparge_source").on("change",function(a2){if(a2.args){var i=a2.args.index;d.sparge_source=i;j()}});$("#sparge_acid_type").on("change",function(a2){if(a2.args){var i=a2.args.index;d.sparge_acid_type=i;console.log("new sparge_acid_type: "+d.sparge_acid_type);j()}});$("#sparge_acid_perc").on("change",function(i){d.sparge_acid_perc=parseFloat(i.args.value);j()});M();aR();$("#package_volume").on("change",function(a2){var a3,a4,i=d.package_volume+d.package_infuse_amount;d.package_volume=parseFloat(a2.args.value);if(d.package_volume>d.brew_fermenter_volume){d.package_volume=d.brew_fermenter_volume;$("#package_volume").val(d.package_volume)}a4=d.package_volume+d.package_infuse_amount;a3=a4-i;if(i>0){d.bottle_amount+=(d.bottle_amount/i)*a3;d.keg_amount+=(d.keg_amount/i)*a3}else{d.bottle_amount=a4;d.keg_amount=0}console.log("diff:"+a3+" old:"+i+" bottle:"+d.bottle_amount+" keg:"+d.keg_amount);$("#bottle_amount").val(parseFloat(d.bottle_amount*1000)/1000);$("#keg_amount").val(parseFloat(d.keg_amount*1000)/1000);aR()});$("#package_infuse_amount").on("change",function(a2){var a3,a4,i=d.package_volume+d.package_infuse_amount;d.package_infuse_amount=parseFloat(a2.args.value);a4=d.package_volume+d.package_infuse_amount;a3=a4-i;if(i>0){d.bottle_amount+=(d.bottle_amount/i)*a3;d.keg_amount+=(d.keg_amount/i)*a3}else{d.bottle_amount=a4;d.keg_amount=0}console.log("diff:"+a3+" old:"+i+" bottle:"+d.bottle_amount+" keg:"+d.keg_amount);$("#bottle_amount").val(parseFloat(d.bottle_amount*1000)/1000);$("#keg_amount").val(parseFloat(d.keg_amount*1000)/1000);aR()});$("#package_infuse_abv").on("change",function(i){d.package_infuse_abv=parseFloat(i.args.value);aR()});$("#bottle_amount").on("change",function(a3){var i,a4,a2=parseFloat(a3.args.value);i=d.package_volume+d.package_infuse_amount;if(a2>i){a2=i}a4=d.bottle_amount-a2;d.bottle_amount=Math.round((d.bottle_amount-a4)*1000)/1000;d.keg_amount=Math.round((d.keg_amount+a4)*1000)/1000;$("#bottle_amount").val(parseFloat(d.bottle_amount));$("#keg_amount").val(parseFloat(d.keg_amount));aR()});$("#bottle_priming_water").on("change",function(i){d.bottle_priming_water=parseFloat(i.args.value);aR()});$("#keg_amount").on("change",function(a3){var a4,i,a2=parseFloat(a3.args.value);i=d.package_volume+d.package_infuse_amount;if(a2>i){a2=i}a4=d.keg_amount-a2;d.bottle_amount=Math.round((d.bottle_amount+a4)*1000)/1000;d.keg_amount=Math.round((d.keg_amount-a4)*1000)/1000;$("#bottle_amount").val(parseFloat(d.bottle_amount));$("#keg_amount").val(parseFloat(d.keg_amount));aR()});$("#keg_priming_water").on("change",function(i){d.keg_priming_water=parseFloat(i.args.value);aR()});$("#bottle_carbonation").on("change",function(i){d.bottle_carbonation=parseFloat(i.args.value);aR()});$("#bottle_carbonation_temp").on("change",function(i){d.bottle_carbonation_temp=parseFloat(i.args.value);aR()});$("#keg_carbonation").on("change",function(i){d.keg_carbonation=parseFloat(i.args.value);aR()});$("#keg_forced_carb").on("checked",function(i){d.keg_forced_carb=1;aR()});$("#keg_forced_carb").on("unchecked",function(i){d.keg_forced_carb=0;aR()});$("#keg_carbonation_temp").on("change",function(i){d.keg_carbonation_temp=parseFloat(i.args.value);aR()});$("#brew_fermenter_extrawater").on("change",function(i){d.brew_fermenter_extrawater=parseFloat(i.args.value);T();ar();X()});$("#brew_fermenter_tcloss").on("change",function(i){d.brew_fermenter_tcloss=parseFloat(i.args.value);T();ar();X()});$("#primary_end_sg").on("change",function(i){d.primary_end_sg=parseFloat(i.args.value);M()});$("#primary_end_brix").on("change",function(a2){var a3,a4,i;if(d.brew_fermenter_sg>=1.02){a3=sg_to_brix(d.brew_fermenter_sg);a4=parseFloat(a2.args.value);i=Round(1.0031-0.002318474*a3-0.000007775*(a3*a3)-3.4e-8*Math.pow(a3,3)+0.00574*(a4)+0.00003344*(a4*a4)+8.6e-8*Math.pow(a4,3),4);if(a4>0.05){$("#primary_end_sg").val(i);d.primary_end_sg=i}M()}});$("#secondary_end_sg").on("change",function(i){d.secondary_end_sg=parseFloat(i.args.value);M()});$("#secondary_end_brix").on("change",function(a2){var a3,a4,i;if(d.brew_fermenter_sg>=1.02){a3=sg_to_brix(d.brew_fermenter_sg);a4=parseFloat(a2.args.value);i=Round(1.0031-0.002318474*a3-0.000007775*(a3*a3)-3.4e-8*Math.pow(a3,3)+0.00574*(a4)+0.00003344*(a4*a4)+8.6e-8*Math.pow(a4,3),4);if(a4>0.05){$("#secondary_end_sg").val(i);d.secondary_end_sg=i}M()}});$("#final_brix").on("change",function(a2){var a3,a4,i;if(d.brew_fermenter_sg>=1.02){a3=sg_to_brix(d.brew_fermenter_sg);a4=parseFloat(a2.args.value);i=Round(1.0031-0.002318474*a3-0.000007775*(a3*a3)-3.4e-8*Math.pow(a3,3)+0.00574*(a4)+0.00003344*(a4*a4)+8.6e-8*Math.pow(a4,3),4);if(a4>0.05){$("#fg").val(i);d.fg=i}M()}});$("#fg").on("change",function(i){d.fg=parseFloat(i.args.value);M()});$("#BLog").jqxButton({disabled:(d.log_brew)?false:true});$("#FLog").jqxButton({disabled:(d.log_fermentation)?false:true})}$("#styleSelect").jqxDropDownList({placeHolder:"Kies bierstijl:",theme:theme,source:styleslist,displayMember:"name",width:180,height:23,dropDownVerticalAlignment:"top",dropDownWidth:500,dropDownHeight:380,renderer:function(a2,i,a4){var a3=styleslist.records[a2];return a3.style_guide+" "+a3.style_letter+" "+a3.name}});$("#styleSelect").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=styleslist.records[i];$("#st_name").val(a2.name);$("#st_category").val(a2.category);$("#st_category_number").val(a2.category_number);$("#st_letter").val(a2.style_letter);$("#st_guide").val(a2.style_guide);$("#st_type").val(StyleTypeData[a2.type].nl);$("#st_og_min").val(a2.og_min);$("#st_og_max").val(a2.og_max);$("#st_fg_min").val(a2.fg_min);$("#st_fg_max").val(a2.fg_max);$("#st_ibu_min").val(a2.ibu_min);$("#st_ibu_max").val(a2.ibu_max);$("#st_color_min").val(a2.color_min);$("#st_color_max").val(a2.color_max);$("#st_carb_min").val(a2.carb_min);$("#st_carb_min2").val(a2.carb_min);$("#st_carb_max").val(a2.carb_max);$("#st_carb_max2").val(a2.carb_max);$("#st_abv_min").val(a2.abv_min);$("#st_abv_max").val(a2.abv_max)}});$("#equipmentSelect").jqxDropDownList({placeHolder:"Kies apparatuur:",theme:theme,source:equipmentlist,displayMember:"name",width:170,height:23,dropDownWidth:300,renderer:function(a2,i,a4){var a3=equipmentlist.records[a2];return a3.batch_size+" liter "+a3.name}});$("#equipmentSelect").on("select",function(a4){if(a4.args){var a3,a2,i=a4.args.index;a3=equipmentlist.records[i];a2=a3.batch_size/d.batch_size;$("#eq_name").val(a3.name);$("#eq_boil_size").val(a3.boil_size);d.boil_size=a3.boil_size;$("#boil_size").val(a3.boil_size);$("#eq_batch_size").val(a3.batch_size);d.batch_size=a3.batch_size;$("#batch_size").val(a3.batch_size);$("#est_a_vol").val(a3.batch_size*1.04);$("#eq_tun_volume").val(a3.tun_volume);d.eq_tun_weight=a3.tun_weight;d.eq_tun_specific_heat=a3.tun_specific_heat;d.eq_tun_material=a3.tun_material;d.eq_tun_height=a3.tun_height/100;$("#eq_top_up_water").val(a3.top_up_water);d.eq_trub_chiller_loss=a3.trub_chiller_loss;$("#eq_trub_chiller_loss").val(a3.trub_chiller_loss);$("#eq_evap_rate").val(a3.evap_rate);$("#eq_boil_time").val(a3.boil_time);d.eq_calc_boil_volume=a3.calc_boil_volume;$("#eq_top_up_kettle").val(a3.top_up_kettle);$("#eq_hop_utilization").val(a3.hop_utilization);$("#eq_notes").val(a3.notes);$("#eq_lauter_volume").val(a3.lauter_volume);d.eq_lauter_height=a3.lauter_height/100;$("#eq_lauter_deadspace").val(a3.lauter_deadspace);$("#eq_kettle_volume").val(a3.kettle_volume);d.eq_kettle_height=a3.kettle_height/100;$("#eq_mash_volume").val(a3.mash_volume);$("#eq_mash_max").val(a3.mash_max);d.eq_mash_max=a3.mash_max;$("#mash_max").val(a3.mash_max);$("#eq_efficiency").val(a3.efficiency);d.efficiency=a3.efficiency;$("#efficiency").val(a3.efficiency);d.sparge_volume=Math.round(a3.boil_size*5)/10;$("#sparge_volume").val(d.sparge_volume);$("#brew_sparge_volume").val(d.sparge_volume);$("#est_pre_vol").val(a3.boil_size*1.04);ae(parseFloat($("#est_og").jqxNumberInput("decimal")));at(a2);T();ai(a2);a1(a2);aO(a2);ar();P();j()}});function s(){console.log("saveRecord()");var a2={record:my_record,uuid:d.uuid,name:$("#name").val(),code:$("#code").val(),birth:$("#birth").val(),stage:d.stage,notes:$("#notes").val(),log_brew:d.log_brew,log_fermentation:d.log_fermentation,inventory_reduced:d.inventory_reduced,locked:d.locked,eq_name:$("#eq_name").val(),eq_boil_size:parseFloat($("#eq_boil_size").jqxNumberInput("decimal")),eq_batch_size:parseFloat($("#eq_batch_size").jqxNumberInput("decimal")),eq_tun_volume:parseFloat($("#eq_tun_volume").jqxNumberInput("decimal")),eq_tun_weight:d.eq_tun_weight,eq_tun_specific_heat:d.eq_tun_specific_heat,eq_tun_material:d.eq_tun_material,eq_tun_height:d.eq_tun_height,eq_top_up_water:parseFloat($("#eq_top_up_water").jqxNumberInput("decimal")),eq_trub_chiller_loss:parseFloat($("#eq_trub_chiller_loss").jqxNumberInput("decimal")),eq_evap_rate:parseFloat($("#eq_evap_rate").jqxNumberInput("decimal")),eq_boil_time:parseFloat($("#eq_boil_time").jqxNumberInput("decimal")),eq_calc_boil_volume:d.eq_calc_boil_volume,eq_top_up_kettle:parseFloat($("#eq_top_up_kettle").jqxNumberInput("decimal")),eq_hop_utilization:parseFloat($("#eq_hop_utilization").jqxNumberInput("decimal")),eq_notes:$("#eq_notes").val(),eq_lauter_volume:parseFloat($("#eq_lauter_volume").jqxNumberInput("decimal")),eq_lauter_height:d.eq_lauter_height,eq_lauter_deadspace:parseFloat($("#eq_lauter_deadspace").jqxNumberInput("decimal")),eq_kettle_volume:parseFloat($("#eq_kettle_volume").jqxNumberInput("decimal")),eq_kettle_height:d.eq_kettle_height,eq_mash_volume:parseFloat($("#eq_mash_volume").jqxNumberInput("decimal")),eq_mash_max:parseFloat($("#eq_mash_max").jqxNumberInput("decimal")),eq_efficiency:parseFloat($("#eq_efficiency").jqxNumberInput("decimal")),brew_date_start:$("#brew_date_start").val(),brew_mash_ph:parseFloat($("#brew_mash_ph").jqxNumberInput("decimal")),brew_mash_sg:parseFloat($("#brew_mash_sg").jqxNumberInput("decimal")),brew_mash_efficiency:parseFloat($("#brew_mash_efficiency").jqxNumberInput("decimal")),brew_sparge_est:parseFloat($("#brew_sparge_est").jqxNumberInput("decimal")),brew_sparge_ph:parseFloat($("#brew_sparge_ph").jqxNumberInput("decimal")),brew_preboil_volume:parseFloat($("#brew_preboil_volume").jqxNumberInput("decimal")),brew_preboil_sg:parseFloat($("#brew_preboil_sg").jqxNumberInput("decimal")),brew_preboil_ph:parseFloat($("#brew_preboil_ph").jqxNumberInput("decimal")),brew_preboil_efficiency:parseFloat($("#brew_preboil_efficiency").jqxNumberInput("decimal")),brew_aboil_volume:parseFloat($("#brew_aboil_volume").jqxNumberInput("decimal")),brew_aboil_sg:parseFloat($("#brew_aboil_sg").jqxNumberInput("decimal")),brew_aboil_ph:parseFloat($("#brew_aboil_ph").jqxNumberInput("decimal")),brew_aboil_efficiency:parseFloat($("#brew_aboil_efficiency").jqxNumberInput("decimal")),brew_cooling_method:$("#brew_cooling_method").val(),brew_cooling_time:parseFloat($("#brew_cooling_time").jqxNumberInput("decimal")),brew_cooling_to:parseFloat($("#brew_cooling_to").jqxNumberInput("decimal")),brew_whirlpool9:parseFloat($("#brew_whirlpool9").jqxNumberInput("decimal")),brew_whirlpool7:parseFloat($("#brew_whirlpool7").jqxNumberInput("decimal")),brew_whirlpool6:parseFloat($("#brew_whirlpool6").jqxNumberInput("decimal")),brew_whirlpool2:parseFloat($("#brew_whirlpool2").jqxNumberInput("decimal")),brew_fermenter_volume:parseFloat($("#brew_fermenter_volume").jqxNumberInput("decimal")),brew_fermenter_extrawater:parseFloat($("#brew_fermenter_extrawater").jqxNumberInput("decimal")),brew_fermenter_tcloss:parseFloat($("#brew_fermenter_tcloss").jqxNumberInput("decimal")),brew_aeration_time:parseFloat($("#brew_aeration_time").jqxNumberInput("decimal")),brew_aeration_speed:parseFloat($("#brew_aeration_speed").jqxNumberInput("decimal")),brew_aeration_type:$("#brew_aeration_type").val(),brew_fermenter_sg:parseFloat($("#brew_fermenter_sg").jqxNumberInput("decimal")),brew_fermenter_ibu:parseFloat($("#brew_fermenter_ibu").jqxNumberInput("decimal")),brew_fermenter_color:parseFloat($("#brew_fermenter_color").jqxNumberInput("decimal")),brew_date_end:$("#brew_date_end").val(),og:d.og,fg:parseFloat($("#fg").jqxNumberInput("decimal")),primary_start_temp:parseFloat($("#primary_start_temp").jqxNumberInput("decimal")),primary_max_temp:parseFloat($("#primary_max_temp").jqxNumberInput("decimal")),primary_end_temp:parseFloat($("#primary_end_temp").jqxNumberInput("decimal")),primary_end_sg:parseFloat($("#primary_end_sg").jqxNumberInput("decimal")),primary_end_date:$("#primary_end_date").val(),secondary_temp:parseFloat($("#secondary_temp").jqxNumberInput("decimal")),secondary_end_sg:parseFloat($("#secondary_end_sg").jqxNumberInput("decimal")),secondary_end_date:$("#secondary_end_date").val(),tertiary_temp:parseFloat($("#tertiary_temp").jqxNumberInput("decimal")),package_date:$("#package_date").val(),package_volume:parseFloat($("#package_volume").jqxNumberInput("decimal")),package_infuse_amount:parseFloat($("#package_infuse_amount").jqxNumberInput("decimal")),package_infuse_abv:parseFloat($("#package_infuse_abv").jqxNumberInput("decimal")),package_infuse_notes:$("#package_infuse_notes").val(),package_abv:parseFloat($("#package_abv").jqxNumberInput("decimal")),package_ph:parseFloat($("#package_ph").jqxNumberInput("decimal")),bottle_amount:parseFloat($("#bottle_amount").jqxNumberInput("decimal")),bottle_carbonation:parseFloat($("#bottle_carbonation").jqxNumberInput("decimal")),bottle_priming_water:parseFloat($("#bottle_priming_water").jqxNumberInput("decimal")),bottle_priming_amount:parseFloat($("#bottle_priming_amount").jqxNumberInput("decimal")),bottle_carbonation_temp:parseFloat($("#bottle_carbonation_temp").jqxNumberInput("decimal")),keg_amount:parseFloat($("#keg_amount").jqxNumberInput("decimal")),keg_carbonation:parseFloat($("#keg_carbonation").jqxNumberInput("decimal")),keg_priming_water:parseFloat($("#keg_priming_water").jqxNumberInput("decimal")),keg_priming_amount:parseFloat($("#keg_priming_amount").jqxNumberInput("decimal")),keg_carbonation_temp:parseFloat($("#keg_carbonation_temp").jqxNumberInput("decimal")),keg_forced_carb:d.keg_forced_carb,keg_pressure:parseFloat($("#keg_pressure").jqxNumberInput("decimal")),taste_notes:$("#taste_notes").val(),taste_rate:parseFloat($("#taste_rate").jqxNumberInput("decimal")),taste_date:$("#taste_date").val(),taste_color:$("#taste_color").val(),taste_transparency:$("#taste_transparency").val(),taste_head:$("#taste_head").val(),taste_aroma:$("#taste_aroma").val(),taste_taste:$("#taste_taste").val(),taste_mouthfeel:$("#taste_mouthfeel").val(),taste_aftertaste:$("#taste_aftertaste").val(),st_name:$("#st_name").val(),st_letter:$("#st_letter").val(),st_guide:$("#st_guide").val(),st_type:d.st_type,st_category:$("#st_category").val(),st_category_number:parseFloat($("#st_category_number").jqxNumberInput("decimal")),st_og_min:parseFloat($("#st_og_min").jqxNumberInput("decimal")),st_og_max:parseFloat($("#st_og_max").jqxNumberInput("decimal")),st_fg_min:parseFloat($("#st_fg_min").jqxNumberInput("decimal")),st_fg_max:parseFloat($("#st_fg_max").jqxNumberInput("decimal")),st_ibu_min:parseFloat($("#st_ibu_min").jqxNumberInput("decimal")),st_ibu_max:parseFloat($("#st_ibu_max").jqxNumberInput("decimal")),st_color_min:parseFloat($("#st_color_min").jqxNumberInput("decimal")),st_color_max:parseFloat($("#st_color_max").jqxNumberInput("decimal")),st_carb_min:parseFloat($("#st_carb_min").jqxNumberInput("decimal")),st_carb_max:parseFloat($("#st_carb_max").jqxNumberInput("decimal")),st_abv_min:parseFloat($("#st_abv_min").jqxNumberInput("decimal")),st_abv_max:parseFloat($("#st_abv_max").jqxNumberInput("decimal")),type:$("#type").val(),batch_size:parseFloat($("#batch_size").jqxNumberInput("decimal")),boil_size:parseFloat($("#boil_size").jqxNumberInput("decimal")),boil_time:parseFloat($("#boil_time").jqxNumberInput("decimal")),efficiency:parseFloat($("#efficiency").jqxNumberInput("decimal")),est_og:parseFloat($("#est_og").jqxNumberInput("decimal")),est_fg:parseFloat($("#est_fg").jqxNumberInput("decimal")),est_abv:parseFloat($("#est_abv").jqxNumberInput("decimal")),est_color:parseFloat($("#est_color").jqxNumberInput("decimal")),color_method:$("#color_method").val(),est_ibu:parseFloat($("#est_ibu").jqxNumberInput("decimal")),ibu_method:$("#ibu_method").val(),est_carb:parseFloat($("#est_carb").jqxNumberInput("decimal")),mash_name:$("#mash_name").val(),mash_ph:parseFloat($("#mash_ph").jqxNumberInput("decimal")),sparge_temp:parseFloat($("#sparge_temp").jqxNumberInput("decimal")),sparge_ph:parseFloat($("#sparge_ph").jqxNumberInput("decimal")),sparge_volume:parseFloat($("#sparge_volume").jqxNumberInput("decimal")),sparge_source:$("#sparge_source").val(),sparge_acid_type:$("#sparge_acid_type").val(),sparge_acid_perc:parseFloat($("#sparge_acid_perc").jqxNumberInput("decimal")),sparge_acid_amount:d.sparge_acid_amount,calc_acid:d.calc_acid,w1_name:$("#w1_name").val(),w1_amount:parseFloat($("#w1_amount").jqxNumberInput("decimal")),w1_calcium:parseFloat($("#w1_calcium").jqxNumberInput("decimal")),w1_sulfate:parseFloat($("#w1_sulfate").jqxNumberInput("decimal")),w1_chloride:parseFloat($("#w1_chloride").jqxNumberInput("decimal")),w1_sodium:parseFloat($("#w1_sodium").jqxNumberInput("decimal")),w1_magnesium:parseFloat($("#w1_magnesium").jqxNumberInput("decimal")),w1_total_alkalinity:parseFloat($("#w1_total_alkalinity").jqxNumberInput("decimal")),w1_ph:parseFloat($("#w1_ph").jqxNumberInput("decimal")),w1_cost:d.w1_cost,w2_name:$("#w2_name").val(),w2_amount:parseFloat($("#w2_amount").jqxNumberInput("decimal")),w2_calcium:parseFloat($("#w2_calcium").jqxNumberInput("decimal")),w2_sulfate:parseFloat($("#w2_sulfate").jqxNumberInput("decimal")),w2_chloride:parseFloat($("#w2_chloride").jqxNumberInput("decimal")),w2_sodium:parseFloat($("#w2_sodium").jqxNumberInput("decimal")),w2_magnesium:parseFloat($("#w2_magnesium").jqxNumberInput("decimal")),w2_total_alkalinity:parseFloat($("#w2_total_alkalinity").jqxNumberInput("decimal")),w2_ph:parseFloat($("#w2_ph").jqxNumberInput("decimal")),w2_cost:d.w2_cost,wg_amount:parseFloat($("#wg_amount").jqxNumberInput("decimal")),wg_calcium:parseFloat($("#wg_calcium").jqxNumberInput("decimal")),wg_sulfate:parseFloat($("#wg_sulfate").jqxNumberInput("decimal")),wg_chloride:parseFloat($("#wg_chloride").jqxNumberInput("decimal")),wg_sodium:parseFloat($("#wg_sodium").jqxNumberInput("decimal")),wg_magnesium:parseFloat($("#wg_magnesium").jqxNumberInput("decimal")),wg_total_alkalinity:parseFloat($("#wg_total_alkalinity").jqxNumberInput("decimal")),wg_ph:parseFloat($("#wg_ph").jqxNumberInput("decimal")),wb_calcium:parseFloat($("#wb_calcium").jqxNumberInput("decimal")),wb_sulfate:parseFloat($("#wb_sulfate").jqxNumberInput("decimal")),wb_chloride:parseFloat($("#wb_chloride").jqxNumberInput("decimal")),wb_sodium:parseFloat($("#wb_sodium").jqxNumberInput("decimal")),wb_magnesium:parseFloat($("#wb_magnesium").jqxNumberInput("decimal")),wb_total_alkalinity:parseFloat($("#wb_total_alkalinity").jqxNumberInput("decimal")),wb_ph:parseFloat($("#wb_ph").jqxNumberInput("decimal")),wa_acid_name:$("#wa_acid_name").val(),wa_acid_perc:parseFloat($("#wa_acid_perc").jqxNumberInput("decimal")),wa_base_name:$("#wa_base_name").val(),starter_enable:d.starter_enable,starter_type:$("#starter_type").val(),starter_sg:parseFloat($("#starter_sg").jqxNumberInput("decimal")),starter_viability:parseFloat($("#starter_viability").jqxNumberInput("decimal")),prop1_type:$("#prop1_type").val(),prop1_volume:parseFloat($("#prop1_volume").jqxNumberInput("decimal")),prop2_type:$("#prop2_type").val(),prop2_volume:parseFloat($("#prop2_volume").jqxNumberInput("decimal")),prop3_type:$("#prop3_type").val(),prop3_volume:parseFloat($("#prop3_volume").jqxNumberInput("decimal")),prop4_type:$("#prop4_type").val(),prop4_volume:parseFloat($("#prop4_volume").jqxNumberInput("decimal")),fermentables:$("#fermentableGrid").jqxGrid("getrows"),hops:$("#hopGrid").jqxGrid("getrows"),miscs:$("#miscGrid").jqxGrid("getrows"),yeasts:$("#yeastGrid").jqxGrid("getrows"),mashs:$("#mashGrid").jqxGrid("getrows")},i="update=true&"+$.param(a2);$.ajax({dataType:"json",url:E,cache:false,data:i,async:false,type:"POST",success:function(a4,a3,a5){console.log("saveRecord() success")},error:function(a3,a5,a4){console.log("saveRecord() error")}})}$("#name").jqxTooltip({content:"De naam voor dit product."});$("#name").jqxInput({theme:theme,width:640,height:23});$("#code").jqxTooltip({content:"Product code nummer."});$("#code").jqxInput({theme:theme,width:100,height:23});$("#birth").jqxTooltip({content:"De ontwerp datum van dit product."});$("#birth").jqxInput({theme:theme,width:120,height:23});$("#stage").jqxTooltip({content:"De productie fase van dit product."});$("#stage").jqxInput({theme:theme,width:100,height:23});$("#locked").jqxCheckBox({theme:theme,width:120,height:23,disabled:true});$("#locked").on("checked",function(i){if(d.stage>=10){d.locked=1;d.stage=11;aU()}});$("#locked").on("unchecked",function(i){if(d.stage>=10){d.locked=0;d.stage=10;aU()}});$("#notes").jqxTooltip({content:"De uitgebreide opmerkingen over dit product."});$("#notes").jqxInput({theme:theme,width:960,height:100});$("#type").jqxTooltip({content:"Het brouw type van dit recept."});$("#type").jqxDropDownList({theme:theme,source:RecipeTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#efficiency").jqxTooltip({content:"Het rendement van maischen en koken."});$("#efficiency").jqxNumberInput(Perc1dec);$("#batch_size").jqxTooltip({content:"Het volume van het gekoelde wort na het koken."});$("#batch_size").jqxNumberInput(Spin1dec);$("#batch_size").jqxNumberInput({min:4});$("#boil_time").jqxTooltip({content:"De kooktijd in minuten."});$("#boil_time").jqxNumberInput(PosInt);$("#boil_time").jqxNumberInput({min:4,max:360});$("#boil_size").jqxTooltip({content:"Het volume van het wort voor het koken."});$("#boil_size").jqxNumberInput({inputMode:"simple",theme:theme,width:90,height:23,decimalDigits:2,readOnly:true});$("#st_guide").jqxTooltip({content:"De bierstijl gids voor dit recept."});$("#st_guide").jqxInput({theme:theme,width:250,height:23});$("#st_name").jqxTooltip({content:"De bierstijl naam voor dit recept."});$("#st_name").jqxInput({theme:theme,width:250,height:23});$("#st_letter").jqxTooltip({content:"De bierstijl letter voor dit recept."});$("#st_letter").jqxInput({theme:theme,width:90,height:23});$("#st_type").jqxTooltip({content:"Het bierstijl type."});$("#st_type").jqxInput({theme:theme,width:250,height:23});$("#st_category").jqxTooltip({content:"De Amerikaanse bierstijl categorie."});$("#st_category").jqxInput({theme:theme,width:250,height:23});$("#st_category_number").jqxTooltip({content:"De Amerikaanse bierstijl categorie sub nummer."});$("#st_category_number").jqxNumberInput(Smal0dec);$("#est_og").jqxTooltip({content:"Het begin SG wat je wilt bereiken. De moutstort wordt automatisch herberekend."});$("#est_og").jqxNumberInput(SGopts);$("#st_og_min").jqxTooltip({content:"Het minimum begin SG voor deze bierstijl."});$("#st_og_min").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#st_og_max").jqxTooltip({content:"Het maximum begin SG voor deze bierstijl."});$("#st_og_max").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#est_fg").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg").jqxNumberInput(Show3dec);$("#st_fg_min").jqxTooltip({content:"Het minimum eind SG voor deze bierstijl."});$("#st_fg_min").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#st_fg_max").jqxTooltip({content:"Het maximum eind SG voor deze bierstijl."});$("#st_fg_max").jqxNumberInput({inputMode:"simple",theme:theme,width:50,height:23,decimalDigits:3,readOnly:true});$("#est_abv").jqxTooltip({content:"Alcohol volume %. Dit wordt automatisch berekend."});$("#est_abv").jqxNumberInput(Smal1dec);$("#st_abv_min").jqxTooltip({content:"Het minimum alcohol volume % voor deze bierstijl."});$("#st_abv_min").jqxNumberInput(Smal1dec);$("#st_abv_max").jqxTooltip({content:"Het maximum alcohol volume % voor deze bierstijl."});$("#st_abv_max").jqxNumberInput(Smal1dec);$("#est_color").jqxTooltip({content:"De kleur in EBC. Dit wordt automatisch berekend."});$("#est_color").jqxNumberInput(Show0dec);$("#st_color_min").jqxTooltip({content:"De minimum kleur voor deze bierstijl."});$("#st_color_min").jqxNumberInput(Smal0dec);$("#st_color_max").jqxTooltip({content:"De maximum kleur voor deze bierstijl."});$("#st_color_max").jqxNumberInput(Smal0dec);$("#color_method").jqxDropDownList({theme:theme,source:ColorMethodAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#est_ibu").jqxTooltip({content:"De bitterheid in IBU. Dit wordt automatisch berekend."});$("#est_ibu").jqxNumberInput(Show0dec);$("#st_ibu_min").jqxTooltip({content:"De minimum bitterheid voor deze bierstijl."});$("#st_ibu_min").jqxNumberInput(Smal0dec);$("#st_ibu_max").jqxTooltip({content:"De maximum bitterheid voor deze bierstijl."});$("#st_ibu_max").jqxNumberInput(Smal0dec);$("#ibu_method").jqxDropDownList({theme:theme,source:IBUmethodAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#kcal").jqxTooltip({content:"Energie-inhoud in kcal/liter."});$("#kcal").jqxNumberInput(Smal0dec);$("#est_carb").jqxTooltip({content:"Koolzuur volume. Dit wordt automatisch berekend."});$("#est_carb").jqxNumberInput(Smal1dec);$("#st_carb_min").jqxTooltip({content:"Het minimum koolzuur volume voor deze bierstijl."});$("#st_carb_min").jqxNumberInput(Smal1dec);$("#st_carb_max").jqxTooltip({content:"Het maximum koolzuur volume voor deze bierstijl."});$("#st_carb_max").jqxNumberInput(Smal1dec);$("#eq_name").jqxTooltip({content:"De naam van deze brouw apparatuur."});$("#eq_name").jqxInput({theme:theme,width:250,height:23});$("#eq_boil_size").jqxTooltip({content:"Normaal kook volume in liters"});$("#eq_boil_size").jqxNumberInput(Show1dec);$("#eq_batch_size").jqxTooltip({content:"Berekende batch grootte in liters aan het eind van de kook."});$("#eq_batch_size").jqxNumberInput(Show1dec);$("#eq_tun_volume").jqxTooltip({content:"Maisch ketel volume."});$("#eq_tun_volume").jqxNumberInput(Show1dec);$("#eq_top_up_water").jqxTooltip({content:"Extra water in het gistvat."});$("#eq_top_up_water").jqxNumberInput(Show1dec);$("#eq_trub_chiller_loss").jqxTooltip({content:"Standaard verlies bij het overbrengen naar het gistvat."});$("#eq_trub_chiller_loss").jqxNumberInput(Show1dec);$("#eq_evap_rate").jqxTooltip({content:"Verdamping in liters per uur."});$("#eq_evap_rate").jqxNumberInput(Show2dec);$("#eq_boil_time").jqxTooltip({content:"Normale kooktijd in minuten."});$("#eq_boil_time").jqxNumberInput(Show0dec);$("#eq_top_up_kettle").jqxTooltip({content:"Extra water toevoegen tijdens de kook."});$("#eq_top_up_kettle").jqxNumberInput(Show1dec);$("#eq_hop_utilization").jqxTooltip({content:"100% voor kleine installaties, hoger voor grote brouwerijen."});$("#eq_hop_utilization").jqxNumberInput(Show0dec);$("#eq_notes").jqxTooltip({content:"Opmerkingen over deze apparatuur."});$("#eq_notes").jqxInput({theme:theme,width:960,height:200});$("#eq_lauter_volume").jqxTooltip({content:"Filterkuip volume."});$("#eq_lauter_volume").jqxNumberInput(Show1dec);$("#eq_lauter_deadspace").jqxTooltip({content:"Filterkuip verlies in liters."});$("#eq_lauter_deadspace").jqxNumberInput(Show1dec);$("#eq_kettle_volume").jqxTooltip({content:"Kook ketel volume in liters."});$("#eq_kettle_volume").jqxNumberInput(Show1dec);$("#eq_mash_volume").jqxTooltip({content:"Maisch water voor de eerste stap."});$("#eq_mash_volume").jqxNumberInput(Show1dec);$("#eq_mash_max").jqxTooltip({content:"De maximale moutstort in Kg."});$("#eq_mash_max").jqxNumberInput(Show1dec);$("#eq_efficiency").jqxTooltip({content:"Gemiddeld brouwzaal rendement."});$("#eq_efficiency").jqxNumberInput(Show1dec);$("#est_color2").jqxTooltip({content:"De kleur in EBC. Dit wordt automatisch berekend."});$("#est_color2").jqxNumberInput(Show0dec);$("#est_og2").jqxTooltip({content:"Het geschatte begin SG van dit product."});$("#est_og2").jqxNumberInput(Show3dec);$("#mash_kg").jqxTooltip({content:"Het gewicht van alle mouten in de maisch."});$("#mash_kg").jqxNumberInput(Show3dec);$("#perc_malts").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:120,animationDuration:0,colorRanges:[{stop:90,color:"#008C00"},{stop:100,color:"#EB7331"},{stop:120,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*1.2))+"%"}});$("#perc_sugars").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:50,animationDuration:0,colorRanges:[{stop:20,color:"#008C00"},{stop:50,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*5)/10)+"%"}});$("#perc_cara").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:50,animationDuration:0,colorRanges:[{stop:25,color:"#008C00"},{stop:50,color:"#FF0000"}],renderText:function(i){return(Math.round(parseInt(i)*5)/10)+"%"}});$("#ferm_lintner").jqxProgressBar({width:300,height:23,theme:theme,showText:true,max:200,animationDuration:0,colorRanges:[{stop:30,color:"#FF0000"},{stop:40,color:"#EB7331"},{stop:200,color:"#008C00"}],renderText:function(i){return(parseInt(i)*2)+" lintner"}});$("#popupFermentable").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#FermentableReady"),modalOpacity:0.4});$("#FermentableReady").jqxButton({template:"success",width:"90px",theme:theme});$("#FermentableReady").click(function(){var a2,i=$("#fermentableGrid").jqxGrid("getrowid",u);console.log("FermentableReady row:"+u+" ID:"+i);a2={f_name:aK.f_name,f_origin:aK.f_origin,f_supplier:aK.f_supplier,f_amount:aK.f_amount,f_cost:aK.f_cost,f_type:aK.f_type,f_yield:aK.f_yield,f_color:aK.f_color,f_coarse_fine_diff:aK.f_coarse_fine_diff,f_moisture:aK.f_moisture,f_diastatic_power:aK.f_diastatic_power,f_protein:aK.f_protein,f_max_in_batch:aK.f_max_in_batch,f_graintype:aK.f_graintype,f_added:aK.f_added,f_dissolved_protein:aK.f_dissolved_protein,f_recommend_mash:aK.f_recommend_mash,f_add_after_boil:aK.f_add_after_boil,f_adjust_to_total_100:aK.f_adjust_to_total_100,f_percentage:aK.f_percentage,f_di_ph:aK.f_di_ph,f_acid_to_ph_57:aK.f_acid_to_ph_57,f_inventory:aK.f_inventory,f_avail:aK.f_avail};$("#fermentableGrid").jqxGrid("updaterow",i,a2);aV();T();ar();aN()});$("#wf_name").jqxInput({theme:theme,width:320,height:23});$("#wf_instock").jqxCheckBox({theme:theme,height:23});$("#wf_instock").on("change",function(i){fermentableinstock=i.args.checked;fermentablelist.dataBind()});$("#wf_select").jqxDropDownList({placeHolder:"Kies mout:",theme:theme,source:fermentablelist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a2,i,a4){var a3=fermentablelist.records[a2];return a3.supplier+" / "+a3.name+" ("+a3.color+" EBC)"}});$("#wf_select").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=fermentablelist.records[i];$("#wf_name").val(a2.name);aK.f_name=a2.name;aK.f_origin=a2.origin;aK.f_supplier=a2.supplier;aK.f_type=a2.type;aK.f_cost=a2.cost;aK.f_yield=a2.yield;aK.f_color=a2.color;aK.f_coarse_fine_diff=a2.coarse_fine_diff;aK.f_moisture=a2.moisture;aK.f_diastatic_power=a2.diastatic_power;aK.f_protein=a2.protein;aK.f_max_in_batch=a2.max_in_batch;aK.f_graintype=a2.graintype;aK.f_dissolved_protein=a2.dissolved_protein;aK.f_recommend_mash=a2.recommend_mash;aK.f_add_after_boil=a2.add_after_boil;aK.f_di_ph=a2.di_ph;aK.f_acid_to_ph_57=a2.acid_to_ph_57;aK.f_inventory=a2.inventory}});$("#wf_amount").jqxNumberInput(Spin3dec);$("#wf_amount").on("change",function(i){console.log("amount changed: "+i.args.value);$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_amount",i.args.value);aK.f_amount=i.args.value;if(!l){aV();T();ar();aN()}});$("#wf_percentage").jqxNumberInput(Perc1dec);$("#wf_percentage").on("change",function(a2){var a4,a8,ba,a9,a5,a7,i,a6,bb,a3=Math.round(aK.f_percentage*10)/10;a4=a2.args.value;console.log("percentage changed: "+a4+" old: "+a3);aK.f_percent=a4;a8=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if((a3!=a4)&&(a8>1)){ba=$("#fermentableGrid").jqxGrid("getrowdata",u);if(ba.f_adjust_to_total_100){$("#wf_percentage").val(a3)}else{a9=a4-a3;a5=0;for(ad=0;ad<a8;ad++){ba=$("#fermentableGrid").jqxGrid("getrowdata",ad);if(ba.f_added<4){a5+=Math.round(ba.f_amount*1000)/1000}}a5=Math.round(a5*1000)/1000;if(l){a7=Math.round(a5*a9*10)/1000;ba=$("#fermentableGrid").jqxGrid("getrowdata",u);i=Math.round((ba.f_amount+a7)*1000)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_amount",i);$("#wf_amount").val(i);$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_percentage",ba.f_percentage+a9);for(ad=0;ad<a8;ad++){ba=$("#fermentableGrid").jqxGrid("getrowdata",ad);if(ba.f_adjust_to_total_100){i=ba.f_amount-a7;$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",ba.f_percentage-a9);$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_amount",i)}}T();ar();aN()}else{a6=a5*a9/100;for(ad=0;ad<a8;ad++){ba=$("#fermentableGrid").jqxGrid("getrowdata",ad);if(ba.f_added<4){if(ad==u){i=Math.round((ba.f_amount+a6)*1000)/1000;$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_amount",i);$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",a4)}else{i=Math.round((ba.f_amount-(a6/(a8-1)))*1000)/1000;bb=Math.round((i/a5)*1000)/10;$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_amount",i);$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",bb)}}else{$("#fermentableGrid").jqxGrid("setcellvalue",ad,"f_percentage",0)}}T();ar();aN()}}}});$("#wf_max_in_batch").jqxNumberInput(Show1dec);$("#wf_adjust_to_total_100").jqxCheckBox({theme:theme,width:120,height:23});$("#wf_adjust_to_total_100").on("checked",function(a3){if(aK.f_adjust_to_total_100==0){if(l){var a2,a4=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;for(a2=0;a2<a4;a2++){if(a2!=u){$("#fermentableGrid").jqxGrid("setcellvalue",a2,"f_adjust_to_total_100",0)}}}$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_adjust_to_total_100",1);T()}});$("#wf_adjust_to_total_100").on("unchecked",function(i){if(aK.f_adjust_to_total_100!=0){$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_adjust_to_total_100",0);T()}});$("#wf_added").jqxDropDownList({theme:theme,source:AddedAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wf_added").on("select",function(a2){if(a2.args){var i=a2.args.index;$("#fermentableGrid").jqxGrid("setcellvalue",u,"f_added",i);T();ar();aN()}});$("#est_ibu2").jqxTooltip({content:"De bitterheid in IBU. Dit wordt automatisch berekend."});$("#est_ibu2").jqxNumberInput(Smal0dec);$("#hop_flavour").jqxProgressBar({width:300,height:23,theme:theme,showText:true,animationDuration:0,colorRanges:[{stop:20,color:"#004D00"},{stop:40,color:"#008C00"},{stop:60,color:"#00BF00"},{stop:80,color:"#00FF00"},{stop:100,color:"#80FF80"}],renderText:function(a2){var i=parseInt(a2);if(i<20){return"Weinig"}else{if(i<40){return"Matig"}else{if(i<60){return"Redelijk"}else{if(i<80){return"Veel"}else{return"Zeer veel"}}}}}});$("#hop_aroma").jqxProgressBar({width:300,height:23,theme:theme,showText:true,animationDuration:0,colorRanges:[{stop:20,color:"#004D00"},{stop:40,color:"#008C00"},{stop:60,color:"#00BF00"},{stop:80,color:"#00FF00"},{stop:100,color:"#80FF80"}],renderText:function(a2){var i=parseInt(a2);if(i<20){return"Weinig"}else{if(i<40){return"Matig"}else{if(i<60){return"Redelijk"}else{if(i<80){return"Veel"}else{return"Zeer veel"}}}}}});$("#popupHop").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#HopReady"),modalOpacity:0.4});$("#HopReady").jqxButton({template:"success",width:"90px",theme:theme});$("#HopReady").click(function(){var a2,i=$("#hopGrid").jqxGrid("getrowid",a);a2={h_name:$("#wh_name").val(),h_origin:e.h_origin,h_amount:parseFloat($("#wh_amount").jqxNumberInput("decimal"))/1000,h_cost:e.h_cost,h_type:e.h_type,h_form:e.h_form,h_useat:$("#wh_useat").val(),h_time:e.h_time,h_alpha:e.h_alpha,h_beta:e.h_beta,h_hsi:e.h_hsi,h_humulene:e.h_humulene,h_caryophyllene:e.h_caryophyllene,h_cohumulone:e.h_cohumulone,h_myrcene:e.h_myrcene,h_total_oil:e.h_total_oil,h_inventory:e.h_inventory,h_avail:e.h_avail};$("#hopGrid").jqxGrid("updaterow",i,a2);ar()});$("#wh_name").jqxInput({theme:theme,width:320,height:23});$("#wh_instock").jqxCheckBox({theme:theme,height:23});$("#wh_instock").on("change",function(i){hopinstock=i.args.checked;hoplist.dataBind()});$("#wh_select").jqxDropDownList({placeHolder:"Kies hop:",theme:theme,source:hoplist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a2,i,a4){var a3=hoplist.records[a2];return a3.origin+" - "+a3.name+" / "+HopFormData[a3.form].nl+" ("+a3.alpha+" % &alpha;)"}});$("#wh_select").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=hoplist.records[i];$("#wh_name").val(a2.name);e.h_name=a2.name;e.h_origin=a2.origin;e.h_cost=a2.cost;e.h_type=a2.type;e.h_form=a2.form;e.h_alpha=a2.alpha;e.h_beta=a2.beta;e.h_hsi=a2.hsi;e.h_humulene=a2.humulene;e.h_caryophyllene=a2.caryophyllene;e.h_cohumulone=a2.cohumulone;e.h_myrcene=a2.myrcene;e.h_total_oil=a2.total_oil;e.h_inventory=a2.inventory}});$("#wh_amount").jqxNumberInput(Spin1dec);$("#wh_amount").on("change",function(a2){console.log("amount changed: "+a2.args.value+" time:"+e.h_time+" alpha:"+e.h_alpha);var a3,i=parseFloat(a2.args.value)/1000;a3=toIBU(e.h_useat,e.h_form,ak,parseFloat($("#batch_size").jqxNumberInput("decimal")),i,parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());e.h_amount=i;$("#wh_ibu").val(a3)});$("#wh_ibu").jqxNumberInput(Show1dec);$("#wh_time").jqxNumberInput(PosInt);$("#wh_time").on("change",function(i){var a3,a2=parseFloat(i.args.value);if(e.h_useat==2){if(a2>parseFloat($("#boil_time").jqxNumberInput("decimal"))){a2=parseFloat($("#boil_time").jqxNumberInput("decimal"));$("#wh_time").val(a2)}e.h_time=a2}else{if(e.h_useat==4){if(a2>120){a2=120;$("#wh_time").val(a2)}e.h_time=a2}else{if(e.h_useat==5){if(a2>21){a2=21;$("#wh_time").val(a2)}e.h_time=a2*1440}}}a3=toIBU(e.h_useat,e.h_form,ak,parseFloat($("#batch_size").jqxNumberInput("decimal")),parseFloat(e.h_amount),parseFloat(e.h_time),parseFloat(e.h_alpha),$("#ibu_method").val());$("#wh_ibu").val(a3)});$("#wh_useat").jqxDropDownList({theme:theme,source:HopUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wh_useat").on("select",function(a2){if(a2.args){var i=a2.args.index;e.h_useat=i;if((i==0)||(i==1)){e.h_time=parseFloat(d.boil_time);$("#wh_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wh_time").val(e.h_time)}else{if(i==3){e.h_time=0;$("#wh_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wh_time").val(0)}else{$("#wh_time").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}}if(i==5){$("#wh_pmpt_time").html("Tijd in dagen")}else{$("#wh_pmpt_time").html("Tijd in minuten")}}});$("#popupMisc").jqxWindow({width:800,height:275,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#MiscReady"),modalOpacity:0.4});$("#MiscReady").jqxButton({template:"success",width:"90px",theme:theme});$("#MiscReady").click(function(){var a2,i=$("#miscGrid").jqxGrid("getrowid",av);console.log("MiscReady row:"+av+" ID:"+i);a2={m_name:aG.m_name,m_amount:aG.m_amount,m_cost:aG.m_cost,m_type:aG.m_type,m_use_use:aG.m_use_use,m_time:aG.m_time,m_amount_is_weight:aG.m_amount_is_weight,m_inventory:aG.m_inventory,m_avail:aG.m_avail};$("#miscGrid").jqxGrid("updaterow",i,a2);aF()});$("#wm_name").jqxInput({theme:theme,width:320,height:23});$("#wm_instock").jqxCheckBox({theme:theme,height:23});$("#wm_instock").on("change",function(i){miscinstock=i.args.checked;misclist.dataBind()});$("#wm_select").jqxDropDownList({placeHolder:"Kies ingredi&euml;nt:",theme:theme,source:misclist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500});$("#wm_select").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=misclist.records[i];$("#wm_name").val(a2.name);aG.m_name=a2.name;aG.m_cost=a2.cost;aG.m_type=a2.type;aG.m_use_use=a2.use_use;aG.m_amount_is_weight=a2.amount_is_weight;aG.m_inventory=a2.inventory}});$("#wm_amount").jqxNumberInput(Spin2dec);$("#wm_amount").on("change",function(i){console.log("amount changed: "+i.args.value);aG.m_amount=parseFloat(i.args.value)/1000});$("#wm_time").jqxNumberInput(PosInt);$("#wm_time").on("change",function(i){var a2=parseFloat(i.args.value);if(aG.m_use_use==2){if(a2>parseFloat($("#boil_time").jqxNumberInput("decimal"))){a2=parseFloat($("#boil_time").jqxNumberInput("decimal"));$("#wm_time").val(a2)}aG.m_time=a2}else{if((aG.m_use_use==3)||(aG.m_use_use==4)){if(a2>21){a2=21;$("#wm_time").val(a2)}aG.m_time=a2*1440}}});$("#wm_use_use").jqxDropDownList({theme:theme,source:MiscUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wm_use_use").on("select",function(a2){if(a2.args){var i=a2.args.index;aG.m_use_use=i;if((i==2)||(i==3)||(i==4)){$("#wm_time").jqxNumberInput({spinButtons:true,readOnly:false,width:110})}else{$("#wm_time").jqxNumberInput({spinButtons:false,readOnly:true,width:90});$("#wm_time").val(0);aG.m_time=0}}});$("#est_fg2").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg2").jqxNumberInput(Show3dec);$("#est_abv2").jqxTooltip({content:"Alcohol volume %. Dit wordt automatisch berekend."});$("#est_abv2").jqxNumberInput(Smal1dec);$("#yeast_cells").jqxNumberInput(Show1dec);$("#need_cells").jqxNumberInput(Show1dec);$("#plato_cells").jqxNumberInput(Show2dec);$("#popupYeast").jqxWindow({width:800,height:300,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#YeastReady"),modalOpacity:0.4});$("#YeastReady").jqxButton({template:"success",width:"90px",theme:theme});$("#YeastReady").click(function(){var a2,i=$("#yeastGrid").jqxGrid("getrowid",aD);console.log("YeastReady row:"+aD+" ID:"+i);a2={y_name:f.y_name,y_laboratory:f.y_laboratory,y_product_id:f.y_product_id,y_amount:f.y_amount,y_cost:f.y_cost,y_type:f.y_type,y_form:f.y_form,y_flocculation:f.y_flocculation,y_min_temperature:f.y_min_temperature,y_max_temperature:f.y_max_temperature,y_attenuation:f.y_attenuation,y_use:f.y_use,y_cells:f.y_cells,y_tolerance:f.y_tolerance,y_inventory:f.y_inventory,y_avail:f.y_avail};$("#yeastGrid").jqxGrid("updaterow",i,a2);T();X()});$("#wy_name").jqxInput({theme:theme,width:320,height:23});$("#wy_laboratory").jqxInput({theme:theme,width:320,height:23});$("#wy_product_id").jqxInput({theme:theme,width:320,height:23});$("#wy_instock").jqxCheckBox({theme:theme,height:23});$("#wy_instock").on("change",function(i){yeastinstock=i.args.checked;yeastlist.dataBind()});$("#wy_select").jqxDropDownList({placeHolder:"Kies gist:",theme:theme,source:yeastlist,displayMember:"name",width:150,height:23,dropDownWidth:500,dropDownHeight:500,renderer:function(a2,i,a4){var a3=yeastlist.records[a2];return a3.laboratory+" "+a3.product_id+" "+a3.name}});$("#wy_select").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=yeastlist.records[i];$("#wy_name").val(a2.name);$("#wy_laboratory").val(a2.laboratory);$("#wy_product_id").val(a2.product_id);f.y_name=a2.name;f.y_cost=a2.cost;f.y_type=a2.type;f.y_form=a2.form;f.y_laboratory=a2.laboratory;f.y_product_id=a2.product_id;f.y_min_temperature=a2.min_temperature;f.y_max_temperature=a2.max_temperature;f.y_flocculation=a2.flocculation;f.y_attenuation=a2.attenuation;f.y_cells=a2.cells;f.y_inventory=a2.inventory;if(f.y_form==0){$("#wy_pmpt_amount").html("Pak(ken):")}else{if(f.y_form==1){$("#wy_pmpt_amount").html("Gewicht gram:")}else{$("#wy_pmpt_amount").html("Volume ml:")}}T();X()}});$("#wy_amount").jqxNumberInput(Spin1dec);$("#wy_amount").on("change",function(a2){var i=parseFloat(a2.args.value);if(f.y_form!=0){i=parseFloat(a2.args.value)/1000}f.y_amount=i;T();X()});$("#wy_use").jqxDropDownList({theme:theme,source:YeastUseAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true,dropDownVerticalAlignment:"top"});$("#wy_use").on("select",function(a2){if(a2.args){var i=a2.args.index;f.y_use=i;T();X()}});for(ad=1;ad<5;ad++){$("#prop"+ad+"_type").jqxDropDownList({theme:theme,source:StarterTypeAdapter,valueMember:"id",displayMember:"nl",width:120,height:23,autoDropDownHeight:true});$("#prop"+ad+"_type").hide();$("#prop"+ad+"_volume").jqxNumberInput(Spin3dec);$("#prop"+ad+"_volume").hide();$("#prop"+ad+"_irate").jqxNumberInput(Show1dec);$("#prop"+ad+"_irate").hide();$("#prop"+ad+"_ncells").jqxNumberInput(Show1dec);$("#prop"+ad+"_ncells").hide();$("#prop"+ad+"_tcells").jqxNumberInput(Show1dec);$("#prop"+ad+"_tcells").hide();$("#prop"+ad+"_growf").jqxNumberInput(Show2dec);$("#prop"+ad+"_growf").hide()}$("#starter_enable").jqxCheckBox({theme:theme,height:23});$("#starter_type").jqxDropDownList({theme:theme,source:StarterTypeAdapter,valueMember:"id",displayMember:"nl",width:120,height:23,autoDropDownHeight:true});$("#starter_sg").jqxNumberInput(SGopts);$("#starter_viability").jqxNumberInput(Perc0);$("#starter_try").jqxButton({template:"primary",width:"100px",height:23,theme:theme});$("#mash_name").jqxTooltip({content:"De omschrijving van dit maisch profiel."});$("#mash_name").jqxInput({theme:theme,width:320,height:23});$("#mash_select").jqxDropDownList({placeHolder:"Kies schema:",theme:theme,source:mashlist,displayMember:"name",width:250,height:23,dropDownWidth:500,dropDownHeight:500,dropDownHorizontalAlignment:"right"});$("#mash_select").on("select",function(a6){if(a6.args){var a8,a5,a2,a7,a4,a9={},a3=a6.args.index;a2=new Array();a7=$("#mashGrid").jqxGrid("getdisplayrows");for(a4=0;a4<a7.length;a4++){a9=a7[a4];a2.push(a9.uid)}$("#mashGrid").jqxGrid("deleterow",a2);a5=mashlist.records[a3];$("#mash_name").val(a5.name);for(a4=0;a4<a5.steps.length;a4++){a8=a5.steps[a4];a9.step_name=a8.step_name;a9.step_type=a8.step_type;if(C==0&&d.w1_amount>0){C=d.w1_amount}if(a4==0){a9.step_infuse_amount=C}else{a9.step_infuse_amount=0}if(ao>0){a9.step_thickness=parseFloat(C/ao)}else{a9.step_thickness=0}a9.step_temp=a8.step_temp;a9.end_temp=a8.end_temp;a9.step_time=a8.step_time;a9.ramp_time=a8.ramp_time;$("#mashGrid").jqxGrid("addrow",null,a9)}}});$("#popupMash").jqxWindow({width:800,height:350,position:{x:230,y:100},resizable:false,theme:theme,isModal:true,autoOpen:false,cancelButton:$("#MashReady"),modalOpacity:0.4});$("#MashReady").jqxButton({template:"success",width:"90px",theme:theme});$("#MashReady").click(function(){aN()});$("#wstep_name").jqxInput({theme:theme,width:320,height:23});$("#wstep_name").on("change",function(i){var a2=$("#mashGrid").jqxGrid("getrowdata",aj);a2.step_name=i.args.value});$("#wstep_type").jqxDropDownList({theme:theme,source:MashStepTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#wstep_type").on("select",function(a4){if(a4.args){var a7,a3,a5,a6,a2=a4.args.index;a7=$("#mashGrid").jqxGrid("getrowdata",aj);a7.step_type=a2;if(a2==0){$("#wstep_infuse_amount").show();$("#wstep_pmpt").show()}else{a7.step_infuse_amount=0;$("#wstep_infuse_amount").hide();$("#wstep_pmpt").hide()}C=0;a5=$("#mashGrid").jqxGrid("getrows");for(a3=0;a3<a5.length;a3++){a6=a5[a3];if(a6.step_type==0){C+=parseFloat(a6.step_infuse_amount)}}}});$("#wstep_temp").jqxNumberInput(Spin1dec);$("#wstep_temp").on("change",function(i){var a2=$("#mashGrid").jqxGrid("getrowdata",aj);a2.step_temp=parseFloat(i.args.value)});$("#wend_temp").jqxNumberInput(Spin1dec);$("#wend_temp").on("change",function(i){var a2=$("#mashGrid").jqxGrid("getrowdata",aj);a2.end_temp=parseFloat(i.args.value)});$("#wstep_time").jqxNumberInput(PosInt);$("#wstep_time").on("change",function(i){var a2=$("#mashGrid").jqxGrid("getrowdata",aj);a2.step_time=parseFloat(i.args.value)});$("#wramp_time").jqxNumberInput(PosInt);$("#wramp_time").on("change",function(i){var a2=$("#mashGrid").jqxGrid("getrowdata",aj);a2.ramp_time=parseFloat(i.args.value)});$("#wstep_infuse_amount").jqxNumberInput(Spin1dec);$("#wstep_infuse_amount").on("change",function(a3){var a5,a2,a4,a6=$("#mashGrid").jqxGrid("getrowdata",aj);a6.step_infuse_amount=parseFloat(a3.args.value);C=0;a4=$("#mashGrid").jqxGrid("getrows");for(a2=0;a2<a4.length;a2++){a5=a4[a2];if(a5.step_type==0){C+=parseFloat(a5.step_infuse_amount)}}if(d.w2_amount==0){d.w1_amount=C;$("#w1_amount").val(C)}else{d.w1_amount=(d.w1_amount/(d.w1_amount+d.w2_amount))*C;d.w2_amount=(d.w2_amount/(d.w1_amount+d.w2_amount))*C;$("#w1_amount").val(d.w1_amount);$("#w2_amount").val(d.w2_amount)}$("#wg_amount").val(C)});$("#tgt_bu").jqxNumberInput(Show2wat);$("#tgt_cl_so4").jqxNumberInput(Show1wat);$("#got_cl_so4").jqxNumberInput(Show1wat);$("#w1_name").jqxDropDownList({placeHolder:"Kies hoofd water:",theme:theme,source:waterlist,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:400});$("#w1_name").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=waterlist.records[i];d.w1_name=a2.name;$("#w1_calcium").val(a2.calcium);d.w1_calcium=a2.calcium;$("#w1_sulfate").val(a2.sulfate);d.w1_sulfate=a2.sulfate;$("#w1_chloride").val(a2.chloride);d.w1_chloride=a2.chloride;$("#w1_sodium").val(a2.sodium);d.w1_sodium=a2.sodium;$("#w1_magnesium").val(a2.magnesium);d.w1_magnesium=a2.magnesium;$("#w1_total_alkalinity").val(a2.total_alkalinity);d.w1_total_alkalinity=a2.total_alkalinity;$("#w1_ph").val(a2.ph);d.w1_ph=a2.ph;$("#w1_cost").val(a2.cost);d.w1_cost=a2.cost;P()}});$("#w1_amount").jqxNumberInput(Show1wat);$("#w1_calcium").jqxNumberInput(Show1wat);$("#w1_magnesium").jqxNumberInput(Show1wat);$("#w1_sodium").jqxNumberInput(Show1wat);$("#w1_total_alkalinity").jqxNumberInput(Show1wat);$("#w1_chloride").jqxNumberInput(Show1wat);$("#w1_sulfate").jqxNumberInput(Show1wat);$("#w1_ph").jqxNumberInput(Show1wat);$("#w2_name").jqxDropDownList({placeHolder:"Kies meng water:",theme:theme,source:waterlist,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:400});$("#w2_name").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=waterlist.records[i];d.w2_name=a2.name;$("#w2_calcium").val(a2.calcium);d.w2_calcium=a2.calcium;$("#w2_sulfate").val(a2.sulfate);d.w2_sulfate=a2.sulfate;$("#w2_chloride").val(a2.chloride);d.w2_chloride=a2.chloride;$("#w2_sodium").val(a2.sodium);d.w2_sodium=a2.sodium;$("#w2_magnesium").val(a2.magnesium);d.w2_magnesium=a2.magnesium;$("#w2_total_alkalinity").val(a2.total_alkalinity);d.w2_total_alkalinity=a2.total_alkalinity;$("#w2_ph").val(a2.ph);d.w2_ph=a2.ph;$("#w2_cost").val(a2.cost);d.w2_cost=a2.cost;$("#w2_amount").jqxNumberInput({max:100000,readOnly:false});P()}});$("#w2_amount").jqxTooltip({content:"De verdeling van het hoofd en meng water. Het totale maisch water volume blijft gelijk."});$("#w2_amount").jqxNumberInput({inputMode:"simple",spinMode:"simple",theme:theme,width:94,height:23,min:0,max:0,decimalDigits:1,spinButtons:true,spinButtonsStep:0.5,readOnly:true});$("#w2_calcium").jqxNumberInput(Show1wat);$("#w2_magnesium").jqxNumberInput(Show1wat);$("#w2_sodium").jqxNumberInput(Show1wat);$("#w2_total_alkalinity").jqxNumberInput(Show1wat);$("#w2_chloride").jqxNumberInput(Show1wat);$("#w2_sulfate").jqxNumberInput(Show1wat);$("#w2_ph").jqxNumberInput(Show1wat);$("#wg_amount").jqxNumberInput(Show1wat);$("#wg_calcium").jqxNumberInput(Show1wat);$("#wg_magnesium").jqxNumberInput(Show1wat);$("#wg_sodium").jqxNumberInput(Show1wat);$("#wg_total_alkalinity").jqxNumberInput(Show1wat);$("#wg_chloride").jqxNumberInput(Show1wat);$("#wg_sulfate").jqxNumberInput(Show1wat);$("#wg_ph").jqxNumberInput(Show1wat);$("#wb_calcium").jqxTooltip({content:"De ideale hoeveelheid Calcium is tussen 40 en 150."});$("#wb_calcium").jqxNumberInput(Show1wat);$("#wb_magnesium").jqxTooltip({content:"De ideale hoeveelheid Magnesium is lager dan 30."});$("#wb_magnesium").jqxNumberInput(Show1wat);$("#wb_sodium").jqxTooltip({content:"De ideale hoeveelheid Natrium is lager dan 150."});$("#wb_sodium").jqxNumberInput(Show1wat);$("#wb_total_alkalinity").jqxNumberInput(Show1wat);$("#wb_chloride").jqxTooltip({content:"De ideale hoeveelheid Chloride is tussen 50 en 100."});$("#wb_chloride").jqxNumberInput(Show1wat);$("#wb_sulfate").jqxTooltip({content:"De ideale hoeveelheid Sulfaat is tussen 50 en 350."});$("#wb_sulfate").jqxNumberInput(Show1wat);$("#wb_ph").jqxNumberInput(Show1wat);$("#pr_name").jqxDropDownList({placeHolder:"Kies doel profiel:",theme:theme,source:waterprofiles,displayMember:"name",width:250,height:27,dropDownWidth:400,dropDownHeight:300});$("#pr_name").on("select",function(a3){if(a3.args){var a2,i=a3.args.index;a2=waterprofiles.records[i];$("#pr_calcium").val(a2.calcium);$("#pr_sulfate").val(a2.sulfate);$("#pr_chloride").val(a2.chloride);$("#pr_sodium").val(a2.sodium);$("#pr_magnesium").val(a2.magnesium);$("#pr_total_alkalinity").val(a2.total_alkalinity)}});$("#pr_calcium").jqxNumberInput(Show1wat);$("#pr_magnesium").jqxNumberInput(Show1wat);$("#pr_sodium").jqxNumberInput(Show1wat);$("#pr_total_alkalinity").jqxNumberInput(Show1wat);$("#pr_chloride").jqxNumberInput(Show1wat);$("#pr_sulfate").jqxNumberInput(Show1wat);$("#wa_cacl2").jqxTooltip({content:"Voor het maken van een ander waterprofiel. Voegt calcium en chloride toe. Voor het verbeteren van zoetere bieren."});$("#wa_cacl2").jqxNumberInput(Spin1dec);$("#wa_caso4").jqxTooltip({content:"Gips. Voor het maken van een ander waterprofiel. Voegt calcium en sulfaat toe. Voor het verbeteren van bittere bieren."});$("#wa_caso4").jqxNumberInput(Spin1dec);$("#wa_mgso4").jqxTooltip({content:"Epsom zout. Voor het maken van een ander waterprofiel. Voegt magnesium en sulfaat toe. Gebruik spaarzaam!"});$("#wa_mgso4").jqxNumberInput(Spin1dec);$("#wa_nacl").jqxTooltip({content:"Keukenzout. Voor het maken van een ander waterprofiel. Voegt natrium en chloride toe. Voor het accentueren van zoetheid. Bij hoge dosering wordt het bier ziltig."});$("#wa_nacl").jqxNumberInput(Spin1dec);$("#mash_ph").jqxTooltip({content:"Maisch pH tussen 5.2 en 5.6. Gebruik 5.2 voor lichte en 5.5 voor donkere bieren."});$("#mash_ph").jqxNumberInput(SpinpH);$("#calc_acid").jqxCheckBox({theme:theme,width:120,height:23});$("#wa_base_name").jqxDropDownList({theme:theme,source:BaseTypeAdapter,valueMember:"id",displayMember:"nl",width:170,height:23,autoDropDownHeight:true});$("#wa_base").jqxNumberInput(Spin2dec);$("#wa_base").jqxNumberInput({symbol:" gr",symbolPosition:"right"});$("#wa_acid_name").jqxDropDownList({theme:theme,source:AcidTypeAdapter,valueMember:"id",displayMember:"nl",width:170,height:23,autoDropDownHeight:true});$("#wa_acid").jqxNumberInput(Spin2dec);$("#wa_acid").jqxNumberInput({symbol:" ml",symbolPosition:"right"});$("#wa_acid_perc").jqxNumberInput(Perc0);$("#wa_acid_perc").jqxNumberInput({width:70,symbol:"%",symbolPosition:"right"});$("#sparge_temp").jqxNumberInput(Spin1dec);$("#sparge_volume").jqxNumberInput(Spin1dec);$("#sparge_ph").jqxNumberInput(SpinpH);$("#sparge_source").jqxDropDownList({theme:theme,source:SpargeSourceAdapter,valueMember:"id",displayMember:"nl",width:110,height:23,autoDropDownHeight:true});$("#sparge_acid_amount").jqxNumberInput(Spin2dec);$("#sparge_acid_amount").jqxNumberInput({spinButtons:false,readOnly:true,symbol:" ml",symbolPosition:"right"});$("#sparge_acid_type").jqxDropDownList({theme:theme,source:AcidTypeAdapter,valueMember:"id",displayMember:"nl",width:110,height:23,autoDropDownHeight:true});$("#sparge_acid_perc").jqxNumberInput(Perc0);$("#sparge_acid_perc").jqxNumberInput({symbol:"%",symbolPosition:"right"});$("#brew_date_start").jqxTooltip({content:"Brouw datum en tijd. Voor planning laat de tijd op 00:00:00 staan."});$("#brew_date_start").jqxDateTimeInput(DateTimeopts);$("#brew_date_start").on("close",function(i){aU()});$("#brew_date_end").jqxTooltip({content:"End datum en tijd van de brouw. Leeg laten als er nog niet gebrouwen is."});$("#brew_date_end").jqxDateTimeInput(DateTimeopts);$("#brew_date_end").on("close",function(i){aU()});$("#brew_mash_ph").jqxTooltip({content:"De gemeten pH tijdens het maischen eventueel na correctie."});$("#brew_mash_ph").jqxNumberInput(SpinpH);$("#est_mash_ph").jqxTooltip({content:"De gewenste pH tijdens het maischen."});$("#est_mash_ph").jqxNumberInput(Show1wat);$("#brew_preboil_ph").jqxTooltip({content:"De gemeten pH in de kookketel na het spoelen en voor de kook."});$("#brew_preboil_ph").jqxNumberInput(SpinpH);$("#brew_aboil_ph").jqxTooltip({content:"De gemeten pH na het koken."});$("#brew_aboil_ph").jqxNumberInput(SpinpH);$("#brew_mash_sg").jqxTooltip({content:"Het bereikte SG na het maischen."});$("#brew_mash_sg").jqxNumberInput(SGopts);$("#brew_mash_sg").on("valueChanged",function(){aZ()});$("#est_mash_sg").jqxTooltip({content:"Het berekende verwachte SG na het maischen."});$("#est_mash_sg").jqxNumberInput(Show3wat);$("#brew_preboil_sg").jqxTooltip({content:"Het gemeten SG in de kookketel na het spoelen en voor het koken."});$("#brew_preboil_sg").jqxNumberInput(SGopts);$("#brew_preboil_sg").on("valueChanged",function(i){d.brew_preboil_sg=i.args.value;w()});$("#est_pre_sg").jqxTooltip({content:"Het berekende SG in de kookketel na het spoelen en voor het koken."});$("#est_pre_sg").jqxNumberInput(Show3wat);$("#brew_aboil_sg").jqxTooltip({content:"Het gemeten SG in de kookketel na het koken."});$("#brew_aboil_sg").jqxNumberInput(SGopts);$("#brew_aboil_sg").on("valueChanged",function(i){d.brew_aboil_sg=i.args.value;R();T();ar()});$("#est_og3").jqxTooltip({content:"Het gewenste SG in de kookketel na het koken."});$("#est_og3").jqxNumberInput(Show3wat);$("#brew_mash_efficiency").jqxTooltip({content:"Het behaalde maisch rendement."});$("#brew_mash_efficiency").jqxNumberInput(Show1dec);$("#brew_preboil_volume").jqxTooltip({content:"Het gemeten volume van het wort voor het koken."});$("#brew_preboil_volume").jqxNumberInput(Spin1dec);$("#brew_preboil_volume").on("valueChanged",function(i){d.brew_preboil_volume=i.args.value;w()});$("#est_pre_vol").jqxTooltip({content:"Het berekende volume van het wort voor het koken."});$("#est_pre_vol").jqxNumberInput(Show1wat);$("#brew_aboil_volume").jqxTooltip({content:"Het gemeten volume van het wort na het koken."});$("#brew_aboil_volume").jqxNumberInput(Spin1dec);$("#brew_aboil_volume").on("valueChanged",function(i){d.brew_aboil_volume=i.args.value;R();T();ar()});$("#est_a_vol").jqxTooltip({content:"Het gewenste volume na het koken."});$("#est_a_vol").jqxNumberInput(Show1wat);$("#brew_preboil_efficiency").jqxTooltip({content:"Het berekende rendement voor het koken."});$("#brew_preboil_efficiency").jqxNumberInput(Show1dec);$("#brew_aboil_efficiency").jqxTooltip({content:"Het bereikte rendement na het koken."});$("#brew_aboil_efficiency").jqxNumberInput(Show1dec);$("#brew_sparge_temperature").jqxTooltip({content:"De spoelwater temperatuur, in te stellen in de Water tab."});$("#brew_sparge_temperature").jqxNumberInput(Show1dec);$("#brew_sparge_volume").jqxTooltip({content:"Het spoelwater voorraad volume, in te stellen in de Water tab."});$("#brew_sparge_volume").jqxNumberInput(Show1dec);$("#brew_sparge_est").jqxNumberInput(Show1dec);$("#brew_whirlpool9").jqxNumberInput(PosInt);$("#brew_whirlpool9").jqxNumberInput({max:120});$("#brew_cooling_to").jqxNumberInput(Spin1dec);$("#brew_sparge_ph").jqxNumberInput(SpinpH);$("#brew_whirlpool7").jqxNumberInput(PosInt);$("#brew_whirlpool7").jqxNumberInput({max:120});$("#brew_cooling_method").jqxDropDownList({theme:theme,source:CoolingTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#brew_whirlpool6").jqxNumberInput(PosInt);$("#brew_whirlpool6").jqxNumberInput({max:120});$("#brew_cooling_time").jqxNumberInput(PosInt);$("#brew_cooling_time").jqxNumberInput({max:1440});$("#brew_whirlpool2").jqxNumberInput(PosInt);$("#brew_whirlpool2").jqxNumberInput({max:120});$("#brew_aeration_type").jqxDropDownList({theme:theme,source:AerationTypeAdapter,valueMember:"id",displayMember:"nl",width:180,height:23,autoDropDownHeight:true});$("#brew_aeration_time").jqxNumberInput(PosInt);$("#brew_aeration_time").jqxNumberInput({max:1440});$("#brew_aeration_speed").jqxNumberInput(PosInt);$("#brew_aeration_speed").jqxNumberInput({max:1440});$("#brew_fermenter_volume").jqxNumberInput(Show1dec);$("#brew_fermenter_extrawater").jqxNumberInput(Spin1dec);$("#brew_fermenter_sg").jqxNumberInput(Show3dec);$("#brew_fermenter_tcloss").jqxNumberInput(Spin1dec);$("#brew_fermenter_ibu").jqxNumberInput(Show0dec);$("#brew_fermenter_color").jqxNumberInput(Show0dec);$("#BLog").jqxButton({template:"info",width:"150px",theme:theme});$("#BLog").click(function(){window.open("log_brew.php?code="+d.code+"&name="+d.name)});$("#brew_fermenter_sg2").jqxTooltip({content:"Het behaalde SG in het gistvat, overgenomen van de brouwdag."});$("#brew_fermenter_sg2").jqxNumberInput(Show3dec);$("#primary_start_temp").jqxTooltip({content:"De begintemperatuur van de hoofdvergisting."});$("#primary_start_temp").jqxNumberInput(YeastT);$("#primary_max_temp").jqxTooltip({content:"De hoogst bereikte piek temperatuur tijdens de hoofgvergisting."});$("#primary_max_temp").jqxNumberInput(YeastT);$("#primary_end_temp").jqxTooltip({content:"De eind temperatuur van de hoofdvergisting."});$("#primary_end_temp").jqxNumberInput(YeastT);$("#primary_end_sg").jqxTooltip({content:"Het gemeten SG aan het eind van de hoofdvergisting."});$("#primary_end_sg").jqxNumberInput(SGopts);$("#primary_end_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#primary_end_brix").jqxNumberInput(Spin1dec);$("#primary_svg").jqxTooltip({content:"De schijnbare vergisting graad behaald na de hoofdgisting."});$("#primary_svg").jqxNumberInput(Show1dec);$("#primary_end_date").jqxTooltip({content:"De eind datum van de hoofdvergisting en eventueel overhevelen."});$("#primary_end_date").jqxDateTimeInput(Dateopts);$("#primary_end_date").on("close",function(i){aU()});$("#secondary_temp").jqxNumberInput(YeastT);$("#secondary_end_sg").jqxTooltip({content:"Het gemeten SG aan het eind van de navergisting."});$("#secondary_end_sg").jqxNumberInput(SGopts);$("#secondary_end_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#secondary_end_brix").jqxNumberInput(Spin1dec);$("#secondary_svg").jqxTooltip({content:"De schijnbare vergisting graad behaald na de nagisting."});$("#secondary_svg").jqxNumberInput(Show1dec);$("#secondary_end_date").jqxTooltip({content:"De eind datum van de navergisting en het begin van het lageren."});$("#secondary_end_date").jqxDateTimeInput(Dateopts);$("#secondary_end_date").on("close",function(i){aU()});$("#tertiary_temp").jqxNumberInput(YeastT);$("#fg").jqxNumberInput(Spin3dec);$("#est_fg3").jqxTooltip({content:"Het verwachte eind SG. Dit wordt automatisch berekend."});$("#est_fg3").jqxNumberInput(Show3dec);$("#final_brix").jqxTooltip({content:"Hulpfinctie: de afgelezen &deg;Brix RI waarde met een refractometer."});$("#final_brix").jqxNumberInput(Spin1dec);$("#final_abv").jqxNumberInput(Show2dec);$("#final_svg").jqxNumberInput(Show1dec);$("#FLog").jqxButton({template:"info",width:"150px",theme:theme});$("#FLog").click(function(){var i="log_fermentation.php?code="+d.code+"&name="+d.name;window.open(i)});$("#package_date").jqxTooltip({content:"De verpakkings datum van dit bier."});$("#package_date").jqxDateTimeInput(Dateopts);$("#package_date").on("close",function(i){aU()});$("#package_volume").jqxTooltip({content:"Het beschikbare volume om te bottelen of op fust te zetten."});$("#package_volume").jqxNumberInput(Spin1dec);$("#package_infuse_amount").jqxTooltip({content:"De hoeveelheid water of drank extra toe te voegen."});$("#package_infuse_amount").jqxNumberInput(Spin3dec);$("#package_infuse_abv").jqxTooltip({content:"De hoeveelheid alcohol in de drank, of 0.0 als het water is."});$("#package_infuse_abv").jqxNumberInput(Spin1dec);$("#package_infuse_notes").jqxTooltip({content:"Omschrijving van de extra toevoeging."});$("#package_infuse_notes").jqxInput({theme:theme,width:640,height:23});$("#package_abv").jqxTooltip({content:"De uiteindelijke hoeveelheid alcohol volume %."});$("#package_abv").jqxNumberInput(Show2dec);$("#package_ph").jqxTooltip({content:"De gemeten pH vlak voor het verpakken."});$("#package_ph").jqxNumberInput(SpinpH);$("#st_carb_min2").jqxTooltip({content:"Het minimum aanbevolen koolzuur volume voor deze bierstijl."});$("#st_carb_min2").jqxNumberInput(Smal1dec);$("#st_carb_max2").jqxTooltip({content:"Het maximum aamnevolen koolzuur volume voor deze bierstijl."});$("#st_carb_max2").jqxNumberInput(Smal1dec);$("#bottle_amount").jqxTooltip({content:"De totale hoeveelheid te bottelen bier."});$("#bottle_amount").jqxNumberInput(Spin1dec);$("#keg_amount").jqxTooltip({content:"De totale hoeveelheid op fust te zetten bier."});$("#keg_amount").jqxNumberInput(Spin1dec);$("#bottle_carbonation").jqxTooltip({content:"Het gewenste CO2 volume in de flessen."});$("#bottle_carbonation").jqxNumberInput(Spin2dec);$("#bottle_carbonation").jqxNumberInput({max:5});$("#keg_carbonation").jqxTooltip({content:"Het gewenste CO2 volume door de suiker in de fusten."});$("#keg_carbonation").jqxNumberInput(Spin2dec);$("#keg_carbonation").jqxNumberInput({max:5});$("#bottle_priming_sugar").jqxDropDownList({placeHolder:"Kies suiker:",theme:theme,source:fermentablesugars,displayMember:"name",width:200,height:23,dropDownWidth:300,dropDownHeight:400});$("#bottle_priming_sugar").on("select",function(a6){if(a6.args){var a8,a2,a5=-1,a4,a7,a3,a9={};a2=a6.args.index;a4=fermentablesugars.records[a2];a7=$("#fermentableGrid").jqxGrid("getrows");for(a3=0;a3<a7.length;a3++){if(a7[a3].f_added==4){a5=a3}}a9.f_name=a4.name;a9.f_origin=a4.origin;a9.f_supplier=a4.supplier;a9.f_amount=parseFloat($("#bottle_priming_total").jqxNumberInput("decimal"))/1000;a9.f_cost=a4.cost;a9.f_type=a4.type;a9.f_yield=a4.yield;a9.f_color=a4.color;a9.f_coarse_fine_diff=a4.coarse_fine_diff;a9.f_moisture=a4.moisture;a9.f_diastatic_power=a4.diastatic_power;a9.f_protein=a4.protein;a9.f_max_in_batch=a4.max_in_batch;a9.f_graintype=a4.graintype;a9.f_added=4;a9.f_dissolved_protein=a4.dissolved_protein;a9.f_recommend_mash=a4.recommend_mash;a9.f_add_after_boil=1;a9.f_adjust_to_total_100=0;a9.f_percentage=0;a9.f_di_ph=a4.di_ph;a9.f_acid_to_ph_57=a4.acid_to_ph_57;a9.f_inventory=a4.inventory;if(a5>=0){a8=$("#fermentableGrid").jqxGrid("getrowid",a5);$("#fermentableGrid").jqxGrid("updaterow",a8,a9)}else{$("#fermentableGrid").jqxGrid("addrow",null,a9)}aR()}});$("#keg_priming_sugar").jqxDropDownList({placeHolder:"Kies suiker:",theme:theme,source:fermentablesugars,displayMember:"name",width:200,height:23,dropDownWidth:300,dropDownHeight:400});$("#keg_priming_sugar").on("select",function(a6){if(a6.args){var a8,a2,a5=-1,a4,a7,a3,a9={};a2=a6.args.index;a4=fermentablesugars.records[a2];a7=$("#fermentableGrid").jqxGrid("getrows");for(a3=0;a3<a7.length;a3++){if(a7[a3].f_added==5){a5=a3}}a9.f_name=a4.name;a9.f_origin=a4.origin;a9.f_supplier=a4.supplier;a9.f_amount=parseFloat($("#keg_priming_total").jqxNumberInput("decimal"))/1000;a9.f_cost=a4.cost;a9.f_type=a4.type;a9.f_yield=a4.yield;a9.f_color=a4.color;a9.f_coarse_fine_diff=a4.coarse_fine_diff;a9.f_moisture=a4.moisture;a9.f_diastatic_power=a4.diastatic_power;a9.f_protein=a4.protein;a9.f_max_in_batch=a4.max_in_batch;a9.f_graintype=a4.graintype;a9.f_added=5;a9.f_dissolved_protein=a4.dissolved_protein;a9.f_recommend_mash=a4.recommend_mash;a9.f_add_after_boil=1;a9.f_adjust_to_total_100=0;a9.f_percentage=0;a9.f_di_ph=a4.di_ph;a9.f_acid_to_ph_57=a4.acid_to_ph_57;a9.f_inventory=a4.inventory;if(a5>=0){a8=$("#fermentableGrid").jqxGrid("getrowid",a5);$("#fermentableGrid").jqxGrid("updaterow",a8,a9)}else{$("#fermentableGrid").jqxGrid("addrow",null,a9)}aR()}});$("#bottle_priming_amount").jqxNumberInput(Show1dec);$("#bottle_priming_water").jqxTooltip({content:"De hoeveelheid water om de suiker op te lossen."});$("#bottle_priming_water").jqxNumberInput(Spin3dec);$("#keg_priming_amount").jqxNumberInput(Show1dec);$("#keg_priming_water").jqxTooltip({content:"De hoeveelheid water om de suiker op te lossen."});$("#keg_priming_water").jqxNumberInput(Spin3dec);$("#bottle_priming_total").jqxNumberInput(Show1dec);$("#bottle_pressure").jqxTooltip({content:"De maximaal te verwachten druk tijdens het hergisten."});$("#bottle_pressure").jqxNumberInput(Show1dec);$("#keg_priming_total").jqxNumberInput(Show1dec);$("#keg_forced_carb").jqxCheckBox({theme:theme,width:120,height:23});$("#keg_pressure").jqxNumberInput(Show1dec);$("#bottle_abv").jqxNumberInput(Show2dec);$("#keg_abv").jqxNumberInput(Show2dec);$("#bottle_carbonation_temp").jqxNumberInput(YeastT);$("#keg_carbonation_temp").jqxNumberInput(YeastT);$("#taste_date").jqxTooltip({content:"De proef datum van dit bier."});$("#taste_date").jqxDateTimeInput(Dateopts);$("#taste_date").on("close",function(i){aU()});$("#taste_rate").jqxTooltip({content:"Het cijfer voor dit bier van 1 tot 10."});$("#taste_rate").jqxNumberInput(Spin1dec);$("#taste_rate").jqxNumberInput({max:10});$("#taste_color").jqxTooltip({content:"De kleur van het bier."});$("#taste_color").jqxInput({theme:theme,width:320,height:23});$("#taste_transparency").jqxTooltip({content:"De helderheid van het bier."});$("#taste_transparency").jqxInput({theme:theme,width:320,height:23});$("#taste_head").jqxTooltip({content:"Het schuim op het bier."});$("#taste_head").jqxInput({theme:theme,width:320,height:23});$("#taste_aroma").jqxTooltip({content:"Het aroma van het bier."});$("#taste_aroma").jqxInput({theme:theme,width:960,height:23});$("#taste_taste").jqxTooltip({content:"De smaak van het bier."});$("#taste_taste").jqxInput({theme:theme,width:960,height:23});$("#taste_aftertaste").jqxTooltip({content:"De nasmaak van het bier."});$("#taste_aftertaste").jqxInput({theme:theme,width:960,height:23});$("#taste_mouthfeel").jqxTooltip({content:"Het mondgevoelvan het bier."});$("#taste_mouthfeel").jqxInput({theme:theme,width:960,height:23});$("#taste_notes").jqxTooltip({content:"Het oordeel en opmerkingen over dit bier."});$("#taste_notes").jqxInput({theme:theme,width:960,height:100});$("#jqxTabs").jqxTabs({theme:theme,width:1280,height:660,autoHeight:false,position:"top"});$("#Export").jqxButton({template:"info",width:"80px",theme:theme});$("#Export").bind("click",function(){s();var i="prod_export.php?record="+my_record+"&return="+my_return+"&select="+my_select+"&code="+d.code+"&name="+d.name;window.location.href=i});$("#Delete").jqxButton({template:"danger",width:"80px",theme:theme});$("#Delete").bind("click",function(){$("#eventWindow").jqxWindow("open");$("#delOk").click(function(){var i="delete=true&"+$.param({uuid:d.uuid});$.ajax({dataType:"json",url:E,cache:false,data:i,type:"POST",success:function(a3,a2,a4){window.location.href=my_return},error:function(a2,a4,a3){}})})});$("#Cancel").jqxButton({template:"primary",width:"80px",theme:theme});$("#Cancel").bind("click",function(){window.location.href=my_return});$("#Save").jqxButton({template:"success",width:"80px",theme:theme});$("#Save").bind("click",function(){s();window.location.href=my_return});createDelElements()});
\ No newline at end of file
--- a/www/js/prod_edit.js	Fri Sep 06 14:11:56 2019 +0200
+++ b/www/js/prod_edit.js	Fri Sep 06 22:59:59 2019 +0200
@@ -46,2876 +46,63 @@
 
 $(document).ready(function () {
 
-	var	to_100 = false;		// Fermentables adjust to 100%
-	var     preboil_sg = 0;
-	var	aboil_sg = 0;
-	var	est_mash_sg = 0;
-	var     psugar = 0;		// Percentage real sugars
-	var     pcara = 0;		// Percentage cara/crystal malts
-	var     svg = 77;               // Default attenuation
-        var     mashkg = 0;             // Malt in mash weight
-	var	pitchrate = 0.75;	// Yeast pitch rate default
-	var	initcells = 0;		// Initial yeast cell count
-
-	var	ok_fermentables = 1;	// Fermentables are in stock
-	var	ok_hops = 1;		// Hops are in stock
-	var	ok_miscs = 1;		// Miscs are in stock
-	var	ok_yeasts = 1;		// Yeasts are in stock
-	var	ok_waters = 1;		// Waters are in stock
-
-        var     hop_flavour = 0;
-        var     hop_aroma = 0;
-        var     mash_infuse = 0;
-        var     last_base = '';
-        var     last_acid = '';
-
-        var     MMCa = 40.048;
-        var     MMMg = 24.305;
-        var     MMNa = 22.98976928;
-        var     MMCl = 35.453;
-        var     MMSO4 = 96.0626;
-        var     MMHCO3 = 61.01684;
-        var     MMCaSO4 = 172.171;
-        var     MMCaCl2 = 147.015;
-        var     MMCaCO3 = 100.087;
-        var     MMMgSO4 = 246.475;
-        var     MMNaHCO3 = 84.007;
-        var     MMNa2CO3 = 105.996;
-        var     MMNaCl = 58.443;
-        var     MMCaOH2 = 74.06268;
-
-	var     fermentableRow = 0;
-	var     fermentableData = {};
-	var	fermentableInit = 1;
-	var     hopRow = 0;
-	var     hopData = {};
-	var     miscRow = 0;
-	var     miscData = {};
-	var     yeastRow = 0;
-	var     yeastData = {};
-	var     mashRow = 0;
-	var     mashData = {};
-
-	/*
-	 * Remove the top menu so that we MUST use the buttons to leave the editor.
-	 */
-	$('#jqxMenu').jqxMenu('destroy');
-
-	console.log("record:" + my_record + "  return:" + my_return + "  theme:" + theme);
-        $("#jqxLoader").jqxLoader({width:250,height:150,isModal:true,text:"Laden product ...",theme:theme});
-
-	function calcSupplies() {
-		if (dataRecord.inventory_reduced > 6) {
-			$("#ok_pmpt").hide();
-			return;
-		}
-		if (ok_fermentables && ok_hops && ok_miscs && ok_yeasts && ok_waters)
-			$("#ok_supplies").html("<img src='images/dialog-ok-apply.png'>");
-                else
-                        $("#ok_supplies").html("<img src='images/dialog-error.png'>");
-	}
-
-	function calcPercentages() {
-
-		console.log("calcPercentages()");
-		var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount > 1) {
-			var tw = 0;
-			for (i = 0; i < rowscount; i++) {
-				var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
-				if (rowdata.f_added < 4)
-					tw += Math.round(rowdata.f_amount * 1000) / 1000;
-			};
-			tw = Math.round(tw * 1000) / 1000;
-
-			for (i = 0; i < rowscount; i++) {
-				var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
-				if (rowdata.f_added < 4) {
-					var percentage = Math.round(rowdata.f_amount / tw * 1000) / 10.0;
-					$("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", percentage);
-				} else {
-					$("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", 0);
-				}
-			};
-		} else {
-			$("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100);
-		}
-	}
-
-	/* 
-	 * All calculations that depend on changes in the fermentables,
- 	 * volumes and equipments.
-	 */
-	function calcFermentables() {
-
-		var sugarsf = 0;	// fermentable sugars mash + boil
-		var sugarsm = 0;	// fermentable sugars in mash
-		psugar = 0;
-		pcara = 0;
-		mashkg = 0;
-		ok_fermentables = 1;	// All is in stock.
-		ok_yeasts = 1;
-		var vol = 0;		// Volume sugars after boil
-		var addedS = 0;		// Added sugars after boil
-		var addedmass = 0;	// Added mass after boil
-		var mvol = 0;		// mash volume
-		var colort = 0;		// Colors srm * vol totals
-		var colorh = 0;		// Colors ebc * vol * kt
-		var colorn = 0;		// Colors ebc * pt * pct
-		var my_100 = false;
-		var mashtime = 0;	// Total mash time
-		var mashtemp = 0;	// Average mash temperature
-		var bv = 0.925; 	// Bierverlies rendement
-        	var sr = 0.95;  	// Mash en spoel rendement
-		var lintner = 0;	// Total recipe lintner
-
-		if ((rows = $('#mashGrid').jqxGrid('getrows'))){
-			for(var i=0;i<rows.length;i++){
-				var row=rows[i];
-				if(row.step_type==0) // Infusion
-					mvol+=parseFloat(row.step_infuse_amount);
-				if(row.step_temp<=75){ // Ignore mashout
-					var timem=row.step_time+row.ramp_time;
-					mashtime+=timem;
-					mashtemp+=timem*row.step_temp;
-				}
-			}
-			if(mashtime>5)
-				mashtime-=5;//Correct last ramp > 75
-			mashtemp=Round(mashtemp/mashtime,2);
-		}
-
-		if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
-			return; // grid not yet loaded.
-		}
-
-		var s = 0;
-                for (var i = 0; i < rows.length; i++) {
-                        var row = rows[i];
-                        if (row.f_adjust_to_total_100)
-                                my_100 = true;
-			if (row.f_type == 1 && row.f_added < 4)	// Sugar
-				psugar += row.f_percentage;
-			if (row.f_graintype == 2 && row.f_added < 4)	// Crystal
-				pcara += row.f_percentage;
-			var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
-			if (row.f_added == 0) {	// Mash
-				if (mvol > 0) {	// Only if mash already known.
-					mvol += row.f_amount * row.f_moisture / 100;
-					s += d;
-				}
-				d = parseFloat(dataRecord.efficiency) / 100 * d;
-				sugarsm += d;
-				mashkg += parseFloat(row.f_amount);
-			}
-			if (row.f_added == 0 || row.f_added == 1)	// Mash or Boil
-				sugarsf += d;
-			if (row.f_added == 2 || row.f_added == 3) {	// Fermentation or lagering
-				var x = (row.f_yield / 100) * (1 - row.f_moisture / 100);
-				addedS += row.f_amount * x;
-				addedmass += row.f_amount;
-				vol += (x * sugardensity + (1 - x) * 1) * row.f_amount;
-			}
-			if (row.f_added < 4) {
-				colort += row.f_amount * ebc_to_srm(row.f_color);
-				colorh += row.f_amount * row.f_color * get_kt(row.f_color);
-				colorn += (row.f_percentage / 100) * row.f_color;	// For 8.6 Pt wort.
-			}
-			if (fermentableInit) {
-				if (row.f_added == 4) {
-					$("#bottle_priming_total").val(row.f_amount * 1000);	// Prevent clearing
-					$("#bottle_priming_sugar").jqxDropDownList('selectItem', row.f_name);
-				}
-				if (row.f_added == 5) {
-					$("#keg_priming_total").val(row.f_amount * 1000);
-					$("#keg_priming_sugar").jqxDropDownList('selectItem', row.f_name);
-				}
-			}
-			// Check supplies.
-			if ((((dataRecord.inventory_reduced <= 2) && (row.f_added <= 1)) ||  // Mash or boil
-                             ((dataRecord.inventory_reduced <= 3) && (row.f_added == 2)) ||  // Primary
-                             ((dataRecord.inventory_reduced <= 5) && (row.f_added == 3)) ||  // Secondary or Tertiary
-		    	     ((dataRecord.inventory_reduced <= 6) && (row.f_added == 4)) ||  // Bottle
-			     ((dataRecord.inventory_reduced <= 6) && (row.f_added == 5))) && row.f_inventory < row.f_amount) {
-				ok_fermentables = 0;
-			}
-			if (row.f_added == 0 && (row.f_type == 0 || row.f_type == 4) && row.f_color < 50) { // Mash and Grain/Adjunct and Color < 50
-				lintner += row.f_diastatic_power * row.f_amount;
-			}
-		}
-		fermentableInit = 0;
-		$("#ferm_lintner").val(Math.round(parseFloat(lintner / mashkg)));
-		$("#mash_kg").val(mashkg);
-		console.log("calcFermentables() supplies:"+ok_fermentables+" moutsuiker:"+sugarsm+"/"+sugarsf);
-		to_100 = my_100;
-		if (to_100) {
-			$("#wf_amount").jqxNumberInput({ width: 90, readOnly: true, spinButtons: false  });
-		} else {
-			$("#wf_amount").jqxNumberInput({ width: 110, readOnly: false, spinButtons: true });
-		}
-
-		if (mvol > 0) {
-			var v = s / sugardensity + mvol;
-			s = 1000 * s / (v * 10); //deg. Plato
-			est_mash_sg = Math.round(plato_to_sg(s) * 10000) / 10000;
-			$('#est_mash_sg').val(est_mash_sg);
-		}
-
-		// Estimate total recipe OG.
-		dataRecord.est_og = estimate_sg(sugarsf + addedS, parseFloat(dataRecord.batch_size));
-                $('#est_og').val(dataRecord.est_og);
-                $('#est_og2').val(dataRecord.est_og);
-		var org = dataRecord.est_og;
-
-		// Estimate SG in kettle after boil
-		aboil_sg = estimate_sg(sugarsf, parseFloat(dataRecord.batch_size));
-		$('#est_og3').val(aboil_sg);
-
-		// Estimate SG in kettle before boil
-		preboil_sg = estimate_sg(sugarsm, parseFloat(dataRecord.boil_size));
-		$('#est_pre_sg').val(preboil_sg);
-
-		// Recalculate volumes.
-		var aboil_volume = parseFloat(dataRecord.batch_size);
-		if (dataRecord.brew_aboil_volume > 0)
-			aboil_volume = dataRecord.brew_aboil_volume / 1.04;	// volume @ 20 degrees
-		if (dataRecord.brew_fermenter_tcloss == 0) {
-			dataRecord.brew_fermenter_tcloss = dataRecord.eq_trub_chiller_loss;
-			$("#brew_fermenter_tcloss").val(dataRecord.brew_fermenter_tcloss);
-		}
-		dataRecord.brew_fermenter_volume = aboil_volume - dataRecord.brew_fermenter_tcloss + dataRecord.brew_fermenter_extrawater;
-		$("#brew_fermenter_volume").val(dataRecord.brew_fermenter_volume);
-		// Estimated needed sparge water corrected for the temperature.
-		var spoelw = (dataRecord.boil_size - mash_infuse + (mashkg * my_grain_absorbtion) + dataRecord.eq_lauter_deadspace) * 1.03;
-		$("#brew_sparge_est").val(spoelw);
-
-		// Calculate SG in fermenter
-		var ogx = dataRecord.brew_aboil_sg;
-		if (ogx < 1.002)
-			ogx = aboil_sg;
-		var top = dataRecord.brew_fermenter_extrawater;
-
-		if (dataRecord.brew_fermenter_volume > 0) {
-			var sug = sg_to_plato(ogx) * dataRecord.brew_fermenter_volume * ogx / 100;  //kg of sugar in
-			sug += addedS; //kg
-
-			if ((dataRecord.brew_fermenter_volume * ogx + addedmass) > 0) {
-				var pt = 100 * sug / (dataRecord.brew_fermenter_volume * ogx + addedmass + top);
-				dataRecord.brew_fermenter_sg = Round(plato_to_sg(pt),4);
-				$("#brew_fermenter_sg").val(dataRecord.brew_fermenter_sg);
-				// color
-				if (dataRecord.color_method == 4) {
-					dataRecord.brew_fermenter_color = Math.round(((pt / 8.6) * colorn) + (dataRecord.boil_time / 60));
-				} else if (dataRecord.color_method == 3) {
-					dataRecord.brew_fermenter_color = Math.round((4.46 * bv * sr) /  (aboil_volume + top) * colorh);
-				} else {
-					var cw = colort / (aboil_volume + top) * 8.34436;
-					dataRecord.brew_fermenter_color = kw_to_ebc(dataRecord.color_method, cw);
-				}
-				$("#brew_fermenter_color").val(dataRecord.brew_fermenter_color);
-				var scolor = ebc_to_color(dataRecord.brew_fermenter_color);
-				$("#bcolorf").show();
-				document.getElementById("bcolorf").style.background= scolor;
-			}
-		} else {
-			// Negative volume
-			dataRecord.brew_fermenter_sg = dataRecord.brew_fermenter_color = 0;
-			$("#brew_fermenter_sg").val(0);
-			$("#brew_fermenter_color").val(0);
-			$("#bcolorf").hide();
-		}
-
-		// Color of the wort
-		if (dataRecord.color_method == 4) {
-			var color = Math.round(((sg_to_plato(dataRecord.est_og) / 8.6) * colorn) + (dataRecord.boil_time / 60));
-                } else if (dataRecord.color_method == 3) {	// Hans Halberstadt
-			var color = Math.round((4.46 * bv * sr) /  parseFloat(dataRecord.batch_size) * colorh);
-		} else {
-			var cw = colort / parseFloat(dataRecord.batch_size) * 8.34436;
-			var color = kw_to_ebc(dataRecord.color_method, cw);
-		}
-		dataRecord.est_color = color;
-                $('#est_color').val(color);
-                $('#est_color2').val(color);
-                var scolor = ebc_to_color(color);
-                document.getElementById("bcolor").style.background= scolor;
-                document.getElementById("bcolor2").style.background= scolor;
-
-		// Progress bars
-                pmalts = mashkg / dataRecord.eq_mash_max * 100;
-                $("#perc_malts").jqxProgressBar('val', pmalts);
-                $("#perc_sugars").jqxProgressBar('val', psugar);
-                $("#perc_cara").jqxProgressBar('val', pcara);
-		calcStage();
-
-		// Calculate estimated svg.
-		svg = 0; // default.
-		initcells = 0;
-		var rows = $('#yeastGrid').jqxGrid('getrows');
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
-			if (row.y_use == 0) {	// Primary
-				if (parseFloat(row.y_attenuation) > svg)
-					svg = parseFloat(row.y_attenuation);	// Take the highest if multiple yeasts.
-				if (row.y_form == 0)
-					initcells += (parseFloat(row.y_cells) / 1000000000) * parseFloat(row.y_amount) * (dataRecord.starter_viability / 100);
-				else
-					initcells += (parseFloat(row.y_cells) / 1000000) * parseFloat(row.y_amount);
-			}
-			// TODO: brett in secondary ??
-			if ((((dataRecord.inventory_reduced <= 3) && (row.y_use == 0)) ||  // Primary
-                             ((dataRecord.inventory_reduced <= 4) && (row.y_use == 1)) ||  // Secondary
-                             ((dataRecord.inventory_reduced <= 5) && (row.y_use == 2)) ||  // Tertiary
-                             ((dataRecord.inventory_reduced <= 6) && (row.y_use == 3))) && // Bottle
-			     (row.y_inventory < row.y_amount)) {
-				ok_yeasts = 0;
-			}
-		}
-		calcSupplies();
-		if (svg == 0)
-			svg = 77;
-
-		if ((mashkg > 0) && (mash_infuse > 0) && (mashtime > 0) && (mashtemp > 0)) {
-			dataRecord.est_fg = estimate_fg(psugar, pcara, mash_infuse / mashkg, mashtime, mashtemp, svg, dataRecord.est_og);
-		} else {
-			dataRecord.est_fg = estimate_fg(psugar, pcara, 0, 0, 0, svg, dataRecord.est_og);
-		}
-		$('#est_fg').val(dataRecord.est_fg);
-		$('#est_fg2').val(dataRecord.est_fg);
-		$('#est_fg3').val(dataRecord.est_fg);
-		var fig = dataRecord.est_fg;
-
-		dataRecord.est_abv = abvol(dataRecord.est_og, dataRecord.est_fg);
-		$("#est_abv").val(dataRecord.est_abv);
-		$("#est_abv2").val(dataRecord.est_abv);
-
-		// Calculate the final svg if available use the real value.
-		if ((dataRecord.stage >= 6) && (dataRecord.fg > 0.990) && (dataRecord.fg < dataRecord.brew_fermenter_sg)) {
-			svg = 100 * (dataRecord.brew_fermenter_sg - dataRecord.fg) / (dataRecord.brew_fermenter_sg - 1);
-			org = dataRecord.brew_fermenter_sg;
-			fig = dataRecord.fg;
-		}
-
-		$("#yeast_cells").val(initcells);
-		$("#need_cells").val(getNeededYeastCells());
-
-		// Calculate the calories in kcal/l (from brouwhulp)
-		var alc = 1881.22 * fig * (org - fig) / (1.775 - org);
-		var sug = 3550 * fig * (0.1808 * org + 0.8192 * fig - 1.0004);
-		$("#kcal").val(Math.round((alc + sug) / (12 * 0.0295735296)));
-	};
-
-	function calcMash() {
-
-		if (!(rows = $('#mashGrid').jqxGrid('getrows')))
-			return;
-		if (mashkg == 0)
-			return;
-
-		var infused = 0;
-		for (var i = 0; i < rows.length; i++) {
-			var row = $("#mashGrid").jqxGrid('getrowdata', i);
-			if (row.step_type == 0) // Infusion
-				infused += row.step_infuse_amount;
-			$("#mashGrid").jqxGrid('setcellvalue', i, "step_thickness", infused / mashkg);
-		}
-	}
-
-	/*
-	 * Change OG of recipe but keep the water volumes.
-	 */
-	function calcFermentablesFromOG(OG) {
-
-		console.log("calcFermentablesFromOG("+OG+")");
-		var efficiency = parseFloat($("#efficiency").jqxNumberInput('decimal'));
-		var sug = sg_to_plato(OG) * parseFloat($("#batch_size").jqxNumberInput('decimal')) * OG / 100;      //total amount of sugars in kg
-		var tot = 0;
-		var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
-
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#fermentableGrid").jqxGrid('getrowdata', i);
-			if (row.f_added < 4) {
-				var d = row.f_percentage / 100 * (row.f_yield / 100) * (1 - row.f_moisture / 100);
-				if (row.f_added == 0)	// Mash
-					d = efficiency / 100 * d;
-				tot += d;
-			}
-		}
-		var totmass = 0;
-		if (tot)
-			totmass = Math.round((sug / tot) * 1000) / 1000;
-
-		if (totmass) {
-			for (i = 0; i < rowscount; i++) {
-				var row = $("#fermentableGrid").jqxGrid('getrowdata', i);
-				if (row.f_added < 4) {
-					var amount = Math.round(row.f_percentage * 10 * totmass) / 1000;
-					$("#fermentableGrid").jqxGrid('setcellvalue', i, "f_amount", amount);
-				}
-			}
-		}
-	};
-
-	function getNeededYeastCells() {
-
-		var sg = dataRecord.brew_fermenter_sg;
-		if (sg <= 1.0001 && dataRecord.fg > 1.000)
-			sg = dataRecord.fg;
-		else if (sg <= 1.0001)
-			sg = dataRecord.est_og;
-		var plato = sg_to_plato(sg);
-
-		var volume = dataRecord.brew_fermenter_volume;
-		if (volume <= 0)
-			volume = dataRecord.batch_size - dataRecord.eq_trub_chiller_loss;
-
-		var result = pitchrate * volume * plato;
-		return result;
-	}
-
-	function hopFlavourContribution(bt, vol, use, amount) {
-		var result;
-
-		if (use == 1) {	// First wort
-			result = 0.15;          // assume 15% flavourcontribution for fwh
-		} else if (bt > 50) {
-			result = 0.10;          // assume 10% flavourcontribution as a minimum
-		} else {
-			result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2));
-			if (result < 0.10)
-				result = 0.10;  // assume 10% flavourcontribution as a minimum
-		}
-		return (result * amount * 1000) / vol;
-	}
-
-	function hopAromaContribution(bt, vol, use, amount) {
-		var result = 0;
-
-		if (use == 5) {		// Dry hop
-			result = 1.33;
-		} else if (bt > 20) {
-			result = 0;
-		} else if (bt > 7.5) {
-			result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) /4, 2));
-		} else if (use == 2) {	// Boil
-			result = 1;
-		} else if (use == 3) {	// Aroma
-			result = 1.2;
-		} else if (use == 4) {	// Whirlpool
-			result = 1.2;
-		}
-		return (result * amount * 1000) / vol;
-	}
-
-	function calcIBUs() {
-		var total_ibus = 0;
-		var ferm_ibus = 0;
-		var rows = {};
-		hop_aroma = hop_flavour = 0;
-		if (!(rows = $('#hopGrid').jqxGrid('getrows'))) {
-			return;
-		}
-		ok_hops = 1;
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
-			total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size),
-					parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method);
-			ferm_ibus += toIBU(row.h_useat, row.h_form, preboil_sg,
-					parseFloat(dataRecord.brew_fermenter_volume) + parseFloat(dataRecord.brew_fermenter_tcloss),
-					parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method);
-			hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size),
-					row.h_useat, parseFloat(row.h_amount));
-			hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size),
-					row.h_useat, parseFloat(row.h_amount));
-			if ((((dataRecord.inventory_reduced <= 2) && (row.h_useat <= 4)) ||  // Mash, FW, Boil, Aroma, Whirlpool
-                             ((dataRecord.inventory_reduced <= 6) && (row.h_useat == 5))) && // Dry-hop
-			     (row.h_inventory < row.h_amount))
-				ok_hops = 0;
-		}
-		total_ibus = Math.round(total_ibus * 10) / 10;
-		ferm_ibus = Math.round(ferm_ibus * 10) / 10;
-		hop_flavour = Math.round(hop_flavour * 1000 / 5) / 10;
-		hop_aroma = Math.round(hop_aroma * 1000 / 6) / 10;
-		if (hop_flavour > 100)
-			hop_flavour = 100;
-		if (hop_aroma > 100)
-			hop_aroma = 100;
-		console.log("calcIBUs(): " + total_ibus + "  flavour: " + hop_flavour + "  aroma: " + hop_aroma+"  fermenter:"+ferm_ibus+" supplies:"+ok_hops);
-		dataRecord.est_ibu = total_ibus;
-		$('#est_ibu').val(total_ibus);
-		$('#est_ibu2').val(total_ibus);
-		$("#hop_flavour").jqxProgressBar('val', hop_flavour);
-		$("#hop_aroma").jqxProgressBar('val', hop_aroma);
-		$("#brew_fermenter_ibu").val(ferm_ibus);
-		calcStage();
-		calcSupplies();
-	};
-
-	/*
-	 * http://braukaiser.com/blog/blog/2012/11/03/estimating-yeast-growth/
-	 *
-	 * stype: 0=stirred, 1=shaken, 2=simple
-	 * totcells: initial cells
-	 * egrams: gram extract
-	 */
-	function getGrowthRate(stype, totcells, egrams){
-
-		/* Cells per grams extract (B/g) */
-		var cpe = totcells / egrams;
-
-		if (cpe > 3.5)
-			return 0;	// no growth
-		if (stype == 2)
-			return 0.4;	// simple starter
-		if (stype == 1)
-			return 0.62;	// shaken starter
-		if (cpe <= 1.4)		// stirred starter
-			return 1.4;
-		return 2.33 - (.67 * cpe );
-	};
-
-	function calcStep(svol, stype, start) {
-
-		var gperpoint = 2.72715;  //number of grams of extract per point of starter gravity per liter
-		var prate = start/svol * 1000;
-		var irate = Math.round(prate * 10) / 10;
-		var egrams = (dataRecord.starter_sg - 1) * svol * gperpoint;
-		var grate = getGrowthRate(stype, start, egrams);
-		var ncells = Math.round(egrams * grate * 10) / 10;
-		var totcells = parseFloat(ncells) + start;
-		console.log("svol:"+svol+" start:"+start+" irate:"+irate+" egrams:"+egrams+" grate:"+grate+" ncells:"+ncells);
-		return {
-			svol: svol,
-			irate: irate,
-			prate: Math.round(prate * 10)/10,
-			ncells: ncells,
-			totcells: totcells,
-			growf: Math.round(ncells/start*100)/100
-		};
-	}
-
-	/*
-	 * Calculate all starter steps.
-	 * stype: final starter type: 0 = stirred, 1 = shaked, 2 = simple.
-	 * start: initial cells in billions
-	 * needed: needed cells in billions
-	 *
-	 * result: all values updated.
-	 */
-	function calcSteps(stype, start, needed) {
-
-		var uvols  = [ 20, 40, 60,  80, 100, 150, 200, 250, 375, 500,  625, 750, 875, 1000, 1250, 1500, 2000, 2500, 3000, 4000, 5000 ];
-		var mvols  = uvols.length;
-		var svol = 0;
-		var lasti = 0;
-		var result = {};
-
-		/*
-		 * If no values are set, auto calculate the starter.
-		 */
-		if ((parseFloat($("#prop1_volume").jqxNumberInput('decimal')) + parseFloat($("#prop2_volume").jqxNumberInput('decimal')) +
-		     parseFloat($("#prop3_volume").jqxNumberInput('decimal')) + parseFloat($("#prop4_volume").jqxNumberInput('decimal'))) == 0) {
-			// clear by default
-			for (var i = 1; i < 5; i++) {
-				$("#prop"+i+"_type").hide();
-				$("#r"+i+"_pmpt").show();
-				$("#prop"+i+"_type").val(stype);
-				$("#prop"+i+"_volume").hide();
-				$("#prop"+i+"_volume").val(0);
-				$("#prop"+i+"_irate").hide();
-				$("#prop"+i+"_ncells").hide();
-				$("#prop"+i+"_tcells").hide();
-				$("#prop"+i+"_growf").hide();
-			}
-			if (start > needed) {
-				return;	// no starter needed
-			}
-			$("#prop1_type").show();
-			$("#r1_pmpt").hide();
-			$("#prop1_volume").show();
-			$("#prop1_irate").show();
-			$("#prop1_ncells").show();
-			$("#prop1_tcells").show();
-			$("#prop1_growf").show();
-			for (var i = lasti; i <= mvols; i++) {
-				lasti = i;
-				svol = uvols[lasti];
-				result = calcStep(svol, stype, start);
-				if (result.irate < 25) {
-					// inocculation rate too low, backup one step and break out.
-					lasti = i - 1;
-					svol = uvols[lasti];
-					result = calcStep(svol, stype, start);
-					break;
-				}
-				if (result.totcells > needed || i == mvols) { // hit the target or loops done
-					break;
-				}
-			}
-			$("#prop1_volume").val(result.svol / 1000); // to liters
-			$("#prop1_irate").val(result.prate);
-			$("#prop1_ncells").val(result.ncells);
-			$("#prop1_tcells").val(result.totcells);
-			$("#prop1_growf").val(result.growf);
-			if (result.totcells > needed)
-				return; // hit the target
-
-			// second stage
-			$("#r2_pmpt").hide();
-			$("#prop2_type").val(stype);
-			$("#prop2_type").show();
-			$("#prop2_volume").show();
-			$("#prop2_irate").show();
-			$("#prop2_ncells").show();
-			$("#prop2_tcells").show();
-			$("#prop2_growf").show();
-			for (var i = lasti; i <= mvols; i++) {
-				lasti = i;
-				svol = uvols[lasti];
-				result = calcStep(svol, stype, $("#prop1_tcells").val());
-				if (result.irate < 25) {
-					lasti = i - 1;
-					svol = uvols[lasti];
-					result = calcStep(svol, stype, $("#prop1_tcells").val());
-					break;
-				}
-				if (result.totcells > needed || i == mvols) { // hit the target or loops done
-					break;
-				}
-			}
-			$("#prop2_volume").val(result.svol / 1000); // to liters
-			$("#prop2_irate").val(result.prate);
-			$("#prop2_ncells").val(result.ncells);
-			$("#prop2_tcells").val(result.totcells);
-			$("#prop2_growf").val(result.growf);
-			if (result.totcells > needed)
-				return; // hit the target
-
-			// third stage
-			$("#r3_pmpt").hide();
-			$("#prop3_type").val(stype);
-			$("#prop3_type").show();
-			$("#prop3_volume").show();
-			$("#prop3_irate").show();
-			$("#prop3_ncells").show();
-			$("#prop3_tcells").show();
-			$("#prop3_growf").show();
-			for (var i = lasti; i <= mvols; i++) {
-				lasti = i;
-				svol = uvols[lasti];
-				result = calcStep(svol, stype, $("#prop2_tcells").val());
-				if (result.irate < 25) {
-					lasti = i - 1;
-					svol = uvols[lasti];
-					result = calcStep(svol, stype, $("#prop2_tcells").val());
-					break;
-				}
-				if (result.totcells > needed || i == mvols) { // hit the target or loops done
-					break;
-				}
-			}
-			$("#prop3_volume").val(result.svol / 1000); // to liters
-			$("#prop3_irate").val(result.prate);
-			$("#prop3_ncells").val(result.ncells);
-			$("#prop3_tcells").val(result.totcells);
-			$("#prop3_growf").val(result.growf);
-			if (result.totcells > needed)
-				return; // hit the target
-
-			// fourth stage
-			$("#r4_pmpt").hide();
-			$("#prop4_type").val(stype);
-			$("#prop4_type").show();
-			$("#prop4_volume").show();
-			$("#prop4_irate").show();
-			$("#prop4_ncells").show();
-			$("#prop4_tcells").show();
-			$("#prop4_growf").show();
-			for (var i = lasti; i <= mvols; i++) {
-				lasti = i;
-				svol = uvols[lasti];
-				result = calcStep(svol, stype, $("#prop3_tcells").val());
-				if (result.totcells > needed || i == mvols) { // hit the target or loops done
-					$("#prop4_volume").val(result.svol / 1000); // to liters
-					$("#prop4_irate").val(result.prate);
-					$("#prop4_ncells").val(result.ncells);
-					$("#prop4_tcells").val(result.totcells);
-					$("#prop4_growf").val(result.growf);
-					return;
-				}
-			}
-		} else {
-			// recalculate
-			if (dataRecord.prop1_volume > 0) {
-				$("#r1_pmpt").hide();
-				$("#prop1_type").show();
-				$("#prop1_volume").show();
-				$("#prop1_irate").show();
-				$("#prop1_ncells").show();
-				$("#prop1_tcells").show();
-				$("#prop1_growf").show();
-				result = calcStep($("#prop1_volume").val() * 1000, dataRecord.prop1_type, start);
-				$("#prop1_irate").val(result.prate);
-				$("#prop1_ncells").val(result.ncells);
-				$("#prop1_tcells").val(result.totcells);
-				$("#prop1_growf").val(result.growf);
-			}
-			if (dataRecord.prop2_volume > 0) {
-				$("#r2_pmpt").hide();
-				$("#prop2_type").show();
-				$("#prop2_volume").show();
-				$("#prop2_irate").show();
-				$("#prop2_ncells").show();
-				$("#prop2_tcells").show();
-				$("#prop2_growf").show();
-				result = calcStep($("#prop2_volume").val() * 1000, dataRecord.prop2_type, $("#prop1_tcells").val());
-				$("#prop2_irate").val(result.prate);
-				$("#prop2_ncells").val(result.ncells);
-				$("#prop2_tcells").val(result.totcells);
-				$("#prop2_growf").val(result.growf);
-			}
-			if (dataRecord.prop3_volume > 0) {
-				$("#r3_pmpt").hide();
-				$("#prop3_type").show();
-				$("#prop3_volume").show();
-				$("#prop3_irate").show();
-				$("#prop3_ncells").show();
-				$("#prop3_tcells").show();
-				$("#prop3_growf").show();
-				result = calcStep($("#prop3_volume").val() * 1000, dataRecord.prop3_type, $("#prop2_tcells").val());
-				$("#prop3_irate").val(result.prate);
-				$("#prop3_ncells").val(result.ncells);
-				$("#prop3_tcells").val(result.totcells);
-				$("#prop3_growf").val(result.growf);
-			}
-			if (dataRecord.prop4_volume > 0) {
-				$("#r4_pmpt").hide();
-				$("#prop4_type").show();
-				$("#prop4_volume").show();
-				$("#prop4_irate").show();
-				$("#prop4_ncells").show();
-				$("#prop4_tcells").show();
-				$("#prop4_growf").show();
-				result = calcStep($("#prop4_volume").val() * 1000, dataRecord.prop4_type, $("#prop3_tcells").val());
-				$("#prop4_irate").val(result.prate);
-				$("#prop4_ncells").val(result.ncells);
-				$("#prop4_tcells").val(result.totcells);
-				$("#prop4_growf").val(result.growf);
-			}
-
-		}
-	}
-
-	function calcYeast() {
-
-		// Calculate needed cells.
-		var sg = dataRecord.brew_fermenter_sg;
-                if (sg <= 1.0001 && dataRecord.fg > 1.000)
-                        sg = dataRecord.fg;
-                else if (sg <= 1.0001)
-                        sg = dataRecord.est_og;
-		var plato = sg_to_plato(sg);
-
-                var volume = dataRecord.brew_fermenter_volume;
-		if (volume > 0) {
-			if (dataRecord.brew_fermenter_extrawater > 0)
-				volume += dataRecord.brew_fermenter_extrawater;
-		} else {
-                        volume = dataRecord.batch_size - dataRecord.eq_trub_chiller_loss;
-		}
-
-		// Also in calcFermentables()
-		$("#yeast_cells").val(initcells);
-
-		if (!(rows = $('#yeastGrid').jqxGrid('getrows'))) {
-			return; // grid not yet loaded.
-		}
-		var rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount == 0)
-			return;	// no yeast in recipe
-
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#yeastGrid").jqxGrid('getrowdata', i);
-			if (row.y_use == 0) { // primary
-				// pitchrate see https://www.brewersfriend.com/yeast-pitch-rate-and-starter-calculator/
-				// and http://braukaiser.com/blog/blog/2012/11/03/estimating-yeast-growth/
-				pitchrate = 0.75;
-				if (dataRecord.est_og > 1.060)
-					pitchrate = 1.0;
-//				if (dataRecord.est_og > 1.076)
-//					pitchrate = 1.25;	// Wyeast labs. http://www.wyeastlab.com/hb_pitchrates.cfm
-				if (row.y_type == 0) // lager yeast
-					pitchrate *= 2;
-
-				if (row.y_form == 1) { // dry yeast
-				} else { // possible starter needed
-				}
-			}
-		}
-		var needed = pitchrate * volume * plato;
-		console.log("calcYeast() pitchrate:"+pitchrate+" start:"+initcells+" needed:"+needed+" volume:"+volume);
-		$("#need_cells").val(needed);
-                var use_cells = initcells;
-
-		if (dataRecord.starter_enable) {
-			calcSteps(dataRecord.starter_type, initcells, needed);
-
-			for (var i = 1; i < 5; i++) {
-				$("#r"+i+"_irate").html("");
-				$("#r"+i+"_growf").html("");
-				$("#r"+i+"_tcells").html("");
-				if (parseFloat($("#prop"+i+"_volume").val()) > 0) {
-					if ((parseFloat($("#prop"+i+"_irate").val()) < 25) || (parseFloat($("#prop"+i+"_irate").val()) > 100)) {
-						$("#r"+i+"_irate").html("<img src='images/dialog-error.png'>");
-					} else {
-						$("#r"+i+"_irate").html("<img src='images/dialog-ok-apply.png'>");
-					}
-					if (parseFloat($("#prop"+i+"_growf").val()) < 1)
-						$("#r"+i+"_growf").html("<img src='images/dialog-error.png'>");
-					if (($("#prop"+i+"_type").val() > 0) && (parseFloat($("#prop"+i+"_growf").val()) > 3))
-						$("#r"+i+"_growf").html("<img src='images/dialog-error.png'>");
-					if (parseFloat($("#prop"+i+"_tcells").val()) > needed)
-						$("#r"+i+"_tcells").html("<img src='images/dialog-ok-apply.png'>");
-					use_cells = parseFloat($("#prop"+i+"_tcells").val());
-				} else {
-					$("#r"+i+"_irate").html("");
-				}
-			}
-		}
-		$("#plato_cells").val(parseFloat(use_cells / (volume * plato) ));
-	};
-
-	function adjustHops(factor) {
-
-		console.log("adjustHops("+factor+")");
-
-		var rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount == 0)
-			return;
-
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#hopGrid").jqxGrid('getrowdata', i);
-			var amount = row.h_amount * factor;
-			$("#hopGrid").jqxGrid('setcellvalue', i, "h_amount", amount);
-		}
-	};
-
-	function calcMiscs() {
-
-		ok_miscs = 1;
-		var rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
-
-		if (rowscount == 0)
-                        return;
-
-                for (var i = 0; i < rowscount; i++) {
-                        var row = $("#miscGrid").jqxGrid('getrowdata', i);
-			if ((((dataRecord.inventory_reduced <= 2) && (row.m_use_use <= 2)) ||  // Starter, Mash, Boil
-                             ((dataRecord.inventory_reduced <= 3) && (row.m_use_use == 3)) ||  // Primary
-                             ((dataRecord.inventory_reduced <= 5) && (row.m_use_use == 4)) ||  // Secondary, Teriary
-                             ((dataRecord.inventory_reduced <= 6) && (row.m_use_use == 5))) && // Bottle
-			     (row.m_inventory < row.m_amount)) {
-				ok_miscs = 0;
-			}
-		}
-		calcSupplies();
-	};
-
-	function adjustMiscs(factor) {
-
-		console.log("adjustMiscs("+factor+")");
-
-		var rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount == 0)
-			return;
-
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#miscGrid").jqxGrid('getrowdata', i);
-			var amount = row.m_amount * factor;
-			$("#miscGrid").jqxGrid('setcellvalue', i, "m_amount", amount);
-			switch (row.m_name) {
-				case 'CaCl2':		$("#wa_cacl2").val(row.m_amount * 1000);
-							break;
-				case 'CaSO4':		$("#wa_caso4").val(row.m_amount * 1000);
-							break;
-				case 'MgSO4':		$("#wa_mgso4").val(row.m_amount * 1000);
-							break;
-				case 'NaCl':		$("#wa_nacl").val(row.m_amount * 1000);
-							break;
-				case 'Melkzuur':
-				case 'Zoutzuur':
-				case 'Fosforzuur':
-				case 'Zwavelzuur':	$("#wa_acid").val(row.m_amount * 1000);
-							break;
-				case 'NaHCO3':
-				case 'Na2CO3':
-				case 'CaCO3':
-				case 'Ca(OH)2':		$("#wa_base").val(row.m_amount * 1000);
-							break;
-			}
-		}
-	};
-
-	function adjustYeasts(factor) {
-
-		console.log("adjustYeasts("+factor+")");
-
-		var rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount == 0)
-			return;
-
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#yeastGrid").jqxGrid('getrowdata', i);
-			if (row.y_form == 1) { // Only adjust dry yeast
-				var amount = row.y_amount * factor;
-				$("#yeastGrid").jqxGrid('setcellvalue', i, "y_amount", amount);
-			}
-		}
-
-		calcYeast();
-	};
-
-	function adjustWaters(factor) {
-
-		console.log("adjustWaters("+factor+")");
-
-		var rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
-		if (rowscount == 0)
-			return;
-
-		mash_infuse = 0;
-		for (var i = 0; i < rowscount; i++) {
-			var row = $("#mashGrid").jqxGrid('getrowdata', i);
-			if (row.step_type == 0) { // Infusion
-				var amount = Math.round(row.step_infuse_amount * factor * 10) / 10;
-				$("#mashGrid").jqxGrid('setcellvalue', i, "step_infuse_amount", amount);
-				mash_infuse += amount;
-			}
-		}
-		if (dataRecord.w2_amount == 0) {
-			dataRecord.w1_amount = mash_infuse;
-			$("#w1_amount").val(mash_infuse);
-		} else {
-			dataRecord.w1_amount = (dataRecord.w1_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
-			dataRecord.w2_amount = (dataRecord.w2_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
-			$("#w1_amount").val(dataRecord.w1_amount);
-			$("#w2_amount").val(dataRecord.w2_amount);
-		}
-		$('#wg_amount').val(mash_infuse);
-	};
-
-
-
-	function calcMashEfficiency() {
-		if (parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')) < 1.002)
-			return;
-		var c = sg_to_plato(est_mash_sg);
-		var m = sg_to_plato(parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')));
-		if (c > 0.5)
-			$("#brew_mash_efficiency").val(100 * m / c);
-		else
-			$("#brew_mash_efficiency").val(0);
-	};
-
-	function calcEfficiencyBeforeBoil() {
-		var	m = 0;
-		var	rows = {};
-		if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
-			return;	// grid not yet loaded.
-		}
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
-			if (row.f_added == 0) { // Mash
-				m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
-			}
-		}
-		var tot = sg_to_plato(dataRecord.brew_preboil_sg) * (dataRecord.brew_preboil_volume / 1.04) * dataRecord.brew_preboil_sg * 10 / 1000;
-		var result = 0;
-		if (m > 0)
-			result = Math.round((tot / m * 100) * 10) / 10;
-		if (result < 0)
-			result = 0;
-		$("#brew_preboil_efficiency").val(result);
-	}
-
-	function calcEfficiencyAfterBoil() {
-		var	m = 0;	// Sugars added at mash
-		var	b = 0;	// Sugars added at boil
-		var	rows = {};
-		if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
-			return; // grid not yet loaded.
-		}
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
-			if (row.f_added == 0) { // Mash
-				m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
-			} else if (row.f_added == 1) { // Boil
-				b += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
-			}
-		}
-		var tot = sg_to_plato(dataRecord.brew_aboil_sg) * (dataRecord.brew_aboil_volume / 1.04) * dataRecord.brew_aboil_sg * 10 / 1000;
-		tot -= b;	// total sugars in wort  minus added sugars.
-		var result = 0;
-		if (m > 0)
-			result = Math.round((tot / m * 100) * 10) / 10;
-		if (result < 0)
-			result = 0;
-		dataRecord.brew_aboil_efficiency = result;
-		$("#brew_aboil_efficiency").val(result);
-
-	}
-
-	function GetBUGU() {
-		var gu = (dataRecord.est_og - 1) * 1000;
-		if (gu > 0)
-			return dataRecord.est_ibu / gu;
-		else
-			return 0.5;
-	}
-
-	function GetOptClSO4ratio() {
-		var BUGU = GetBUGU();
-		return (-1.2 * BUGU + 1.4);
-	}
-
-	function setWaterAgent(name, amount) {
-		var rows = $('#miscGrid').jqxGrid('getrows');
-		if (amount == 0) {
-			for (var i = 0; i < rows.length; i++) {
-				var row = rows[i];
-				if (row.m_name == name) {
-					var id = $("#miscGrid").jqxGrid('getrowid', i);
-					$("#miscGrid").jqxGrid('deleterow', id);
-				}
-			}
-		} else {
-			var found = false;
-			for (var i = 0; i < rows.length; i++) {
-				var row = rows[i];
-				if (row.m_name == name) {
-					found = true;
-					$("#miscGrid").jqxGrid('setcellvalue', i, 'm_amount', amount / 1000);
-					break;
-				}
-			}
-			if (! found) {
-				var miscs = new $.jqx.dataAdapter(miscInvSource, {
-					loadComplete: function () {
-						var records = miscs.records;
-						for (var i = 0; i < records.length; i++) {
-							var record = records[i];
-							if (record.name == name) {
-								var row = {};
-								row["m_name"] = record.name;
-								row["m_amount"] = amount / 1000;
-								row["m_cost"] = record.cost;
-								row["m_type"] = record.type;
-								row["m_use_use"] = record.use_use;
-								row["m_time"] = 0;
-								row["m_amount_is_weight"] = record.amount_is_weight;
-								row["m_inventory"] = record.inventory;
-								row["m_avail"] = 1;
-								$("#miscGrid").jqxGrid('addrow', null, row);
-							}
-						}
-					}
-				});
-				miscs.dataBind();
-				return;
-			}
-		}
-	}
-
-	function setRangeIndicator(ion, rangeCode) {
-		if ((rangeCode == "laag") || (rangeCode == "hoog"))
-			$("#wr_"+ion).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+rangeCode + "</span>");
-		else
-			$("#wr_"+ion).html("<img src='images/dialog-ok-apply.png'>");
-	}
-
-	function mix(v1, v2, c1, c2) {
-		if ((v1 + v2) > 0) {
-			return ((v1 * c1) + (v2 * c2)) / (v1 + v2);
-		}
-		return 0;
-	}
-
-	// mg/l as CaCO3
-	function ResidualAlkalinity(total_alkalinity, calcium, magnesium) {
-		return total_alkalinity - (calcium / 1.4 + magnesium / 1.7);
-	}
-
-	var Ka1 = 0.0000004445;
-	var Ka2 = 0.0000000000468;
-
-	function PartCO3(pH) {
-		var H = Math.pow(10, -pH);
-		return 100 * Ka1 * Ka2 / (H*H + H * Ka1 + Ka1 * Ka2);
-	}
-
-	function PartHCO3(pH) {
-		var H = Math.pow(10, -pH);
-		return 100 * Ka1 * H / (H*H + H * Ka1 + Ka1 * Ka2);
-	}
-
-	function Charge(pH) {
-		return (-2 * PartCO3(pH) - PartHCO3(pH));
-	}
-
-	//Z alkalinity is the amount of acid (in mEq/l) needed to bring water to the target pH (Z pH)
-	function ZAlkalinity(pHZ) {
-		var C43 = Charge(4.3);
-		var Cw = Charge(parseFloat($("#wg_ph").jqxNumberInput('decimal')));
-		var Cz = Charge(pHZ);
-		var DeltaCNaught = -C43+Cw;
-		var CT = parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal')) / 50 / DeltaCNaught;
-		var DeltaCZ = -Cz+Cw;
-		return CT * DeltaCZ;
-	}
-
-	//Z Residual alkalinity is the amount of acid (in mEq/l) needed to bring the water in the mash to the target pH (Z pH)
-	function ZRA(pHZ) {
-
-		var Calc = parseFloat($("#wg_calcium").jqxNumberInput('decimal')) / (MMCa / 2);
-		var Magn = parseFloat($("#wg_magnesium").jqxNumberInput('decimal')) / (MMMg / 2);
-		var Z = ZAlkalinity(pHZ);
-		return Z - (Calc / 3.5 + Magn / 7);
-	}
-
-	function ProtonDeficit(pHZ) {
-
-		var Result = ZRA(pHZ) * parseFloat($("#wg_amount").jqxNumberInput('decimal'));
-		// proton deficit for the grist
-		var rows = $('#fermentableGrid').jqxGrid('getrows');
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
-			if (row.f_added == 0 && row.f_graintype != 6) {	// Added == Mash && graintype != No Malt
-				// Check if acid is required
-				var C1 = 0;
-				if ((row.f_di_ph != 5.7) && ((row.f_acid_to_ph_57 < - 0.1) || (row.f_acid_to_ph_57 > 0.1))) {
-					C1 = row.f_acid_to_ph_57 / (row.f_di_ph - 5.7);
-				} else {
-					// If the acid_to_ph_5.7 is unknown from the maltster, guess the required acid.
-					var ebc = row.f_color;
-					switch (row.f_graintype) {
-						case 0:					// Base, Special, Kilned
-						case 3:
-						case 5: C1 = 0.014 * ebc - 34.192;
-							break;
-						case 2: C1 = -0.0597 * ebc - 32.457;	// Crystal
-							break;
-						case 1: C1 = 0.0107 * ebc - 54.768;	// Roast
-							break;
-						case 4: C1 = -149;			// Sour malt
-							break;
-					}
-				}
-				x = C1 * (pHZ - row.f_di_ph);   // AcidRequired(ZpH)
-				Result += x * row.f_amount;
-			}
-		}
-		return Result;
-	}
-
-	function MashpH() {
-		var n = 0;
-		var pH = 5.4;
-		var deltapH = 0.001;
-		var deltapd = 0.1;
-		var pd = ProtonDeficit(pH);
-		while (((pd < -deltapd) || (pd > deltapd)) && (n < 2000)) {
-			n++;
-			if (pd < -deltapd)
-				pH -= deltapH;
-			else if (pd > deltapd)
-				pH += deltapH;
-			pd = ProtonDeficit(pH);
-		}
-		console.log("MashpH() n: "+n+" pH: "+pH);
-		return pH;
-	}
-
-	function GetAcidSpecs(AT) {
-		switch(AT) {
-			case 0:	return {	// Melkzuur
-					pK1: 3.86,
-					pK2: 20,
-					pK3: 20,
-					MolWt: 90.08,
-					AcidSG: 1214,	// 1214  1209
-					AcidPrc: 0.88	// 0.88  0.80
-				};
-			case 1:	return {	// Zoutzuur
-					pK1: -7,
-					pK2: 20,
-					pK3: 20,
-					MolWt: 36.46,
-					AcidSG: 1142,
-					AcidPrc: 0.28
-				};
-			case 2:	return {	// Fosforzuur
-					pK1: 2.12,
-					pK2: 7.20,
-					pK3: 12.44,
-					MolWt: 98.00,
-					AcidSG: 1170,
-					AcidPrc: 0.25
-				};
-			case 3:	return {	// Zwavelzuur
-					pK1: -1,
-					pK2: 1.92,
-					pK3: 20,
-					MolWt: 98.07,
-					AcidSG: 1700,
-					AcidPrc: 0.93
-				};
-		}
-	}
-
-
-	function calcWater() {
-
-		console.log("calcWater()");
-		var liters = 0;
-		var calcium = 0;
-		var magnesium = 0;
-		var sodium = 0;
-		var total_alkalinity = 0;
-		var bicarbonate = 0;
-		var chloride = 0;
-		var sulfate = 0;
-		var ph = 0;
-		var RA = 0;
-		var frac = 0;
-		var TpH = 0;
-		var protonDeficit = 0;
-
-		if (dataRecord.w1_name == "") {
-			return;
-		}
-
-		// If there is a dillute water source, mix the waters.
-		if (dataRecord.w2_name != "") {
-			liters = dataRecord.w1_amount + dataRecord.w2_amount;
-			calcium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_calcium, dataRecord.w2_calcium);
-			magnesium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_magnesium, dataRecord.w2_magnesium);
-			sodium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sodium, dataRecord.w2_sodium);
-			chloride = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_chloride, dataRecord.w2_chloride);
-			sulfate = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sulfate, dataRecord.w2_sulfate);
-			total_alkalinity = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_total_alkalinity, dataRecord.w2_total_alkalinity);
-			ph = -Math.log10(((Math.pow(10, -dataRecord.w1_ph) * dataRecord.w1_amount) + (Math.pow(10, -dataRecord.w2_ph) * dataRecord.w2_amount))  / liters);
-		} else {
-			liters = dataRecord.w1_amount;
-			calcium = dataRecord.w1_calcium;
-			magnesium = dataRecord.w1_magnesium;
-			sodium = dataRecord.w1_sodium;
-			chloride = dataRecord.w1_chloride;
-			sulfate = dataRecord.w1_sulfate;
-			total_alkalinity = dataRecord.w1_total_alkalinity;
-			ph = dataRecord.w1_ph;
-		}
-		$('#wg_amount').val(liters);
-		var wg_calcium = calcium;
-		$('#wg_calcium').val(Math.round(calcium * 10) / 10);
-		//var wg_magnesium = magnesium;
-		$('#wg_magnesium').val(Math.round(magnesium * 10) / 10);
-		var wg_sodium = sodium;
-		$('#wg_sodium').val(Math.round(sodium * 10) / 10);
-		var wg_total_alkalinity = total_alkalinity;
-		$('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
-		var wg_chloride = chloride;
-		$('#wg_chloride').val(Math.round(chloride * 10) / 10);
-		var wg_sulfate = sulfate;
-		$('#wg_sulfate').val(Math.round(sulfate * 10) / 10);
-		// Note: brouwhulp has the malts included here in the result.
-		//var wg_ph = ph;
-		$('#wg_ph').val(Math.round(ph * 10) / 10);
-		$('#wb_ph').val(Math.round(MashpH() * 10) / 10);
-		$('#est_mash_ph').val(Math.round(MashpH() * 10) / 10);
-		bicarbonate = total_alkalinity * 1.22;
-		var wg_bicarbonate = bicarbonate;
-
-		// Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water.
-		// Calculate Ca
-		RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
-		     parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4;
-		calcium += 1000 * RA / liters;
-
-		// Calculate Mg
-		RA = parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMMg / MMMgSO4;
-		magnesium += 1000 * RA / liters;
-
-		// Calculate Na
-		RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
-		     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
-		sodium += 1000 * RA / liters;
-
-		// Calculate SO4
-		RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
-		     parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4;
-		sulfate += 1000 * RA / liters;
-
-		// Calculate Cl
-		RA = 2 * parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
-			 parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl;
-		chloride += 1000 * RA / liters;
-		// Einde noot.
-
-		if ($("#wa_acid_name").val() < 0 || $("#wa_acid_name").val() > 3) {
-			$("#wa_acid_name").val(0);
-			dataRecord.wa_acid_name = 0;
-		}
-		if (last_acid == '')
-			last_acid = AcidTypeData[$("#wa_acid_name").val()].nl;
-
-		if ($("#wa_base_name").val() < 0 || $("#wa_base_name").val() > 3) {
-			$("#wa_base_name").val(0);
-			dataRecord.wa_base_name = 0;
-		}
-		if (last_base == '')
-			last_base = BaseTypeData[$("#wa_base_name").val()].nl;
-
-		var AT = dataRecord.wa_acid_name;
-		var BT = dataRecord.wa_base_name;
-
-		var result = GetAcidSpecs(AT);
-		var pK1 = result.pK1;
-		var pK2 = result.pK2;
-		var pK3 = result.pK3;
-		var MolWt = result.MolWt;
-		var AcidSG = result.AcidSG;
-		var AcidPrc = result.AcidPrc;
-
-		if (dataRecord.calc_acid) {
-			TpH = parseFloat(dataRecord.mash_ph);
-			protonDeficit = ProtonDeficit(TpH);
-			console.log("calc_acid tgt: "+TpH+" protonDeficit: "+protonDeficit);
-			if (protonDeficit > 0) { // Add acid
-				$("#wa_base").val(0);
-				setWaterAgent(last_base, 0);
-				frac = CalcFrac(TpH, pK1, pK2, pK3);
-				Acid = protonDeficit / frac;
-				Acid *= MolWt; // mg
-				Acidmg = Acid;
-				Acid = Acid / AcidSG; // ml
-
-				if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
-					$("#wa_acid_perc").val(AcidPrc);
-				Acid = Acid * AcidPrc / (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
-				console.log("Final ml: "+Acid);
-				$("#wa_acid").val(Math.round(Acid * 100) / 100);
-				setWaterAgent(AcidTypeData[AT].nl, Math.round(Acid * 100) / 100);
-
-				bicarbonate = bicarbonate - protonDeficit * frac / liters;
-				total_alkalinity = bicarbonate * 50 / 61;
-			} else if (protonDeficit < 0) { //Add base
-				$("#wa_acid").val(0);
-				setWaterAgent(last_acid, 0);
-				var r1d = Math.pow(10, (TpH - 6.38));
-				var r2d = Math.pow(10, (TpH - 10.38));
-				var f1d = 1 / (1 + r1d + r1d * r2d);
-				var f2d = f1d * r1d;
-				var f3d = f2d * r2d;
-				switch (BT) {
-					case 0:  RA = -protonDeficit / (f1d - f3d); // Sodiumbicarbonate, mmol totaal
-						RA = RA * MMNaHCO3/1000; //gram
-						$("#wa_base").val(Math.round(RA * 100) / 100);
-						setWaterAgent('NaHCO3', Math.round(RA * 100) / 100);
-						if (liters > 0) {
-							// Na
-							RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
-							RA = 1000 * RA / liters;
-							sodium = wg_sodium + RA;
-							// HCO3
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-						}
-						break;
-					case 1:	RA = -protonDeficit / (2 * f1d + f2d); // Sodiumcarbonate, mmol totaal
-						RA = RA * MMNa2CO3/1000; //gram
-						$("#wa_base").val(Math.round(RA * 100) / 100);
-						setWaterAgent('Na2CO3', Math.round(RA * 100) / 100);
-						if (liters > 0) {
-							RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3;
-							RA = 1000 * RA / liters;
-							sodium = wg_sodium + RA;
-							// HCO3
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-						}
-						break;
-					case 2:	RA = -protonDeficit * (f1d - f3d); // Calciumcarbonate, mmol totaal
-						RA = RA * MMCaCO3/1000; //gram
-						//but only 1/3 is effective, so add 3 times as much
-						RA = 3 * RA;
-						$("#wa_base").val(Math.round(RA * 100) / 100);
-						setWaterAgent('CaCO3', Math.round(RA * 100) / 100);
-						if (liters > 0) {
-							//Bicarbonate
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							//Ca precipitates out as Ca10(PO4)6(OH)2
-							RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
-							     parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3;
-							RA = 1000 * RA / liters;
-							calcium = wg_calcium + RA;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-						}
-						break;
-					case 3: RA = -protonDeficit / 19.3; // Calciumhydroxide
-						$("#wa_base").val(Math.round(RA * 100) / 100);
-						setWaterAgent('Ca(OH)2', Math.round(RA * 100) / 100);
-						if (liters > 0) {
-							// Bicarbonate
-							RA = -protonDeficit / liters;
-							total_alkalinity = wg_total_alkalinity + RA;
-							bicarbonate = total_alkalinity * 61 / 50;
-							// Calcium
-							RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
-							     parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaOH2;
-							RA = 1000 * RA / liters;
-							calcium = wg_calcium + RA;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-						}
-						break;
-				}
-			}
-			ph = TpH;
-			$('#wb_ph').val(Math.round(ph * 10) / 10);
-			$('#est_mash_ph').val(Math.round(ph * 10) / 10);
-		} else { // Manual
-			console.log("calc_acid no");
-			// First add base salts
-			if (parseFloat($("#wa_base").jqxNumberInput('decimal')) > 0) {
-				if (liters > 0) {
-					switch (BT) {
-						case 0:  // Sodiumbicarbonate, Na
-						        RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
-							RA = 1000 * RA / liters;
-							sodium = wg_sodium + RA;
-							// HCO3
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-							break;
-						case 1:	// Sodiumcarbonate
-							RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3;
-							RA = 1000 * RA / liters;
-							sodium = wg_sodium + RA;
-							// HCO3
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-							break;
-						case 2:	// Calciumcarbonate: Bicarbonate
-							RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3;
-							RA = 1000 * RA / liters;
-							bicarbonate = wg_bicarbonate + RA;
-							total_alkalinity = bicarbonate * 50 / 61;
-							RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
-							// Ca
-							RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
-							     parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
-							     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3;
-							RA = 1000 * RA / liters;
-							calcium = wg_calcium + RA;
-							break;
-					}
-				}
-			}
-
-			TpH = parseFloat(dataRecord.mash_ph);
-			pHa = MashpH(); // This one is in demi water, should be in adjusted water???
-			// Then calculate the new pH with added acids
-			if (parseFloat($("#wa_acid").jqxNumberInput('decimal')) > 0) {
-				console.log("TpH: "+TpH+" water: "+pHa);
-				Acid = parseFloat($("#wa_acid").jqxNumberInput('decimal'));
-				if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
-					$("#wa_acid_perc").val(AcidPrc);
-				Acid = Acid / AcidPrc * (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
-				Acid *= AcidSG; // ml
-				Acid /= MolWt;  // mg
-				Acidmg = Acid;
-
-				//find the pH where the protondeficit = protondeficit by the acid
-				frac = CalcFrac(pHa, pK1, pK2, pK3);
-				protonDeficit = Acid * frac;
-
-				var deltapH = 0.001;
-				var deltapd = 0.1;
-				var pd = ProtonDeficit(pHa);
-				var n = 0;
-				while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 2000)) {
-					n++;
-					if (pd < (protonDeficit-deltapd))
-						pHa -= deltapH;
-					else if (pd > (protonDeficit+deltapd))
-						pHa += deltapH;
-					frac = CalcFrac(pHa, pK1, pK2, pK3);
-					protonDeficit = Acid * frac;
-					pd = ProtonDeficit(pHa);
-				}
-				console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
-				RA = wg_bicarbonate - protonDeficit * frac / liters;
-				bicarbonate = RA;
-				total_alkalinity = RA * 50 / 61;
-				ph = pHa;
-				$('#wb_ph').val(Math.round(ph * 10) / 10);
-				$('#est_mash_ph').val(Math.round(ph * 10) / 10);
-			}
-		}
-
-		if ((AT == 3) && (liters > 0)) {	// Sulfuctic / Zwavelzuur
-			RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
-			     parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 +
-			     Acidmg / 1000 * MMSO4 / (MMSO4 + 2);
-			RA = 1000 * RA / liters;
-			sulfate = wg_sulfate + RA;      // Not add to sulfate??
-		} else if ((AT == 1) && (liters > 0)) {	// Hydrochloric, Zoutzuur
-			RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
-			     parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl +
-			     Acidmg / 1000 * MMCl / (MMCl + 1);
-			RA = 1000 * RA / liters;
-			chloride = wg_chloride + RA;
-		}
-
-		// 2:1 Sulfate to Chroride IPA's, Pale Ales.
-		// 1:1 Sulfate to Chloride Balanced
-		// 1:2 Sulfate to Chloride Malty
-		// Note, values below are the other way, cl to so4!
-		// So: 0.5 is IPA's, Pale Ales.
-		//       1 Balanced
-		//       2 Malty.
-		$('#tgt_bu').val(Math.round(GetBUGU() * 100) / 100);
-		// From brouwhulp.
-		if (GetBUGU() < 0.32)
-			$('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Zeer moutig en zoet</span>");
-		else if (GetBUGU() < 0.43)
-			$('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Moutig, zoet</span>");
-		else if (GetBUGU() < 0.52)
-			$('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Evenwichtig</span>");
-		else if (GetBUGU() < 0.63)
-			$('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Licht hoppig, bitter</span>");
-		else
-			$('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Extra hoppig, zeer bitter</span>");
-		$('#tgt_cl_so4').val(Math.round(GetOptClSO4ratio() * 10) / 10);
-		if (sulfate > 0)
-			RA = chloride / sulfate;
-		else
-			RA = 10;
-		$('#got_cl_so4').val(Math.round(RA * 10) / 10);
-		var piCLSO4_low = 0.8 * GetOptClSO4ratio();
-		var piCLSO4_high = 1.2 * GetOptClSO4ratio();
-		var Res = 'normaal';
-		if (RA < piCLSO4_low)
-			Res = 'laag';
-		else if (RA > piCLSO4_high)
-			Res = 'hoog';
-		setRangeIndicator('cl_so4', Res);
-
-		$('#wb_calcium').val(Math.round(calcium * 10) / 10);
-		$('#wb_magnesium').val(Math.round(magnesium * 10) / 10);
-		$('#wb_sodium').val(Math.round(sodium * 10) / 10);
-		$('#wb_sulfate').val(Math.round(sulfate * 10) / 10);
-		$('#wb_chloride').val(Math.round(chloride * 10) / 10);
-		$('#wb_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
-
-		if (calcium < 40) {
-			setRangeIndicator("calcium", "laag");
-		} else if (calcium > 150) {
-			setRangeIndicator("calcium", "hoog");
-		} else {
-			setRangeIndicator("calcium", "normaal");
-		}
-		if (magnesium >= 0 && magnesium <= 30) {
-			setRangeIndicator("magnesium", "normaal");
-		} else {
-			setRangeIndicator("magnesium", "hoog");
-		}
-		if (sodium <= 150) {
-			setRangeIndicator("sodium", "normaal");
-		} else {
-			setRangeIndicator("sodium", "hoog");
-		}
-		// Both chloride and sulfate should be above 50 according to
-		// John Palmer. So the Cl/SO4 ratio calculation will work.
-		if (chloride <= 50) {
-			setRangeIndicator("chloride", "laag");
-		} else if (chloride <= 100) {
-			setRangeIndicator("chloride", "normaal");
-		} else {
-			setRangeIndicator("chloride", "hoog");
-		}
-		if (sulfate <= 50) {
-                        setRangeIndicator("sulfate", "laag");
-                } else if (sulfate <= 350) {
-			setRangeIndicator("sulfate", "normaal");
-		} else {
-			setRangeIndicator("sulfate", "hoog");
-		}
-		if (ph < 5.2) {
-			setRangeIndicator("ph", "laag");
-		} else if (ph > 5.6) {
-			setRangeIndicator("ph", "hoog");
-		} else {
-			setRangeIndicator("ph", "normaal");
-		}
-		calcSparge();
-		calcMiscs();
-		calcSupplies();
-	}
-
-	function calcSparge() {
-
-		// Code from BrewBuddy/Brouwhulp, who got it from http://www.brewery.org/brewery/library/Acidi0,00fWaterAJD0497.html
-		var TargetpH = dataRecord.sparge_ph;
-		var Source_pH = dataRecord.w1_ph;
-		var Source_alkalinity = dataRecord.w1_total_alkalinity;
-		// Select watersource or fallback to the first source.
-		if (dataRecord.sparge_source == 1) {	// Source 2
-			if (dataRecord.w2_ph > 0.0) {
-				Source_pH = dataRecord.w2_ph;
-				Source_alkalinity = dataRecord.w2_total_alkalinity;
-			} else {
-				dataRecord.sparge_source = 0;	// Source 1
-				$("#sparge_source").val(0);
-			}
-		} else if (dataRecord.sparge_source == 2) {	// Mixed
-			if (dataRecord.w2_ph > 0.0) {
-				Source_pH = parseFloat($("#wg_ph").jqxNumberInput('decimal'));
-				Source_alkalinity = parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal'));
-			} else {
-				dataRecord.sparge_source = 0;
-				$("#sparge_source").val(0);
-			}
-		}
-
-		// Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH
-		var r1 = Math.pow(10, Source_pH - 6.38);
-		var r2 = Math.pow(10, Source_pH - 10.373);
-		var d = 1 + r1 + r1*r2;
-		var f1 = 1/d;
-		//var f2 = r1/d;
-		var f3 = r1 * r2 / d;
-
-		//Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity)
-		var r143 = Math.pow(10, 4.3 - 6.38);
-		var r243 = Math.pow(10, 4.3 - 10.373);
-		var d43 = 1 + r143 + r143*r243;
-		var f143 = 1/d43;
-		//var f243 = r143 / d43;
-		var f343 = r143 * r243 / d43;
-
-		//Step 3. Convert the water alkalinity to milliequivalents/L
-		var alkalinity = Source_alkalinity / 50;
-		
-		//Step 4. Solve
-		var Ct = (alkalinity - 1000 * (Math.pow(10, -4.3) - Math.pow(10, -Source_pH))) / ((f143-f1)+(f3-f343));
-
-		//Step 5. Compute mole fractions at desired pH
-		var r1g = Math.pow(10, TargetpH - 6.38);
-		var r2g = Math.pow(10, TargetpH - 10.373);
-		var dg = 1 + r1g + r1g*r2g;
-		var f1g = 1/dg;
-		//var f2g = r1g / dg;
-		var f3g = r1g * r2g / dg;
-
-		//Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L)
-		var Acid = Ct * ((f1g-f1)+(f3-f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH);  //mEq/l
-		Acid += 0.01;	// Add acid that would be required for distilled water.
-		if (dataRecord.sparge_acid_type < 0 || dataRecord.sparge_acid_type > 3) {
-			dataRecord.sparge_acid_type = 0;
-			$("#sparge_acid_type").val(0);
-		}
-
-		//Step 8. Get the acid data.
-		var AT = dataRecord.sparge_acid_type;
-		var result = GetAcidSpecs(AT);
-		var pK1 = result.pK1;
-		var pK2 = result.pK2;
-		var pK3 = result.pK3;
-		var MolWt = result.MolWt;
-		var AcidSG = result.AcidSG;
-		var AcidPrc = result.AcidPrc;
-		var fract = CalcFrac(TargetpH, pK1, pK2, pK3);
-
-		//Step 9. Now divide the mEq required by the "fraction". This is the required number of moles of acid.
-		Acid /= fract;
-
-		//Step 10. Multiply by molecular weight of the acid
-		Acid *= MolWt; //mg
-
-		Acid = Acid / AcidSG; //ml ; 88% lactic solution
-		var f1 = dataRecord.sparge_acid_perc;
-		if (f1 <= 0.1)
-			f1 = AcidPrc;
-		Acid = Acid * AcidPrc / (f1 / 100);
-
-		Acid *= dataRecord.sparge_volume; //ml lactic acid total
-		Acid = Math.round(Acid * 100) / 100;
-		dataRecord.sparge_acid_amount = Acid / 1000;
-		$("#sparge_acid_amount").val(Acid);
-	}
-
-	function calcFermentation(){
-
-		if (dataRecord.brew_fermenter_sg<1.020)
-			return;
-
-//	var obrix = sg_to_brix(dataRecord.brew_fermenter_sg);
-		if ((dataRecord.primary_end_sg>0.990)&&(dataRecord.primary_end_sg<dataRecord.brew_fermenter_sg)){
-			var primary_svg=Round(100*(dataRecord.brew_fermenter_sg-dataRecord.primary_end_sg)/(dataRecord.brew_fermenter_sg-1),1);
-			$("#primary_svg").val(primary_svg);
-			if((dataRecord.secondary_end_sg>0.990)&&(dataRecord.secondary_end_sg<dataRecord.brew_fermenter_sg)){
-				var secondary_svg=Round(100*(dataRecord.brew_fermenter_sg-dataRecord.secondary_end_sg)/(dataRecord.brew_fermenter_sg-1),1);
-				$("#secondary_svg").val(secondary_svg);
-				if((dataRecord.fg>0.990)&&(dataRecord.fg<dataRecord.brew_fermenter_sg)){
-					var final_svg=Round(100*(dataRecord.brew_fermenter_sg-dataRecord.fg)/(dataRecord.brew_fermenter_sg-1),1);
-					$("#final_svg").val(final_svg);
-					var ABV=Round(abvol(dataRecord.brew_fermenter_sg,dataRecord.fg),2);
-					$("#final_abv").val(ABV);
-				}
-			}
-		}
-	}
-
-
-
-	function ResCO2(CO2,T){
-
-		var F=T*1.8+32;
-		return 3.0378-0.050062*F+0.00026555*F*F;
-	}
-
-
-
-	function CarbCO2toS(CO2,T,SFactor){
-		var sugar=SFactor*(CO2-ResCO2(CO2,T))/0.286;
-		if(sugar<0)
-			sugar=0;
-		return Round(sugar,3);
-	}
-
-	function GetPressure(CO2, T1, T2) {
-  		var V = CO2 - ResCO2(CO2, T1);
-		if (V < 0)
-			return 0;
-		var P = -1.09145427669121 + 0.00800006989646477 * T2 + 0.000260276315484684 * T2 * T2 + 0.0215142075945119 * T2 * V +
-			0.674996600795854 * V + -0.00471757220150754 * V * V;
-		//console.log("CO2: "+CO2+" "+V+"  Temp: "+T1+" "+T2+"  Pressure: "+P);
-		if (P < 0)
-			P = 0;
-		P = P * 1.01325; // atm to bar
-		return Round(P,1);
-	}
-
-	function CarbCO2ToPressure(CO2, T) {
-		return (CO2-(-0.000005594056*Math.pow(T,4)+0.000144357886*Math.pow(T,3)+0.000362999168*T*T-0.064872987645*T+1.641145175049)) /
-			 (0.00000498031*Math.pow(T,4)-0.00024358267*Math.pow(T,3)+0.00385867329*T*T-0.05671206825*T+1.53801423376);
-	}
-
-	function calcCarbonation() {
-
-		var TSec=dataRecord.secondary_temp;
-		if(TSec<1)
-			TSec=dataRecord.primary_end_temp;
-		if(TSec<1)
-			TSec=18;
-
-		if(dataRecord.fg==0.000)
-			var ABV=abvol(dataRecord.brew_fermenter_sg,parseFloat($("#est_fg").jqxNumberInput('decimal')));
-		else
-			var ABV=abvol(dataRecord.brew_fermenter_sg,dataRecord.fg);
-
-		/* Calculate new volume and alcohol. */
-		var bvol=dataRecord.package_volume-(ABV*dataRecord.package_volume)/100;
-		var balc=dataRecord.package_volume-bvol;
-		var mvol=dataRecord.package_infuse_amount-(dataRecord.package_infuse_abv*dataRecord.package_infuse_amount)/100;
-		var malc=dataRecord.package_infuse_amount-mvol;
-		var talc=balc+malc;
-		var tvol=bvol+mvol;
-		ABV = Round(talc/(tvol+talc)*100,2);
-		dataRecord.package_abv=ABV;
-		$("#package_abv").val(ABV);
-
-//		console.log("calcCarbonation() TSec:"+TSec+"  ABV:"+ABV);
-		if(!(rows = $('#fermentableGrid').jqxGrid('getrows'))){return;}
-
-		// Bottles
-		dataRecord.bottle_priming_amount=0;
-		dataRecord.bottle_priming_total=0;
-		for (var i=0;i<rows.length;i++){
-			var row=rows[i];
-			if(row.f_added==4){
-				var SFactor=1/((row.f_yield/100)*(1-row.f_moisture/100));
-				dataRecord.bottle_priming_amount=CarbCO2toS(dataRecord.bottle_carbonation,TSec,SFactor);
-				dataRecord.bottle_priming_total=Round(dataRecord.bottle_amount*dataRecord.bottle_priming_amount,2);
-				$("#fermentableGrid").jqxGrid('setcellvalue',i,'f_amount',dataRecord.bottle_priming_total/1000);
-			}
-		}
-		$("#bottle_priming_amount").val(Round(dataRecord.bottle_priming_amount,1));
-		$("#bottle_priming_total").val(dataRecord.bottle_priming_total);
-		var pabv=ABV+dataRecord.bottle_priming_amount*0.47/7.907;
-		var pvol=dataRecord.bottle_amount-(pabv*dataRecord.bottle_amount)/100;
-		var talc=dataRecord.bottle_amount-pvol;
-		var tvol=pvol+dataRecord.bottle_priming_water;
-		var babv = Round(talc/(tvol+talc)*100,2);
-		//console.log("bottle pabv:"+pabv+" pvol:"+pvol+" wvol:"+dataRecord.bottle_priming_water+" tvol:"+tvol+" talc:"+talc+" abv:"+babv);
-		$("#bottle_abv").val(babv);
-		$("#bottle_pressure").val(GetPressure(dataRecord.bottle_carbonation,TSec,dataRecord.bottle_carbonation_temp));
-
-		// Kegs
-		var Pressure=CarbCO2ToPressure(dataRecord.keg_carbonation,dataRecord.keg_carbonation_temp);
-		if(Pressure<0)Pressure=0;
-		dataRecord.keg_pressure=Pressure;
-		$("#keg_pressure").val(Round(Pressure,1));
-
-		dataRecord.keg_priming_amount=0;
-		dataRecord.keg_priming_total=0;
-		if(!dataRecord.keg_forced_carb){
-			for(var i=0;i<rows.length;i++){
-				var row=rows[i];
-				if(row.f_added==5){
-					var SFactor=1/((row.f_yield/100)*(1-row.f_moisture/100));
-					dataRecord.keg_priming_amount=CarbCO2toS(dataRecord.keg_carbonation,TSec,SFactor);
-					dataRecord.keg_priming_total=Round(dataRecord.keg_amount*dataRecord.keg_priming_amount,2);
-					$("#fermentableGrid").jqxGrid('setcellvalue',i,'f_amount',dataRecord.keg_priming_total/1000);
-				}
-			}
-			$("#keg_priming_amount").val(Round(dataRecord.keg_priming_amount,1));
-			$("#keg_priming_total").val(dataRecord.keg_priming_total);
-			var pabv=ABV+dataRecord.keg_priming_amount*0.47/7.907;
-			var pvol=dataRecord.keg_amount-(pabv*dataRecord.keg_amount)/100;
-			var talc=dataRecord.keg_amount-pvol;
-			var tvol=pvol+dataRecord.keg_priming_water;
-			var kabv=Round(talc/(tvol+talc)*100,2);
-			//console.log("kegs  pabv:"+pabv+" pvol:"+pvol+" wvol:"+dataRecord.keg_priming_water+" tvol:"+tvol+" talc:"+talc+" abv:"+kabv);
-			$("#keg_abv").val(kabv);
-		} else {
-			$("#keg_priming_amount").val(0);
-			$("#keg_priming_total").val(0);
-			$("#keg_abv").val(ABV);
-		}
-	}
-
-	function calcStage() {
-
-		var	newstage = dataRecord.stage;
-		/* parseFloat$("#brew_date_start").val()) returns the year if it is a valid mysql style date. */
-		if (newstage == 0 && dataRecord.est_og > 1.005 && dataRecord.est_color > 3 && dataRecord.est_ibu > 3)
-			newstage = 1;
-		if (newstage == 1 && parseFloat($("#brew_date_start").val()) > 2000)
-			newstage = 2;	// Brewday
-		if (newstage == 2 && ($("#brew_date_start").val() == ''))
-			newstage = 1;	// No brewday
-		if (newstage == 2 && parseFloat($("#brew_date_end").val()) > 2000)
-			newstage = 3;	// Primary
-		if (newstage == 3 && parseFloat($("#primary_end_date").val()) > 2000)
-			newstage = 4;	// Secondary
-		if (newstage == 4 && parseFloat($("#secondary_end_date").val()) > 2000)
-			newstage = 5;	// Tertiary
-		if (newstage == 5 && parseFloat($("#package_date").val()) > 2000)
-			newstage = 6;	// Package
-		if (newstage >= 6 && newstage < 9) {
-			var d = new Date();
-			var date2 = $("#package_date").val();
-			date2 = date2.split('-');
-			// Now we convert the array to a Date object
-			date1 = new Date(d.getFullYear(), d.getMonth(), d.getDate());
-			date2 = new Date(date2[0], date2[1]-1, date2[2]);
-			// We use the getTime() method and get the unixtime
-			date1_unixtime = parseInt(date1.getTime() / 1000);
-			date2_unixtime = parseInt(date2.getTime() / 1000);
-			// This is the calculated difference in seconds
-			var timeDifference = date1_unixtime - date2_unixtime;
-			var timeDifferenceInDays = timeDifference / 60 / 60 / 24;
-			if (timeDifferenceInDays > 0) {			// At least one day
-				if (timeDifferenceInDays >= 42)		// 6 weeks
-					newstage = 9;			// Ready to taste
-				else if (timeDifferenceInDays >= 14)	// 14 days
-					newstage = 8;			// Mature
-				else
-					newstage = 7;			// Carbonation
-			}
-		}
-		if (newstage == 9 && parseFloat($("#taste_date").val()) > 2000)
-			newstage = 10;	// Ready
-
-		if (newstage != dataRecord.stage) {
-			console.log("calcStage() old: "+dataRecord.stage+" new: "+newstage);
-			dataRecord.stage = newstage;
-		}
-
-		/*
-		 * Set stage and enable or disable parts of the screens.
-		 */
-		$("#stage").val(StageData[dataRecord.stage].nl);
-		if (dataRecord.stage >= 10) {
-			$("#locked").jqxCheckBox({ disabled:false });
-		}
-
-		/*
-		 * When the brew is in progress or done, block equipment select and delete.
-		 */
-		if (dataRecord.stage > 1) {
-			$("#equipmentSelect").jqxDropDownList({ disabled: true });
-			$("#Delete").jqxButton({ disabled: true });
-		}
-
-		if (dataRecord.stage < 1) 	// Planning, no ingredients
-			$('#jqxTabs').jqxTabs('disableAt', 8);	// Brewday tab
-		else
-			$('#jqxTabs').jqxTabs('enableAt', 8);
-
-		if (dataRecord.stage < 3) {	// Primary
-			$('#jqxTabs').jqxTabs('disableAt', 9);	// Fermentation tab
-		} else {
-			$('#jqxTabs').jqxTabs('enableAt', 9);
-			$("#name").jqxInput({ disabled: true });
-			$("#code").jqxInput({ disabled: true });
-			$("#batch_size").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#boil_size").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#boil_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#efficiency").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#est_og").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#type").jqxDropDownList({ disabled: true });
-			$("#styleSelect").jqxDropDownList({ disabled: true });
-			$("#color_method").jqxDropDownList({ disabled: true });
-			$("#ibu_method").jqxDropDownList({ disabled: true });
-			$("#mash_select").jqxDropDownList({ disabled: true });
-			$("#w1_name").jqxDropDownList({ disabled: true });
-			$("#w2_name").jqxDropDownList({ disabled: true });
-			$("#w2_amount").jqxNumberInput({ readOnly: true });
-			$("#pr_name").jqxDropDownList({ disabled: true });
-			$("#wa_cacl2").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#wa_caso4").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#wa_mgso4").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#wa_nacl").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#mash_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#calc_acid").jqxCheckBox({ disabled: true });
-			$("#wa_base_name").jqxDropDownList({ disabled: true });
-			$("#wa_base").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#wa_acid_name").jqxDropDownList({ disabled: true });
-			$("#wa_acid").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#wa_acid_perc").jqxNumberInput({ spinButtons: false, readOnly: true, width: 70 });
-			$("#sparge_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#sparge_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#sparge_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#sparge_source").jqxDropDownList({ disabled: true });
-			$("#sparge_acid_type").jqxDropDownList({ disabled: true });
-			$("#sparge_acid_perc").jqxNumberInput({ spinButtons: false, readOnly: true, width: false });
-			$("#starter_enable").jqxCheckBox({ disabled: true });
-			$("#starter_type").jqxDropDownList({ disabled: true });
-                        $("#starter_try").jqxButton({ disabled: true });
-                        $("#starter_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#starter_viability").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-		}
-		if (dataRecord.stage > 3) { // Primary fermentation done
-			$("#brew_date_start").jqxDateTimeInput({ disabled: true });
-			$("#brew_date_end").jqxDateTimeInput({ disabled: true });
-			$("#brew_mash_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_preboil_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aboil_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_mash_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_preboil_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aboil_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_preboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_whirlpool9").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_cooling_to").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_whirlpool7").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_cooling_method").jqxDropDownList({ disabled: true });
-			$("#brew_whirlpool6").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_cooling_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_sparge_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_whirlpool2").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aeration_type").jqxDropDownList({ disabled: true });
-			$("#brew_fermenter_tcloss").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aeration_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_fermenter_extrawater").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#brew_aeration_speed").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-		}
-		if (dataRecord.stage == 5) // Lagering, allow packaging
-			$("#package_date").jqxDateTimeInput({ disabled: false });
-		else
-			$("#package_date").jqxDateTimeInput({ disabled: true });
-		if (dataRecord.stage >= 5) { // At least secondary
-			$("#primary_start_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#primary_max_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#primary_end_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#primary_end_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#primary_end_brix").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#primary_end_date").jqxDateTimeInput({ disabled: true });
-		}
-		if (dataRecord.stage >= 6) {	// Packaged
-			$("#secondary_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#secondary_end_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#secondary_end_date").jqxDateTimeInput({ disabled: true });
-			$("#tertiary_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#fg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#final_brix").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#package_date").jqxDateTimeInput({ disabled: true });
-			$("#package_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#package_infuse_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#package_infuse_abv").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#package_infuse_notes").jqxInput({ disabled: true });
-			$("#package_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#bottle_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#bottle_priming_water").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#keg_priming_water").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#keg_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#bottle_carbonation").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#keg_carbonation").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#bottle_priming_sugar").jqxDropDownList({ disabled: true });
-			$("#keg_priming_sugar").jqxDropDownList({ disabled: true });
-			$("#keg_forced_carb").jqxCheckBox({ disabled : true });
-			$("#bottle_carbonation_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#keg_carbonation_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-		}
-		if (dataRecord.stage < 8) { // Taste when at least Mature.
-			$('#jqxTabs').jqxTabs('disableAt', 11);	// Tasting tab
-		} else {
-			$('#jqxTabs').jqxTabs('enableAt', 11);
-		}
-
-		if (dataRecord.stage == 11) { // Locked
-			$("#taste_date").jqxDateTimeInput({ disabled: true });
-			$("#taste_rate").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#taste_color").jqxInput({ disabled: true });
-			$("#taste_transparency").jqxInput({ disabled: true });
-			$("#taste_head").jqxInput({ disabled: true });
-			$("#taste_aroma").jqxInput({ disabled: true });
-			$("#taste_taste").jqxInput({ disabled: true });
-			$("#taste_aftertaste").jqxInput({ disabled: true });
-			$("#taste_mouthfeel").jqxInput({ disabled: true });
-			$("#taste_notes").jqxInput({ disabled: true });
-			$("#notes").jqxInput({ disabled: true });
-		} else {
-			$("#notes").jqxInput({ disabled: false });
-		}
-	}
-
-	function showStarter() {
-
-		if (dataRecord.starter_enable) {
-			$("#propagator").show();
-			$("#starter_type").jqxDropDownList( {disabled: false });
-			$("#starter_try").jqxButton({ disabled: false });
-			$("#starter_sg").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 });
-			$("#starter_viability").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 });
-		} else {
-			$("#propagator").hide();
-			$("#starter_type").jqxDropDownList( {disabled: true });
-			$("#starter_try").jqxButton({ disabled: true });
-			$("#starter_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-			$("#starter_viability").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
-		}
-	}
-
-	function calcInit () {
-		console.log("calcInit()");
-
-		calcMashEfficiency();
-		calcEfficiencyBeforeBoil();
-		calcEfficiencyAfterBoil();
-
-		$("#starter_enable").on('checked', function (event) {
-			dataRecord.starter_enable = 1;
-			showStarter();
-			calcYeast();
-		});
-		$("#starter_enable").on('unchecked', function (event) {
-			dataRecord.starter_enable = 0;
-			showStarter();
-			calcYeast();
-		});
-		$("#starter_try").click(function () {
-			$("#prop1_volume").val(0);
-			$("#prop2_volume").val(0);
-			$("#prop3_volume").val(0);
-			$("#prop4_volume").val(0);
-			calcYeast();
-		});
-		$('#starter_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.starter_type = index;
-				calcYeast();
-			}
-		});
-		$('#starter_sg').on('change', function (event) {
-			if (event.args) {
-				dataRecord.starter_sg = event.args.value;
-				calcYeast();
-			}
-		});
-		$('#starter_viability').on('change', function (event) {
-                        if (event.args) {
-                                dataRecord.starter_viability = event.args.value;
-				calcFermentables();
-                                calcYeast();
-                        }
-                });
-		$('#prop1_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.prop1_type = index;
-				calcYeast();
-			}
-		});
-		$('#prop1_volume').on('change', function (event) {
-			if (event.args) {
-				dataRecord.prop1_volume = event.args.value;
-				calcYeast();
-			}
-		});
-		$('#prop2_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.prop2_type = index;
-				calcYeast();
-			}
-		});
-		$('#prop2_volume').on('change', function (event) {
-			if (event.args) {
-				dataRecord.prop2_volume = event.args.value;
-				calcYeast();
-			}
-		});
-		$('#prop3_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.prop3_type = index;
-				calcYeast();
-			}
-		});
-		$('#prop3_volume').on('change', function (event) {
-			if (event.args) {
-				dataRecord.prop3_volume = event.args.value;
-				calcYeast();
-			}
-		});
-		$('#prop4_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.prop4_type = index;
-				calcYeast();
-			}
-		});
-		$('#prop4_volume').on('change', function (event) {
-			if (event.args) {
-				dataRecord.prop4_volume = event.args.value;
-				calcYeast();
-			}
-		});
-
-		$("#calc_acid").on('checked', function (event) {
-			dataRecord.calc_acid = 1;
-			calcWater();
-		});
-		$("#calc_acid").on('unchecked', function (event) {
-			dataRecord.calc_acid = 0;
-			calcWater();
-		});
-		$("#w1_name").jqxDropDownList('selectItem', dataRecord.w1_name);
-		$("#w2_name").jqxDropDownList('selectItem', dataRecord.w2_name);
-		// Fix tap water if zero using mash infuse amount.
-		if (parseFloat($("#w1_amount").jqxNumberInput('decimal')) == 0 && mash_infuse > 0) {
-			$("#w1_amount").val(mash_infuse);
-			dataRecord.w1_amount = mash_infuse;
-			$("#wg_amount").val(mash_infuse);
-			$("#w2_amount").val(0);
-			dataRecord.w2_amount = 0;
-		}
-		calcWater();
-		$("#w2_amount").on('change', function (event) {
-			var newval = parseFloat(event.args.value);
-
-			if (newval > mash_infuse) {
-				$("#w2_amount").val(dataRecord.w2_amount);
-				return;
-			}
-			dataRecord.w1_amount = parseFloat($("#wg_amount").jqxNumberInput('decimal')) - newval;
-			$("#w1_amount").val(dataRecord.w1_amount);
-			dataRecord.w2_amount = newval;
-			console.log("new: "+event.args.value+" w1: "+dataRecord.w1_amount+"  w2: "+dataRecord.w2_amount);
-			calcWater();
-		});
-		$('#wa_cacl2').on('change', function (event) {
-			if (event.args) {
-				setWaterAgent('CaCl2', 0);      // This can prevent double entries.
-				setWaterAgent('CaCl2', event.args.value);
-				calcWater();
-			}
-		});
-		$('#wa_caso4').on('change', function (event) {
-			if (event.args) {
-				setWaterAgent('CaSO4', 0);
-				setWaterAgent('CaSO4', event.args.value);
-				calcWater();
-			}
-		});
-		$('#wa_mgso4').on('change', function (event) {
-			if (event.args) {
-				setWaterAgent('MgSO4', 0);
-				setWaterAgent('MgSO4', event.args.value);
-				calcWater();
-			}
-		});
-		$('#wa_nacl').on('change', function (event) {
-			if (event.args) {
-				setWaterAgent('NaCl', 0);
-				setWaterAgent('NaCl', event.args.value);
-				calcWater();
-			}
-		});
-		$('#wa_base_name').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				console.log("wa_base_name "+index);
-				setWaterAgent(last_base, 0);
-				last_base = BaseTypeData[index].nl;
-				setWaterAgent(last_base, parseFloat($("#wa_base").jqxNumberInput('decimal')));
-				dataRecord.wa_base_name = index;
-				calcWater();
-			}
-		});
-		$('#wa_base').on('change', function (event) {
-			var name = BaseTypeData[$("#wa_base_name").val()].nl;
-			setWaterAgent(name, parseFloat(event.args.value));
-			calcWater();
-		});
-		$('#wa_acid_name').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				console.log("wa_acid_name "+index);
-				setWaterAgent(last_acid, 0);
-				last_acid = AcidTypeData[index].nl;
-				setWaterAgent(last_acid, parseFloat($("#wa_acid").jqxNumberInput('decimal')));
-				dataRecord.wa_acid_name = index;
-				calcWater();
-			}
-		});
-		$('#wa_acid').on('change', function (event) {
-			var name = AcidTypeData[$("#wa_acid_name").val()].nl;
-			setWaterAgent(name, parseFloat(event.args.value));
-			calcWater();
-		});
-		$('#wa_acid_perc').on('change', function (event) { calcWater(); });
-
-		$('#color_method').on('change', function (event) {
-			dataRecord.color_method = event.args.index;
-			calcFermentables();
-		});
-		$('#ibu_method').on('change', function (event) {
-			dataRecord.ibu_method = event.args.index;
-			calcFermentables();
-			calcIBUs();
-		});
-
-		$('#batch_size').on('change', function (event) {
-			console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size);
-			$("#est_a_vol").val(event.args.value * 1.04);
-			var new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size;
-			var factor = parseFloat(event.args.value) / dataRecord.batch_size;
-			dataRecord.boil_size = new_boil;
-			$("#boil_size").val(Math.round(new_boil * 100) / 100);
-			$("#est_pre_vol").val(Math.round(new_boil * 1.04 * 100) / 100);
-			dataRecord.sparge_volume *= factor;
-			$("#sparge_volume").val(dataRecord.sparge_volume);
-			$("#brew_sparge_volume").val(dataRecord.sparge_volume);
-			dataRecord.batch_size = parseFloat(event.args.value);
-			calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
-			adjustWaters(factor);
-			calcFermentables();
-			adjustHops(factor);
-			adjustMiscs(factor);
-			adjustYeasts(factor);
-			calcIBUs();
-			calcWater();
-			calcSparge();
-			calcMash();
-		});
-		$('#boil_time').on('change', function (event) {
-			console.log("boil_time change:"+parseFloat(event.args.value)+" old:"+dataRecord.boil_time);
-			var old_evap = parseFloat(dataRecord.boil_size) - parseFloat(dataRecord.batch_size);
-			var new_evap = old_evap * (parseFloat(event.args.value) / dataRecord.boil_time);
-			var new_boil = parseFloat(dataRecord.batch_size) + new_evap;
-			//var factor = new_boil / dataRecord.boil_size;
-			dataRecord.boil_time = parseFloat(event.args.value);
-			dataRecord.boil_size = new_boil;
-			$("#est_pre_vol").val(Math.round(new_boil * 1.04 * 100) / 100);
-			$("#boil_size").val(Math.round(new_boil * 100) / 100);
-			calcFermentables();
-			calcIBUs();
-			calcYeast();
-		});
-		$('#efficiency').on('change', function (event) {
-			var estog = parseFloat($("#est_og").jqxNumberInput('decimal'));
-			dataRecord.efficiency = parseFloat(event.args.value);
-			console.log("efficiency change:"+dataRecord.efficiency+" est_og:"+estog);
-			calcFermentablesFromOG(estog);     // Keep the OG
-			calcFermentables();
-			calcIBUs();
-			calcYeast();
-		});
-		$('#est_og').on('change', function (event) {
-			dataRecord.est_og = parseFloat(event.args.value);
-			console.log("est_og change:"+dataRecord.est_og);
-			$('#est_og2').val(dataRecord.est_og);
-			calcFermentablesFromOG(dataRecord.est_og);	// Adjust fermentables amounts
-			calcFermentables();                             // Update the recipe details
-			calcIBUs();                                     // and the IBU's.
-			calcMash();
-			calcYeast();
-		});
-		$('#mash_ph').on('change', function (event) {
-			dataRecord.mash_ph = parseFloat(event.args.value);
-			calcWater();
-		});
-
-		$('#sparge_ph').on('change', function (event) {
-			dataRecord.sparge_ph = parseFloat(event.args.value);
-			calcSparge();
-		});
-		$('#sparge_volume').on('change', function (event) {
-			dataRecord.sparge_volume = parseFloat(event.args.value);
-			$('#brew_sparge_volume').val(dataRecord.sparge_volume);
-			calcSparge();
-		});
-		$("#sparge_temp").on('change', function (event) {
-			dataRecord.sparge_temp = parseFloat(event.args.value);
-			$('#brew_sparge_temperature').val(dataRecord.sparge_temp);
-		});
-		$('#sparge_source').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.sparge_source= index;
-				calcSparge();
-			}
-		});
-		$('#sparge_acid_type').on('change', function (event) {
-			if (event.args) {
-				var index = event.args.index;
-				dataRecord.sparge_acid_type = index;
-				console.log("new sparge_acid_type: "+dataRecord.sparge_acid_type);
-				calcSparge();
-			}
-		});
-		$('#sparge_acid_perc').on('change', function (event) {
-			dataRecord.sparge_acid_perc = parseFloat(event.args.value);
-			calcSparge();
-		});
-
-		calcFermentation();
-		calcCarbonation();
-		$('#package_volume').on('change', function (event) {
-			var told = dataRecord.package_volume + dataRecord.package_infuse_amount;
-			dataRecord.package_volume = parseFloat(event.args.value);
-			if (dataRecord.package_volume > dataRecord.brew_fermenter_volume) {
-				dataRecord.package_volume = dataRecord.brew_fermenter_volume;
-				$('#package_volume').val(dataRecord.package_volume);
-			}
-			var tnew = dataRecord.package_volume + dataRecord.package_infuse_amount;
-			var diff = tnew - told;
-			if (told > 0) {
-				dataRecord.bottle_amount += (dataRecord.bottle_amount / told) * diff;
-				dataRecord.keg_amount += (dataRecord.keg_amount / told) * diff;
-			} else {
-				dataRecord.bottle_amount = tnew;
-				dataRecord.keg_amount = 0;
-			}
-			console.log("diff:"+diff+" old:"+told+" bottle:"+dataRecord.bottle_amount+" keg:"+dataRecord.keg_amount);
-			$('#bottle_amount').val(parseFloat(dataRecord.bottle_amount * 1000) / 1000);
-			$('#keg_amount').val(parseFloat(dataRecord.keg_amount * 1000) / 1000);
-			calcCarbonation();
-		});
-		$('#package_infuse_amount').on('change', function (event) {
-			var told = dataRecord.package_volume + dataRecord.package_infuse_amount;
-                        dataRecord.package_infuse_amount = parseFloat(event.args.value);
-			var tnew = dataRecord.package_volume + dataRecord.package_infuse_amount;
-                        var diff = tnew - told;
-			if (told > 0) {
-                        	dataRecord.bottle_amount += (dataRecord.bottle_amount / told) * diff;
-                        	dataRecord.keg_amount += (dataRecord.keg_amount / told) * diff;
-			} else {
-				dataRecord.bottle_amount = tnew;
-				dataRecord.keg_amount = 0;
-			}
-                        console.log("diff:"+diff+" old:"+told+" bottle:"+dataRecord.bottle_amount+" keg:"+dataRecord.keg_amount);
-                        $('#bottle_amount').val(parseFloat(dataRecord.bottle_amount * 1000) / 1000);
-                        $('#keg_amount').val(parseFloat(dataRecord.keg_amount * 1000) / 1000);
-                        calcCarbonation();
-                });
-		$('#package_infuse_abv').on('change', function (event) {
-                        dataRecord.package_infuse_abv = parseFloat(event.args.value);
-                        calcCarbonation();
-                });
-		$('#bottle_amount').on('change', function (event) {
-			var vnew = parseFloat(event.args.value);
-			var vtot = dataRecord.package_volume + dataRecord.package_infuse_amount;
-			if (vnew > vtot)
-				vnew = vtot;
-			diff = dataRecord.bottle_amount - vnew;
-			dataRecord.bottle_amount = Math.round((dataRecord.bottle_amount - diff) * 1000) / 1000;
-			dataRecord.keg_amount = Math.round((dataRecord.keg_amount + diff) * 1000) / 1000;
-			$('#bottle_amount').val(parseFloat(dataRecord.bottle_amount));
-			$('#keg_amount').val(parseFloat(dataRecord.keg_amount));
-			calcCarbonation();
-		});
-		$("#bottle_priming_water").on('change', function (event) {
-			dataRecord.bottle_priming_water = parseFloat(event.args.value);
-			calcCarbonation();
-		});
-		$('#keg_amount').on('change', function (event) {
-			var vnew = parseFloat(event.args.value);
-			var vtot = dataRecord.package_volume + dataRecord.package_infuse_amount;
-			if (vnew > vtot)
-				vnew = vtot;
-			diff = dataRecord.keg_amount - vnew;
-			dataRecord.bottle_amount = Math.round((dataRecord.bottle_amount + diff) * 1000) / 1000;
-                        dataRecord.keg_amount = Math.round((dataRecord.keg_amount - diff) * 1000) / 1000;
-			$('#bottle_amount').val(parseFloat(dataRecord.bottle_amount));
-			$('#keg_amount').val(parseFloat(dataRecord.keg_amount));
-			calcCarbonation();
-		});
-		$("#keg_priming_water").on('change', function (event) {
-			dataRecord.keg_priming_water = parseFloat(event.args.value);
-			calcCarbonation();
-		});
-		$('#bottle_carbonation').on('change', function (event) {
-			dataRecord.bottle_carbonation = parseFloat(event.args.value);
-			calcCarbonation();
-		});
-		$('#bottle_carbonation_temp').on('change', function (event) {
-                        dataRecord.bottle_carbonation_temp = parseFloat(event.args.value);
-                        calcCarbonation();
-                });
-		$('#keg_carbonation').on('change', function (event) {
-			dataRecord.keg_carbonation = parseFloat(event.args.value);
-			calcCarbonation();
-		});
-		$("#keg_forced_carb").on('checked', function (event) {
-			dataRecord.keg_forced_carb = 1;
-			calcCarbonation();
-		});
-		$("#keg_forced_carb").on('unchecked', function (event) {
-			dataRecord.keg_forced_carb = 0;
-			calcCarbonation();
-		});
-		$('#keg_carbonation_temp').on('change', function (event) {
-			dataRecord.keg_carbonation_temp = parseFloat(event.args.value);
-			calcCarbonation();
-		});
-
-		$("#brew_fermenter_extrawater").on('change',function (event){
-			dataRecord.brew_fermenter_extrawater=parseFloat(event.args.value);calcFermentables();calcIBUs();calcYeast();
-		});
-		$("#brew_fermenter_tcloss").on('change',function (event){
-			dataRecord.brew_fermenter_tcloss=parseFloat(event.args.value);calcFermentables();calcIBUs();calcYeast();
-		});
-		$("#primary_end_sg").on('change',function (event){dataRecord.primary_end_sg=parseFloat(event.args.value);calcFermentation();});
-		$("#primary_end_brix").on('change', function (event) {
-			if(dataRecord.brew_fermenter_sg>=1.020){
-				OBrix=sg_to_brix(dataRecord.brew_fermenter_sg);
-				FBrix=parseFloat(event.args.value);
-var FG=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-0.000000034*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+0.000000086*Math.pow(FBrix,3),4);
-				//console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
-				if(FBrix>0.05){$("#primary_end_sg").val(FG);dataRecord.primary_end_sg=FG;}
-				calcFermentation();
-			}
-		});
-		$("#secondary_end_sg").on('change',function (event){dataRecord.secondary_end_sg=parseFloat(event.args.value);calcFermentation();});
-		$("#secondary_end_brix").on('change', function (event) {
-                        if(dataRecord.brew_fermenter_sg>=1.020){
-                                OBrix=sg_to_brix(dataRecord.brew_fermenter_sg);
-                                FBrix=parseFloat(event.args.value);
-var FG=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-0.000000034*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+0.000000086*Math.pow(FBrix,3),4);
-                                //console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
-                                if(FBrix>0.05){$("#secondary_end_sg").val(FG);dataRecord.secondary_end_sg=FG;}
-                                calcFermentation();
-                        }
-                });
-		$("#final_brix").on('change',function (event){
-			if(dataRecord.brew_fermenter_sg>=1.020){
-				OBrix=sg_to_brix(dataRecord.brew_fermenter_sg);
-				FBrix=parseFloat(event.args.value);
-var FG=Round(1.0031-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-0.000000034*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+0.000000086*Math.pow(FBrix,3),4);
-// Ook brouwhulp SGFerm() maar is niet in gebruik.
-//var FG=((1.001843-0.002318474*OBrix-0.000007775*(OBrix*OBrix)-0.000000034*Math.pow(OBrix,3)+0.00574*(FBrix)+0.00003344*(FBrix*FBrix)+0.000000086*Math.pow(FBrix,3))+(1.313454)*0.001);
-				//console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
-				if(FBrix>0.05){$("#fg").val(FG);dataRecord.fg=FG;}
-				calcFermentation();
-			}
-		});
-		$("#fg").on('change',function (event){dataRecord.fg=parseFloat(event.args.value);calcFermentation();});
-		$("#BLog").jqxButton({disabled:(dataRecord.log_brew)?false:true});
-		$("#FLog").jqxButton({disabled:(dataRecord.log_fermentation)?false:true});
-	};
-
-	$("#styleSelect").jqxDropDownList({
-		placeHolder: "Kies bierstijl:",
-		theme: theme,
-		source: styleslist,
-		displayMember: "name",
-		width: 180,
-		height: 23,
-		dropDownVerticalAlignment: 'top',
-		dropDownWidth: 500,
-		dropDownHeight: 380,
-		renderer: function (index, label, value) {
-			var datarecord = styleslist.records[index];
-			return datarecord.style_guide + " " + datarecord.style_letter+ " " + datarecord.name;
-		}
-	});
-	$("#styleSelect").on('select', function (event) {
-		if (event.args) {
-			var index = event.args.index;
-			var datarecord = styleslist.records[index];
-			$("#st_name").val(datarecord.name);
-			$("#st_category").val(datarecord.category);
-			$("#st_category_number").val(datarecord.category_number);
-			$("#st_letter").val(datarecord.style_letter);
-			$("#st_guide").val(datarecord.style_guide);
-			$("#st_type").val(StyleTypeData[datarecord.type].nl);
-			$("#st_og_min").val(datarecord.og_min);
-			$("#st_og_max").val(datarecord.og_max);
-			$("#st_fg_min").val(datarecord.fg_min);
-			$("#st_fg_max").val(datarecord.fg_max);
-			$("#st_ibu_min").val(datarecord.ibu_min);
-			$("#st_ibu_max").val(datarecord.ibu_max);
-			$("#st_color_min").val(datarecord.color_min);
-			$("#st_color_max").val(datarecord.color_max);
-			$("#st_carb_min").val(datarecord.carb_min);
-			$("#st_carb_min2").val(datarecord.carb_min);
-			$("#st_carb_max").val(datarecord.carb_max);
-			$("#st_carb_max2").val(datarecord.carb_max);
-			$("#st_abv_min").val(datarecord.abv_min);
-			$("#st_abv_max").val(datarecord.abv_max);
-		}
-	});
-
-	// Equipemnt dropdown list
-	$("#equipmentSelect").jqxDropDownList({
-		placeHolder: "Kies apparatuur:",
-		theme: theme,
-		source: equipmentlist,
-		displayMember: "name",
-		width: 170,
-		height: 23,
-		dropDownWidth: 300,
-		renderer: function (index, label, value) {
-			var datarecord = equipmentlist.records[index];
-			return datarecord.batch_size + " liter " + datarecord.name;
-		}
-	});
-	$("#equipmentSelect").on('select', function (event) {
-		if (event.args) {
-			var index = event.args.index;
-			var datarecord = equipmentlist.records[index];
-			var factor = datarecord.batch_size / dataRecord.batch_size;
-			$("#eq_name").val(datarecord.name);
-			$("#eq_boil_size").val(datarecord.boil_size);
-			dataRecord.boil_size = datarecord.boil_size;
-			$("#boil_size").val(datarecord.boil_size);
-			$("#eq_batch_size").val(datarecord.batch_size);
-			dataRecord.batch_size = datarecord.batch_size;
-			$("#batch_size").val(datarecord.batch_size);
-			$("#est_a_vol").val(datarecord.batch_size * 1.04);
-			$("#eq_tun_volume").val(datarecord.tun_volume);
-			dataRecord.eq_tun_weight = datarecord.tun_weight;
-			dataRecord.eq_tun_specific_heat = datarecord.tun_specific_heat;
-			dataRecord.eq_tun_material = datarecord.tun_material;
-			dataRecord.eq_tun_height = datarecord.tun_height / 100.0;
-			$("#eq_top_up_water").val(datarecord.top_up_water);
-			dataRecord.eq_trub_chiller_loss = datarecord.trub_chiller_loss;
-			$("#eq_trub_chiller_loss").val(datarecord.trub_chiller_loss);
-			$("#eq_evap_rate").val(datarecord.evap_rate);
-			$("#eq_boil_time").val(datarecord.boil_time);
-			dataRecord.eq_calc_boil_volume = datarecord.calc_boil_volume;
-			$("#eq_top_up_kettle").val(datarecord.top_up_kettle);
-			$("#eq_hop_utilization").val(datarecord.hop_utilization);
-			$("#eq_notes").val(datarecord.notes);
-			$("#eq_lauter_volume").val(datarecord.lauter_volume);
-			dataRecord.eq_lauter_height = datarecord.lauter_height / 100.0;
-			$("#eq_lauter_deadspace").val(datarecord.lauter_deadspace);
-			$("#eq_kettle_volume").val(datarecord.kettle_volume);
-			dataRecord.eq_kettle_height = datarecord.kettle_height / 100.0;
-			$("#eq_mash_volume").val(datarecord.mash_volume);
-			$("#eq_mash_max").val(datarecord.mash_max);
-			dataRecord.eq_mash_max = datarecord.mash_max;
-			$("#mash_max").val(datarecord.mash_max);
-			$("#eq_efficiency").val(datarecord.efficiency);
-			dataRecord.efficiency = datarecord.efficiency;
-			$("#efficiency").val(datarecord.efficiency);
-
-			dataRecord.sparge_volume = Math.round(datarecord.boil_size * 5) / 10;
-			$("#sparge_volume").val(dataRecord.sparge_volume);
-			$("#brew_sparge_volume").val(dataRecord.sparge_volume);
-			$("#est_pre_vol").val(datarecord.boil_size * 1.04);
-			calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
-			adjustWaters(factor);
-			calcFermentables();
-			adjustHops(factor);
-			adjustMiscs(factor);
-			adjustYeasts(factor);
-			calcIBUs();
-			calcWater();
-			calcSparge();
-		}
-	});
-
-	function saveRecord() {
-		console.log("saveRecord()");
-		var fermentablerow = $('#fermentableGrid').jqxGrid('getrows');
-		var hoprow = $('#hopGrid').jqxGrid('getrows');
-		var miscrow = $('#miscGrid').jqxGrid('getrows');
-		var yeastrow = $('#yeastGrid').jqxGrid('getrows');
-		var mashrow = $('#mashGrid').jqxGrid('getrows');
-		var row = {
-			record: my_record,
-			uuid: dataRecord.uuid,
-			name: $("#name").val(),
-			code: $("#code").val(),
-			birth: $("#birth").val(),
-			stage: dataRecord.stage,
-			notes: $("#notes").val(),
-			log_brew: dataRecord.log_brew,
-			log_fermentation: dataRecord.log_fermentation,
-			inventory_reduced: dataRecord.inventory_reduced,
-			locked: dataRecord.locked,
-			eq_name: $("#eq_name").val(),
-			eq_boil_size: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')),
-			eq_batch_size: parseFloat($("#eq_batch_size").jqxNumberInput('decimal')),
-			eq_tun_volume: parseFloat($("#eq_tun_volume").jqxNumberInput('decimal')),
-			eq_tun_weight: dataRecord.eq_tun_weight,
-			eq_tun_specific_heat: dataRecord.eq_tun_specific_heat,
-			eq_tun_material: dataRecord.eq_tun_material,
-			eq_tun_height: dataRecord.eq_tun_height,
-			eq_top_up_water: parseFloat($("#eq_top_up_water").jqxNumberInput('decimal')),
-			eq_trub_chiller_loss: parseFloat($("#eq_trub_chiller_loss").jqxNumberInput('decimal')),
-			eq_evap_rate: parseFloat($("#eq_evap_rate").jqxNumberInput('decimal')),
-			eq_boil_time: parseFloat($("#eq_boil_time").jqxNumberInput('decimal')),
-			eq_calc_boil_volume: dataRecord.eq_calc_boil_volume,
-			eq_top_up_kettle: parseFloat($("#eq_top_up_kettle").jqxNumberInput('decimal')),
-			eq_hop_utilization: parseFloat($("#eq_hop_utilization").jqxNumberInput('decimal')),
-			eq_notes: $("#eq_notes").val(),
-			eq_lauter_volume: parseFloat($("#eq_lauter_volume").jqxNumberInput('decimal')),
-			eq_lauter_height: dataRecord.eq_lauter_height,
-			eq_lauter_deadspace: parseFloat($("#eq_lauter_deadspace").jqxNumberInput('decimal')),
-			eq_kettle_volume: parseFloat($("#eq_kettle_volume").jqxNumberInput('decimal')),
-			eq_kettle_height: dataRecord.eq_kettle_height,
-			eq_mash_volume: parseFloat($("#eq_mash_volume").jqxNumberInput('decimal')),
-			eq_mash_max: parseFloat($("#eq_mash_max").jqxNumberInput('decimal')),
-			eq_efficiency: parseFloat($("#eq_efficiency").jqxNumberInput('decimal')),
-			brew_date_start: $("#brew_date_start").val(),
-			brew_mash_ph: parseFloat($("#brew_mash_ph").jqxNumberInput('decimal')),
-			brew_mash_sg: parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')),
-			brew_mash_efficiency: parseFloat($("#brew_mash_efficiency").jqxNumberInput('decimal')),
-			brew_sparge_est: parseFloat($("#brew_sparge_est").jqxNumberInput('decimal')),
-			brew_sparge_ph: parseFloat($("#brew_sparge_ph").jqxNumberInput('decimal')),
-			brew_preboil_volume: parseFloat($("#brew_preboil_volume").jqxNumberInput('decimal')),
-			brew_preboil_sg: parseFloat($("#brew_preboil_sg").jqxNumberInput('decimal')),
-			brew_preboil_ph: parseFloat($("#brew_preboil_ph").jqxNumberInput('decimal')),
-			brew_preboil_efficiency: parseFloat($("#brew_preboil_efficiency").jqxNumberInput('decimal')),
-			brew_aboil_volume: parseFloat($("#brew_aboil_volume").jqxNumberInput('decimal')),
-			brew_aboil_sg: parseFloat($("#brew_aboil_sg").jqxNumberInput('decimal')),
-			brew_aboil_ph: parseFloat($("#brew_aboil_ph").jqxNumberInput('decimal')),
-			brew_aboil_efficiency: parseFloat($("#brew_aboil_efficiency").jqxNumberInput('decimal')),
-			brew_cooling_method: $("#brew_cooling_method").val(),
-			brew_cooling_time: parseFloat($("#brew_cooling_time").jqxNumberInput('decimal')),
-			brew_cooling_to: parseFloat($("#brew_cooling_to").jqxNumberInput('decimal')),
-			brew_whirlpool9: parseFloat($("#brew_whirlpool9").jqxNumberInput('decimal')),
-			brew_whirlpool7: parseFloat($("#brew_whirlpool7").jqxNumberInput('decimal')),
-			brew_whirlpool6: parseFloat($("#brew_whirlpool6").jqxNumberInput('decimal')),
-			brew_whirlpool2: parseFloat($("#brew_whirlpool2").jqxNumberInput('decimal')),
-			brew_fermenter_volume: parseFloat($("#brew_fermenter_volume").jqxNumberInput('decimal')),
-			brew_fermenter_extrawater: parseFloat($("#brew_fermenter_extrawater").jqxNumberInput('decimal')),
-			brew_fermenter_tcloss: parseFloat($("#brew_fermenter_tcloss").jqxNumberInput('decimal')),
-			brew_aeration_time: parseFloat($("#brew_aeration_time").jqxNumberInput('decimal')),
-			brew_aeration_speed: parseFloat($("#brew_aeration_speed").jqxNumberInput('decimal')),
-			brew_aeration_type: $("#brew_aeration_type").val(),
-			brew_fermenter_sg: parseFloat($("#brew_fermenter_sg").jqxNumberInput('decimal')),
-			brew_fermenter_ibu: parseFloat($("#brew_fermenter_ibu").jqxNumberInput('decimal')),
-			brew_fermenter_color: parseFloat($("#brew_fermenter_color").jqxNumberInput('decimal')),
-			brew_date_end: $("#brew_date_end").val(),
-			og: dataRecord.og,
-			fg: parseFloat($("#fg").jqxNumberInput('decimal')),
-			primary_start_temp: parseFloat($("#primary_start_temp").jqxNumberInput('decimal')),
-			primary_max_temp: parseFloat($("#primary_max_temp").jqxNumberInput('decimal')),
-			primary_end_temp: parseFloat($("#primary_end_temp").jqxNumberInput('decimal')),
-			primary_end_sg: parseFloat($("#primary_end_sg").jqxNumberInput('decimal')),
-			primary_end_date: $("#primary_end_date").val(),
-			secondary_temp: parseFloat($("#secondary_temp").jqxNumberInput('decimal')),
-			secondary_end_sg: parseFloat($("#secondary_end_sg").jqxNumberInput('decimal')),
-			secondary_end_date: $("#secondary_end_date").val(),
-			tertiary_temp: parseFloat($("#tertiary_temp").jqxNumberInput('decimal')),
-			package_date: $("#package_date").val(),
-			package_volume: parseFloat($("#package_volume").jqxNumberInput('decimal')),
-			package_infuse_amount: parseFloat($("#package_infuse_amount").jqxNumberInput('decimal')),
-			package_infuse_abv: parseFloat($("#package_infuse_abv").jqxNumberInput('decimal')),
-			package_infuse_notes: $("#package_infuse_notes").val(),
-			package_abv: parseFloat($("#package_abv").jqxNumberInput('decimal')),
-			package_ph: parseFloat($("#package_ph").jqxNumberInput('decimal')),
-			bottle_amount: parseFloat($("#bottle_amount").jqxNumberInput('decimal')),
-			bottle_carbonation: parseFloat($("#bottle_carbonation").jqxNumberInput('decimal')),
-			bottle_priming_water: parseFloat($("#bottle_priming_water").jqxNumberInput('decimal')),
-			bottle_priming_amount: parseFloat($("#bottle_priming_amount").jqxNumberInput('decimal')),
-			bottle_carbonation_temp: parseFloat($("#bottle_carbonation_temp").jqxNumberInput('decimal')),
-			keg_amount: parseFloat($("#keg_amount").jqxNumberInput('decimal')),
-			keg_carbonation: parseFloat($("#keg_carbonation").jqxNumberInput('decimal')),
-			keg_priming_water: parseFloat($("#keg_priming_water").jqxNumberInput('decimal')),
-			keg_priming_amount: parseFloat($("#keg_priming_amount").jqxNumberInput('decimal')),
-			keg_carbonation_temp: parseFloat($("#keg_carbonation_temp").jqxNumberInput('decimal')),
-			keg_forced_carb: dataRecord.keg_forced_carb,
-			keg_pressure: parseFloat($("#keg_pressure").jqxNumberInput('decimal')),
-			taste_notes: $("#taste_notes").val(),
-			taste_rate: parseFloat($("#taste_rate").jqxNumberInput('decimal')),
-			taste_date: $("#taste_date").val(),
-			taste_color: $("#taste_color").val(),
-			taste_transparency: $("#taste_transparency").val(),
-			taste_head: $("#taste_head").val(),
-			taste_aroma: $("#taste_aroma").val(),
-			taste_taste: $("#taste_taste").val(),
-			taste_mouthfeel: $("#taste_mouthfeel").val(),
-			taste_aftertaste: $("#taste_aftertaste").val(),
-			st_name: $('#st_name').val(),
-			st_letter: $('#st_letter').val(),
-			st_guide: $('#st_guide').val(),
-			st_type: dataRecord.st_type,
-			st_category: $('#st_category').val(),
-			st_category_number: parseFloat($("#st_category_number").jqxNumberInput('decimal')),
-			st_og_min: parseFloat($("#st_og_min").jqxNumberInput('decimal')),
-			st_og_max: parseFloat($("#st_og_max").jqxNumberInput('decimal')),
-			st_fg_min: parseFloat($("#st_fg_min").jqxNumberInput('decimal')),
-			st_fg_max: parseFloat($("#st_fg_max").jqxNumberInput('decimal')),
-			st_ibu_min: parseFloat($("#st_ibu_min").jqxNumberInput('decimal')),
-			st_ibu_max: parseFloat($("#st_ibu_max").jqxNumberInput('decimal')),
-			st_color_min: parseFloat($("#st_color_min").jqxNumberInput('decimal')),
-			st_color_max: parseFloat($("#st_color_max").jqxNumberInput('decimal')),
-			st_carb_min: parseFloat($("#st_carb_min").jqxNumberInput('decimal')),
-			st_carb_max: parseFloat($("#st_carb_max").jqxNumberInput('decimal')),
-			st_abv_min: parseFloat($("#st_abv_min").jqxNumberInput('decimal')),
-			st_abv_max: parseFloat($("#st_abv_max").jqxNumberInput('decimal')),
-			type: $("#type").val(),
-			batch_size: parseFloat($("#batch_size").jqxNumberInput('decimal')),
-			boil_size: parseFloat($("#boil_size").jqxNumberInput('decimal')),
-			boil_time: parseFloat($("#boil_time").jqxNumberInput('decimal')),
-			efficiency: parseFloat($("#efficiency").jqxNumberInput('decimal')),
-			est_og: parseFloat($("#est_og").jqxNumberInput('decimal')),
-			est_fg: parseFloat($("#est_fg").jqxNumberInput('decimal')),
-			est_abv: parseFloat($("#est_abv").jqxNumberInput('decimal')),
-			est_color: parseFloat($("#est_color").jqxNumberInput('decimal')),
-			color_method: $("#color_method").val(),
-			est_ibu: parseFloat($("#est_ibu").jqxNumberInput('decimal')),
-			ibu_method: $("#ibu_method").val(),
-			est_carb: parseFloat($("#est_carb").jqxNumberInput('decimal')),
-			mash_name: $("#mash_name").val(),
-			mash_ph: parseFloat($("#mash_ph").jqxNumberInput('decimal')),
-			sparge_temp: parseFloat($("#sparge_temp").jqxNumberInput('decimal')),
-			sparge_ph: parseFloat($("#sparge_ph").jqxNumberInput('decimal')),
-			sparge_volume: parseFloat($("#sparge_volume").jqxNumberInput('decimal')),
-			sparge_source: $("#sparge_source").val(),
-			sparge_acid_type: $("#sparge_acid_type").val(),
-			sparge_acid_perc: parseFloat($("#sparge_acid_perc").jqxNumberInput('decimal')),
-			sparge_acid_amount: dataRecord.sparge_acid_amount,
-			calc_acid: dataRecord.calc_acid,
-			w1_name: $("#w1_name").val(),
-			w1_amount: parseFloat($("#w1_amount").jqxNumberInput('decimal')),
-			w1_calcium: parseFloat($("#w1_calcium").jqxNumberInput('decimal')),
-			w1_sulfate: parseFloat($("#w1_sulfate").jqxNumberInput('decimal')),
-			w1_chloride: parseFloat($("#w1_chloride").jqxNumberInput('decimal')),
-			w1_sodium: parseFloat($("#w1_sodium").jqxNumberInput('decimal')),
-			w1_magnesium: parseFloat($("#w1_magnesium").jqxNumberInput('decimal')),
-			w1_total_alkalinity: parseFloat($("#w1_total_alkalinity").jqxNumberInput('decimal')),
-			w1_ph: parseFloat($("#w1_ph").jqxNumberInput('decimal')),
-			w1_cost: dataRecord.w1_cost,
-			w2_name: $("#w2_name").val(),
-			w2_amount: parseFloat($("#w2_amount").jqxNumberInput('decimal')),
-			w2_calcium: parseFloat($("#w2_calcium").jqxNumberInput('decimal')),
-			w2_sulfate: parseFloat($("#w2_sulfate").jqxNumberInput('decimal')),
-			w2_chloride: parseFloat($("#w2_chloride").jqxNumberInput('decimal')),
-			w2_sodium: parseFloat($("#w2_sodium").jqxNumberInput('decimal')),
-			w2_magnesium: parseFloat($("#w2_magnesium").jqxNumberInput('decimal')),
-			w2_total_alkalinity: parseFloat($("#w2_total_alkalinity").jqxNumberInput('decimal')),
-			w2_ph: parseFloat($("#w2_ph").jqxNumberInput('decimal')),
-			w2_cost: dataRecord.w2_cost,
-			wg_amount: parseFloat($("#wg_amount").jqxNumberInput('decimal')),
-                        wg_calcium: parseFloat($("#wg_calcium").jqxNumberInput('decimal')),
-                        wg_sulfate: parseFloat($("#wg_sulfate").jqxNumberInput('decimal')),
-                        wg_chloride: parseFloat($("#wg_chloride").jqxNumberInput('decimal')),
-                        wg_sodium: parseFloat($("#wg_sodium").jqxNumberInput('decimal')),
-                        wg_magnesium: parseFloat($("#wg_magnesium").jqxNumberInput('decimal')),
-                        wg_total_alkalinity: parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal')),
-                        wg_ph: parseFloat($("#wg_ph").jqxNumberInput('decimal')),
-                        wb_calcium: parseFloat($("#wb_calcium").jqxNumberInput('decimal')),
-                        wb_sulfate: parseFloat($("#wb_sulfate").jqxNumberInput('decimal')),
-                        wb_chloride: parseFloat($("#wb_chloride").jqxNumberInput('decimal')),
-                        wb_sodium: parseFloat($("#wb_sodium").jqxNumberInput('decimal')),
-                        wb_magnesium: parseFloat($("#wb_magnesium").jqxNumberInput('decimal')),
-                        wb_total_alkalinity: parseFloat($("#wb_total_alkalinity").jqxNumberInput('decimal')),
-                        wb_ph: parseFloat($("#wb_ph").jqxNumberInput('decimal')),
-			wa_acid_name: $("#wa_acid_name").val(),
-			wa_acid_perc: parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')),
-			wa_base_name: $("#wa_base_name").val(),
-			starter_enable: dataRecord.starter_enable,
-			starter_type: $("#starter_type").val(),
-			starter_sg: parseFloat($("#starter_sg").jqxNumberInput('decimal')),
-			starter_viability: parseFloat($("#starter_viability").jqxNumberInput('decimal')),
-			prop1_type: $("#prop1_type").val(),
-			prop1_volume: parseFloat($("#prop1_volume").jqxNumberInput('decimal')),
-			prop2_type: $("#prop2_type").val(),
-			prop2_volume: parseFloat($("#prop2_volume").jqxNumberInput('decimal')),
-			prop3_type: $("#prop3_type").val(),
-			prop3_volume: parseFloat($("#prop3_volume").jqxNumberInput('decimal')),
-			prop4_type: $("#prop4_type").val(),
-			prop4_volume: parseFloat($("#prop4_volume").jqxNumberInput('decimal')),
-			fermentables: fermentablerow,
-			hops: hoprow,
-			miscs: miscrow,
-			yeasts: yeastrow,
-			mashs: mashrow
-		};
-		var data = "update=true&" + $.param(row);
-		$.ajax({
-			dataType: 'json',
-			url: url,
-			cache: false,
-			data: data,
-			async: false,
-			type: "POST",
-			success: function (data, status, xhr) {
-				console.log("saveRecord() success");
-			},
-			error: function(jqXHR, textStatus, errorThrown) {
-				console.log("saveRecord() error");
-			}
-		});
-	};
-
-	var dataRecord = {};
-	var url = "includes/db_product.php";
+    var i,
+	to_100 = false,		// Fermentables adjust to 100%
+	preboil_sg = 0,
+	aboil_sg = 0,
+	est_mash_sg = 0,
+	psugar = 0,		// Percentage real sugars
+	pcara = 0,		// Percentage cara/crystal malts
+	svg = 77,               // Default attenuation
+        mashkg = 0,             // Malt in mash weight
+	pitchrate = 0.75,	// Yeast pitch rate default
+	initcells = 0,		// Initial yeast cell count
+
+	ok_fermentables = 1,	// Fermentables are in stock
+	ok_hops = 1,		// Hops are in stock
+	ok_miscs = 1,		// Miscs are in stock
+	ok_yeasts = 1,		// Yeasts are in stock
+	ok_waters = 1,		// Waters are in stock
+
+        hop_flavour = 0,
+        hop_aroma = 0,
+        mash_infuse = 0,
+        last_base = '',
+        last_acid = '',
+
+        MMCa = 40.048,
+        MMMg = 24.305,
+        MMNa = 22.98976928,
+        MMCl = 35.453,
+        MMSO4 = 96.0626,
+        MMHCO3 = 61.01684,
+        MMCaSO4 = 172.171,
+        MMCaCl2 = 147.015,
+        MMCaCO3 = 100.087,
+        MMMgSO4 = 246.475,
+        MMNaHCO3 = 84.007,
+        MMNa2CO3 = 105.996,
+        MMNaCl = 58.443,
+        MMCaOH2 = 74.06268,
+
+	fermentableRow = 0,
+	fermentableData = {},
+	fermentableInit = 1,
+	hopRow = 0,
+	hopData = {},
+	miscRow = 0,
+	miscData = {},
+	yeastRow = 0,
+	yeastData = {},
+	mashRow = 0,
+	mashData = {},
+	Ka1 = 0.0000004445,
+	Ka2 = 0.0000000000468,
+	dataRecord = {},
+	url = "includes/db_product.php",
 
 	// Prepare the data
-	var source = {
+	source = {
 		datatype: "json",
 		cache: false,
 		datafields: [
@@ -3125,9 +312,9 @@
 		],
 		id: 'record',
 		url: url + '?record=' + my_record
-	};
+	},
 	// Load data and select one record.
-	var dataAdapter = new $.jqx.dataAdapter(source, {
+	dataAdapter = new $.jqx.dataAdapter(source, {
 		loadComplete: function () {
 			var records = dataAdapter.records;
 			dataRecord = records[0];
@@ -3354,11 +541,10 @@
                 beforeLoadComplete: function (records) {
                         $('#jqxLoader').jqxLoader('open');
                 }
-	});
-	dataAdapter.dataBind();
+	}),
 
         // Inline fermentables editor
-        var editFermentable = function (data) {
+        editFermentable = function (data) {
                 var fermentableSource = {
                         localdata: data.fermentables,
                         datatype: "local",
@@ -3402,8 +588,9 @@
 				//console.log("fermentable updaterow "+rowid);
 				commit(true);
 			}
-                };
-                var fermentableAdapter = new $.jqx.dataAdapter(fermentableSource);
+                },
+                fermentableAdapter = new $.jqx.dataAdapter(fermentableSource);
+
                 $("#fermentableGrid").jqxGrid({
                         width: 1240,
                         height: 470,
@@ -3437,10 +624,9 @@
                                 });
                                 $("#faddrowbutton").on('select', function (event) {
                                         if (event.args) {
-                                                var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
-                                                var index = event.args.index;
-                                                var datarecord = fermentablelist.records[index];
-                                                var row = {};
+                                                var index, datarecord, row = {}, rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+                                                index = event.args.index;
+                                                datarecord = fermentablelist.records[index];
                                                 row["f_name"] = datarecord.name;
                                                 row["f_origin"] = datarecord.origin;
                                                 row["f_supplier"] = datarecord.supplier;
@@ -3489,19 +675,20 @@
                                 // delete selected fermentable.
                                 $("#fdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#fdeleterowbutton").on('click', function () {
-                                        var selectedrowindex = $("#fermentableGrid").jqxGrid('getselectedrowindex');
-                                        var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+					var rowscount, id, percent, amount, i, rowdata,
+                                        selectedrowindex = $("#fermentableGrid").jqxGrid('getselectedrowindex');
+                                        rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
                                         if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
-                                                var id = $("#fermentableGrid").jqxGrid('getrowid', selectedrowindex);
-                                                var percent = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_percentage");
-                                                var amount = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_amount");
+                                                id = $("#fermentableGrid").jqxGrid('getrowid', selectedrowindex);
+                                                percent = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_percentage");
+                                                amount = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_amount");
                                                 $("#fermentableGrid").jqxGrid('deleterow', id);
                                         }
                                         rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
                                         if (rowscount > 1) {
                                                 if (to_100) {
-                                                        for (var i = 0; i < rowscount; i++) {
-                                                                var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+                                                        for (i = 0; i < rowscount; i++) {
+                                                                rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
                                                                 if (rowdata.f_adjust_to_total_100) {
                                                                         rowdata.f_percentage += percent;
                                                                         rowdata.f_amount += amount;
@@ -3599,10 +786,10 @@
 				}
                         ]
                 });
-        };
+        },
 
         // Inline hops editor
-        var editHop = function (data) {
+        editHop = function (data) {
                 var hopSource = {
                         localdata: data.hops,
                         datatype: "local",
@@ -3640,8 +827,9 @@
 				console.log("hop updaterow "+rowid);
 				commit(true);
 			}
-                };
-                var hopAdapter = new $.jqx.dataAdapter(hopSource);
+                },
+                hopAdapter = new $.jqx.dataAdapter(hopSource);
+
                 $("#hopGrid").jqxGrid({
                         width: 1240,
                         height: 560,
@@ -3676,9 +864,8 @@
                                 });
                                 $("#haddrowbutton").on('select', function (event) {
                                         if (event.args) {
-                                                var index = event.args.index;
-                                                var datarecord = hoplist.records[index];
-                                                var row = {};
+                                                var datarecord, row = {}, index = event.args.index;
+                                                datarecord = hoplist.records[index];
                                                 row["h_name"] = datarecord.name;
                                                 row["h_origin"] = datarecord.origin;
                                                 row["h_amount"] = 0;
@@ -3710,10 +897,10 @@
                                 // delete selected hop.
                                 $("#hdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#hdeleterowbutton").on('click', function () {
-                                        var selectedrowindex = $("#hopGrid").jqxGrid('getselectedrowindex');
-                                        var rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
+                                        var rowscount, id, selectedrowindex = $("#hopGrid").jqxGrid('getselectedrowindex');
+                                        rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
                                         if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
-                                                var id = $("#hopGrid").jqxGrid('getrowid', selectedrowindex);
+                                                id = $("#hopGrid").jqxGrid('getrowid', selectedrowindex);
                                                 $("#hopGrid").jqxGrid('deleterow', id);
                                         }
 					calcIBUs();
@@ -3775,10 +962,10 @@
 				  cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) {
 					if (((dataRecord.inventory_reduced <= 2) && (rowdata.h_useat <= 4)) ||  // Mash, FW, Boil, Aroma, Whirlpool
                                             ((dataRecord.inventory_reduced <= 6) && (rowdata.h_useat == 5))) {	// Dry hop
-						var color = '#ffffff';
+						var amount, color = '#ffffff';
 						if (value < rowdata.h_amount)
 							color = '#ff4040';
-						var amount = dataAdapter.formatNumber(value, "f1") + ' kg';
+						amount = dataAdapter.formatNumber(value, "f1") + ' kg';
 						if (value < 1)
 							amount = dataAdapter.formatNumber(value * 1000, "f1") + ' gr';
 						return  '<span style="margin: 4px; margin-top: 6px; float: right; color: '+color+';">'+amount+'</span>';
@@ -3816,10 +1003,10 @@
 				}
                         ]
                 });
-        };
+        },
 
         // Inline miscs editor
-        var editMisc = function (data) {
+        editMisc = function (data) {
                 var miscSource = {
                         localdata: data.miscs,
                         datatype: "local",
@@ -3848,12 +1035,12 @@
 				console.log("misc updaterow "+rowid);
 				commit(true);
 			}
-                };
-                var miscAdapter = new $.jqx.dataAdapter(miscSource, {
+                },
+                miscAdapter = new $.jqx.dataAdapter(miscSource, {
                         beforeLoadComplete: function (records) {
-                                var data = new Array();
-                                for (var i = 0; i < records.length; i++) {
-                                        var row = records[i];
+                                var row, i, data = new Array();
+                                for (i = 0; i < records.length; i++) {
+                                        row = records[i];
                                         data.push(row);
                                         // Initial set water agent values.
                                         switch (row.m_name) {
@@ -3938,9 +1125,8 @@
                                 });
                                 $("#maddrowbutton").on('select', function (event) {
                                         if (event.args) {
-                                                var index = event.args.index;
-                                                var datarecord = misclist.records[index];
-                                                var row = {};
+                                                var datarecord, row = {}, index = event.args.index;
+                                                datarecord = misclist.records[index];
                                                 row["m_name"] = datarecord.name;
                                                 row["m_amount"] = 0;
                                                 row["m_cost"] = datarecord.cost;
@@ -3960,11 +1146,11 @@
                                 // delete selected misc.
                                 $("#mdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#mdeleterowbutton").on('click', function () {
-                                        var selectedrowindex = $("#miscGrid").jqxGrid('getselectedrowindex');
-                                        var rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
-                                        var type = $("#miscGrid").jqxGrid('getcellvalue', selectedrowindex, "m_type");
+                                        var rowscount, type, id, selectedrowindex = $("#miscGrid").jqxGrid('getselectedrowindex');
+                                        rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
+                                        type = $("#miscGrid").jqxGrid('getcellvalue', selectedrowindex, "m_type");
                                         if (selectedrowindex >= 0 && selectedrowindex < rowscount && type != 4)  {	// Water agent
-                                                var id = $("#miscGrid").jqxGrid('getrowid', selectedrowindex);
+                                                id = $("#miscGrid").jqxGrid('getrowid', selectedrowindex);
                                                 $("#miscGrid").jqxGrid('deleterow', id);
                                         }
                                 });
@@ -4004,15 +1190,16 @@
 				},
 				{ text: 'Voorraad', datafield: 'm_inventory', width: 110, align: 'right',
 				  cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) {
+					var vstr, color, amount;
 					if (((dataRecord.inventory_reduced <= 2) && (rowdata.m_use_use <= 2)) ||  // Starter, Mash, Boil
 					    ((dataRecord.inventory_reduced <= 3) && (rowdata.m_use_use == 3)) ||  // Primary
 					    ((dataRecord.inventory_reduced <= 5) && (rowdata.m_use_use == 4)) ||  // Secondary, Teriary
                                             ((dataRecord.inventory_reduced <= 6) && (rowdata.m_use_use == 5))) {  // Bottle
-						var vstr = rowdata.m_amount_is_weight ? "gr":"ml";
-						var color = '#ffffff';
+						vstr = rowdata.m_amount_is_weight ? "gr":"ml";
+						color = '#ffffff';
 						if (value < rowdata.m_amount)
 							color = '#ff4040';
-						var amount = dataAdapter.formatNumber(value * 1000,"f2")+" "+vstr;
+						amount = dataAdapter.formatNumber(value * 1000,"f2")+" "+vstr;
 						return  '<span style="margin: 4px; margin-top: 6px; float: right; color: '+color+';">'+amount+'</span>';
 					} else {
 						return '<span></span>';
@@ -4048,10 +1235,10 @@
 				}
                         ]
                 });
-        };
+        },
 
         // Inline yeasts editor
-        var editYeast = function (data) {
+        editYeast = function (data) {
                 var yeastSource = {
                         localdata: data.yeasts,
                         datatype: "local",
@@ -4087,8 +1274,9 @@
 				console.log("yeast updaterow "+rowid);
 				commit(true);
 			}
-                };
-                var yeastAdapter = new $.jqx.dataAdapter(yeastSource);
+                },
+                yeastAdapter = new $.jqx.dataAdapter(yeastSource);
+
                 $("#yeastGrid").jqxGrid({
                         width: 1240,
                         height: 350,
@@ -4122,9 +1310,8 @@
                                 });
                                 $("#yaddrowbutton").on('select', function (event) {
                                         if (event.args) {
-                                                var index = event.args.index;
-                                                var datarecord = yeastlist.records[index];
-                                                var row = {};
+                                                var datarecord, row = {}, index = event.args.index;
+                                                datarecord = yeastlist.records[index];
                                                 row["y_name"] = datarecord.name;
                                                 row["y_laboratory"] = datarecord.laboratory;
                                                 row["y_product_id"] = datarecord.product_id;
@@ -4153,10 +1340,10 @@
                                 // delete selected yeast.
                                 $("#ydeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#ydeleterowbutton").on('click', function () {
-                                        var selectedrowindex = $("#yeastGrid").jqxGrid('getselectedrowindex');
-                                        var rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
+                                        var id, rowscount, selectedrowindex = $("#yeastGrid").jqxGrid('getselectedrowindex');
+                                        rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
                                         if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
-                                                var id = $("#yeastGrid").jqxGrid('getrowid', selectedrowindex);
+                                                id = $("#yeastGrid").jqxGrid('getrowid', selectedrowindex);
                                                 $("#yeastGrid").jqxGrid('deleterow', id);
 						calcYeast();
                                         }
@@ -4181,8 +1368,7 @@
                                 { text: 'Max. &deg;C', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_max_temperature' },
 				{ text: 'Tol. %', width: 60, align: 'right', cellsalign: 'right', datafield: 'y_tolerance',
 				  cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) {
-					var color = '#ffffff';
-					var amount = "";
+					var amount = "", color = '#ffffff';
 					if (value > 0) {
 						amount = dataAdapter.formatNumber(value, "f1");
 						if (dataRecord.est_abv > value)
@@ -4209,14 +1395,15 @@
 				},
 				{ text: 'Voorraad', datafield: 'y_inventory', width: 90, align: 'right',
 				  cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) {
+					var color, amount;
 					if (((dataRecord.inventory_reduced <= 3) && (rowdata.y_use == 0)) ||  // Primary
                                             ((dataRecord.inventory_reduced <= 4) && (rowdata.y_use == 1)) ||  // Secondary
                                             ((dataRecord.inventory_reduced <= 5) && (rowdata.y_use == 2)) ||  // Tertiary
                                             ((dataRecord.inventory_reduced <= 6) && (rowdata.y_use == 3))) {  // Bottle
-						var color = '#ffffff';
+						color = '#ffffff';
 						if (value < rowdata.y_amount)
 							color = '#ff4040';
-						var amount = dataAdapter.formatNumber(value*1000, "f0")+" ml";
+						amount = dataAdapter.formatNumber(value*1000, "f0")+" ml";
 						if (rowdata.y_form == 0)        // Liquid
 							amount = dataAdapter.formatNumber(value, "f0")+" pk";
 						else if (rowdata.y_form == 1)   // Dry
@@ -4259,10 +1446,9 @@
 				}
                         ]
                 });
-        };
-
+        },
         // inline mash editor
-        var editMash = function (data) {
+        editMash = function (data) {
                 var mashSource = {
                         localdata: data.mashs,
                         datatype: "local",
@@ -4284,13 +1470,13 @@
                         deleterow: function (rowid, commit) {
                                 commit(true);
                         }
-                };
-                var mashAdapter = new $.jqx.dataAdapter(mashSource, {
+                },
+                mashAdapter = new $.jqx.dataAdapter(mashSource, {
                         beforeLoadComplete: function (records) {
                                 mash_infuse = 0;
-                                var data = new Array();
-                                for (var i = 0; i < records.length; i++) {
-                                        var row = records[i];
+                                var i, row, data = new Array();
+                                for (i = 0; i < records.length; i++) {
+                                        row = records[i];
                                         if (row.step_type == 0)	// Infusion
                                                 mash_infuse += parseFloat(row.step_infuse_amount);
 					row.step_thickness = 0; // Init this field.
@@ -4312,8 +1498,7 @@
                                 container.append('<input style="float: left; margin-left: 565px;" id="sdeleterowbutton" type="button" value="Verwijder stap" />');
                                 $("#saddrowbutton").jqxButton({ template: "primary", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#saddrowbutton").on('click', function () {
-					var rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
-					var row = {};
+					var row = {}, rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
 					row["step_name"] = "Stap " + (rowscount + 1);
 					if (rowscount > 0) {
 						row["step_type"] = 1;
@@ -4331,10 +1516,10 @@
                                 // delete selected step.
                                 $("#sdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) });
                                 $("#sdeleterowbutton").on('click', function () {
-                                        var selectedrowindex = $("#mashGrid").jqxGrid('getselectedrowindex');
-                                        var rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
+                                        var rowscount, id, selectedrowindex = $("#mashGrid").jqxGrid('getselectedrowindex');
+                                        rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
                                         if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
-                                                var id = $("#mashGrid").jqxGrid('getrowid', selectedrowindex);
+                                                id = $("#mashGrid").jqxGrid('getrowid', selectedrowindex);
 						$("#mashGrid").jqxGrid('deleterow', id);
                                         }
                                 });
@@ -4389,6 +1574,2810 @@
                 });
         };
 
+	/*
+         * Remove the top menu so that we MUST use the buttons to leave the editor.
+         */
+        $('#jqxMenu').jqxMenu('destroy');
+        console.log("record:" + my_record + "  return:" + my_return + "  theme:" + theme);
+        $("#jqxLoader").jqxLoader({width:250,height:150,isModal:true,text:"Laden product ...",theme:theme});
+	dataAdapter.dataBind();
+
+	/*
+	 * Generic functions
+	 */
+        function calcSupplies() {
+                if (dataRecord.inventory_reduced > 6) {
+                        $("#ok_pmpt").hide();
+                        return;
+                }
+                if (ok_fermentables && ok_hops && ok_miscs && ok_yeasts && ok_waters)
+                        $("#ok_supplies").html("<img src='images/dialog-ok-apply.png'>");
+                else
+                        $("#ok_supplies").html("<img src='images/dialog-error.png'>");
+        }
+
+        function calcPercentages() {
+
+                console.log("calcPercentages()");
+                var tw = 0, rowdata, percentage, rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount > 1) {
+                        for (i = 0; i < rowscount; i++) {
+                                rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+                                if (rowdata.f_added < 4)
+                                        tw += Round(rowdata.f_amount, 3);
+                        };
+                        tw = Round(tw, 3);
+
+                        for (i = 0; i < rowscount; i++) {
+                                rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+                                if (rowdata.f_added < 4) {
+                                        percentage = Round(rowdata.f_amount / tw * 100, 1);
+                                        $("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", percentage);
+                                } else {
+                                        $("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", 0);
+                                }
+                        };
+                } else {
+                        $("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100);
+                }
+        }
+
+        /* 
+         * All calculations that depend on changes in the fermentables,
+         * volumes and equipments.
+         */
+        function calcFermentables() {
+
+            var sugarsf = 0,		// fermentable sugars mash + boil
+                sugarsm = 0,		// fermentable sugars in mash
+                vol = 0,            	// Volume sugars after boil
+                addedS = 0,         	// Added sugars after boil
+                addedmass = 0,      	// Added mass after boil
+                mvol = 0,           	// mash volume
+                colort = 0,         	// Colors srm * vol totals
+                colorh = 0,         	// Colors ebc * vol * kt
+                colorn = 0,         	// Colors ebc * pt * pct
+                my_100 = false,
+                mashtime = 0,       	// Total mash time
+                mashtemp = 0,       	// Average mash temperature
+                bv = 0.925,         	// Bierverlies rendement
+                sr = 0.95,          	// Mash en spoel rendement
+                lintner = 0,        	// Total recipe lintner
+		i, row, rows, org, timem, aboil_volume, spoelw, ogx, topw, s = 0, d, v, x,
+		sug, alc, pt, cw, color, scolor, fig;
+
+		/* Init global variables */
+		psugar = 0;
+                pcara = 0;
+                mashkg = 0;
+                ok_fermentables = 1;    // All is in stock.
+                ok_yeasts = 1;
+
+               	if ((rows = $('#mashGrid').jqxGrid('getrows'))){
+                        for (i = 0; i <rows.length; i++){
+                                row=rows[i];
+                                if(row.step_type==0) // Infusion
+                                        mvol+=parseFloat(row.step_infuse_amount);
+                                if(row.step_temp<=75){ // Ignore mashout
+                                        timem=row.step_time+row.ramp_time;
+                                        mashtime+=timem;
+                                        mashtemp+=timem*row.step_temp;
+                                }
+                        }
+                        if(mashtime>5)
+                                mashtime-=5;//Correct last ramp > 75
+                        mashtemp=Round(mashtemp/mashtime,2);
+                }
+
+                if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
+                        return; // grid not yet loaded.
+                }
+
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if (row.f_adjust_to_total_100)
+                                my_100 = true;
+                        if (row.f_type == 1 && row.f_added < 4) // Sugar
+                                psugar += row.f_percentage;
+                        if (row.f_graintype == 2 && row.f_added < 4)    // Crystal
+                                pcara += row.f_percentage;
+                        d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                        if (row.f_added == 0) { // Mash
+                                if (mvol > 0) { // Only if mash already known.
+                                        mvol += row.f_amount * row.f_moisture / 100;
+                                        s += d;
+                                }
+                                d = parseFloat(dataRecord.efficiency) / 100 * d;
+                                sugarsm += d;
+                                mashkg += parseFloat(row.f_amount);
+                        }
+                       	if (row.f_added == 0 || row.f_added == 1)       // Mash or Boil
+                                sugarsf += d;
+                        if (row.f_added == 2 || row.f_added == 3) {     // Fermentation or lagering
+                                x = (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                                addedS += row.f_amount * x;
+                                addedmass += row.f_amount;
+                                vol += (x * sugardensity + (1 - x) * 1) * row.f_amount;
+                        }
+                        if (row.f_added < 4) {
+                                colort += row.f_amount * ebc_to_srm(row.f_color);
+                                colorh += row.f_amount * row.f_color * get_kt(row.f_color);
+                                colorn += (row.f_percentage / 100) * row.f_color;       // For 8.6 Pt wort.
+                        }
+                        if (fermentableInit) {
+                                if (row.f_added == 4) {
+                                        $("#bottle_priming_total").val(row.f_amount * 1000);    // Prevent clearing
+                                        $("#bottle_priming_sugar").jqxDropDownList('selectItem', row.f_name);
+                                }
+                                if (row.f_added == 5) {
+                                        $("#keg_priming_total").val(row.f_amount * 1000);
+                                        $("#keg_priming_sugar").jqxDropDownList('selectItem', row.f_name);
+                                }
+                        }
+                        // Check supplies.
+                        if ((((dataRecord.inventory_reduced <= 2) && (row.f_added <= 1)) ||  // Mash or boil
+                             ((dataRecord.inventory_reduced <= 3) && (row.f_added == 2)) ||  // Primary
+                             ((dataRecord.inventory_reduced <= 5) && (row.f_added == 3)) ||  // Secondary or Tertiary
+                             ((dataRecord.inventory_reduced <= 6) && (row.f_added == 4)) ||  // Bottle
+                             ((dataRecord.inventory_reduced <= 6) && (row.f_added == 5))) && row.f_inventory < row.f_amount) {
+                                ok_fermentables = 0;
+                        }
+                        if (row.f_added == 0 && (row.f_type == 0 || row.f_type == 4) && row.f_color < 50) { // Mash and Grain/Adjunct and Color < 50
+                                lintner += row.f_diastatic_power * row.f_amount;
+                        }
+                }
+                fermentableInit = 0;
+                $("#ferm_lintner").val(Math.round(parseFloat(lintner / mashkg)));
+                $("#mash_kg").val(mashkg);
+                console.log("calcFermentables() supplies:"+ok_fermentables+" moutsuiker:"+sugarsm+"/"+sugarsf);
+                to_100 = my_100;
+                if (to_100) {
+                        $("#wf_amount").jqxNumberInput({ width: 90, readOnly: true, spinButtons: false  });
+                } else {
+                        $("#wf_amount").jqxNumberInput({ width: 110, readOnly: false, spinButtons: true });
+                }
+
+                if (mvol > 0) {
+                        v = s / sugardensity + mvol;
+                        s = 1000 * s / (v * 10); //deg. Plato
+                        est_mash_sg = Round(plato_to_sg(s), 5);
+                        $('#est_mash_sg').val(est_mash_sg);
+                }
+
+                // Estimate total recipe OG.
+                dataRecord.est_og = estimate_sg(sugarsf + addedS, parseFloat(dataRecord.batch_size));
+                $('#est_og').val(dataRecord.est_og);
+                $('#est_og2').val(dataRecord.est_og);
+                org = dataRecord.est_og;
+
+                // Estimate SG in kettle after boil
+                aboil_sg = estimate_sg(sugarsf, parseFloat(dataRecord.batch_size));
+                $('#est_og3').val(aboil_sg);
+
+                // Estimate SG in kettle before boil
+                preboil_sg = estimate_sg(sugarsm, parseFloat(dataRecord.boil_size));
+                $('#est_pre_sg').val(preboil_sg);
+
+                // Recalculate volumes.
+                aboil_volume = parseFloat(dataRecord.batch_size);
+                if (dataRecord.brew_aboil_volume > 0)
+                        aboil_volume = dataRecord.brew_aboil_volume / 1.04;     // volume @ 20 degrees
+                if (dataRecord.brew_fermenter_tcloss == 0) {
+                        dataRecord.brew_fermenter_tcloss = dataRecord.eq_trub_chiller_loss;
+                        $("#brew_fermenter_tcloss").val(dataRecord.brew_fermenter_tcloss);
+                }
+                dataRecord.brew_fermenter_volume = aboil_volume - dataRecord.brew_fermenter_tcloss + dataRecord.brew_fermenter_extrawater;
+                $("#brew_fermenter_volume").val(dataRecord.brew_fermenter_volume);
+                // Estimated needed sparge water corrected for the temperature.
+                spoelw = (dataRecord.boil_size - mash_infuse + (mashkg * my_grain_absorbtion) + dataRecord.eq_lauter_deadspace) * 1.03;
+                $("#brew_sparge_est").val(spoelw);
+                // Calculate SG in fermenter
+                ogx = dataRecord.brew_aboil_sg;
+                if (ogx < 1.002)
+                        ogx = aboil_sg;
+                topw = dataRecord.brew_fermenter_extrawater;
+
+                if (dataRecord.brew_fermenter_volume > 0) {
+                        sug = sg_to_plato(ogx) * dataRecord.brew_fermenter_volume * ogx / 100;  //kg of sugar in
+                        sug += addedS; //kg
+
+                        if ((dataRecord.brew_fermenter_volume * ogx + addedmass) > 0) {
+                                pt = 100 * sug / (dataRecord.brew_fermenter_volume * ogx + addedmass + topw);
+                                dataRecord.brew_fermenter_sg = Round(plato_to_sg(pt),4);
+                                $("#brew_fermenter_sg").val(dataRecord.brew_fermenter_sg);
+                                // color
+                                if (dataRecord.color_method == 4) {
+                                        dataRecord.brew_fermenter_color = Math.round(((pt / 8.6) * colorn) + (dataRecord.boil_time / 60));
+                                } else if (dataRecord.color_method == 3) {
+                                        dataRecord.brew_fermenter_color = Math.round((4.46 * bv * sr) /  (aboil_volume + topw) * colorh);
+                                } else {
+                                        cw = colort / (aboil_volume + topw) * 8.34436;
+                                        dataRecord.brew_fermenter_color = kw_to_ebc(dataRecord.color_method, cw);
+                                }
+                                $("#brew_fermenter_color").val(dataRecord.brew_fermenter_color);
+                                scolor = ebc_to_color(dataRecord.brew_fermenter_color);
+                                $("#bcolorf").show();
+                                document.getElementById("bcolorf").style.background = scolor;
+                        }
+                } else {
+                        // Negative volume
+                        dataRecord.brew_fermenter_sg = dataRecord.brew_fermenter_color = 0;
+                        $("#brew_fermenter_sg").val(0);
+                        $("#brew_fermenter_color").val(0);
+                        $("#bcolorf").hide();
+                }
+
+                // Color of the wort
+                if (dataRecord.color_method == 4) {
+                        color = Math.round(((sg_to_plato(dataRecord.est_og) / 8.6) * colorn) + (dataRecord.boil_time / 60));
+                } else if (dataRecord.color_method == 3) {      // Hans Halberstadt
+                        color = Math.round((4.46 * bv * sr) /  parseFloat(dataRecord.batch_size) * colorh);
+                } else {
+                        cw = colort / parseFloat(dataRecord.batch_size) * 8.34436;
+                        color = kw_to_ebc(dataRecord.color_method, cw);
+                }
+                dataRecord.est_color = color;
+                $('#est_color').val(color);
+                $('#est_color2').val(color);
+                scolor = ebc_to_color(color);
+                document.getElementById("bcolor").style.background= scolor;
+                document.getElementById("bcolor2").style.background= scolor;
+
+                // Progress bars
+                pmalts = mashkg / dataRecord.eq_mash_max * 100;
+                $("#perc_malts").jqxProgressBar('val', pmalts);
+                $("#perc_sugars").jqxProgressBar('val', psugar);
+                $("#perc_cara").jqxProgressBar('val', pcara);
+                calcStage();
+
+                // Calculate estimated svg.
+                svg = 0; // default.
+                initcells = 0;
+                rows = $('#yeastGrid').jqxGrid('getrows');
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if (row.y_use == 0) {   // Primary
+                                if (parseFloat(row.y_attenuation) > svg)
+                                        svg = parseFloat(row.y_attenuation);    // Take the highest if multiple yeasts.
+                                if (row.y_form == 0)
+                                        initcells += (parseFloat(row.y_cells) / 1000000000) * parseFloat(row.y_amount) * (dataRecord.starter_viability / 100);
+                                else
+                                        initcells += (parseFloat(row.y_cells) / 1000000) * parseFloat(row.y_amount);
+                        }
+                        // TODO: brett in secondary ??
+                        if ((((dataRecord.inventory_reduced <= 3) && (row.y_use == 0)) ||  // Primary
+                             ((dataRecord.inventory_reduced <= 4) && (row.y_use == 1)) ||  // Secondary
+                             ((dataRecord.inventory_reduced <= 5) && (row.y_use == 2)) ||  // Tertiary
+                             ((dataRecord.inventory_reduced <= 6) && (row.y_use == 3))) && // Bottle
+                             (row.y_inventory < row.y_amount)) {
+                                ok_yeasts = 0;
+                        }
+                }
+               	calcSupplies();
+                if (svg == 0)
+                        svg = 77;
+
+                if ((mashkg > 0) && (mash_infuse > 0) && (mashtime > 0) && (mashtemp > 0)) {
+                        dataRecord.est_fg = estimate_fg(psugar, pcara, mash_infuse / mashkg, mashtime, mashtemp, svg, dataRecord.est_og);
+                } else {
+                        dataRecord.est_fg = estimate_fg(psugar, pcara, 0, 0, 0, svg, dataRecord.est_og);
+                }
+                $('#est_fg').val(dataRecord.est_fg);
+                $('#est_fg2').val(dataRecord.est_fg);
+                $('#est_fg3').val(dataRecord.est_fg);
+                fig = dataRecord.est_fg;
+
+                dataRecord.est_abv = abvol(dataRecord.est_og, dataRecord.est_fg);
+                $("#est_abv").val(dataRecord.est_abv);
+                $("#est_abv2").val(dataRecord.est_abv);
+
+                // Calculate the final svg if available use the real value.
+                if ((dataRecord.stage >= 6) && (dataRecord.fg > 0.990) && (dataRecord.fg < dataRecord.brew_fermenter_sg)) {
+                        svg = 100 * (dataRecord.brew_fermenter_sg - dataRecord.fg) / (dataRecord.brew_fermenter_sg - 1);
+                        org = dataRecord.brew_fermenter_sg;
+                        fig = dataRecord.fg;
+                }
+
+                $("#yeast_cells").val(initcells);
+                $("#need_cells").val(getNeededYeastCells());
+
+                // Calculate the calories in kcal/l (from brouwhulp)
+                alc = 1881.22 * fig * (org - fig) / (1.775 - org);
+                sug = 3550 * fig * (0.1808 * org + 0.8192 * fig - 1.0004);
+                $("#kcal").val(Math.round((alc + sug) / (12 * 0.0295735296)));
+        };
+
+        function calcMash() {
+
+		var infused = 0, i, row;
+
+                if (!(rows = $('#mashGrid').jqxGrid('getrows')))
+                        return;
+                if (mashkg == 0)
+                        return;
+
+                for (i = 0; i < rows.length; i++) {
+                        row = $("#mashGrid").jqxGrid('getrowdata', i);
+                        if (row.step_type == 0) // Infusion
+                                infused += row.step_infuse_amount;
+                        $("#mashGrid").jqxGrid('setcellvalue', i, "step_thickness", infused / mashkg);
+                }
+        }
+
+       	/*
+         * Change OG of recipe but keep the water volumes.
+         */
+        function calcFermentablesFromOG(OG) {
+
+                console.log("calcFermentablesFromOG("+OG+")");
+                var amount, row, d, i, sug, tot = 0, totmass = 0, rowscount, efficiency = parseFloat($("#efficiency").jqxNumberInput('decimal'));
+                sug = sg_to_plato(OG) * parseFloat($("#batch_size").jqxNumberInput('decimal')) * OG / 100;      //total amount of sugars in kg
+                rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#fermentableGrid").jqxGrid('getrowdata', i);
+                        if (row.f_added < 4) {
+                                d = row.f_percentage / 100 * (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                                if (row.f_added == 0)   // Mash
+                                        d = efficiency / 100 * d;
+                                tot += d;
+                        }
+                }
+                if (tot)
+                        totmass = Round(sug / tot,3);
+
+                if (totmass) {
+                        for (i = 0; i < rowscount; i++) {
+                                row = $("#fermentableGrid").jqxGrid('getrowdata', i);
+                                if (row.f_added < 4) {
+                                        amount = Math.round(row.f_percentage * 10 * totmass) / 1000;
+                                        $("#fermentableGrid").jqxGrid('setcellvalue', i, "f_amount", amount);
+                                }
+                        }
+                }
+        };
+
+        function getNeededYeastCells() {
+
+                var plato, volume, sg = dataRecord.brew_fermenter_sg;
+                if (sg <= 1.0001 && dataRecord.fg > 1.000)
+                        sg = dataRecord.fg;
+                else if (sg <= 1.0001)
+                        sg = dataRecord.est_og;
+                plato = sg_to_plato(sg);
+
+                volume = dataRecord.brew_fermenter_volume;
+                if (volume <= 0)
+                        volume = dataRecord.batch_size - dataRecord.eq_trub_chiller_loss;
+
+                return pitchrate * volume * plato;
+        }
+
+        function hopFlavourContribution(bt, vol, use, amount) {
+                var result;
+
+                if (use == 1) { // First wort
+                        result = 0.15;          // assume 15% flavourcontribution for fwh
+                } else if (bt > 50) {
+                        result = 0.10;          // assume 10% flavourcontribution as a minimum
+                } else {
+                        result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2));
+                        if (result < 0.10)
+                                result = 0.10;  // assume 10% flavourcontribution as a minimum
+                }
+                return (result * amount * 1000) / vol;
+        }
+
+        function hopAromaContribution(bt, vol, use, amount) {
+                var result = 0;
+
+                if (use == 5) {         // Dry hop
+                        result = 1.33;
+                } else if (bt > 20) {
+                        result = 0;
+                } else if (bt > 7.5) {
+                        result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) /4, 2));
+                } else if (use == 2) {  // Boil
+                        result = 1;
+                } else if (use == 3) {  // Aroma
+                        result = 1.2;
+                } else if (use == 4) {  // Whirlpool
+                        result = 1.2;
+                }
+                return (result * amount * 1000) / vol;
+        }
+
+        function calcIBUs() {
+                var total_ibus = 0, ferm_ibus = 0, rows = {}, i, row;
+                hop_aroma = hop_flavour = 0;
+                if (!(rows = $('#hopGrid').jqxGrid('getrows'))) {
+                        return;
+                }
+                ok_hops = 1;
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat(dataRecord.batch_size),
+                                        parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method);
+                        ferm_ibus += toIBU(row.h_useat, row.h_form, preboil_sg,
+                                        parseFloat(dataRecord.brew_fermenter_volume) + parseFloat(dataRecord.brew_fermenter_tcloss),
+                                        parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), dataRecord.ibu_method);
+                        hop_flavour += hopFlavourContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size),
+                                        row.h_useat, parseFloat(row.h_amount));
+                        hop_aroma += hopAromaContribution(parseFloat(row.h_time), parseFloat(dataRecord.batch_size),
+                                        row.h_useat, parseFloat(row.h_amount));
+                        if ((((dataRecord.inventory_reduced <= 2) && (row.h_useat <= 4)) ||  // Mash, FW, Boil, Aroma, Whirlpool
+                             ((dataRecord.inventory_reduced <= 6) && (row.h_useat == 5))) && // Dry-hop
+                             (row.h_inventory < row.h_amount))
+                                ok_hops = 0;
+                }
+                total_ibus = Math.round(total_ibus * 10) / 10;
+                ferm_ibus = Math.round(ferm_ibus * 10) / 10;
+                hop_flavour = Math.round(hop_flavour * 1000 / 5) / 10;
+                hop_aroma = Math.round(hop_aroma * 1000 / 6) / 10;
+                if (hop_flavour > 100)
+                        hop_flavour = 100;
+                if (hop_aroma > 100)
+                        hop_aroma = 100;
+                console.log("calcIBUs(): " + total_ibus + "  flavour: " + hop_flavour + "  aroma: " + hop_aroma+"  fermenter:"+ferm_ibus+" supplies:"+ok_hops);
+                dataRecord.est_ibu = total_ibus;
+                $('#est_ibu').val(total_ibus);
+                $('#est_ibu2').val(total_ibus);
+                $("#hop_flavour").jqxProgressBar('val', hop_flavour);
+                $("#hop_aroma").jqxProgressBar('val', hop_aroma);
+                $("#brew_fermenter_ibu").val(ferm_ibus);
+                calcStage();
+                calcSupplies();
+        };
+
+        /*
+         * http://braukaiser.com/blog/blog/2012/11/03/estimating-yeast-growth/
+         *
+         * stype: 0=stirred, 1=shaken, 2=simple
+         * totcells: initial cells
+         * egrams: gram extract
+         */
+        function getGrowthRate(stype, totcells, egrams){
+
+                /* Cells per grams extract (B/g) */
+                var cpe = totcells / egrams;
+
+                if (cpe > 3.5)
+                        return 0;       // no growth
+                if (stype == 2)
+                        return 0.4;     // simple starter
+                if (stype == 1)
+                        return 0.62;    // shaken starter
+                if (cpe <= 1.4)         // stirred starter
+                        return 1.4;
+                return 2.33 - (.67 * cpe );
+        };
+
+        function calcStep(svol, stype, start) {
+
+            var gperpoint = 2.72715,  //number of grams of extract per point of starter gravity per liter
+                prate = start/svol * 1000,
+                irate = Round(prate,1),
+                egrams = (dataRecord.starter_sg - 1) * svol * gperpoint;
+                grate = getGrowthRate(stype, start, egrams),
+                ncells = Round(egrams * grate, 1),
+                totcells = parseFloat(ncells) + start;
+
+                console.log("svol:"+svol+" start:"+start+" irate:"+irate+" egrams:"+egrams+" grate:"+grate+" ncells:"+ncells);
+                return {
+                        svol: svol,
+                        irate: irate,
+                        prate: Round(prate,1),
+                        ncells: ncells,
+                        totcells: totcells,
+                        growf: Round(ncells/start, 2)
+                };
+        }
+
+        /*
+         * Calculate all starter steps.
+         * stype: final starter type: 0 = stirred, 1 = shaked, 2 = simple.
+         * start: initial cells in billions
+         * needed: needed cells in billions
+         *
+         * result: all values updated.
+         */
+        function calcSteps(stype, start, needed) {
+
+            var uvols  = [ 20, 40, 60,  80, 100, 150, 200, 250, 375, 500,  625, 750, 875, 1000, 1250, 1500, 2000, 2500, 3000, 4000, 5000 ],
+                mvols  = uvols.length, svol = 0, lasti = 0, result = {}, i;
+
+                /*
+                 * If no values are set, auto calculate the starter.
+                 */
+                if ((parseFloat($("#prop1_volume").jqxNumberInput('decimal')) + parseFloat($("#prop2_volume").jqxNumberInput('decimal')) +
+                     parseFloat($("#prop3_volume").jqxNumberInput('decimal')) + parseFloat($("#prop4_volume").jqxNumberInput('decimal'))) == 0) {
+                        // clear by default
+                        for (i = 1; i < 5; i++) {
+                                $("#prop"+i+"_type").hide();
+                                $("#r"+i+"_pmpt").show();
+                                $("#prop"+i+"_type").val(stype);
+                                $("#prop"+i+"_volume").hide();
+                                $("#prop"+i+"_volume").val(0);
+                                $("#prop"+i+"_irate").hide();
+                                $("#prop"+i+"_ncells").hide();
+                                $("#prop"+i+"_tcells").hide();
+                                $("#prop"+i+"_growf").hide();
+                        }
+                        if (start > needed) {
+                                return; // no starter needed
+                        }
+                        $("#prop1_type").show();
+                        $("#r1_pmpt").hide();
+                        $("#prop1_volume").show();
+                        $("#prop1_irate").show();
+                        $("#prop1_ncells").show();
+                        $("#prop1_tcells").show();
+                        $("#prop1_growf").show();
+                        for (i = lasti; i <= mvols; i++) {
+                                lasti = i;
+                                svol = uvols[lasti];
+                                result = calcStep(svol, stype, start);
+                                if (result.irate < 25) {
+                                        // inocculation rate too low, backup one step and break out.
+                                        lasti = i - 1;
+                                        svol = uvols[lasti];
+                                        result = calcStep(svol, stype, start);
+                                        break;
+                                }
+                                if (result.totcells > needed || i == mvols) { // hit the target or loops done
+                                        break;
+                                }
+                        }
+                        $("#prop1_volume").val(result.svol / 1000); // to liters
+                        $("#prop1_irate").val(result.prate);
+                        $("#prop1_ncells").val(result.ncells);
+                        $("#prop1_tcells").val(result.totcells);
+                        $("#prop1_growf").val(result.growf);
+                        if (result.totcells > needed)
+                                return; // hit the target
+
+                        // second stage
+                        $("#r2_pmpt").hide();
+                        $("#prop2_type").val(stype);
+                        $("#prop2_type").show();
+                        $("#prop2_volume").show();
+                        $("#prop2_irate").show();
+                        $("#prop2_ncells").show();
+                        $("#prop2_tcells").show();
+                        $("#prop2_growf").show();
+                        for (i = lasti; i <= mvols; i++) {
+                                lasti = i;
+                                svol = uvols[lasti];
+                                result = calcStep(svol, stype, $("#prop1_tcells").val());
+                                if (result.irate < 25) {
+                                        lasti = i - 1;
+                                        svol = uvols[lasti];
+                                        result = calcStep(svol, stype, $("#prop1_tcells").val());
+                                        break;
+                                }
+                                if (result.totcells > needed || i == mvols) { // hit the target or loops done
+                                        break;
+                                }
+                        }
+                        $("#prop2_volume").val(result.svol / 1000); // to liters
+                        $("#prop2_irate").val(result.prate);
+                        $("#prop2_ncells").val(result.ncells);
+                        $("#prop2_tcells").val(result.totcells);
+                        $("#prop2_growf").val(result.growf);
+                        if (result.totcells > needed)
+                                return; // hit the target
+
+                        // third stage
+                        $("#r3_pmpt").hide();
+                        $("#prop3_type").val(stype);
+                        $("#prop3_type").show();
+                        $("#prop3_volume").show();
+                        $("#prop3_irate").show();
+                        $("#prop3_ncells").show();
+                        $("#prop3_tcells").show();
+                        $("#prop3_growf").show();
+                        for (i = lasti; i <= mvols; i++) {
+                                lasti = i;
+                                svol = uvols[lasti];
+                                result = calcStep(svol, stype, $("#prop2_tcells").val());
+                                if (result.irate < 25) {
+                                        lasti = i - 1;
+                                        svol = uvols[lasti];
+                                        result = calcStep(svol, stype, $("#prop2_tcells").val());
+                                        break;
+                                }
+                                if (result.totcells > needed || i == mvols) { // hit the target or loops done
+                                        break;
+                                }
+                        }
+                        $("#prop3_volume").val(result.svol / 1000); // to liters
+                        $("#prop3_irate").val(result.prate);
+                        $("#prop3_ncells").val(result.ncells);
+                        $("#prop3_tcells").val(result.totcells);
+                        $("#prop3_growf").val(result.growf);
+                        if (result.totcells > needed)
+                                return; // hit the target
+
+                        // fourth stage
+                        $("#r4_pmpt").hide();
+                        $("#prop4_type").val(stype);
+                        $("#prop4_type").show();
+                        $("#prop4_volume").show();
+                        $("#prop4_irate").show();
+                        $("#prop4_ncells").show();
+                        $("#prop4_tcells").show();
+                        $("#prop4_growf").show();
+                        for (i = lasti; i <= mvols; i++) {
+                                lasti = i;
+                                svol = uvols[lasti];
+                                result = calcStep(svol, stype, $("#prop3_tcells").val());
+                                if (result.totcells > needed || i == mvols) { // hit the target or loops done
+                                        $("#prop4_volume").val(result.svol / 1000); // to liters
+                                        $("#prop4_irate").val(result.prate);
+                                        $("#prop4_ncells").val(result.ncells);
+                                        $("#prop4_tcells").val(result.totcells);
+                                        $("#prop4_growf").val(result.growf);
+                                        return;
+                                }
+                        }
+                } else {
+                        // recalculate
+                        if (dataRecord.prop1_volume > 0) {
+                                $("#r1_pmpt").hide();
+                                $("#prop1_type").show();
+                                $("#prop1_volume").show();
+                                $("#prop1_irate").show();
+                                $("#prop1_ncells").show();
+                                $("#prop1_tcells").show();
+                                $("#prop1_growf").show();
+                                result = calcStep($("#prop1_volume").val() * 1000, dataRecord.prop1_type, start);
+                                $("#prop1_irate").val(result.prate);
+                                $("#prop1_ncells").val(result.ncells);
+                                $("#prop1_tcells").val(result.totcells);
+                                $("#prop1_growf").val(result.growf);
+                        }
+                        if (dataRecord.prop2_volume > 0) {
+                                $("#r2_pmpt").hide();
+                                $("#prop2_type").show();
+                                $("#prop2_volume").show();
+                                $("#prop2_irate").show();
+                                $("#prop2_ncells").show();
+                                $("#prop2_tcells").show();
+                                $("#prop2_growf").show();
+                                result = calcStep($("#prop2_volume").val() * 1000, dataRecord.prop2_type, $("#prop1_tcells").val());
+                                $("#prop2_irate").val(result.prate);
+                                $("#prop2_ncells").val(result.ncells);
+                                $("#prop2_tcells").val(result.totcells);
+                                $("#prop2_growf").val(result.growf);
+                        }
+                        if (dataRecord.prop3_volume > 0) {
+                                $("#r3_pmpt").hide();
+                                $("#prop3_type").show();
+                                $("#prop3_volume").show();
+                                $("#prop3_irate").show();
+                                $("#prop3_ncells").show();
+                                $("#prop3_tcells").show();
+                                $("#prop3_growf").show();
+                                result = calcStep($("#prop3_volume").val() * 1000, dataRecord.prop3_type, $("#prop2_tcells").val());
+                                $("#prop3_irate").val(result.prate);
+                                $("#prop3_ncells").val(result.ncells);
+                                $("#prop3_tcells").val(result.totcells);
+                                $("#prop3_growf").val(result.growf);
+                        }
+                        if (dataRecord.prop4_volume > 0) {
+                                $("#r4_pmpt").hide();
+                                $("#prop4_type").show();
+                                $("#prop4_volume").show();
+                                $("#prop4_irate").show();
+                                $("#prop4_ncells").show();
+                                $("#prop4_tcells").show();
+                                $("#prop4_growf").show();
+                                result = calcStep($("#prop4_volume").val() * 1000, dataRecord.prop4_type, $("#prop3_tcells").val());
+                                $("#prop4_irate").val(result.prate);
+                                $("#prop4_ncells").val(result.ncells);
+                                $("#prop4_tcells").val(result.totcells);
+                                $("#prop4_growf").val(result.growf);
+                        }
+
+                }
+        }
+
+        function calcYeast() {
+
+                // Calculate needed cells.
+		var plato, volume, rows, rowscount, row, i, needed, use_cells,
+                sg = dataRecord.brew_fermenter_sg;
+                if (sg <= 1.0001 && dataRecord.fg > 1.000)
+                        sg = dataRecord.fg;
+                else if (sg <= 1.0001)
+                        sg = dataRecord.est_og;
+                plato = sg_to_plato(sg);
+
+                volume = dataRecord.brew_fermenter_volume;
+                if (volume > 0) {
+                        if (dataRecord.brew_fermenter_extrawater > 0)
+                                volume += dataRecord.brew_fermenter_extrawater;
+                } else {
+                        volume = dataRecord.batch_size - dataRecord.eq_trub_chiller_loss;
+                }
+
+                // Also in calcFermentables()
+                $("#yeast_cells").val(initcells);
+
+                if (!(rows = $('#yeastGrid').jqxGrid('getrows'))) {
+                        return; // grid not yet loaded.
+                }
+                rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return; // no yeast in recipe
+
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#yeastGrid").jqxGrid('getrowdata', i);
+                        if (row.y_use == 0) { // primary
+                                // pitchrate see https://www.brewersfriend.com/yeast-pitch-rate-and-starter-calculator/
+                                // and http://braukaiser.com/blog/blog/2012/11/03/estimating-yeast-growth/
+                                pitchrate = 0.75;
+                                if (dataRecord.est_og > 1.060)
+                                        pitchrate = 1.0;
+//                              if (dataRecord.est_og > 1.076)
+//                                      pitchrate = 1.25;       // Wyeast labs. http://www.wyeastlab.com/hb_pitchrates.cfm
+                                if (row.y_type == 0) // lager yeast
+                                        pitchrate *= 2;
+
+                                if (row.y_form == 1) { // dry yeast
+                                } else { // possible starter needed
+                                }
+                        }
+                }
+                needed = pitchrate * volume * plato;
+                console.log("calcYeast() pitchrate:"+pitchrate+" start:"+initcells+" needed:"+needed+" volume:"+volume);
+                $("#need_cells").val(needed);
+                use_cells = initcells;
+
+                if (dataRecord.starter_enable) {
+                        calcSteps(dataRecord.starter_type, initcells, needed);
+
+                        for (i = 1; i < 5; i++) {
+                                $("#r"+i+"_irate").html("");
+                                $("#r"+i+"_growf").html("");
+                                $("#r"+i+"_tcells").html("");
+                                if (parseFloat($("#prop"+i+"_volume").val()) > 0) {
+                                        if ((parseFloat($("#prop"+i+"_irate").val()) < 25) || (parseFloat($("#prop"+i+"_irate").val()) > 100)) {
+                                                $("#r"+i+"_irate").html("<img src='images/dialog-error.png'>");
+                                        } else {
+                                                $("#r"+i+"_irate").html("<img src='images/dialog-ok-apply.png'>");
+                                        }
+                                        if (parseFloat($("#prop"+i+"_growf").val()) < 1)
+                                                $("#r"+i+"_growf").html("<img src='images/dialog-error.png'>");
+                                        if (($("#prop"+i+"_type").val() > 0) && (parseFloat($("#prop"+i+"_growf").val()) > 3))
+                                                $("#r"+i+"_growf").html("<img src='images/dialog-error.png'>");
+                                        if (parseFloat($("#prop"+i+"_tcells").val()) > needed)
+                                                $("#r"+i+"_tcells").html("<img src='images/dialog-ok-apply.png'>");
+                                        use_cells = parseFloat($("#prop"+i+"_tcells").val());
+                                } else {
+                                        $("#r"+i+"_irate").html("");
+                                }
+                        }
+                }
+                $("#plato_cells").val(parseFloat(use_cells / (volume * plato) ));
+        };
+
+        function adjustHops(factor) {
+
+                console.log("adjustHops("+factor+")");
+                var row, i, amount, rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return;
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#hopGrid").jqxGrid('getrowdata', i);
+                        amount = row.h_amount * factor;
+                        $("#hopGrid").jqxGrid('setcellvalue', i, "h_amount", amount);
+                }
+        };
+
+        function calcMiscs() {
+
+                ok_miscs = 1;
+                var row, i, rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return;
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#miscGrid").jqxGrid('getrowdata', i);
+                        if ((((dataRecord.inventory_reduced <= 2) && (row.m_use_use <= 2)) ||  // Starter, Mash, Boil
+                             ((dataRecord.inventory_reduced <= 3) && (row.m_use_use == 3)) ||  // Primary
+                             ((dataRecord.inventory_reduced <= 5) && (row.m_use_use == 4)) ||  // Secondary, Teriary
+                             ((dataRecord.inventory_reduced <= 6) && (row.m_use_use == 5))) && // Bottle
+                             (row.m_inventory < row.m_amount)) {
+                                ok_miscs = 0;
+                        }
+                }
+                calcSupplies();
+        };
+
+        function adjustMiscs(factor) {
+
+                console.log("adjustMiscs("+factor+")");
+                var row, i, amount, rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return;
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#miscGrid").jqxGrid('getrowdata', i);
+                        amount = row.m_amount * factor;
+                        $("#miscGrid").jqxGrid('setcellvalue', i, "m_amount", amount);
+                        switch (row.m_name) {
+                                case 'CaCl2':           $("#wa_cacl2").val(row.m_amount * 1000);
+                                                        break;
+                                case 'CaSO4':           $("#wa_caso4").val(row.m_amount * 1000);
+                                                        break;
+                                case 'MgSO4':           $("#wa_mgso4").val(row.m_amount * 1000);
+                                                        break;
+                                case 'NaCl':            $("#wa_nacl").val(row.m_amount * 1000);
+                                                        break;
+                                case 'Melkzuur':
+                                case 'Zoutzuur':
+                                case 'Fosforzuur':
+                                case 'Zwavelzuur':      $("#wa_acid").val(row.m_amount * 1000);
+                                                        break;
+                                case 'NaHCO3':
+                                case 'Na2CO3':
+                                case 'CaCO3':
+                                case 'Ca(OH)2':         $("#wa_base").val(row.m_amount * 1000);
+                                                        break;
+                        }
+                }
+        };
+
+        function adjustYeasts(factor) {
+
+                console.log("adjustYeasts("+factor+")");
+                var row, i, amount, rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return;
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#yeastGrid").jqxGrid('getrowdata', i);
+                        if (row.y_form == 1) { // Only adjust dry yeast
+                                amount = row.y_amount * factor;
+                                $("#yeastGrid").jqxGrid('setcellvalue', i, "y_amount", amount);
+                        }
+                }
+                calcYeast();
+        };
+
+        function adjustWaters(factor) {
+
+                console.log("adjustWaters("+factor+")");
+                var amount, row, i, rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
+                if (rowscount == 0)
+                        return;
+                mash_infuse = 0;
+                for (i = 0; i < rowscount; i++) {
+                        row = $("#mashGrid").jqxGrid('getrowdata', i);
+                        if (row.step_type == 0) { // Infusion
+                                amount = Round(row.step_infuse_amount * factor, 1);
+                                $("#mashGrid").jqxGrid('setcellvalue', i, "step_infuse_amount", amount);
+                                mash_infuse += amount;
+                        }
+                }
+                if (dataRecord.w2_amount == 0) {
+                        dataRecord.w1_amount = mash_infuse;
+                        $("#w1_amount").val(mash_infuse);
+                } else {
+                        dataRecord.w1_amount = (dataRecord.w1_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+                        dataRecord.w2_amount = (dataRecord.w2_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+                        $("#w1_amount").val(dataRecord.w1_amount);
+                        $("#w2_amount").val(dataRecord.w2_amount);
+                }
+                $('#wg_amount').val(mash_infuse);
+        };
+
+        function calcMashEfficiency() {
+		var c, m;
+                if (parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')) < 1.002)
+                        return;
+                c = sg_to_plato(est_mash_sg);
+                m = sg_to_plato(parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')));
+                if (c > 0.5)
+                        $("#brew_mash_efficiency").val(100 * m / c);
+                else
+                        $("#brew_mash_efficiency").val(0);
+        };
+
+        function calcEfficiencyBeforeBoil() {
+                var m = 0, rows = {}, i, row, tot, result = 0;
+                if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
+                        return; // grid not yet loaded.
+                }
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if (row.f_added == 0) { // Mash
+                                m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                        }
+                }
+                tot = sg_to_plato(dataRecord.brew_preboil_sg) * (dataRecord.brew_preboil_volume / 1.04) * dataRecord.brew_preboil_sg * 10 / 1000;
+                if (m > 0)
+                        result = Round((tot / m * 100), 1);
+                if (result < 0)
+                        result = 0;
+                $("#brew_preboil_efficiency").val(result);
+        }
+
+        function calcEfficiencyAfterBoil() {
+                var m = 0,	// Sugars added at mash
+                b = 0,		// Sugars added at boil
+                rows = {}, i, row, tot, result = 0;
+                if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) {
+                        return; // grid not yet loaded.
+                }
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if (row.f_added == 0) { // Mash
+                                m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                        } else if (row.f_added == 1) { // Boil
+                                b += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
+                        }
+                }
+                tot = sg_to_plato(dataRecord.brew_aboil_sg) * (dataRecord.brew_aboil_volume / 1.04) * dataRecord.brew_aboil_sg * 10 / 1000;
+                tot -= b;       // total sugars in wort  minus added sugars.
+                if (m > 0)
+                        result = Round((tot / m * 100), 1);
+                if (result < 0)
+                        result = 0;
+                dataRecord.brew_aboil_efficiency = result;
+                $("#brew_aboil_efficiency").val(result);
+
+        }
+
+        function GetBUGU() {
+                var gu = (dataRecord.est_og - 1) * 1000;
+                if (gu > 0)
+                        return dataRecord.est_ibu / gu;
+                else
+                        return 0.5;
+        }
+
+        function GetOptClSO4ratio() {
+                var BUGU = GetBUGU();
+                return (-1.2 * BUGU + 1.4);
+        }
+
+        function setWaterAgent(name, amount) {
+                var row, i, id, found = false, miscs, rows = $('#miscGrid').jqxGrid('getrows');
+                if (amount == 0) {
+                        for (i = 0; i < rows.length; i++) {
+                                row = rows[i];
+                                if (row.m_name == name) {
+                                        id = $("#miscGrid").jqxGrid('getrowid', i);
+                                        $("#miscGrid").jqxGrid('deleterow', id);
+                                }
+                        }
+                } else {
+                        for (i = 0; i < rows.length; i++) {
+                                row = rows[i];
+                                if (row.m_name == name) {
+                                        found = true;
+                                        $("#miscGrid").jqxGrid('setcellvalue', i, 'm_amount', amount / 1000);
+                                        break;
+                                }
+                        }
+                        if (! found) {
+                                miscs = new $.jqx.dataAdapter(miscInvSource, {
+                                        loadComplete: function () {
+                                                var record, i, row = {}, records = miscs.records;
+                                                for (i = 0; i < records.length; i++) {
+                                                        record = records[i];
+                                                        if (record.name == name) {
+                                                                row["m_name"] = record.name;
+                                                                row["m_amount"] = amount / 1000;
+                                                                row["m_cost"] = record.cost;
+                                                                row["m_type"] = record.type;
+                                                                row["m_use_use"] = record.use_use;
+                                                                row["m_time"] = 0;
+                                                                row["m_amount_is_weight"] = record.amount_is_weight;
+                                                                row["m_inventory"] = record.inventory;
+                                                                row["m_avail"] = 1;
+                                                                $("#miscGrid").jqxGrid('addrow', null, row);
+                                                        }
+                                                }
+                                        }
+                                });
+                                miscs.dataBind();
+                                return;
+                        }
+                }
+        }
+
+        function setRangeIndicator(ion, rangeCode) {
+                if ((rangeCode == "laag") || (rangeCode == "hoog"))
+                        $("#wr_"+ion).html("<img src='images/dialog-error.png'><span style='vertical-align: top; font-size: 10px; font-style: italic;'>"+rangeCode + "</span>");
+                else
+                        $("#wr_"+ion).html("<img src='images/dialog-ok-apply.png'>");
+        }
+
+        function mix(v1, v2, c1, c2) {
+                if ((v1 + v2) > 0) {
+                        return ((v1 * c1) + (v2 * c2)) / (v1 + v2);
+                }
+                return 0;
+        }
+
+        // mg/l as CaCO3
+        function ResidualAlkalinity(total_alkalinity, calcium, magnesium) {
+                return total_alkalinity - (calcium / 1.4 + magnesium / 1.7);
+        }
+
+        function PartCO3(pH) {
+                var H = Math.pow(10, -pH);
+                return 100 * Ka1 * Ka2 / (H*H + H * Ka1 + Ka1 * Ka2);
+        }
+
+        function PartHCO3(pH) {
+                var H = Math.pow(10, -pH);
+                return 100 * Ka1 * H / (H*H + H * Ka1 + Ka1 * Ka2);
+        }
+
+        function Charge(pH) {
+                return (-2 * PartCO3(pH) - PartHCO3(pH));
+        }
+
+        //Z alkalinity is the amount of acid (in mEq/l) needed to bring water to the target pH (Z pH)
+        function ZAlkalinity(pHZ) {
+                var C43 = Charge(4.3),
+                Cw = Charge(parseFloat($("#wg_ph").jqxNumberInput('decimal'))),
+                Cz = Charge(pHZ),
+                DeltaCNaught = -C43+Cw,
+                CT = parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal')) / 50 / DeltaCNaught,
+                DeltaCZ = -Cz+Cw;
+                return CT * DeltaCZ;
+        }
+
+        //Z Residual alkalinity is the amount of acid (in mEq/l) needed to bring the water in the mash to the target pH (Z pH)
+        function ZRA(pHZ) {
+
+                var Magn, Z, Calc = parseFloat($("#wg_calcium").jqxNumberInput('decimal')) / (MMCa / 2);
+                Magn = parseFloat($("#wg_magnesium").jqxNumberInput('decimal')) / (MMMg / 2);
+                Z = ZAlkalinity(pHZ);
+                return Z - (Calc / 3.5 + Magn / 7);
+        }
+
+        function ProtonDeficit(pHZ) {
+
+		var rows, i, C1, ebc, x, Result = ZRA(pHZ) * parseFloat($("#wg_amount").jqxNumberInput('decimal'));
+                // proton deficit for the grist
+                rows = $('#fermentableGrid').jqxGrid('getrows');
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if (row.f_added == 0 && row.f_graintype != 6) { // Added == Mash && graintype != No Malt
+                                // Check if acid is required
+                                C1 = 0;
+                                if ((row.f_di_ph != 5.7) && ((row.f_acid_to_ph_57 < - 0.1) || (row.f_acid_to_ph_57 > 0.1))) {
+                                        C1 = row.f_acid_to_ph_57 / (row.f_di_ph - 5.7);
+                                } else {
+                                        // If the acid_to_ph_5.7 is unknown from the maltster, guess the required acid.
+                                        ebc = row.f_color;
+                                        switch (row.f_graintype) {
+                                                case 0:                                 // Base, Special, Kilned
+                                                case 3:
+                                                case 5: C1 = 0.014 * ebc - 34.192;
+                                                        break;
+                                                case 2: C1 = -0.0597 * ebc - 32.457;    // Crystal
+                                                        break;
+                                                case 1: C1 = 0.0107 * ebc - 54.768;     // Roast
+                                                        break;
+                                                case 4: C1 = -149;                      // Sour malt
+                                                        break;
+                                        }
+                                }
+                                x = C1 * (pHZ - row.f_di_ph);   // AcidRequired(ZpH)
+                                Result += x * row.f_amount;
+                        }
+                }
+                return Result;
+        }
+
+        function MashpH() {
+                var n = 0, pH = 5.4, deltapH = 0.001, deltapd = 0.1, pd = ProtonDeficit(pH);
+                while (((pd < -deltapd) || (pd > deltapd)) && (n < 2000)) {
+                        n++;
+                        if (pd < -deltapd)
+                                pH -= deltapH;
+                        else if (pd > deltapd)
+                                pH += deltapH;
+                        pd = ProtonDeficit(pH);
+                }
+                console.log("MashpH() n: "+n+" pH: "+pH);
+                return pH;
+        }
+
+        function GetAcidSpecs(AT) {
+                switch(AT) {
+                        case 0: return {        // Melkzuur
+                                        pK1: 3.86,
+                                        pK2: 20,
+                                        pK3: 20,
+                                        MolWt: 90.08,
+                                        AcidSG: 1214,   // 1214  1209
+                                        AcidPrc: 0.88   // 0.88  0.80
+                                };
+                        case 1: return {        // Zoutzuur
+                                        pK1: -7,
+                                        pK2: 20,
+                                        pK3: 20,
+                                        MolWt: 36.46,
+                                        AcidSG: 1142,
+                                        AcidPrc: 0.28
+                                };
+                        case 2: return {        // Fosforzuur
+                                        pK1: 2.12,
+                                        pK2: 7.20,
+                                        pK3: 12.44,
+                                        MolWt: 98.00,
+                                        AcidSG: 1170,
+                                        AcidPrc: 0.25
+                                };
+                        case 3: return {        // Zwavelzuur
+                                        pK1: -1,
+                                        pK2: 1.92,
+                                        pK3: 20,
+                                        MolWt: 98.07,
+                                        AcidSG: 1700,
+                                        AcidPrc: 0.93
+                                };
+                }
+        }
+
+        function calcWater() {
+
+                console.log("calcWater()");
+                var liters = 0,
+                calcium = 0,
+                magnesium = 0,
+                sodium = 0,
+                total_alkalinity = 0,
+                bicarbonate = 0,
+                chloride = 0,
+                sulfate = 0,
+                ph = 0,
+                RA = 0,
+                frac = 0,
+                TpH = 0,
+                protonDeficit = 0,
+		AT, BT, result, pK1, pK2, pK3, MolWt, AcidSG, AcidPrc,
+		r1d, r2d, f1d, f2d, f3d,
+		deltapH, deltapd, pd, n,
+		piCLSO4_low, piCLSO4_high, Res,
+		wg_calcium, wg_sodium, wg_total_alkalinity, wg_chloride, wg_sulfate, wg_bicarbonate;
+
+                if (dataRecord.w1_name == "") {
+                        return;
+                }
+
+                // If there is a dillute water source, mix the waters.
+                if (dataRecord.w2_name != "") {
+                        liters = dataRecord.w1_amount + dataRecord.w2_amount;
+                        calcium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_calcium, dataRecord.w2_calcium);
+                        magnesium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_magnesium, dataRecord.w2_magnesium);
+                        sodium = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sodium, dataRecord.w2_sodium);
+                        chloride = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_chloride, dataRecord.w2_chloride);
+                        sulfate = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_sulfate, dataRecord.w2_sulfate);
+                        total_alkalinity = mix(dataRecord.w1_amount, dataRecord.w2_amount, dataRecord.w1_total_alkalinity, dataRecord.w2_total_alkalinity);
+                        ph = -Math.log10(((Math.pow(10, -dataRecord.w1_ph) * dataRecord.w1_amount) + (Math.pow(10, -dataRecord.w2_ph) * dataRecord.w2_amount))  / liters);
+                } else {
+                        liters = dataRecord.w1_amount;
+                        calcium = dataRecord.w1_calcium;
+                        magnesium = dataRecord.w1_magnesium;
+                        sodium = dataRecord.w1_sodium;
+                        chloride = dataRecord.w1_chloride;
+                        sulfate = dataRecord.w1_sulfate;
+                        total_alkalinity = dataRecord.w1_total_alkalinity;
+                        ph = dataRecord.w1_ph;
+                }
+                $('#wg_amount').val(liters);
+                wg_calcium = calcium;
+                $('#wg_calcium').val(Math.round(calcium * 10) / 10);
+                //var wg_magnesium = magnesium;
+                $('#wg_magnesium').val(Math.round(magnesium * 10) / 10);
+                wg_sodium = sodium;
+                $('#wg_sodium').val(Math.round(sodium * 10) / 10);
+                wg_total_alkalinity = total_alkalinity;
+                $('#wg_total_alkalinity').val(Math.round(total_alkalinity * 10) / 10);
+                wg_chloride = chloride;
+                $('#wg_chloride').val(Math.round(chloride * 10) / 10);
+                wg_sulfate = sulfate;
+                $('#wg_sulfate').val(Math.round(sulfate * 10) / 10);
+                // Note: brouwhulp has the malts included here in the result.
+                //var wg_ph = ph;
+                $('#wg_ph').val(Round(ph,1));
+                $('#wb_ph').val(Round(MashpH(), 1));
+                $('#est_mash_ph').val(Round(MashpH(), 1));
+                bicarbonate = total_alkalinity * 1.22;
+                wg_bicarbonate = bicarbonate;
+
+                // Noot: de volgende berekeningen geven bijna gelijke resultaten in Brun'water.
+                // Calculate Ca
+                RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
+                     parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4;
+                calcium += 1000 * RA / liters;
+
+                // Calculate Mg
+                RA = parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMMg / MMMgSO4;
+                magnesium += 1000 * RA / liters;
+
+                // Calculate Na
+                RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
+                     parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
+                sodium += 1000 * RA / liters;
+
+                // Calculate SO4
+                RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
+                     parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4;
+                sulfate += 1000 * RA / liters;
+
+                // Calculate Cl
+                RA = 2 * parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
+                         parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl;
+                chloride += 1000 * RA / liters;
+                // Einde noot.
+
+                if ($("#wa_acid_name").val() < 0 || $("#wa_acid_name").val() > 3) {
+                        $("#wa_acid_name").val(0);
+                        dataRecord.wa_acid_name = 0;
+                }
+                if (last_acid == '')
+                        last_acid = AcidTypeData[$("#wa_acid_name").val()].nl;
+
+                if ($("#wa_base_name").val() < 0 || $("#wa_base_name").val() > 3) {
+                        $("#wa_base_name").val(0);
+                        dataRecord.wa_base_name = 0;
+                }
+                if (last_base == '')
+                        last_base = BaseTypeData[$("#wa_base_name").val()].nl;
+
+                AT = dataRecord.wa_acid_name;
+                BT = dataRecord.wa_base_name;
+
+                result = GetAcidSpecs(AT);
+                pK1 = result.pK1;
+                pK2 = result.pK2;
+                pK3 = result.pK3;
+                MolWt = result.MolWt;
+                AcidSG = result.AcidSG;
+                AcidPrc = result.AcidPrc;
+
+                if (dataRecord.calc_acid) {
+                        TpH = parseFloat(dataRecord.mash_ph);
+                        protonDeficit = ProtonDeficit(TpH);
+                        console.log("calc_acid tgt: "+TpH+" protonDeficit: "+protonDeficit);
+                        if (protonDeficit > 0) { // Add acid
+                                $("#wa_base").val(0);
+                                setWaterAgent(last_base, 0);
+                                frac = CalcFrac(TpH, pK1, pK2, pK3);
+                                Acid = protonDeficit / frac;
+                                Acid *= MolWt; // mg
+                                Acidmg = Acid;
+                                Acid = Acid / AcidSG; // ml
+
+                                if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
+                                        $("#wa_acid_perc").val(AcidPrc);
+                                Acid = Acid * AcidPrc / (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
+                                console.log("Final ml: "+Acid);
+                                $("#wa_acid").val(Round(Acid, 2));
+                                setWaterAgent(AcidTypeData[AT].nl, Round(Acid, 2));
+
+                                bicarbonate = bicarbonate - protonDeficit * frac / liters;
+                                total_alkalinity = bicarbonate * 50 / 61;
+                        } else if (protonDeficit < 0) { //Add base
+                                $("#wa_acid").val(0);
+                                setWaterAgent(last_acid, 0);
+                                r1d = Math.pow(10, (TpH - 6.38));
+                                r2d = Math.pow(10, (TpH - 10.38));
+                                f1d = 1 / (1 + r1d + r1d * r2d);
+                                f2d = f1d * r1d;
+                                f3d = f2d * r2d;
+                                switch (BT) {
+                                        case 0:  RA = -protonDeficit / (f1d - f3d); // Sodiumbicarbonate, mmol totaal
+                                                RA = RA * MMNaHCO3/1000; //gram
+                                                $("#wa_base").val(Round(RA, 2));
+                                                setWaterAgent('NaHCO3', Round(RA, 2));
+                                                if (liters > 0) {
+                                                        // Na
+                                                        RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        sodium = wg_sodium + RA;
+                                                        // HCO3
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                }
+                                                break;
+                                        case 1: RA = -protonDeficit / (2 * f1d + f2d); // Sodiumcarbonate, mmol totaal
+                                                RA = RA * MMNa2CO3/1000; //gram
+                                                $("#wa_base").val(Round(RA, 2));
+                                                setWaterAgent('Na2CO3', Round(RA, 2));
+                                                if (liters > 0) {
+                                                        RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3;
+                                                        RA = 1000 * RA / liters;
+                                                        sodium = wg_sodium + RA;
+                                                        // HCO3
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                }
+                                                break;
+                                        case 2: RA = -protonDeficit * (f1d - f3d); // Calciumcarbonate, mmol totaal
+                                                RA = RA * MMCaCO3/1000; //gram
+                                                //but only 1/3 is effective, so add 3 times as much
+                                                RA = 3 * RA;
+                                                $("#wa_base").val(Round(RA, 2));
+                                                setWaterAgent('CaCO3', Round(RA, 2));
+                                                if (liters > 0) {
+                                                        //Bicarbonate
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        //Ca precipitates out as Ca10(PO4)6(OH)2
+                                                        RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
+                                                             parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        calcium = wg_calcium + RA;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                }
+                                                break;
+                                        case 3: RA = -protonDeficit / 19.3; // Calciumhydroxide
+                                                $("#wa_base").val(Round(RA, 2));
+                                                setWaterAgent('Ca(OH)2', Round(RA, 2));
+                                                if (liters > 0) {
+                                                        // Bicarbonate
+                                                        RA = -protonDeficit / liters;
+                                                        total_alkalinity = wg_total_alkalinity + RA;
+                                                        bicarbonate = total_alkalinity * 61 / 50;
+                                                        // Calcium
+                                                        RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
+                                                             parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaOH2;
+                                                        RA = 1000 * RA / liters;
+                                                        calcium = wg_calcium + RA;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                }
+                                                break;
+                                }
+                        }
+                        ph = TpH;
+                        $('#wb_ph').val(Round(ph, 1));
+                        $('#est_mash_ph').val(Round(ph, 1));
+                } else { // Manual
+                        console.log("calc_acid no");
+                        // First add base salts
+                        if (parseFloat($("#wa_base").jqxNumberInput('decimal')) > 0) {
+                                if (liters > 0) {
+                                        switch (BT) {
+                                                case 0:  // Sodiumbicarbonate, Na
+                                                        RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMNa / MMNaHCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        sodium = wg_sodium + RA;
+                                                        // HCO3
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNaHCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                        break;
+                                                case 1: // Sodiumcarbonate
+                                                        RA = parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMNa / MMNaCl +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * 2 * MMNa / MMNa2CO3;
+                                                        RA = 1000 * RA / liters;
+                                                        sodium = wg_sodium + RA;
+                                                        // HCO3
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMHCO3 / MMNa2CO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                        break;
+                                                case 2: // Calciumcarbonate: Bicarbonate
+                                                        RA = parseFloat($("#wa_base").jqxNumberInput('decimal')) / 3 * MMHCO3 / MMCaCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        bicarbonate = wg_bicarbonate + RA;
+                                                        total_alkalinity = bicarbonate * 50 / 61;
+                                                        RA = ResidualAlkalinity(wb_total_alkalinity, wb_calcium, wb_magnesium);
+                                                        // Ca
+                                                        RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCa / MMCaCl2 +
+                                                             parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMCa / MMCaSO4 +
+                                                             parseFloat($("#wa_base").jqxNumberInput('decimal')) * MMCa / MMCaCO3;
+                                                        RA = 1000 * RA / liters;
+                                                        calcium = wg_calcium + RA;
+                                                        break;
+                                        }
+                                }
+                        }
+
+                        TpH = parseFloat(dataRecord.mash_ph);
+                        pHa = MashpH(); // This one is in demi water, should be in adjusted water???
+                        // Then calculate the new pH with added acids
+                        if (parseFloat($("#wa_acid").jqxNumberInput('decimal')) > 0) {
+                                console.log("TpH: "+TpH+" water: "+pHa);
+                                Acid = parseFloat($("#wa_acid").jqxNumberInput('decimal'));
+                                if (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) == 0)
+                                        $("#wa_acid_perc").val(AcidPrc);
+                                Acid = Acid / AcidPrc * (parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')) / 100); // ml
+                                Acid *= AcidSG; // ml
+                                Acid /= MolWt;  // mg
+                                Acidmg = Acid;
+
+                                //find the pH where the protondeficit = protondeficit by the acid
+                                frac = CalcFrac(pHa, pK1, pK2, pK3);
+                                protonDeficit = Acid * frac;
+
+                                deltapH = 0.001;
+                                deltapd = 0.1;
+                                pd = ProtonDeficit(pHa);
+                                n = 0;
+                                while (((pd < (protonDeficit - deltapd)) || (pd > (protonDeficit + deltapd))) && (n < 2000)) {
+                                        n++;
+                                        if (pd < (protonDeficit-deltapd))
+                                                pHa -= deltapH;
+                                        else if (pd > (protonDeficit+deltapd))
+                                                pHa += deltapH;
+                                        frac = CalcFrac(pHa, pK1, pK2, pK3);
+                                        protonDeficit = Acid * frac;
+                                        pd = ProtonDeficit(pHa);
+                                }
+                                console.log("n: "+n+" pd: "+pd+" protonDeficit: "+protonDeficit+" frac: "+frac+" pHa: "+pHa);
+                                RA = wg_bicarbonate - protonDeficit * frac / liters;
+                                bicarbonate = RA;
+                                total_alkalinity = RA * 50 / 61;
+                                ph = pHa;
+                                $('#wb_ph').val(Round(ph, 1));
+                                $('#est_mash_ph').val(Round(ph, 1));
+                        }
+                }
+
+                if ((AT == 3) && (liters > 0)) {        // Sulfuctic / Zwavelzuur
+                        RA = parseFloat($("#wa_caso4").jqxNumberInput('decimal')) * MMSO4 / MMCaSO4 +
+                             parseFloat($("#wa_mgso4").jqxNumberInput('decimal')) * MMSO4 / MMMgSO4 +
+                             Acidmg / 1000 * MMSO4 / (MMSO4 + 2);
+                        RA = 1000 * RA / liters;
+                        sulfate = wg_sulfate + RA;      // Not add to sulfate??
+                } else if ((AT == 1) && (liters > 0)) { // Hydrochloric, Zoutzuur
+                        RA = parseFloat($("#wa_cacl2").jqxNumberInput('decimal')) * MMCl / MMCaCl2 +
+                             parseFloat($("#wa_nacl").jqxNumberInput('decimal')) * MMCl / MMNaCl +
+                             Acidmg / 1000 * MMCl / (MMCl + 1);
+                        RA = 1000 * RA / liters;
+                        chloride = wg_chloride + RA;
+                }
+
+                // 2:1 Sulfate to Chroride IPA's, Pale Ales.
+                // 1:1 Sulfate to Chloride Balanced
+                // 1:2 Sulfate to Chloride Malty
+                // Note, values below are the other way, cl to so4!
+                // So: 0.5 is IPA's, Pale Ales.
+                //       1 Balanced
+                //       2 Malty.
+                $('#tgt_bu').val(Round(GetBUGU(), 2));
+                // From brouwhulp.
+                if (GetBUGU() < 0.32)
+                        $('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Zeer moutig en zoet</span>");
+                else if (GetBUGU() < 0.43)
+                        $('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Moutig, zoet</span>");
+                else if (GetBUGU() < 0.52)
+                        $('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Evenwichtig</span>");
+                else if (GetBUGU() < 0.63)
+                        $('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Licht hoppig, bitter</span>");
+                else
+                        $('#wr_bu').html("<span style='vertical-align: top; font-size: 14px; font-style: italic;'>Extra hoppig, zeer bitter</span>");
+                $('#tgt_cl_so4').val(Round(GetOptClSO4ratio(), 1));
+                if (sulfate > 0)
+                        RA = chloride / sulfate;
+                else
+                        RA = 10;
+                $('#got_cl_so4').val(Round(RA, 1));
+                piCLSO4_low = 0.8 * GetOptClSO4ratio();
+                piCLSO4_high = 1.2 * GetOptClSO4ratio();
+                Res = 'normaal';
+                if (RA < piCLSO4_low)
+                        Res = 'laag';
+                else if (RA > piCLSO4_high)
+                        Res = 'hoog';
+                setRangeIndicator('cl_so4', Res);
+
+                $('#wb_calcium').val(Round(calcium, 1));
+                $('#wb_magnesium').val(Round(magnesium, 1));
+                $('#wb_sodium').val(Round(sodium, 1));
+                $('#wb_sulfate').val(Round(sulfate, 1));
+                $('#wb_chloride').val(Round(chloride, 1));
+                $('#wb_total_alkalinity').val(Round(total_alkalinity, 1));
+
+                if (calcium < 40) {
+                        setRangeIndicator("calcium", "laag");
+                } else if (calcium > 150) {
+                        setRangeIndicator("calcium", "hoog");
+                } else {
+                        setRangeIndicator("calcium", "normaal");
+                }
+                if (magnesium >= 0 && magnesium <= 30) {
+                        setRangeIndicator("magnesium", "normaal");
+                } else {
+                        setRangeIndicator("magnesium", "hoog");
+                }
+                if (sodium <= 150) {
+                        setRangeIndicator("sodium", "normaal");
+                } else {
+                        setRangeIndicator("sodium", "hoog");
+                }
+                // Both chloride and sulfate should be above 50 according to
+                // John Palmer. So the Cl/SO4 ratio calculation will work.
+                if (chloride <= 50) {
+                        setRangeIndicator("chloride", "laag");
+                } else if (chloride <= 100) {
+                        setRangeIndicator("chloride", "normaal");
+                } else {
+                        setRangeIndicator("chloride", "hoog");
+                }
+                if (sulfate <= 50) {
+                        setRangeIndicator("sulfate", "laag");
+                } else if (sulfate <= 350) {
+                        setRangeIndicator("sulfate", "normaal");
+                } else {
+                        setRangeIndicator("sulfate", "hoog");
+                }
+                if (ph < 5.2) {
+                        setRangeIndicator("ph", "laag");
+                } else if (ph > 5.6) {
+                        setRangeIndicator("ph", "hoog");
+                } else {
+                        setRangeIndicator("ph", "normaal");
+                }
+                calcSparge();
+                calcMiscs();
+                calcSupplies();
+        }
+
+        function calcSparge() {
+
+		var TargetpH, Source_pH, Source_alkalinity, r1, r2, d, f1, f3,
+		r143, r243, d43, f143, f343, alkalinity, Ct, r1g, r2g, dg, f1g, f3g,
+		Acid, AT, result, pK1, pK2, pK3, MolWt, AcidSG, AcidPrc, fract;
+
+                // Code from BrewBuddy/Brouwhulp, who got it from http://www.brewery.org/brewery/library/Acidi0,00fWaterAJD0497.html
+                TargetpH = dataRecord.sparge_ph;
+                Source_pH = dataRecord.w1_ph;
+                Source_alkalinity = dataRecord.w1_total_alkalinity;
+                // Select watersource or fallback to the first source.
+                if (dataRecord.sparge_source == 1) {    // Source 2
+                        if (dataRecord.w2_ph > 0.0) {
+                                Source_pH = dataRecord.w2_ph;
+                                Source_alkalinity = dataRecord.w2_total_alkalinity;
+                        } else {
+                                dataRecord.sparge_source = 0;   // Source 1
+                                $("#sparge_source").val(0);
+                        }
+                } else if (dataRecord.sparge_source == 2) {     // Mixed
+                        if (dataRecord.w2_ph > 0.0) {
+                                Source_pH = parseFloat($("#wg_ph").jqxNumberInput('decimal'));
+                                Source_alkalinity = parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal'));
+                        } else {
+                                dataRecord.sparge_source = 0;
+                                $("#sparge_source").val(0);
+                        }
+                }
+
+                // Step 1: Compute the mole fractions of carbonic (f1o), bicarbonate (f2o) and carbonate(f3o) at the water pH
+                r1 = Math.pow(10, Source_pH - 6.38);
+                r2 = Math.pow(10, Source_pH - 10.373);
+                d = 1 + r1 + r1*r2;
+                f1 = 1/d;
+                f3 = r1 * r2 / d;
+
+                //Step 2. Compute the mole fractions at pH = 4.3 (the pH which defines alkalinity)
+                r143 = Math.pow(10, 4.3 - 6.38);
+                r243 = Math.pow(10, 4.3 - 10.373);
+                d43 = 1 + r143 + r143*r243;
+                f143 = 1/d43;
+                f343 = r143 * r243 / d43;
+
+                //Step 3. Convert the water alkalinity to milliequivalents/L
+                alkalinity = Source_alkalinity / 50;
+                
+                //Step 4. Solve
+                Ct = (alkalinity - 1000 * (Math.pow(10, -4.3) - Math.pow(10, -Source_pH))) / ((f143-f1)+(f3-f343));
+
+                //Step 5. Compute mole fractions at desired pH
+                r1g = Math.pow(10, TargetpH - 6.38);
+                r2g = Math.pow(10, TargetpH - 10.373);
+                dg = 1 + r1g + r1g*r2g;
+                f1g = 1/dg;
+                f3g = r1g * r2g / dg;
+
+                //Step 6. Use these to compute the milliequivalents acid required per liter (mEq/L)
+                Acid = Ct * ((f1g-f1)+(f3-f3g)) + Math.pow(10, -TargetpH) - Math.pow(10, -Source_pH);  //mEq/l
+                Acid += 0.01;   // Add acid that would be required for distilled water.
+                if (dataRecord.sparge_acid_type < 0 || dataRecord.sparge_acid_type > 3) {
+                        dataRecord.sparge_acid_type = 0;
+                        $("#sparge_acid_type").val(0);
+                }
+
+                //Step 8. Get the acid data.
+                AT = dataRecord.sparge_acid_type;
+                result = GetAcidSpecs(AT);
+                pK1 = result.pK1;
+                pK2 = result.pK2;
+                pK3 = result.pK3;
+                MolWt = result.MolWt;
+                AcidSG = result.AcidSG;
+                AcidPrc = result.AcidPrc;
+                fract = CalcFrac(TargetpH, pK1, pK2, pK3);
+
+                //Step 9. Now divide the mEq required by the "fraction". This is the required number of moles of acid.
+                Acid /= fract;
+
+                //Step 10. Multiply by molecular weight of the acid
+                Acid *= MolWt; //mg
+
+                Acid = Acid / AcidSG; //ml ; 88% lactic solution
+                f1 = dataRecord.sparge_acid_perc;
+                if (f1 <= 0.1)
+                        f1 = AcidPrc;
+                Acid = Acid * AcidPrc / (f1 / 100);
+
+                Acid *= dataRecord.sparge_volume; //ml lactic acid total
+                Acid = Round(Acid, 2);
+                dataRecord.sparge_acid_amount = Acid / 1000;
+                $("#sparge_acid_amount").val(Acid);
+        }
+
+        function calcFermentation(){
+
+		var primary_svg, secondary_svg, final_svg, ABV;
+                if (dataRecord.brew_fermenter_sg<1.020)
+                        return;
+
+                if ((dataRecord.primary_end_sg > 0.990) && (dataRecord.primary_end_sg < dataRecord.brew_fermenter_sg)) {
+                        primary_svg = Round(100*(dataRecord.brew_fermenter_sg-dataRecord.primary_end_sg)/(dataRecord.brew_fermenter_sg-1),1);
+                        $("#primary_svg").val(primary_svg);
+                        if ((dataRecord.secondary_end_sg > 0.990) && (dataRecord.secondary_end_sg < dataRecord.brew_fermenter_sg)) {
+                                secondary_svg = Round(100*(dataRecord.brew_fermenter_sg-dataRecord.secondary_end_sg)/(dataRecord.brew_fermenter_sg-1),1);
+                                $("#secondary_svg").val(secondary_svg);
+                                if ((dataRecord.fg > 0.990) && (dataRecord.fg < dataRecord.brew_fermenter_sg)) {
+                                        final_svg = Round(100*(dataRecord.brew_fermenter_sg-dataRecord.fg)/(dataRecord.brew_fermenter_sg-1),1);
+                                        $("#final_svg").val(final_svg);
+                                        ABV = Round(abvol(dataRecord.brew_fermenter_sg,dataRecord.fg),2);
+                                        $("#final_abv").val(ABV);
+                                }
+                        }
+                }
+        }
+
+        function ResCO2(CO2,T){
+
+                var F=T*1.8+32;
+                return 3.0378-0.050062*F+0.00026555*F*F;
+        }
+
+        function CarbCO2toS(CO2,T,SFactor){
+                var sugar=SFactor*(CO2-ResCO2(CO2,T))/0.286;
+                if(sugar<0)
+                        sugar=0;
+                return Round(sugar,3);
+        }
+
+        function GetPressure(CO2, T1, T2) {
+                var P, V = CO2 - ResCO2(CO2, T1);
+                if (V < 0)
+                        return 0;
+                P = -1.09145427669121 + 0.00800006989646477 * T2 + 0.000260276315484684 * T2 * T2 + 0.0215142075945119 * T2 * V +
+                        0.674996600795854 * V + -0.00471757220150754 * V * V;
+                //console.log("CO2: "+CO2+" "+V+"  Temp: "+T1+" "+T2+"  Pressure: "+P);
+                if (P < 0)
+                        P = 0;
+                P = P * 1.01325; // atm to bar
+                return Round(P,1);
+        }
+
+        function CarbCO2ToPressure(CO2, T) {
+                return (CO2-(-0.000005594056*Math.pow(T,4)+0.000144357886*Math.pow(T,3)+0.000362999168*T*T-0.064872987645*T+1.641145175049)) /
+                         (0.00000498031*Math.pow(T,4)-0.00024358267*Math.pow(T,3)+0.00385867329*T*T-0.05671206825*T+1.53801423376);
+        }
+
+        function calcCarbonation() {
+
+		var TSec, ABV, bvol, balc, babv, mvol, malc, tvol, talc,
+		i, row, SFactor, pvol, pabv, Pressure, kabv;
+
+                TSec=dataRecord.secondary_temp;
+                if(TSec<1)
+                        TSec=dataRecord.primary_end_temp;
+                if(TSec<1)
+                        TSec=18;
+
+                if(dataRecord.fg==0.000)
+                        ABV=abvol(dataRecord.brew_fermenter_sg,parseFloat($("#est_fg").jqxNumberInput('decimal')));
+                else
+                        ABV=abvol(dataRecord.brew_fermenter_sg,dataRecord.fg);
+
+                /* Calculate new volume and alcohol. */
+                bvol = dataRecord.package_volume-(ABV*dataRecord.package_volume)/100;
+                balc = dataRecord.package_volume-bvol;
+                mvol = dataRecord.package_infuse_amount-(dataRecord.package_infuse_abv*dataRecord.package_infuse_amount)/100;
+                malc = dataRecord.package_infuse_amount-mvol;
+                talc = balc+malc;
+                tvol = bvol+mvol;
+                ABV = Round(talc/(tvol+talc)*100,2);
+                dataRecord.package_abv=ABV;
+                $("#package_abv").val(ABV);
+
+//              console.log("calcCarbonation() TSec:"+TSec+"  ABV:"+ABV);
+                if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))){
+			return;
+		}
+
+                // Bottles
+                dataRecord.bottle_priming_amount=0;
+                dataRecord.bottle_priming_total=0;
+                for (i = 0; i < rows.length; i++) {
+                        row = rows[i];
+                        if(row.f_added==4){
+                                SFactor=1/((row.f_yield/100)*(1-row.f_moisture/100));
+                                dataRecord.bottle_priming_amount=CarbCO2toS(dataRecord.bottle_carbonation,TSec,SFactor);
+                                dataRecord.bottle_priming_total=Round(dataRecord.bottle_amount*dataRecord.bottle_priming_amount,2);
+                                $("#fermentableGrid").jqxGrid('setcellvalue',i,'f_amount',dataRecord.bottle_priming_total/1000);
+                        }
+                }
+                $("#bottle_priming_amount").val(Round(dataRecord.bottle_priming_amount,1));
+                $("#bottle_priming_total").val(dataRecord.bottle_priming_total);
+                pabv=ABV+dataRecord.bottle_priming_amount*0.47/7.907;
+                pvol=dataRecord.bottle_amount-(pabv*dataRecord.bottle_amount)/100;
+                talc=dataRecord.bottle_amount-pvol;
+                tvol=pvol+dataRecord.bottle_priming_water;
+                babv = Round(talc/(tvol+talc)*100,2);
+                //console.log("bottle pabv:"+pabv+" pvol:"+pvol+" wvol:"+dataRecord.bottle_priming_water+" tvol:"+tvol+" talc:"+talc+" abv:"+babv);
+                $("#bottle_abv").val(babv);
+                $("#bottle_pressure").val(GetPressure(dataRecord.bottle_carbonation,TSec,dataRecord.bottle_carbonation_temp));
+
+                // Kegs
+                Pressure=CarbCO2ToPressure(dataRecord.keg_carbonation,dataRecord.keg_carbonation_temp);
+                if(Pressure<0)Pressure=0;
+                dataRecord.keg_pressure=Pressure;
+                $("#keg_pressure").val(Round(Pressure,1));
+
+                dataRecord.keg_priming_amount=0;
+                dataRecord.keg_priming_total=0;
+                if(!dataRecord.keg_forced_carb){
+                        for(i = 0; i < rows.length; i++){
+                                row=rows[i];
+                                if(row.f_added==5){
+                                        SFactor=1/((row.f_yield/100)*(1-row.f_moisture/100));
+                                        dataRecord.keg_priming_amount=CarbCO2toS(dataRecord.keg_carbonation,TSec,SFactor);
+                                        dataRecord.keg_priming_total=Round(dataRecord.keg_amount*dataRecord.keg_priming_amount,2);
+                                        $("#fermentableGrid").jqxGrid('setcellvalue',i,'f_amount',dataRecord.keg_priming_total/1000);
+                                }
+                        }
+                        $("#keg_priming_amount").val(Round(dataRecord.keg_priming_amount,1));
+                        $("#keg_priming_total").val(dataRecord.keg_priming_total);
+                        pabv=ABV+dataRecord.keg_priming_amount*0.47/7.907;
+                        pvol=dataRecord.keg_amount-(pabv*dataRecord.keg_amount)/100;
+                        talc=dataRecord.keg_amount-pvol;
+                        tvol=pvol+dataRecord.keg_priming_water;
+                        kabv=Round(talc/(tvol+talc)*100,2);
+                        //console.log("kegs  pabv:"+pabv+" pvol:"+pvol+" wvol:"+dataRecord.keg_priming_water+" tvol:"+tvol+" talc:"+talc+" abv:"+kabv);
+                        $("#keg_abv").val(kabv);
+                } else {
+                        $("#keg_priming_amount").val(0);
+                        $("#keg_priming_total").val(0);
+                        $("#keg_abv").val(ABV);
+                }
+        }
+
+        function calcStage() {
+
+                var newstage = dataRecord.stage, d, date1, date2, date1_unixtime, date2_unixtime,
+		timeDifference, timeDifferenceInDays;
+
+                if (newstage == 0 && dataRecord.est_og > 1.005 && dataRecord.est_color > 3 && dataRecord.est_ibu > 3)
+                        newstage = 1;
+                if (newstage == 1 && parseFloat($("#brew_date_start").val()) > 2000)
+                        newstage = 2;   // Brewday
+                if (newstage == 2 && ($("#brew_date_start").val() == ''))
+                        newstage = 1;   // No brewday
+                if (newstage == 2 && parseFloat($("#brew_date_end").val()) > 2000)
+                        newstage = 3;   // Primary
+                if (newstage == 3 && parseFloat($("#primary_end_date").val()) > 2000)
+                        newstage = 4;   // Secondary
+                if (newstage == 4 && parseFloat($("#secondary_end_date").val()) > 2000)
+                        newstage = 5;   // Tertiary
+                if (newstage == 5 && parseFloat($("#package_date").val()) > 2000)
+                        newstage = 6;   // Package
+                if (newstage >= 6 && newstage < 9) {
+                        d = new Date();
+                        date2 = $("#package_date").val();
+                        date2 = date2.split('-');
+                        // Now we convert the array to a Date object
+                        date1 = new Date(d.getFullYear(), d.getMonth(), d.getDate());
+                        date2 = new Date(date2[0], date2[1]-1, date2[2]);
+                        // We use the getTime() method and get the unixtime
+                        date1_unixtime = parseInt(date1.getTime() / 1000);
+                        date2_unixtime = parseInt(date2.getTime() / 1000);
+                        // This is the calculated difference in seconds
+                        timeDifference = date1_unixtime - date2_unixtime;
+                        timeDifferenceInDays = timeDifference / 60 / 60 / 24;
+                        if (timeDifferenceInDays > 0) {                 // At least one day
+                                if (timeDifferenceInDays >= 42)         // 6 weeks
+                                        newstage = 9;                   // Ready to taste
+                                else if (timeDifferenceInDays >= 14)    // 14 days
+                                        newstage = 8;                   // Mature
+                                else
+                                        newstage = 7;                   // Carbonation
+                        }
+                }
+                if (newstage == 9 && parseFloat($("#taste_date").val()) > 2000)
+                        newstage = 10;  // Ready
+
+                if (newstage != dataRecord.stage) {
+                        console.log("calcStage() old: "+dataRecord.stage+" new: "+newstage);
+                        dataRecord.stage = newstage;
+                }
+
+                /*
+                 * Set stage and enable or disable parts of the screens.
+                 */
+                $("#stage").val(StageData[dataRecord.stage].nl);
+                if (dataRecord.stage >= 10) {
+                        $("#locked").jqxCheckBox({ disabled:false });
+                }
+
+                /*
+                 * When the brew is in progress or done, block equipment select and delete.
+                 */
+                if (dataRecord.stage > 1) {
+                        $("#equipmentSelect").jqxDropDownList({ disabled: true });
+                        $("#Delete").jqxButton({ disabled: true });
+                }
+
+                if (dataRecord.stage < 1)       // Planning, no ingredients
+                        $('#jqxTabs').jqxTabs('disableAt', 8);  // Brewday tab
+                else
+                        $('#jqxTabs').jqxTabs('enableAt', 8);
+
+                if (dataRecord.stage < 3) {     // Primary
+                        $('#jqxTabs').jqxTabs('disableAt', 9);  // Fermentation tab
+                } else {
+                        $('#jqxTabs').jqxTabs('enableAt', 9);
+                        $("#name").jqxInput({ disabled: true });
+                        $("#code").jqxInput({ disabled: true });
+                        $("#batch_size").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#boil_size").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#boil_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#efficiency").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#est_og").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#type").jqxDropDownList({ disabled: true });
+                        $("#styleSelect").jqxDropDownList({ disabled: true });
+                        $("#color_method").jqxDropDownList({ disabled: true });
+                        $("#ibu_method").jqxDropDownList({ disabled: true });
+                        $("#mash_select").jqxDropDownList({ disabled: true });
+                        $("#w1_name").jqxDropDownList({ disabled: true });
+                        $("#w2_name").jqxDropDownList({ disabled: true });
+                        $("#w2_amount").jqxNumberInput({ readOnly: true });
+                        $("#pr_name").jqxDropDownList({ disabled: true });
+                        $("#wa_cacl2").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#wa_caso4").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#wa_mgso4").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#wa_nacl").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#mash_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#calc_acid").jqxCheckBox({ disabled: true });
+                        $("#wa_base_name").jqxDropDownList({ disabled: true });
+                        $("#wa_base").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#wa_acid_name").jqxDropDownList({ disabled: true });
+                        $("#wa_acid").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#wa_acid_perc").jqxNumberInput({ spinButtons: false, readOnly: true, width: 70 });
+                        $("#sparge_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#sparge_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#sparge_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#sparge_source").jqxDropDownList({ disabled: true });
+                        $("#sparge_acid_type").jqxDropDownList({ disabled: true });
+                        $("#sparge_acid_perc").jqxNumberInput({ spinButtons: false, readOnly: true, width: false });
+                        $("#starter_enable").jqxCheckBox({ disabled: true });
+                        $("#starter_type").jqxDropDownList({ disabled: true });
+                        $("#starter_try").jqxButton({ disabled: true });
+                        $("#starter_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#starter_viability").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                }
+                if (dataRecord.stage > 3) { // Primary fermentation done
+                        $("#brew_date_start").jqxDateTimeInput({ disabled: true });
+                        $("#brew_date_end").jqxDateTimeInput({ disabled: true });
+                        $("#brew_mash_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_preboil_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aboil_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_mash_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_preboil_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aboil_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_preboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_whirlpool9").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_cooling_to").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_whirlpool7").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_cooling_method").jqxDropDownList({ disabled: true });
+                        $("#brew_whirlpool6").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_cooling_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_sparge_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_whirlpool2").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aeration_type").jqxDropDownList({ disabled: true });
+                        $("#brew_fermenter_tcloss").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aeration_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_fermenter_extrawater").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#brew_aeration_speed").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                }
+                if (dataRecord.stage == 5) // Lagering, allow packaging
+                        $("#package_date").jqxDateTimeInput({ disabled: false });
+                else
+                        $("#package_date").jqxDateTimeInput({ disabled: true });
+                if (dataRecord.stage >= 5) { // At least secondary
+                        $("#primary_start_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#primary_max_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#primary_end_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#primary_end_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#primary_end_brix").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#primary_end_date").jqxDateTimeInput({ disabled: true });
+                }
+                if (dataRecord.stage >= 6) {    // Packaged
+                        $("#secondary_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#secondary_end_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#secondary_end_date").jqxDateTimeInput({ disabled: true });
+                        $("#tertiary_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#fg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#final_brix").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#package_date").jqxDateTimeInput({ disabled: true });
+                        $("#package_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#package_infuse_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#package_infuse_abv").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#package_infuse_notes").jqxInput({ disabled: true });
+                        $("#package_ph").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#bottle_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#bottle_priming_water").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#keg_priming_water").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#keg_amount").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#bottle_carbonation").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#keg_carbonation").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#bottle_priming_sugar").jqxDropDownList({ disabled: true });
+                        $("#keg_priming_sugar").jqxDropDownList({ disabled: true });
+                        $("#keg_forced_carb").jqxCheckBox({ disabled : true });
+                        $("#bottle_carbonation_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#keg_carbonation_temp").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                }
+                if (dataRecord.stage < 8) { // Taste when at least Mature.
+                        $('#jqxTabs').jqxTabs('disableAt', 11); // Tasting tab
+                } else {
+                        $('#jqxTabs').jqxTabs('enableAt', 11);
+                }
+
+                if (dataRecord.stage == 11) { // Locked
+                        $("#taste_date").jqxDateTimeInput({ disabled: true });
+                        $("#taste_rate").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#taste_color").jqxInput({ disabled: true });
+                        $("#taste_transparency").jqxInput({ disabled: true });
+                        $("#taste_head").jqxInput({ disabled: true });
+                        $("#taste_aroma").jqxInput({ disabled: true });
+                        $("#taste_taste").jqxInput({ disabled: true });
+                        $("#taste_aftertaste").jqxInput({ disabled: true });
+                        $("#taste_mouthfeel").jqxInput({ disabled: true });
+                        $("#taste_notes").jqxInput({ disabled: true });
+                        $("#notes").jqxInput({ disabled: true });
+                } else {
+                        $("#notes").jqxInput({ disabled: false });
+                }
+        }
+
+        function showStarter() {
+
+                if (dataRecord.starter_enable) {
+                        $("#propagator").show();
+                        $("#starter_type").jqxDropDownList( {disabled: false });
+                        $("#starter_try").jqxButton({ disabled: false });
+                        $("#starter_sg").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 });
+                        $("#starter_viability").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 });
+                } else {
+                        $("#propagator").hide();
+                        $("#starter_type").jqxDropDownList( {disabled: true });
+                        $("#starter_try").jqxButton({ disabled: true });
+                        $("#starter_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                        $("#starter_viability").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+                }
+        }
+
+        function calcInit () {
+                console.log("calcInit()");
+
+                calcMashEfficiency();
+                calcEfficiencyBeforeBoil();
+                calcEfficiencyAfterBoil();
+
+                $("#starter_enable").on('checked', function (event) {
+                        dataRecord.starter_enable = 1;
+                        showStarter();
+                        calcYeast();
+                });
+                $("#starter_enable").on('unchecked', function (event) {
+                        dataRecord.starter_enable = 0;
+                        showStarter();
+                        calcYeast();
+                });
+                $("#starter_try").click(function () {
+                        $("#prop1_volume").val(0);
+                        $("#prop2_volume").val(0);
+                        $("#prop3_volume").val(0);
+                        $("#prop4_volume").val(0);
+                        calcYeast();
+                });
+                $('#starter_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.starter_type = index;
+                                calcYeast();
+                        }
+                });
+                $('#starter_sg').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.starter_sg = event.args.value;
+                                calcYeast();
+                        }
+                });
+                $('#starter_viability').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.starter_viability = event.args.value;
+                                calcFermentables();
+                                calcYeast();
+                        }
+                });
+                $('#prop1_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.prop1_type = index;
+                                calcYeast();
+                        }
+                });
+                $('#prop1_volume').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.prop1_volume = event.args.value;
+                                calcYeast();
+                        }
+                });
+                $('#prop2_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.prop2_type = index;
+                                calcYeast();
+                        }
+                });
+                $('#prop2_volume').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.prop2_volume = event.args.value;
+                                calcYeast();
+                        }
+                });
+                $('#prop3_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.prop3_type = index;
+                                calcYeast();
+                        }
+                });
+                $('#prop3_volume').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.prop3_volume = event.args.value;
+                                calcYeast();
+                        }
+                });
+                $('#prop4_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.prop4_type = index;
+                                calcYeast();
+                        }
+                });
+                $('#prop4_volume').on('change', function (event) {
+                        if (event.args) {
+                                dataRecord.prop4_volume = event.args.value;
+                                calcYeast();
+                        }
+                });
+
+                $("#calc_acid").on('checked', function (event) {
+                        dataRecord.calc_acid = 1;
+                        calcWater();
+                });
+                $("#calc_acid").on('unchecked', function (event) {
+                        dataRecord.calc_acid = 0;
+                        calcWater();
+                });
+                $("#w1_name").jqxDropDownList('selectItem', dataRecord.w1_name);
+                $("#w2_name").jqxDropDownList('selectItem', dataRecord.w2_name);
+                // Fix tap water if zero using mash infuse amount.
+                if (parseFloat($("#w1_amount").jqxNumberInput('decimal')) == 0 && mash_infuse > 0) {
+                        $("#w1_amount").val(mash_infuse);
+                        dataRecord.w1_amount = mash_infuse;
+                        $("#wg_amount").val(mash_infuse);
+                        $("#w2_amount").val(0);
+                        dataRecord.w2_amount = 0;
+                }
+                calcWater();
+                $("#w2_amount").on('change', function (event) {
+                        var newval = parseFloat(event.args.value);
+
+                        if (newval > mash_infuse) {
+                                $("#w2_amount").val(dataRecord.w2_amount);
+                                return;
+                        }
+                        dataRecord.w1_amount = parseFloat($("#wg_amount").jqxNumberInput('decimal')) - newval;
+                        $("#w1_amount").val(dataRecord.w1_amount);
+                        dataRecord.w2_amount = newval;
+                        console.log("new: "+event.args.value+" w1: "+dataRecord.w1_amount+"  w2: "+dataRecord.w2_amount);
+                        calcWater();
+                });
+                $('#wa_cacl2').on('change', function (event) {
+                        if (event.args) {
+                                setWaterAgent('CaCl2', 0);      // This can prevent double entries.
+                                setWaterAgent('CaCl2', event.args.value);
+                                calcWater();
+                        }
+                });
+                $('#wa_caso4').on('change', function (event) {
+                        if (event.args) {
+                                setWaterAgent('CaSO4', 0);
+                                setWaterAgent('CaSO4', event.args.value);
+                                calcWater();
+                        }
+                });
+                $('#wa_mgso4').on('change', function (event) {
+                        if (event.args) {
+                                setWaterAgent('MgSO4', 0);
+                                setWaterAgent('MgSO4', event.args.value);
+                                calcWater();
+                        }
+                });
+                $('#wa_nacl').on('change', function (event) {
+                        if (event.args) {
+                                setWaterAgent('NaCl', 0);
+                                setWaterAgent('NaCl', event.args.value);
+                                calcWater();
+                        }
+                });
+                $('#wa_base_name').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                console.log("wa_base_name "+index);
+                                setWaterAgent(last_base, 0);
+                                last_base = BaseTypeData[index].nl;
+                                setWaterAgent(last_base, parseFloat($("#wa_base").jqxNumberInput('decimal')));
+                                dataRecord.wa_base_name = index;
+                                calcWater();
+                        }
+                });
+                $('#wa_base').on('change', function (event) {
+                        var name = BaseTypeData[$("#wa_base_name").val()].nl;
+                        setWaterAgent(name, parseFloat(event.args.value));
+                        calcWater();
+                });
+                $('#wa_acid_name').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                console.log("wa_acid_name "+index);
+                                setWaterAgent(last_acid, 0);
+                                last_acid = AcidTypeData[index].nl;
+                                setWaterAgent(last_acid, parseFloat($("#wa_acid").jqxNumberInput('decimal')));
+                                dataRecord.wa_acid_name = index;
+                                calcWater();
+                        }
+                });
+                $('#wa_acid').on('change', function (event) {
+                        var name = AcidTypeData[$("#wa_acid_name").val()].nl;
+                        setWaterAgent(name, parseFloat(event.args.value));
+                        calcWater();
+                });
+                $('#wa_acid_perc').on('change', function (event) { calcWater(); });
+
+                $('#color_method').on('change', function (event) {
+                        dataRecord.color_method = event.args.index;
+                        calcFermentables();
+                });
+                $('#ibu_method').on('change', function (event) {
+                        dataRecord.ibu_method = event.args.index;
+                        calcFermentables();
+                        calcIBUs();
+                });
+
+                $('#batch_size').on('change', function (event) {
+                        console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size);
+                        $("#est_a_vol").val(event.args.value * 1.04);
+                        var factor, new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size;
+                        factor = parseFloat(event.args.value) / dataRecord.batch_size;
+                        dataRecord.boil_size = new_boil;
+                        $("#boil_size").val(Round(new_boil, 2));
+                        $("#est_pre_vol").val(Round(new_boil * 1.04, 2));
+                        dataRecord.sparge_volume *= factor;
+                        $("#sparge_volume").val(dataRecord.sparge_volume);
+                        $("#brew_sparge_volume").val(dataRecord.sparge_volume);
+                        dataRecord.batch_size = parseFloat(event.args.value);
+                        calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
+                        adjustWaters(factor);
+                        calcFermentables();
+                        adjustHops(factor);
+                        adjustMiscs(factor);
+                        adjustYeasts(factor);
+                        calcIBUs();
+                        calcWater();
+                        calcSparge();
+                        calcMash();
+                });
+                $('#boil_time').on('change', function (event) {
+                        console.log("boil_time change:"+parseFloat(event.args.value)+" old:"+dataRecord.boil_time);
+                        var new_boil, new_evap, old_evap = parseFloat(dataRecord.boil_size) - parseFloat(dataRecord.batch_size);
+                        new_evap = old_evap * (parseFloat(event.args.value) / dataRecord.boil_time);
+                        new_boil = parseFloat(dataRecord.batch_size) + new_evap;
+                        dataRecord.boil_time = parseFloat(event.args.value);
+                        dataRecord.boil_size = new_boil;
+                        $("#est_pre_vol").val(Round(new_boil * 1.04, 2));
+                        $("#boil_size").val(Round(new_boil, 2));
+                        calcFermentables();
+                        calcIBUs();
+                        calcYeast();
+                });
+                $('#efficiency').on('change', function (event) {
+                        var estog = parseFloat($("#est_og").jqxNumberInput('decimal'));
+                        dataRecord.efficiency = parseFloat(event.args.value);
+                        console.log("efficiency change:"+dataRecord.efficiency+" est_og:"+estog);
+                        calcFermentablesFromOG(estog);     // Keep the OG
+                        calcFermentables();
+                        calcIBUs();
+                        calcYeast();
+                });
+                $('#est_og').on('change', function (event) {
+                        dataRecord.est_og = parseFloat(event.args.value);
+                        console.log("est_og change:"+dataRecord.est_og);
+                        $('#est_og2').val(dataRecord.est_og);
+                        calcFermentablesFromOG(dataRecord.est_og);      // Adjust fermentables amounts
+                        calcFermentables();                             // Update the recipe details
+                        calcIBUs();                                     // and the IBU's.
+                        calcMash();
+                        calcYeast();
+                });
+                $('#mash_ph').on('change', function (event) {
+                        dataRecord.mash_ph = parseFloat(event.args.value);
+                        calcWater();
+                });
+
+                $('#sparge_ph').on('change', function (event) {
+                        dataRecord.sparge_ph = parseFloat(event.args.value);
+                        calcSparge();
+                });
+                $('#sparge_volume').on('change', function (event) {
+                        dataRecord.sparge_volume = parseFloat(event.args.value);
+                        $('#brew_sparge_volume').val(dataRecord.sparge_volume);
+                        calcSparge();
+                });
+                $("#sparge_temp").on('change', function (event) {
+                        dataRecord.sparge_temp = parseFloat(event.args.value);
+                        $('#brew_sparge_temperature').val(dataRecord.sparge_temp);
+                });
+                $('#sparge_source').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.sparge_source= index;
+                                calcSparge();
+                        }
+                });
+                $('#sparge_acid_type').on('change', function (event) {
+                        if (event.args) {
+                                var index = event.args.index;
+                                dataRecord.sparge_acid_type = index;
+                                console.log("new sparge_acid_type: "+dataRecord.sparge_acid_type);
+                                calcSparge();
+                        }
+                });
+                $('#sparge_acid_perc').on('change', function (event) {
+                        dataRecord.sparge_acid_perc = parseFloat(event.args.value);
+                        calcSparge();
+                });
+
+                calcFermentation();
+                calcCarbonation();
+                $('#package_volume').on('change', function (event) {
+                        var diff, tnew, told = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        dataRecord.package_volume = parseFloat(event.args.value);
+                        if (dataRecord.package_volume > dataRecord.brew_fermenter_volume) {
+                                dataRecord.package_volume = dataRecord.brew_fermenter_volume;
+                                $('#package_volume').val(dataRecord.package_volume);
+                        }
+                        tnew = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        diff = tnew - told;
+                        if (told > 0) {
+                                dataRecord.bottle_amount += (dataRecord.bottle_amount / told) * diff;
+                                dataRecord.keg_amount += (dataRecord.keg_amount / told) * diff;
+                        } else {
+                                dataRecord.bottle_amount = tnew;
+                                dataRecord.keg_amount = 0;
+                        }
+                        console.log("diff:"+diff+" old:"+told+" bottle:"+dataRecord.bottle_amount+" keg:"+dataRecord.keg_amount);
+                        $('#bottle_amount').val(parseFloat(dataRecord.bottle_amount * 1000) / 1000);
+                        $('#keg_amount').val(parseFloat(dataRecord.keg_amount * 1000) / 1000);
+                        calcCarbonation();
+                });
+                $('#package_infuse_amount').on('change', function (event) {
+                        var diff, tnew, told = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        dataRecord.package_infuse_amount = parseFloat(event.args.value);
+                        tnew = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        diff = tnew - told;
+                        if (told > 0) {
+                                dataRecord.bottle_amount += (dataRecord.bottle_amount / told) * diff;
+                                dataRecord.keg_amount += (dataRecord.keg_amount / told) * diff;
+                        } else {
+                                dataRecord.bottle_amount = tnew;
+                                dataRecord.keg_amount = 0;
+                        }
+                        console.log("diff:"+diff+" old:"+told+" bottle:"+dataRecord.bottle_amount+" keg:"+dataRecord.keg_amount);
+                        $('#bottle_amount').val(parseFloat(dataRecord.bottle_amount * 1000) / 1000);
+                        $('#keg_amount').val(parseFloat(dataRecord.keg_amount * 1000) / 1000);
+                        calcCarbonation();
+                });
+                $('#package_infuse_abv').on('change', function (event) {
+                        dataRecord.package_infuse_abv = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $('#bottle_amount').on('change', function (event) {
+                        var vtot, diff, vnew = parseFloat(event.args.value);
+                        vtot = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        if (vnew > vtot)
+                                vnew = vtot;
+                        diff = dataRecord.bottle_amount - vnew;
+                        dataRecord.bottle_amount = Math.round((dataRecord.bottle_amount - diff) * 1000) / 1000;
+                        dataRecord.keg_amount = Math.round((dataRecord.keg_amount + diff) * 1000) / 1000;
+                        $('#bottle_amount').val(parseFloat(dataRecord.bottle_amount));
+                        $('#keg_amount').val(parseFloat(dataRecord.keg_amount));
+                        calcCarbonation();
+                });
+                $("#bottle_priming_water").on('change', function (event) {
+                        dataRecord.bottle_priming_water = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $('#keg_amount').on('change', function (event) {
+                        var diff, vtot, vnew = parseFloat(event.args.value);
+                        vtot = dataRecord.package_volume + dataRecord.package_infuse_amount;
+                        if (vnew > vtot)
+                                vnew = vtot;
+                        diff = dataRecord.keg_amount - vnew;
+                        dataRecord.bottle_amount = Math.round((dataRecord.bottle_amount + diff) * 1000) / 1000;
+                        dataRecord.keg_amount = Math.round((dataRecord.keg_amount - diff) * 1000) / 1000;
+                        $('#bottle_amount').val(parseFloat(dataRecord.bottle_amount));
+                        $('#keg_amount').val(parseFloat(dataRecord.keg_amount));
+                        calcCarbonation();
+                });
+                $("#keg_priming_water").on('change', function (event) {
+                        dataRecord.keg_priming_water = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $('#bottle_carbonation').on('change', function (event) {
+                        dataRecord.bottle_carbonation = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $('#bottle_carbonation_temp').on('change', function (event) {
+                        dataRecord.bottle_carbonation_temp = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $('#keg_carbonation').on('change', function (event) {
+                        dataRecord.keg_carbonation = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+                $("#keg_forced_carb").on('checked', function (event) {
+                        dataRecord.keg_forced_carb = 1;
+                        calcCarbonation();
+                });
+                $("#keg_forced_carb").on('unchecked', function (event) {
+                        dataRecord.keg_forced_carb = 0;
+                        calcCarbonation();
+                });
+                $('#keg_carbonation_temp').on('change', function (event) {
+                        dataRecord.keg_carbonation_temp = parseFloat(event.args.value);
+                        calcCarbonation();
+                });
+
+                $("#brew_fermenter_extrawater").on('change',function (event){
+                        dataRecord.brew_fermenter_extrawater=parseFloat(event.args.value);calcFermentables();calcIBUs();calcYeast();
+                });
+                $("#brew_fermenter_tcloss").on('change',function (event){
+                        dataRecord.brew_fermenter_tcloss=parseFloat(event.args.value);calcFermentables();calcIBUs();calcYeast();
+                });
+                $("#primary_end_sg").on('change',function (event){dataRecord.primary_end_sg=parseFloat(event.args.value);calcFermentation();});
+                $("#primary_end_brix").on('change', function (event) {
+			var OBrix, FBrix, FG;
+                        if(dataRecord.brew_fermenter_sg>=1.020){
+                                OBrix = sg_to_brix(dataRecord.brew_fermenter_sg);
+                                FBrix = parseFloat(event.args.value);
+				FG = Round(1.0031 - 0.002318474*OBrix - 0.000007775*(OBrix*OBrix) - 0.000000034*Math.pow(OBrix,3) +
+					   0.00574*(FBrix) + 0.00003344*(FBrix*FBrix) + 0.000000086*Math.pow(FBrix,3), 4);
+                                //console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
+                                if (FBrix > 0.05) {
+					$("#primary_end_sg").val(FG);
+					dataRecord.primary_end_sg=FG;
+				}
+                                calcFermentation();
+                        }
+                });
+                $("#secondary_end_sg").on('change',function (event){dataRecord.secondary_end_sg=parseFloat(event.args.value);calcFermentation();});
+                $("#secondary_end_brix").on('change', function (event) {
+			var OBrix, FBrix, FG;
+                        if(dataRecord.brew_fermenter_sg>=1.020){
+                                OBrix = sg_to_brix(dataRecord.brew_fermenter_sg);
+                                FBrix = parseFloat(event.args.value);
+				FG = Round(1.0031 - 0.002318474*OBrix - 0.000007775*(OBrix*OBrix) - 0.000000034*Math.pow(OBrix,3) +
+					   0.00574*(FBrix) + 0.00003344*(FBrix*FBrix) + 0.000000086*Math.pow(FBrix,3), 4);
+                                //console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
+                                if (FBrix > 0.05) {
+					$("#secondary_end_sg").val(FG);
+					dataRecord.secondary_end_sg=FG;
+				}
+                                calcFermentation();
+                        }
+                });
+                $("#final_brix").on('change',function (event){
+			var OBrix, FBrix, FG;
+                        if(dataRecord.brew_fermenter_sg>=1.020){
+                                OBrix = sg_to_brix(dataRecord.brew_fermenter_sg);
+                                FBrix = parseFloat(event.args.value);
+				FG = Round(1.0031 - 0.002318474*OBrix - 0.000007775*(OBrix*OBrix) - 0.000000034*Math.pow(OBrix,3) +
+					   0.00574*(FBrix) + 0.00003344*(FBrix*FBrix) + 0.000000086*Math.pow(FBrix,3), 4);
+                                //console.log("OBrix:"+OBrix+" FBrix:"+FBrix+" FG:"+FG);
+                                if (FBrix > 0.05) {
+					$("#fg").val(FG);
+					dataRecord.fg=FG;
+				}
+                                calcFermentation();
+                        }
+                });
+                $("#fg").on('change',function (event){dataRecord.fg=parseFloat(event.args.value);calcFermentation();});
+                $("#BLog").jqxButton({disabled:(dataRecord.log_brew)?false:true});
+                $("#FLog").jqxButton({disabled:(dataRecord.log_fermentation)?false:true});
+        }
+
+        $("#styleSelect").jqxDropDownList({
+                placeHolder: "Kies bierstijl:",
+                theme: theme,
+                source: styleslist,
+                displayMember: "name",
+                width: 180,
+                height: 23,
+                dropDownVerticalAlignment: 'top',
+                dropDownWidth: 500,
+                dropDownHeight: 380,
+                renderer: function (index, label, value) {
+                        var datarecord = styleslist.records[index];
+                        return datarecord.style_guide + " " + datarecord.style_letter+ " " + datarecord.name;
+                }
+        });
+        $("#styleSelect").on('select', function (event) {
+                if (event.args) {
+                        var datarecord, index = event.args.index;
+                        datarecord = styleslist.records[index];
+                        $("#st_name").val(datarecord.name);
+                        $("#st_category").val(datarecord.category);
+                        $("#st_category_number").val(datarecord.category_number);
+                        $("#st_letter").val(datarecord.style_letter);
+                        $("#st_guide").val(datarecord.style_guide);
+                        $("#st_type").val(StyleTypeData[datarecord.type].nl);
+                        $("#st_og_min").val(datarecord.og_min);
+                        $("#st_og_max").val(datarecord.og_max);
+                        $("#st_fg_min").val(datarecord.fg_min);
+                        $("#st_fg_max").val(datarecord.fg_max);
+                        $("#st_ibu_min").val(datarecord.ibu_min);
+                        $("#st_ibu_max").val(datarecord.ibu_max);
+                        $("#st_color_min").val(datarecord.color_min);
+                        $("#st_color_max").val(datarecord.color_max);
+                        $("#st_carb_min").val(datarecord.carb_min);
+                        $("#st_carb_min2").val(datarecord.carb_min);
+                        $("#st_carb_max").val(datarecord.carb_max);
+                        $("#st_carb_max2").val(datarecord.carb_max);
+                        $("#st_abv_min").val(datarecord.abv_min);
+                        $("#st_abv_max").val(datarecord.abv_max);
+                }
+        });
+
+        // Equipemnt dropdown list
+        $("#equipmentSelect").jqxDropDownList({
+                placeHolder: "Kies apparatuur:",
+                theme: theme,
+                source: equipmentlist,
+                displayMember: "name",
+                width: 170,
+                height: 23,
+                dropDownWidth: 300,
+                renderer: function (index, label, value) {
+                        var datarecord = equipmentlist.records[index];
+                        return datarecord.batch_size + " liter " + datarecord.name;
+                }
+        });
+        $("#equipmentSelect").on('select', function (event) {
+                if (event.args) {
+                        var datarecord, factor, index = event.args.index;
+                        datarecord = equipmentlist.records[index];
+                        factor = datarecord.batch_size / dataRecord.batch_size;
+                        $("#eq_name").val(datarecord.name);
+                        $("#eq_boil_size").val(datarecord.boil_size);
+                        dataRecord.boil_size = datarecord.boil_size;
+                        $("#boil_size").val(datarecord.boil_size);
+                        $("#eq_batch_size").val(datarecord.batch_size);
+                        dataRecord.batch_size = datarecord.batch_size;
+                        $("#batch_size").val(datarecord.batch_size);
+                        $("#est_a_vol").val(datarecord.batch_size * 1.04);
+                        $("#eq_tun_volume").val(datarecord.tun_volume);
+                        dataRecord.eq_tun_weight = datarecord.tun_weight;
+                        dataRecord.eq_tun_specific_heat = datarecord.tun_specific_heat;
+                        dataRecord.eq_tun_material = datarecord.tun_material;
+                        dataRecord.eq_tun_height = datarecord.tun_height / 100.0;
+                        $("#eq_top_up_water").val(datarecord.top_up_water);
+                        dataRecord.eq_trub_chiller_loss = datarecord.trub_chiller_loss;
+                        $("#eq_trub_chiller_loss").val(datarecord.trub_chiller_loss);
+                        $("#eq_evap_rate").val(datarecord.evap_rate);
+                        $("#eq_boil_time").val(datarecord.boil_time);
+                        dataRecord.eq_calc_boil_volume = datarecord.calc_boil_volume;
+                        $("#eq_top_up_kettle").val(datarecord.top_up_kettle);
+                        $("#eq_hop_utilization").val(datarecord.hop_utilization);
+                        $("#eq_notes").val(datarecord.notes);
+                        $("#eq_lauter_volume").val(datarecord.lauter_volume);
+                        dataRecord.eq_lauter_height = datarecord.lauter_height / 100.0;
+                        $("#eq_lauter_deadspace").val(datarecord.lauter_deadspace);
+                        $("#eq_kettle_volume").val(datarecord.kettle_volume);
+                        dataRecord.eq_kettle_height = datarecord.kettle_height / 100.0;
+                        $("#eq_mash_volume").val(datarecord.mash_volume);
+                        $("#eq_mash_max").val(datarecord.mash_max);
+                        dataRecord.eq_mash_max = datarecord.mash_max;
+                        $("#mash_max").val(datarecord.mash_max);
+                        $("#eq_efficiency").val(datarecord.efficiency);
+                        dataRecord.efficiency = datarecord.efficiency;
+                        $("#efficiency").val(datarecord.efficiency);
+
+                        dataRecord.sparge_volume = Math.round(datarecord.boil_size * 5) / 10;
+                        $("#sparge_volume").val(dataRecord.sparge_volume);
+                        $("#brew_sparge_volume").val(dataRecord.sparge_volume);
+                        $("#est_pre_vol").val(datarecord.boil_size * 1.04);
+                        calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
+                        adjustWaters(factor);
+                        calcFermentables();
+                        adjustHops(factor);
+                        adjustMiscs(factor);
+                        adjustYeasts(factor);
+                        calcIBUs();
+                        calcWater();
+                        calcSparge();
+                }
+        });
+
+        function saveRecord() {
+                console.log("saveRecord()");
+                var row = {
+                        record: my_record,
+                        uuid: dataRecord.uuid,
+                        name: $("#name").val(),
+                        code: $("#code").val(),
+                        birth: $("#birth").val(),
+                        stage: dataRecord.stage,
+                        notes: $("#notes").val(),
+                        log_brew: dataRecord.log_brew,
+                        log_fermentation: dataRecord.log_fermentation,
+                        inventory_reduced: dataRecord.inventory_reduced,
+                        locked: dataRecord.locked,
+                        eq_name: $("#eq_name").val(),
+                        eq_boil_size: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')),
+                        eq_batch_size: parseFloat($("#eq_batch_size").jqxNumberInput('decimal')),
+                        eq_tun_volume: parseFloat($("#eq_tun_volume").jqxNumberInput('decimal')),
+                        eq_tun_weight: dataRecord.eq_tun_weight,
+                        eq_tun_specific_heat: dataRecord.eq_tun_specific_heat,
+                        eq_tun_material: dataRecord.eq_tun_material,
+                        eq_tun_height: dataRecord.eq_tun_height,
+                        eq_top_up_water: parseFloat($("#eq_top_up_water").jqxNumberInput('decimal')),
+                        eq_trub_chiller_loss: parseFloat($("#eq_trub_chiller_loss").jqxNumberInput('decimal')),
+                        eq_evap_rate: parseFloat($("#eq_evap_rate").jqxNumberInput('decimal')),
+                        eq_boil_time: parseFloat($("#eq_boil_time").jqxNumberInput('decimal')),
+                        eq_calc_boil_volume: dataRecord.eq_calc_boil_volume,
+                        eq_top_up_kettle: parseFloat($("#eq_top_up_kettle").jqxNumberInput('decimal')),
+                        eq_hop_utilization: parseFloat($("#eq_hop_utilization").jqxNumberInput('decimal')),
+                        eq_notes: $("#eq_notes").val(),
+                        eq_lauter_volume: parseFloat($("#eq_lauter_volume").jqxNumberInput('decimal')),
+                        eq_lauter_height: dataRecord.eq_lauter_height,
+                        eq_lauter_deadspace: parseFloat($("#eq_lauter_deadspace").jqxNumberInput('decimal')),
+                        eq_kettle_volume: parseFloat($("#eq_kettle_volume").jqxNumberInput('decimal')),
+                        eq_kettle_height: dataRecord.eq_kettle_height,
+                        eq_mash_volume: parseFloat($("#eq_mash_volume").jqxNumberInput('decimal')),
+                        eq_mash_max: parseFloat($("#eq_mash_max").jqxNumberInput('decimal')),
+                        eq_efficiency: parseFloat($("#eq_efficiency").jqxNumberInput('decimal')),
+                        brew_date_start: $("#brew_date_start").val(),
+                        brew_mash_ph: parseFloat($("#brew_mash_ph").jqxNumberInput('decimal')),
+                        brew_mash_sg: parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')),
+                        brew_mash_efficiency: parseFloat($("#brew_mash_efficiency").jqxNumberInput('decimal')),
+                        brew_sparge_est: parseFloat($("#brew_sparge_est").jqxNumberInput('decimal')),
+                        brew_sparge_ph: parseFloat($("#brew_sparge_ph").jqxNumberInput('decimal')),
+                        brew_preboil_volume: parseFloat($("#brew_preboil_volume").jqxNumberInput('decimal')),
+                        brew_preboil_sg: parseFloat($("#brew_preboil_sg").jqxNumberInput('decimal')),
+                        brew_preboil_ph: parseFloat($("#brew_preboil_ph").jqxNumberInput('decimal')),
+                        brew_preboil_efficiency: parseFloat($("#brew_preboil_efficiency").jqxNumberInput('decimal')),
+                        brew_aboil_volume: parseFloat($("#brew_aboil_volume").jqxNumberInput('decimal')),
+                        brew_aboil_sg: parseFloat($("#brew_aboil_sg").jqxNumberInput('decimal')),
+                        brew_aboil_ph: parseFloat($("#brew_aboil_ph").jqxNumberInput('decimal')),
+                        brew_aboil_efficiency: parseFloat($("#brew_aboil_efficiency").jqxNumberInput('decimal')),
+                        brew_cooling_method: $("#brew_cooling_method").val(),
+                        brew_cooling_time: parseFloat($("#brew_cooling_time").jqxNumberInput('decimal')),
+                        brew_cooling_to: parseFloat($("#brew_cooling_to").jqxNumberInput('decimal')),
+                        brew_whirlpool9: parseFloat($("#brew_whirlpool9").jqxNumberInput('decimal')),
+                        brew_whirlpool7: parseFloat($("#brew_whirlpool7").jqxNumberInput('decimal')),
+                        brew_whirlpool6: parseFloat($("#brew_whirlpool6").jqxNumberInput('decimal')),
+                        brew_whirlpool2: parseFloat($("#brew_whirlpool2").jqxNumberInput('decimal')),
+                        brew_fermenter_volume: parseFloat($("#brew_fermenter_volume").jqxNumberInput('decimal')),
+                        brew_fermenter_extrawater: parseFloat($("#brew_fermenter_extrawater").jqxNumberInput('decimal')),
+                        brew_fermenter_tcloss: parseFloat($("#brew_fermenter_tcloss").jqxNumberInput('decimal')),
+                        brew_aeration_time: parseFloat($("#brew_aeration_time").jqxNumberInput('decimal')),
+                        brew_aeration_speed: parseFloat($("#brew_aeration_speed").jqxNumberInput('decimal')),
+                        brew_aeration_type: $("#brew_aeration_type").val(),
+                        brew_fermenter_sg: parseFloat($("#brew_fermenter_sg").jqxNumberInput('decimal')),
+                        brew_fermenter_ibu: parseFloat($("#brew_fermenter_ibu").jqxNumberInput('decimal')),
+                        brew_fermenter_color: parseFloat($("#brew_fermenter_color").jqxNumberInput('decimal')),
+                        brew_date_end: $("#brew_date_end").val(),
+                        og: dataRecord.og,
+                        fg: parseFloat($("#fg").jqxNumberInput('decimal')),
+                        primary_start_temp: parseFloat($("#primary_start_temp").jqxNumberInput('decimal')),
+                        primary_max_temp: parseFloat($("#primary_max_temp").jqxNumberInput('decimal')),
+                        primary_end_temp: parseFloat($("#primary_end_temp").jqxNumberInput('decimal')),
+                        primary_end_sg: parseFloat($("#primary_end_sg").jqxNumberInput('decimal')),
+                        primary_end_date: $("#primary_end_date").val(),
+                        secondary_temp: parseFloat($("#secondary_temp").jqxNumberInput('decimal')),
+                        secondary_end_sg: parseFloat($("#secondary_end_sg").jqxNumberInput('decimal')),
+                        secondary_end_date: $("#secondary_end_date").val(),
+                        tertiary_temp: parseFloat($("#tertiary_temp").jqxNumberInput('decimal')),
+                        package_date: $("#package_date").val(),
+                        package_volume: parseFloat($("#package_volume").jqxNumberInput('decimal')),
+                        package_infuse_amount: parseFloat($("#package_infuse_amount").jqxNumberInput('decimal')),
+                        package_infuse_abv: parseFloat($("#package_infuse_abv").jqxNumberInput('decimal')),
+                        package_infuse_notes: $("#package_infuse_notes").val(),
+                        package_abv: parseFloat($("#package_abv").jqxNumberInput('decimal')),
+                        package_ph: parseFloat($("#package_ph").jqxNumberInput('decimal')),
+                        bottle_amount: parseFloat($("#bottle_amount").jqxNumberInput('decimal')),
+                        bottle_carbonation: parseFloat($("#bottle_carbonation").jqxNumberInput('decimal')),
+                        bottle_priming_water: parseFloat($("#bottle_priming_water").jqxNumberInput('decimal')),
+                        bottle_priming_amount: parseFloat($("#bottle_priming_amount").jqxNumberInput('decimal')),
+                        bottle_carbonation_temp: parseFloat($("#bottle_carbonation_temp").jqxNumberInput('decimal')),
+                        keg_amount: parseFloat($("#keg_amount").jqxNumberInput('decimal')),
+                        keg_carbonation: parseFloat($("#keg_carbonation").jqxNumberInput('decimal')),
+                        keg_priming_water: parseFloat($("#keg_priming_water").jqxNumberInput('decimal')),
+                        keg_priming_amount: parseFloat($("#keg_priming_amount").jqxNumberInput('decimal')),
+                        keg_carbonation_temp: parseFloat($("#keg_carbonation_temp").jqxNumberInput('decimal')),
+                        keg_forced_carb: dataRecord.keg_forced_carb,
+                        keg_pressure: parseFloat($("#keg_pressure").jqxNumberInput('decimal')),
+                        taste_notes: $("#taste_notes").val(),
+                        taste_rate: parseFloat($("#taste_rate").jqxNumberInput('decimal')),
+                        taste_date: $("#taste_date").val(),
+                        taste_color: $("#taste_color").val(),
+                        taste_transparency: $("#taste_transparency").val(),
+                        taste_head: $("#taste_head").val(),
+                        taste_aroma: $("#taste_aroma").val(),
+                        taste_taste: $("#taste_taste").val(),
+                        taste_mouthfeel: $("#taste_mouthfeel").val(),
+                        taste_aftertaste: $("#taste_aftertaste").val(),
+                        st_name: $('#st_name').val(),
+                        st_letter: $('#st_letter').val(),
+                        st_guide: $('#st_guide').val(),
+                        st_type: dataRecord.st_type,
+                        st_category: $('#st_category').val(),
+                        st_category_number: parseFloat($("#st_category_number").jqxNumberInput('decimal')),
+                        st_og_min: parseFloat($("#st_og_min").jqxNumberInput('decimal')),
+                        st_og_max: parseFloat($("#st_og_max").jqxNumberInput('decimal')),
+                        st_fg_min: parseFloat($("#st_fg_min").jqxNumberInput('decimal')),
+                        st_fg_max: parseFloat($("#st_fg_max").jqxNumberInput('decimal')),
+                        st_ibu_min: parseFloat($("#st_ibu_min").jqxNumberInput('decimal')),
+                        st_ibu_max: parseFloat($("#st_ibu_max").jqxNumberInput('decimal')),
+                        st_color_min: parseFloat($("#st_color_min").jqxNumberInput('decimal')),
+                        st_color_max: parseFloat($("#st_color_max").jqxNumberInput('decimal')),
+                        st_carb_min: parseFloat($("#st_carb_min").jqxNumberInput('decimal')),
+                        st_carb_max: parseFloat($("#st_carb_max").jqxNumberInput('decimal')),
+                        st_abv_min: parseFloat($("#st_abv_min").jqxNumberInput('decimal')),
+                        st_abv_max: parseFloat($("#st_abv_max").jqxNumberInput('decimal')),
+                        type: $("#type").val(),
+                        batch_size: parseFloat($("#batch_size").jqxNumberInput('decimal')),
+                        boil_size: parseFloat($("#boil_size").jqxNumberInput('decimal')),
+                        boil_time: parseFloat($("#boil_time").jqxNumberInput('decimal')),
+                        efficiency: parseFloat($("#efficiency").jqxNumberInput('decimal')),
+                        est_og: parseFloat($("#est_og").jqxNumberInput('decimal')),
+                        est_fg: parseFloat($("#est_fg").jqxNumberInput('decimal')),
+                        est_abv: parseFloat($("#est_abv").jqxNumberInput('decimal')),
+                        est_color: parseFloat($("#est_color").jqxNumberInput('decimal')),
+                        color_method: $("#color_method").val(),
+                        est_ibu: parseFloat($("#est_ibu").jqxNumberInput('decimal')),
+                        ibu_method: $("#ibu_method").val(),
+                        est_carb: parseFloat($("#est_carb").jqxNumberInput('decimal')),
+                        mash_name: $("#mash_name").val(),
+                        mash_ph: parseFloat($("#mash_ph").jqxNumberInput('decimal')),
+                        sparge_temp: parseFloat($("#sparge_temp").jqxNumberInput('decimal')),
+                        sparge_ph: parseFloat($("#sparge_ph").jqxNumberInput('decimal')),
+                        sparge_volume: parseFloat($("#sparge_volume").jqxNumberInput('decimal')),
+                        sparge_source: $("#sparge_source").val(),
+                        sparge_acid_type: $("#sparge_acid_type").val(),
+                        sparge_acid_perc: parseFloat($("#sparge_acid_perc").jqxNumberInput('decimal')),
+                        sparge_acid_amount: dataRecord.sparge_acid_amount,
+                        calc_acid: dataRecord.calc_acid,
+                        w1_name: $("#w1_name").val(),
+                        w1_amount: parseFloat($("#w1_amount").jqxNumberInput('decimal')),
+                        w1_calcium: parseFloat($("#w1_calcium").jqxNumberInput('decimal')),
+                        w1_sulfate: parseFloat($("#w1_sulfate").jqxNumberInput('decimal')),
+                        w1_chloride: parseFloat($("#w1_chloride").jqxNumberInput('decimal')),
+                        w1_sodium: parseFloat($("#w1_sodium").jqxNumberInput('decimal')),
+                        w1_magnesium: parseFloat($("#w1_magnesium").jqxNumberInput('decimal')),
+                        w1_total_alkalinity: parseFloat($("#w1_total_alkalinity").jqxNumberInput('decimal')),
+                        w1_ph: parseFloat($("#w1_ph").jqxNumberInput('decimal')),
+                        w1_cost: dataRecord.w1_cost,
+                        w2_name: $("#w2_name").val(),
+                        w2_amount: parseFloat($("#w2_amount").jqxNumberInput('decimal')),
+                        w2_calcium: parseFloat($("#w2_calcium").jqxNumberInput('decimal')),
+                        w2_sulfate: parseFloat($("#w2_sulfate").jqxNumberInput('decimal')),
+                        w2_chloride: parseFloat($("#w2_chloride").jqxNumberInput('decimal')),
+                        w2_sodium: parseFloat($("#w2_sodium").jqxNumberInput('decimal')),
+                        w2_magnesium: parseFloat($("#w2_magnesium").jqxNumberInput('decimal')),
+                        w2_total_alkalinity: parseFloat($("#w2_total_alkalinity").jqxNumberInput('decimal')),
+                        w2_ph: parseFloat($("#w2_ph").jqxNumberInput('decimal')),
+                        w2_cost: dataRecord.w2_cost,
+                        wg_amount: parseFloat($("#wg_amount").jqxNumberInput('decimal')),
+                        wg_calcium: parseFloat($("#wg_calcium").jqxNumberInput('decimal')),
+                        wg_sulfate: parseFloat($("#wg_sulfate").jqxNumberInput('decimal')),
+                        wg_chloride: parseFloat($("#wg_chloride").jqxNumberInput('decimal')),
+                        wg_sodium: parseFloat($("#wg_sodium").jqxNumberInput('decimal')),
+                        wg_magnesium: parseFloat($("#wg_magnesium").jqxNumberInput('decimal')),
+                        wg_total_alkalinity: parseFloat($("#wg_total_alkalinity").jqxNumberInput('decimal')),
+                        wg_ph: parseFloat($("#wg_ph").jqxNumberInput('decimal')),
+                        wb_calcium: parseFloat($("#wb_calcium").jqxNumberInput('decimal')),
+                        wb_sulfate: parseFloat($("#wb_sulfate").jqxNumberInput('decimal')),
+                        wb_chloride: parseFloat($("#wb_chloride").jqxNumberInput('decimal')),
+                        wb_sodium: parseFloat($("#wb_sodium").jqxNumberInput('decimal')),
+                        wb_magnesium: parseFloat($("#wb_magnesium").jqxNumberInput('decimal')),
+                        wb_total_alkalinity: parseFloat($("#wb_total_alkalinity").jqxNumberInput('decimal')),
+                        wb_ph: parseFloat($("#wb_ph").jqxNumberInput('decimal')),
+                        wa_acid_name: $("#wa_acid_name").val(),
+                        wa_acid_perc: parseFloat($("#wa_acid_perc").jqxNumberInput('decimal')),
+                        wa_base_name: $("#wa_base_name").val(),
+                        starter_enable: dataRecord.starter_enable,
+                        starter_type: $("#starter_type").val(),
+                        starter_sg: parseFloat($("#starter_sg").jqxNumberInput('decimal')),
+                        starter_viability: parseFloat($("#starter_viability").jqxNumberInput('decimal')),
+                        prop1_type: $("#prop1_type").val(),
+                        prop1_volume: parseFloat($("#prop1_volume").jqxNumberInput('decimal')),
+                        prop2_type: $("#prop2_type").val(),
+                        prop2_volume: parseFloat($("#prop2_volume").jqxNumberInput('decimal')),
+                        prop3_type: $("#prop3_type").val(),
+                        prop3_volume: parseFloat($("#prop3_volume").jqxNumberInput('decimal')),
+                        prop4_type: $("#prop4_type").val(),
+                        prop4_volume: parseFloat($("#prop4_volume").jqxNumberInput('decimal')),
+                        fermentables: $('#fermentableGrid').jqxGrid('getrows'),
+                        hops: $('#hopGrid').jqxGrid('getrows'),
+                        miscs: $('#miscGrid').jqxGrid('getrows'),
+                        yeasts: $('#yeastGrid').jqxGrid('getrows'),
+                        mashs: $('#mashGrid').jqxGrid('getrows')
+                },
+                data = "update=true&" + $.param(row);
+                $.ajax({
+                        dataType: 'json',
+                        url: url,
+                        cache: false,
+                        data: data,
+                        async: false,
+                        type: "POST",
+                        success: function (data, status, xhr) {
+                                console.log("saveRecord() success");
+                        },
+                        error: function(jqXHR, textStatus, errorThrown) {
+                                console.log("saveRecord() error");
+                        }
+                });
+        };
+
 	// initialize the input fields.
 	// Tab 1, Algemeen
 	$("#name").jqxTooltip({ content: 'De naam voor dit product.' });
@@ -4629,9 +4618,9 @@
 	});
 	$("#FermentableReady").jqxButton({ template: "success", width: '90px', theme: theme });
 	$("#FermentableReady").click(function () {
-		var rowID = $("#fermentableGrid").jqxGrid('getrowid', fermentableRow);
+		var row, rowID = $("#fermentableGrid").jqxGrid('getrowid', fermentableRow);
 		console.log("FermentableReady row:"+fermentableRow+" ID:"+rowID);
-		var row = {
+		row = {
 			f_name: fermentableData.f_name,
 			f_origin: fermentableData.f_origin,
 			f_supplier: fermentableData.f_supplier,
@@ -4686,8 +4675,8 @@
 	});
 	$("#wf_select").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = fermentablelist.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = fermentablelist.records[index];
 			$("#wf_name").val(datarecord.name);
 			fermentableData.f_name = datarecord.name;
 			fermentableData.f_origin = datarecord.origin;
@@ -4724,34 +4713,35 @@
 	});
 	$("#wf_percentage").jqxNumberInput( Perc1dec );
 	$("#wf_percentage").on('change', function (event) {
-		var oldvalue = Math.round(fermentableData.f_percentage * 10) / 10.0;
-		var newvalue = event.args.value;
+		var newvalue, rowscount, rowdata, diff, tw, damount, namount, nw, newperc,
+		oldvalue = Math.round(fermentableData.f_percentage * 10) / 10.0;
+		newvalue = event.args.value;
 		console.log("percentage changed: "+newvalue+" old: "+oldvalue);
 		fermentableData.f_percent = newvalue;
-		var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+		rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
 		if ((oldvalue != newvalue) && (rowscount > 1)) {
-			var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow);
+			rowdata = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow);
 			if (rowdata.f_adjust_to_total_100) {
 				$("#wf_percentage").val(oldvalue);
 			} else {
-				var diff = newvalue - oldvalue;
-				var tw = 0;     // total weight
+				diff = newvalue - oldvalue;
+				tw = 0;     // total weight
 				for (i = 0; i < rowscount; i++) {
-					var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+					rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
 					if (rowdata.f_added < 4)
 						tw += Math.round(rowdata.f_amount * 1000) / 1000;
 				}
 				tw = Math.round(tw * 1000) / 1000;
 				if (to_100) {
 					// Adjust this row and the 100% row.
-					var damount = Math.round(tw * diff *10) / 1000;
-					var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow);
-					var namount = Math.round((rowdata.f_amount + damount) * 1000) / 1000;
+					damount = Math.round(tw * diff *10) / 1000;
+					rowdata = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow);
+					namount = Math.round((rowdata.f_amount + damount) * 1000) / 1000;
 					$("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_amount', namount);
 					$("#wf_amount").val(namount);
 					$("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_percentage', rowdata.f_percentage + diff);
 					for (i = 0; i < rowscount; i++) {
-						var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+						rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
 						if (rowdata.f_adjust_to_total_100) {
 							namount = rowdata.f_amount - damount;
 							$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', rowdata.f_percentage - diff);
@@ -4763,18 +4753,18 @@
 					calcMash();
 				} else {
 					// Adjust all the rows.
-					var nw = tw * diff / 100;
+					nw = tw * diff / 100;
 					for (i = 0; i < rowscount; i++) {
-						var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+						rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
 						if (rowdata.f_added < 4) {
 							if (i == fermentableRow) {
-								var namount = Math.round((rowdata.f_amount + nw) * 1000) / 1000;
+								namount = Math.round((rowdata.f_amount + nw) * 1000) / 1000;
 								$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_amount', namount);
 		//                                      	$("#wf_amount").val(namount); // Will crash the script.
 								$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', newvalue);
 							} else {
-								var namount = Math.round((rowdata.f_amount - (nw / (rowscount - 1))) * 1000) / 1000;
-								var newperc = Math.round((namount / tw) * 1000) / 10.0;
+								namount = Math.round((rowdata.f_amount - (nw / (rowscount - 1))) * 1000) / 1000;
+								newperc = Math.round((namount / tw) * 1000) / 10.0;
 								$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_amount', namount);
 								$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', newperc);
 							}
@@ -4795,8 +4785,8 @@
 		if (fermentableData.f_adjust_to_total_100 == 0) {
 			if (to_100) {
 				// Reset other flag first.
-				var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
-				for (var i = 0; i < rowscount; i++) {
+				var i, rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+				for (i = 0; i < rowscount; i++) {
 					if (i != fermentableRow) {
 						$("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_adjust_to_total_100', 0);
 					}
@@ -4899,9 +4889,8 @@
 	});
 	$("#HopReady").jqxButton({ template: "success", width: '90px', theme: theme });
 	$("#HopReady").click(function () {
-		var rowID = $("#hopGrid").jqxGrid('getrowid', hopRow);
-		console.log("HopReady row:"+hopRow+" ID:"+rowID);
-		var row = {
+		var row, rowID = $("#hopGrid").jqxGrid('getrowid', hopRow);
+		row = {
 			h_name: $("#wh_name").val(),
 			h_origin: hopData.h_origin,
 			h_amount: parseFloat($("#wh_amount").jqxNumberInput('decimal')) / 1000,
@@ -4946,9 +4935,8 @@
 	});
 	$("#wh_select").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = hoplist.records[index];
-			// console.log("select another hop:"+index+" "+datarecord.name);
+			var datarecord, index = event.args.index;
+			datarecord = hoplist.records[index];
 			$("#wh_name").val(datarecord.name);
 			hopData.h_name = datarecord.name;
 			hopData.h_origin = datarecord.origin;
@@ -4969,8 +4957,8 @@
 	$("#wh_amount").jqxNumberInput( Spin1dec );
 	$('#wh_amount').on('change', function (event) {
 		console.log("amount changed: "+event.args.value+" time:"+hopData.h_time+" alpha:"+hopData.h_alpha);
-		var amount = parseFloat(event.args.value) / 1000;
-		var ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg,
+		var ibu, amount = parseFloat(event.args.value) / 1000;
+		ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg,
 			parseFloat($("#batch_size").jqxNumberInput('decimal')),
 			amount, parseFloat(hopData.h_time),
 			parseFloat(hopData.h_alpha), $("#ibu_method").val()
@@ -4981,7 +4969,7 @@
 	$("#wh_ibu").jqxNumberInput( Show1dec );
 	$("#wh_time").jqxNumberInput( PosInt );
 	$("#wh_time").on('change', function (event) {
-		var newtime = parseFloat(event.args.value);
+		var ibu, newtime = parseFloat(event.args.value);
 		// Check limits and correct
 		if (hopData.h_useat == 2) {     // Boil
 			if (newtime > parseFloat($("#boil_time").jqxNumberInput('decimal'))) {
@@ -5002,7 +4990,7 @@
 			}
 			hopData.h_time = newtime * 1440;
 		}
-		var ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')),
+		ibu = toIBU(hopData.h_useat, hopData.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')),
 				parseFloat(hopData.h_amount), parseFloat(hopData.h_time), parseFloat(hopData.h_alpha), $("#ibu_method").val());
 		// console.log("time changed: "+newtime+" final:"+hopData.h_time+" ibu:"+ibu);
 		$("#wh_ibu").val(ibu);
@@ -5053,9 +5041,9 @@
 	});
 	$("#MiscReady").jqxButton({ template: "success", width: '90px', theme: theme });
 	$("#MiscReady").click(function () {
-		var rowID = $("#miscGrid").jqxGrid('getrowid', miscRow);
+		var row, rowID = $("#miscGrid").jqxGrid('getrowid', miscRow);
 		console.log("MiscReady row:"+miscRow+" ID:"+rowID);
-		var row = {
+		row = {
 			m_name: miscData.m_name,
 			m_amount: miscData.m_amount,
 			m_cost: miscData.m_cost,
@@ -5087,8 +5075,8 @@
 	});
 	$("#wm_select").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = misclist.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = misclist.records[index];
 			$("#wm_name").val(datarecord.name);
 			miscData.m_name = datarecord.name;
 			miscData.m_cost = datarecord.cost;
@@ -5105,7 +5093,6 @@
 	});
 	$("#wm_time").jqxNumberInput( PosInt );
 	$("#wm_time").on('change', function (event) {
-		console.log("time changed: "+event.args.value);
 		var newtime = parseFloat(event.args.value);
 
 		if (miscData.m_use_use == 2) {   // Boil
@@ -5167,9 +5154,9 @@
 	});
 	$("#YeastReady").jqxButton({ template: "success", width: '90px', theme: theme });
 	$("#YeastReady").click(function () {
-		var rowID = $("#yeastGrid").jqxGrid('getrowid', yeastRow);
+		var row, rowID = $("#yeastGrid").jqxGrid('getrowid', yeastRow);
 		console.log("YeastReady row:"+yeastRow+" ID:"+rowID);
-		var row = {
+		row = {
 			y_name: yeastData.y_name,
 			y_laboratory: yeastData.y_laboratory,
 			y_product_id: yeastData.y_product_id,
@@ -5215,8 +5202,8 @@
 	});
 	$("#wy_select").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = yeastlist.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = yeastlist.records[index];
 			$("#wy_name").val(datarecord.name);
 			$("#wy_laboratory").val(datarecord.laboratory);
 			$("#wy_product_id").val(datarecord.product_id);
@@ -5245,11 +5232,9 @@
 	});
 	$("#wy_amount").jqxNumberInput( Spin1dec );
 	$('#wy_amount').on('change', function (event) {
-		console.log("amount changed: "+event.args.value);
-		if (yeastData.y_form == 0)        // Liquid
-			var amount = parseFloat(event.args.value);
-		else
-			var amount = parseFloat(event.args.value) / 1000;
+		var amount = parseFloat(event.args.value);
+		if (yeastData.y_form != 0)        // not Liquid
+			amount = parseFloat(event.args.value) / 1000;
 		yeastData.y_amount = amount;
 		calcFermentables();
 		calcYeast();
@@ -5272,7 +5257,7 @@
 			calcYeast();
 		}
 	});
-	for (var i = 1; i < 5; i++) {
+	for (i = 1; i < 5; i++) {
 		$("#prop"+i+"_type").jqxDropDownList({
 			theme: theme,
 			source: StarterTypeAdapter,
@@ -5324,21 +5309,20 @@
 	});
 	$("#mash_select").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
+			var data, datarecord, rowIDs, rows, i, row = {}, index = event.args.index;
 			// First delete all current steps
-			var rowIDs = new Array();
-			var rows = $("#mashGrid").jqxGrid('getdisplayrows');
-			for (var i = 0; i < rows.length; i++) {
-				var row = rows[i];
+			rowIDs = new Array();
+			rows = $("#mashGrid").jqxGrid('getdisplayrows');
+			for (i = 0; i < rows.length; i++) {
+				row = rows[i];
 				rowIDs.push(row.uid);
 			}
 			$("#mashGrid").jqxGrid('deleterow', rowIDs);
 			// Then add the new steps
-			var datarecord = mashlist.records[index];
+			datarecord = mashlist.records[index];
 			$("#mash_name").val(datarecord.name);
 			for (i = 0; i < datarecord.steps.length; i++) {
-				var data = datarecord.steps[i];
-				var row = {};
+				data = datarecord.steps[i];
 				row["step_name"] = data.step_name;
 				row["step_type"] = data.step_type;
 				// For now, but this must be smarter.
@@ -5391,8 +5375,8 @@
 	});
 	$("#wstep_type").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow);
+			var rowdata, i, rows, row, index = event.args.index;
+			rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow);
 			rowdata.step_type = index;
 			if (index == 0) {
 				$("#wstep_infuse_amount").show();
@@ -5403,9 +5387,9 @@
 				$("#wstep_pmpt").hide();
 			}
 			mash_infuse = 0;
-			var rows = $('#mashGrid').jqxGrid('getrows');
-			for (var i = 0; i < rows.length; i++) {
-				var row = rows[i];
+			rows = $('#mashGrid').jqxGrid('getrows');
+			for (i = 0; i < rows.length; i++) {
+				row = rows[i];
 				if (row.step_type == 0) // Infusion
 					mash_infuse += parseFloat(row.step_infuse_amount);
 			}
@@ -5433,12 +5417,12 @@
 	});
 	$("#wstep_infuse_amount").jqxNumberInput( Spin1dec );
 	$('#wstep_infuse_amount').on('change', function (event) {
-		var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow);
+		var row, i, rows, rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow);
 		rowdata.step_infuse_amount = parseFloat(event.args.value);
 		mash_infuse = 0;
-		var rows = $('#mashGrid').jqxGrid('getrows');
-		for (var i = 0; i < rows.length; i++) {
-			var row = rows[i];
+		rows = $('#mashGrid').jqxGrid('getrows');
+		for (i = 0; i < rows.length; i++) {
+			row = rows[i];
 			if (row.step_type == 0) // Infusion
 				mash_infuse += parseFloat(row.step_infuse_amount);
 		}
@@ -5472,8 +5456,8 @@
 	});
 	$("#w1_name").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = waterlist.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = waterlist.records[index];
 			dataRecord.w1_name = datarecord.name;
 			$("#w1_calcium").val(datarecord.calcium);
 			dataRecord.w1_calcium = datarecord.calcium;
@@ -5515,8 +5499,8 @@
 	});
 	$("#w2_name").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = waterlist.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = waterlist.records[index];
 			dataRecord.w2_name = datarecord.name;
 			$("#w2_calcium").val(datarecord.calcium);
 			dataRecord.w2_calcium = datarecord.calcium;
@@ -5582,8 +5566,8 @@
 	});
 	$("#pr_name").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var datarecord = waterprofiles.records[index];
+			var datarecord, index = event.args.index;
+			datarecord = waterprofiles.records[index];
 			$("#pr_calcium").val(datarecord.calcium);
 			$("#pr_sulfate").val(datarecord.sulfate);
 			$("#pr_chloride").val(datarecord.chloride);
@@ -5774,8 +5758,7 @@
 	$("#BLog").jqxButton({ template: "info", width: '150px', theme: theme });
 	$("#BLog").click(function () {
 		// Open log in a new tab.
-		var url="log_brew.php?code=" + dataRecord.code + "&name=" + dataRecord.name;
-		window.open(url);
+		window.open("log_brew.php?code=" + dataRecord.code + "&name=" + dataRecord.name);
 	});
 
 	// Tab 10, Fermentation
@@ -5865,16 +5848,15 @@
 	});
 	$("#bottle_priming_sugar").on('select', function (event) {
 		if (event.args) {
-			var index = event.args.index;
-			var editrow = -1;
-			var datarecord = fermentablesugars.records[index];
-			var rows = $('#fermentableGrid').jqxGrid('getrows');
-			for (var i = 0; i < rows.length; i++) {
+			var rowID, index, editrow = -1, datarecord, rows, i, row = {};
+			index = event.args.index;
+			datarecord = fermentablesugars.records[index];
+			rows = $('#fermentableGrid').jqxGrid('getrows');
+			for (i = 0; i < rows.length; i++) {
 				if (rows[i].f_added == 4) {
 					editrow = i;
 				}
 			}
-			var row = {};
 			row["f_name"] = datarecord.name;
                         row["f_origin"] = datarecord.origin;
                         row["f_supplier"] = datarecord.supplier;
@@ -5899,7 +5881,7 @@
                         row["f_acid_to_ph_57"] = datarecord.acid_to_ph_57;
                         row["f_inventory"] = datarecord.inventory;
 			if (editrow >= 0) {
-				var rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow);
+				rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow);
 				$('#fermentableGrid').jqxGrid('updaterow', rowID, row);
 			} else {
                         	$("#fermentableGrid").jqxGrid('addrow', null, row);
@@ -5919,16 +5901,15 @@
 	});
 	$("#keg_priming_sugar").on('select', function (event) {
                 if (event.args) {
-                        var index = event.args.index;
-                        var editrow = -1;
-                        var datarecord = fermentablesugars.records[index];
-                        var rows = $('#fermentableGrid').jqxGrid('getrows');
-                        for (var i = 0; i < rows.length; i++) {
+			var rowID, index, editrow = -1, datarecord, rows, i, row = {};
+                        index = event.args.index;
+                        datarecord = fermentablesugars.records[index];
+                        rows = $('#fermentableGrid').jqxGrid('getrows');
+                        for (i = 0; i < rows.length; i++) {
                                 if (rows[i].f_added == 5) {
                                         editrow = i;
                                 }
                         }
-                        var row = {}; 
                         row["f_name"] = datarecord.name;
                         row["f_origin"] = datarecord.origin;
                         row["f_supplier"] = datarecord.supplier;
@@ -5953,7 +5934,7 @@
                         row["f_acid_to_ph_57"] = datarecord.acid_to_ph_57;
                         row["f_inventory"] = datarecord.inventory;
                         if (editrow >= 0) {
-                                var rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow);
+                                rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow);
                                 $('#fermentableGrid').jqxGrid('updaterow', rowID, row);
                         } else {
                                 $("#fermentableGrid").jqxGrid('addrow', null, row);

mercurial