# HG changeset patch # User Michiel Broek # Date 1568296209 -7200 # Node ID 0a270fee6aa06becf05f4928c333d01f8418f05f # Parent 7952f9331fd1e0908a6bb0dd172234e50fded747 Code cleanup using gjslint diff -r 7952f9331fd1 -r 0a270fee6aa0 www/js/prod_edit-min.js --- a/www/js/prod_edit-min.js Wed Sep 11 15:58:32 2019 +0200 +++ b/www/js/prod_edit-min.js Thu Sep 12 15:50:09 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 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=$("
");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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&&a61){if(l){for(a7=0;a7"+a9.f_supplier+" / "+a9.f_name+" ("+a9.f_color+" EBC)"}},{text:"Type",width:100,datafield:"f_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return""+FermentableTypeData[a8].nl+""}},{text:"Moment",width:110,datafield:"f_added",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return""+AddedData[a8].nl+""}},{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'+a3.formatNumber(a7,"f3")+""}else{return""}}},{text:"Procent",datafield:"f_percentage",width:90,align:"right",cellsrenderer:function(a8,a6,a7,a4,ba,a9){if(a9.f_added>=4){return""}var a5="#ffffff";if(a7>a9.f_max_in_batch){a5="#ff4040"}return''+a3.formatNumber(a7,"p1")+""}},{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""}return''}},{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=$("
");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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+"% α)"}});$("#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"+a9.h_origin+" / "+a9.h_name+""},},{text:"Type",width:90,datafield:"h_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+HopTypeData[a8].nl+""}},{text:"Vorm",width:90,datafield:"h_form",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+HopFormData[a8].nl+""}},{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''+HopUseData[a8].nl+""}},{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''+a9+""}},{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''+ag.formatNumber(a9,"f1")+""}},{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''+a6+""}},{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'+a7+""}else{return""}}},{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");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#maddrowbutton").jqxDropDownList({placeHolder:"Kies ingredië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"+MiscTypeData[a8].nl+""}},{text:"Gebruik",width:140,datafield:"m_use_use",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return""+MiscUseData[a8].nl+""}},{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''+a9+""},},{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''+ag.formatNumber(a9*1000,"f2")+" "+a8+""}},{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'+a7+""}else{return""}}},{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=$("
");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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'+YeastFormData[a8].nl+""}},{text:"Min. °C",width:70,align:"right",cellsalign:"right",datafield:"y_min_temperature"},{text:"Max. °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''+a7+""}},{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''+YeastUseData[a8].nl+""}},{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''+a6+""}},{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'+a7+""}else{return""}}},{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");a5.append(a4);a4.append('');a4.append('');$("#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'+MashStepTypeData[a8].nl+""}},{text:"Start °C",datafield:"step_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Eind °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});function G(){if(d.inventory_reduced>6){$("#ok_pmpt").hide();return}if(p&&aa&&ah&&O&&c){$("#ok_supplies").html("")}else{$("#ok_supplies").html("")}}function aV(){console.log("calcPercentages()");var a2=0,a4,i,a3=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a3>1){for(ad=0;ad5){bo-=5}ba=Round(ba/bo,2)}if(!(bd=$("#fermentableGrid").jqxGrid("getrows"))){return}for(bp=0;bp0){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_inventory0){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;bpaC){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_inventory0)&&(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.fg1){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;a4100){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;a21.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("")}else{$("#r"+a2+"_irate").html("")}if(parseFloat($("#prop"+a2+"_growf").val())<1){$("#r"+a2+"_growf").html("")}if(($("#prop"+a2+"_type").val()>0)&&(parseFloat($("#prop"+a2+"_growf").val())>3)){$("#r"+a2+"_growf").html("")}if(parseFloat($("#prop"+a2+"_tcells").val())>a7){$("#r"+a2+"_tcells").html("")}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;a30.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;a50){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;a60){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"+i+"")}else{$("#wr_"+a2).html("")}}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;a50.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("Zeer moutig en zoet")}else{if(Q()<0.43){$("#wr_bu").html("Moutig, zoet")}else{if(Q()<0.52){$("#wr_bu").html("Evenwichtig")}else{if(Q()<0.63){$("#wr_bu").html("Licht hoppig, bitter")}else{$("#wr_bu").html("Extra hoppig, zeer bitter")}}}}$("#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(bmbs){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_sg0.99)&&(d.secondary_end_sg0.99)&&(d.fg1.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")}})}ag.dataBind();$("#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;adparseFloat($("#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ë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;a40){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=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=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 +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")}});var 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=$("
");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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&&a61){if(l){for(a7=0;a7'+a9.f_supplier+" / "+a9.f_name+" ("+a9.f_color+" EBC)"}},{text:"Type",width:100,datafield:"f_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+FermentableTypeData[a8].nl+""}},{text:"Moment",width:110,datafield:"f_added",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+AddedData[a8].nl+""}},{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'+a3.formatNumber(a7,"f3")+""}else{return""}}},{text:"Procent",datafield:"f_percentage",width:90,align:"right",cellsrenderer:function(a8,a6,a7,a4,ba,a9){if(a9.f_added>=4){return""}var a5="#ffffff";if(a7>a9.f_max_in_batch){a5="#ff4040"}return''+a3.formatNumber(a7,"p1")+""}},{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""}return''}},{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=$("
");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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+"% α)"}});$("#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'+a9.h_origin+" / "+a9.h_name+""},},{text:"Type",width:90,datafield:"h_type",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+HopTypeData[a8].nl+""}},{text:"Vorm",width:90,datafield:"h_form",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+HopFormData[a8].nl+""}},{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''+HopUseData[a8].nl+""}},{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''+a9+""}},{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''+ag.formatNumber(a9,"f1")+""}},{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''+a6+""}},{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'+a7+""}else{return""}}},{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");a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#maddrowbutton").jqxDropDownList({placeHolder:"Kies ingredië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'+MiscTypeData[a8].nl+""}},{text:"Gebruik",width:140,datafield:"m_use_use",cellsrenderer:function(a5,a4,a8,a7,a6,a9){return''+MiscUseData[a8].nl+""}},{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''+a9+""}},{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''+ag.formatNumber(a9*1000,"f2")+" "+a8+""}},{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'+a7+""}else{return""}}},{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=$('
');a5.append(a4);a4.append('
');a4.append('
In voorraad:
');a4.append('
');a4.append('');$("#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'+YeastFormData[a8].nl+""}},{text:"Min. °C",width:70,align:"right",cellsalign:"right",datafield:"y_min_temperature"},{text:"Max. °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''+a7+""}},{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''+YeastUseData[a8].nl+""}},{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''+a6+""}},{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'+a7+""}else{return""}}},{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){console.log("mash addrow "+a5);a6(true)},deleterow:function(a4,a5){console.log("mash deleterow "+a4);a5(true)}},i=new $.jqx.dataAdapter(a2,{beforeLoadComplete:function(a4){C=0;var a5,a7,a6=new Array();for(a5=0;a5');a5.append(a4);a4.append('');a4.append('');$("#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'+MashStepTypeData[a8].nl+""}},{text:"Start °C",datafield:"step_temp",width:90,align:"right",cellsalign:"right",cellsformat:"f1"},{text:"Eind °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});function G(){if(d.inventory_reduced>6){$("#ok_pmpt").hide();return}if(p&&aa&&ah&&O&&c){$("#ok_supplies").html("")}else{$("#ok_supplies").html("")}}function aV(){console.log("calcPercentages()");var a2=0,a4,i,a3=$("#fermentableGrid").jqxGrid("getdatainformation").rowscount;if(a3>1){for(ad=0;ad5){bo-=5}ba=Round(ba/bo,2)}if(!(bd=$("#fermentableGrid").jqxGrid("getrows"))){return}for(bp=0;bp0){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_inventory0){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;bpaC){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_inventory0)&&(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.fg1){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;a4100){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(a3,a8,a2){var i=2.72715,a9=a2/a3*1000,a4=Round(a9,1),a5=(d.starter_sg-1)*a3*i,a6=N(a8,a2,a5),a7=Round(a5*a6,1),ba=parseFloat(a7)+a2;console.log("svol:"+a3+" start:"+a2+" irate:"+a4+" egrams:"+a5+" grate:"+a6+" ncells:"+a7);return{svol:a3,irate:a4,prate:Round(a9,1),ncells:a7,totcells:ba,growf:Round(a7/a2,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;a21.06){x=1}if(a8.y_type==0){x*=2}}}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("")}else{$("#r"+a2+"_irate").html("")}if(parseFloat($("#prop"+a2+"_growf").val())<1){$("#r"+a2+"_growf").html("")}if(($("#prop"+a2+"_type").val()>0)&&(parseFloat($("#prop"+a2+"_growf").val())>3)){$("#r"+a2+"_growf").html("")}if(parseFloat($("#prop"+a2+"_tcells").val())>a7){$("#r"+a2+"_tcells").html("")}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;a30.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;a50){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;a60){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"+i+"")}else{$("#wr_"+a2).html("")}}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;a50.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("Zeer moutig en zoet")}else{if(Q()<0.43){$("#wr_bu").html("Moutig, zoet")}else{if(Q()<0.52){$("#wr_bu").html("Evenwichtig")}else{if(Q()<0.63){$("#wr_bu").html("Licht hoppig, bitter")}else{$("#wr_bu").html("Extra hoppig, zeer bitter")}}}}$("#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(bmbs){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_sg0.99)&&(d.secondary_end_sg0.99)&&(d.fg1.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(i){if(i.args){d.starter_type=i.args.index;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(i){if(i.args){d.prop1_type=i.args.index;X()}});$("#prop1_volume").on("change",function(i){if(i.args){d.prop1_volume=i.args.value;X()}});$("#prop2_type").on("change",function(i){if(i.args){d.prop2_type=i.args.index;X()}});$("#prop2_volume").on("change",function(i){if(i.args){d.prop2_volume=i.args.value;X()}});$("#prop3_type").on("change",function(i){if(i.args){d.prop3_type=i.args.index;X()}});$("#prop3_volume").on("change",function(i){if(i.args){d.prop3_volume=i.args.value;X()}});$("#prop4_type").on("change",function(i){if(i.args){d.prop4_type=i.args.index;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(i){if(i.args){d.sparge_source=i.args.index;j()}});$("#sparge_acid_type").on("change",function(i){if(i.args){d.sparge_acid_type=i.args.index;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")}})}ag.dataBind();$("#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;adparseFloat($("#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ë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;a40){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=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=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();window.location.href="prod_export.php?record="+my_record+"&return="+my_return+"&select="+my_select+"&code="+d.code+"&name="+d.name});$("#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 diff -r 7952f9331fd1 -r 0a270fee6aa0 www/js/prod_edit.js --- a/www/js/prod_edit.js Wed Sep 11 15:58:32 2019 +0200 +++ b/www/js/prod_edit.js Thu Sep 12 15:50:09 2019 +0200 @@ -21,6018 +21,6030 @@ *****************************************************************************/ -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'); +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 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 - source = { - datatype: "json", - cache: false, - datafields: [ - // From prod_main - { 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: url + '?record=' + my_record - }, - // Load data and select one record. - dataAdapter = new $.jqx.dataAdapter(source, { - loadComplete: function () { - var records = dataAdapter.records; - dataRecord = records[0]; - // Hidden record uuid - $("#name").val(dataRecord.name); - $("#code").val(dataRecord.code); - $("#birth").val(dataRecord.birth); - $("#stage").val(StageData[dataRecord.stage].nl); - $("#notes").val(dataRecord.notes); - $("#locked").val(dataRecord.locked); - $("#eq_name").val(dataRecord.eq_name); - $("#eq_notes").val(dataRecord.eq_notes); - $("#eq_boil_size").val(dataRecord.eq_boil_size); - $("#eq_batch_size").val(dataRecord.eq_batch_size); - $("#eq_tun_volume").val(dataRecord.eq_tun_volume); - $("#eq_top_up_water").val(dataRecord.eq_top_up_water); - $("#eq_trub_chiller_loss").val(dataRecord.eq_trub_chiller_loss); - $("#eq_evap_rate").val(dataRecord.eq_evap_rate); - $("#eq_boil_time").val(dataRecord.eq_boil_time); - $("#eq_top_up_kettle").val(dataRecord.eq_top_up_kettle); - $("#eq_hop_utilization").val(dataRecord.eq_hop_utilization); - $("#eq_lauter_volume").val(dataRecord.eq_lauter_volume); - $("#eq_lauter_deadspace").val(dataRecord.eq_lauter_deadspace); - $("#eq_kettle_volume").val(dataRecord.eq_kettle_volume); - $("#eq_mash_volume").val(dataRecord.eq_mash_volume); - $("#eq_mash_max").val(dataRecord.eq_mash_max); - $("#eq_efficiency").val(dataRecord.eq_efficiency); - // Brewdate - $("#brew_date_start").val(dataRecord.brew_date_start); - $("#brew_mash_ph").val(dataRecord.brew_mash_ph); - $("#brew_mash_sg").val(dataRecord.brew_mash_sg); - $("#brew_mash_efficiency").val(dataRecord.brew_mash_efficiency); - // Header Spoelen en filteren - $("#brew_sparge_temperature").val(dataRecord.sparge_temp); - $("#brew_sparge_volume").val(dataRecord.sparge_volume); - $("#brew_sparge_est").val(dataRecord.brew_sparge_est); - $("#brew_sparge_ph").val(dataRecord.brew_sparge_ph); - // Header Beluchten - $("#brew_aeration_type").val(dataRecord.brew_aeration_type); - $("#brew_aeration_time").val(dataRecord.brew_aeration_time); - $("#brew_aeration_speed").val(dataRecord.brew_aeration_speed); - - $("#brew_preboil_ph").val(dataRecord.brew_preboil_ph); - $("#brew_preboil_sg").val(dataRecord.brew_preboil_sg); - $("#brew_preboil_volume").val(dataRecord.brew_preboil_volume); - $("#brew_preboil_efficiency").val(dataRecord.brew_preboil_efficiency); - // Header Koelen en whirlpoolen - $("#brew_whirlpool9").val(dataRecord.brew_whirlpool9); - $("#brew_whirlpool7").val(dataRecord.brew_whirlpool7); - $("#brew_whirlpool6").val(dataRecord.brew_whirlpool6); - $("#brew_whirlpool2").val(dataRecord.brew_whirlpool2); - // Header Naar gistvat - $("#brew_fermenter_volume").val(dataRecord.brew_fermenter_volume); - $("#brew_fermenter_sg").val(dataRecord.brew_fermenter_sg); - $("#brew_fermenter_sg2").val(dataRecord.brew_fermenter_sg); - $("#brew_fermenter_ibu").val(dataRecord.brew_fermenter_ibu); - $("#brew_fermenter_color").val(dataRecord.brew_fermenter_color); - $("#brew_fermenter_extrawater").val(dataRecord.brew_fermenter_extrawater); - $("#brew_fermenter_tcloss").val(dataRecord.brew_fermenter_tcloss); - - $("#brew_aboil_ph").val(dataRecord.brew_aboil_ph); - $("#brew_aboil_sg").val(dataRecord.brew_aboil_sg); - $("#brew_aboil_volume").val(dataRecord.brew_aboil_volume); - $("#brew_aboil_efficiency").val(dataRecord.brew_aboil_efficiency); - // Header Koelen en whirlpoolen - $("#brew_cooling_to").val(dataRecord.brew_cooling_to); - $("#brew_cooling_method").val(dataRecord.brew_cooling_method); - $("#brew_cooling_time").val(dataRecord.brew_cooling_time); - // Niks - $("#brew_date_end").val(dataRecord.brew_date_end); - $("#og").val(dataRecord.og); - $("#fg").val(dataRecord.fg); - $("#primary_start_temp").val(dataRecord.primary_start_temp); - $("#primary_max_temp").val(dataRecord.primary_max_temp); - $("#primary_end_temp").val(dataRecord.primary_end_temp); - $("#primary_end_sg").val(dataRecord.primary_end_sg); - $("#primary_end_date").val(dataRecord.primary_end_date); - $("#secondary_temp").val(dataRecord.secondary_temp); - $("#secondary_end_sg").val(dataRecord.secondary_end_sg); - $("#secondary_end_date").val(dataRecord.secondary_end_date); - $("#tertiary_temp").val(dataRecord.tertiary_temp); - $("#package_date").val(dataRecord.package_date); - $("#package_volume").val(dataRecord.package_volume); - $("#package_infuse_amount").val(dataRecord.package_infuse_amount); - $("#package_infuse_abv").val(dataRecord.package_infuse_abv); - $("#package_infuse_notes").val(dataRecord.package_infuse_notes); - $("#package_abv").val(dataRecord.package_abv); - $("#package_ph").val(dataRecord.package_ph); - $("#bottle_amount").val(dataRecord.bottle_amount); - $("#bottle_carbonation").val(dataRecord.bottle_carbonation); - $("#bottle_priming_water").val(dataRecord.bottle_priming_water); - $("#bottle_priming_amount").val(dataRecord.bottle_priming_amount); - $("#bottle_carbonation_temp").val(dataRecord.bottle_carbonation_temp); - $("#keg_amount").val(dataRecord.keg_amount); - $("#keg_carbonation").val(dataRecord.keg_carbonation); - $("#keg_priming_water").val(dataRecord.keg_priming_water); - $("#keg_priming_amount").val(dataRecord.keg_priming_amount); - $("#keg_carbonation_temp").val(dataRecord.keg_carbonation_temp); - $("#keg_forced_carb").val(dataRecord.keg_forced_carb); - $("#keg_pressure").val(dataRecord.keg_pressure); - $("#taste_notes").val(dataRecord.taste_notes); - $("#taste_rate").val(dataRecord.taste_rate); - $("#taste_date").val(dataRecord.taste_date); - $("#taste_color").val(dataRecord.taste_color); - $("#taste_transparency").val(dataRecord.taste_transparency); - $("#taste_head").val(dataRecord.taste_head); - $("#taste_aroma").val(dataRecord.taste_aroma); - $("#taste_taste").val(dataRecord.taste_taste); - $("#taste_mouthfeel").val(dataRecord.taste_mouthfeel); - $("#taste_aftertaste").val(dataRecord.taste_aftertaste); - - // Recipe - $("#st_name").val(dataRecord.st_name); - $("#st_letter").val(dataRecord.st_letter); - $("#st_guide").val(dataRecord.st_guide); - $("#st_category").val(dataRecord.st_category); - $("#st_category_number").val(dataRecord.st_category_number); - $("#st_type").val(StyleTypeData[dataRecord.st_type].nl); - $("#st_og_min").val(dataRecord.st_og_min); - $("#st_og_max").val(dataRecord.st_og_max); - $("#st_fg_min").val(dataRecord.st_fg_min); - $("#st_fg_max").val(dataRecord.st_fg_max); - $("#st_abv_min").val(dataRecord.st_abv_min); - $("#st_abv_max").val(dataRecord.st_abv_max); - $("#st_color_min").val(dataRecord.st_color_min); - $("#st_color_max").val(dataRecord.st_color_max); - $("#st_ibu_min").val(dataRecord.st_ibu_min); - $("#st_ibu_max").val(dataRecord.st_ibu_max); - $("#st_carb_min").val(dataRecord.st_carb_min); - $("#st_carb_min2").val(dataRecord.st_carb_min); - $("#st_carb_max").val(dataRecord.st_carb_max); - $("#st_carb_max2").val(dataRecord.st_carb_max); - $("#type").val(dataRecord.type); - $("#batch_size").val(dataRecord.batch_size); - $("#est_a_vol").val(dataRecord.batch_size * 1.04); - $("#boil_size").val(dataRecord.boil_size); - $("#est_pre_vol").val(dataRecord.boil_size * 1.04); - $("#boil_time").val(dataRecord.boil_time); - $("#efficiency").val(dataRecord.efficiency); - $("#est_og").val(dataRecord.est_og); - $("#est_og2").val(dataRecord.est_og); - $("#est_og3").val(0); - $("#est_fg").val(dataRecord.est_fg); - $("#est_fg2").val(dataRecord.est_fg); - $("#est_fg3").val(dataRecord.est_fg); - $("#est_color").val(dataRecord.est_color); - $("#est_color2").val(dataRecord.est_color); - $("#est_abv").val(dataRecord.est_abv); - $("#color_method").val(dataRecord.color_method); - $("#est_ibu").val(dataRecord.est_ibu); - $("#est_ibu2").val(dataRecord.est_ibu); - $("#ibu_method").val(dataRecord.ibu_method); - $("#est_carb").val(dataRecord.est_carb); - $("#mash_name").val(dataRecord.mash_name); - $("#mash_ph").val(dataRecord.mash_ph); - $("#sparge_temp").val(dataRecord.sparge_temp); - $("#sparge_ph").val(dataRecord.sparge_ph); - $("#sparge_volume").val(dataRecord.sparge_volume); - $("#sparge_source").val(dataRecord.sparge_source); - $("#sparge_acid_type").val(dataRecord.sparge_acid_type); - $("#sparge_acid_perc").val(dataRecord.sparge_acid_perc); - $("#sparge_acid_amount").val(dataRecord.sparge_acid_amount * 1000); - $("#calc_acid").val(dataRecord.calc_acid); - $("#w1_name").val(dataRecord.w1_name); - $("#w1_amount").val(dataRecord.w1_amount); - $("#w1_calcium").val(dataRecord.w1_calcium); - $("#w1_sulfate").val(dataRecord.w1_sulfate); - $("#w1_chloride").val(dataRecord.w1_chloride); - $("#w1_sodium").val(dataRecord.w1_sodium); - $("#w1_magnesium").val(dataRecord.w1_magnesium); - $("#w1_total_alkalinity").val(dataRecord.w1_total_alkalinity); - $("#w1_ph").val(dataRecord.w1_ph); - $("#w1_cost").val(dataRecord.w1_cost); - $("#w2_name").val(dataRecord.w2_name); - $("#w2_amount").val(dataRecord.w2_amount); - $("#w2_calcium").val(dataRecord.w2_calcium); - $("#w2_sulfate").val(dataRecord.w2_sulfate); - $("#w2_chloride").val(dataRecord.w2_chloride); - $("#w2_sodium").val(dataRecord.w2_sodium); - $("#w2_magnesium").val(dataRecord.w2_magnesium); - $("#w2_total_alkalinity").val(dataRecord.w2_total_alkalinity); - $("#w2_ph").val(dataRecord.w2_ph); - $("#w2_cost").val(dataRecord.w2_cost); - $("#wg_amount").val(dataRecord.wg_amount); - $("#wg_calcium").val(dataRecord.wg_calcium); - $("#wg_sulfate").val(dataRecord.wg_sulfate); - $("#wg_chloride").val(dataRecord.wg_chloride); - $("#wg_sodium").val(dataRecord.wg_sodium); - $("#wg_magnesium").val(dataRecord.wg_magnesium); - $("#wg_total_alkalinity").val(dataRecord.wg_total_alkalinity); - $("#wg_ph").val(dataRecord.wg_ph); - $("#wb_calcium").val(dataRecord.wb_calcium); - $("#wb_sulfate").val(dataRecord.wb_sulfate); - $("#wb_chloride").val(dataRecord.wb_chloride); - $("#wb_sodium").val(dataRecord.wb_sodium); - $("#wb_magnesium").val(dataRecord.wb_magnesium); - $("#wb_total_alkalinity").val(dataRecord.wb_total_alkalinity); - $("#wb_ph").val(dataRecord.wb_ph); - $("#wa_acid_name").val(dataRecord.wa_acid_name); - $("#wa_acid_perc").val(dataRecord.wa_acid_perc); - $("#wa_base_name").val(dataRecord.wa_base_name); - $("#starter_enable").val(dataRecord.starter_enable); - $("#starter_type").val(dataRecord.starter_type); - $("#starter_sg").val(dataRecord.starter_sg); - $("#starter_viability").val(dataRecord.starter_viability); - $("#prop1_type").val(dataRecord.prop1_type); - $("#prop1_volume").val(dataRecord.prop1_volume); - $("#prop2_type").val(dataRecord.prop2_type); - $("#prop2_volume").val(dataRecord.prop2_volume); - $("#prop3_type").val(dataRecord.prop3_type); - $("#prop3_volume").val(dataRecord.prop3_volume); - $("#prop4_type").val(dataRecord.prop4_type); - $("#prop4_volume").val(dataRecord.prop4_volume); - editFermentable(dataRecord); - editHop(dataRecord); - editMisc(dataRecord); - editYeast(dataRecord); - editMash(dataRecord); - calcStage(); - $('#jqxTabs').jqxTabs('select', 2); - }, - loadError: function (jqXHR, status, error) { - }, - beforeLoadComplete: function (records) { - $('#jqxLoader').jqxLoader('open'); - } - }), - - // Inline fermentables editor - editFermentable = function (data) { - var fermentableSource = { - localdata: data.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 (rowid, rowdata, position, commit) { - //console.log("fermentable addrow "+rowid); - commit(true); - }, - deleterow: function (rowid, commit) { - //console.log("fermentable deleterow "+rowid); - commit(true); - }, - updaterow: function (rowid, rowdata, commit) { - //console.log("fermentable updaterow "+rowid); - commit(true); - } - }, - fermentableAdapter = new $.jqx.dataAdapter(fermentableSource); - - $("#fermentableGrid").jqxGrid({ - width: 1240, - height: 470, - source: fermentableAdapter, - theme: theme, - selectionmode: 'singlerow', - showtoolbar: true, - rendertoolbar: function (toolbar) { - var container = $("
"); - toolbar.append(container); - container.append('
'); - container.append('
In voorraad:
'); - container.append('
'); - container.append(''); - // add fermentable from dropdownlist. - $("#faddrowbutton").jqxDropDownList({ - placeHolder: "Kies mout:", - theme: theme, - template: "primary", - source: fermentablelist, - displayMember: "name", - disabled: (dataRecord.stage > 3), - width: 150, - height: 27, - dropDownWidth: 500, - dropDownHeight: 500, - renderer: function (index, label, value) { - var datarecord = fermentablelist.records[index]; - return datarecord.supplier+ " / " + datarecord.name + " (" + datarecord.color + " EBC)"; - } - }); - $("#faddrowbutton").on('select', function (event) { - if (event.args) { - 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; - row["f_amount"] = 0; - row["f_cost"] = datarecord.cost; - row["f_type"] = datarecord.type; - row["f_yield"] = datarecord.yield; - row["f_color"] = datarecord.color; - row["f_coarse_fine_diff"] = datarecord.coarse_fine_diff; - row["f_moisture"] = datarecord.moisture; - row["f_diastatic_power"] = datarecord.diastatic_power; - row["f_protein"] = datarecord.protein; - row["f_max_in_batch"] = datarecord.max_in_batch; - row["f_graintype"] = datarecord.graintype; - if (datarecord.add_after_boil) { - row["f_added"] = 2; // Fermentation - } else if ((datarecord.type == 1) || (datarecord.type == 4)) { // Sugar or Adjunct - row["f_added"] = 1; // Boil - } else { - row["f_added"] = 0; // Mash - } - row["f_dissolved_protein"] = datarecord.dissolved_protein; - row["f_recommend_mash"] = datarecord.recommend_mash; - row["f_add_after_boil"] = datarecord.add_after_boil; - if (rowscount == 0) { - // The first fermentable - row["f_adjust_to_total_100"] = 1; - row["f_percentage"] = 100; - } else { - row["f_adjust_to_total_100"] = 0; - row["f_percentage"] = 0; - } - row["f_di_ph"] = datarecord.di_ph; - row["f_acid_to_ph_57"] = datarecord.acid_to_ph_57; - row["f_inventory"] = datarecord.inventory; - $("#fermentableGrid").jqxGrid('addrow', null, row); - } - }); - - $("#finstockbutton").jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); - $("#finstockbutton").on('change', function (event) { - fermentableinstock = event.args.checked; - fermentablelist.dataBind(); - }); - - // delete selected fermentable. - $("#fdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#fdeleterowbutton").on('click', function () { - var rowscount, id, percent, amount, i, rowdata, - selectedrowindex = $("#fermentableGrid").jqxGrid('getselectedrowindex'); - rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount; - if (selectedrowindex >= 0 && selectedrowindex < rowscount) { - 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 (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; - } - } - } else { - calcPercentages(); - } - } else { - $("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100); - } - calcFermentables(); - calcIBUs(); - }); - }, - ready: function() { - calcFermentables(); - $('#jqxTabs').jqxTabs('next'); - }, - columns: [ - { text: 'Vergistbaar ingrediënt', datafield: 'f_name', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" + - rowdata.f_supplier+" / "+rowdata.f_name+" ("+rowdata.f_color+" EBC)"; - } - }, - { text: 'Type', width: 100, datafield: 'f_type', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" + FermentableTypeData[value].nl + ""; - } - }, - { text: 'Moment', width: 110, datafield: 'f_added', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" + AddedData[value].nl + ""; - } - }, - { 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 (row, columnfield, value, defaulthtml, columnproperties, rowdata) { - var color = '#ffffff'; - if (((dataRecord.inventory_reduced <= 2) && (rowdata.f_added <= 1)) || // Mash or boil - ((dataRecord.inventory_reduced <= 3) && (rowdata.f_added == 2)) || // Primary - ((dataRecord.inventory_reduced <= 5) && (rowdata.f_added == 3)) || // Secondary or Tertiary - ((dataRecord.inventory_reduced <= 6) && (rowdata.f_added == 4)) || // Bottle - ((dataRecord.inventory_reduced <= 6) && (rowdata.f_added == 5))) { // Kegs - if (value < rowdata.f_amount) - color = '#ff4040'; - return '' +fermentableAdapter.formatNumber(value, "f3") + ''; - } else { - return ''; - } - } - }, - { text: 'Procent', datafield: 'f_percentage', width: 90, align: 'right', - cellsrenderer: function (row, columnfield, value, defaulthtml, columnproperties, rowdata) { - if (rowdata.f_added >= 4) - return ''; - var color = '#ffffff'; - if (value > rowdata.f_max_in_batch) - color = '#ff4040'; - return '' +fermentableAdapter.formatNumber(value, "p1") + ''; - } - }, - { text: '100%', datafield: 'f_adjust_to_total_100', width: 70, align: 'center', cellsalign: 'center', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - if (value == 0) - return ''; - return ''; - } - }, - { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function () { - return "Wijzig"; - }, buttonclick: function (row) { - fermentableRow = row; - fermentableData = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow); - if (fermentableData.f_added >= 4) { - alert("Wijzig dit in de Verpakken tab"); - } else if (dataRecord.stage > 3) { - alert("Ingredieënt is al verwerkt."); - } else { - $("#wf_name").val(fermentableData.f_name); - $("#wf_amount").val(fermentableData.f_amount); - $("#wf_percentage").val(fermentableData.f_percentage); - $("#wf_max_in_batch").val(fermentableData.f_max_in_batch); - $("#wf_adjust_to_total_100").val(fermentableData.f_adjust_to_total_100); - $("#wf_added").val(fermentableData.f_added); - // show the popup window. - $("#popupFermentable").jqxWindow('open'); - } - } - } - ] - }); - }, - - // Inline hops editor - editHop = function (data) { - var hopSource = { - localdata: data.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 (rowid, rowdata, position, commit) { - console.log("hop addrow "+rowid); - commit(true); - }, - deleterow: function (rowid, commit) { - console.log("hop deleterow "+rowid); - commit(true); - }, - updaterow: function (rowid, rowdata, commit) { - console.log("hop updaterow "+rowid); - commit(true); - } - }, - hopAdapter = new $.jqx.dataAdapter(hopSource); - - $("#hopGrid").jqxGrid({ - width: 1240, - height: 560, - source: hopAdapter, - theme: theme, - selectionmode: 'singlerow', - showtoolbar: true, - rendertoolbar: function (toolbar) { - var container = $("
"); - toolbar.append(container); - container.append('
'); - container.append('
In voorraad:
'); - container.append('
'); - container.append(''); - // add hop from dropdownlist. - $("#haddrowbutton").jqxDropDownList({ - placeHolder: "Kies hop:", - theme: theme, - template: "primary", - source: hoplist, - disabled: (dataRecord.stage > 3), - displayMember: "name", - width: 150, - height: 27, - dropDownWidth: 500, - dropDownHeight: 500, - renderer: function (index, label, value) { - var datarecord = hoplist.records[index]; - return datarecord.origin+ " - " + datarecord.name + " / " + HopFormData[datarecord.form].nl + - " (" + datarecord.alpha + "% α)"; - } - }); - $("#haddrowbutton").on('select', function (event) { - if (event.args) { - 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; - row["h_cost"] = datarecord.cost; - row["h_type"] = datarecord.type; - row["h_form"] = datarecord.form; - row["h_useat"] = 2; // Boil - row["h_time"] = 0; - row["h_alpha"] = datarecord.alpha; - row["h_beta"] = datarecord.beta; - row["h_hsi"] = datarecord.hsi; - row["h_humulene"] = datarecord.humulene; - row["h_caryophyllene"] = datarecord.caryophyllene; - row["h_cohumulone"] = datarecord.cohumulone; - row["h_myrcene"] = datarecord.myrcene; - row["h_total_oil"] = datarecord.total_oil; - row["h_inventory"] = datarecord.inventory; - $("#hopGrid").jqxGrid('addrow', null, row); - } - $("#haddrowbutton").jqxDropDownList('clearSelection'); - }); - - $("#hinstockbutton").jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); - $("#hinstockbutton").on('change', function (event) { - hopinstock = event.args.checked; - hoplist.dataBind(); - }); - - // delete selected hop. - $("#hdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#hdeleterowbutton").on('click', function () { - var rowscount, id, selectedrowindex = $("#hopGrid").jqxGrid('getselectedrowindex'); - rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount; - if (selectedrowindex >= 0 && selectedrowindex < rowscount) { - id = $("#hopGrid").jqxGrid('getrowid', selectedrowindex); - $("#hopGrid").jqxGrid('deleterow', id); - } - calcIBUs(); - }); - }, - ready: function() { - calcIBUs(); - $('#jqxTabs').jqxTabs('next'); - }, - columns: [ - { text: 'Hop', datafield: 'h_name', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" +rowdata.h_origin+" / "+rowdata.h_name+""; - }, - }, - { text: 'Type', width: 90, datafield: 'h_type', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return '' + HopTypeData[value].nl + ''; - } - }, - { text: 'Vorm', width: 90, datafield: 'h_form', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return '' + HopFormData[value].nl + ''; - } - }, - { text: 'Alpha', datafield: 'h_alpha', width: 80, align: 'right', cellsalign: 'right', cellsformat: 'p1' }, - { text: 'Gebruik', width: 110, datafield: 'h_useat', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return '' + HopUseData[value].nl + ''; - } - }, - { text: 'Tijdsduur', datafield: 'h_time', width: 90, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var duration = ''; - if ((rowdata.h_useat == 2) || (rowdata.h_useat == 4)) // Boil, Whirlpool - duration = dataAdapter.formatNumber(value, "f0")+" min."; - else if (rowdata.h_useat == 5) // Dry hop - duration = dataAdapter.formatNumber(value/1440, "f0")+" dagen"; - return '' + duration + ''; - } - }, - { text: 'IBU', datafield: 'ibu', width: 80, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var ibu = toIBU(rowdata.h_useat, rowdata.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')), - parseFloat(rowdata.h_amount), parseFloat(rowdata.h_time), - parseFloat(rowdata.h_alpha), $("#ibu_method").val()); - return '' + dataAdapter.formatNumber(ibu, "f1") + ''; - } - }, - { text: 'Gewicht', datafield: 'h_amount', width: 110, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var amount = dataAdapter.formatNumber(value, "f1") + ' kg'; - if (value < 1) - amount = dataAdapter.formatNumber(value * 1000, "f1") + ' gr'; - return '' + amount + ''; - } - }, - { text: 'Voorraad', datafield: 'h_inventory', width: 110, align: 'right', - 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 amount, color = '#ffffff'; - if (value < rowdata.h_amount) - color = '#ff4040'; - amount = dataAdapter.formatNumber(value, "f1") + ' kg'; - if (value < 1) - amount = dataAdapter.formatNumber(value * 1000, "f1") + ' gr'; - return ''+amount+''; - } else { - return ''; - } - } - }, - { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function () { - return "Wijzig"; - }, buttonclick: function (row) { - if (dataRecord.stage > 3) { - alert("Ingredieënt is al verwerkt."); - } else { - console.log("edit button row "+row); - hopRow = row; - hopData = $("#hopGrid").jqxGrid('getrowdata', hopRow); - $("#wh_name").val(hopData.h_name); - $("#wh_amount").val(hopData.h_amount * 1000); - var 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() - ); - $("#wh_ibu").val(ibu); - if (hopData.h_useat == 5) // Dry hop - $("#wh_time").val(hopData.h_time / 1440); - else - $("#wh_time").val(hopData.h_time); - $("#wh_useat").val(hopData.h_useat); - // show the popup window. - $("#popupHop").jqxWindow('open'); - } - } - } - ] - }); - }, - - // Inline miscs editor - editMisc = function (data) { - var miscSource = { - localdata: data.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 (rowid, rowdata, position, commit) { - console.log("misc addrow "+rowid); - commit(true); - }, - deleterow: function (rowid, commit) { - console.log("misc deleterow "+rowid); - commit(true); - }, - updaterow: function (rowid, rowdata, commit) { - console.log("misc updaterow "+rowid); - commit(true); - } - }, - miscAdapter = new $.jqx.dataAdapter(miscSource, { - beforeLoadComplete: function (records) { - 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) { - 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': $("#wa_acid_name").val(0); - $("#wa_acid").val(row.m_amount * 1000); - $("#wa_acid_perc").val(80); - last_acid = 'Melkzuur'; - break; - case 'Zoutzuur': $("#wa_acid_name").val(1); - $("#wa_acid").val(row.m_amount * 1000); - $("#wa_acid_perc").val(80); - last_acid = 'Zoutzuur'; - break; - case 'Fosforzuur': $("#wa_acid_name").val(2); - $("#wa_acid").val(row.m_amount * 1000); - $("#wa_acid_perc").val(80); - last_acid = 'Fosforzuur'; - break; - case 'Zwavelzuur': $("#wa_acid_name").val(3); - $("#wa_acid").val(row.m_amount * 1000); - $("#wa_acid_perc").val(80); - last_acid = 'Zwavelzuur'; - break; - case 'NaHCO3': $("#wa_base_name").val(0); - $("#wa_base").val(row.m_amount * 1000); - last_base = 'NaHCO3'; - break; - case 'Na2CO3': $("#wa_base_name").val(1); - $("#wa_base").val(row.m_amount * 1000); - last_base = 'Na2CO3'; - break; - case 'CaCO3': $("#wa_base_name").val(2); - $("#wa_base").val(row.m_amount * 1000); - last_base = 'CaCO3'; - break; - case 'Ca(OH)2': $("#wa_base_name").val(3); - $("#wa_base").val(row.m_amount * 1000); - last_base = 'Ca(OH)2'; - break; - } - } - return data; - }, - loadError: function(jqXHR, status, error) { +$(document).ready(function() { + + 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 + source = { + datatype: 'json', + cache: false, + datafields: [ + // From prod_main + { 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: url + '?record=' + my_record + }, + + // Load data and select one record. + dataAdapter = new $.jqx.dataAdapter(source, { + loadComplete: function() { + var records = dataAdapter.records; + dataRecord = records[0]; + // Hidden record uuid + $('#name').val(dataRecord.name); + $('#code').val(dataRecord.code); + $('#birth').val(dataRecord.birth); + $('#stage').val(StageData[dataRecord.stage].nl); + $('#notes').val(dataRecord.notes); + $('#locked').val(dataRecord.locked); + $('#eq_name').val(dataRecord.eq_name); + $('#eq_notes').val(dataRecord.eq_notes); + $('#eq_boil_size').val(dataRecord.eq_boil_size); + $('#eq_batch_size').val(dataRecord.eq_batch_size); + $('#eq_tun_volume').val(dataRecord.eq_tun_volume); + $('#eq_top_up_water').val(dataRecord.eq_top_up_water); + $('#eq_trub_chiller_loss').val(dataRecord.eq_trub_chiller_loss); + $('#eq_evap_rate').val(dataRecord.eq_evap_rate); + $('#eq_boil_time').val(dataRecord.eq_boil_time); + $('#eq_top_up_kettle').val(dataRecord.eq_top_up_kettle); + $('#eq_hop_utilization').val(dataRecord.eq_hop_utilization); + $('#eq_lauter_volume').val(dataRecord.eq_lauter_volume); + $('#eq_lauter_deadspace').val(dataRecord.eq_lauter_deadspace); + $('#eq_kettle_volume').val(dataRecord.eq_kettle_volume); + $('#eq_mash_volume').val(dataRecord.eq_mash_volume); + $('#eq_mash_max').val(dataRecord.eq_mash_max); + $('#eq_efficiency').val(dataRecord.eq_efficiency); + // Brewdate + $('#brew_date_start').val(dataRecord.brew_date_start); + $('#brew_mash_ph').val(dataRecord.brew_mash_ph); + $('#brew_mash_sg').val(dataRecord.brew_mash_sg); + $('#brew_mash_efficiency').val(dataRecord.brew_mash_efficiency); + // Header Spoelen en filteren + $('#brew_sparge_temperature').val(dataRecord.sparge_temp); + $('#brew_sparge_volume').val(dataRecord.sparge_volume); + $('#brew_sparge_est').val(dataRecord.brew_sparge_est); + $('#brew_sparge_ph').val(dataRecord.brew_sparge_ph); + // Header Beluchten + $('#brew_aeration_type').val(dataRecord.brew_aeration_type); + $('#brew_aeration_time').val(dataRecord.brew_aeration_time); + $('#brew_aeration_speed').val(dataRecord.brew_aeration_speed); + + $('#brew_preboil_ph').val(dataRecord.brew_preboil_ph); + $('#brew_preboil_sg').val(dataRecord.brew_preboil_sg); + $('#brew_preboil_volume').val(dataRecord.brew_preboil_volume); + $('#brew_preboil_efficiency').val(dataRecord.brew_preboil_efficiency); + // Header Koelen en whirlpoolen + $('#brew_whirlpool9').val(dataRecord.brew_whirlpool9); + $('#brew_whirlpool7').val(dataRecord.brew_whirlpool7); + $('#brew_whirlpool6').val(dataRecord.brew_whirlpool6); + $('#brew_whirlpool2').val(dataRecord.brew_whirlpool2); + // Header Naar gistvat + $('#brew_fermenter_volume').val(dataRecord.brew_fermenter_volume); + $('#brew_fermenter_sg').val(dataRecord.brew_fermenter_sg); + $('#brew_fermenter_sg2').val(dataRecord.brew_fermenter_sg); + $('#brew_fermenter_ibu').val(dataRecord.brew_fermenter_ibu); + $('#brew_fermenter_color').val(dataRecord.brew_fermenter_color); + $('#brew_fermenter_extrawater').val(dataRecord.brew_fermenter_extrawater); + $('#brew_fermenter_tcloss').val(dataRecord.brew_fermenter_tcloss); + + $('#brew_aboil_ph').val(dataRecord.brew_aboil_ph); + $('#brew_aboil_sg').val(dataRecord.brew_aboil_sg); + $('#brew_aboil_volume').val(dataRecord.brew_aboil_volume); + $('#brew_aboil_efficiency').val(dataRecord.brew_aboil_efficiency); + // Header Koelen en whirlpoolen + $('#brew_cooling_to').val(dataRecord.brew_cooling_to); + $('#brew_cooling_method').val(dataRecord.brew_cooling_method); + $('#brew_cooling_time').val(dataRecord.brew_cooling_time); + // Niks + $('#brew_date_end').val(dataRecord.brew_date_end); + $('#og').val(dataRecord.og); + $('#fg').val(dataRecord.fg); + $('#primary_start_temp').val(dataRecord.primary_start_temp); + $('#primary_max_temp').val(dataRecord.primary_max_temp); + $('#primary_end_temp').val(dataRecord.primary_end_temp); + $('#primary_end_sg').val(dataRecord.primary_end_sg); + $('#primary_end_date').val(dataRecord.primary_end_date); + $('#secondary_temp').val(dataRecord.secondary_temp); + $('#secondary_end_sg').val(dataRecord.secondary_end_sg); + $('#secondary_end_date').val(dataRecord.secondary_end_date); + $('#tertiary_temp').val(dataRecord.tertiary_temp); + $('#package_date').val(dataRecord.package_date); + $('#package_volume').val(dataRecord.package_volume); + $('#package_infuse_amount').val(dataRecord.package_infuse_amount); + $('#package_infuse_abv').val(dataRecord.package_infuse_abv); + $('#package_infuse_notes').val(dataRecord.package_infuse_notes); + $('#package_abv').val(dataRecord.package_abv); + $('#package_ph').val(dataRecord.package_ph); + $('#bottle_amount').val(dataRecord.bottle_amount); + $('#bottle_carbonation').val(dataRecord.bottle_carbonation); + $('#bottle_priming_water').val(dataRecord.bottle_priming_water); + $('#bottle_priming_amount').val(dataRecord.bottle_priming_amount); + $('#bottle_carbonation_temp').val(dataRecord.bottle_carbonation_temp); + $('#keg_amount').val(dataRecord.keg_amount); + $('#keg_carbonation').val(dataRecord.keg_carbonation); + $('#keg_priming_water').val(dataRecord.keg_priming_water); + $('#keg_priming_amount').val(dataRecord.keg_priming_amount); + $('#keg_carbonation_temp').val(dataRecord.keg_carbonation_temp); + $('#keg_forced_carb').val(dataRecord.keg_forced_carb); + $('#keg_pressure').val(dataRecord.keg_pressure); + $('#taste_notes').val(dataRecord.taste_notes); + $('#taste_rate').val(dataRecord.taste_rate); + $('#taste_date').val(dataRecord.taste_date); + $('#taste_color').val(dataRecord.taste_color); + $('#taste_transparency').val(dataRecord.taste_transparency); + $('#taste_head').val(dataRecord.taste_head); + $('#taste_aroma').val(dataRecord.taste_aroma); + $('#taste_taste').val(dataRecord.taste_taste); + $('#taste_mouthfeel').val(dataRecord.taste_mouthfeel); + $('#taste_aftertaste').val(dataRecord.taste_aftertaste); + + // Recipe + $('#st_name').val(dataRecord.st_name); + $('#st_letter').val(dataRecord.st_letter); + $('#st_guide').val(dataRecord.st_guide); + $('#st_category').val(dataRecord.st_category); + $('#st_category_number').val(dataRecord.st_category_number); + $('#st_type').val(StyleTypeData[dataRecord.st_type].nl); + $('#st_og_min').val(dataRecord.st_og_min); + $('#st_og_max').val(dataRecord.st_og_max); + $('#st_fg_min').val(dataRecord.st_fg_min); + $('#st_fg_max').val(dataRecord.st_fg_max); + $('#st_abv_min').val(dataRecord.st_abv_min); + $('#st_abv_max').val(dataRecord.st_abv_max); + $('#st_color_min').val(dataRecord.st_color_min); + $('#st_color_max').val(dataRecord.st_color_max); + $('#st_ibu_min').val(dataRecord.st_ibu_min); + $('#st_ibu_max').val(dataRecord.st_ibu_max); + $('#st_carb_min').val(dataRecord.st_carb_min); + $('#st_carb_min2').val(dataRecord.st_carb_min); + $('#st_carb_max').val(dataRecord.st_carb_max); + $('#st_carb_max2').val(dataRecord.st_carb_max); + $('#type').val(dataRecord.type); + $('#batch_size').val(dataRecord.batch_size); + $('#est_a_vol').val(dataRecord.batch_size * 1.04); + $('#boil_size').val(dataRecord.boil_size); + $('#est_pre_vol').val(dataRecord.boil_size * 1.04); + $('#boil_time').val(dataRecord.boil_time); + $('#efficiency').val(dataRecord.efficiency); + $('#est_og').val(dataRecord.est_og); + $('#est_og2').val(dataRecord.est_og); + $('#est_og3').val(0); + $('#est_fg').val(dataRecord.est_fg); + $('#est_fg2').val(dataRecord.est_fg); + $('#est_fg3').val(dataRecord.est_fg); + $('#est_color').val(dataRecord.est_color); + $('#est_color2').val(dataRecord.est_color); + $('#est_abv').val(dataRecord.est_abv); + $('#color_method').val(dataRecord.color_method); + $('#est_ibu').val(dataRecord.est_ibu); + $('#est_ibu2').val(dataRecord.est_ibu); + $('#ibu_method').val(dataRecord.ibu_method); + $('#est_carb').val(dataRecord.est_carb); + $('#mash_name').val(dataRecord.mash_name); + $('#mash_ph').val(dataRecord.mash_ph); + $('#sparge_temp').val(dataRecord.sparge_temp); + $('#sparge_ph').val(dataRecord.sparge_ph); + $('#sparge_volume').val(dataRecord.sparge_volume); + $('#sparge_source').val(dataRecord.sparge_source); + $('#sparge_acid_type').val(dataRecord.sparge_acid_type); + $('#sparge_acid_perc').val(dataRecord.sparge_acid_perc); + $('#sparge_acid_amount').val(dataRecord.sparge_acid_amount * 1000); + $('#calc_acid').val(dataRecord.calc_acid); + $('#w1_name').val(dataRecord.w1_name); + $('#w1_amount').val(dataRecord.w1_amount); + $('#w1_calcium').val(dataRecord.w1_calcium); + $('#w1_sulfate').val(dataRecord.w1_sulfate); + $('#w1_chloride').val(dataRecord.w1_chloride); + $('#w1_sodium').val(dataRecord.w1_sodium); + $('#w1_magnesium').val(dataRecord.w1_magnesium); + $('#w1_total_alkalinity').val(dataRecord.w1_total_alkalinity); + $('#w1_ph').val(dataRecord.w1_ph); + $('#w1_cost').val(dataRecord.w1_cost); + $('#w2_name').val(dataRecord.w2_name); + $('#w2_amount').val(dataRecord.w2_amount); + $('#w2_calcium').val(dataRecord.w2_calcium); + $('#w2_sulfate').val(dataRecord.w2_sulfate); + $('#w2_chloride').val(dataRecord.w2_chloride); + $('#w2_sodium').val(dataRecord.w2_sodium); + $('#w2_magnesium').val(dataRecord.w2_magnesium); + $('#w2_total_alkalinity').val(dataRecord.w2_total_alkalinity); + $('#w2_ph').val(dataRecord.w2_ph); + $('#w2_cost').val(dataRecord.w2_cost); + $('#wg_amount').val(dataRecord.wg_amount); + $('#wg_calcium').val(dataRecord.wg_calcium); + $('#wg_sulfate').val(dataRecord.wg_sulfate); + $('#wg_chloride').val(dataRecord.wg_chloride); + $('#wg_sodium').val(dataRecord.wg_sodium); + $('#wg_magnesium').val(dataRecord.wg_magnesium); + $('#wg_total_alkalinity').val(dataRecord.wg_total_alkalinity); + $('#wg_ph').val(dataRecord.wg_ph); + $('#wb_calcium').val(dataRecord.wb_calcium); + $('#wb_sulfate').val(dataRecord.wb_sulfate); + $('#wb_chloride').val(dataRecord.wb_chloride); + $('#wb_sodium').val(dataRecord.wb_sodium); + $('#wb_magnesium').val(dataRecord.wb_magnesium); + $('#wb_total_alkalinity').val(dataRecord.wb_total_alkalinity); + $('#wb_ph').val(dataRecord.wb_ph); + $('#wa_acid_name').val(dataRecord.wa_acid_name); + $('#wa_acid_perc').val(dataRecord.wa_acid_perc); + $('#wa_base_name').val(dataRecord.wa_base_name); + $('#starter_enable').val(dataRecord.starter_enable); + $('#starter_type').val(dataRecord.starter_type); + $('#starter_sg').val(dataRecord.starter_sg); + $('#starter_viability').val(dataRecord.starter_viability); + $('#prop1_type').val(dataRecord.prop1_type); + $('#prop1_volume').val(dataRecord.prop1_volume); + $('#prop2_type').val(dataRecord.prop2_type); + $('#prop2_volume').val(dataRecord.prop2_volume); + $('#prop3_type').val(dataRecord.prop3_type); + $('#prop3_volume').val(dataRecord.prop3_volume); + $('#prop4_type').val(dataRecord.prop4_type); + $('#prop4_volume').val(dataRecord.prop4_volume); + editFermentable(dataRecord); + editHop(dataRecord); + editMisc(dataRecord); + editYeast(dataRecord); + editMash(dataRecord); + calcStage(); + $('#jqxTabs').jqxTabs('select', 2); + }, + loadError: function(jqXHR, status, error) { + }, + beforeLoadComplete: function(records) { + $('#jqxLoader').jqxLoader('open'); + } + }); + + // Inline fermentables editor + var editFermentable = function(data) { + var fermentableSource = { + localdata: data.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(rowid, rowdata, position, commit) { + //console.log("fermentable addrow "+rowid); + commit(true); + }, + deleterow: function(rowid, commit) { + //console.log("fermentable deleterow "+rowid); + commit(true); + }, + updaterow: function(rowid, rowdata, commit) { + //console.log("fermentable updaterow "+rowid); + commit(true); + } + }, + fermentableAdapter = new $.jqx.dataAdapter(fermentableSource); + + $('#fermentableGrid').jqxGrid({ + width: 1240, + height: 470, + source: fermentableAdapter, + theme: theme, + selectionmode: 'singlerow', + showtoolbar: true, + rendertoolbar: function(toolbar) { + var container = $("
"); + toolbar.append(container); + container.append('
'); + container.append('
In voorraad:
'); + container.append('
'); + container.append(''); + // add fermentable from dropdownlist. + $('#faddrowbutton').jqxDropDownList({ + placeHolder: 'Kies mout:', + theme: theme, + template: 'primary', + source: fermentablelist, + displayMember: 'name', + disabled: (dataRecord.stage > 3), + width: 150, + height: 27, + dropDownWidth: 500, + dropDownHeight: 500, + renderer: function(index, label, value) { + var datarecord = fermentablelist.records[index]; + return datarecord.supplier + ' / ' + datarecord.name + ' (' + datarecord.color + ' EBC)'; + } + }); + $('#faddrowbutton').on('select', function(event) { + if (event.args) { + 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; + row['f_amount'] = 0; + row['f_cost'] = datarecord.cost; + row['f_type'] = datarecord.type; + row['f_yield'] = datarecord.yield; + row['f_color'] = datarecord.color; + row['f_coarse_fine_diff'] = datarecord.coarse_fine_diff; + row['f_moisture'] = datarecord.moisture; + row['f_diastatic_power'] = datarecord.diastatic_power; + row['f_protein'] = datarecord.protein; + row['f_max_in_batch'] = datarecord.max_in_batch; + row['f_graintype'] = datarecord.graintype; + if (datarecord.add_after_boil) { + row['f_added'] = 2; // Fermentation + } else if ((datarecord.type == 1) || (datarecord.type == 4)) { // Sugar or Adjunct + row['f_added'] = 1; // Boil + } else { + row['f_added'] = 0; // Mash + } + row['f_dissolved_protein'] = datarecord.dissolved_protein; + row['f_recommend_mash'] = datarecord.recommend_mash; + row['f_add_after_boil'] = datarecord.add_after_boil; + if (rowscount == 0) { + // The first fermentable + row['f_adjust_to_total_100'] = 1; + row['f_percentage'] = 100; + } else { + row['f_adjust_to_total_100'] = 0; + row['f_percentage'] = 0; + } + row['f_di_ph'] = datarecord.di_ph; + row['f_acid_to_ph_57'] = datarecord.acid_to_ph_57; + row['f_inventory'] = datarecord.inventory; + $('#fermentableGrid').jqxGrid('addrow', null, row); + } + }); + + $('#finstockbutton').jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); + $('#finstockbutton').on('change', function(event) { + fermentableinstock = event.args.checked; + fermentablelist.dataBind(); + }); + + // delete selected fermentable. + $('#fdeleterowbutton').jqxButton({ template: 'danger', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#fdeleterowbutton').on('click', function() { + var rowscount, id, percent, amount, i, rowdata, + selectedrowindex = $('#fermentableGrid').jqxGrid('getselectedrowindex'); + rowscount = $('#fermentableGrid').jqxGrid('getdatainformation').rowscount; + if (selectedrowindex >= 0 && selectedrowindex < rowscount) { + 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 (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; + } + } + } else { + calcPercentages(); + } + } else { + $('#fermentableGrid').jqxGrid('setcellvalue', 0, 'f_percentage', 100); + } + calcFermentables(); + calcIBUs(); + }); + }, + ready: function() { + calcFermentables(); + $('#jqxTabs').jqxTabs('next'); + }, + columns: [ + { text: 'Vergistbaar ingrediënt', datafield: 'f_name', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + rowdata.f_supplier + ' / ' + + rowdata.f_name + ' (' + rowdata.f_color + ' EBC)'; + } + }, + { text: 'Type', width: 100, datafield: 'f_type', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + FermentableTypeData[value].nl + ''; + } + }, + { text: 'Moment', width: 110, datafield: 'f_added', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + AddedData[value].nl + ''; + } + }, + { 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(row, columnfield, value, defaulthtml, columnproperties, rowdata) { + var color = '#ffffff'; + if (((dataRecord.inventory_reduced <= 2) && (rowdata.f_added <= 1)) || // Mash or boil + ((dataRecord.inventory_reduced <= 3) && (rowdata.f_added == 2)) || // Primary + ((dataRecord.inventory_reduced <= 5) && (rowdata.f_added == 3)) || // Secondary or Tertiary + ((dataRecord.inventory_reduced <= 6) && (rowdata.f_added == 4)) || // Bottle + ((dataRecord.inventory_reduced <= 6) && (rowdata.f_added == 5))) { // Kegs + if (value < rowdata.f_amount) + color = '#ff4040'; + return '' + fermentableAdapter.formatNumber(value, 'f3') + ''; + } else { + return ''; + } + } + }, + { text: 'Procent', datafield: 'f_percentage', width: 90, align: 'right', + cellsrenderer: function(row, columnfield, value, defaulthtml, columnproperties, rowdata) { + if (rowdata.f_added >= 4) + return ''; + var color = '#ffffff'; + if (value > rowdata.f_max_in_batch) + color = '#ff4040'; + return '' + fermentableAdapter.formatNumber(value, 'p1') + ''; + } + }, + { text: '100%', datafield: 'f_adjust_to_total_100', width: 70, align: 'center', cellsalign: 'center', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + if (value == 0) + return ''; + return ''; + } + }, + { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', + cellsrenderer: function() { + return 'Wijzig'; + }, buttonclick: function(row) { + fermentableRow = row; + fermentableData = $('#fermentableGrid').jqxGrid('getrowdata', fermentableRow); + if (fermentableData.f_added >= 4) { + alert('Wijzig dit in de Verpakken tab'); + } else if (dataRecord.stage > 3) { + alert('Ingredieënt is al verwerkt.'); + } else { + $('#wf_name').val(fermentableData.f_name); + $('#wf_amount').val(fermentableData.f_amount); + $('#wf_percentage').val(fermentableData.f_percentage); + $('#wf_max_in_batch').val(fermentableData.f_max_in_batch); + $('#wf_adjust_to_total_100').val(fermentableData.f_adjust_to_total_100); + $('#wf_added').val(fermentableData.f_added); + // show the popup window. + $('#popupFermentable').jqxWindow('open'); + } + } + } + ] + }); + }, + + // Inline hops editor + editHop = function(data) { + var hopSource = { + localdata: data.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(rowid, rowdata, position, commit) { + console.log('hop addrow ' + rowid); + commit(true); + }, + deleterow: function(rowid, commit) { + console.log('hop deleterow ' + rowid); + commit(true); + }, + updaterow: function(rowid, rowdata, commit) { + console.log('hop updaterow ' + rowid); + commit(true); + } + }, + hopAdapter = new $.jqx.dataAdapter(hopSource); + + $('#hopGrid').jqxGrid({ + width: 1240, + height: 560, + source: hopAdapter, + theme: theme, + selectionmode: 'singlerow', + showtoolbar: true, + rendertoolbar: function(toolbar) { + var container = $("
"); + toolbar.append(container); + container.append('
'); + container.append('
In voorraad:
'); + container.append('
'); + container.append(''); + // add hop from dropdownlist. + $('#haddrowbutton').jqxDropDownList({ + placeHolder: 'Kies hop:', + theme: theme, + template: 'primary', + source: hoplist, + disabled: (dataRecord.stage > 3), + displayMember: 'name', + width: 150, + height: 27, + dropDownWidth: 500, + dropDownHeight: 500, + renderer: function(index, label, value) { + var datarecord = hoplist.records[index]; + return datarecord.origin + ' - ' + datarecord.name + ' / ' + HopFormData[datarecord.form].nl + ' (' + datarecord.alpha + '% α)'; + } + }); + $('#haddrowbutton').on('select', function(event) { + if (event.args) { + 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; + row['h_cost'] = datarecord.cost; + row['h_type'] = datarecord.type; + row['h_form'] = datarecord.form; + row['h_useat'] = 2; // Boil + row['h_time'] = 0; + row['h_alpha'] = datarecord.alpha; + row['h_beta'] = datarecord.beta; + row['h_hsi'] = datarecord.hsi; + row['h_humulene'] = datarecord.humulene; + row['h_caryophyllene'] = datarecord.caryophyllene; + row['h_cohumulone'] = datarecord.cohumulone; + row['h_myrcene'] = datarecord.myrcene; + row['h_total_oil'] = datarecord.total_oil; + row['h_inventory'] = datarecord.inventory; + $('#hopGrid').jqxGrid('addrow', null, row); + } + $('#haddrowbutton').jqxDropDownList('clearSelection'); + }); + + $('#hinstockbutton').jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); + $('#hinstockbutton').on('change', function(event) { + hopinstock = event.args.checked; + hoplist.dataBind(); + }); + + // delete selected hop. + $('#hdeleterowbutton').jqxButton({ template: 'danger', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#hdeleterowbutton').on('click', function() { + var rowscount, id, selectedrowindex = $('#hopGrid').jqxGrid('getselectedrowindex'); + rowscount = $('#hopGrid').jqxGrid('getdatainformation').rowscount; + if (selectedrowindex >= 0 && selectedrowindex < rowscount) { + id = $('#hopGrid').jqxGrid('getrowid', selectedrowindex); + $('#hopGrid').jqxGrid('deleterow', id); + } + calcIBUs(); + }); + }, + ready: function() { + calcIBUs(); + $('#jqxTabs').jqxTabs('next'); + }, + columns: [ + { text: 'Hop', datafield: 'h_name', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + rowdata.h_origin + ' / ' + rowdata.h_name + ''; + }, + }, + { text: 'Type', width: 90, datafield: 'h_type', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + HopTypeData[value].nl + ''; + } + }, + { text: 'Vorm', width: 90, datafield: 'h_form', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + HopFormData[value].nl + ''; + } + }, + { text: 'Alpha', datafield: 'h_alpha', width: 80, align: 'right', cellsalign: 'right', cellsformat: 'p1' }, + { text: 'Gebruik', width: 110, datafield: 'h_useat', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + HopUseData[value].nl + ''; + } + }, + { text: 'Tijdsduur', datafield: 'h_time', width: 90, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var duration = ''; + if ((rowdata.h_useat == 2) || (rowdata.h_useat == 4)) // Boil, Whirlpool + duration = dataAdapter.formatNumber(value, 'f0') + ' min.'; + else if (rowdata.h_useat == 5) // Dry hop + duration = dataAdapter.formatNumber(value / 1440, 'f0') + ' dagen'; + return '' + duration + ''; + } + }, + { text: 'IBU', datafield: 'ibu', width: 80, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var ibu = toIBU(rowdata.h_useat, rowdata.h_form, preboil_sg, parseFloat($('#batch_size').jqxNumberInput('decimal')), + parseFloat(rowdata.h_amount), parseFloat(rowdata.h_time), parseFloat(rowdata.h_alpha), $('#ibu_method').val()); + return '' + dataAdapter.formatNumber(ibu, 'f1') + ''; + } + }, + { text: 'Gewicht', datafield: 'h_amount', width: 110, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var amount = dataAdapter.formatNumber(value, 'f1') + ' kg'; + if (value < 1) + amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gr'; + return '' + amount + ''; + } + }, + { text: 'Voorraad', datafield: 'h_inventory', width: 110, align: 'right', + 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 amount, color = '#ffffff'; + if (value < rowdata.h_amount) + color = '#ff4040'; + amount = dataAdapter.formatNumber(value, 'f1') + ' kg'; + if (value < 1) + amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gr'; + return '' + amount + ''; + } else { + return ''; + } + } + }, + { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', + cellsrenderer: function() { + return 'Wijzig'; + }, buttonclick: function(row) { + if (dataRecord.stage > 3) { + alert('Ingredieënt is al verwerkt.'); + } else { + console.log('edit button row ' + row); + hopRow = row; + hopData = $('#hopGrid').jqxGrid('getrowdata', hopRow); + $('#wh_name').val(hopData.h_name); + $('#wh_amount').val(hopData.h_amount * 1000); + var 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()); + $('#wh_ibu').val(ibu); + if (hopData.h_useat == 5) // Dry hop + $('#wh_time').val(hopData.h_time / 1440); + else + $('#wh_time').val(hopData.h_time); + $('#wh_useat').val(hopData.h_useat); + // show the popup window. + $('#popupHop').jqxWindow('open'); + } + } + } + ] + }); + }, + + // Inline miscs editor + editMisc = function(data) { + var miscSource = { + localdata: data.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(rowid, rowdata, position, commit) { + console.log('misc addrow ' + rowid); + commit(true); + }, + deleterow: function(rowid, commit) { + console.log('misc deleterow ' + rowid); + commit(true); + }, + updaterow: function(rowid, rowdata, commit) { + console.log('misc updaterow ' + rowid); + commit(true); + } + }, + miscAdapter = new $.jqx.dataAdapter(miscSource, { + beforeLoadComplete: function(records) { + 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) { + 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': + $('#wa_acid_name').val(0); + $('#wa_acid').val(row.m_amount * 1000); + $('#wa_acid_perc').val(80); + last_acid = 'Melkzuur'; + break; + case 'Zoutzuur': + $('#wa_acid_name').val(1); + $('#wa_acid').val(row.m_amount * 1000); + $('#wa_acid_perc').val(80); + last_acid = 'Zoutzuur'; + break; + case 'Fosforzuur': + $('#wa_acid_name').val(2); + $('#wa_acid').val(row.m_amount * 1000); + $('#wa_acid_perc').val(80); + last_acid = 'Fosforzuur'; + break; + case 'Zwavelzuur': + $('#wa_acid_name').val(3); + $('#wa_acid').val(row.m_amount * 1000); + $('#wa_acid_perc').val(80); + last_acid = 'Zwavelzuur'; + break; + case 'NaHCO3': + $('#wa_base_name').val(0); + $('#wa_base').val(row.m_amount * 1000); + last_base = 'NaHCO3'; + break; + case 'Na2CO3': + $('#wa_base_name').val(1); + $('#wa_base').val(row.m_amount * 1000); + last_base = 'Na2CO3'; + break; + case 'CaCO3': + $('#wa_base_name').val(2); + $('#wa_base').val(row.m_amount * 1000); + last_base = 'CaCO3'; + break; + case 'Ca(OH)2': + $('#wa_base_name').val(3); + $('#wa_base').val(row.m_amount * 1000); + last_base = 'Ca(OH)2'; + break; + } + } + return data; + }, + loadError: function(jqXHR, status, error) { $('#err').text(status + ' ' + error); - }, - }); - $("#miscGrid").jqxGrid({ - width: 1240, - height: 575, - source: miscAdapter, - theme: theme, - selectionmode: 'singlerow', - showtoolbar: true, - rendertoolbar: function (toolbar) { - var container = $("
"); - toolbar.append(container); - container.append('
'); - container.append('
In voorraad:
'); - container.append('
'); - container.append(''); - // add misc from dropdownlist. - $("#maddrowbutton").jqxDropDownList({ - placeHolder: "Kies ingrediënt:", - theme: theme, - template: "primary", - source: misclist, - disabled: (dataRecord.stage > 3), - displayMember: "name", - width: 150, - height: 27, - dropDownWidth: 500, - dropDownHeight: 500 - }); - $("#maddrowbutton").on('select', function (event) { - if (event.args) { - 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; - row["m_type"] = datarecord.type; - row["m_use_use"] = datarecord.use_use; - row["m_time"] = 0; - row["m_amount_is_weight"] = datarecord.amount_is_weight; - row["m_inventory"] = datarecord.inventory; - $("#miscGrid").jqxGrid('addrow', null, row); - } - }); - $("#minstockbutton").jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); - $("#minstockbutton").on('change', function (event) { - miscinstock = event.args.checked; - misclist.dataBind(); - }); - // delete selected misc. - $("#mdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#mdeleterowbutton").on('click', function () { - 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 - id = $("#miscGrid").jqxGrid('getrowid', selectedrowindex); - $("#miscGrid").jqxGrid('deleterow', id); - } - }); - }, - ready: function() { - calcMiscs(); - $('#jqxTabs').jqxTabs('next'); - }, - columns: [ - { text: 'Ingredient', datafield: 'm_name' }, - { text: 'Type', width: 140, datafield: 'm_type', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" + MiscTypeData[value].nl + ""; - } - }, - { text: 'Gebruik', width: 140, datafield: 'm_use_use', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return "" + MiscUseData[value].nl + ""; - } - }, - { text: 'Tijd', datafield: 'm_time', width: 90, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var duration = ''; - if (rowdata.m_use_use == 2) // Boil - duration = dataAdapter.formatNumber(value, "f0")+" min."; - else if ((rowdata.m_use_use == 3) || (rowdata.m_use_use == 4)) // Primary or Secondary - duration = dataAdapter.formatNumber(value/1440, "f0")+" dagen"; - return '' + duration + ''; - }, - }, - { text: 'Hoeveel', datafield: 'm_amount', width: 110, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var vstr = rowdata.m_amount_is_weight ? "gr":"ml"; - return '' + - dataAdapter.formatNumber(value * 1000,"f2")+" "+vstr + ''; - } - }, - { 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 - vstr = rowdata.m_amount_is_weight ? "gr":"ml"; - color = '#ffffff'; - if (value < rowdata.m_amount) - color = '#ff4040'; - amount = dataAdapter.formatNumber(value * 1000,"f2")+" "+vstr; - return ''+amount+''; - } else { - return ''; - } - } - }, - { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function () { - return "Wijzig"; - }, buttonclick: function (row) { - miscRow = row; - miscData = $("#miscGrid").jqxGrid('getrowdata', miscRow); - if (dataRecord.stage > 3) { - alert("Ingredieënt is al verwerkt."); - } else if (miscData.m_type == 4) { - alert("Brouwzouten wijzigen in de water tab."); - } else { - console.log("edit button row "+row); - if (miscData.m_amount_is_weight) - $("#wm_pmpt_amount").html("Gewicht gram:"); - else - $("#wm_pmpt_amount").html("Volume ml:"); - $("#wm_name").val(miscData.m_name); - $("#wm_amount").val(miscData.m_amount * 1000); - if ((miscData.m_use_use == 3) || (miscData.m_use_use == 4)) // Primary or Secondary - $("#wm_time").val(miscData.m_time / 1440); - else - $("#wm_time").val(miscData.m_time); - $("#wm_use_use").val(miscData.m_use_use); - // show the popup window. - $("#popupMisc").jqxWindow('open'); - } - } - } - ] - }); - }, - - // Inline yeasts editor - editYeast = function (data) { - var yeastSource = { - localdata: data.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 (rowid, rowdata, position, commit) { - console.log("yeast addrow "+rowid); - commit(true); - }, - deleterow: function (rowid, commit) { - console.log("yeast deleterow "+rowid); - commit(true); - }, - updaterow: function (rowid, rowdata, commit) { - console.log("yeast updaterow "+rowid); - commit(true); - } - }, - yeastAdapter = new $.jqx.dataAdapter(yeastSource); - - $("#yeastGrid").jqxGrid({ - width: 1240, - height: 350, - source: yeastAdapter, - theme: theme, - selectionmode: 'singlerow', - showtoolbar: true, - rendertoolbar: function (toolbar) { - var container = $("
"); - toolbar.append(container); - container.append('
'); - container.append('
In voorraad:
'); - container.append('
'); - container.append(''); - // add yeast from dropdownlist. - $("#yaddrowbutton").jqxDropDownList({ - placeHolder: "Kies gist:", - theme: theme, - source: yeastlist, - disabled: (dataRecord.stage > 3), - template: "primary", - displayMember: "name", - width: 150, - height: 27, - dropDownWidth: 500, - dropDownHeight: 500, - renderer: function (index, label, value) { - var datarecord = yeastlist.records[index]; - return datarecord.laboratory+" "+datarecord.product_id+" "+datarecord.name; - } - }); - $("#yaddrowbutton").on('select', function (event) { - if (event.args) { - 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; - row["y_type"] = datarecord.type; - row["y_form"] = datarecord.form; - row["y_amount"] = 0; - row["y_cost"] = datarecord.cost; - row["y_use"] = 0; - row["y_min_temperature"] = datarecord.min_temperature; - row["y_max_temperature"] = datarecord.max_temperature; - row["y_attenuation"] = datarecord.attenuation; - row["y_flocculation"] = datarecord.flocculation; - row["y_cells"] = datarecord.cells; - row["y_tolerance"] = datarecord.tolerance; - row["y_inventory"] = datarecord.inventory; - $("#yeastGrid").jqxGrid('addrow', null, row); - } - calcYeast(); - $("#yaddrowbutton").jqxDropDownList('clearSelection'); - }); - $("#yinstockbutton").jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); - $("#yinstockbutton").on('change', function (event) { - yeastinstock = event.args.checked; - yeastlist.dataBind(); - }); - // delete selected yeast. - $("#ydeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#ydeleterowbutton").on('click', function () { - var id, rowscount, selectedrowindex = $("#yeastGrid").jqxGrid('getselectedrowindex'); - rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount; - if (selectedrowindex >= 0 && selectedrowindex < rowscount) { - id = $("#yeastGrid").jqxGrid('getrowid', selectedrowindex); - $("#yeastGrid").jqxGrid('deleterow', id); - calcYeast(); - } - }); - }, - ready: function() { - calcFermentables(); - showStarter(); - calcYeast(); - $('#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 (index, datafield, value, defaultvalue, column, rowdata) { - return '' + YeastFormData[value].nl + ''; - } - }, - { text: 'Min. °C', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_min_temperature' }, - { text: 'Max. °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 amount = "", color = '#ffffff'; - if (value > 0) { - amount = dataAdapter.formatNumber(value, "f1"); - if (dataRecord.est_abv > value) - color = '#ff4040'; - } - return '' + amount + ''; - } - }, - { text: 'Attn. %', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_attenuation', cellsformat: 'f1' }, - { text: 'Voor', width: 120, datafield: 'y_use', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return '' + YeastUseData[value].nl + ''; - } - }, - { text: 'Hoeveel', datafield: 'y_amount', width: 90, align: 'right', - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - var 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 - amount = dataAdapter.formatNumber(value*1000, "f1")+" gr"; - return '' + amount + ''; - } - }, - { 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 - color = '#ffffff'; - if (value < rowdata.y_amount) - color = '#ff4040'; - 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 - amount = dataAdapter.formatNumber(value*1000, "f1")+" gr"; - return ''+amount+''; - } else { - return ''; - } - } - }, - { text: '', datafield: 'Edit', columntype: 'button', width: 90, align: 'center', cellsrenderer: function () { - return "Wijzig"; - }, buttonclick: function (row) { - if (dataRecord.stage > 3) { - alert("Ingredieënt is al verwerkt."); - } else { - yeastRow = row; - yeastData = $("#yeastGrid").jqxGrid('getrowdata', yeastRow); - if (yeastData.y_form == 0) { - $("#wy_pmpt_amount").html("Pak(ken):"); - $("#wy_amount").val(yeastData.y_amount); - $("#wy_amount").jqxNumberInput({ decimalDigits: 0 }); - } else if (yeastData.y_form == 1) { - $("#wy_pmpt_amount").html("Gewicht gram:"); - $("#wy_amount").val(yeastData.y_amount * 1000); - $("#wy_amount").jqxNumberInput({ decimalDigits: 1 }); - } else { - $("#wy_pmpt_amount").html("Volume ml:"); - $("#wy_amount").val(yeastData.y_amount * 1000); - $("#wy_amount").jqxNumberInput({ decimalDigits: 0 }); - } - $("#wy_name").val(yeastData.y_name); - $("#wy_laboratory").val(yeastData.y_laboratory); - $("#wy_product_id").val(yeastData.y_product_id); - $("#wy_use").val(yeastData.y_use); - // show the popup window. - $("#popupYeast").jqxWindow('open'); - } - } - } - ] - }); - }, - // inline mash editor - editMash = function (data) { - var mashSource = { - localdata: data.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 (rowid, rowdata, position, commit) { - commit(true); - }, - deleterow: function (rowid, commit) { - commit(true); - } - }, - mashAdapter = new $.jqx.dataAdapter(mashSource, { - beforeLoadComplete: function (records) { - mash_infuse = 0; - 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. - data.push(row); - } - }, - }); - $("#mashGrid").jqxGrid({ - width: 1240, - height: 400, - source: mashAdapter, - theme: theme, - selectionmode: 'singlerow', - showtoolbar: true, - rendertoolbar: function (toolbar) { - var container = $("
"); - toolbar.append(container); - container.append(''); - container.append(''); - $("#saddrowbutton").jqxButton({ template: "primary", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#saddrowbutton").on('click', function () { - var row = {}, rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount; - row["step_name"] = "Stap " + (rowscount + 1); - if (rowscount > 0) { - row["step_type"] = 1; - } else { - row["step_type"] = 0; - row["step_infuse_amount"] = 15; - } - row["step_temp"] = 62.0; - row['step_time'] = 20.0; - row['step_thickness'] = 0; - row['ramp_time'] = 1.0; - row['end_temp'] = 62.0; - $("#mashGrid").jqxGrid('addrow', null, row); - }); - // delete selected step. - $("#sdeleterowbutton").jqxButton({ template: "danger", theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); - $("#sdeleterowbutton").on('click', function () { - var rowscount, id, selectedrowindex = $("#mashGrid").jqxGrid('getselectedrowindex'); - rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount; - if (selectedrowindex >= 0 && selectedrowindex < rowscount) { - id = $("#mashGrid").jqxGrid('getrowid', selectedrowindex); - $("#mashGrid").jqxGrid('deleterow', id); - } - }); - }, - ready: function() { - calcInit(); - calcMash(); - $('#jqxLoader').jqxLoader('close'); - $('#jqxTabs').jqxTabs('first'); - }, - columns: [ - { text: 'Stap naam', datafield: 'step_name' }, - { text: 'Stap type', datafield: 'step_type', width: 175, - cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { - return '' + MashStepTypeData[value].nl + ''; - } - }, - { text: 'Start °C', datafield: 'step_temp', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, - { text: 'Eind °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 (row) { - if (dataRecord.stage > 3) { - alert("Het maichen is al gedaan."); - } else { - mashRow = row; - mashData = $("#mashGrid").jqxGrid('getrowdata', mashRow); - $("#wstep_name").val(mashData.step_name); - $("#wstep_type").val(mashData.step_type); - $("#wstep_infuse_amount").val(mashData.step_infuse_amount); - $("#wstep_temp").val(mashData.step_temp); - $("#wend_temp").val(mashData.end_temp); - $("#wstep_time").val(mashData.step_time); - $("#wramp_time").val(mashData.ramp_time); - if (mashData.step_type == 0) { - $("#wstep_infuse_amount").show(); - $("#wstep_pmpt").show(); - } else { - $("#wstep_infuse_amount").hide(); - $("#wstep_pmpt").hide(); - } - // show the popup window. - $("#popupMash").jqxWindow('open'); - } - } - } - ] - }); - }; - - /* - * 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(""); - else - $("#ok_supplies").html(""); - } - - 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 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), + }, + }); + $('#miscGrid').jqxGrid({ + width: 1240, + height: 575, + source: miscAdapter, + theme: theme, + selectionmode: 'singlerow', + showtoolbar: true, + rendertoolbar: function(toolbar) { + var container = $("
"); + toolbar.append(container); + container.append('
'); + container.append('
In voorraad:
'); + container.append('
'); + container.append(''); + // add misc from dropdownlist. + $('#maddrowbutton').jqxDropDownList({ + placeHolder: 'Kies ingrediënt:', + theme: theme, + template: 'primary', + source: misclist, + disabled: (dataRecord.stage > 3), + displayMember: 'name', + width: 150, + height: 27, + dropDownWidth: 500, + dropDownHeight: 500 + }); + $('#maddrowbutton').on('select', function(event) { + if (event.args) { + 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; + row['m_type'] = datarecord.type; + row['m_use_use'] = datarecord.use_use; + row['m_time'] = 0; + row['m_amount_is_weight'] = datarecord.amount_is_weight; + row['m_inventory'] = datarecord.inventory; + $('#miscGrid').jqxGrid('addrow', null, row); + } + }); + $('#minstockbutton').jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); + $('#minstockbutton').on('change', function(event) { + miscinstock = event.args.checked; + misclist.dataBind(); + }); + // delete selected misc. + $('#mdeleterowbutton').jqxButton({ template: 'danger', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#mdeleterowbutton').on('click', function() { + 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 + id = $('#miscGrid').jqxGrid('getrowid', selectedrowindex); + $('#miscGrid').jqxGrid('deleterow', id); + } + }); + }, + ready: function() { + calcMiscs(); + $('#jqxTabs').jqxTabs('next'); + }, + columns: [ + { text: 'Ingredient', datafield: 'm_name' }, + { text: 'Type', width: 140, datafield: 'm_type', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + MiscTypeData[value].nl + ''; + } + }, + { text: 'Gebruik', width: 140, datafield: 'm_use_use', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + MiscUseData[value].nl + ''; + } + }, + { text: 'Tijd', datafield: 'm_time', width: 90, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var duration = ''; + if (rowdata.m_use_use == 2) // Boil + duration = dataAdapter.formatNumber(value, 'f0') + ' min.'; + else if ((rowdata.m_use_use == 3) || (rowdata.m_use_use == 4)) // Primary or Secondary + duration = dataAdapter.formatNumber(value / 1440, 'f0') + ' dagen'; + return '' + duration + ''; + } + }, + { text: 'Hoeveel', datafield: 'm_amount', width: 110, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var vstr = rowdata.m_amount_is_weight ? 'gr' : 'ml'; + return '' + dataAdapter.formatNumber(value * 1000, 'f2') + ' ' + vstr + ''; + } + }, + { 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 + vstr = rowdata.m_amount_is_weight ? 'gr' : 'ml'; + color = '#ffffff'; + if (value < rowdata.m_amount) + color = '#ff4040'; + amount = dataAdapter.formatNumber(value * 1000, 'f2') + ' ' + vstr; + return '' + amount + ''; + } else { + return ''; + } + } + }, + { text: '', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', + cellsrenderer: function() { + return 'Wijzig'; + }, buttonclick: function(row) { + miscRow = row; + miscData = $('#miscGrid').jqxGrid('getrowdata', miscRow); + if (dataRecord.stage > 3) { + alert('Ingredieënt is al verwerkt.'); + } else if (miscData.m_type == 4) { + alert('Brouwzouten wijzigen in de water tab.'); + } else { + console.log('edit button row ' + row); + if (miscData.m_amount_is_weight) + $('#wm_pmpt_amount').html('Gewicht gram:'); + else + $('#wm_pmpt_amount').html('Volume ml:'); + $('#wm_name').val(miscData.m_name); + $('#wm_amount').val(miscData.m_amount * 1000); + if ((miscData.m_use_use == 3) || (miscData.m_use_use == 4)) // Primary or Secondary + $('#wm_time').val(miscData.m_time / 1440); + else + $('#wm_time').val(miscData.m_time); + $('#wm_use_use').val(miscData.m_use_use); + // show the popup window. + $('#popupMisc').jqxWindow('open'); + } + } + } + ] + }); + }, + + // Inline yeasts editor + editYeast = function(data) { + var yeastSource = { + localdata: data.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(rowid, rowdata, position, commit) { + console.log('yeast addrow ' + rowid); + commit(true); + }, + deleterow: function(rowid, commit) { + console.log('yeast deleterow ' + rowid); + commit(true); + }, + updaterow: function(rowid, rowdata, commit) { + console.log('yeast updaterow ' + rowid); + commit(true); + } + }, + yeastAdapter = new $.jqx.dataAdapter(yeastSource); + + $('#yeastGrid').jqxGrid({ + width: 1240, + height: 350, + source: yeastAdapter, + theme: theme, + selectionmode: 'singlerow', + showtoolbar: true, + rendertoolbar: function(toolbar) { + var container = $('
'); + toolbar.append(container); + container.append('
'); + container.append('
In voorraad:
'); + container.append('
'); + container.append(''); + // add yeast from dropdownlist. + $('#yaddrowbutton').jqxDropDownList({ + placeHolder: 'Kies gist:', + theme: theme, + source: yeastlist, + disabled: (dataRecord.stage > 3), + template: 'primary', + displayMember: 'name', + width: 150, + height: 27, + dropDownWidth: 500, + dropDownHeight: 500, + renderer: function(index, label, value) { + var datarecord = yeastlist.records[index]; + return datarecord.laboratory + ' ' + datarecord.product_id + ' ' + datarecord.name; + } + }); + $('#yaddrowbutton').on('select', function(event) { + if (event.args) { + 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; + row['y_type'] = datarecord.type; + row['y_form'] = datarecord.form; + row['y_amount'] = 0; + row['y_cost'] = datarecord.cost; + row['y_use'] = 0; + row['y_min_temperature'] = datarecord.min_temperature; + row['y_max_temperature'] = datarecord.max_temperature; + row['y_attenuation'] = datarecord.attenuation; + row['y_flocculation'] = datarecord.flocculation; + row['y_cells'] = datarecord.cells; + row['y_tolerance'] = datarecord.tolerance; + row['y_inventory'] = datarecord.inventory; + $('#yeastGrid').jqxGrid('addrow', null, row); + } + calcYeast(); + $('#yaddrowbutton').jqxDropDownList('clearSelection'); + }); + $('#yinstockbutton').jqxCheckBox({ theme: theme, height: 27, disabled: (dataRecord.stage > 3) }); + $('#yinstockbutton').on('change', function(event) { + yeastinstock = event.args.checked; + yeastlist.dataBind(); + }); + // delete selected yeast. + $('#ydeleterowbutton').jqxButton({ template: 'danger', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#ydeleterowbutton').on('click', function() { + var id, rowscount, selectedrowindex = $('#yeastGrid').jqxGrid('getselectedrowindex'); + rowscount = $('#yeastGrid').jqxGrid('getdatainformation').rowscount; + if (selectedrowindex >= 0 && selectedrowindex < rowscount) { + id = $('#yeastGrid').jqxGrid('getrowid', selectedrowindex); + $('#yeastGrid').jqxGrid('deleterow', id); + calcYeast(); + } + }); + }, + ready: function() { + calcFermentables(); + showStarter(); + calcYeast(); + $('#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(index, datafield, value, defaultvalue, column, rowdata) { + return '' + YeastFormData[value].nl + ''; + } + }, + { text: 'Min. °C', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_min_temperature' }, + { text: 'Max. °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 amount = '', color = '#ffffff'; + if (value > 0) { + amount = dataAdapter.formatNumber(value, 'f1'); + if (dataRecord.est_abv > value) + color = '#ff4040'; + } + return '' + amount + ''; + } + }, + { text: 'Attn. %', width: 70, align: 'right', cellsalign: 'right', datafield: 'y_attenuation', cellsformat: 'f1' }, + { text: 'Voor', width: 120, datafield: 'y_use', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + YeastUseData[value].nl + ''; + } + }, + { text: 'Hoeveel', datafield: 'y_amount', width: 90, align: 'right', + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + var 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 + amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gr'; + return '' + amount + ''; + } + }, + { 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 + color = '#ffffff'; + if (value < rowdata.y_amount) + color = '#ff4040'; + 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 + amount = dataAdapter.formatNumber(value * 1000, 'f1') + ' gr'; + return '' + amount + ''; + } else { + return ''; + } + } + }, + { text: '', datafield: 'Edit', columntype: 'button', width: 90, align: 'center', + cellsrenderer: function() { + return 'Wijzig'; + }, buttonclick: function(row) { + if (dataRecord.stage > 3) { + alert('Ingredieënt is al verwerkt.'); + } else { + yeastRow = row; + yeastData = $('#yeastGrid').jqxGrid('getrowdata', yeastRow); + if (yeastData.y_form == 0) { + $('#wy_pmpt_amount').html('Pak(ken):'); + $('#wy_amount').val(yeastData.y_amount); + $('#wy_amount').jqxNumberInput({ decimalDigits: 0 }); + } else if (yeastData.y_form == 1) { + $('#wy_pmpt_amount').html('Gewicht gram:'); + $('#wy_amount').val(yeastData.y_amount * 1000); + $('#wy_amount').jqxNumberInput({ decimalDigits: 1 }); + } else { + $('#wy_pmpt_amount').html('Volume ml:'); + $('#wy_amount').val(yeastData.y_amount * 1000); + $('#wy_amount').jqxNumberInput({ decimalDigits: 0 }); + } + $('#wy_name').val(yeastData.y_name); + $('#wy_laboratory').val(yeastData.y_laboratory); + $('#wy_product_id').val(yeastData.y_product_id); + $('#wy_use').val(yeastData.y_use); + // show the popup window. + $('#popupYeast').jqxWindow('open'); + } + } + } + ] + }); + }, + + // inline mash editor + editMash = function(data) { + var mashSource = { + localdata: data.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(rowid, rowdata, position, commit) { + console.log('mash addrow ' + rowid); + commit(true); + }, + deleterow: function(rowid, commit) { + console.log('mash deleterow ' + rowid); + commit(true); + } + }, + mashAdapter = new $.jqx.dataAdapter(mashSource, { + beforeLoadComplete: function(records) { + mash_infuse = 0; + 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. + data.push(row); + } + }, + }); + $('#mashGrid').jqxGrid({ + width: 1240, + height: 400, + source: mashAdapter, + theme: theme, + selectionmode: 'singlerow', + showtoolbar: true, + rendertoolbar: function(toolbar) { + var container = $('
'); + toolbar.append(container); + container.append(''); + container.append(''); + $('#saddrowbutton').jqxButton({ template: 'primary', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#saddrowbutton').on('click', function() { + var row = {}, rowscount = $('#mashGrid').jqxGrid('getdatainformation').rowscount; + row['step_name'] = 'Stap ' + (rowscount + 1); + if (rowscount > 0) { + row['step_type'] = 1; + } else { + row['step_type'] = 0; + row['step_infuse_amount'] = 15; + } + row['step_temp'] = 62.0; + row['step_time'] = 20.0; + row['step_thickness'] = 0; + row['ramp_time'] = 1.0; + row['end_temp'] = 62.0; + $('#mashGrid').jqxGrid('addrow', null, row); + }); + // delete selected step. + $('#sdeleterowbutton').jqxButton({ template: 'danger', theme: theme, height: 27, width: 150, disabled: (dataRecord.stage > 3) }); + $('#sdeleterowbutton').on('click', function() { + var rowscount, id, selectedrowindex = $('#mashGrid').jqxGrid('getselectedrowindex'); + rowscount = $('#mashGrid').jqxGrid('getdatainformation').rowscount; + if (selectedrowindex >= 0 && selectedrowindex < rowscount) { + id = $('#mashGrid').jqxGrid('getrowid', selectedrowindex); + $('#mashGrid').jqxGrid('deleterow', id); + } + }); + }, + ready: function() { + calcInit(); + calcMash(); + $('#jqxLoader').jqxLoader('close'); + $('#jqxTabs').jqxTabs('first'); + }, + columns: [ + { text: 'Stap naam', datafield: 'step_name' }, + { text: 'Stap type', datafield: 'step_type', width: 175, + cellsrenderer: function(index, datafield, value, defaultvalue, column, rowdata) { + return '' + MashStepTypeData[value].nl + ''; + } + }, + { text: 'Start °C', datafield: 'step_temp', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, + { text: 'Eind °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(row) { + if (dataRecord.stage > 3) { + alert('Het maichen is al gedaan.'); + } else { + mashRow = row; + mashData = $('#mashGrid').jqxGrid('getrowdata', mashRow); + $('#wstep_name').val(mashData.step_name); + $('#wstep_type').val(mashData.step_type); + $('#wstep_infuse_amount').val(mashData.step_infuse_amount); + $('#wstep_temp').val(mashData.step_temp); + $('#wend_temp').val(mashData.end_temp); + $('#wstep_time').val(mashData.step_time); + $('#wramp_time').val(mashData.ramp_time); + if (mashData.step_type == 0) { + $('#wstep_infuse_amount').show(); + $('#wstep_pmpt').show(); + } else { + $('#wstep_infuse_amount').hide(); + $('#wstep_pmpt').hide(); + } + // show the popup window. + $('#popupMash').jqxWindow('open'); + } + } + } + ] + }); + }; + + /* + * 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 + }); + + /* + * 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(""); + else + $('#ok_supplies').html(""); + } + + 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)); - 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(""); - } else { - $("#r"+i+"_irate").html(""); - } - if (parseFloat($("#prop"+i+"_growf").val()) < 1) - $("#r"+i+"_growf").html(""); - if (($("#prop"+i+"_type").val() > 0) && (parseFloat($("#prop"+i+"_growf").val()) > 3)) - $("#r"+i+"_growf").html(""); - if (parseFloat($("#prop"+i+"_tcells").val()) > needed) - $("#r"+i+"_tcells").html(""); - 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) { + 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(""); + } else { + $('#r' + i + '_irate').html(""); + } + if (parseFloat($('#prop' + i + '_growf').val()) < 1) + $('#r' + i + '_growf').html(""); + if (($('#prop' + i + '_type').val() > 0) && (parseFloat($('#prop' + i + '_growf').val()) > 3)) + $('#r' + i + '_growf').html(""); + if (parseFloat($('#prop' + i + '_tcells').val()) > needed) + $('#r' + i + '_tcells').html(""); + 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("" + rangeCode + ''); + else + $('#wr_' + ion).html(""); + } + + 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: // Melkzuur + return { pK1: 3.86, pK2: 20, pK3: 20, MolWt: 90.08, AcidSG: 1214, AcidPrc: 0.88 }; + case 1: // Zoutzuur + return { pK1: -7, pK2: 20, pK3: 20, MolWt: 36.46, AcidSG: 1142, AcidPrc: 0.28 }; + case 2: // Fosforzuur + return { pK1: 2.12, pK2: 7.20, pK3: 12.44, MolWt: 98.00, AcidSG: 1170, AcidPrc: 0.25 }; + case 3: // Zwavelzuur + return { 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("Zeer moutig en zoet"); + else if (GetBUGU() < 0.43) + $('#wr_bu').html("Moutig, zoet"); + else if (GetBUGU() < 0.52) + $('#wr_bu').html("Evenwichtig"); + else if (GetBUGU() < 0.63) + $('#wr_bu').html("Licht hoppig, bitter"); + else + $('#wr_bu').html("Extra hoppig, zeer bitter"); + $('#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.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(""+rangeCode + ""); - else - $("#wr_"+ion).html(""); - } - - 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; - } + 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); } } - - 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("Zeer moutig en zoet"); - else if (GetBUGU() < 0.43) - $('#wr_bu').html("Moutig, zoet"); - else if (GetBUGU() < 0.52) - $('#wr_bu').html("Evenwichtig"); - else if (GetBUGU() < 0.63) - $('#wr_bu').html("Licht hoppig, bitter"); - else - $('#wr_bu').html("Extra hoppig, zeer bitter"); - $('#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); + $('#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"); - } - }); - }; - - dataAdapter.dataBind(); - // initialize the input fields. - // Tab 1, Algemeen - $("#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 (event) { - if (dataRecord.stage >= 10) { - dataRecord.locked = 1; - dataRecord.stage = 11; - calcStage(); - } - }); - $('#locked').on('unchecked', function (event) { - if (dataRecord.stage >= 10) { - dataRecord.locked = 0; - dataRecord.stage = 10; - calcStage(); - } - }); - $("#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); - - // Tab 2, Equipment - $("#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 ); - - // Tab 3, Fermentables - $("#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 (text) { - return (Math.round(parseInt(text) * 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 (text) { - return (Math.round(parseInt(text) * 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 (text) { - return (Math.round(parseInt(text) * 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 (text) { - return (parseInt(text) * 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.40 - }); - $("#FermentableReady").jqxButton({ template: "success", width: '90px', theme: theme }); - $("#FermentableReady").click(function () { - var row, rowID = $("#fermentableGrid").jqxGrid('getrowid', fermentableRow); - console.log("FermentableReady row:"+fermentableRow+" ID:"+rowID); - row = { - f_name: fermentableData.f_name, - f_origin: fermentableData.f_origin, - f_supplier: fermentableData.f_supplier, - f_amount: fermentableData.f_amount, - f_cost: fermentableData.f_cost, - f_type: fermentableData.f_type, - f_yield: fermentableData.f_yield, - f_color: fermentableData.f_color, - f_coarse_fine_diff: fermentableData.f_coarse_fine_diff, - f_moisture: fermentableData.f_moisture, - f_diastatic_power: fermentableData.f_diastatic_power, - f_protein: fermentableData.f_protein, - f_max_in_batch: fermentableData.f_max_in_batch, - f_graintype: fermentableData.f_graintype, - f_added: fermentableData.f_added, - f_dissolved_protein: fermentableData.f_dissolved_protein, - f_recommend_mash: fermentableData.f_recommend_mash, - f_add_after_boil: fermentableData.f_add_after_boil, - f_adjust_to_total_100: fermentableData.f_adjust_to_total_100, - f_percentage: fermentableData.f_percentage, - f_di_ph: fermentableData.f_di_ph, - f_acid_to_ph_57: fermentableData.f_acid_to_ph_57, - f_inventory: fermentableData.f_inventory, - f_avail: fermentableData.f_avail - }; - $("#fermentableGrid").jqxGrid('updaterow', rowID, row); - calcPercentages(); - calcFermentables(); - calcIBUs(); - calcMash(); - // Waters: yes there is impact. - }); - $("#wf_name").jqxInput({ theme: theme, width: 320, height: 23 }); - $("#wf_instock").jqxCheckBox({ theme: theme, height: 23 }); - $("#wf_instock").on('change', function (event) { - fermentableinstock = event.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 (index, label, value) { - var datarecord = fermentablelist.records[index]; - return datarecord.supplier+ " / " + datarecord.name + " (" + datarecord.color + " EBC)"; - } - }); - $("#wf_select").on('select', function (event) { - if (event.args) { - 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; - fermentableData.f_supplier = datarecord.supplier; - fermentableData.f_type = datarecord.type; - fermentableData.f_cost = datarecord.cost; - fermentableData.f_yield = datarecord.yield; - fermentableData.f_color = datarecord.color; - fermentableData.f_coarse_fine_diff = datarecord.coarse_fine_diff; - fermentableData.f_moisture = datarecord.moisture; - fermentableData.f_diastatic_power = datarecord.diastatic_power; - fermentableData.f_protein = datarecord.protein; - fermentableData.f_max_in_batch = datarecord.max_in_batch; - fermentableData.f_graintype = datarecord.graintype; - fermentableData.f_dissolved_protein = datarecord.dissolved_protein; - fermentableData.f_recommend_mash = datarecord.recommend_mash; - fermentableData.f_add_after_boil = datarecord.add_after_boil; - fermentableData.f_di_ph = datarecord.di_ph; - fermentableData.f_acid_to_ph_57 = datarecord.acid_to_ph_57; - fermentableData.f_inventory = datarecord.inventory; - } - }); - $("#wf_amount").jqxNumberInput( Spin3dec ); - $('#wf_amount').on('change', function (event) { - console.log("amount changed: "+event.args.value); - $("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_amount', event.args.value); - fermentableData.f_amount = event.args.value; - if (! to_100) { - calcPercentages(); - calcFermentables(); - calcIBUs(); - calcMash(); - }; - }); - $("#wf_percentage").jqxNumberInput( Perc1dec ); - $("#wf_percentage").on('change', function (event) { - 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; - rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount; - if ((oldvalue != newvalue) && (rowscount > 1)) { - rowdata = $("#fermentableGrid").jqxGrid('getrowdata', fermentableRow); - if (rowdata.f_adjust_to_total_100) { - $("#wf_percentage").val(oldvalue); - } else { - diff = newvalue - oldvalue; - tw = 0; // total weight - for (i = 0; i < rowscount; 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. - 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++) { - 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); - $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_amount', namount); - } - } - calcFermentables(); - calcIBUs(); - calcMash(); - } else { - // Adjust all the rows. - nw = tw * diff / 100; - for (i = 0; i < rowscount; i++) { - rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i); - if (rowdata.f_added < 4) { - if (i == fermentableRow) { - 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 { - 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); - } - } else { - $("#fermentableGrid").jqxGrid('setcellvalue', i, 'f_percentage', 0); - } - } - calcFermentables(); - calcIBUs(); - calcMash(); - } - } - } - }); - $("#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 (event) { - if (fermentableData.f_adjust_to_total_100 == 0) { - if (to_100) { - // Reset other flag first. - 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); - } - } - } - $("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_adjust_to_total_100', 1); - calcFermentables(); - } - }); - $("#wf_adjust_to_total_100").on('unchecked', function (event) { - if (fermentableData.f_adjust_to_total_100 != 0) { - $("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_adjust_to_total_100', 0); - calcFermentables(); - } - }); - $("#wf_added").jqxDropDownList({ - theme: theme, - source: AddedAdapter, - valueMember: 'id', - displayMember: 'nl', - width: 180, - height: 23, - autoDropDownHeight: true, - dropDownVerticalAlignment: 'top' - }); - $("#wf_added").on('select', function (event) { - if (event.args) { - var index = event.args.index; - $("#fermentableGrid").jqxGrid('setcellvalue', fermentableRow, 'f_added', index); - calcFermentables(); - calcIBUs(); - calcMash(); - } - }); - - // Tab 4, Hops - $("#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 (text) { - var val = parseInt(text); - if (val < 20) - return 'Weinig'; - else if (val < 40) - return 'Matig'; - else if (val < 60) - return 'Redelijk'; - else if (val < 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 (text) { - var val = parseInt(text); - if (val < 20) - return 'Weinig'; - else if (val < 40) - return 'Matig'; - else if (val < 60) - return 'Redelijk'; - else if (val < 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.40 - }); - $("#HopReady").jqxButton({ template: "success", width: '90px', theme: theme }); - $("#HopReady").click(function () { - 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, - h_cost: hopData.h_cost, - h_type: hopData.h_type, - h_form: hopData.h_form, - h_useat: $("#wh_useat").val(), - h_time: hopData.h_time, - h_alpha: hopData.h_alpha, - h_beta: hopData.h_beta, - h_hsi: hopData.h_hsi, - h_humulene: hopData.h_humulene, - h_caryophyllene: hopData.h_caryophyllene, - h_cohumulone: hopData.h_cohumulone, - h_myrcene: hopData.h_myrcene, - h_total_oil: hopData.h_total_oil, - h_inventory: hopData.h_inventory, - h_avail: hopData.h_avail - }; - $("#hopGrid").jqxGrid('updaterow', rowID, row); - calcIBUs(); - }); - $("#wh_name").jqxInput({ theme: theme, width: 320, height: 23 }); - $("#wh_instock").jqxCheckBox({ theme: theme, height: 23 }); - $("#wh_instock").on('change', function (event) { - hopinstock = event.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 (index, label, value) { - var datarecord = hoplist.records[index]; - return datarecord.origin+ " - " + datarecord.name + " / " + HopFormData[datarecord.form].nl + " (" + datarecord.alpha + " % α)"; - } - }); - $("#wh_select").on('select', function (event) { - if (event.args) { - 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; - hopData.h_cost = datarecord.cost; - hopData.h_type = datarecord.type; - hopData.h_form = datarecord.form; - hopData.h_alpha = datarecord.alpha; - hopData.h_beta = datarecord.beta; - hopData.h_hsi = datarecord.hsi; - hopData.h_humulene = datarecord.humulene; - hopData.h_caryophyllene = datarecord.caryophyllene; - hopData.h_cohumulone = datarecord.cohumulone; - hopData.h_myrcene = datarecord.myrcene; - hopData.h_total_oil = datarecord.total_oil; - hopData.h_inventory = datarecord.inventory; - } - }); - $("#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 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() - ); - hopData.h_amount = amount; - $("#wh_ibu").val(ibu); - }); - $("#wh_ibu").jqxNumberInput( Show1dec ); - $("#wh_time").jqxNumberInput( PosInt ); - $("#wh_time").on('change', function (event) { - var ibu, newtime = parseFloat(event.args.value); - // Check limits and correct - if (hopData.h_useat == 2) { // Boil - if (newtime > parseFloat($("#boil_time").jqxNumberInput('decimal'))) { - newtime = parseFloat($("#boil_time").jqxNumberInput('decimal')); - $("#wh_time").val(newtime); - } - hopData.h_time = newtime; - } else if (hopData.h_useat == 4) { // Whirlpool - if (newtime > 120) { - newtime = 120; - $("#wh_time").val(newtime); - } - hopData.h_time = newtime; - } else if (hopData.h_useat == 5) { // Dry hop - if (newtime > 21) { - newtime = 21; - $("#wh_time").val(newtime); - } - hopData.h_time = newtime * 1440; - } - 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); - }); - $("#wh_useat").jqxDropDownList({ - theme: theme, - source: HopUseAdapter, - valueMember: 'id', - displayMember: 'nl', - width: 180, - height: 23, - autoDropDownHeight: true, - dropDownVerticalAlignment: 'top' - }); - $("#wh_useat").on('select', function (event) { - if (event.args) { - var index = event.args.index; - hopData.h_useat = index; - if ((index == 0) || (index == 1)) { // Mashhop or First wort hop - hopData.h_time = parseFloat(dataRecord.boil_time); - $("#wh_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); - $("#wh_time").val(hopData.h_time); - } else if (index == 3) { // Aroma - hopData.h_time = 0; - $("#wh_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); - $("#wh_time").val(0); - } else { // Boil, Whirlpool or Dry hop - $("#wh_time").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 }); - } - if (index == 5) // Dry hop - $("#wh_pmpt_time").html("Tijd in dagen"); - else - $("#wh_pmpt_time").html("Tijd in minuten"); - } - }); - - // Tab 5, Miscs - $("#popupMisc").jqxWindow({ - width: 800, - height: 275, - position: { x: 230, y: 100 }, - resizable: false, - theme: theme, - isModal: true, - autoOpen: false, - cancelButton: $("#MiscReady"), - modalOpacity: 0.40 - }); - $("#MiscReady").jqxButton({ template: "success", width: '90px', theme: theme }); - $("#MiscReady").click(function () { - var row, rowID = $("#miscGrid").jqxGrid('getrowid', miscRow); - console.log("MiscReady row:"+miscRow+" ID:"+rowID); - row = { - m_name: miscData.m_name, - m_amount: miscData.m_amount, - m_cost: miscData.m_cost, - m_type: miscData.m_type, - m_use_use: miscData.m_use_use, - m_time: miscData.m_time, - m_amount_is_weight: miscData.m_amount_is_weight, - m_inventory: miscData.m_inventory, - m_avail: miscData.m_avail - }; - $("#miscGrid").jqxGrid('updaterow', rowID, row); - calcMiscs(); - }); - $("#wm_name").jqxInput({ theme: theme, width: 320, height: 23 }); - $("#wm_instock").jqxCheckBox({ theme: theme, height: 23 }); - $("#wm_instock").on('change', function (event) { - miscinstock = event.args.checked; - misclist.dataBind(); - }); - $("#wm_select").jqxDropDownList({ - placeHolder: "Kies ingrediënt:", - theme: theme, - source: misclist, - displayMember: "name", - width: 150, - height: 23, - dropDownWidth: 500, - dropDownHeight: 500 - }); - $("#wm_select").on('select', function (event) { - if (event.args) { - 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; - miscData.m_type = datarecord.type; - miscData.m_use_use = datarecord.use_use; - miscData.m_amount_is_weight = datarecord.amount_is_weight; - miscData.m_inventory = datarecord.inventory; - } - }); - $("#wm_amount").jqxNumberInput( Spin2dec ); - $('#wm_amount').on('change', function (event) { - console.log("amount changed: "+event.args.value); - miscData.m_amount = parseFloat(event.args.value) / 1000; - }); - $("#wm_time").jqxNumberInput( PosInt ); - $("#wm_time").on('change', function (event) { - var newtime = parseFloat(event.args.value); - - if (miscData.m_use_use == 2) { // Boil - if (newtime > parseFloat($("#boil_time").jqxNumberInput('decimal'))) { - newtime = parseFloat($("#boil_time").jqxNumberInput('decimal')); - $("#wm_time").val(newtime); - } - miscData.m_time = newtime; - } else if ((miscData.m_use_use == 3) || (miscData.m_use_use == 4)) { // Primary or Secondary - if (newtime > 21) { - newtime = 21; - $("#wm_time").val(newtime); - } - miscData.m_time = newtime * 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 (event) { - if (event.args) { - var index = event.args.index; - miscData.m_use_use = index; - if ((index == 2) || (index == 3) || (index == 4)) { // Boil, Primary or Secondary - $("#wm_time").jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 }); - } else { - $("#wm_time").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); - $("#wm_time").val(0); - miscData.m_time = 0; - } - } - }); - - // Tab 6, Yeasts - $("#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.40 - }); - $("#YeastReady").jqxButton({ template: "success", width: '90px', theme: theme }); - $("#YeastReady").click(function () { - var row, rowID = $("#yeastGrid").jqxGrid('getrowid', yeastRow); - console.log("YeastReady row:"+yeastRow+" ID:"+rowID); - row = { - y_name: yeastData.y_name, - y_laboratory: yeastData.y_laboratory, - y_product_id: yeastData.y_product_id, - y_amount: yeastData.y_amount, - y_cost: yeastData.y_cost, - y_type: yeastData.y_type, - y_form: yeastData.y_form, - y_flocculation: yeastData.y_flocculation, - y_min_temperature: yeastData.y_min_temperature, - y_max_temperature: yeastData.y_max_temperature, - y_attenuation: yeastData.y_attenuation, - y_use: yeastData.y_use, - y_cells: yeastData.y_cells, - y_tolerance: yeastData.y_tolerance, - y_inventory: yeastData.y_inventory, - y_avail: yeastData.y_avail - }; - $("#yeastGrid").jqxGrid('updaterow', rowID, row); - calcFermentables(); - calcYeast(); - }); - $("#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 (event) { - yeastinstock = event.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 (index, label, value) { - var datarecord = yeastlist.records[index]; - return datarecord.laboratory+" "+datarecord.product_id+" "+datarecord.name; - } - }); - $("#wy_select").on('select', function (event) { - if (event.args) { - 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); - yeastData.y_name = datarecord.name; - yeastData.y_cost = datarecord.cost; - yeastData.y_type = datarecord.type; - yeastData.y_form = datarecord.form; - yeastData.y_laboratory = datarecord.laboratory; - yeastData.y_product_id = datarecord.product_id; - yeastData.y_min_temperature = datarecord.min_temperature; - yeastData.y_max_temperature = datarecord.max_temperature; - yeastData.y_flocculation = datarecord.flocculation; - yeastData.y_attenuation = datarecord.attenuation; - yeastData.y_cells = datarecord.cells; - yeastData.y_inventory = datarecord.inventory; - if (yeastData.y_form == 0) { - $("#wy_pmpt_amount").html("Pak(ken):"); - } else if (yeastData.y_form == 1) { - $("#wy_pmpt_amount").html("Gewicht gram:"); - } else { - $("#wy_pmpt_amount").html("Volume ml:"); - } - calcFermentables(); - calcYeast(); - } - }); - $("#wy_amount").jqxNumberInput( Spin1dec ); - $('#wy_amount').on('change', function (event) { - 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(); - }); - $("#wy_use").jqxDropDownList({ - theme: theme, - source: YeastUseAdapter, - valueMember: 'id', - displayMember: 'nl', - width: 180, - height: 23, - autoDropDownHeight: true, - dropDownVerticalAlignment: 'top' - }); - $("#wy_use").on('select', function (event) { - if (event.args) { - var index = event.args.index; - yeastData.y_use = index; - calcFermentables(); - calcYeast(); - } - }); - for (i = 1; i < 5; i++) { - $("#prop"+i+"_type").jqxDropDownList({ - theme: theme, - source: StarterTypeAdapter, - valueMember: 'id', - displayMember: 'nl', - width: 120, - height: 23, - autoDropDownHeight: true - }); - $("#prop"+i+"_type").hide(); - $("#prop"+i+"_volume").jqxNumberInput( Spin3dec ); - $("#prop"+i+"_volume").hide(); - $("#prop"+i+"_irate").jqxNumberInput( Show1dec ); - $("#prop"+i+"_irate").hide(); - $("#prop"+i+"_ncells").jqxNumberInput( Show1dec ); - $("#prop"+i+"_ncells").hide(); - $("#prop"+i+"_tcells").jqxNumberInput( Show1dec ); - $("#prop"+i+"_tcells").hide(); - $("#prop"+i+"_growf").jqxNumberInput( Show2dec ); - $("#prop"+i+"_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 }); - - // Tab 7, Mashing - $("#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 (event) { - if (event.args) { - var data, datarecord, rowIDs, rows, i, row = {}, index = event.args.index; - // First delete all current steps - 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 - datarecord = mashlist.records[index]; - $("#mash_name").val(datarecord.name); - for (i = 0; i < datarecord.steps.length; i++) { - data = datarecord.steps[i]; - row["step_name"] = data.step_name; - row["step_type"] = data.step_type; - // For now, but this must be smarter. - if (mash_infuse == 0 && dataRecord.w1_amount > 0) - mash_infuse = dataRecord.w1_amount; - if (i == 0) - row["step_infuse_amount"] = mash_infuse; - else - row["step_infuse_amount"] = 0; - if (mashkg > 0) - row['step_thickness'] = parseFloat(mash_infuse / mashkg); - else - row['step_thickness'] = 0; - row["step_temp"] = data.step_temp; - row["end_temp"] = data.end_temp; - row["step_time"] = data.step_time; - row["ramp_time"] = data.ramp_time; - $("#mashGrid").jqxGrid('addrow', null, row); - } - } - }); - $("#popupMash").jqxWindow({ - width: 800, - height: 350, - position: { x: 230, y: 100 }, - resizable: false, - theme: theme, - isModal: true, - autoOpen: false, - cancelButton: $("#MashReady"), - modalOpacity: 0.40 - }); - $("#MashReady").jqxButton({ template: "success", width: '90px', theme: theme }); - $("#MashReady").click(function () { - calcMash(); - }); - $("#wstep_name").jqxInput({ theme: theme, width: 320, height: 23 }); - $("#wstep_name").on('change', function (event) { - var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.step_name = event.args.value; - }); - $("#wstep_type").jqxDropDownList({ - theme: theme, - source: MashStepTypeAdapter, - valueMember: 'id', - displayMember: 'nl', - width: 180, - height: 23, - autoDropDownHeight: true - }); - $("#wstep_type").on('select', function (event) { - if (event.args) { - 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(); - $("#wstep_pmpt").show(); - } else { - rowdata.step_infuse_amount = 0; - $("#wstep_infuse_amount").hide(); - $("#wstep_pmpt").hide(); - } - mash_infuse = 0; - 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); - } - } - }); - $("#wstep_temp").jqxNumberInput( Spin1dec ); - $('#wstep_temp').on('change', function (event) { - var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.step_temp = parseFloat(event.args.value); - }); - $("#wend_temp").jqxNumberInput( Spin1dec ); - $('#wend_temp').on('change', function (event) { - var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.end_temp = parseFloat(event.args.value); - }); - $("#wstep_time").jqxNumberInput( PosInt ); - $('#wstep_time').on('change', function (event) { - var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.step_time = parseFloat(event.args.value); - }); - $("#wramp_time").jqxNumberInput( PosInt ); - $('#wramp_time').on('change', function (event) { - var rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.ramp_time = parseFloat(event.args.value); - }); - $("#wstep_infuse_amount").jqxNumberInput( Spin1dec ); - $('#wstep_infuse_amount').on('change', function (event) { - var row, i, rows, rowdata = $("#mashGrid").jqxGrid('getrowdata', mashRow); - rowdata.step_infuse_amount = parseFloat(event.args.value); - mash_infuse = 0; - 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); - } - 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); - }); - - // Tab 8, Water - $("#tgt_bu").jqxNumberInput( Show2wat ); - $("#tgt_cl_so4").jqxNumberInput( Show1wat ); - $("#got_cl_so4").jqxNumberInput( Show1wat ); - - // Water source 1 - $("#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 (event) { - if (event.args) { - 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; - $("#w1_sulfate").val(datarecord.sulfate); - dataRecord.w1_sulfate = datarecord.sulfate; - $("#w1_chloride").val(datarecord.chloride); - dataRecord.w1_chloride = datarecord.chloride; - $("#w1_sodium").val(datarecord.sodium); - dataRecord.w1_sodium = datarecord.sodium; - $("#w1_magnesium").val(datarecord.magnesium); - dataRecord.w1_magnesium = datarecord.magnesium; - $("#w1_total_alkalinity").val(datarecord.total_alkalinity); - dataRecord.w1_total_alkalinity = datarecord.total_alkalinity; - $("#w1_ph").val(datarecord.ph); - dataRecord.w1_ph = datarecord.ph; - $("#w1_cost").val(datarecord.cost); - dataRecord.w1_cost = datarecord.cost; - calcWater(); - } - }); - $("#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 ); - // Water source 2 - $("#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 (event) { - if (event.args) { - 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; - $("#w2_sulfate").val(datarecord.sulfate); - dataRecord.w2_sulfate = datarecord.sulfate; - $("#w2_chloride").val(datarecord.chloride); - dataRecord.w2_chloride = datarecord.chloride; - $("#w2_sodium").val(datarecord.sodium); - dataRecord.w2_sodium = datarecord.sodium; - $("#w2_magnesium").val(datarecord.magnesium); - dataRecord.w2_magnesium = datarecord.magnesium; - $("#w2_total_alkalinity").val(datarecord.total_alkalinity); - dataRecord.w2_total_alkalinity = datarecord.total_alkalinity; - $("#w2_ph").val(datarecord.ph); - dataRecord.w2_ph = datarecord.ph; - $("#w2_cost").val(datarecord.cost); - dataRecord.w2_cost = datarecord.cost; - $("#w2_amount").jqxNumberInput({ max: 100000, readOnly: false }); // Set high max to enable the spinbuttons. - calcWater(); - } - }); - $("#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 ); - // Water mixed - $("#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 ); - // Water treated - $("#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 ); - // Water target profile - $("#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 (event) { - if (event.args) { - 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); - $("#pr_sodium").val(datarecord.sodium); - $("#pr_magnesium").val(datarecord.magnesium); - $("#pr_total_alkalinity").val(datarecord.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 ); - - // Water agents - $("#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 water - $("#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' }); - - // Tab 9, Brewday - $("#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 (event) { calcStage(); }); - $("#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 (event) { calcStage(); }); - $("#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 ); - // est_preboil_ph - $("#brew_aboil_ph").jqxTooltip({ content: 'De gemeten pH na het koken.' }); - $("#brew_aboil_ph").jqxNumberInput( SpinpH ); - // est_aboil_ph - $("#brew_mash_sg").jqxTooltip({ content: 'Het bereikte SG na het maischen.' }); - $("#brew_mash_sg").jqxNumberInput( SGopts ); - $("#brew_mash_sg").on('valueChanged', function () { calcMashEfficiency(); }); - $("#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 (event) { - dataRecord.brew_preboil_sg = event.args.value; - calcEfficiencyBeforeBoil(); - }); - $("#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 (event) { - dataRecord.brew_aboil_sg = event.args.value; - calcEfficiencyAfterBoil(); - calcFermentables(); - calcIBUs(); - }); - $("#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 (event) { - dataRecord.brew_preboil_volume = event.args.value; - calcEfficiencyBeforeBoil(); - }); - $("#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 (event) { - dataRecord.brew_aboil_volume = event.args.value; - calcEfficiencyAfterBoil(); - calcFermentables(); - calcIBUs(); - }); - $("#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 () { - // Open log in a new tab. - window.open("log_brew.php?code=" + dataRecord.code + "&name=" + dataRecord.name); - }); - - // Tab 10, Fermentation - // Note, fermentation temps changes must do calcCarbonation() - $("#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 °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 (event) { calcStage(); }); - $("#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 °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 (event) { calcStage(); }); - $("#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 °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 () { - // Open log in a new tab. - var url="log_fermentation.php?code=" + dataRecord.code + "&name=" + dataRecord.name; - window.open(url); - }); - - // Tab 11, Packaging - // TODO: high gravity packaging, extra water and recalc abv, color and ibu. - $("#package_date").jqxTooltip({ content: 'De verpakkings datum van dit bier.' }); - $("#package_date").jqxDateTimeInput( Dateopts ); - $('#package_date').on('close', function (event) { calcStage(); }); - $('#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 (event) { - if (event.args) { - 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; - } - } - row["f_name"] = datarecord.name; - row["f_origin"] = datarecord.origin; - row["f_supplier"] = datarecord.supplier; - row["f_amount"] = parseFloat($("#bottle_priming_total").jqxNumberInput('decimal')) / 1000; - row["f_cost"] = datarecord.cost; - row["f_type"] = datarecord.type; - row["f_yield"] = datarecord.yield; - row["f_color"] = datarecord.color; - row["f_coarse_fine_diff"] = datarecord.coarse_fine_diff; - row["f_moisture"] = datarecord.moisture; - row["f_diastatic_power"] = datarecord.diastatic_power; - row["f_protein"] = datarecord.protein; - row["f_max_in_batch"] = datarecord.max_in_batch; - row["f_graintype"] = datarecord.graintype; - row["f_added"] = 4; - row["f_dissolved_protein"] = datarecord.dissolved_protein; - row["f_recommend_mash"] = datarecord.recommend_mash; - row["f_add_after_boil"] = 1; - row["f_adjust_to_total_100"] = 0; - row["f_percentage"] = 0; - row["f_di_ph"] = datarecord.di_ph; - row["f_acid_to_ph_57"] = datarecord.acid_to_ph_57; - row["f_inventory"] = datarecord.inventory; - if (editrow >= 0) { - rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow); - $('#fermentableGrid').jqxGrid('updaterow', rowID, row); - } else { - $("#fermentableGrid").jqxGrid('addrow', null, row); - } - calcCarbonation(); - } - }); - $("#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 (event) { - if (event.args) { - 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; - } - } - row["f_name"] = datarecord.name; - row["f_origin"] = datarecord.origin; - row["f_supplier"] = datarecord.supplier; - row["f_amount"] = parseFloat($("#keg_priming_total").jqxNumberInput('decimal')) / 1000; - row["f_cost"] = datarecord.cost; - row["f_type"] = datarecord.type; - row["f_yield"] = datarecord.yield; - row["f_color"] = datarecord.color; - row["f_coarse_fine_diff"] = datarecord.coarse_fine_diff; - row["f_moisture"] = datarecord.moisture; - row["f_diastatic_power"] = datarecord.diastatic_power; - row["f_protein"] = datarecord.protein; - row["f_max_in_batch"] = datarecord.max_in_batch; - row["f_graintype"] = datarecord.graintype; - row["f_added"] = 5; - row["f_dissolved_protein"] = datarecord.dissolved_protein; - row["f_recommend_mash"] = datarecord.recommend_mash; - row["f_add_after_boil"] = 1; - row["f_adjust_to_total_100"] = 0; - row["f_percentage"] = 0; - row["f_di_ph"] = datarecord.di_ph; - row["f_acid_to_ph_57"] = datarecord.acid_to_ph_57; - row["f_inventory"] = datarecord.inventory; - if (editrow >= 0) { - rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow); - $('#fermentableGrid').jqxGrid('updaterow', rowID, row); - } else { - $("#fermentableGrid").jqxGrid('addrow', null, row); - } - calcCarbonation(); - } - }); - $("#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 ); - - // Tab 12, Tasting - $("#taste_date").jqxTooltip({ content: 'De proef datum van dit bier.' }); - $("#taste_date").jqxDateTimeInput( Dateopts ); - $('#taste_date').on('close', function (event) { calcStage(); }); - $("#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' - }); - - // Buttons below - $("#Export").jqxButton({ template: "info", width: '80px', theme: theme }); - $("#Export").bind('click', function () { - saveRecord(); - var url="prod_export.php?record=" + my_record + "&return=" + my_return + "&select=" + my_select + - "&code=" + dataRecord.code + "&name=" + dataRecord.name; - window.location.href = url; - }); - - $("#Delete").jqxButton({ template: "danger", width: '80px', theme: theme }); - $("#Delete").bind('click', function () { - // Open a popup to confirm this action. - $('#eventWindow').jqxWindow('open'); - $("#delOk").click(function () { - var data = "delete=true&" + $.param({ uuid: dataRecord.uuid }); - $.ajax({ - dataType: 'json', - url: url, - cache: false, - data: data, - type: "POST", - success: function (data, status, xhr) { - // delete command is executed. - window.location.href = my_return; - }, - error: function (jqXHR, textStatus, errorThrown) { - } - }); - }); - }); - - $("#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 () { - saveRecord(); - window.location.href = my_return; - }); - createDelElements(); + $('#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) { + dataRecord.starter_type = event.args.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) { + dataRecord.prop1_type = event.args.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) { + dataRecord.prop2_type = event.args.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) { + dataRecord.prop3_type = event.args.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) { + dataRecord.prop4_type = event.args.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) { + dataRecord.sparge_source = event.args.index; + calcSparge(); + } + }); + $('#sparge_acid_type').on('change', function(event) { + if (event.args) { + dataRecord.sparge_acid_type = event.args.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'); + } + }); + }; + + dataAdapter.dataBind(); + + // initialize the input fields. + // Tab 1, Algemeen + $('#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(event) { + if (dataRecord.stage >= 10) { + dataRecord.locked = 1; + dataRecord.stage = 11; + calcStage(); + } + }); + $('#locked').on('unchecked', function(event) { + if (dataRecord.stage >= 10) { + dataRecord.locked = 0; + dataRecord.stage = 10; + calcStage(); + } + }); + $('#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); + + // Tab 2, Equipment + $('#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); + + // Tab 3, Fermentables + $('#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(text) { + return (Math.round(parseInt(text) * 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(text) { + return (Math.round(parseInt(text) * 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(text) { + return (Math.round(parseInt(text) * 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(text) { + return (parseInt(text) * 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.40 + }); + $('#FermentableReady').jqxButton({ template: 'success', width: '90px', theme: theme }); + $('#FermentableReady').click(function() { + var row, rowID = $('#fermentableGrid').jqxGrid('getrowid', fermentableRow); + console.log('FermentableReady row:' + fermentableRow + ' ID:' + rowID); + row = { + f_name: fermentableData.f_name, + f_origin: fermentableData.f_origin, + f_supplier: fermentableData.f_supplier, + f_amount: fermentableData.f_amount, + f_cost: fermentableData.f_cost, + f_type: fermentableData.f_type, + f_yield: fermentableData.f_yield, + f_color: fermentableData.f_color, + f_coarse_fine_diff: fermentableData.f_coarse_fine_diff, + f_moisture: fermentableData.f_moisture, + f_diastatic_power: fermentableData.f_diastatic_power, + f_protein: fermentableData.f_protein, + f_max_in_batch: fermentableData.f_max_in_batch, + f_graintype: fermentableData.f_graintype, + f_added: fermentableData.f_added, + f_dissolved_protein: fermentableData.f_dissolved_protein, + f_recommend_mash: fermentableData.f_recommend_mash, + f_add_after_boil: fermentableData.f_add_after_boil, + f_adjust_to_total_100: fermentableData.f_adjust_to_total_100, + f_percentage: fermentableData.f_percentage, + f_di_ph: fermentableData.f_di_ph, + f_acid_to_ph_57: fermentableData.f_acid_to_ph_57, + f_inventory: fermentableData.f_inventory, + f_avail: fermentableData.f_avail + }; + $('#fermentableGrid').jqxGrid('updaterow', rowID, row); + calcPercentages(); + calcFermentables(); + calcIBUs(); + calcMash(); + // Waters: yes there is impact. + }); + $('#wf_name').jqxInput({ theme: theme, width: 320, height: 23 }); + $('#wf_instock').jqxCheckBox({ theme: theme, height: 23 }); + $('#wf_instock').on('change', function(event) { + fermentableinstock = event.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(index, label, value) { + var datarecord = fermentablelist.records[index]; + return datarecord.supplier + ' / ' + datarecord.name + ' (' + datarecord.color + ' EBC)'; + } + }); + $('#wf_select').on('select', function(event) { + if (event.args) { + 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; + fermentableData.f_supplier = datarecord.supplier; + fermentableData.f_type = datarecord.type; + fermentableData.f_cost = datarecord.cost; + fermentableData.f_yield = datarecord.yield; + fermentableData.f_color = datarecord.color; + fermentableData.f_coarse_fine_diff = datarecord.coarse_fine_diff; + fermentableData.f_moisture = datarecord.moisture; + fermentableData.f_diastatic_power = datarecord.diastatic_power; + fermentableData.f_protein = datarecord.protein; + fermentableData.f_max_in_batch = datarecord.max_in_batch; + fermentableData.f_graintype = datarecord.graintype; + fermentableData.f_dissolved_protein = datarecord.dissolved_protein; + fermentableData.f_recommend_mash = datarecord.recommend_mash; + fermentableData.f_add_after_boil = datarecord.add_after_boil; + fermentableData.f_di_ph = datarecord.di_ph; + fermentableData.f_acid_to_ph_57 = datarecord.acid_to_ph_57; + fermentableData.f_inventory = datarecord.inventory; + } + }); + $('#wf_amount').jqxNumberInput(Spin3dec); + $('#wf_amount').on('change', function(event) { + console.log('amount changed: ' + event.args.value); + $('#fermentableGrid').jqxGrid('setcellvalue', fermentableRow, 'f_amount', event.args.value); + fermentableData.f_amount = event.args.value; + if (! to_100) { + calcPercentages(); + calcFermentables(); + calcIBUs(); + calcMash(); + } + }); + $('#wf_percentage').jqxNumberInput(Perc1dec); + $('#wf_percentage').on('change', function(event) { + 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; + rowscount = $('#fermentableGrid').jqxGrid('getdatainformation').rowscount; + if ((oldvalue != newvalue) && (rowscount > 1)) { + rowdata = $('#fermentableGrid').jqxGrid('getrowdata', fermentableRow); + if (rowdata.f_adjust_to_total_100) { + $('#wf_percentage').val(oldvalue); + } else { + diff = newvalue - oldvalue; + tw = 0; // total weight + for (i = 0; i < rowscount; 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. + damount = Math.round(tw * diff * 10) / 1000; + rowdata = $('#fermentableGrid').jqxGrid('getrowdata', fermentableRow); + namount = Round(rowdata.f_amount + damount, 3); + $('#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++) { + 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); + $('#fermentableGrid').jqxGrid('setcellvalue', i, 'f_amount', namount); + } + } + calcFermentables(); + calcIBUs(); + calcMash(); + } else { + // Adjust all the rows. + nw = tw * diff / 100; + for (i = 0; i < rowscount; i++) { + rowdata = $('#fermentableGrid').jqxGrid('getrowdata', i); + if (rowdata.f_added < 4) { + if (i == fermentableRow) { + 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 { + 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); + } + } else { + $('#fermentableGrid').jqxGrid('setcellvalue', i, 'f_percentage', 0); + } + } + calcFermentables(); + calcIBUs(); + calcMash(); + } + } + } + }); + $('#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(event) { + if (fermentableData.f_adjust_to_total_100 == 0) { + if (to_100) { + // Reset other flag first. + 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); + } + } + } + $('#fermentableGrid').jqxGrid('setcellvalue', fermentableRow, 'f_adjust_to_total_100', 1); + calcFermentables(); + } + }); + $('#wf_adjust_to_total_100').on('unchecked', function(event) { + if (fermentableData.f_adjust_to_total_100 != 0) { + $('#fermentableGrid').jqxGrid('setcellvalue', fermentableRow, 'f_adjust_to_total_100', 0); + calcFermentables(); + } + }); + $('#wf_added').jqxDropDownList({ + theme: theme, + source: AddedAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true, + dropDownVerticalAlignment: 'top' + }); + $('#wf_added').on('select', function(event) { + if (event.args) { + var index = event.args.index; + $('#fermentableGrid').jqxGrid('setcellvalue', fermentableRow, 'f_added', index); + calcFermentables(); + calcIBUs(); + calcMash(); + } + }); + + // Tab 4, Hops + $('#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(text) { + var val = parseInt(text); + if (val < 20) + return 'Weinig'; + else if (val < 40) + return 'Matig'; + else if (val < 60) + return 'Redelijk'; + else if (val < 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(text) { + var val = parseInt(text); + if (val < 20) + return 'Weinig'; + else if (val < 40) + return 'Matig'; + else if (val < 60) + return 'Redelijk'; + else if (val < 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.40 + }); + $('#HopReady').jqxButton({ template: 'success', width: '90px', theme: theme }); + $('#HopReady').click(function() { + 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, + h_cost: hopData.h_cost, + h_type: hopData.h_type, + h_form: hopData.h_form, + h_useat: $('#wh_useat').val(), + h_time: hopData.h_time, + h_alpha: hopData.h_alpha, + h_beta: hopData.h_beta, + h_hsi: hopData.h_hsi, + h_humulene: hopData.h_humulene, + h_caryophyllene: hopData.h_caryophyllene, + h_cohumulone: hopData.h_cohumulone, + h_myrcene: hopData.h_myrcene, + h_total_oil: hopData.h_total_oil, + h_inventory: hopData.h_inventory, + h_avail: hopData.h_avail + }; + $('#hopGrid').jqxGrid('updaterow', rowID, row); + calcIBUs(); + }); + $('#wh_name').jqxInput({ theme: theme, width: 320, height: 23 }); + $('#wh_instock').jqxCheckBox({ theme: theme, height: 23 }); + $('#wh_instock').on('change', function(event) { + hopinstock = event.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(index, label, value) { + var datarecord = hoplist.records[index]; + return datarecord.origin + ' - ' + datarecord.name + ' / ' + HopFormData[datarecord.form].nl + ' (' + datarecord.alpha + ' % α)'; + } + }); + $('#wh_select').on('select', function(event) { + if (event.args) { + 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; + hopData.h_cost = datarecord.cost; + hopData.h_type = datarecord.type; + hopData.h_form = datarecord.form; + hopData.h_alpha = datarecord.alpha; + hopData.h_beta = datarecord.beta; + hopData.h_hsi = datarecord.hsi; + hopData.h_humulene = datarecord.humulene; + hopData.h_caryophyllene = datarecord.caryophyllene; + hopData.h_cohumulone = datarecord.cohumulone; + hopData.h_myrcene = datarecord.myrcene; + hopData.h_total_oil = datarecord.total_oil; + hopData.h_inventory = datarecord.inventory; + } + }); + $('#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 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() + ); + hopData.h_amount = amount; + $('#wh_ibu').val(ibu); + }); + $('#wh_ibu').jqxNumberInput(Show1dec); + $('#wh_time').jqxNumberInput(PosInt); + $('#wh_time').on('change', function(event) { + var ibu, newtime = parseFloat(event.args.value); + // Check limits and correct + if (hopData.h_useat == 2) { // Boil + if (newtime > parseFloat($('#boil_time').jqxNumberInput('decimal'))) { + newtime = parseFloat($('#boil_time').jqxNumberInput('decimal')); + $('#wh_time').val(newtime); + } + hopData.h_time = newtime; + } else if (hopData.h_useat == 4) { // Whirlpool + if (newtime > 120) { + newtime = 120; + $('#wh_time').val(newtime); + } + hopData.h_time = newtime; + } else if (hopData.h_useat == 5) { // Dry hop + if (newtime > 21) { + newtime = 21; + $('#wh_time').val(newtime); + } + hopData.h_time = newtime * 1440; + } + 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); + }); + $('#wh_useat').jqxDropDownList({ + theme: theme, + source: HopUseAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true, + dropDownVerticalAlignment: 'top' + }); + $('#wh_useat').on('select', function(event) { + if (event.args) { + var index = event.args.index; + hopData.h_useat = index; + if ((index == 0) || (index == 1)) { // Mashhop or First wort hop + hopData.h_time = parseFloat(dataRecord.boil_time); + $('#wh_time').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); + $('#wh_time').val(hopData.h_time); + } else if (index == 3) { // Aroma + hopData.h_time = 0; + $('#wh_time').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); + $('#wh_time').val(0); + } else { // Boil, Whirlpool or Dry hop + $('#wh_time').jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 }); + } + if (index == 5) // Dry hop + $('#wh_pmpt_time').html('Tijd in dagen'); + else + $('#wh_pmpt_time').html('Tijd in minuten'); + } + }); + + // Tab 5, Miscs + $('#popupMisc').jqxWindow({ + width: 800, + height: 275, + position: { x: 230, y: 100 }, + resizable: false, + theme: theme, + isModal: true, + autoOpen: false, + cancelButton: $('#MiscReady'), + modalOpacity: 0.40 + }); + $('#MiscReady').jqxButton({ template: 'success', width: '90px', theme: theme }); + $('#MiscReady').click(function() { + var row, rowID = $('#miscGrid').jqxGrid('getrowid', miscRow); + console.log('MiscReady row:' + miscRow + ' ID:' + rowID); + row = { + m_name: miscData.m_name, + m_amount: miscData.m_amount, + m_cost: miscData.m_cost, + m_type: miscData.m_type, + m_use_use: miscData.m_use_use, + m_time: miscData.m_time, + m_amount_is_weight: miscData.m_amount_is_weight, + m_inventory: miscData.m_inventory, + m_avail: miscData.m_avail + }; + $('#miscGrid').jqxGrid('updaterow', rowID, row); + calcMiscs(); + }); + $('#wm_name').jqxInput({ theme: theme, width: 320, height: 23 }); + $('#wm_instock').jqxCheckBox({ theme: theme, height: 23 }); + $('#wm_instock').on('change', function(event) { + miscinstock = event.args.checked; + misclist.dataBind(); + }); + $('#wm_select').jqxDropDownList({ + placeHolder: 'Kies ingrediënt:', + theme: theme, + source: misclist, + displayMember: 'name', + width: 150, + height: 23, + dropDownWidth: 500, + dropDownHeight: 500 + }); + $('#wm_select').on('select', function(event) { + if (event.args) { + 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; + miscData.m_type = datarecord.type; + miscData.m_use_use = datarecord.use_use; + miscData.m_amount_is_weight = datarecord.amount_is_weight; + miscData.m_inventory = datarecord.inventory; + } + }); + $('#wm_amount').jqxNumberInput(Spin2dec); + $('#wm_amount').on('change', function(event) { + console.log('amount changed: ' + event.args.value); + miscData.m_amount = parseFloat(event.args.value) / 1000; + }); + $('#wm_time').jqxNumberInput(PosInt); + $('#wm_time').on('change', function(event) { + var newtime = parseFloat(event.args.value); + + if (miscData.m_use_use == 2) { // Boil + if (newtime > parseFloat($('#boil_time').jqxNumberInput('decimal'))) { + newtime = parseFloat($('#boil_time').jqxNumberInput('decimal')); + $('#wm_time').val(newtime); + } + miscData.m_time = newtime; + } else if ((miscData.m_use_use == 3) || (miscData.m_use_use == 4)) { // Primary or Secondary + if (newtime > 21) { + newtime = 21; + $('#wm_time').val(newtime); + } + miscData.m_time = newtime * 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(event) { + if (event.args) { + var index = event.args.index; + miscData.m_use_use = index; + if ((index == 2) || (index == 3) || (index == 4)) { // Boil, Primary or Secondary + $('#wm_time').jqxNumberInput({ spinButtons: true, readOnly: false, width: 110 }); + } else { + $('#wm_time').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); + $('#wm_time').val(0); + miscData.m_time = 0; + } + } + }); + + // Tab 6, Yeasts + $('#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.40 + }); + $('#YeastReady').jqxButton({ template: 'success', width: '90px', theme: theme }); + $('#YeastReady').click(function() { + var row, rowID = $('#yeastGrid').jqxGrid('getrowid', yeastRow); + console.log('YeastReady row:' + yeastRow + ' ID:' + rowID); + row = { + y_name: yeastData.y_name, + y_laboratory: yeastData.y_laboratory, + y_product_id: yeastData.y_product_id, + y_amount: yeastData.y_amount, + y_cost: yeastData.y_cost, + y_type: yeastData.y_type, + y_form: yeastData.y_form, + y_flocculation: yeastData.y_flocculation, + y_min_temperature: yeastData.y_min_temperature, + y_max_temperature: yeastData.y_max_temperature, + y_attenuation: yeastData.y_attenuation, + y_use: yeastData.y_use, + y_cells: yeastData.y_cells, + y_tolerance: yeastData.y_tolerance, + y_inventory: yeastData.y_inventory, + y_avail: yeastData.y_avail + }; + $('#yeastGrid').jqxGrid('updaterow', rowID, row); + calcFermentables(); + calcYeast(); + }); + $('#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(event) { + yeastinstock = event.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(index, label, value) { + var datarecord = yeastlist.records[index]; + return datarecord.laboratory + ' ' + datarecord.product_id + ' ' + datarecord.name; + } + }); + $('#wy_select').on('select', function(event) { + if (event.args) { + 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); + yeastData.y_name = datarecord.name; + yeastData.y_cost = datarecord.cost; + yeastData.y_type = datarecord.type; + yeastData.y_form = datarecord.form; + yeastData.y_laboratory = datarecord.laboratory; + yeastData.y_product_id = datarecord.product_id; + yeastData.y_min_temperature = datarecord.min_temperature; + yeastData.y_max_temperature = datarecord.max_temperature; + yeastData.y_flocculation = datarecord.flocculation; + yeastData.y_attenuation = datarecord.attenuation; + yeastData.y_cells = datarecord.cells; + yeastData.y_inventory = datarecord.inventory; + if (yeastData.y_form == 0) { + $('#wy_pmpt_amount').html('Pak(ken):'); + } else if (yeastData.y_form == 1) { + $('#wy_pmpt_amount').html('Gewicht gram:'); + } else { + $('#wy_pmpt_amount').html('Volume ml:'); + } + calcFermentables(); + calcYeast(); + } + }); + $('#wy_amount').jqxNumberInput(Spin1dec); + $('#wy_amount').on('change', function(event) { + 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(); + }); + $('#wy_use').jqxDropDownList({ + theme: theme, + source: YeastUseAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true, + dropDownVerticalAlignment: 'top' + }); + $('#wy_use').on('select', function(event) { + if (event.args) { + var index = event.args.index; + yeastData.y_use = index; + calcFermentables(); + calcYeast(); + } + }); + for (i = 1; i < 5; i++) { + $('#prop' + i + '_type').jqxDropDownList({ + theme: theme, + source: StarterTypeAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 120, + height: 23, + autoDropDownHeight: true + }); + $('#prop' + i + '_type').hide(); + $('#prop' + i + '_volume').jqxNumberInput(Spin3dec); + $('#prop' + i + '_volume').hide(); + $('#prop' + i + '_irate').jqxNumberInput(Show1dec); + $('#prop' + i + '_irate').hide(); + $('#prop' + i + '_ncells').jqxNumberInput(Show1dec); + $('#prop' + i + '_ncells').hide(); + $('#prop' + i + '_tcells').jqxNumberInput(Show1dec); + $('#prop' + i + '_tcells').hide(); + $('#prop' + i + '_growf').jqxNumberInput(Show2dec); + $('#prop' + i + '_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 }); + + // Tab 7, Mashing + $('#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(event) { + if (event.args) { + var data, datarecord, rowIDs, rows, i, row, index = event.args.index; + // First delete all current steps + 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 + datarecord = mashlist.records[index]; + $('#mash_name').val(datarecord.name); + for (i = 0; i < datarecord.steps.length; i++) { + data = datarecord.steps[i]; + row = {}; + row['step_name'] = data.step_name; + row['step_type'] = data.step_type; + // For now, but this must be smarter. + if (mash_infuse == 0 && dataRecord.w1_amount > 0) + mash_infuse = dataRecord.w1_amount; + if (i == 0) + row['step_infuse_amount'] = mash_infuse; + else + row['step_infuse_amount'] = 0; + if (mashkg > 0) + row['step_thickness'] = parseFloat(mash_infuse / mashkg); + else + row['step_thickness'] = 0; + row['step_temp'] = data.step_temp; + row['end_temp'] = data.end_temp; + row['step_time'] = data.step_time; + row['ramp_time'] = data.ramp_time; + $('#mashGrid').jqxGrid('addrow', null, row); + } + } + }); + $('#popupMash').jqxWindow({ + width: 800, + height: 350, + position: { x: 230, y: 100 }, + resizable: false, + theme: theme, + isModal: true, + autoOpen: false, + cancelButton: $('#MashReady'), + modalOpacity: 0.40 + }); + $('#MashReady').jqxButton({ template: 'success', width: '90px', theme: theme }); + $('#MashReady').click(function() { + calcMash(); + }); + $('#wstep_name').jqxInput({ theme: theme, width: 320, height: 23 }); + $('#wstep_name').on('change', function(event) { + var rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.step_name = event.args.value; + }); + $('#wstep_type').jqxDropDownList({ + theme: theme, + source: MashStepTypeAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true + }); + $('#wstep_type').on('select', function(event) { + if (event.args) { + 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(); + $('#wstep_pmpt').show(); + } else { + rowdata.step_infuse_amount = 0; + $('#wstep_infuse_amount').hide(); + $('#wstep_pmpt').hide(); + } + mash_infuse = 0; + 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); + } + } + }); + $('#wstep_temp').jqxNumberInput(Spin1dec); + $('#wstep_temp').on('change', function(event) { + var rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.step_temp = parseFloat(event.args.value); + }); + $('#wend_temp').jqxNumberInput(Spin1dec); + $('#wend_temp').on('change', function(event) { + var rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.end_temp = parseFloat(event.args.value); + }); + $('#wstep_time').jqxNumberInput(PosInt); + $('#wstep_time').on('change', function(event) { + var rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.step_time = parseFloat(event.args.value); + }); + $('#wramp_time').jqxNumberInput(PosInt); + $('#wramp_time').on('change', function(event) { + var rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.ramp_time = parseFloat(event.args.value); + }); + $('#wstep_infuse_amount').jqxNumberInput(Spin1dec); + $('#wstep_infuse_amount').on('change', function(event) { + var row, i, rows, rowdata = $('#mashGrid').jqxGrid('getrowdata', mashRow); + rowdata.step_infuse_amount = parseFloat(event.args.value); + mash_infuse = 0; + 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); + } + 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); + }); + + // Tab 8, Water + $('#tgt_bu').jqxNumberInput(Show2wat); + $('#tgt_cl_so4').jqxNumberInput(Show1wat); + $('#got_cl_so4').jqxNumberInput(Show1wat); + + // Water source 1 + $('#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(event) { + if (event.args) { + 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; + $('#w1_sulfate').val(datarecord.sulfate); + dataRecord.w1_sulfate = datarecord.sulfate; + $('#w1_chloride').val(datarecord.chloride); + dataRecord.w1_chloride = datarecord.chloride; + $('#w1_sodium').val(datarecord.sodium); + dataRecord.w1_sodium = datarecord.sodium; + $('#w1_magnesium').val(datarecord.magnesium); + dataRecord.w1_magnesium = datarecord.magnesium; + $('#w1_total_alkalinity').val(datarecord.total_alkalinity); + dataRecord.w1_total_alkalinity = datarecord.total_alkalinity; + $('#w1_ph').val(datarecord.ph); + dataRecord.w1_ph = datarecord.ph; + $('#w1_cost').val(datarecord.cost); + dataRecord.w1_cost = datarecord.cost; + calcWater(); + } + }); + $('#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); + // Water source 2 + $('#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(event) { + if (event.args) { + 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; + $('#w2_sulfate').val(datarecord.sulfate); + dataRecord.w2_sulfate = datarecord.sulfate; + $('#w2_chloride').val(datarecord.chloride); + dataRecord.w2_chloride = datarecord.chloride; + $('#w2_sodium').val(datarecord.sodium); + dataRecord.w2_sodium = datarecord.sodium; + $('#w2_magnesium').val(datarecord.magnesium); + dataRecord.w2_magnesium = datarecord.magnesium; + $('#w2_total_alkalinity').val(datarecord.total_alkalinity); + dataRecord.w2_total_alkalinity = datarecord.total_alkalinity; + $('#w2_ph').val(datarecord.ph); + dataRecord.w2_ph = datarecord.ph; + $('#w2_cost').val(datarecord.cost); + dataRecord.w2_cost = datarecord.cost; + $('#w2_amount').jqxNumberInput({ max: 100000, readOnly: false }); // Set high max to enable the spinbuttons. + calcWater(); + } + }); + $('#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); + // Water mixed + $('#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); + // Water treated + $('#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); + // Water target profile + $('#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(event) { + if (event.args) { + 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); + $('#pr_sodium').val(datarecord.sodium); + $('#pr_magnesium').val(datarecord.magnesium); + $('#pr_total_alkalinity').val(datarecord.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); + + // Water agents + $('#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 water + $('#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' }); + + // Tab 9, Brewday + $('#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(event) { calcStage(); }); + $('#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(event) { calcStage(); }); + $('#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); + // est_preboil_ph + $('#brew_aboil_ph').jqxTooltip({ content: 'De gemeten pH na het koken.' }); + $('#brew_aboil_ph').jqxNumberInput(SpinpH); + // est_aboil_ph + $('#brew_mash_sg').jqxTooltip({ content: 'Het bereikte SG na het maischen.' }); + $('#brew_mash_sg').jqxNumberInput(SGopts); + $('#brew_mash_sg').on('valueChanged', function() { calcMashEfficiency(); }); + $('#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(event) { + dataRecord.brew_preboil_sg = event.args.value; + calcEfficiencyBeforeBoil(); + }); + $('#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(event) { + dataRecord.brew_aboil_sg = event.args.value; + calcEfficiencyAfterBoil(); + calcFermentables(); + calcIBUs(); + }); + $('#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(event) { + dataRecord.brew_preboil_volume = event.args.value; + calcEfficiencyBeforeBoil(); + }); + $('#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(event) { + dataRecord.brew_aboil_volume = event.args.value; + calcEfficiencyAfterBoil(); + calcFermentables(); + calcIBUs(); + }); + $('#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() { + // Open log in a new tab. + window.open('log_brew.php?code=' + dataRecord.code + '&name=' + dataRecord.name); + }); + + // Tab 10, Fermentation + // Note, fermentation temps changes must do calcCarbonation() + $('#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 °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(event) { calcStage(); }); + $('#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 °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(event) { calcStage(); }); + $('#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 °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() { + // Open log in a new tab. + window.open('log_fermentation.php?code=' + dataRecord.code + '&name=' + dataRecord.name); + }); + + // Tab 11, Packaging + // TODO: high gravity packaging, extra water and recalc abv, color and ibu. + $('#package_date').jqxTooltip({ content: 'De verpakkings datum van dit bier.' }); + $('#package_date').jqxDateTimeInput(Dateopts); + $('#package_date').on('close', function(event) { calcStage(); }); + $('#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(event) { + if (event.args) { + 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; + } + } + row['f_name'] = datarecord.name; + row['f_origin'] = datarecord.origin; + row['f_supplier'] = datarecord.supplier; + row['f_amount'] = parseFloat($('#bottle_priming_total').jqxNumberInput('decimal')) / 1000; + row['f_cost'] = datarecord.cost; + row['f_type'] = datarecord.type; + row['f_yield'] = datarecord.yield; + row['f_color'] = datarecord.color; + row['f_coarse_fine_diff'] = datarecord.coarse_fine_diff; + row['f_moisture'] = datarecord.moisture; + row['f_diastatic_power'] = datarecord.diastatic_power; + row['f_protein'] = datarecord.protein; + row['f_max_in_batch'] = datarecord.max_in_batch; + row['f_graintype'] = datarecord.graintype; + row['f_added'] = 4; + row['f_dissolved_protein'] = datarecord.dissolved_protein; + row['f_recommend_mash'] = datarecord.recommend_mash; + row['f_add_after_boil'] = 1; + row['f_adjust_to_total_100'] = 0; + row['f_percentage'] = 0; + row['f_di_ph'] = datarecord.di_ph; + row['f_acid_to_ph_57'] = datarecord.acid_to_ph_57; + row['f_inventory'] = datarecord.inventory; + if (editrow >= 0) { + rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow); + $('#fermentableGrid').jqxGrid('updaterow', rowID, row); + } else { + $('#fermentableGrid').jqxGrid('addrow', null, row); + } + calcCarbonation(); + } + }); + $('#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(event) { + if (event.args) { + 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; + } + } + row['f_name'] = datarecord.name; + row['f_origin'] = datarecord.origin; + row['f_supplier'] = datarecord.supplier; + row['f_amount'] = parseFloat($('#keg_priming_total').jqxNumberInput('decimal')) / 1000; + row['f_cost'] = datarecord.cost; + row['f_type'] = datarecord.type; + row['f_yield'] = datarecord.yield; + row['f_color'] = datarecord.color; + row['f_coarse_fine_diff'] = datarecord.coarse_fine_diff; + row['f_moisture'] = datarecord.moisture; + row['f_diastatic_power'] = datarecord.diastatic_power; + row['f_protein'] = datarecord.protein; + row['f_max_in_batch'] = datarecord.max_in_batch; + row['f_graintype'] = datarecord.graintype; + row['f_added'] = 5; + row['f_dissolved_protein'] = datarecord.dissolved_protein; + row['f_recommend_mash'] = datarecord.recommend_mash; + row['f_add_after_boil'] = 1; + row['f_adjust_to_total_100'] = 0; + row['f_percentage'] = 0; + row['f_di_ph'] = datarecord.di_ph; + row['f_acid_to_ph_57'] = datarecord.acid_to_ph_57; + row['f_inventory'] = datarecord.inventory; + if (editrow >= 0) { + rowID = $('#fermentableGrid').jqxGrid('getrowid', editrow); + $('#fermentableGrid').jqxGrid('updaterow', rowID, row); + } else { + $('#fermentableGrid').jqxGrid('addrow', null, row); + } + calcCarbonation(); + } + }); + $('#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); + + // Tab 12, Tasting + $('#taste_date').jqxTooltip({ content: 'De proef datum van dit bier.' }); + $('#taste_date').jqxDateTimeInput(Dateopts); + $('#taste_date').on('close', function(event) { calcStage(); }); + $('#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' + }); + + // Buttons below + $('#Export').jqxButton({ template: 'info', width: '80px', theme: theme }); + $('#Export').bind('click', function() { + saveRecord(); + window.location.href = + 'prod_export.php?record=' + my_record + '&return=' + my_return + '&select=' + my_select + '&code=' + dataRecord.code + '&name=' + dataRecord.name; + }); + + $('#Delete').jqxButton({ template: 'danger', width: '80px', theme: theme }); + $('#Delete').bind('click', function() { + // Open a popup to confirm this action. + $('#eventWindow').jqxWindow('open'); + $('#delOk').click(function() { + var data = 'delete=true&' + $.param({ uuid: dataRecord.uuid }); + $.ajax({ + dataType: 'json', + url: url, + cache: false, + data: data, + type: 'POST', + success: function(data, status, xhr) { + // delete command is executed. + window.location.href = my_return; + }, + error: function(jqXHR, textStatus, errorThrown) { + } + }); + }); + }); + + $('#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() { + saveRecord(); + window.location.href = my_return; + }); + createDelElements(); });