var BrewingLib = {}; BrewingLib.e = 2.718281828459045; BrewingLib.eToTheX = Math.exp; function Hops(c, j, a, b, g, e, h, f, d) { this.name = c; this.type = j; this.aa = a; this.use = b; this.amount = g; this.time = e; this.ibu = ""; this.utilization = ""; this.aau = ""; this.units = h; this.useramount = g; this.userutilization = parseFloat(f) / 100; if (this.userutilization > 1) { this.userutilization = 1 } if (this.userutilization < 0) { this.userutilization = 0 } this.usertemp = d; if (h == "g") { this.amount = gramsToOunces(this.amount) } this.aau = this.amount * this.aa } function Fermentable(b, l, k, g, f, d, e, c, j, h, a) { this.name = b; this.lovibond = l; this.ppg = k; this.amount = g; this.mashable = f; this.category = d; this.lateaddition = e; this.id = c; this.group = j; this.units = h; this.useramount = g; this.domIndex = a; this.amount = convertAmountToPounds(this.amount, this.units) } function calculateABV(b, a) { return rounddecimal((b - a) * (125 * 1.05), 10) } function calculateABVAlternate(d, a) { var b = 76.08 * (d - a) / (1.775 - d); var c = b * (a / 0.794); return rounddecimal(c, 10) } function calculateFG(j, h, e, d) { if (!isNumber(j)) { return 0 } if (j <= 0) { return 0 } if (!isNumber(h)) { return 0 } if (h <= 0) { return 0 } var b = ((j - 1) * (1 - h)) + 1; if (e) { for (var g = 0; g < e.length; g++) { if (e[g] != undefined && (e[g].name.toLowerCase().indexOf("lactose") >= 0 || e[g].name.toLowerCase().indexOf("maltodextrin") >= 0)) { var a = []; a.push(e[g]); var c = calculateOG(a, 100, d, true) - 1; if (c < 0) { c = 0 } if (c > 500) { c = 500 } var f = c * h; b = b + f } } } return b } function calculateOG(d, e, b, a) { var j = 0; var c = 0; var h = 0; for (var f = 0; f < d.length; f++) { if (d[f] != undefined) { if (a || (!a && !d[f].lateaddition)) { var g = d[f].ppg * d[f].amount; if (d[f].mashable == true) { c = c + g } else { j = j + g } } } } if (j > 0 || c > 0) { var g = c * (e / 100); g = g + (j); h = ((g / b) * 0.001) + 1 } return h } function calculateMCUtotal(e, d) { if (!isNumber(d)) { return 0 } if (d <= 0) { return 0 } if (e.length == 0) { return 0 } var a = 0; for (var c = 0; c < e.length; c++) { if (e[c] != undefined) { var b = calculateMCU(e[c], d); a = a + b } } return a } function calculateMCU(a, b) { if (!isNumber(b)) { return 0 } if (b <= 0) { return 0 } if (!a) { return 0 } return a.lovibond * (a.amount / b) } function calculateSRMMorey(c, b) { if (!isNumber(b)) { return 0 } if (b <= 0) { return 0 } if (c.length == 0) { return 0 } var d = 0; var a = calculateMCUtotal(c, b); d = 1.4922 * Math.pow(a, 0.6859); if (d >= 40) { d = 40 } return d } function calculateSRMDaniels(c, b) { if (!isNumber(b)) { return 0 } if (b <= 0) { return 0 } if (c.length == 0) { return 0 } var d = 0; var a = calculateMCUtotal(c, b); d = (a * 0.2) + 8.4; if (d >= 40) { d = 40 } return d } function calculateSRMMosher(c, b) { if (!isNumber(b)) { return 0 } if (b <= 0) { return 0 } if (c.length == 0) { return 0 } var d = 0; var a = calculateMCUtotal(c, b); d = (a * 0.3) + 4.7; if (d >= 40) { d = 40 } return d } function srmToECB(a) { return 1.97 * a } function calculateBoilGravity(b, a, c) { if (!isNumber(b)) { return 0 } if (!isNumber(a)) { return 0 } if (!isNumber(c)) { return 0 } if (a <= 0) { return 0 } if (c <= 0) { return 0 } if (b <= 0) { return 0 } return ((b / a) * (c - 1) + 1) } function getTotalAmount(c) { var b = 0; for (var a = 0; a < c.length; a++) { if (c[a] != undefined && c[a].amount > 0) { b = b + parseFloat(c[a].amount) } } return b } function getIBUTotal(a) { var b = 0; for (var c = 0; c < a.length; c++) { if (a[c] != "") { if (parseFloat(a[c].ibu) > 0) { b = b + a[c].ibu } } } return b } function IBUTinsethArray(b, e, f, a) { var c = []; for (var d = 0; d < b.length; d++) { if (b[d] != undefined) { c[d] = IBUTinseth(b[d], e, f, a) } } return c } function IBURagerArray(b, e, f, a) { var c = []; for (var d = 0; d < b.length; d++) { if (b[d] != undefined) { c[d] = IBURager(b[d], e, f, a) } } return c } function IBUTinseth(g, j, c, k) { var a = new Hops(g.name, g.type, g.aa, g.use, g.useramount, g.time, g.units, g.userutilization, g.usertemp); if (a.use == "Dry Hop") { a.ibu = 0; a.utilization = 0; return a } var b = parseFloat(a.time); if (isNaN(b)) { b = 0 } if (a.use == "First Wort") { b = 20 } if (a.use == "Mash") { b = 5 } if (a.use == "Boil" || a.use == "Aroma") { b = b + k } var d = 0; var e = 0; if (a.use == "Whirlpool" || a.use == "Hopback") { e = g.userutilization } else { var h = 1.65 * Math.pow(0.000125, (j - 1)); var f = (1 - Math.pow(BrewingLib.e, (-0.04 * b))) / 4.15; e = h * f; if (a.type == "Pellet") { e = e * 1.1 } } d = e * (((a.aa / 100) * a.amount * 7490) / c); a.utilization = e; a.ibu = d; return a } function IBURager(g, h, c, j) { var a = new Hops(g.name, g.type, g.aa, g.use, g.useramount, g.time, g.units, g.userutilization, g.usertemp); if (a.use == "Dry Hop") { a.ibu = 0; a.utilization = 0; return a } var b = parseFloat(a.time); if (isNaN(b)) { b = 0 } if (a.use == "First Wort") { b = 20 } if (a.use == "Mash") { b = 5 } if (a.use == "Boil" || a.use == "Aroma") { b = b + j } var e = 0; if (h >= 1.05) { e = (h - 1.05) / 0.2 } var d = 0; var f = 0; if (a.use == "Whirlpool" || a.use == "Hopback") { f = g.userutilization } else { f = IBURagerUtilization(b) } d = (a.amount * f * (a.aa / 100) * 7490) / (c * (1 + e)); a.utilization = f; a.ibu = d; return a } function sinh(a) { return (BrewingLib.eToTheX(a) - BrewingLib.eToTheX(-a)) / 2 } function cosh(a) { return (BrewingLib.eToTheX(a) + BrewingLib.eToTheX(-a)) / 2 } function hyperbolictangent(a) { return sinh(a) / cosh(a) } function IBURagerUtilization(a) { if (a <= 5) { return 0.01 * a } return (18.11 + (13.86 * hyperbolictangent((a - 31.32) / 18.27))) / 100 } function calculateStyleMatches(k, j, f, e, l, b) { if (k == "-") { k = 0 } if (j == "-") { j = 0 } if (f == "-") { f = 0 } if (e == "-") { e = 0 } k = parseFloat(k); j = parseFloat(j); f = parseFloat(f); e = parseFloat(e); var c = []; var h = 0; var d = l.length; for (i = 1; i < d; i++) { var a = l[i].oglow; var g = l[i].oghigh; if (b == "plato") { a = convertGravityToPlato(a); g = convertGravityToPlato(g) } if (k >= a && k <= g && j >= l[i].abvlow && j <= l[i].abvhigh && f >= l[i].ibulow && f <= l[i].ibuhigh && e >= l[i].srmlow && e <= l[i].srmhigh) { c[h] = l[i]; h++ } } return c } function getStyleNamesAsString(c) { if (!c) { return "-" } var a = ""; var b = c.length; for (i = 0; i < b; i++) { if (a != "") { a = a + ", " } a = a + c[i].name } if (a == "") { a = "-" } return a } function computeCaloriesPer12oz(a, e) { if (!isNumber(a)) { a = 0 } if (a <= 0) { return 0 } if (!isNumber(e)) { e = 0 } if (e <= -12) { return 0 } var b = (0.1808 * a) + (0.8192 * e); var c = (a - b) / (2.0665 - (0.010665 * a)); var d = convertPlatoToGravity(e); var f = ((6.9 * c) + 4 * (b - 0.1)) * d * 3.55; return f } function isNumber(b) { if (b === null) { return false } if (b === 0) { return true } if (b == "") { return false } if (isNaN(b)) { return false } var a; for (a = 0; a < b.length; a++) { var d = b.charAt(a); if (!((d >= "0") && (d <= "9")) && d != ".") { return false } } return true } function rounddecimal(e, c) { if (e === null) { return false } if (e === "") { return false } if (isNaN(e)) { return false } if (c < 0) { return false } if (c > 10) { return false } var a = Math.round(e * Math.pow(10, c)) / Math.pow(10, c); var d = (a + "").lastIndexOf("."); if (d == 0) { a = "0" + a; d = 1 } if (c != 0) { d = (a + "").lastIndexOf("."); if (d == -1 || d == a.length - 1) { a += "." } } d = (a + "").lastIndexOf("."); var b = ((a + "").length - 1) - d; if (b < c) { for (x = b; x < c; x++) { a += "0" } } return a } function roundClosestFraction(d, b) { if (d === null) { return false } if (d === "") { return false } if (isNaN(d)) { return false } var c = Math.ceil(d * b) / b; var a = Math.floor(d * b) / b; if ((d - a) > (c - d)) { return c } else { return a } } function hasFermentable(b) { if (b.length == 0) { return false } for (var a = 0; a < b.length; a++) { if (b[a] != undefined) { if (b[a].amount > 0 && b[a].ppg > 0 && b[a].lovibond >= 0) { return true } } } return false } function hasHop(a) { if (a.length == 0) { return false } for (var b = 0; b < a.length; b++) { if (a[b] != undefined) { if (a[b].amount > 0 && a[b].aa > 0 && ((isNumber(a[b].time) && a[b].time >= 0) || a[b].use == "First Wort" || a[b].use == "Mash")) { return true } } } return false } function calculateHydrometerCorrection(c, a) { c = parseFloat(c); a = parseFloat(a); if (c < 0 || c > 71) { return 0 } if (a < 10 || a > 24) { return 0 } var f = []; var h = []; for (var d = 0; d <= 71; d++) { f[d] = d } var e = 15 - Math.round(a); var g = 0; h[0] = -0.0009; h[1] = -0.0009; h[2] = -0.0009; h[3] = -0.0009; h[4] = -0.0009; h[5] = -0.0009; h[6] = -0.0008; h[7] = -0.0008; h[8] = -0.0007; h[9] = -0.0007; h[10] = -0.0006; h[11] = -0.0005; h[12] = -0.0004; h[13] = -0.0003; h[14] = -0.0001; h[15] = 0; h[16] = 0.0002; h[17] = 0.0003; h[18] = 0.0005; h[19] = 0.0007; h[20] = 0.0009; h[21] = 0.0011; h[22] = 0.0013; h[23] = 0.0016; h[24] = 0.0018; h[25] = 0.0021; h[26] = 0.0023; h[27] = 0.0026; h[28] = 0.0029; h[29] = 0.0032; h[30] = 0.0035; h[31] = 0.0038; h[32] = 0.0041; h[33] = 0.0044; h[34] = 0.0047; h[35] = 0.0051; h[36] = 0.0054; h[37] = 0.0058; h[38] = 0.0061; h[39] = 0.0065; h[40] = 0.0069; h[41] = 0.0073; h[42] = 0.0077; h[43] = 0.0081; h[44] = 0.0085; h[45] = 0.0089; h[46] = 0.0093; h[47] = 0.0097; h[48] = 0.0102; h[49] = 0.0106; h[50] = 0.011; h[51] = 0.0114; h[52] = 0.0118; h[53] = 0.0122; h[54] = 0.0126; h[55] = 0.013; h[56] = 0.0135; h[57] = 0.014; h[58] = 0.0145; h[59] = 0.015; h[60] = 0.0155; h[61] = 0.016; h[62] = 0.0165; h[63] = 0.0171; h[64] = 0.0177; h[65] = 0.0183; h[66] = 0.0189; h[67] = 0.0195; h[68] = 0.0201; h[69] = 0.0207; h[70] = 0.0213; h[71] = 0.0219; h[72] = 0.0225; h[73] = 0.0231; h[74] = 0.0237; h[75] = 0.0243; h[76] = 0.0249; h[77] = 0.0255; h[78] = 0.0261; h[79] = 0.0267; h[80] = 0.0273; for (d = 0; d < f.length; d++) { if (f[d] == c) { var b = e; if ((d + b) < 0) { b = 0 } g = h[d + b]; break } if (c >= f[d] && c < f[d + 1]) { var b = e; if ((d + b) < 0) { b = 0 } g = (h[d + b] + h[d + b + 1]) / 2; break } } return g } function litersToGallons(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 0.264172052 * a } function gallonsToLiters(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 3.78541178 * a } function gallonsToQuarts(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 4 * a } function quartsToGallons(a) { a = parseFloat(a); if (isNaN(a)) { return false } return a / 4 } function ouncesToGrams(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 28.3495231 * a } function gramsToOunces(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 0.0352739619 * a } function celsiusToFahrenheit(a) { a = parseFloat(a); if (a === "") { return false } if (isNaN(a)) { return false } return (9 / 5) * a + 32 } function fahrenheitToCelsius(a) { a = parseFloat(a); if (a === "") { return false } if (isNaN(a)) { return false } return (5 / 9) * (a - 32) } function kilogramsToPounds(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 2.20462262 * a } function poundsToKilograms(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 0.45359237 * a } function litersToQuarts(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 1.05668821 * a } function quartsToLiters(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 0.946352946 * a } function convertAmountToPounds(b, a) { if (a == "g") { b = kilogramsToPounds(b / 1000) } if (a == "kg") { b = kilogramsToPounds(b) } if (a == "oz") { b = b / 16 } return b } function convertPlatoToGravity(a) { return (a / (258.6 - ((a / 258.2) * 227.1))) + 1 } function convertGravityToPlato(b, c) { if (!c) { c = 1 } var a = (-1 * 616.868) + (1111.14 * b) - (630.272 * Math.pow(b, 2)) + (135.997 * Math.pow(b, 3)); return rounddecimal(a, c) } function getFGFromBrix(a, b) { return 1 - 0.0044993 * a + 0.011774 * b + 0.00027581 * Math.pow(a, 2) - 0.0012717 * Math.pow(b, 2) - 0.00000728 * Math.pow(a, 3) + 0.000063293 * Math.pow(b, 3) } function mashThicknessQtLbToLKg(a) { a = parseFloat(a); if (isNaN(a)) { return false } return 2.0867541 * a } function mashThicknessLKgToQtLb(a) { a = parseFloat(a); if (isNaN(a)) { return false } return a / 2.0867541 } var srm = []; srm[0] = "#FFF4D4"; srm[1] = "#FFE699"; srm[2] = "#FFD878"; srm[3] = "#FFCA5A"; srm[4] = "#FFBF42"; srm[5] = "#FBB123"; srm[6] = "#F8A600"; srm[7] = "#F39C00"; srm[8] = "#EA8F00"; srm[9] = "#E58500"; srm[10] = "#DE7C00"; srm[11] = "#D77200"; srm[12] = "#CF6900"; srm[13] = "#CB6200"; srm[14] = "#C35900"; srm[15] = "#BB5100"; srm[16] = "#B54C00"; srm[17] = "#B04500"; srm[18] = "#A63E00"; srm[19] = "#A13700"; srm[20] = "#9B3200"; srm[21] = "#952D00"; srm[22] = "#8E2900"; srm[23] = "#882300"; srm[24] = "#821E00"; srm[25] = "#7B1A00"; srm[26] = "#771900"; srm[27] = "#701400"; srm[28] = "#6A0E00"; srm[29] = "#660D00"; srm[30] = "#5E0B00"; srm[31] = "#5A0A02"; srm[32] = "#600903"; srm[33] = "#520907"; srm[34] = "#4C0505"; srm[35] = "#470606"; srm[36] = "#420607"; srm[37] = "#3D0708"; srm[38] = "#370607"; srm[39] = "#2D0607"; srm[40] = "#1F0506"; srm[41] = "#000000"; var waterprofiles = []; waterprofiles[0] = { name: "--- Water Profile ---", Ca: "", Mg: "", SO4: "", Na: "", Cl: "", HCO3: "" }; var bjcp = []; bjcp[0] = { code: "1A", category: "Affumicata / Invecchiata in Legno", name: "Affumicata Classica", oglow: 1.05, oghigh: 1.057, fglow: 1.012, fghigh: 1.016, abvlow: 4.8, abvhigh: 6, ibulow: 20, ibuhigh: 30, srmlow: 12, srmhigh: 22 }; bjcp[1] = { code: "1B", category: "Affumicata / Invecchiata in Legno", name: "Altri Stili Affumicata", oglow: 1.035, oghigh: 1.15, fglow: 1.005, fghigh: 1.03, abvlow: 4.8, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[2] = { code: "1C", category: "Affumicata / Invecchiata in Legno", name: "Invecchiata in legno", oglow: 1.035, oghigh: 1.15, fglow: 1.005, fghigh: 1.03, abvlow: 6, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[3] = { code: "2A", category: "Ale Acidule", name: "Flanders Brown Ale/Oud Bruin", oglow: 1.04, oghigh: 1.074, fglow: 1.008, fghigh: 1.012, abvlow: 4, abvhigh: 8, ibulow: 20, ibuhigh: 25, srmlow: 15, srmhigh: 22 }; bjcp[4] = { code: "2B", category: "Ale Acidule", name: "Fruit Lambic", oglow: 1.04, oghigh: 1.06, fglow: 1, fghigh: 1.01, abvlow: 5, abvhigh: 7, ibulow: 0, ibuhigh: 10, srmlow: 3, srmhigh: 7 }; bjcp[5] = { code: "2C", category: "Ale Acidule", name: "Straight (Unblended) Lambic", oglow: 1.04, oghigh: 1.054, fglow: 1.001, fghigh: 1.01, abvlow: 5, abvhigh: 6.5, ibulow: 0, ibuhigh: 10, srmlow: 3, srmhigh: 7 }; bjcp[6] = { code: "2D", category: "Ale Acidule", name: "Flanders Red Ale", oglow: 1.048, oghigh: 1.057, fglow: 1.002, fghigh: 1.012, abvlow: 4.6, abvhigh: 6.5, ibulow: 10, ibuhigh: 25, srmlow: 10, srmhigh: 16 }; bjcp[7] = { code: "2E", category: "Ale Acidule", name: "Weisse Berlino", oglow: 1.028, oghigh: 1.032, fglow: 1.003, fghigh: 1.006, abvlow: 2.8, abvhigh: 3.8, ibulow: 3, ibuhigh: 8, srmlow: 2, srmhigh: 3 }; bjcp[8] = { code: "2F", category: "Ale Acidule", name: "Gueuze", oglow: 1.04, oghigh: 1.06, fglow: 1, fghigh: 1.006, abvlow: 5, abvhigh: 8, ibulow: 0, ibuhigh: 10, srmlow: 3, srmhigh: 7 }; bjcp[9] = { code: "3A", category: "Ale Americana", name: "Pale Ale Americana", oglow: 1.045, oghigh: 1.06, fglow: 1.01, fghigh: 1.015, abvlow: 4.5, abvhigh: 6.2, ibulow: 30, ibuhigh: 45, srmlow: 5, srmhigh: 14 }; bjcp[10] = { code: "3B", category: "Ale Americana", name: "Ale Ambrata Americana", oglow: 1.045, oghigh: 1.06, fglow: 1.01, fghigh: 1.015, abvlow: 4.5, abvhigh: 6.2, ibulow: 25, ibuhigh: 40, srmlow: 10, srmhigh: 17 }; bjcp[11] = { code: "3C", category: "Ale Americana", name: "Ale Scura Americana", oglow: 1.045, oghigh: 1.06, fglow: 1.01, fghigh: 1.016, abvlow: 4.3, abvhigh: 6.2, ibulow: 20, ibuhigh: 40, srmlow: 18, srmhigh: 35 }; bjcp[12] = { code: "4A", category: "Ale Belga e Francese", name: "Ale Belga Speciale", oglow: 1.035, oghigh: 1.2, fglow: 1, fghigh: 1.03, abvlow: 3.2, abvhigh: 18, ibulow: 10, ibuhigh: 120, srmlow: 2, srmhigh: 40 }; bjcp[13] = { code: "4B", category: "Ale Belga e Francese", name: "Saison", oglow: 1.048, oghigh: 1.065, fglow: 1.002, fghigh: 1.012, abvlow: 5, abvhigh: 7, ibulow: 20, ibuhigh: 35, srmlow: 5, srmhigh: 14 }; bjcp[14] = { code: "4C", category: "Ale Belga e Francese", name: "Pale Ale Belga", oglow: 1.048, oghigh: 1.054, fglow: 1.01, fghigh: 1.014, abvlow: 4.8, abvhigh: 5.5, ibulow: 20, ibuhigh: 30, srmlow: 8, srmhigh: 14 }; bjcp[15] = { code: "4D", category: "Ale Belga e Francese", name: "Witbier", oglow: 1.044, oghigh: 1.052, fglow: 1.008, fghigh: 1.012, abvlow: 4.5, abvhigh: 5.5, ibulow: 10, ibuhigh: 20, srmlow: 2, srmhigh: 4 }; bjcp[16] = { code: "4E", category: "Ale Belga e Francese", name: "Bière de Garde", oglow: 1.06, oghigh: 1.08, fglow: 1.008, fghigh: 1.016, abvlow: 6, abvhigh: 8.5, ibulow: 18, ibuhigh: 28, srmlow: 6, srmhigh: 19 }; bjcp[17] = { code: "5A", category: "Ale Scozzese e Irlandese", name: "Scozzese Heavy 70/-", oglow: 1.035, oghigh: 1.04, fglow: 1.01, fghigh: 1.015, abvlow: 3.2, abvhigh: 3.9, ibulow: 10, ibuhigh: 25, srmlow: 9, srmhigh: 17 }; bjcp[18] = { code: "5B", category: "Ale Scozzese e Irlandese", name: "Scozzese Export 80/-", oglow: 1.04, oghigh: 1.054, fglow: 1.01, fghigh: 1.016, abvlow: 3.9, abvhigh: 5, ibulow: 15, ibuhigh: 30, srmlow: 9, srmhigh: 17 }; bjcp[19] = { code: "5C", category: "Ale Scozzese e Irlandese", name: "Strong Scotch Ale", oglow: 1.07, oghigh: 1.13, fglow: 1.018, fghigh: 1.056, abvlow: 6.5, abvhigh: 10, ibulow: 17, ibuhigh: 35, srmlow: 14, srmhigh: 25 }; bjcp[20] = { code: "5D", category: "Ale Scozzese e Irlandese", name: "Scozzese Chiara 60/-", oglow: 1.03, oghigh: 1.035, fglow: 1.01, fghigh: 1.013, abvlow: 2.5, abvhigh: 3.2, ibulow: 10, ibuhigh: 20, srmlow: 9, srmhigh: 17 }; bjcp[21] = { code: "5E", category: "Ale Scozzese e Irlandese", name: "Ale Rossa Irlandese", oglow: 1.044, oghigh: 1.06, fglow: 1.01, fghigh: 1.014, abvlow: 4, abvhigh: 6, ibulow: 17, ibuhigh: 28, srmlow: 9, srmhigh: 18 }; bjcp[22] = { code: "6A", category: "Ale Scura Inglese", name: "Mild", oglow: 1.03, oghigh: 1.038, fglow: 1.008, fghigh: 1.013, abvlow: 2.8, abvhigh: 4.5, ibulow: 10, ibuhigh: 25, srmlow: 12, srmhigh: 25 }; bjcp[23] = { code: "6B", category: "Ale Scura Inglese", name: "Southern English Brown", oglow: 1.033, oghigh: 1.042, fglow: 1.011, fghigh: 1.014, abvlow: 2.8, abvhigh: 4.1, ibulow: 12, ibuhigh: 20, srmlow: 19, srmhigh: 35 }; bjcp[24] = { code: "6C", category: "Ale Scura Inglese", name: "Northern English Brown", oglow: 1.04, oghigh: 1.052, fglow: 1.008, fghigh: 1.013, abvlow: 4.2, abvhigh: 5.4, ibulow: 20, ibuhigh: 30, srmlow: 12, srmhigh: 22 }; bjcp[25] = { code: "7A", category: "Aromatizzata con spezie, erbe o vegetali ", name: "Speciale speziata di Natale", oglow: 1.035, oghigh: 1.15, fglow: 1.005, fghigh: 1.03, abvlow: 6, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[26] = { code: "7B", category: "Aromatizzata con spezie, erbe o vegetali ", name: "Aromatizzata con spezie, erbe o vegetali ", oglow: 1.035, oghigh: 1.15, fglow: 1.005, fghigh: 1.03, abvlow: 3.2, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[27] = { code: "8A", category: "Birra Ambrata Ibrida", name: "Californiana", oglow: 1.048, oghigh: 1.054, fglow: 1.011, fghigh: 1.014, abvlow: 4.5, abvhigh: 5.5, ibulow: 30, ibuhigh: 45, srmlow: 10, srmhigh: 14 }; bjcp[28] = { code: "8B", category: "Birra Ambrata Ibrida", name: "North German Altbier", oglow: 1.046, oghigh: 1.054, fglow: 1.01, fghigh: 1.015, abvlow: 4.5, abvhigh: 5.2, ibulow: 25, ibuhigh: 40, srmlow: 13, srmhigh: 19 }; bjcp[29] = { code: "8C", category: "Birra Ambrata Ibrida", name: "Dusseldorf Altbier", oglow: 1.046, oghigh: 1.054, fglow: 1.01, fghigh: 1.015, abvlow: 4.5, abvhigh: 5.2, ibulow: 35, ibuhigh: 50, srmlow: 11, srmhigh: 17 }; bjcp[30] = { code: "9A", category: "Birra Chiara Ibrida", name: "Cream Ale", oglow: 1.042, oghigh: 1.055, fglow: 1.006, fghigh: 1.012, abvlow: 4.2, abvhigh: 5.6, ibulow: 15, ibuhigh: 20, srmlow: 2.5, srmhigh: 5 }; bjcp[31] = { code: "9B", category: "Birra Chiara Ibrida", name: "Blonde Ale", oglow: 1.038, oghigh: 1.054, fglow: 1.008, fghigh: 1.013, abvlow: 3.8, abvhigh: 5.5, ibulow: 15, ibuhigh: 28, srmlow: 3, srmhigh: 6 }; bjcp[32] = { code: "9C", category: "Birra Chiara Ibrida", name: "Kolsch", oglow: 1.044, oghigh: 1.05, fglow: 1.007, fghigh: 1.011, abvlow: 4.4, abvhigh: 5.2, ibulow: 20, ibuhigh: 30, srmlow: 3.5, srmhigh: 5 }; bjcp[33] = { code: "9D", category: "Birra Chiara Ibrida", name: "Birra Americana - di Frumento o di Segale", oglow: 1.04, oghigh: 1.055, fglow: 1.008, fghigh: 1.013, abvlow: 4, abvhigh: 5.5, ibulow: 15, ibuhigh: 30, srmlow: 3, srmhigh: 6 }; bjcp[34] = { code: "10A", category: "Bock", name: "Maibock/Helles Bock", oglow: 1.064, oghigh: 1.072, fglow: 1.011, fghigh: 1.018, abvlow: 6.3, abvhigh: 7.4, ibulow: 23, ibuhigh: 35, srmlow: 6, srmhigh: 11 }; bjcp[35] = { code: "10B", category: "Bock", name: "Bock Tradizionale", oglow: 1.064, oghigh: 1.072, fglow: 1.013, fghigh: 1.019, abvlow: 6.3, abvhigh: 7.2, ibulow: 20, ibuhigh: 27, srmlow: 14, srmhigh: 22 }; bjcp[36] = { code: "10C", category: "Bock", name: "Doppelbock", oglow: 1.072, oghigh: 1.112, fglow: 1.016, fghigh: 1.024, abvlow: 7, abvhigh: 10, ibulow: 16, ibuhigh: 26, srmlow: 6, srmhigh: 25 }; bjcp[37] = { code: "10D", category: "Bock", name: "Eisbock", oglow: 1.078, oghigh: 1.12, fglow: 1.02, fghigh: 1.035, abvlow: 9, abvhigh: 14, ibulow: 25, ibuhigh: 35, srmlow: 18, srmhigh: 30 }; bjcp[38] = { code: "11A", category: "Con Frutta", name: "Con Frutta", oglow: 1.035, oghigh: 1.15, fglow: 1.005, fghigh: 1.03, abvlow: 3.2, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[39] = { code: "12A", category: "Idromele", name: "Cyser (Apple Melomel)", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[40] = { code: "12B", category: "Idromele", name: "Tipo Melomel (altri frutti)", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[41] = { code: "12C", category: "Idromele", name: "Stile Mead Generico", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[42] = { code: "12D", category: "Idromele", name: "Tipo Metheglin (aromatizzato alle erbe)", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[43] = { code: "12E", category: "Idromele", name: "Tipo Braggot (speziato)", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[44] = { code: "12F", category: "Idromele", name: "Stile Dolce", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.06, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[45] = { code: "12G", category: "Idromele", name: "Stile semi-dolce ", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.06, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[46] = { code: "12H", category: "Idromele", name: "Stile Secco", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[47] = { code: "12I", category: "Idromele", name: "Pyment (Melomel con mosto d'uva)", oglow: 1.04, oghigh: 1.2, fglow: 0.98, fghigh: 1.01, abvlow: 3.2, abvhigh: 35, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 40 }; bjcp[48] = { code: "13A", category: "India Pale Ale (IPA)", name: "IPA Imperial ", oglow: 1.07, oghigh: 1.09, fglow: 1.01, fghigh: 1.02, abvlow: 7.5, abvhigh: 10, ibulow: 60, ibuhigh: 120, srmlow: 8, srmhigh: 15 }; bjcp[49] = { code: "13B", category: "India Pale Ale (IPA)", name: "IPA Inglese", oglow: 1.05, oghigh: 1.075, fglow: 1.01, fghigh: 1.018, abvlow: 5, abvhigh: 7.5, ibulow: 40, ibuhigh: 60, srmlow: 8, srmhigh: 14 }; bjcp[50] = { code: "13C", category: "India Pale Ale (IPA)", name: "IPA Americana", oglow: 1.056, oghigh: 1.075, fglow: 1.01, fghigh: 1.018, abvlow: 5.5, abvhigh: 7.5, ibulow: 40, ibuhigh: 70, srmlow: 6, srmhigh: 15 }; bjcp[51] = { code: "14A", category: "Lager Ambrata Europea", name: "Oktoberfest/Marzen", oglow: 1.05, oghigh: 1.057, fglow: 1.012, fghigh: 1.016, abvlow: 4.8, abvhigh: 5.7, ibulow: 20, ibuhigh: 28, srmlow: 7, srmhigh: 14 }; bjcp[52] = { code: "14B", category: "Lager Ambrata Europea", name: "Vienna Lager", oglow: 1.046, oghigh: 1.052, fglow: 1.01, fghigh: 1.014, abvlow: 4.5, abvhigh: 5.5, ibulow: 18, ibuhigh: 30, srmlow: 10, srmhigh: 16 }; bjcp[53] = { code: "15A", category: "Lager Chiara", name: "Lager Chiara Tedesca - Munich Helles", oglow: 1.045, oghigh: 1.051, fglow: 1.008, fghigh: 1.012, abvlow: 4.7, abvhigh: 5.4, ibulow: 16, ibuhigh: 22, srmlow: 3, srmhigh: 5 }; bjcp[54] = { code: "15B", category: "Lager Chiara", name: "Premium Lager Americana", oglow: 1.046, oghigh: 1.056, fglow: 1.008, fghigh: 1.012, abvlow: 4.6, abvhigh: 6, ibulow: 15, ibuhigh: 25, srmlow: 2, srmhigh: 6 }; bjcp[55] = { code: "15C", category: "Lager Chiara", name: "Lager Americana Standard", oglow: 1.04, oghigh: 1.05, fglow: 1.004, fghigh: 1.01, abvlow: 4.2, abvhigh: 5.3, ibulow: 8, ibuhigh: 15, srmlow: 2, srmhigh: 4 }; bjcp[56] = { code: "15D", category: "Lager Chiara", name: "Lager Chiara Americana", oglow: 1.028, oghigh: 1.04, fglow: 0.998, fghigh: 1.008, abvlow: 2.8, abvhigh: 4.2, ibulow: 8, ibuhigh: 12, srmlow: 2, srmhigh: 3 }; bjcp[57] = { code: "15E", category: "Lager Chiara", name: "Lager Chiara Tedesca - Dortmunder Export", oglow: 1.048, oghigh: 1.056, fglow: 1.01, fghigh: 1.015, abvlow: 4.8, abvhigh: 6, ibulow: 23, ibuhigh: 30, srmlow: 4, srmhigh: 6 }; bjcp[58] = { code: "16A", category: "Lager Scura", name: "Munich Dunkel", oglow: 1.048, oghigh: 1.056, fglow: 1.01, fghigh: 1.016, abvlow: 4.5, abvhigh: 5.6, ibulow: 18, ibuhigh: 28, srmlow: 14, srmhigh: 28 }; bjcp[59] = { code: "16B", category: "Lager Scura", name: "Lager Scura Americana", oglow: 1.044, oghigh: 1.056, fglow: 1.008, fghigh: 1.012, abvlow: 4.2, abvhigh: 6, ibulow: 8, ibuhigh: 20, srmlow: 14, srmhigh: 22 }; bjcp[60] = { code: "16C", category: "Lager Scura", name: "Schwarzbier", oglow: 1.046, oghigh: 1.052, fglow: 1.01, fghigh: 1.016, abvlow: 4.4, abvhigh: 5.4, ibulow: 22, ibuhigh: 32, srmlow: 17, srmhigh: 30 }; bjcp[61] = { code: "17A", category: "NESSUNA VOCE SELEZIONATA ------", name: "Nessuna voce selezionata", oglow: 1, oghigh: 1.02, fglow: 0.995, fghigh: 1.02, abvlow: 0, abvhigh: 25, ibulow: 0, ibuhigh: 120, srmlow: 0, srmhigh: 40 }; bjcp[62] = { code: "18A", category: "Pale Ale Inglese", name: "Standard/Ordinary Bitter", oglow: 1.032, oghigh: 1.04, fglow: 1.007, fghigh: 1.011, abvlow: 3.2, abvhigh: 3.8, ibulow: 25, ibuhigh: 35, srmlow: 4, srmhigh: 14 }; bjcp[63] = { code: "18B", category: "Pale Ale Inglese", name: "Special/Best/Premium Bitter", oglow: 1.04, oghigh: 1.048, fglow: 1.008, fghigh: 1.012, abvlow: 3.8, abvhigh: 4.6, ibulow: 25, ibuhigh: 40, srmlow: 5, srmhigh: 16 }; bjcp[64] = { code: "18C", category: "Pale Ale Inglese", name: "Extra Special/Strong Bitter (ESB)", oglow: 1.048, oghigh: 1.06, fglow: 1.01, fghigh: 1.016, abvlow: 4.6, abvhigh: 6.2, ibulow: 30, ibuhigh: 50, srmlow: 6, srmhigh: 18 }; bjcp[65] = { code: "19A", category: "Pilsner", name: "Bohemian Pilsener", oglow: 1.044, oghigh: 1.056, fglow: 1.013, fghigh: 1.017, abvlow: 4.2, abvhigh: 5.4, ibulow: 35, ibuhigh: 45, srmlow: 3.5, srmhigh: 6 }; bjcp[66] = { code: "19B", category: "Pilsner", name: "Pilsner Tedesca (Pils)", oglow: 1.044, oghigh: 1.05, fglow: 1.008, fghigh: 1.013, abvlow: 4.4, abvhigh: 5.2, ibulow: 25, ibuhigh: 45, srmlow: 2, srmhigh: 5 }; bjcp[67] = { code: "19C", category: "Pilsner", name: "Pilsner Classica Americana", oglow: 1.044, oghigh: 1.06, fglow: 1.01, fghigh: 1.015, abvlow: 4.5, abvhigh: 6, ibulow: 25, ibuhigh: 40, srmlow: 3, srmhigh: 6 }; bjcp[68] = { code: "20A", category: "Porter", name: "Porter Scura", oglow: 1.04, oghigh: 1.052, fglow: 1.008, fghigh: 1.014, abvlow: 4, abvhigh: 5.4, ibulow: 18, ibuhigh: 35, srmlow: 20, srmhigh: 30 }; bjcp[69] = { code: "20B", category: "Porter", name: "Robust Porter ", oglow: 1.048, oghigh: 1.065, fglow: 1.012, fghigh: 1.016, abvlow: 4.8, abvhigh: 6.5, ibulow: 25, ibuhigh: 50, srmlow: 22, srmhigh: 35 }; bjcp[70] = { code: "20C", category: "Porter", name: "Baltic Porter ", oglow: 1.06, oghigh: 1.09, fglow: 1.016, fghigh: 1.024, abvlow: 5.5, abvhigh: 9.5, ibulow: 20, ibuhigh: 40, srmlow: 17, srmhigh: 30 }; bjcp[71] = { code: "21A", category: "Sidro di mele o pere", name: "Sidro comune", oglow: 1.045, oghigh: 1.065, fglow: 1, fghigh: 1.02, abvlow: 5, abvhigh: 8, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[72] = { code: "21B", category: "Sidro di mele o pere", name: "Sidro di mele o pere (altri tipi)", oglow: 1.045, oghigh: 1.1, fglow: 0.995, fghigh: 1.02, abvlow: 5, abvhigh: 12, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[73] = { code: "21C", category: "Sidro di mele o pere", name: "Vino di mele", oglow: 1.07, oghigh: 1.1, fglow: 0.995, fghigh: 1.01, abvlow: 9, abvhigh: 12, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[74] = { code: "21D", category: "Sidro di mele o pere", name: "Sidro con frutta", oglow: 1.045, oghigh: 1.07, fglow: 0.995, fghigh: 1.01, abvlow: 5, abvhigh: 9, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[75] = { code: "21E", category: "Sidro di mele o pere", name: "Sidro tipo New England", oglow: 1.06, oghigh: 1.1, fglow: 0.995, fghigh: 1.01, abvlow: 7, abvhigh: 13, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[76] = { code: "21F", category: "Sidro di mele o pere", name: "Sidro di pere tradizionale", oglow: 1.05, oghigh: 1.07, fglow: 1, fghigh: 1.02, abvlow: 5, abvhigh: 9, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[77] = { code: "21G", category: "Sidro di mele o pere", name: "Sidro di pere comune", oglow: 1.05, oghigh: 1.06, fglow: 1, fghigh: 1.02, abvlow: 5, abvhigh: 7, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[78] = { code: "21H", category: "Sidro di mele o pere", name: "Sidro tipo inglese", oglow: 1.05, oghigh: 1.075, fglow: 0.995, fghigh: 1.01, abvlow: 6, abvhigh: 9, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[79] = { code: "21I", category: "Sidro di mele o pere", name: "Sidro tipo francese", oglow: 1.05, oghigh: 1.065, fglow: 1.01, fghigh: 1.02, abvlow: 3, abvhigh: 6, ibulow: 0, ibuhigh: 0, srmlow: 0, srmhigh: 20 }; bjcp[80] = { code: "22A", category: "Speciale", name: "Speciale", oglow: 1.035, oghigh: 1.15, fglow: 1, fghigh: 1.03, abvlow: 3.2, abvhigh: 22, ibulow: 10, ibuhigh: 120, srmlow: 1, srmhigh: 40 }; bjcp[81] = { code: "23A", category: "Stout", name: "Foreign Extra Stout", oglow: 1.056, oghigh: 1.075, fglow: 1.01, fghigh: 1.018, abvlow: 5.5, abvhigh: 8, ibulow: 30, ibuhigh: 70, srmlow: 30, srmhigh: 40 }; bjcp[82] = { code: "23B", category: "Stout", name: "Oatmeal Stout", oglow: 1.048, oghigh: 1.065, fglow: 1.01, fghigh: 1.018, abvlow: 4.2, abvhigh: 5.9, ibulow: 25, ibuhigh: 40, srmlow: 22, srmhigh: 40 }; bjcp[83] = { code: "23C", category: "Stout", name: "Sweet Stout", oglow: 1.044, oghigh: 1.06, fglow: 1.012, fghigh: 1.024, abvlow: 4, abvhigh: 6, ibulow: 20, ibuhigh: 40, srmlow: 30, srmhigh: 40 }; bjcp[84] = { code: "23D", category: "Stout", name: "Dry Stout", oglow: 1.036, oghigh: 1.05, fglow: 1.007, fghigh: 1.011, abvlow: 4, abvhigh: 5, ibulow: 30, ibuhigh: 45, srmlow: 25, srmhigh: 40 }; bjcp[85] = { code: "23E", category: "Stout", name: "Russian Imperial Stout", oglow: 1.075, oghigh: 1.115, fglow: 1.018, fghigh: 1.03, abvlow: 8, abvhigh: 12, ibulow: 50, ibuhigh: 90, srmlow: 30, srmhigh: 40 }; bjcp[86] = { code: "23F", category: "Stout", name: "Stout Americana", oglow: 1.05, oghigh: 1.075, fglow: 1.01, fghigh: 1.022, abvlow: 5, abvhigh: 7, ibulow: 35, ibuhigh: 75, srmlow: 30, srmhigh: 40 }; bjcp[87] = { code: "24A", category: "Strong Ale", name: "Barleywine Inglese", oglow: 1.08, oghigh: 1.12, fglow: 1.018, fghigh: 1.03, abvlow: 8, abvhigh: 12, ibulow: 35, ibuhigh: 70, srmlow: 8, srmhigh: 22 }; bjcp[88] = { code: "24B", category: "Strong Ale", name: "Old Ale", oglow: 1.06, oghigh: 1.09, fglow: 1.015, fghigh: 1.022, abvlow: 6, abvhigh: 9, ibulow: 30, ibuhigh: 60, srmlow: 10, srmhigh: 22 }; bjcp[89] = { code: "24C", category: "Strong Ale", name: "Barleywine Americana ", oglow: 1.08, oghigh: 1.12, fglow: 1.016, fghigh: 1.03, abvlow: 8, abvhigh: 12, ibulow: 50, ibuhigh: 120, srmlow: 10, srmhigh: 19 }; bjcp[90] = { code: "25A", category: "Strong Ale Belga", name: "Strong Ale Scura Belga", oglow: 1.075, oghigh: 1.11, fglow: 1.01, fghigh: 1.024, abvlow: 8, abvhigh: 11, ibulow: 20, ibuhigh: 35, srmlow: 12, srmhigh: 22 }; bjcp[91] = { code: "25B", category: "Strong Ale Belga", name: "Golden Strong Ale Belga", oglow: 1.07, oghigh: 1.095, fglow: 1.005, fghigh: 1.016, abvlow: 7.5, abvhigh: 10.5, ibulow: 22, ibuhigh: 35, srmlow: 3, srmhigh: 6 }; bjcp[92] = { code: "25C", category: "Strong Ale Belga", name: "Tripel Belga", oglow: 1.075, oghigh: 1.085, fglow: 1.008, fghigh: 1.014, abvlow: 7.5, abvhigh: 9.5, ibulow: 20, ibuhigh: 40, srmlow: 4.5, srmhigh: 7 }; bjcp[93] = { code: "25D", category: "Strong Ale Belga", name: "Dubbel Belga", oglow: 1.062, oghigh: 1.075, fglow: 1.008, fghigh: 1.018, abvlow: 6, abvhigh: 7.6, ibulow: 15, ibuhigh: 25, srmlow: 10, srmhigh: 17 }; bjcp[94] = { code: "25E", category: "Strong Ale Belga", name: "Ale Chiara Belga", oglow: 1.062, oghigh: 1.075, fglow: 1.008, fghigh: 1.018, abvlow: 6, abvhigh: 7.5, ibulow: 15, ibuhigh: 30, srmlow: 4, srmhigh: 7 }; bjcp[95] = { code: "26A", category: "Tedesca di Frumento o Segale", name: "Roggenbier (Tedesca di Segale)", oglow: 1.046, oghigh: 1.056, fglow: 1.01, fghigh: 1.014, abvlow: 4.5, abvhigh: 6, ibulow: 10, ibuhigh: 20, srmlow: 14, srmhigh: 19 }; bjcp[96] = { code: "26B", category: "Tedesca di Frumento o Segale", name: "Weizenbock", oglow: 1.064, oghigh: 1.09, fglow: 1.015, fghigh: 1.022, abvlow: 6.5, abvhigh: 8, ibulow: 15, ibuhigh: 30, srmlow: 12, srmhigh: 25 }; bjcp[97] = { code: "26C", category: "Tedesca di Frumento o Segale", name: "Weizen Scura", oglow: 1.044, oghigh: 1.056, fglow: 1.01, fghigh: 1.014, abvlow: 4.3, abvhigh: 5.6, ibulow: 10, ibuhigh: 18, srmlow: 14, srmhigh: 23 }; bjcp[98] = { code: "26D", category: "Tedesca di Frumento o Segale", name: "Weizen/Weissbier", oglow: 1.044, oghigh: 1.052, fglow: 1.01, fghigh: 1.014, abvlow: 4.3, abvhigh: 5.6, ibulow: 8, ibuhigh: 15, srmlow: 2, srmhigh: 8 }; var ingredients = []; ingredients[0] = { id: 1, name: "--", lovibond: 0, ppg: 0, mashable: 0, category: "" }; ingredients[1] = { id: 4, name: "Fiocchi d'avena", lovibond: 2.2, ppg: 33, mashable: 1, category: "Aggiunta" }; ingredients[2] = { id: 7, name: "Fiocchi di frumento", lovibond: 2, ppg: 34, mashable: 1, category: "Aggiunta" }; ingredients[3] = { id: 3, name: "Fiocchi di mais", lovibond: 0.5, ppg: 40, mashable: 1, category: "Aggiunta" }; ingredients[4] = { id: 5, name: "Fiocchi di riso", lovibond: 0.5, ppg: 40, mashable: 1, category: "Aggiunta" }; ingredients[5] = { id: 6, name: "Fiocchi di segale", lovibond: 2.8, ppg: 36, mashable: 1, category: "Aggiunta" }; ingredients[6] = { id: 2, name: "Fiocchi d'orzo", lovibond: 2.2, ppg: 32, mashable: 1, category: "Aggiunta" }; ingredients[7] = { id: 12, name: "Frumento tostato", lovibond: 2, ppg: 36, mashable: 1, category: "Aggiunta" }; ingredients[8] = { id: 8, name: "Gritz", lovibond: 1, ppg: 37, mashable: 1, category: "Aggiunta" }; ingredients[9] = { id: 9, name: "Lolla di riso", lovibond: 0, ppg: 0, mashable: 1, category: "Aggiunta" }; ingredients[10] = { id: 11, name: "Orzo tostato", lovibond: 2, ppg: 36, mashable: 1, category: "Aggiunta" }; ingredients[11] = { id: 10, name: "Rolled Oats", lovibond: 2.2, ppg: 33, mashable: 1, category: "Aggiunta" }; ingredients[12] = { id: 158, name: "Estratto di malto Liquido - Amber", lovibond: 10, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[13] = { id: 190, name: "Estratto di malto Liquido - Extra Light", lovibond: 2.5, ppg: 37, mashable: 0, category: "Estratto Liquido" }; ingredients[14] = { id: 160, name: "Estratto di malto Liquido - Light", lovibond: 4, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[15] = { id: 185, name: "Estratto di malto Liquido - Munich", lovibond: 8, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[16] = { id: 186, name: "Estratto di malto Liquido - Pilsen", lovibond: 2, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[17] = { id: 159, name: "Estratto di malto Liquido - Scuro", lovibond: 30, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[18] = { id: 161, name: "Estratto di malto Liquido - Wheat", lovibond: 3, ppg: 35, mashable: 0, category: "Estratto Liquido" }; ingredients[19] = { id: 196, name: " Estratto di malto CristalMalt Black 80 EBC", lovibond: 40, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[20] = { id: 195, name: "Estratto di malto CristalMalt Amber 55 EBC", lovibond: 27.5, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[21] = { id: 192, name: "Estratto di malto CristalMalt Light 12,5 EBC", lovibond: 6.5, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[22] = { id: 14, name: "Estratto di malto secco - Ambrato", lovibond: 10, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[23] = { id: 13, name: "Estratto di malto secco - Chiaro", lovibond: 4, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[24] = { id: 189, name: "Estratto di malto secco - Extra Chiaro", lovibond: 2.5, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[25] = { id: 187, name: "Estratto di malto secco - Munich", lovibond: 8, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[26] = { id: 188, name: "Estratto di malto secco - Pilsen", lovibond: 2, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[27] = { id: 15, name: "Estratto di malto secco - Scuro", lovibond: 30, ppg: 44, mashable: 0, category: "Estratto secco" }; ingredients[28] = { id: 16, name: "Estratto di malto secco - Wheat", lovibond: 3, ppg: 42, mashable: 0, category: "Estratto secco" }; ingredients[29] = { id: 162, name: "Sciroppo di riso solido", lovibond: 1, ppg: 37, mashable: 0, category: "Estratto secco" }; ingredients[30] = { id: 17, name: "Malto Americano - Aromatic Malt", lovibond: 20, ppg: 35, mashable: 1, category: "Grani" }; ingredients[31] = { id: 18, name: "Malto Americano - Ashbourne Mild", lovibond: 5.3, ppg: 30, mashable: 1, category: "Grani" }; ingredients[32] = { id: 19, name: "Malto Americano - Black Barley", lovibond: 530, ppg: 27, mashable: 1, category: "Grani" }; ingredients[33] = { id: 20, name: "Malto Americano - Black Malt", lovibond: 500, ppg: 28, mashable: 1, category: "Grani" }; ingredients[34] = { id: 21, name: "Malto Americano - Blackprinz", lovibond: 500, ppg: 36, mashable: 1, category: "Grani" }; ingredients[35] = { id: 22, name: "Malto Americano - Bonlander Munich", lovibond: 10, ppg: 36, mashable: 1, category: "Grani" }; ingredients[36] = { id: 23, name: "Malto Americano - CaraBrown", lovibond: 55, ppg: 34, mashable: 1, category: "Grani" }; ingredients[37] = { id: 24, name: "Malto Americano - CaraCrystal Wheat Malt", lovibond: 55, ppg: 34, mashable: 1, category: "Grani" }; ingredients[38] = { id: 25, name: "Malto Americano - Caramel / Crystal 10L", lovibond: 10, ppg: 35, mashable: 1, category: "Grani" }; ingredients[39] = { id: 34, name: "Malto Americano - Caramel / Crystal 120L", lovibond: 120, ppg: 33, mashable: 1, category: "Grani" }; ingredients[40] = { id: 35, name: "Malto Americano - Caramel / Crystal 150L", lovibond: 150, ppg: 33, mashable: 1, category: "Grani" }; ingredients[41] = { id: 26, name: "Malto Americano - Caramel / Crystal 15L", lovibond: 15, ppg: 35, mashable: 1, category: "Grani" }; ingredients[42] = { id: 27, name: "Malto Americano - Caramel / Crystal 20L", lovibond: 20, ppg: 35, mashable: 1, category: "Grani" }; ingredients[43] = { id: 28, name: "Malto Americano - Caramel / Crystal 30L", lovibond: 30, ppg: 34, mashable: 1, category: "Grani" }; ingredients[44] = { id: 29, name: "Malto Americano - Caramel / Crystal 40L", lovibond: 40, ppg: 34, mashable: 1, category: "Grani" }; ingredients[45] = { id: 30, name: "Malto Americano - Caramel / Crystal 60L", lovibond: 60, ppg: 34, mashable: 1, category: "Grani" }; ingredients[46] = { id: 31, name: "Malto Americano - Caramel / Crystal 75L", lovibond: 75, ppg: 33, mashable: 1, category: "Grani" }; ingredients[47] = { id: 32, name: "Malto Americano - Caramel / Crystal 80L", lovibond: 80, ppg: 33, mashable: 1, category: "Grani" }; ingredients[48] = { id: 33, name: "Malto Americano - Caramel / Crystal 90L", lovibond: 90, ppg: 33, mashable: 1, category: "Grani" }; ingredients[49] = { id: 36, name: "Malto Americano - Carapils (Dextrine Malt)", lovibond: 1.8, ppg: 33, mashable: 1, category: "Grani" }; ingredients[50] = { id: 37, name: "Malto Americano - Chocolate", lovibond: 350, ppg: 29, mashable: 1, category: "Grani" }; ingredients[51] = { id: 38, name: "Malto Americano - Dark Chocolate", lovibond: 420, ppg: 29, mashable: 1, category: "Grani" }; ingredients[52] = { id: 39, name: "Malto Americano - Midnight Wheat Malt", lovibond: 550, ppg: 33, mashable: 1, category: "Grani" }; ingredients[53] = { id: 42, name: "Malto Americano - Munich - 60L", lovibond: 60, ppg: 33, mashable: 1, category: "Grani" }; ingredients[54] = { id: 41, name: "Malto Americano - Munich - Dark 20L", lovibond: 20, ppg: 33, mashable: 1, category: "Grani" }; ingredients[55] = { id: 40, name: "Malto Americano - Munich - Light 10L", lovibond: 10, ppg: 33, mashable: 1, category: "Grani" }; ingredients[56] = { id: 43, name: "Malto Americano - Pale 2-Row", lovibond: 1.8, ppg: 37, mashable: 1, category: "Grani" }; ingredients[57] = { id: 44, name: "Malto Americano - Pale 2-Row - Toasted", lovibond: 30, ppg: 33, mashable: 1, category: "Grani" }; ingredients[58] = { id: 45, name: "Malto Americano - Pale 6-Row", lovibond: 1.8, ppg: 35, mashable: 1, category: "Grani" }; ingredients[59] = { id: 46, name: "Malto Americano - Pale Ale", lovibond: 3.5, ppg: 37, mashable: 1, category: "Grani" }; ingredients[60] = { id: 47, name: "Malto Americano - Pilsner", lovibond: 1.8, ppg: 37, mashable: 1, category: "Grani" }; ingredients[61] = { id: 48, name: "Malto Americano - Red Wheat", lovibond: 2.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[62] = { id: 49, name: "Malto Americano - Roasted Barley", lovibond: 300, ppg: 33, mashable: 1, category: "Grani" }; ingredients[63] = { id: 50, name: "Malto Americano - Rye", lovibond: 3.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[64] = { id: 51, name: "Malto Americano - Smoked Malt", lovibond: 5, ppg: 37, mashable: 1, category: "Grani" }; ingredients[65] = { id: 52, name: "Malto Americano - Special Roast", lovibond: 50, ppg: 33, mashable: 1, category: "Grani" }; ingredients[66] = { id: 53, name: "Malto Americano - Victory", lovibond: 28, ppg: 34, mashable: 1, category: "Grani" }; ingredients[67] = { id: 54, name: "Malto Americano - Vienna", lovibond: 4, ppg: 35, mashable: 1, category: "Grani" }; ingredients[68] = { id: 55, name: "Malto Americano - Wheat", lovibond: 1.8, ppg: 38, mashable: 1, category: "Grani" }; ingredients[69] = { id: 56, name: "Malto Americano - White Wheat", lovibond: 2.8, ppg: 40, mashable: 1, category: "Grani" }; ingredients[70] = { id: 57, name: "Malto Belga - Aromatic", lovibond: 38, ppg: 33, mashable: 1, category: "Grani" }; ingredients[71] = { id: 58, name: "Malto Belga - Biscuit", lovibond: 23, ppg: 35, mashable: 1, category: "Grani" }; ingredients[72] = { id: 59, name: "Malto Belga - Cara 20L", lovibond: 22, ppg: 34, mashable: 1, category: "Grani" }; ingredients[73] = { id: 60, name: "Malto Belga - Cara 45L", lovibond: 42, ppg: 34, mashable: 1, category: "Grani" }; ingredients[74] = { id: 61, name: "Malto Belga - Caramel Pils", lovibond: 8, ppg: 34, mashable: 1, category: "Grani" }; ingredients[75] = { id: 62, name: "Malto Belga - CaraMunich", lovibond: 50, ppg: 33, mashable: 1, category: "Grani" }; ingredients[76] = { id: 63, name: "Malto Belga - CaraVienne", lovibond: 20, ppg: 34, mashable: 1, category: "Grani" }; ingredients[77] = { id: 64, name: "Malto Belga - Chocolate", lovibond: 340, ppg: 30, mashable: 1, category: "Grani" }; ingredients[78] = { id: 65, name: "Malto Belga - De-Bittered Black", lovibond: 566, ppg: 34, mashable: 1, category: "Grani" }; ingredients[79] = { id: 66, name: "Malto Belga - Munich", lovibond: 6, ppg: 38, mashable: 1, category: "Grani" }; ingredients[80] = { id: 67, name: "Malto Belga - Pale Ale", lovibond: 3.4, ppg: 38, mashable: 1, category: "Grani" }; ingredients[81] = { id: 68, name: "Malto Belga - Pilsner", lovibond: 1.6, ppg: 37, mashable: 1, category: "Grani" }; ingredients[82] = { id: 69, name: "Malto Belga - Roasted Barley", lovibond: 575, ppg: 30, mashable: 1, category: "Grani" }; ingredients[83] = { id: 70, name: "Malto Belga - Special B", lovibond: 115, ppg: 34, mashable: 1, category: "Grani" }; ingredients[84] = { id: 71, name: "Malto Belga - Unmalted Wheat", lovibond: 2, ppg: 36, mashable: 1, category: "Grani" }; ingredients[85] = { id: 72, name: "Malto Belga - Wheat", lovibond: 1.8, ppg: 38, mashable: 1, category: "Grani" }; ingredients[86] = { id: 73, name: "Malto Canadese - ESB Malt", lovibond: 3.5, ppg: 36, mashable: 1, category: "Grani" }; ingredients[87] = { id: 74, name: "Malto Canadese - Honey Malt", lovibond: 25, ppg: 37, mashable: 1, category: "Grani" }; ingredients[88] = { id: 75, name: "Malto Canadese - Munich Dark", lovibond: 32, ppg: 34, mashable: 1, category: "Grani" }; ingredients[89] = { id: 76, name: "Malto Canadese - Munich Light", lovibond: 10, ppg: 34, mashable: 1, category: "Grani" }; ingredients[90] = { id: 77, name: "Malto Canadese - Pale 2-Row", lovibond: 1.75, ppg: 36, mashable: 1, category: "Grani" }; ingredients[91] = { id: 78, name: "Malto Canadese - Pale Wheat", lovibond: 2, ppg: 36, mashable: 1, category: "Grani" }; ingredients[92] = { id: 120, name: "Malto dal Regno Unito - Amber", lovibond: 27, ppg: 32, mashable: 1, category: "Grani" }; ingredients[93] = { id: 121, name: "Malto dal Regno Unito - Black Patent", lovibond: 525, ppg: 27, mashable: 1, category: "Grani" }; ingredients[94] = { id: 122, name: "Malto dal Regno Unito - Brown", lovibond: 65, ppg: 32, mashable: 1, category: "Grani" }; ingredients[95] = { id: 123, name: "Malto dal Regno Unito - Cara Malt", lovibond: 17.5, ppg: 35, mashable: 1, category: "Grani" }; ingredients[96] = { id: 124, name: "Malto dal Regno Unito - Carastan (30/37)", lovibond: 34, ppg: 35, mashable: 1, category: "Grani" }; ingredients[97] = { id: 125, name: "Malto dal Regno Unito - Carastan Light (15L)", lovibond: 15, ppg: 35, mashable: 1, category: "Grani" }; ingredients[98] = { id: 126, name: "Malto dal Regno Unito - Chocolate", lovibond: 425, ppg: 34, mashable: 1, category: "Grani" }; ingredients[99] = { id: 127, name: "Malto dal Regno Unito - Coffee Malt", lovibond: 150, ppg: 36, mashable: 1, category: "Grani" }; ingredients[100] = { id: 135, name: "Malto dal Regno Unito - Crystal 140L", lovibond: 140, ppg: 33, mashable: 1, category: "Grani" }; ingredients[101] = { id: 128, name: "Malto dal Regno Unito - Crystal 15L", lovibond: 15, ppg: 34, mashable: 1, category: "Grani" }; ingredients[102] = { id: 129, name: "Malto dal Regno Unito - Crystal 30L", lovibond: 30, ppg: 34, mashable: 1, category: "Grani" }; ingredients[103] = { id: 130, name: "Malto dal Regno Unito - Crystal 45L", lovibond: 45, ppg: 34, mashable: 1, category: "Grani" }; ingredients[104] = { id: 131, name: "Malto dal Regno Unito - Crystal 50L", lovibond: 50, ppg: 34, mashable: 1, category: "Grani" }; ingredients[105] = { id: 132, name: "Malto dal Regno Unito - Crystal 60L", lovibond: 60, ppg: 34, mashable: 1, category: "Grani" }; ingredients[106] = { id: 133, name: "Malto dal Regno Unito - Crystal 70L", lovibond: 70, ppg: 34, mashable: 1, category: "Grani" }; ingredients[107] = { id: 134, name: "Malto dal Regno Unito - Crystal 90L", lovibond: 90, ppg: 33, mashable: 1, category: "Grani" }; ingredients[108] = { id: 136, name: "Malto dal Regno Unito - Crystal Rye", lovibond: 90, ppg: 33, mashable: 1, category: "Grani" }; ingredients[109] = { id: 138, name: "Malto dal Regno Unito - Dark Crystal 80L", lovibond: 80, ppg: 33, mashable: 1, category: "Grani" }; ingredients[110] = { id: 137, name: "Malto dal Regno Unito - Dextrine Malt", lovibond: 1.8, ppg: 33, mashable: 1, category: "Grani" }; ingredients[111] = { id: 139, name: "Malto dal Regno Unito - Extra Dark Crystal 120L", lovibond: 120, ppg: 33, mashable: 1, category: "Grani" }; ingredients[112] = { id: 140, name: "Malto dal Regno Unito - Extra Dark Crystal 160L", lovibond: 160, ppg: 33, mashable: 1, category: "Grani" }; ingredients[113] = { id: 141, name: "Malto dal Regno Unito - Golden Naked Oats", lovibond: 10, ppg: 33, mashable: 1, category: "Grani" }; ingredients[114] = { id: 142, name: "Malto dal Regno Unito - Golden Promise", lovibond: 3, ppg: 37, mashable: 1, category: "Grani" }; ingredients[115] = { id: 143, name: "Malto dal Regno Unito - Halcyon", lovibond: 2, ppg: 36, mashable: 1, category: "Grani" }; ingredients[116] = { id: 144, name: "Malto dal Regno Unito - Lager", lovibond: 1.4, ppg: 38, mashable: 1, category: "Grani" }; ingredients[117] = { id: 145, name: "Malto dal Regno Unito - Malted Naked Oats", lovibond: 1.3, ppg: 33, mashable: 1, category: "Grani" }; ingredients[118] = { id: 146, name: "Malto dal Regno Unito - Maris Otter Pale", lovibond: 3.75, ppg: 38, mashable: 1, category: "Grani" }; ingredients[119] = { id: 147, name: "Malto dal Regno Unito - Mild", lovibond: 3, ppg: 37, mashable: 1, category: "Grani" }; ingredients[120] = { id: 148, name: "Malto dal Regno Unito - Munich", lovibond: 6, ppg: 37, mashable: 1, category: "Grani" }; ingredients[121] = { id: 149, name: "Malto dal Regno Unito - Oat Malt", lovibond: 2, ppg: 28, mashable: 1, category: "Grani" }; ingredients[122] = { id: 150, name: "Malto dal Regno Unito - Optic", lovibond: 2.1, ppg: 38, mashable: 1, category: "Grani" }; ingredients[123] = { id: 151, name: "Malto dal Regno Unito - Pale 2-Row", lovibond: 2.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[124] = { id: 152, name: "Malto dal Regno Unito - Pale Chocolate", lovibond: 207, ppg: 33, mashable: 1, category: "Grani" }; ingredients[125] = { id: 153, name: "Malto dal Regno Unito - Pearl", lovibond: 2.1, ppg: 37, mashable: 1, category: "Grani" }; ingredients[126] = { id: 154, name: "Malto dal Regno Unito - Peated Malt", lovibond: 2.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[127] = { id: 155, name: "Malto dal Regno Unito - Pilsen", lovibond: 1.8, ppg: 36, mashable: 1, category: "Grani" }; ingredients[128] = { id: 156, name: "Malto dal Regno Unito - Roasted Barley", lovibond: 550, ppg: 29, mashable: 1, category: "Grani" }; ingredients[129] = { id: 157, name: "Malto dal Regno Unito - Wheat", lovibond: 2, ppg: 37, mashable: 1, category: "Grani" }; ingredients[130] = { id: 79, name: "Malto Tedesco - Abbey Malt", lovibond: 17, ppg: 33, mashable: 1, category: "Grani" }; ingredients[131] = { id: 80, name: "Malto Tedesco - Acidulated Malt", lovibond: 3.4, ppg: 27, mashable: 1, category: "Grani" }; ingredients[132] = { id: 81, name: "Malto Tedesco - Bohemian Pilsner", lovibond: 1.9, ppg: 38, mashable: 1, category: "Grani" }; ingredients[133] = { id: 82, name: "Malto Tedesco - CaraAmber", lovibond: 23, ppg: 34, mashable: 1, category: "Grani" }; ingredients[134] = { id: 83, name: "Malto Tedesco - CaraAroma", lovibond: 130, ppg: 34, mashable: 1, category: "Grani" }; ingredients[135] = { id: 84, name: "Malto Tedesco - CaraBelge", lovibond: 13.6, ppg: 33, mashable: 1, category: "Grani" }; ingredients[136] = { id: 85, name: "Malto Tedesco - CaraBohemian", lovibond: 75, ppg: 33, mashable: 1, category: "Grani" }; ingredients[137] = { id: 86, name: "Malto Tedesco - Carafa I", lovibond: 340, ppg: 32, mashable: 1, category: "Grani" }; ingredients[138] = { id: 87, name: "Malto Tedesco - Carafa II", lovibond: 425, ppg: 32, mashable: 1, category: "Grani" }; ingredients[139] = { id: 88, name: "Malto Tedesco - Carafa III", lovibond: 535, ppg: 32, mashable: 1, category: "Grani" }; ingredients[140] = { id: 89, name: "Malto Tedesco - CaraFoam", lovibond: 1.8, ppg: 37, mashable: 1, category: "Grani" }; ingredients[141] = { id: 90, name: "Malto Tedesco - CaraHell", lovibond: 11, ppg: 34, mashable: 1, category: "Grani" }; ingredients[142] = { id: 91, name: "Malto Tedesco - Caramel Pils", lovibond: 2.4, ppg: 35, mashable: 1, category: "Grani" }; ingredients[143] = { id: 92, name: "Malto Tedesco - Caramel Wheat", lovibond: 46, ppg: 34, mashable: 1, category: "Grani" }; ingredients[144] = { id: 93, name: "Malto Tedesco - CaraMunich I", lovibond: 39, ppg: 34, mashable: 1, category: "Grani" }; ingredients[145] = { id: 94, name: "Malto Tedesco - CaraMunich II", lovibond: 46, ppg: 34, mashable: 1, category: "Grani" }; ingredients[146] = { id: 95, name: "Malto Tedesco - CaraMunich III", lovibond: 57, ppg: 34, mashable: 1, category: "Grani" }; ingredients[147] = { id: 96, name: "Malto Tedesco - Carapils", lovibond: 1.3, ppg: 35, mashable: 1, category: "Grani" }; ingredients[148] = { id: 97, name: "Malto Tedesco - CaraRed", lovibond: 20, ppg: 34, mashable: 1, category: "Grani" }; ingredients[149] = { id: 98, name: "Malto Tedesco - Chocolate Rye", lovibond: 240, ppg: 31, mashable: 1, category: "Grani" }; ingredients[150] = { id: 99, name: "Malto Tedesco - Chocolate Wheat", lovibond: 413, ppg: 31, mashable: 1, category: "Grani" }; ingredients[151] = { id: 100, name: "Malto Tedesco - Dark Munich", lovibond: 10, ppg: 36, mashable: 1, category: "Grani" }; ingredients[152] = { id: 101, name: "Malto Tedesco - Dark Wheat", lovibond: 6.5, ppg: 39, mashable: 1, category: "Grani" }; ingredients[153] = { id: 102, name: "Malto Tedesco - De-Husked Caraf I", lovibond: 340, ppg: 32, mashable: 1, category: "Grani" }; ingredients[154] = { id: 103, name: "Malto Tedesco - De-Husked Caraf II", lovibond: 418, ppg: 32, mashable: 1, category: "Grani" }; ingredients[155] = { id: 104, name: "Malto Tedesco - De-Husked Caraf III", lovibond: 470, ppg: 32, mashable: 1, category: "Grani" }; ingredients[156] = { id: 105, name: "Malto Tedesco - Floor-Malted Bohemian Pilsner", lovibond: 1.8, ppg: 38, mashable: 1, category: "Grani" }; ingredients[157] = { id: 106, name: "Malto Tedesco - Floor-Malted Bohemian Pilsner Dk", lovibond: 6.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[158] = { id: 107, name: "Malto Tedesco - Floor-Malted Bohemian Wheat", lovibond: 2, ppg: 38, mashable: 1, category: "Grani" }; ingredients[159] = { id: 108, name: "Malto Tedesco - Kolsch", lovibond: 2, ppg: 37, mashable: 1, category: "Grani" }; ingredients[160] = { id: 109, name: "Malto Tedesco - Melanoidin", lovibond: 25, ppg: 37, mashable: 1, category: "Grani" }; ingredients[161] = { id: 110, name: "Malto Tedesco - Munich Dark", lovibond: 15.5, ppg: 37, mashable: 1, category: "Grani" }; ingredients[162] = { id: 111, name: "Malto Tedesco - Munich Light", lovibond: 6, ppg: 37, mashable: 1, category: "Grani" }; ingredients[163] = { id: 112, name: "Malto Tedesco - Pale Ale", lovibond: 2.3, ppg: 39, mashable: 1, category: "Grani" }; ingredients[164] = { id: 113, name: "Malto Tedesco - Pale Wheat", lovibond: 1.5, ppg: 39, mashable: 1, category: "Grani" }; ingredients[165] = { id: 114, name: "Malto Tedesco - Pilsner", lovibond: 1.6, ppg: 38, mashable: 1, category: "Grani" }; ingredients[166] = { id: 115, name: "Malto Tedesco - Rye", lovibond: 3.5, ppg: 38, mashable: 1, category: "Grani" }; ingredients[167] = { id: 116, name: "Malto Tedesco - Smoked Malt", lovibond: 3, ppg: 37, mashable: 1, category: "Grani" }; ingredients[168] = { id: 117, name: "Malto Tedesco - Spelt Malt", lovibond: 2, ppg: 37, mashable: 1, category: "Grani" }; ingredients[169] = { id: 118, name: "Malto Tedesco - Vienna", lovibond: 4, ppg: 37, mashable: 1, category: "Grani" }; ingredients[170] = { id: 119, name: "Malto Tedesco - Wheat Malt", lovibond: 2, ppg: 37, mashable: 1, category: "Grani" }; ingredients[171] = { id: 173, name: "Destrosio", lovibond: 0.5, ppg: 46, mashable: 0, category: "Zucchero" }; ingredients[172] = { id: 179, name: "Lattosio (zucchero del latte)", lovibond: 1, ppg: 41, mashable: 0, category: "Zucchero" }; ingredients[173] = { id: 191, name: "Maltodestrina", lovibond: 0, ppg: 39, mashable: 0, category: "Zucchero" }; ingredients[174] = { id: 180, name: "Melassa", lovibond: 80, ppg: 36, mashable: 0, category: "Zucchero" }; ingredients[175] = { id: 175, name: "Miele", lovibond: 2, ppg: 42, mashable: 0, category: "Zucchero" }; ingredients[176] = { id: 176, name: "Miele (grano saraceno)", lovibond: 2, ppg: 42, mashable: 0, category: "Zucchero" }; ingredients[177] = { id: 166, name: "Sciroppo candito Belga - Ambrato", lovibond: 40, ppg: 32, mashable: 0, category: "Zucchero" }; ingredients[178] = { id: 167, name: "Sciroppo candito Belga - Chiaro", lovibond: 0, ppg: 32, mashable: 0, category: "Zucchero" }; ingredients[179] = { id: 168, name: "Sciroppo candito Belga - D2", lovibond: 160, ppg: 32, mashable: 0, category: "Zucchero" }; ingredients[180] = { id: 169, name: "Sciroppo candito Belga - Dark", lovibond: 80, ppg: 32, mashable: 0, category: "Zucchero" }; ingredients[181] = { id: 178, name: "Sciroppo d'acero", lovibond: 35, ppg: 30, mashable: 0, category: "Zucchero" }; ingredients[182] = { id: 174, name: "Sciroppo di Mais", lovibond: 0.5, ppg: 37, mashable: 0, category: "Zucchero" }; ingredients[183] = { id: 170, name: "Sciroppo di riso scuro - Senza glutine", lovibond: 2, ppg: 44, mashable: 0, category: "Zucchero" }; ingredients[184] = { id: 183, name: "Sciroppo di sorgo - Senza glutine", lovibond: 1.5, ppg: 44, mashable: 0, category: "Zucchero" }; ingredients[185] = { id: 181, name: "Zucchero candito - Chiaro", lovibond: 5, ppg: 38, mashable: 0, category: "Zucchero" }; ingredients[186] = { id: 163, name: "Zucchero Candito Belga - Ambrato/Scuro", lovibond: 60, ppg: 38, mashable: 0, category: "Zucchero" }; ingredients[187] = { id: 164, name: "Zucchero Candito Belga - Chiaro", lovibond: 0, ppg: 38, mashable: 0, category: "Zucchero" }; ingredients[188] = { id: 165, name: "Zucchero Candito Belga - Scuro", lovibond: 275, ppg: 38, mashable: 0, category: "Zucchero" }; ingredients[189] = { id: 172, name: "Zucchero di Canna", lovibond: 0, ppg: 46, mashable: 0, category: "Zucchero" }; ingredients[190] = { id: 177, name: "Zucchero invertito", lovibond: 1, ppg: 46, mashable: 0, category: "Zucchero" }; ingredients[191] = { id: 171, name: "Zucchero scuro", lovibond: 15, ppg: 45, mashable: 0, category: "Zucchero" }; ingredients[192] = { id: 184, name: "Zucchero Turbinado", lovibond: 10, ppg: 44, mashable: 0, category: "Zucchero" }; ingredients[193] = { id: 182, name: "Zuchhero candito - Scuro", lovibond: 60, ppg: 38, mashable: 0, category: "Zucchero" }; var hops = []; hops[0] = { name: "--", avgaa: 0 }; hops[1] = { name: "Admiral", avgaa: 14.5 }; hops[2] = { name: "Ahtanum", avgaa: 6 }; hops[3] = { name: "Amarillo", avgaa: 8.6 }; hops[4] = { name: "Apollo", avgaa: 20 }; hops[5] = { name: "Aquila", avgaa: 7 }; hops[6] = { name: "Aurora", avgaa: 8 }; hops[7] = { name: "B. C. Goldings", avgaa: 5 }; hops[8] = { name: "Banner", avgaa: 11 }; hops[9] = { name: "Bramling Cross", avgaa: 6.5 }; hops[10] = { name: "Bravo", avgaa: 15.5 }; hops[11] = { name: "Brewer's Gold", avgaa: 9 }; hops[12] = { name: "Bullion", avgaa: 8 }; hops[13] = { name: "Calypso", avgaa: 13 }; hops[14] = { name: "Cascade", avgaa: 7 }; hops[15] = { name: "Centennial", avgaa: 10 }; hops[16] = { name: "Challenger", avgaa: 8.5 }; hops[17] = { name: "Chinook", avgaa: 13 }; hops[18] = { name: "Citra", avgaa: 11 }; hops[19] = { name: "Cluster", avgaa: 6.5 }; hops[20] = { name: "Columbia", avgaa: 8.8 }; hops[21] = { name: "Columbus", avgaa: 15 }; hops[22] = { name: "Comet", avgaa: 11 }; hops[23] = { name: "Crystal", avgaa: 4.3 }; hops[24] = { name: "Domestic Hallertau", avgaa: 3.9 }; hops[25] = { name: "East Kent Goldings", avgaa: 5 }; hops[26] = { name: "Eroica", avgaa: 12 }; hops[27] = { name: "Falconer's Flight", avgaa: 10 }; hops[28] = { name: "First Gold", avgaa: 7.5 }; hops[29] = { name: "Fuggles", avgaa: 4.5 }; hops[30] = { name: "Galena", avgaa: 13 }; hops[31] = { name: "Glacier", avgaa: 5.5 }; hops[32] = { name: "Goldings", avgaa: 4.5 }; hops[33] = { name: "Hallertau Hersbrucker", avgaa: 4 }; hops[34] = { name: "Hallertau Mittelfruh", avgaa: 3.75 }; hops[35] = { name: "Herald", avgaa: 12 }; hops[36] = { name: "Hersbrucker", avgaa: 4 }; hops[37] = { name: "Horizon", avgaa: 12.5 }; hops[38] = { name: "Huller Bitterer", avgaa: 5.75 }; hops[39] = { name: "Kent Goldings", avgaa: 5 }; hops[40] = { name: "Liberty", avgaa: 4 }; hops[41] = { name: "Lublin", avgaa: 4.5 }; hops[42] = { name: "Magnum", avgaa: 15 }; hops[43] = { name: "Millenium", avgaa: 15.5 }; hops[44] = { name: "Motueka", avgaa: 7 }; hops[45] = { name: "Mount Hood", avgaa: 4.8 }; hops[46] = { name: "Mount Rainier", avgaa: 6.2 }; hops[47] = { name: "Nelson Sauvin", avgaa: 12.5 }; hops[48] = { name: "Newport", avgaa: 15.5 }; hops[49] = { name: "Northdown", avgaa: 8.6 }; hops[50] = { name: "Northern Brewer", avgaa: 7.8 }; hops[51] = { name: "Nugget", avgaa: 14 }; hops[52] = { name: "Olympic", avgaa: 12 }; hops[53] = { name: "Omega", avgaa: 10 }; hops[54] = { name: "Orion", avgaa: 7 }; hops[55] = { name: "Pacific Gem", avgaa: 15.4 }; hops[56] = { name: "Palisade", avgaa: 7.5 }; hops[57] = { name: "Perle", avgaa: 8.2 }; hops[58] = { name: "Phoenix", avgaa: 10 }; hops[59] = { name: "Pioneer", avgaa: 9 }; hops[60] = { name: "Pride of Ringwood", avgaa: 10 }; hops[61] = { name: "Progress", avgaa: 6.25 }; hops[62] = { name: "Record", avgaa: 6.5 }; hops[63] = { name: "Saaz", avgaa: 3.5 }; hops[64] = { name: "Santiam", avgaa: 6.5 }; hops[65] = { name: "Satus", avgaa: 13 }; hops[66] = { name: "Simcoe", avgaa: 12.7 }; hops[67] = { name: "Sorachi Ace", avgaa: 11.1 }; hops[68] = { name: "Spalt", avgaa: 4.5 }; hops[69] = { name: "Sterling", avgaa: 8.7 }; hops[70] = { name: "Sticklebract", avgaa: 11.5 }; hops[71] = { name: "Strisselspalt", avgaa: 3.5 }; hops[72] = { name: "Styrian Goldings", avgaa: 5.5 }; hops[73] = { name: "Summit", avgaa: 18.5 }; hops[74] = { name: "Super Alpha", avgaa: 13 }; hops[75] = { name: "Super Styrians", avgaa: 9 }; hops[76] = { name: "Talisman", avgaa: 8 }; hops[77] = { name: "Target", avgaa: 11.5 }; hops[78] = { name: "Tettnanger", avgaa: 4.5 }; hops[79] = { name: "Tomahawk", avgaa: 15 }; hops[80] = { name: "Ultra", avgaa: 4.5 }; hops[81] = { name: "Vanguard", avgaa: 5 }; hops[82] = { name: "Warrior", avgaa: 16 }; hops[83] = { name: "Whitbread Golding", avgaa: 6 }; hops[84] = { name: "Willamette", avgaa: 4.5 }; hops[85] = { name: "Wye Target", avgaa: 10 }; hops[86] = { name: "Yakima Cluster", avgaa: 7 }; hops[87] = { name: "Yamhill Goldings", avgaa: 4 }; hops[88] = { name: "Yeoman", avgaa: 7.25 }; hops[89] = { name: "Zenith", avgaa: 9 }; hops[90] = { name: "Zeus", avgaa: 16 }; hops[91] = { name: "Zythos", avgaa: 11 }; var yeast = []; yeast[0] = { id: 1, name: "- -", brand: "Default", category: "Ale", attenuation: "75", flocculation: "Med", mintemp: "66", maxtemp: "72", alcoholtolerance: "Med" }; yeast[1] = { id: 2, name: "Abbey Ale Yeast WLP530", brand: "White Labs", category: "Ale", attenuation: "77.5", flocculation: "Med-High", mintemp: "66", maxtemp: "72", alcoholtolerance: "High" }; yeast[2] = { id: 3, name: "Abbey IV Ale Yeast WLP540", brand: "White Labs", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "High" }; yeast[3] = { id: 4, name: "American Ale Yeast Blend WLP060", brand: "White Labs", category: "Ale", attenuation: "76", flocculation: "Medium", mintemp: "68", maxtemp: "72", alcoholtolerance: "Med-High" }; yeast[4] = { id: 131, name: "American Farmhouse Blend WLP670", brand: "White Labs", category: "Ale", attenuation: "78.5", flocculation: "Medium", mintemp: "68", maxtemp: "72", alcoholtolerance: "Medium" }; yeast[5] = { id: 5, name: "American Hefeweizen Ale Yeast WLP320", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Low", mintemp: "65", maxtemp: "69", alcoholtolerance: "Medium" }; yeast[6] = { id: 6, name: "American Lager Yeast WLP840", brand: "White Labs", category: "Lager", attenuation: "77.5", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[7] = { id: 165, name: "American Whiskey WLP065", brand: "White Labs", category: "Ale", attenuation: "79", flocculation: "Medium", mintemp: "75", maxtemp: "82", alcoholtolerance: "High" }; yeast[8] = { id: 7, name: "Antwerp Ale Yeast WLP515", brand: "White Labs", category: "Ale", attenuation: "76.5", flocculation: "Medium", mintemp: "67", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[9] = { id: 8, name: "Australian Ale Yeast WLP009", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "High", mintemp: "65", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[10] = { id: 9, name: "Bavarian Weizen Yeast WLP351", brand: "White Labs", category: "Wheat", attenuation: "75", flocculation: "Low", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[11] = { id: 10, name: "Bedford British WLP006", brand: "White Labs", category: "Ale", attenuation: "76", flocculation: "High", mintemp: "65", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[12] = { id: 11, name: "Belgian Ale Yeast WLP550", brand: "White Labs", category: "Ale", attenuation: "81.5", flocculation: "Medium", mintemp: "68", maxtemp: "78", alcoholtolerance: "Med-High" }; yeast[13] = { id: 12, name: "Belgian Bastogne Ale Yeast WLP510", brand: "White Labs", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "High" }; yeast[14] = { id: 13, name: "Belgian Golden Ale Yeast WLP570", brand: "White Labs", category: "Ale", attenuation: "75.5", flocculation: "Low", mintemp: "68", maxtemp: "75", alcoholtolerance: "High" }; yeast[15] = { id: 128, name: "Belgian Lager Yeast WLP815", brand: "White Labs", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[16] = { id: 14, name: "Belgian Saison I Yeast WLP565", brand: "White Labs", category: "Ale", attenuation: "70", flocculation: "Medium", mintemp: "68", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[17] = { id: 15, name: "Belgian Saison II Yeast WLP566", brand: "White Labs", category: "Ale", attenuation: "81.5", flocculation: "Medium", mintemp: "68", maxtemp: "78", alcoholtolerance: "Medium" }; yeast[18] = { id: 155, name: "Belgian Saison III Yeast WLP585", brand: "White Labs", category: "Ale", attenuation: "72", flocculation: "Low-Med", mintemp: "68", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[19] = { id: 171, name: "Belgian Sour Mix WLP655", brand: "White Labs", category: "Ale", attenuation: "75", flocculation: "Med/Low", mintemp: "80", maxtemp: "85", alcoholtolerance: "Med-High" }; yeast[20] = { id: 127, name: "Belgian Strong Ale Yeast WLP545", brand: "White Labs", category: "Ale", attenuation: "81.5", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "High" }; yeast[21] = { id: 16, name: "Belgian Style Ale Yeast Blend WLP575", brand: "White Labs", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "68", maxtemp: "75", alcoholtolerance: "Med-High" }; yeast[22] = { id: 17, name: "Belgian Style Saison Blend WLP568", brand: "White Labs", category: "Ale", attenuation: "75", flocculation: "Medium", mintemp: "70", maxtemp: "80", alcoholtolerance: "Medium" }; yeast[23] = { id: 18, name: "Belgian Wit Ale Yeast WLP400", brand: "White Labs", category: "Ale", attenuation: "76", flocculation: "Low-Med", mintemp: "67", maxtemp: "74", alcoholtolerance: "Medium" }; yeast[24] = { id: 19, name: "Belgian Wit II Ale Yeast WLP410", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Low-Med", mintemp: "67", maxtemp: "74", alcoholtolerance: "Medium" }; yeast[25] = { id: 130, name: "Berliner Weisse Blend WLP630", brand: "White Labs", category: "Ale", attenuation: "76.5", flocculation: "Medium", mintemp: "68", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[26] = { id: 166, name: "Bourbon Yeast WLP070", brand: "White Labs", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "72", maxtemp: "77", alcoholtolerance: "High" }; yeast[27] = { id: 173, name: "Brettanomyces Bruxellensis Trois WLP644", brand: "White Labs", category: "Ale", attenuation: "85", flocculation: "Low", mintemp: "70", maxtemp: "85", alcoholtolerance: "Med-High" }; yeast[28] = { id: 172, name: "Brettanomyces Bruxellensis WLP650", brand: "White Labs", category: "Ale", attenuation: "78", flocculation: "Low", mintemp: "85", maxtemp: "95", alcoholtolerance: "Med-High" }; yeast[29] = { id: 174, name: "Brettanomyces Claussenii WLP645", brand: "White Labs", category: "Ale", attenuation: "78", flocculation: "Low", mintemp: "85", maxtemp: "95", alcoholtolerance: "Med-High" }; yeast[30] = { id: 175, name: "Brettanomyces Lambicus WLP653", brand: "White Labs", category: "Ale", attenuation: "78", flocculation: "Low", mintemp: "85", maxtemp: "95", alcoholtolerance: "Med-High" }; yeast[31] = { id: 20, name: "British Ale Yeast WLP005", brand: "White Labs", category: "Ale", attenuation: "70.5", flocculation: "High", mintemp: "65", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[32] = { id: 21, name: "Burton Ale Yeast WLP023", brand: "White Labs", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "68", maxtemp: "73", alcoholtolerance: "Medium" }; yeast[33] = { id: 22, name: "California Ale V Yeast WLP051", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Med-High", mintemp: "66", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[34] = { id: 23, name: "California Ale Yeast WLP001", brand: "White Labs", category: "Ale", attenuation: "76.5", flocculation: "Medium", mintemp: "68", maxtemp: "73", alcoholtolerance: "High" }; yeast[35] = { id: 24, name: "Champagne Yeast WLP715", brand: "White Labs", category: "Champagne", attenuation: "90", flocculation: "Low", mintemp: "70", maxtemp: "75", alcoholtolerance: "0.17" }; yeast[36] = { id: 157, name: "Copenhagen Lager Yeast WLP850", brand: "White Labs", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "50", maxtemp: "58", alcoholtolerance: "Medium" }; yeast[37] = { id: 25, name: "Cream Ale Yeast Blend WLP080", brand: "White Labs", category: "Ale", attenuation: "77.5", flocculation: "Medium", mintemp: "65", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[38] = { id: 26, name: "Cry Havoc WLP862", brand: "White Labs", category: "Ale", attenuation: "68", flocculation: "Med-Low", mintemp: "68", maxtemp: "74", alcoholtolerance: "Medium" }; yeast[39] = { id: 27, name: "Czech Budejovice Lager Yeast WLP802", brand: "White Labs", category: "Lager", attenuation: "77.5", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[40] = { id: 28, name: "Dry English Ale Yeast WLP007", brand: "White Labs", category: "Ale", attenuation: "75", flocculation: "Med-High", mintemp: "65", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[41] = { id: 29, name: "Dusseldorf Alt Yeast WLP036", brand: "White Labs", category: "Ale", attenuation: "68.5", flocculation: "Medium", mintemp: "65", maxtemp: "72", alcoholtolerance: "Medium" }; yeast[42] = { id: 30, name: "East Coast Ale Yeast WLP008", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Med-Low", mintemp: "68", maxtemp: "73", alcoholtolerance: "Medium" }; yeast[43] = { id: 47, name: "East Midlands Ale Yeast WLP039", brand: "White Labs", category: "Ale", attenuation: "77.5", flocculation: "Med-High", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[44] = { id: 31, name: "Edinburgh Scottish Ale Yeast WLP028", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Medium", mintemp: "65", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[45] = { id: 32, name: "English Ale Blend WLP085", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Med-High", mintemp: "68", maxtemp: "72", alcoholtolerance: "Medium" }; yeast[46] = { id: 33, name: "English Ale Yeast WLP002", brand: "White Labs", category: "Ale", attenuation: "66.5", flocculation: "Very High", mintemp: "65", maxtemp: "68", alcoholtolerance: "Medium" }; yeast[47] = { id: 34, name: "English Cider Yeast WLP775", brand: "White Labs", category: "Wine", attenuation: "90", flocculation: "Medium", mintemp: "68", maxtemp: "75", alcoholtolerance: "Med-High" }; yeast[48] = { id: 35, name: "Essex Ale Yeast WLP022", brand: "White Labs", category: "Ale", attenuation: "73.5", flocculation: "Med-High", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[49] = { id: 36, name: "European Ale Yeast WLP011", brand: "White Labs", category: "Ale", attenuation: "67.5", flocculation: "Medium", mintemp: "65", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[50] = { id: 176, name: "Flemish Ale Blend WLP665", brand: "White Labs", category: "Ale", attenuation: "83", flocculation: "Low/Med", mintemp: "68", maxtemp: "80", alcoholtolerance: "Med-High" }; yeast[51] = { id: 37, name: "French Ale WLP072", brand: "White Labs", category: "Ale", attenuation: "71.5", flocculation: "Med-High", mintemp: "63", maxtemp: "67", alcoholtolerance: "Medium" }; yeast[52] = { id: 38, name: "German Ale II WLP003", brand: "White Labs", category: "Ale", attenuation: "76.5", flocculation: "Medium", mintemp: "65", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[53] = { id: 39, name: "German Ale/ Kölsch Yeast WLP029", brand: "White Labs", category: "Ale", attenuation: "75", flocculation: "Medium", mintemp: "65", maxtemp: "69", alcoholtolerance: "Medium" }; yeast[54] = { id: 40, name: "German Bock Lager Yeast WLP833", brand: "White Labs", category: "Lager", attenuation: "73", flocculation: "Medium", mintemp: "48", maxtemp: "55", alcoholtolerance: "Med-High" }; yeast[55] = { id: 156, name: "German Lager X Yeast WLP835", brand: "White Labs", category: "Lager", attenuation: "73", flocculation: "Medium", mintemp: "50", maxtemp: "54", alcoholtolerance: "Med-High" }; yeast[56] = { id: 41, name: "German Lager Yeast WLP830", brand: "White Labs", category: "Lager", attenuation: "76.5", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[57] = { id: 42, name: "Hefeweizen Ale Yeast WLP300", brand: "White Labs", category: "Wheat", attenuation: "74", flocculation: "Low", mintemp: "68", maxtemp: "72", alcoholtolerance: "Medium" }; yeast[58] = { id: 43, name: "Hefeweizen IV Ale Yeast WLP380", brand: "White Labs", category: "Wheat", attenuation: "76.5", flocculation: "Low", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[59] = { id: 159, name: "HP Lager Yeast WLP925", brand: "White Labs", category: "Lager", attenuation: "77.5", flocculation: "Medium", mintemp: "62", maxtemp: "68", alcoholtolerance: "Medium" }; yeast[60] = { id: 44, name: "Irish Ale Yeast WLP004", brand: "White Labs", category: "Ale", attenuation: "71.5", flocculation: "Med-High", mintemp: "65", maxtemp: "68", alcoholtolerance: "Med-High" }; yeast[61] = { id: 154, name: "Klassic Ale Yeast WLP033", brand: "White Labs", category: "Ale", attenuation: "70", flocculation: "Medium", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[62] = { id: 45, name: "London Ale Yeast WLP013", brand: "White Labs", category: "Ale", attenuation: "71", flocculation: "Medium", mintemp: "66", maxtemp: "71", alcoholtolerance: "Medium" }; yeast[63] = { id: 125, name: "Manchester Ale Yeast WLP038", brand: "White Labs", category: "Ale", attenuation: "72", flocculation: "Med-High", mintemp: "65", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[64] = { id: 46, name: "Mexican Lager Yeast WLP940", brand: "White Labs", category: "Lager", attenuation: "74", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[65] = { id: 158, name: "Munich Helles Yeast WLP860", brand: "White Labs", category: "Lager", attenuation: "70", flocculation: "Medium", mintemp: "48", maxtemp: "52", alcoholtolerance: "Medium" }; yeast[66] = { id: 167, name: "Neutral Grain Yeast WLP078", brand: "White Labs", category: "Ale", attenuation: "81", flocculation: "Medium", mintemp: "76", maxtemp: "85", alcoholtolerance: "High" }; yeast[67] = { id: 48, name: "Oktoberfest/Märzen Lager Yeast WLP820", brand: "White Labs", category: "Lager", attenuation: "69", flocculation: "Medium", mintemp: "52", maxtemp: "58", alcoholtolerance: "Med-High" }; yeast[68] = { id: 129, name: "Old Bavarian Lager Yeast WLP920", brand: "White Labs", category: "Lager", attenuation: "69.5", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium-High" }; yeast[69] = { id: 168, name: "Old Sonoma Ale WLP076", brand: "White Labs", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[70] = { id: 49, name: "Pacific Ale Yeast WLP041", brand: "White Labs", category: "Ale", attenuation: "67.5", flocculation: "High", mintemp: "65", maxtemp: "68", alcoholtolerance: "Medium" }; yeast[71] = { id: 50, name: "Pilsner Lager Yeast WLP800", brand: "White Labs", category: "Lager", attenuation: "74.5", flocculation: "Med-High", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[72] = { id: 153, name: "Premium Bitter Ale Yeast WLP026", brand: "White Labs", category: "Ale", attenuation: "72.5", flocculation: "Medium", mintemp: "67", maxtemp: "60", alcoholtolerance: "Medium" }; yeast[73] = { id: 126, name: "San Diego Super Yeast WLP090", brand: "White Labs", category: "Ale", attenuation: "79.5", flocculation: "Med-High", mintemp: "65", maxtemp: "68", alcoholtolerance: "High" }; yeast[74] = { id: 51, name: "San Francisco Lager Yeast WLP810", brand: "White Labs", category: "Lager", attenuation: "67.5", flocculation: "High", mintemp: "58", maxtemp: "65", alcoholtolerance: "Med-High" }; yeast[75] = { id: 169, name: "Scotch Whiskey WLP045", brand: "White Labs", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "72", maxtemp: "77", alcoholtolerance: "High" }; yeast[76] = { id: 52, name: "Southern German Lager Yeast WLP838", brand: "White Labs", category: "Lager", attenuation: "72", flocculation: "Med-High", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[77] = { id: 152, name: "Southwold Ale Yeast WLP025", brand: "White Labs", category: "Ale", attenuation: "71.5", flocculation: "Medium", mintemp: "66", maxtemp: "69", alcoholtolerance: "Medium" }; yeast[78] = { id: 53, name: "Super High Gravity Ale Yeast WLP099", brand: "White Labs", category: "Ale", attenuation: "85", flocculation: "Medium", mintemp: "65", maxtemp: "69", alcoholtolerance: "Very High" }; yeast[79] = { id: 54, name: "Sweet Mead/Wine Yeast WLP720", brand: "White Labs", category: "Wine", attenuation: "75", flocculation: "Low", mintemp: "70", maxtemp: "75", alcoholtolerance: "0.15" }; yeast[80] = { id: 170, name: "Tennessee Whiskey WLP050", brand: "White Labs", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "75", maxtemp: "79", alcoholtolerance: "High" }; yeast[81] = { id: 55, name: "Trappist Ale Yeast WLP500", brand: "White Labs", category: "Ale", attenuation: "77.5", flocculation: "Med-Low", mintemp: "65", maxtemp: "72", alcoholtolerance: "High" }; yeast[82] = { id: 151, name: "Whitbread Ale Yeast WLP017", brand: "White Labs", category: "Ale", attenuation: "70", flocculation: "High", mintemp: "66", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[83] = { id: 124, name: "Yorkshire Square Ale Yeast WLP037", brand: "White Labs", category: "Ale", attenuation: "70", flocculation: "High", mintemp: "65", maxtemp: "69", alcoholtolerance: "Med-High" }; yeast[84] = { id: 56, name: "Zurich Lager Yeast WLP885", brand: "White Labs", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "50", maxtemp: "55", alcoholtolerance: "Medium" }; yeast[85] = { id: 57, name: "American Ale 1056", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med-Low", mintemp: "60", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[86] = { id: 58, name: "American Ale II 1272", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "High", mintemp: "60", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[87] = { id: 59, name: "American Lager 2035", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "48", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[88] = { id: 60, name: "American Wheat 1010", brand: "Wyeast", category: "Wheat", attenuation: "76", flocculation: "Low", mintemp: "58", maxtemp: "74", alcoholtolerance: "0.1" }; yeast[89] = { id: 61, name: "Bavarian Lager 2206", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Med-High", mintemp: "46", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[90] = { id: 62, name: "Bavarian Wheat 3056", brand: "Wyeast", category: "Wheat", attenuation: "75", flocculation: "Medium", mintemp: "64", maxtemp: "74", alcoholtolerance: "0.1" }; yeast[91] = { id: 63, name: "Bavarian Wheat 3638", brand: "Wyeast", category: "Wheat", attenuation: "73", flocculation: "Low", mintemp: "64", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[92] = { id: 64, name: "Belgian Abby Ale II 1762", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Medium", mintemp: "65", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[93] = { id: 65, name: "Belgian Ale 1214", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med-Low", mintemp: "68", maxtemp: "78", alcoholtolerance: "0.09" }; yeast[94] = { id: 66, name: "Belgian Ardennes 3522", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "High", mintemp: "65", maxtemp: "85", alcoholtolerance: "0.12" }; yeast[95] = { id: 177, name: "Belgian Dark Ale 3822", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Medium", mintemp: "65", maxtemp: "80", alcoholtolerance: "0.12" }; yeast[96] = { id: 67, name: "Belgian Lambic Blend 3278", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med", mintemp: "63", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[97] = { id: 68, name: "Belgian Saison 3724", brand: "Wyeast", category: "Ale", attenuation: "78", flocculation: "Low", mintemp: "70", maxtemp: "95", alcoholtolerance: "0.12" }; yeast[98] = { id: 147, name: "Belgian Schelde 3655", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med", mintemp: "62", maxtemp: "74", alcoholtolerance: "0.11" }; yeast[99] = { id: 178, name: "Belgian Stout 1581", brand: "Wyeast", category: "Ale", attenuation: "80", flocculation: "Medium", mintemp: "65", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[100] = { id: 69, name: "Belgian Strong Ale 1388", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Low", mintemp: "64", maxtemp: "80", alcoholtolerance: "0.12" }; yeast[101] = { id: 70, name: "Belgian Wheat 3942", brand: "Wyeast", category: "Wheat", attenuation: "74", flocculation: "Medium", mintemp: "64", maxtemp: "74", alcoholtolerance: "0.12" }; yeast[102] = { id: 71, name: "Belgian Witbier 3944", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "Med-Low", mintemp: "62", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[103] = { id: 186, name: "Berliner Weisse Blend 3191", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Low", mintemp: "68", maxtemp: "72", alcoholtolerance: "0.06" }; yeast[104] = { id: 137, name: "Bier de Garde 3725", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Low", mintemp: "70", maxtemp: "95", alcoholtolerance: "0.12" }; yeast[105] = { id: 72, name: "Bohemian Lager 2124", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "48", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[106] = { id: 73, name: "Brettanomyces bruxellensis 5112", brand: "Wyeast", category: "Ale", attenuation: "90", flocculation: "Medium", mintemp: "60", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[107] = { id: 74, name: "Brettanomyces lambicus 5526", brand: "Wyeast", category: "Ale", attenuation: "90", flocculation: "Medium", mintemp: "60", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[108] = { id: 75, name: "British Ale 1098", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "Med-High", mintemp: "64", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[109] = { id: 76, name: "British Ale 1335", brand: "Wyeast", category: "Ale", attenuation: "74.5", flocculation: "High", mintemp: "63", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[110] = { id: 179, name: "British Cask Ale 1026", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Med/High", mintemp: "63", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[111] = { id: 77, name: "Budvar Lager 2000", brand: "Wyeast", category: "Lager", attenuation: "73", flocculation: "Med-High", mintemp: "48", maxtemp: "56", alcoholtolerance: "0.09" }; yeast[112] = { id: 78, name: "California Lager 2112", brand: "Wyeast", category: "Lager", attenuation: "69", flocculation: "High", mintemp: "58", maxtemp: "68", alcoholtolerance: "0.09" }; yeast[113] = { id: 180, name: "Canadian/Belgian Ale 3864", brand: "Wyeast", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "65", maxtemp: "80", alcoholtolerance: "0.12" }; yeast[114] = { id: 79, name: "Cider 4766", brand: "Wyeast", category: "Wine", attenuation: "85", flocculation: "Low", mintemp: "65", maxtemp: "70", alcoholtolerance: "0.12" }; yeast[115] = { id: 80, name: "Czech Pils 2278", brand: "Wyeast", category: "Lager", attenuation: "72", flocculation: "Med-High", mintemp: "50", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[116] = { id: 81, name: "Danish Lager 2042", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Low", mintemp: "46", maxtemp: "56", alcoholtolerance: "0.09" }; yeast[117] = { id: 132, name: "Denny's Favorite 50 1450", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Low", mintemp: "60", maxtemp: "70", alcoholtolerance: "0.1" }; yeast[118] = { id: 82, name: "Dry Mead 4632", brand: "Wyeast", category: "Wine", attenuation: "95", flocculation: "Low-Med", mintemp: "55", maxtemp: "75", alcoholtolerance: "0.18" }; yeast[119] = { id: 143, name: "English Special Bitter 1768", brand: "Wyeast", category: "Ale", attenuation: "70", flocculation: "High", mintemp: "64", maxtemp: "72", alcoholtolerance: "0.09" }; yeast[120] = { id: 83, name: "European Ale 1338", brand: "Wyeast", category: "Ale", attenuation: "69", flocculation: "High", mintemp: "62", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[121] = { id: 182, name: "European Lager 2247", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Low", mintemp: "46", maxtemp: "56", alcoholtolerance: "0.09" }; yeast[122] = { id: 136, name: "Farmhouse Ale 3726", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Variable", mintemp: "70", maxtemp: "95", alcoholtolerance: "0.12" }; yeast[123] = { id: 142, name: "Flanders Golden Ale 3739", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Med-Low", mintemp: "64", maxtemp: "80", alcoholtolerance: "0.12" }; yeast[124] = { id: 84, name: "Forbidden Fruit 3463", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "Low", mintemp: "63", maxtemp: "76", alcoholtolerance: "0.12" }; yeast[125] = { id: 133, name: "French Saison 3711", brand: "Wyeast", category: "Ale", attenuation: "80", flocculation: "Low", mintemp: "65", maxtemp: "77", alcoholtolerance: "0.12" }; yeast[126] = { id: 85, name: "German Ale 1007", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Low", mintemp: "55", maxtemp: "68", alcoholtolerance: "0.11" }; yeast[127] = { id: 86, name: "German Wheat 3333", brand: "Wyeast", category: "Wheat", attenuation: "73", flocculation: "High", mintemp: "63", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[128] = { id: 138, name: "Hella Bock 2487", brand: "Wyeast", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "48", maxtemp: "56", alcoholtolerance: "0.12" }; yeast[129] = { id: 87, name: "Irish Ale 1084", brand: "Wyeast", category: "Ale", attenuation: "73", flocculation: "Medium", mintemp: "62", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[130] = { id: 88, name: "Kölsch 2565", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Low", mintemp: "56", maxtemp: "70", alcoholtolerance: "0.1" }; yeast[131] = { id: 181, name: "Kalsch II 2575", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Low", mintemp: "55", maxtemp: "70", alcoholtolerance: "0.1" }; yeast[132] = { id: 89, name: "Lactobacillus 5335", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "-", mintemp: "60", maxtemp: "95", alcoholtolerance: "0.09" }; yeast[133] = { id: 145, name: "Leuven Pale Ale 3538", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "High", mintemp: "65", maxtemp: "80", alcoholtolerance: "0.12" }; yeast[134] = { id: 90, name: "London Ale 1028", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med-Low", mintemp: "60", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[135] = { id: 91, name: "London Ale III 1318", brand: "Wyeast", category: "Ale", attenuation: "73", flocculation: "High", mintemp: "64", maxtemp: "74", alcoholtolerance: "0.1" }; yeast[136] = { id: 92, name: "London ESB Ale 1968", brand: "Wyeast", category: "Ale", attenuation: "69", flocculation: "Very High", mintemp: "64", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[137] = { id: 93, name: "Munich Lager 2308", brand: "Wyeast", category: "Lager", attenuation: "72", flocculation: "Medium", mintemp: "48", maxtemp: "56", alcoholtolerance: "0.09" }; yeast[138] = { id: 183, name: "Munich Lager II 2352", brand: "Wyeast", category: "Lager", attenuation: "73", flocculation: "Medium", mintemp: "52", maxtemp: "62", alcoholtolerance: "0.1" }; yeast[139] = { id: 135, name: "NB NeoBritannia 1945", brand: "Wyeast", category: "Ale", attenuation: "74", flocculation: "Med-High", mintemp: "66", maxtemp: "74", alcoholtolerance: "0.1" }; yeast[140] = { id: 141, name: "North American Lager 2272", brand: "Wyeast", category: "Lager", attenuation: "73", flocculation: "High", mintemp: "52", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[141] = { id: 94, name: "Northwest Ale 1332", brand: "Wyeast", category: "Ale", attenuation: "69", flocculation: "High", mintemp: "65", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[142] = { id: 95, name: "Octoberfest Lager Blend 2633", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Med-Low", mintemp: "48", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[143] = { id: 96, name: "Pediococcus 5733", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "-", mintemp: "60", maxtemp: "95", alcoholtolerance: "0.09" }; yeast[144] = { id: 97, name: "Pilsen Lager 2007", brand: "Wyeast", category: "Lager", attenuation: "73", flocculation: "Medium", mintemp: "48", maxtemp: "56", alcoholtolerance: "0.09" }; yeast[145] = { id: 184, name: "Rasenmäher Lager 2252", brand: "Wyeast", category: "Lager", attenuation: "75", flocculation: "Low", mintemp: "48", maxtemp: "68", alcoholtolerance: "0.09" }; yeast[146] = { id: 98, name: "Ringwood Ale 1187", brand: "Wyeast", category: "Ale", attenuation: "70", flocculation: "High", mintemp: "64", maxtemp: "74", alcoholtolerance: "0.1" }; yeast[147] = { id: 185, name: "Rocky Mountain Lager 2105", brand: "Wyeast", category: "Lager", attenuation: "72", flocculation: "Med/High", mintemp: "48", maxtemp: "56", alcoholtolerance: "0.1" }; yeast[148] = { id: 134, name: "Roeselare Ale Blend 3763", brand: "Wyeast", category: "Ale", attenuation: "80", flocculation: "Variable", mintemp: "65", maxtemp: "85", alcoholtolerance: "0.11" }; yeast[149] = { id: 146, name: "Rogue Pacman 1764", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "Med-High", mintemp: "60", maxtemp: "72", alcoholtolerance: "0.12" }; yeast[150] = { id: 99, name: "Scottish Ale 1728", brand: "Wyeast", category: "Ale", attenuation: "71", flocculation: "High", mintemp: "55", maxtemp: "75", alcoholtolerance: "0.12" }; yeast[151] = { id: 144, name: "Staro Prague Lager 2782", brand: "Wyeast", category: "Lager", attenuation: "72", flocculation: "High", mintemp: "50", maxtemp: "58", alcoholtolerance: "0.11" }; yeast[152] = { id: 100, name: "Sweet Mead 4184", brand: "Wyeast", category: "Wine", attenuation: "75", flocculation: "Medium", mintemp: "65", maxtemp: "75", alcoholtolerance: "0.11" }; yeast[153] = { id: 101, name: "Thames Valley Ale 1275", brand: "Wyeast", category: "Ale", attenuation: "77", flocculation: "Med-Low", mintemp: "62", maxtemp: "72", alcoholtolerance: "0.1" }; yeast[154] = { id: 140, name: "Thames Valley II 1882", brand: "Wyeast", category: "Ale", attenuation: "75", flocculation: "High", mintemp: "60", maxtemp: "70", alcoholtolerance: "0.1" }; yeast[155] = { id: 139, name: "Trappist Blend 3789", brand: "Wyeast", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "68", maxtemp: "85", alcoholtolerance: "0.12" }; yeast[156] = { id: 102, name: "Trappist High Gravity 3787", brand: "Wyeast", category: "Ale", attenuation: "76", flocculation: "Med-High", mintemp: "64", maxtemp: "78", alcoholtolerance: "0.12" }; yeast[157] = { id: 103, name: "Urquell Lager 2001", brand: "Wyeast", category: "Lager", attenuation: "74", flocculation: "Med-High", mintemp: "48", maxtemp: "58", alcoholtolerance: "0.09" }; yeast[158] = { id: 104, name: "Weihenstephan Weizen 3068", brand: "Wyeast", category: "Wheat", attenuation: "75", flocculation: "Low", mintemp: "64", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[159] = { id: 148, name: "West Yorkshire 1469", brand: "Wyeast", category: "Ale", attenuation: "69", flocculation: "High", mintemp: "64", maxtemp: "72", alcoholtolerance: "0.09" }; yeast[160] = { id: 105, name: "Whitbread Ale 1099", brand: "Wyeast", category: "Ale", attenuation: "70", flocculation: "High", mintemp: "64", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[161] = { id: 149, name: "American West Coast Yeast BRY-97", brand: "Danstar", category: "Ale", attenuation: "72", flocculation: "High", mintemp: "62", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[162] = { id: 150, name: "Belle Saison Yeast", brand: "Danstar", category: "Ale", attenuation: "80", flocculation: "Low", mintemp: "63", maxtemp: "75", alcoholtolerance: "High" }; yeast[163] = { id: 163, name: "Cask and Bottle Conditioning CBC-1", brand: "Danstar", category: "Ale", attenuation: "72", flocculation: "Med/Low", mintemp: "59", maxtemp: "77", alcoholtolerance: "n/a" }; yeast[164] = { id: 116, name: "Diamond Lager", brand: "Danstar", category: "Lager", attenuation: "77", flocculation: "High", mintemp: "50", maxtemp: "59", alcoholtolerance: "Medium" }; yeast[165] = { id: 117, name: "Munich Dry Wheat Yeast", brand: "Danstar", category: "Wheat", attenuation: "75", flocculation: "Medium", mintemp: "64", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[166] = { id: 118, name: "Nottingham Ale Yeast", brand: "Danstar", category: "Ale", attenuation: "77", flocculation: "High", mintemp: "57", maxtemp: "70", alcoholtolerance: "Med-High" }; yeast[167] = { id: 119, name: "Windsor Ale Yeast", brand: "Danstar", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "64", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[168] = { id: 187, name: "Baltic Lager ECY22", brand: "East Coast Yeast", category: "Lager", attenuation: "77", flocculation: "Medium", mintemp: "46", maxtemp: "54", alcoholtolerance: "n/a" }; yeast[169] = { id: 188, name: "Belgian Abbaye ECY09", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[170] = { id: 189, name: "Belgian White ECY11", brand: "East Coast Yeast", category: "Ale", attenuation: "76", flocculation: "Low", mintemp: "70", maxtemp: "76", alcoholtolerance: "n/a" }; yeast[171] = { id: 190, name: "Berliner Blend ECY06", brand: "East Coast Yeast", category: "Ale", attenuation: "76", flocculation: "n/a", mintemp: "70", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[172] = { id: 191, name: "Brett Blend #1 Anomala ECY04", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "n/a", mintemp: "70", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[173] = { id: 192, name: "Brett Blend #9 ECY05", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "n/a", mintemp: "70", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[174] = { id: 193, name: "Brett Custersianus ECY19", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "n/a", mintemp: "60", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[175] = { id: 194, name: "Brett Nanus ECY24", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "n/a", mintemp: "70", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[176] = { id: 195, name: "British Mild ECY18", brand: "East Coast Yeast", category: "Ale", attenuation: "68", flocculation: "Low", mintemp: "60", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[177] = { id: 196, name: "BugCounty ECY20", brand: "East Coast Yeast", category: "Ale", attenuation: "80", flocculation: "n/a", mintemp: "60", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[178] = { id: 197, name: "BugFarm ECY01", brand: "East Coast Yeast", category: "Ale", attenuation: "80", flocculation: "n/a", mintemp: "60", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[179] = { id: 198, name: "Burton Union ECY17", brand: "East Coast Yeast", category: "Ale", attenuation: "74", flocculation: "Medium", mintemp: "64", maxtemp: "69", alcoholtolerance: "n/a" }; yeast[180] = { id: 199, name: "Farmhouse Brett ECY03", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "n/a", mintemp: "70", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[181] = { id: 200, name: "Flemish Ale ECY02", brand: "East Coast Yeast", category: "Ale", attenuation: "80", flocculation: "n/a", mintemp: "60", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[182] = { id: 201, name: "Kalschbier ECY21", brand: "East Coast Yeast", category: "Ale", attenuation: "77", flocculation: "High", mintemp: "58", maxtemp: "66", alcoholtolerance: "n/a" }; yeast[183] = { id: 202, name: "Munich Festbier ECY15", brand: "East Coast Yeast", category: "Lager", attenuation: "75", flocculation: "Medium", mintemp: "46", maxtemp: "54", alcoholtolerance: "n/a" }; yeast[184] = { id: 203, name: "Northeast Ale ECY29", brand: "East Coast Yeast", category: "Ale", attenuation: "81", flocculation: "High", mintemp: "65", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[185] = { id: 204, name: "Old Newark Ale ECY10", brand: "East Coast Yeast", category: "Ale", attenuation: "72", flocculation: "High", mintemp: "60", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[186] = { id: 205, name: "Old Newark Beer ECY12", brand: "East Coast Yeast", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "58", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[187] = { id: 206, name: "Oud Brune ECY23", brand: "East Coast Yeast", category: "Ale", attenuation: "77", flocculation: "n/a", mintemp: "68", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[188] = { id: 115, name: "safbrew - Belgian Ale Yeast BE-256", brand: "Fermentis / Safale", category: "Ale", attenuation: "83", flocculation: "High", mintemp: "59", maxtemp: "75", alcoholtolerance: "High" }; yeast[189] = { id: 207, name: "Saison Brasserie ECY08", brand: "East Coast Yeast", category: "Ale", attenuation: "80", flocculation: "Medium", mintemp: "75", maxtemp: "85", alcoholtolerance: "n/a" }; yeast[190] = { id: 208, name: "Saison Single ECY14", brand: "East Coast Yeast", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "75", maxtemp: "82", alcoholtolerance: "n/a" }; yeast[191] = { id: 209, name: "Scottish Heavy ECY07", brand: "East Coast Yeast", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "60", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[192] = { id: 210, name: "Trappist Ale ECY13", brand: "East Coast Yeast", category: "Ale", attenuation: "75", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[193] = { id: 107, name: "Safale - American Ale Yeast US-05", brand: "Fermentis / Safale", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[194] = { id: 106, name: "Safale - American Ale Yeast US-56", brand: "Fermentis / Safale", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[195] = { id: 108, name: "Safale - English Ale Yeast S-04", brand: "Fermentis / Safale", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[196] = { id: 109, name: "Safale - German Ale Yeast K-97", brand: "Fermentis / Safale", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[197] = { id: 110, name: "Safbrew - General/Belgian Yeast S-33", brand: "Fermentis / Safale", category: "Ale", attenuation: "77", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "0.115" }; yeast[198] = { id: 111, name: "Safbrew - Specialty Ale Yeast T-58", brand: "Fermentis / Safale", category: "Ale", attenuation: "72", flocculation: "Medium", mintemp: "59", maxtemp: "75", alcoholtolerance: "0.115" }; yeast[199] = { id: 112, name: "Safbrew - Wheat Beer Yeast WB-06", brand: "Fermentis / Safale", category: "Wheat", attenuation: "72", flocculation: "Low", mintemp: "59", maxtemp: "75", alcoholtolerance: "Medium" }; yeast[200] = { id: 114, name: "Saflager - German Lager Yeast S-23", brand: "Fermentis / Safale", category: "Lager", attenuation: "72", flocculation: "High", mintemp: "48", maxtemp: "59", alcoholtolerance: "Medium" }; yeast[201] = { id: 113, name: "Saflager - German Lager Yeast W-34/70", brand: "Fermentis / Safale", category: "Lager", attenuation: "72", flocculation: "High", mintemp: "48", maxtemp: "59", alcoholtolerance: "Medium" }; yeast[202] = { id: 115, name: "Saflager - Swiss Lager Yeast S-189", brand: "Fermentis / Safale", category: "Lager", attenuation: "72", flocculation: "High", mintemp: "48", maxtemp: "59", alcoholtolerance: "Medium" }; yeast[203] = { id: 211, name: "Bavarian Wheat Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "73", flocculation: "Low", mintemp: "59", maxtemp: "86", alcoholtolerance: "n/a" }; yeast[204] = { id: 212, name: "Belgian Ale Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "79", maxtemp: "90", alcoholtolerance: "n/a" }; yeast[205] = { id: 213, name: "Bohemian Lager Yeast", brand: "Mangrove Jack", category: "Lager", attenuation: "78", flocculation: "High", mintemp: "50", maxtemp: "59", alcoholtolerance: "n/a" }; yeast[206] = { id: 214, name: "British Ale Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "78", flocculation: "High", mintemp: "57", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[207] = { id: 215, name: "Burton Union Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "78", flocculation: "High", mintemp: "62", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[208] = { id: 216, name: "Newcastle Dark Ale Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "73", flocculation: "Medium", mintemp: "64", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[209] = { id: 217, name: "US West Coast Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "78", flocculation: "High", mintemp: "59", maxtemp: "74", alcoholtolerance: "n/a" }; yeast[210] = { id: 218, name: "Workhorse Beer Yeast", brand: "Mangrove Jack", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "59", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[211] = { id: 219, name: "Lucky No. 7", brand: "Real Brewers", category: "Ale", attenuation: "75", flocculation: "High", mintemp: "68", maxtemp: "75", alcoholtolerance: "0.1" }; yeast[212] = { id: 220, name: "The Monk", brand: "Real Brewers", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "66", maxtemp: "72", alcoholtolerance: "0.15" }; yeast[213] = { id: 221, name: "The One", brand: "Real Brewers", category: "Ale", attenuation: "75", flocculation: "High", mintemp: "68", maxtemp: "75", alcoholtolerance: "n/a" }; yeast[214] = { id: 222, name: "Ye Olde English", brand: "Real Brewers", category: "Ale", attenuation: "70", flocculation: "Medium", mintemp: "65", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[215] = { id: 223, name: "Alt Ale BRY 144", brand: "Siebel Institute", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "59", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[216] = { id: 224, name: "American Ale BRY 96", brand: "Siebel Institute", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "64", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[217] = { id: 225, name: "American Lager BRY 118", brand: "Siebel Institute", category: "Lager", attenuation: "72", flocculation: "High", mintemp: "68", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[218] = { id: 226, name: "Bavarian Weizen Ale BRY 235", brand: "Siebel Institute", category: "Ale", attenuation: "73", flocculation: "High", mintemp: "50", maxtemp: "57", alcoholtolerance: "n/a" }; yeast[219] = { id: 227, name: "English Ale BRY 264", brand: "Siebel Institute", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "59", maxtemp: "68", alcoholtolerance: "n/a" }; yeast[220] = { id: 228, name: "German Kalsch BRY 401", brand: "Siebel Institute", category: "Ale", attenuation: "72", flocculation: "Low", mintemp: "55", maxtemp: "59", alcoholtolerance: "n/a" }; yeast[221] = { id: 229, name: "North European Lager BRY 203", brand: "Siebel Institute", category: "Lager", attenuation: "78", flocculation: "Low", mintemp: "68", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[222] = { id: 230, name: "Trappist Ale BRY 204", brand: "Siebel Institute", category: "Ale", attenuation: "78", flocculation: "Medium", mintemp: "64", maxtemp: "72", alcoholtolerance: "n/a" }; yeast[223] = { id: 160, name: "Brewferm Blanche", brand: "Altri", category: "Ale", attenuation: "78", flocculation: "Low", mintemp: "64", maxtemp: "73", alcoholtolerance: "n/a" }; yeast[224] = { id: 161, name: "Brewferm Lager", brand: "Altri", category: "Lager", attenuation: "78", flocculation: "High", mintemp: "50", maxtemp: "59", alcoholtolerance: "n/a" }; yeast[225] = { id: 162, name: "Brewferm Top", brand: "Altri", category: "Ale", attenuation: "75", flocculation: "Med/High", mintemp: "64", maxtemp: "77", alcoholtolerance: "Medium" }; yeast[226] = { id: 120, name: "Coopers Ale", brand: "Altri", category: "Ale", attenuation: "72", flocculation: "High", mintemp: "68", maxtemp: "80", alcoholtolerance: "Medium" }; yeast[227] = { id: 121, name: "Doric Ale", brand: "Altri", category: "Ale", attenuation: "74", flocculation: "Medium", mintemp: "62", maxtemp: "72", alcoholtolerance: "Medium" }; yeast[228] = { id: 122, name: "Edme Ale", brand: "Altri", category: "Ale", attenuation: "74", flocculation: "Medium", mintemp: "62", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[229] = { id: 231, name: "Gervin Ale (by Muntons) GV-12", brand: "Altri", category: "Ale", attenuation: "77", flocculation: "High", mintemp: "57", maxtemp: "70", alcoholtolerance: "n/a" }; yeast[230] = { id: 123, name: "Munton and Fison", brand: "Altri", category: "Ale", attenuation: "72", flocculation: "High", mintemp: "64", maxtemp: "70", alcoholtolerance: "Medium" }; yeast[231] = { id: 164, name: "Muntons Premium Gold", brand: "Altri", category: "Ale", attenuation: "78", flocculation: "High", mintemp: "57", maxtemp: "77", alcoholtolerance: "n/a" }; var yeast_by_productid = []; yeast_by_productid[0] = { id: 1, name: "- -", brand: "Default" }; yeast_by_productid[1] = { id: 2, name: "Abbey Ale Yeast WLP530", brand: "White Labs" }; yeast_by_productid[2] = { id: 3, name: "Abbey IV Ale Yeast WLP540", brand: "White Labs" }; yeast_by_productid[3] = { id: 4, name: "American Ale Yeast Blend WLP060", brand: "White Labs" }; yeast_by_productid[4] = { id: 131, name: "American Farmhouse Blend WLP670", brand: "White Labs" }; yeast_by_productid[5] = { id: 5, name: "American Hefeweizen Ale Yeast WLP320", brand: "White Labs" }; yeast_by_productid[6] = { id: 6, name: "American Lager Yeast WLP840", brand: "White Labs" }; yeast_by_productid[7] = { id: 165, name: "American Whiskey WLP065", brand: "White Labs" }; yeast_by_productid[8] = { id: 7, name: "Antwerp Ale Yeast WLP515", brand: "White Labs" }; yeast_by_productid[9] = { id: 8, name: "Australian Ale Yeast WLP009", brand: "White Labs" }; yeast_by_productid[10] = { id: 9, name: "Bavarian Weizen Yeast WLP351", brand: "White Labs" }; yeast_by_productid[11] = { id: 10, name: "Bedford British WLP006", brand: "White Labs" }; yeast_by_productid[12] = { id: 11, name: "Belgian Ale Yeast WLP550", brand: "White Labs" }; yeast_by_productid[13] = { id: 12, name: "Belgian Bastogne Ale Yeast WLP510", brand: "White Labs" }; yeast_by_productid[14] = { id: 13, name: "Belgian Golden Ale Yeast WLP570", brand: "White Labs" }; yeast_by_productid[15] = { id: 128, name: "Belgian Lager Yeast WLP815", brand: "White Labs" }; yeast_by_productid[16] = { id: 14, name: "Belgian Saison I Yeast WLP565", brand: "White Labs" }; yeast_by_productid[17] = { id: 15, name: "Belgian Saison II Yeast WLP566", brand: "White Labs" }; yeast_by_productid[18] = { id: 155, name: "Belgian Saison III Yeast WLP585", brand: "White Labs" }; yeast_by_productid[19] = { id: 171, name: "Belgian Sour Mix WLP655", brand: "White Labs" }; yeast_by_productid[20] = { id: 127, name: "Belgian Strong Ale Yeast WLP545", brand: "White Labs" }; yeast_by_productid[21] = { id: 16, name: "Belgian Style Ale Yeast Blend WLP575", brand: "White Labs" }; yeast_by_productid[22] = { id: 17, name: "Belgian Style Saison Blend WLP568", brand: "White Labs" }; yeast_by_productid[23] = { id: 18, name: "Belgian Wit Ale Yeast WLP400", brand: "White Labs" }; yeast_by_productid[24] = { id: 19, name: "Belgian Wit II Ale Yeast WLP410", brand: "White Labs" }; yeast_by_productid[25] = { id: 130, name: "Berliner Weisse Blend WLP630", brand: "White Labs" }; yeast_by_productid[26] = { id: 166, name: "Bourbon Yeast WLP070", brand: "White Labs" }; yeast_by_productid[27] = { id: 173, name: "Brettanomyces Bruxellensis Trois WLP644", brand: "White Labs" }; yeast_by_productid[28] = { id: 172, name: "Brettanomyces Bruxellensis WLP650", brand: "White Labs" }; yeast_by_productid[29] = { id: 174, name: "Brettanomyces Claussenii WLP645", brand: "White Labs" }; yeast_by_productid[30] = { id: 175, name: "Brettanomyces Lambicus WLP653", brand: "White Labs" }; yeast_by_productid[31] = { id: 20, name: "British Ale Yeast WLP005", brand: "White Labs" }; yeast_by_productid[32] = { id: 21, name: "Burton Ale Yeast WLP023", brand: "White Labs" }; yeast_by_productid[33] = { id: 22, name: "California Ale V Yeast WLP051", brand: "White Labs" }; yeast_by_productid[34] = { id: 23, name: "California Ale Yeast WLP001", brand: "White Labs" }; yeast_by_productid[35] = { id: 24, name: "Champagne Yeast WLP715", brand: "White Labs" }; yeast_by_productid[36] = { id: 157, name: "Copenhagen Lager Yeast WLP850", brand: "White Labs" }; yeast_by_productid[37] = { id: 25, name: "Cream Ale Yeast Blend WLP080", brand: "White Labs" }; yeast_by_productid[38] = { id: 26, name: "Cry Havoc WLP862", brand: "White Labs" }; yeast_by_productid[39] = { id: 27, name: "Czech Budejovice Lager Yeast WLP802", brand: "White Labs" }; yeast_by_productid[40] = { id: 28, name: "Dry English Ale Yeast WLP007", brand: "White Labs" }; yeast_by_productid[41] = { id: 29, name: "Dusseldorf Alt Yeast WLP036", brand: "White Labs" }; yeast_by_productid[42] = { id: 30, name: "East Coast Ale Yeast WLP008", brand: "White Labs" }; yeast_by_productid[43] = { id: 47, name: "East Midlands Ale Yeast WLP039", brand: "White Labs" }; yeast_by_productid[44] = { id: 31, name: "Edinburgh Scottish Ale Yeast WLP028", brand: "White Labs" }; yeast_by_productid[45] = { id: 32, name: "English Ale Blend WLP085", brand: "White Labs" }; yeast_by_productid[46] = { id: 33, name: "English Ale Yeast WLP002", brand: "White Labs" }; yeast_by_productid[47] = { id: 34, name: "English Cider Yeast WLP775", brand: "White Labs" }; yeast_by_productid[48] = { id: 35, name: "Essex Ale Yeast WLP022", brand: "White Labs" }; yeast_by_productid[49] = { id: 36, name: "European Ale Yeast WLP011", brand: "White Labs" }; yeast_by_productid[50] = { id: 176, name: "Flemish Ale Blend WLP665", brand: "White Labs" }; yeast_by_productid[51] = { id: 37, name: "French Ale WLP072", brand: "White Labs" }; yeast_by_productid[52] = { id: 38, name: "German Ale II WLP003", brand: "White Labs" }; yeast_by_productid[53] = { id: 39, name: "German Ale/ Kölsch Yeast WLP029", brand: "White Labs" }; yeast_by_productid[54] = { id: 40, name: "German Bock Lager Yeast WLP833", brand: "White Labs" }; yeast_by_productid[55] = { id: 156, name: "German Lager X Yeast WLP835", brand: "White Labs" }; yeast_by_productid[56] = { id: 41, name: "German Lager Yeast WLP830", brand: "White Labs" }; yeast_by_productid[57] = { id: 42, name: "Hefeweizen Ale Yeast WLP300", brand: "White Labs" }; yeast_by_productid[58] = { id: 43, name: "Hefeweizen IV Ale Yeast WLP380", brand: "White Labs" }; yeast_by_productid[59] = { id: 159, name: "HP Lager Yeast WLP925", brand: "White Labs" }; yeast_by_productid[60] = { id: 44, name: "Irish Ale Yeast WLP004", brand: "White Labs" }; yeast_by_productid[61] = { id: 154, name: "Klassic Ale Yeast WLP033", brand: "White Labs" }; yeast_by_productid[62] = { id: 45, name: "London Ale Yeast WLP013", brand: "White Labs" }; yeast_by_productid[63] = { id: 125, name: "Manchester Ale Yeast WLP038", brand: "White Labs" }; yeast_by_productid[64] = { id: 46, name: "Mexican Lager Yeast WLP940", brand: "White Labs" }; yeast_by_productid[65] = { id: 158, name: "Munich Helles Yeast WLP860", brand: "White Labs" }; yeast_by_productid[66] = { id: 167, name: "Neutral Grain Yeast WLP078", brand: "White Labs" }; yeast_by_productid[67] = { id: 48, name: "Oktoberfest/Märzen Lager Yeast WLP820", brand: "White Labs" }; yeast_by_productid[68] = { id: 129, name: "Old Bavarian Lager Yeast WLP920", brand: "White Labs" }; yeast_by_productid[69] = { id: 168, name: "Old Sonoma Ale WLP076", brand: "White Labs" }; yeast_by_productid[70] = { id: 49, name: "Pacific Ale Yeast WLP041", brand: "White Labs" }; yeast_by_productid[71] = { id: 50, name: "Pilsner Lager Yeast WLP800", brand: "White Labs" }; yeast_by_productid[72] = { id: 153, name: "Premium Bitter Ale Yeast WLP026", brand: "White Labs" }; yeast_by_productid[73] = { id: 126, name: "San Diego Super Yeast WLP090", brand: "White Labs" }; yeast_by_productid[74] = { id: 51, name: "San Francisco Lager Yeast WLP810", brand: "White Labs" }; yeast_by_productid[75] = { id: 169, name: "Scotch Whiskey WLP045", brand: "White Labs" }; yeast_by_productid[76] = { id: 52, name: "Southern German Lager Yeast WLP838", brand: "White Labs" }; yeast_by_productid[77] = { id: 152, name: "Southwold Ale Yeast WLP025", brand: "White Labs" }; yeast_by_productid[78] = { id: 53, name: "Super High Gravity Ale Yeast WLP099", brand: "White Labs" }; yeast_by_productid[79] = { id: 54, name: "Sweet Mead/Wine Yeast WLP720", brand: "White Labs" }; yeast_by_productid[80] = { id: 170, name: "Tennessee Whiskey WLP050", brand: "White Labs" }; yeast_by_productid[81] = { id: 55, name: "Trappist Ale Yeast WLP500", brand: "White Labs" }; yeast_by_productid[82] = { id: 151, name: "Whitbread Ale Yeast WLP017", brand: "White Labs" }; yeast_by_productid[83] = { id: 124, name: "Yorkshire Square Ale Yeast WLP037", brand: "White Labs" }; yeast_by_productid[84] = { id: 56, name: "Zurich Lager Yeast WLP885", brand: "White Labs" }; yeast_by_productid[85] = { id: 57, name: "American Ale 1056", brand: "Wyeast" }; yeast_by_productid[86] = { id: 58, name: "American Ale II 1272", brand: "Wyeast" }; yeast_by_productid[87] = { id: 59, name: "American Lager 2035", brand: "Wyeast" }; yeast_by_productid[88] = { id: 60, name: "American Wheat 1010", brand: "Wyeast" }; yeast_by_productid[89] = { id: 61, name: "Bavarian Lager 2206", brand: "Wyeast" }; yeast_by_productid[90] = { id: 62, name: "Bavarian Wheat 3056", brand: "Wyeast" }; yeast_by_productid[91] = { id: 63, name: "Bavarian Wheat 3638", brand: "Wyeast" }; yeast_by_productid[92] = { id: 64, name: "Belgian Abby Ale II 1762", brand: "Wyeast" }; yeast_by_productid[93] = { id: 65, name: "Belgian Ale 1214", brand: "Wyeast" }; yeast_by_productid[94] = { id: 66, name: "Belgian Ardennes 3522", brand: "Wyeast" }; yeast_by_productid[95] = { id: 177, name: "Belgian Dark Ale 3822", brand: "Wyeast" }; yeast_by_productid[96] = { id: 67, name: "Belgian Lambic Blend 3278", brand: "Wyeast" }; yeast_by_productid[97] = { id: 68, name: "Belgian Saison 3724", brand: "Wyeast" }; yeast_by_productid[98] = { id: 147, name: "Belgian Schelde 3655", brand: "Wyeast" }; yeast_by_productid[99] = { id: 178, name: "Belgian Stout 1581", brand: "Wyeast" }; yeast_by_productid[100] = { id: 69, name: "Belgian Strong Ale 1388", brand: "Wyeast" }; yeast_by_productid[101] = { id: 70, name: "Belgian Wheat 3942", brand: "Wyeast" }; yeast_by_productid[102] = { id: 71, name: "Belgian Witbier 3944", brand: "Wyeast" }; yeast_by_productid[103] = { id: 186, name: "Berliner Weisse Blend 3191", brand: "Wyeast" }; yeast_by_productid[104] = { id: 137, name: "Bier de Garde 3725", brand: "Wyeast" }; yeast_by_productid[105] = { id: 72, name: "Bohemian Lager 2124", brand: "Wyeast" }; yeast_by_productid[106] = { id: 73, name: "Brettanomyces bruxellensis 5112", brand: "Wyeast" }; yeast_by_productid[107] = { id: 74, name: "Brettanomyces lambicus 5526", brand: "Wyeast" }; yeast_by_productid[108] = { id: 75, name: "British Ale 1098", brand: "Wyeast" }; yeast_by_productid[109] = { id: 76, name: "British Ale 1335", brand: "Wyeast" }; yeast_by_productid[110] = { id: 179, name: "British Cask Ale 1026", brand: "Wyeast" }; yeast_by_productid[111] = { id: 77, name: "Budvar Lager 2000", brand: "Wyeast" }; yeast_by_productid[112] = { id: 78, name: "California Lager 2112", brand: "Wyeast" }; yeast_by_productid[113] = { id: 180, name: "Canadian/Belgian Ale 3864", brand: "Wyeast" }; yeast_by_productid[114] = { id: 79, name: "Cider 4766", brand: "Wyeast" }; yeast_by_productid[115] = { id: 80, name: "Czech Pils 2278", brand: "Wyeast" }; yeast_by_productid[116] = { id: 81, name: "Danish Lager 2042", brand: "Wyeast" }; yeast_by_productid[117] = { id: 132, name: "Denny's Favorite 50 1450", brand: "Wyeast" }; yeast_by_productid[118] = { id: 82, name: "Dry Mead 4632", brand: "Wyeast" }; yeast_by_productid[119] = { id: 143, name: "English Special Bitter 1768", brand: "Wyeast" }; yeast_by_productid[120] = { id: 83, name: "European Ale 1338", brand: "Wyeast" }; yeast_by_productid[121] = { id: 182, name: "European Lager 2247", brand: "Wyeast" }; yeast_by_productid[122] = { id: 136, name: "Farmhouse Ale 3726", brand: "Wyeast" }; yeast_by_productid[123] = { id: 142, name: "Flanders Golden Ale 3739", brand: "Wyeast" }; yeast_by_productid[124] = { id: 84, name: "Forbidden Fruit 3463", brand: "Wyeast" }; yeast_by_productid[125] = { id: 133, name: "French Saison 3711", brand: "Wyeast" }; yeast_by_productid[126] = { id: 85, name: "German Ale 1007", brand: "Wyeast" }; yeast_by_productid[127] = { id: 86, name: "German Wheat 3333", brand: "Wyeast" }; yeast_by_productid[128] = { id: 138, name: "Hella Bock 2487", brand: "Wyeast" }; yeast_by_productid[129] = { id: 87, name: "Irish Ale 1084", brand: "Wyeast" }; yeast_by_productid[130] = { id: 88, name: "Kölsch 2565", brand: "Wyeast" }; yeast_by_productid[131] = { id: 181, name: "Kalsch II 2575", brand: "Wyeast" }; yeast_by_productid[132] = { id: 89, name: "Lactobacillus 5335", brand: "Wyeast" }; yeast_by_productid[133] = { id: 145, name: "Leuven Pale Ale 3538", brand: "Wyeast" }; yeast_by_productid[134] = { id: 90, name: "London Ale 1028", brand: "Wyeast" }; yeast_by_productid[135] = { id: 91, name: "London Ale III 1318", brand: "Wyeast" }; yeast_by_productid[136] = { id: 92, name: "London ESB Ale 1968", brand: "Wyeast" }; yeast_by_productid[137] = { id: 93, name: "Munich Lager 2308", brand: "Wyeast" }; yeast_by_productid[138] = { id: 183, name: "Munich Lager II 2352", brand: "Wyeast" }; yeast_by_productid[139] = { id: 135, name: "NB NeoBritannia 1945", brand: "Wyeast" }; yeast_by_productid[140] = { id: 141, name: "North American Lager 2272", brand: "Wyeast" }; yeast_by_productid[141] = { id: 94, name: "Northwest Ale 1332", brand: "Wyeast" }; yeast_by_productid[142] = { id: 95, name: "Octoberfest Lager Blend 2633", brand: "Wyeast" }; yeast_by_productid[143] = { id: 96, name: "Pediococcus 5733", brand: "Wyeast" }; yeast_by_productid[144] = { id: 97, name: "Pilsen Lager 2007", brand: "Wyeast" }; yeast_by_productid[145] = { id: 184, name: "Rasenmäher Lager 2252", brand: "Wyeast" }; yeast_by_productid[146] = { id: 98, name: "Ringwood Ale 1187", brand: "Wyeast" }; yeast_by_productid[147] = { id: 185, name: "Rocky Mountain Lager 2105", brand: "Wyeast" }; yeast_by_productid[148] = { id: 134, name: "Roeselare Ale Blend 3763", brand: "Wyeast" }; yeast_by_productid[149] = { id: 146, name: "Rogue Pacman 1764", brand: "Wyeast" }; yeast_by_productid[150] = { id: 99, name: "Scottish Ale 1728", brand: "Wyeast" }; yeast_by_productid[151] = { id: 144, name: "Staro Prague Lager 2782", brand: "Wyeast" }; yeast_by_productid[152] = { id: 100, name: "Sweet Mead 4184", brand: "Wyeast" }; yeast_by_productid[153] = { id: 101, name: "Thames Valley Ale 1275", brand: "Wyeast" }; yeast_by_productid[154] = { id: 140, name: "Thames Valley II 1882", brand: "Wyeast" }; yeast_by_productid[155] = { id: 139, name: "Trappist Blend 3789", brand: "Wyeast" }; yeast_by_productid[156] = { id: 102, name: "Trappist High Gravity 3787", brand: "Wyeast" }; yeast_by_productid[157] = { id: 103, name: "Urquell Lager 2001", brand: "Wyeast" }; yeast_by_productid[158] = { id: 104, name: "Weihenstephan Weizen 3068", brand: "Wyeast" }; yeast_by_productid[159] = { id: 148, name: "West Yorkshire 1469", brand: "Wyeast" }; yeast_by_productid[160] = { id: 105, name: "Whitbread Ale 1099", brand: "Wyeast" }; yeast_by_productid[161] = { id: 149, name: "American West Coast Yeast BRY-97", brand: "Danstar" }; yeast_by_productid[162] = { id: 150, name: "Belle Saison Yeast", brand: "Danstar" }; yeast_by_productid[163] = { id: 163, name: "Cask and Bottle Conditioning CBC-1", brand: "Danstar" }; yeast_by_productid[164] = { id: 116, name: "Diamond Lager", brand: "Danstar" }; yeast_by_productid[165] = { id: 117, name: "Munich Dry Wheat Yeast", brand: "Danstar" }; yeast_by_productid[166] = { id: 118, name: "Nottingham Ale Yeast", brand: "Danstar" }; yeast_by_productid[167] = { id: 119, name: "Windsor Ale Yeast", brand: "Danstar" }; yeast_by_productid[168] = { id: 187, name: "Baltic Lager ECY22", brand: "East Coast Yeast" }; yeast_by_productid[169] = { id: 188, name: "Belgian Abbaye ECY09", brand: "East Coast Yeast" }; yeast_by_productid[170] = { id: 189, name: "Belgian White ECY11", brand: "East Coast Yeast" }; yeast_by_productid[171] = { id: 190, name: "Berliner Blend ECY06", brand: "East Coast Yeast" }; yeast_by_productid[172] = { id: 191, name: "Brett Blend #1 Anomala ECY04", brand: "East Coast Yeast" }; yeast_by_productid[173] = { id: 192, name: "Brett Blend #9 ECY05", brand: "East Coast Yeast" }; yeast_by_productid[174] = { id: 193, name: "Brett Custersianus ECY19", brand: "East Coast Yeast" }; yeast_by_productid[175] = { id: 194, name: "Brett Nanus ECY24", brand: "East Coast Yeast" }; yeast_by_productid[176] = { id: 195, name: "British Mild ECY18", brand: "East Coast Yeast" }; yeast_by_productid[177] = { id: 196, name: "BugCounty ECY20", brand: "East Coast Yeast" }; yeast_by_productid[178] = { id: 197, name: "BugFarm ECY01", brand: "East Coast Yeast" }; yeast_by_productid[179] = { id: 198, name: "Burton Union ECY17", brand: "East Coast Yeast" }; yeast_by_productid[180] = { id: 199, name: "Farmhouse Brett ECY03", brand: "East Coast Yeast" }; yeast_by_productid[181] = { id: 200, name: "Flemish Ale ECY02", brand: "East Coast Yeast" }; yeast_by_productid[182] = { id: 201, name: "Kalschbier ECY21", brand: "East Coast Yeast" }; yeast_by_productid[183] = { id: 202, name: "Munich Festbier ECY15", brand: "East Coast Yeast" }; yeast_by_productid[184] = { id: 203, name: "Northeast Ale ECY29", brand: "East Coast Yeast" }; yeast_by_productid[185] = { id: 204, name: "Old Newark Ale ECY10", brand: "East Coast Yeast" }; yeast_by_productid[186] = { id: 205, name: "Old Newark Beer ECY12", brand: "East Coast Yeast" }; yeast_by_productid[187] = { id: 206, name: "Oud Brune ECY23", brand: "East Coast Yeast" }; yeast_by_productid[188] = { id: 115, name: "safbrew - Belgian Ale Yeast BE-256", brand: "Fermentis / Safale" }; yeast_by_productid[189] = { id: 207, name: "Saison Brasserie ECY08", brand: "East Coast Yeast" }; yeast_by_productid[190] = { id: 208, name: "Saison Single ECY14", brand: "East Coast Yeast" }; yeast_by_productid[191] = { id: 209, name: "Scottish Heavy ECY07", brand: "East Coast Yeast" }; yeast_by_productid[192] = { id: 210, name: "Trappist Ale ECY13", brand: "East Coast Yeast" }; yeast_by_productid[193] = { id: 107, name: "Safale - American Ale Yeast US-05", brand: "Fermentis / Safale" }; yeast_by_productid[194] = { id: 106, name: "Safale - American Ale Yeast US-56", brand: "Fermentis / Safale" }; yeast_by_productid[195] = { id: 108, name: "Safale - English Ale Yeast S-04", brand: "Fermentis / Safale" }; yeast_by_productid[196] = { id: 109, name: "Safale - German Ale Yeast K-97", brand: "Fermentis / Safale" }; yeast_by_productid[197] = { id: 110, name: "Safbrew - General/Belgian Yeast S-33", brand: "Fermentis / Safale" }; yeast_by_productid[198] = { id: 111, name: "Safbrew - Specialty Ale Yeast T-58", brand: "Fermentis / Safale" }; yeast_by_productid[199] = { id: 112, name: "Safbrew - Wheat Beer Yeast WB-06", brand: "Fermentis / Safale" }; yeast_by_productid[200] = { id: 114, name: "Saflager - German Lager Yeast S-23", brand: "Fermentis / Safale" }; yeast_by_productid[201] = { id: 113, name: "Saflager - German Lager Yeast W-34/70", brand: "Fermentis / Safale" }; yeast_by_productid[202] = { id: 115, name: "Saflager - Swiss Lager Yeast S-189", brand: "Fermentis / Safale" }; yeast_by_productid[203] = { id: 211, name: "Bavarian Wheat Yeast", brand: "Mangrove Jack" }; yeast_by_productid[204] = { id: 212, name: "Belgian Ale Yeast", brand: "Mangrove Jack" }; yeast_by_productid[205] = { id: 213, name: "Bohemian Lager Yeast", brand: "Mangrove Jack" }; yeast_by_productid[206] = { id: 214, name: "British Ale Yeast", brand: "Mangrove Jack" }; yeast_by_productid[207] = { id: 215, name: "Burton Union Yeast", brand: "Mangrove Jack" }; yeast_by_productid[208] = { id: 216, name: "Newcastle Dark Ale Yeast", brand: "Mangrove Jack" }; yeast_by_productid[209] = { id: 217, name: "US West Coast Yeast", brand: "Mangrove Jack" }; yeast_by_productid[210] = { id: 218, name: "Workhorse Beer Yeast", brand: "Mangrove Jack" }; yeast_by_productid[211] = { id: 219, name: "Lucky No. 7", brand: "Real Brewers" }; yeast_by_productid[212] = { id: 220, name: "The Monk", brand: "Real Brewers" }; yeast_by_productid[213] = { id: 221, name: "The One", brand: "Real Brewers" }; yeast_by_productid[214] = { id: 222, name: "Ye Olde English", brand: "Real Brewers" }; yeast_by_productid[215] = { id: 223, name: "Alt Ale BRY 144", brand: "Siebel Institute" }; yeast_by_productid[216] = { id: 224, name: "American Ale BRY 96", brand: "Siebel Institute" }; yeast_by_productid[217] = { id: 225, name: "American Lager BRY 118", brand: "Siebel Institute" }; yeast_by_productid[218] = { id: 226, name: "Bavarian Weizen Ale BRY 235", brand: "Siebel Institute" }; yeast_by_productid[219] = { id: 227, name: "English Ale BRY 264", brand: "Siebel Institute" }; yeast_by_productid[220] = { id: 228, name: "German Kalsch BRY 401", brand: "Siebel Institute" }; yeast_by_productid[221] = { id: 229, name: "North European Lager BRY 203", brand: "Siebel Institute" }; yeast_by_productid[222] = { id: 230, name: "Trappist Ale BRY 204", brand: "Siebel Institute" }; yeast_by_productid[223] = { id: 160, name: "Brewferm Blanche", brand: "Altri" }; yeast_by_productid[224] = { id: 161, name: "Brewferm Lager", brand: "Altri" }; yeast_by_productid[225] = { id: 162, name: "Brewferm Top", brand: "Altri" }; yeast_by_productid[226] = { id: 120, name: "Coopers Ale", brand: "Altri" }; yeast_by_productid[227] = { id: 121, name: "Doric Ale", brand: "Altri" }; yeast_by_productid[228] = { id: 122, name: "Edme Ale", brand: "Altri" }; yeast_by_productid[229] = { id: 231, name: "Gervin Ale (by Muntons) GV-12", brand: "Altri" }; yeast_by_productid[230] = { id: 123, name: "Munton and Fison", brand: "Altri" }; yeast_by_productid[231] = { id: 164, name: "Muntons Premium Gold", brand: "Altri" }; var subcats = []; subcats[0] = [""]; subcats[1] = ["Affumicata Classica", "Altri Stili Affumicata", "Invecchiata in legno"]; subcats[2] = ["Flanders Brown Ale/Oud Bruin", "Flanders Red Ale", "Fruit Lambic", "Gueuze", "Straight (Unblended) Lambic", "Weisse Berlino"]; subcats[3] = ["Ale Ambrata Americana", "Ale Scura Americana", "Pale Ale Americana"]; subcats[4] = ["Ale Belga Speciale", "Bière de Garde", "Pale Ale Belga", "Saison", "Witbier"]; subcats[5] = ["Ale Rossa Irlandese", "Scozzese Chiara 60/-", "Scozzese Export 80/-", "Scozzese Heavy 70/-", "Strong Scotch Ale"]; subcats[6] = ["Mild", "Northern English Brown", "Southern English Brown"]; subcats[7] = ["Californiana", "Dusseldorf Altbier", "North German Altbier"]; subcats[8] = ["Birra Americana - di Frumento o di Segale", "Blonde Ale", "Cream Ale", "Kolsch"]; subcats[9] = ["IPA Americana", "IPA Imperial ", "IPA Inglese"]; subcats[10] = ["Extra Special/Strong Bitter (ESB)", "Special/Best/Premium Bitter", "Standard/Ordinary Bitter"]; subcats[11] = ["Baltic Porter ", "Porter Scura", "Robust Porter "]; subcats[12] = ["Dry Stout", "Foreign Extra Stout", "Oatmeal Stout", "Russian Imperial Stout", "Stout Americana", "Sweet Stout"]; subcats[13] = ["Barleywine Americana ", "Barleywine Inglese", "Old Ale"]; subcats[14] = ["Ale Chiara Belga", "Dubbel Belga", "Golden Strong Ale Belga", "Strong Ale Scura Belga", "Tripel Belga"]; subcats[15] = ["Roggenbier (Tedesca di Segale)", "Weizen Scura", "Weizen/Weissbier", "Weizenbock"]; subcats[16] = [""]; subcats[17] = ["Bock Tradizionale", "Doppelbock", "Eisbock", "Maibock/Helles Bock"]; subcats[18] = ["Oktoberfest/Marzen", "Vienna Lager"]; subcats[19] = ["Lager Americana Standard", "Lager Chiara Americana", "Lager Chiara Tedesca - Dortmunder Export", "Lager Chiara Tedesca - Munich Helles", "Premium Lager Americana"]; subcats[20] = ["Lager Scura Americana", "Munich Dunkel", "Schwarzbier"]; subcats[21] = ["Bohemian Pilsener", "Pilsner Classica Americana", "Pilsner Tedesca (Pils)"]; subcats[22] = [""]; subcats[23] = ["Aromatizzata con spezie, erbe o vegetali ", "Speciale speziata di Natale"]; subcats[24] = ["Con Frutta"]; subcats[25] = ["Cyser (Apple Melomel)", "Pyment (Melomel con mosto d'uva)", "Stile Dolce", "Stile Mead Generico", "Stile Secco", "Stile semi-dolce ", "Tipo Braggot (speziato)", "Tipo Melomel (altri frutti)", "Tipo Metheglin (aromatizzato alle erbe)"]; subcats[26] = ["Sidro comune", "Sidro con frutta", "Sidro di mele o pere (altri tipi)", "Sidro di pere comune", "Sidro di pere tradizionale", "Sidro tipo francese", "Sidro tipo inglese", "Sidro tipo New England", "Vino di mele"]; subcats[27] = ["Speciale"]; subcats[28] = ["Nessuna voce selezionata"]; function setupBlanks() { addSection("stp"); addSection("hops"); addSection("other"); addSection("mashStep"); addSection("fmt"); addSection("fmt"); addSection("fmt"); } function setupFermentable(b, e) { dropdown = document.calc.elements[b]; if (!dropdown) { return } var d = jQuery("#" + b).val(); var f = jQuery("#" + b + " option:selected").text(); jQuery("#" + b).children().remove(); var a = document.createElement("optgroup"); var c = ""; for (z = 0; z < ingredients.length; z++) { //if (e != "extract" || ingredients[z].category == "Liquid Extract" || ingredients[z].category == "Dry Extract" || ingredients[z].category == "Sugar" || ingredients[z].category == "My Custom Fermentables" || ingredients[z].category == "") { if (c != ingredients[z].category) { a = document.createElement("optgroup"); a.label = ingredients[z].category; c = ingredients[z].category } var g = document.createElement("option"); g.value = ingredients[z].id; g.innerHTML = ingredients[z].name; a.appendChild(g); dropdown.appendChild(a) //} } if (d) { var h = true; jQuery("#" + b + " option").each(function () { if (this.value == d) { h = false; return false } }); if (!h) { jQuery("#" + b).val(d) } else { alert("Modificando il metodo, " + f + " è stato rimosso dalla lista dei fermentabili perchè deve essere triturato.") } } } function setupSteepingGrainDropDown(d) { dropdown = document.calc.elements[d]; if (!dropdown) { return } dropdown.options.length = 0; var a = document.createElement("optgroup"); var b = ""; for (z = 0; z < ingredients.length; z++) { if (ingredients[z].category != "Liquid Extract" && ingredients[z].category != "Dry Extract" && ingredients[z].category != "Sugar") { if (b != ingredients[z].category) { a = document.createElement("optgroup"); a.label = ingredients[z].category; b = ingredients[z].category } var c = document.createElement("option"); c.value = ingredients[z].id; c.innerHTML = ingredients[z].name; a.appendChild(c); dropdown.appendChild(a) } } } function setupYeastDropDown(b, d) { dropdown = yeastdropdown; jQuery("#yeast").empty(); var a = document.createElement("optgroup"); var c = ""; var e = yeast; if (b == "id") { e = yeast_by_productid; jQuery("#btn_sortYeastList").html("Sort Yeast List By Name") } else { jQuery("#btn_sortYeastList").html("Sort Yeast List By ID") } for (z = 0; z < e.length; z++) { if (d == "" || e[z].brand == "Default" || e[z].brand == d) { if (c != e[z].brand) { a = document.createElement("optgroup"); a.label = e[z].brand; if (e[z].brand == "-") { a.label = "Others" } c = e[z].brand } var f = document.createElement("option"); f.value = e[z].id; f.innerHTML = e[z].name; a.appendChild(f); dropdown.appendChild(a) } } } function toggleYeastSort() { if (defaultYeastSort == "name") { defaultYeastSort = "id" } else { defaultYeastSort = "name" } var a = getDropDownValue(document.calc, "yeast"); setupYeastDropDown(defaultYeastSort, jQuery("#yeastbrand").val()); jQuery("#yeast").val(a) } function updateYeastBrand() { var a = getDropDownValue(document.calc, "yeast"); setupYeastDropDown(defaultYeastSort, jQuery("#yeastbrand").val()); jQuery("#yeast").val(a) } function setupWaterProfileDropDown() { dropdown = document.calc.waterprofile; dropdown.options.length = 0; for (z = 0; z < waterprofiles.length; z++) { var a = document.createElement("option"); a.value = waterprofiles[z].name; a.innerHTML = waterprofiles[z].name; dropdown.appendChild(a) } } function setupHopsAutocomplete() { for (i = 0; i < maxitems; i++) { field = document.calc.elements["hopsVariety" + i]; if (field) { setupHopAutocomplete("hopsVariety" + i) } } } function setupHopAutocomplete(a) { field = jQuery("#" + a); if (field) { jQuery(field).autocomplete("destroy"); jQuery(field).autocomplete({ source: hopsAutoCompleteArray }); if (!jQuery(field).data("events").autocompleteselect) { jQuery(field).bind("autocompleteselect", function (b, e) { var d = e.item; var c = ""; if (d) { c = d.value } lookupHopsAA(b.target.id, c) }) } } } function enableButtonsAfterSave() { jQuery(".preview").removeClass("inactive"); jQuery(".print").removeClass("inactive"); jQuery(".share").removeClass("inactive"); jQuery(".copy").removeClass("inactive"); jQuery(".waterrequirement").removeClass("inactive"); jQuery(".labelgenerator").removeClass("inactive"); jQuery(".addtoshoppinglist").removeClass("inactive"); jQuery(".brew2nd").removeClass("inactive"); jQuery(".brewBannerButton").fadeIn() } function clearFormElement(a) { if (a.type == "text") { a.value = "" } if (a.type == "select-one") { a.value = "" } if (a.type == "checkbox") { a.checked = false } } function loadJSON(d) { var b = d.recipe.id; var c = d.recipe; var q = d.steepinggrains; var h = d.fermentables; var k = d.yeasts; var n = d.hops; var B = d.mashsteps; var v = d.others; recipeViewUrl = d.recipe.recipeViewUrl; jQuery("#ddunits").val(c.displayunits); jQuery("#brewmethod").val(c.brewmethod); setupUnits(); setupBrewMethod(); jQuery("#recipetoken").val(c.recipetoken); jQuery("#txtrecipename").val(c.title); jQuery("#txtauthor").val(c.author); jQuery("#txtbatchsize").val(c.batchsize); jQuery("#txtboilsize").val(c.boilsize); jQuery("#txtboiltime").val(c.boiltime); jQuery("#txtefficiency").val(c.efficiency); jQuery("#mash_thickness").val(c.mash_thickness); jQuery("#primingName").val(c.primingmethod); jQuery("#primingAmount").val(c.primingamount); jQuery("#co2level").val(c.co2level); jQuery("#co2unit").val(c.co2unit); jQuery("#txtnochillextraminutes").val(c.nochillextraminutes); jQuery("#equipment_profile_id").val(c.equipment_profile_id); jQuery("#notes").val(c.notes); jQuery("#url").val(c.url); if (c.awardwinning != 0) { jQuery("#awardwinning").attr("checked", "checked") } var f = false; if (jQuery('#waterprofile > option[value="' + c.waterprofile + '"]').length != 0) { f = true } if (c.waterprofile_custom != 1 && f == true) { jQuery("#waterprofile").val(c.waterprofile) } else { if (c.waterprofile) { jQuery("#waterprofile").val("Custom"); showSection("span_waterprofile_custom"); jQuery("#waterprofile_custom").val(c.waterprofile) } } jQuery("#water_ca").val(c.ca2); jQuery("#water_mg").val(c.mg2); jQuery("#water_so").val(c.so4); jQuery("#water_na").val(c.na); jQuery("#water_cl").val(c.cl); jQuery("#water_hco").val(c.hco3); jQuery("#waternotes").val(c.waternotes); var u = ""; for (i = 0; i < bjcp.length; i++) { if (bjcp[i].name == c.stylename) { u = bjcp[i]; break } } if (u) { jQuery("#maincategory").val(u.category); updatesubcategory(document.calc.maincategory.selectedIndex); jQuery("#subcategory").val(u.name) } var l = false; for (fermNum in h) { var m = h[fermNum]; if (m.fermentableid != null) { if (m.lateaddition == "1") { l = true } var a = addSection("fmt"); if (!(a === false)) { jQuery("#fermentableType" + a).val(m.fermentableid); jQuery("#fermentableAmount" + a).val(m.amount); if (m.unit) { jQuery("#fmt_units" + a).val(m.unit) } if (m.lateaddition == "1") { jQuery("#fermentableLate" + a).attr("checked", "checked"); jQuery("#fermentableLateValue" + a).val("true") } } } else { if (m.inventoryid != null && getIngredientByID("inventory_" + m.inventoryid)) { if (m.lateaddition == "1") { l = true } var a = addSection("fmt"); if (!(a === false)) { jQuery("#fermentableType" + a).val("inventory_" + m.inventoryid); jQuery("#fermentableAmount" + a).val(m.amount); if (m.unit) { jQuery("#fmt_units" + a).val(m.unit) } if (m.lateaddition == "1") { jQuery("#fermentableLate" + a).attr("checked", "checked"); jQuery("#fermentableLateValue" + a).val("true") } } } else { var t = addSection("cfmt"); if (!(t === false)) { jQuery("#custfermentableType" + t).val(m.name); jQuery("#custfermentableAmount" + t).val(m.amount); jQuery("#custfermentableColor" + t).val(m.lovibond); jQuery("#custfermentablePPG" + t).val(m.ppg); if (m.unit) { jQuery("#custfmt_units" + t).val(m.unit) } if (m.lateaddition == "1") { jQuery("#custfermentableLate" + t).attr("checked", "checked"); jQuery("#custfermentableLateValue" + t).val("true") } if (m.mashable == "1") { jQuery("#custfermentableMashed" + t).attr("checked", "checked"); jQuery("#custfermentableMashedValue" + t).val("true") } } } } } for (steepnum in q) { var A = q[steepnum]; if (A.fermentableid != null) { var e = addSection("stp"); if (!(e === false)) { jQuery("#steepingGrainType" + e).val(A.fermentableid); jQuery("#steepingGrainAmount" + e).val(A.amount); if (A.unit) { jQuery("#stp_units" + e).val(A.unit) } } } else { if (A.inventoryid != null && getIngredientByID("inventory_" + A.inventoryid)) { var e = addSection("stp"); if (!(e === false)) { jQuery("#steepingGrainType" + e).val("inventory_" + A.inventoryid); jQuery("#steepingGrainAmount" + e).val(A.amount); if (A.unit) { jQuery("#stp_units" + e).val(A.unit) } } } else { var t = addSection("cfmt"); if (!(t === false)) { jQuery("#custfermentableType" + t).val(A.name); jQuery("#custfermentableAmount" + t).val(A.amount); jQuery("#custfermentableColor" + t).val(A.lovibond); jQuery("#custfermentablePPG" + t).val(A.ppg); if (A.unit) { jQuery("#custfmt_units" + t).val(A.unit) } if (A.mashable == "1") { jQuery("#custfermentableMashed" + t).attr("checked", "checked"); jQuery("#custfermentableMashedValue" + t).val("true") } } } } } for (hopnum in n) { var w = n[hopnum]; var o = addSection("hops"); if (!(o === false)) { jQuery("#hopsAmount" + o).val(w.amount); jQuery("#hopsVariety" + o).val(w.name); jQuery("#hopsAA" + o).val(w.aa); jQuery("#hopsTime" + o).val(w.hoptime); jQuery("#hopsType" + o).val(w.hoptype); jQuery("#hopsUse" + o).val(w.hopuse); jQuery("#hopUtilization" + o).val(w.hopstand_utilization); jQuery("#hopStandTemp" + o).val(w.hopstand_temp); if (w.unit) { jQuery("#hops_units" + o).val(w.unit) } } } for (othnum in v) { var g = v[othnum]; var y = addSection("other"); if (!(y === false)) { jQuery("#otherAmount" + y).val(g.amount); jQuery("#otherName" + y).val(g.name); jQuery("#otherTime" + y).val(g.othertime); jQuery("#otherType" + y).val(g.othertype); jQuery("#otherUse" + y).val(g.otheruse); jQuery("#otherUnit" + y).val(g.unit) } } for (mashnum in B) { var s = B[mashnum]; var j = addSection("mashStep"); if (!(j === false)) { jQuery("#mashName" + j).val(s.name); jQuery("#mashType" + j).val(s.mashtype); jQuery("#mashAmount" + j).val(s.amount); jQuery("#mashTemp" + j).val(s.temp); jQuery("#mashTime" + j).val(s.mashtime); if (s.unit) { jQuery("#mash_units" + j).val(s.unit) } else { jQuery("#mash_units" + j + " option:first").attr("selected", "selected") } } } if (B.length == 0) { addSection("mashStep") } if (q.length == 0) { addSection("stp") } if (v.length == 0) { addSection("other") } if (n.length == 0) { addSection("hops") } var r = k[0]; var p = k[1]; if (r) { jQuery("#yeast").val(r.yeastid); jQuery("#yeastbrand").val(r.laboratory) } if (r.custom_attenuation != 0) { jQuery("#chk_yeast_custom_attenuation").attr("checked", "checked"); jQuery("#yeast_custom_attenuation").val(r.attenuation); showSection("span_yeast_attenuation") } if (c.yeaststarter != 0) { jQuery("#yeast_starter").attr("checked", "checked") } jQuery("#primary_temp").val(c.primary_temp); jQuery("#pitchrate").val(c.pitchrate); if (p) { jQuery("#yeast_custom_name").val(p.name); jQuery("#yeast_custom").attr("checked", "checked"); showSection("customyeast") } jQuery('input[type="radio"][name="abv_equation"][value="' + c.abvequation + '"]').attr("checked", "checked"); jQuery('input[type="radio"][name="ibu_equation"][value="' + c.ibuequation + '"]').attr("checked", "checked"); jQuery('input[type="radio"][name="srm_equation"][value="' + c.srmequation + '"]').attr("checked", "checked"); jQuery('input[type="radio"][name="sugar_scale"][value="' + c.sugar_scale + '"]').attr("checked", "checked"); jQuery("#batch_size_mode").val(c.batch_size_mode); if (c["public"] != 0) { jQuery("#sharePublic").attr("checked", "checked"); jQuery("#publicurl").val(c.recipeViewUrl); jQuery("#publicurl").show(); upateSharingCheckboxes(); if (c.searchable != 0) { jQuery("#shareSearchable").attr("checked", "checked") } else { jQuery("#shareSearchable").attr("checked", false) } } if (c.snapshot != 0) { jQuery(".recipeSnapshotNotice").show() } if (l) { openAllMores("fmtall_brewpartitems") } enableButtonsAfterSave(); updateAll() } function getRecipeAJAX(a) { var c = "/homebrew/recipe/json/" + a; saveButtonActive(false, { message: "Loading Awesome Recipe..." }); var b = jQuery.ajax({ url: c, type: "GET", cache: false, timeout: 20000, success: function (e) { var d = jQuery.parseJSON(e); if (d.message == "success") { loadJSON(d); current_state_saved = true } else { notification("Error: " + d.message, { color: "red" }) } setTimeout(function () { saveButtonActive(true, {}) }, 500) }, error: function (f, d, e) { showPostError(f.responseText); setTimeout(function () { saveButtonActive(true, {}) }, 500); notification("There was an error editing your recipe, please make sure you are connected to the internet and try again.", { color: "red" }) } }) } var timeReady; jQuery(document).ready(function () { timeReady = new Date(); if (!jQuery.browser.msie) { jQuery(window).on("beforeunload", function (b) { var a = new Date(); if (current_state_saved == false && a - timeReady > (1000 * 30)) { return "Hai modificato la ricetta e sei stato sulla pagina per più di 30 secondi. Se continui tutti i valori che hai selezionato andranno persi." } }) } jQuery(":input[id='fermentableType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='fermentableLate']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='fermentableAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentableType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentableAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentableColor']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentablePPG']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentableLate']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='custfermentableMashed']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='steepingGrainType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='steepingGrainAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsVariety']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsAA']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsTime']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='hopsUse']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherName']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherTime']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherUse']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='otherUnit']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='mashName']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='mashType']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='mashAmount']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='mashTemp']").each(function (b, a) { clearFormElement(a) }); jQuery(":input[id='mashTime']").each(function (b, a) { clearFormElement(a) }); jQuery("#yeast_starter").attr("checked", false); jQuery("#chk_yeast_custom_attenuation").attr("checked", false); jQuery("#yeast_custom").attr("checked", false); jQuery("#yeast_custom_name").val(""); jQuery("#yeast_custom_attenuation").val(""); jQuery("#txtrecipename").val(""); jQuery("#txtauthor").val(""); jQuery("#txtboiltime").val("60"); jQuery("#notes").val(""); jQuery("#url").val(""); jQuery("#primingName").val(""); jQuery("#primingAmount").val(""); jQuery("#waternotes").val(""); updateDataArraysWithUserData(); jQuery("#maincategory").selectedIndex = 0; updatesubcategory(0); setupYeastDropDown(defaultYeastSort, ""); setupWaterProfileDropDown(); waterProfileUpdate(); jQuery('input[id^="fermentableAmount"]').change(function () { updateAll() }); jQuery('input[id^="fermentableLate"]').change(function () { updateAll() }); jQuery('select[id^="fermentableType"]').change(function () { updateAll() }); jQuery('input[id^="custfermentableAmount"]').change(function () { updateAll() }); jQuery('input[id^="custfermentableColor"]').change(function () { updateAll() }); jQuery('input[id^="custfermentablePPG"]').change(function () { updateAll() }); jQuery('input[id^="steepingGrainAmount"]').change(function () { updateAll() }); jQuery('select[id^="steepingGrainType"]').change(function () { updateAll() }); jQuery('input[id^="hopsAmount"]').change(function () { updateAll() }); jQuery('input[id^="hopsAA"]').change(function () { updateAll() }); jQuery('input[id^="hopsTime"]').change(function () { updateAll() }); jQuery('select[id^="hopsType"]').change(function () { updateAll() }); jQuery('select[id^="hopsUse"]').change(function () { updateAll() }); populateHopsAutocompleteArray(); setupHopsAutocomplete(); saveButtonActive(true, {}); jQuery("input:text:visible:first").focus(); jQuery(document).keydown(function (b) { if (b.keyCode === 8) { var a = jQuery(document.activeElement).is("input:[type='text'], textarea:focus"); if (!a) { b.preventDefault() } } }); jQuery("#calc").keypress(function (b) { if (b.keyCode === 13) { var a = (jQuery(document.activeElement).is("textarea:focus") || jQuery(document.activeElement).hasClass("ui-autocomplete-input")); if (!a) { updateAll(); return false } } }); jQuery(".preview").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } jQuery(window).unbind("beforeunload"); window.location = recipeViewUrl } else { showClickError("Please save your recipe first before previewing.") } }); jQuery(".brewBannerButton").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } jQuery(window).unbind("beforeunload"); window.location = "/homebrew/recipe/brew/" + recipeId } else { showClickError("Please save your recipe first before brewing.") } }); jQuery(".brew2nd").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } jQuery(window).unbind("beforeunload"); window.location = "/homebrew/recipe/brew/" + recipeId } else { showClickError("Please save your recipe first before brewing.") } }); jQuery(".print").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } window.open(("/homebrew/recipe/print/" + recipeId), "_blank") } else { showClickError("Please save your recipe first before printing.") } }); jQuery(".copy").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } jQuery(window).unbind("beforeunload"); window.location = "/homebrew/recipe/copy/" + recipeId } else { showClickError("Please save your recipe first before copying.") } }); jQuery(".waterrequirement").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving. (Re-saving recommended.)")) { return } } showWaterRequirementDialog(recipeId) } else { showClickError("Please save your recipe first before computing water requirements.") } }); jQuery(".labelgenerator").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving. (Re-saving recommended.)")) { return } } jQuery(window).unbind("beforeunload"); window.location = "/homebrew/recipe/labelgenerator/" + recipeId } else { showClickError("Please save your recipe first before going to the label generator.") } }); jQuery(".addtoshoppinglist").click(function (a) { if (recipeId > 0) { if (current_state_saved == false) { if (!confirm("This recipe has been edited since it was last saved. Click okay to proceed without saving.")) { return } } jQuery(window).unbind("beforeunload"); window.location = "/homebrew/recipe/addtoshoppinglist/" + recipeId } else { showClickError("Please save your recipe first before adding to shopping list.") } }); jQuery(".share").click(function (a) { if (recipeId > 0) { jQuery("#sharenotification").html(""); jQuery("#sharenotification").removeClass("redbackground"); jQuery("#sharenotification").removeClass("greenbackground"); jQuery("#sharedialog").bind("dialogopen", function (b) { disableAllFieldsBehindDialog(this) }); jQuery("#sharedialog").bind("dialogclose", function (b) { reEnableFieldsBehindDialog() }); jQuery("#sharedialog").dialog({ modal: true, resizable: false, draggable: false, maxWidth: 500, minWidth: 500, zIndex: 9999, title: ("Share " + jQuery("#txtrecipename").val()), buttons: { Apply: function () { doSharingSettings() }, Close: function () { jQuery(this).dialog("close") } } }) } else { showClickError("Please save your recipe first before sharing.") } }); jQuery(".scale").click(function (a) { jQuery("#scale_current_batch_size").html(document.calc.txtbatchsize.value); jQuery("#scale_current_efficiency").html(document.calc.txtefficiency.value); jQuery("#newbatchsize").val(""); jQuery("#newefficiency").val(""); jQuery("#scale_by_efficiency_box").hide(); if (jQuery("#brewmethod").val() != "extract") { jQuery("#scale_by_efficiency_box").show() } jQuery("#scaledialog").bind("dialogopen", function (b) { disableAllFieldsBehindDialog(this) }); jQuery("#scaledialog").bind("dialogclose", function (b) { reEnableFieldsBehindDialog() }); jQuery("#scaledialog").dialog({ modal: true, resizable: false, draggable: false, minWidth: 440, maxWidth: 440, zIndex: 9999, title: ("Scale " + jQuery("#txtrecipename").val()), buttons: { Apply: function () { doScaling() }, Close: function () { jQuery(this).dialog("close") } } }) }); jQuery(".togglelarge").each(function () { jQuery(this).click(function () { if (jQuery(this).find(".arrow").hasClass("up")) { jQuery(this).find(".arrow").removeClass("up"); jQuery(this).find(".arrow").addClass("down"); jQuery("#morebutton_ogfg").html("Meno info..."); jQuery(this).parent().find(".maxtoggle").hide(); jQuery(this).parent().find(".maxtoggle").slideDown(); return false } else { if (jQuery(this).find(".arrow").hasClass("down")) { jQuery(this).find(".arrow").removeClass("down"); jQuery(this).find(".arrow").addClass("up"); jQuery("#morebutton_ogfg").html("Più info..."); jQuery(this).parent().find(".maxtoggle").show(); jQuery(this).parent().find(".maxtoggle").slideUp(); return false } } }) }); jQuery("#morebutton_ogfg").click(function () { jQuery("#arrow_ogfg").click() }); if (typeof (setRecipeIdForEdit) != "undefined") { setRecipeIdForEdit() } if (recipeId > 0) { getRecipeAJAX(recipeId) } else { setupBlanks(); setupUnits(); setupBrewMethod(); jQuery("#mash_thickness").val(defaultMashThickness) } enableUpdateAll = true; updateAll(); current_state_saved = true }); function populateHopsAutocompleteArray() { hopsAutoCompleteArray.length = 0; for (z = 1; z < hops.length; z++) { hopsAutoCompleteArray.push({ label: hops[z].name + " (" + hops[z].avgaa + ")", value: hops[z].name }) } hopsAutoCompleteArray.sort(sortHopsAutoCompleteList) } var recipeId = -1; var recipeViewUrl = ""; var current_state_saved = false; var recipename = ""; var author = ""; var batchsize = 5.5; var boilsize = 3; var boiltime = 60; var efficiency = 75; var attenuation = 0.75; var units = "us"; var sugar_scale; var brewmethod = "extract"; var maxitems = 50; var yeastType = "dry"; var currentIBU; var currentSRM; var og; var fg; var currentABV; var abv_standard; var abv_alternate; var matchesStyle = false; var noChillExtraMinutes = 0; var fermentableData = []; var hopsData = []; var hopsAutoCompleteArray = []; var yeastdropdown; var subcategorylist; var currentStyle = ""; var enableUpdateAll = false; function getIngredientByID(a) { for (z = 0; z < ingredients.length; z++) { if (ingredients[z].id == a) { return ingredients[z] } } return false } function getYeastByID(a) { for (z = 0; z < yeast.length; z++) { if (yeast[z].id == a) { return yeast[z] } } return false } function getHopIndexByVariety(b, a) { for (z = 0; z < hops.length; z++) { if (b[z].name == a) { return z } } return -1 } function getHopAutoCompleteIndex(a) { for (index in hopsAutoCompleteArray) { if (hopsAutoCompleteArray[index].value == a) { return index } } return -1 } function getDropDownValue(b, e) { var c = ""; var d = b.elements[e]; try { if (d.selectedIndex != -1) { c = d[d.selectedIndex].value } } catch (a) { alert("Unable to get value for " + e); return "" } return c } function showSection(a) { var b = document.getElementById(a); b.style.visibility = "visible"; b.style.display = "block" } function hideSection(a) { var b = document.getElementById(a); b.style.visibility = "hidden"; b.style.display = "none" } function getIndexOfBrewPart(b, a) { var c = a.replace(b, ""); c = parseInt(c); return c } function addSection(d) { var b = 0; jQuery("#" + d + "_brewpartitems").children().each(function () { var e = getIndexOfBrewPart(d, jQuery(this).attr("id")); if (b <= e) { b = e + 1 } }); units = getDropDownValue(document.calc, "ddunits"); brewmethod = getDropDownValue(document.calc, "brewmethod"); if (b < maxitems) { var c = jQuery(("#" + d + "_template")).html(); var a = jQuery(c).appendTo(("#" + d + "_brewpartitems")).attr("id", (d + b)); if (d == "fmt") { jQuery(a).find("#fmt_units").attr("id", ("fmt_units" + b)); jQuery(a).find("#fermentableAmount").attr("id", ("fermentableAmount" + b)); jQuery(a).find("#fmtpercent").attr("id", ("fmtpercent" + b)); jQuery(a).find("#fmtOGContribution").attr("id", ("fmtOGContribution" + b)); jQuery(a).find("#fermentableType").attr("id", ("fermentableType" + b)); jQuery(a).find("#fermentableLate").attr("id", ("fermentableLate" + b)); jQuery(a).find("#fermentableLateValue").attr("id", ("fermentableLateValue" + b)); jQuery(a).find("#fmtPPGLabel").attr("id", ("fmtPPGLabel" + b)); jQuery(a).find("#fmtLovibondLabel").attr("id", ("fmtLovibondLabel" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveFermentable(" + b + ");")); setupDataItemMoreBar(a, 28); setupFermentable(("fermentableType" + b), brewmethod); setupFermentableUnitsDropdown(units, "#fermentableAmount" + b, "#fmt_units" + b) } else { if (d == "cfmt") { jQuery(a).find("#custfmt_units").attr("id", ("custfmt_units" + b)); jQuery(a).find("#custfermentableAmount").attr("id", ("custfermentableAmount" + b)); jQuery(a).find("#custfmtpercent").attr("id", ("custfmtpercent" + b)); jQuery(a).find("#custfmtOGContribution").attr("id", ("custfmtOGContribution" + b)); jQuery(a).find("#custfermentableType").attr("id", ("custfermentableType" + b)); jQuery(a).find("#custfermentableLate").attr("id", ("custfermentableLate" + b)); jQuery(a).find("#custfermentableLateValue").attr("id", ("custfermentableLateValue" + b)); jQuery(a).find("#custfermentableColor").attr("id", ("custfermentableColor" + b)); jQuery(a).find("#custfermentablePPG").attr("id", ("custfermentablePPG" + b)); jQuery(a).find("#custfermentableMashed").attr("id", ("custfermentableMashed" + b)); jQuery(a).find("#custfermentableMashedValue").attr("id", ("custfermentableMashedValue" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveCustomFermentable(" + b + ");")); setupFermentableUnitsDropdown(units, "#custfermentableAmount" + b, "#custfmt_units" + b) } else { if (d == "stp") { jQuery(a).find("#stp_units").attr("id", ("stp_units" + b)); jQuery(a).find("#steepingGrainAmount").attr("id", ("steepingGrainAmount" + b)); jQuery(a).find("#steepingGrainType").attr("id", ("steepingGrainType" + b)); jQuery(a).find("#steeppercent").attr("id", ("steeppercent" + b)); jQuery(a).find("#stpOGContribution").attr("id", ("stpOGContribution" + b)); jQuery(a).find("#stpPPGLabel").attr("id", ("stpPPGLabel" + b)); jQuery(a).find("#stpLovibondLabel").attr("id", ("stpLovibondLabel" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveSteepingGrain(" + b + ");")); setupDataItemMoreBar(a, 28); setupSteepingGrainDropDown(("steepingGrainType" + b)); setupFermentableUnitsDropdown(units, "#steepingGrainAmount" + b, "#stp_units" + b) } else { if (d == "hops") { jQuery(a).find("#hops_units").attr("id", ("hops_units" + b)); jQuery(a).find("#hopsVariety").attr("id", ("hopsVariety" + b)); jQuery(a).find("#hopsAmount").attr("id", ("hopsAmount" + b)); jQuery(a).find("#hopsType").attr("id", ("hopsType" + b)); jQuery(a).find("#hopsTime").attr("id", ("hopsTime" + b)); jQuery(a).find("#hopsTimeUnitLabel").attr("id", ("hopsTimeUnitLabel" + b)); jQuery(a).find("#hopsTimeValue").attr("id", ("hopsTimeValue" + b)); jQuery(a).find("#hopsIBUValue").attr("id", ("hopsIBUValue" + b)); jQuery(a).find("#hopsUse").attr("id", ("hopsUse" + b)); jQuery(a).find("#hopsAA").attr("id", ("hopsAA" + b)); jQuery(a).find("#hopsInfoIBU").attr("id", ("hopsInfoIBU" + b)); jQuery(a).find("#hopsInfoUtil").attr("id", ("hopsInfoUtil" + b)); jQuery(a).find("#hopsInfoAAU").attr("id", ("hopsInfoAAU" + b)); jQuery(a).find("#div_hopstand").attr("id", ("div_hopstand" + b)); jQuery(a).find("#hopUtilization").attr("id", ("hopUtilization" + b)); jQuery(a).find("#hopStandTemp").attr("id", ("hopStandTemp" + b)); jQuery(a).find("#unit_hopstandtemp_").attr("id", ("unit_hopstandtemp_" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveHops(" + b + ");")); setupHopAutocomplete("hopsVariety" + b); if (units != "metric") { jQuery("#hops_units" + b).val("oz") } else { jQuery("#hops_units" + b).val("g") } } else { if (d == "other") { jQuery(a).find("#unit_otheramt_").attr("id", ("unit_otheramt_" + b)); jQuery(a).find("#otherAmount").attr("id", ("otherAmount" + b)); jQuery(a).find("#otherName").attr("id", ("otherName" + b)); jQuery(a).find("#otherTime").attr("id", ("otherTime" + b)); jQuery(a).find("#otherType").attr("id", ("otherType" + b)); jQuery(a).find("#otherUse").attr("id", ("otherUse" + b)); jQuery(a).find("#otherUnit").attr("id", ("otherUnit" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveOther(" + b + ");")); setupOtherIngredientsUnitsDropDown(document.calc.elements["otherUnit" + b], units) } else { if (d == "mashStep") { jQuery(a).find("#mashType").attr("id", ("mashType" + b)); jQuery(a).find("#mashName").attr("id", ("mashName" + b)); jQuery(a).find("#mashTime").attr("id", ("mashTime" + b)); jQuery(a).find("#mash_units").attr("id", ("mash_units" + b)); jQuery(a).find("#mashAmount").attr("id", ("mashAmount" + b)); jQuery(a).find("#mashTemp").attr("id", ("mashTemp" + b)); jQuery(a).find("#unit_mashtemp_").attr("id", ("unit_mashtemp_" + b)); jQuery(a).find(".delete").attr("onClick", ("javascript: doRemoveMashStep(" + b + ");")); setupMashUnitsDropDown(units, "#mashAmount" + b, "#mash_units" + b); if (units != "metric") { jQuery("#mash_units" + b).val(defaultMashUnit) } else { jQuery("#mash_units" + b).val("L") } } } } } } } jQuery(a).find("input, select").not(jQuery(".hopsVariety")).change(function () { updateAll() }); aggiustaVirgole(); return b } else { notification("Limit for items reached, cannot add more.", { color: "red" }); aggiustaVirgole(); return false } } function doRemoveFermentable(a) { if (a > 0) { jQuery("#fmt" + a).remove() } else { document.calc.elements["fermentableAmount" + a].value = ""; document.calc.elements["fermentableType" + a].selectedIndex = 0; document.calc.elements["fermentableLate" + a].checked = false; document.calc.elements["fermentableLateValue" + a].value = "false" } updateAll() } function doRemoveCustomFermentable(a) { jQuery("#cfmt" + a).remove(); updateAll() } function doRemoveSteepingGrain(a) { if (a > 0) { jQuery("#stp" + a).remove() } else { if (document.calc.elements["steepingGrainAmount" + a]) { document.calc.elements["steepingGrainAmount" + a].value = ""; document.calc.elements["steepingGrainType" + a].selectedIndex = 0 } } updateAll() } function doRemoveHops(a) { if (a > 0) { jQuery("#hops" + a).remove() } else { document.calc.elements["hopsAmount" + a].value = ""; document.calc.elements["hopsVariety" + a].value = ""; document.calc.elements["hopsAA" + a].value = ""; document.calc.elements["hopsType" + a].selectedIndex = 0; document.calc.elements["hopsUse" + a].selectedIndex = 0; document.calc.elements["hopsTime" + a].value = "" } updateAll() } function doRemoveOther(a) { if (a > 0) { jQuery("#other" + a).remove() } else { document.calc.elements["otherName" + a].value = ""; document.calc.elements["otherAmount" + a].value = ""; document.calc.elements["otherTime" + a].value = ""; document.calc.elements["otherType" + a].selectedIndex = 0; document.calc.elements["otherUse" + a].selectedIndex = 0; document.calc.elements["otherUnit" + a].selectedIndex = 0 } updateAll() } function doRemoveMashStep(a) { if (a > 0) { jQuery("#mashStep" + a).remove() } else { document.calc.elements["mashName" + a].value = ""; document.calc.elements["mashAmount" + a].value = ""; document.calc.elements["mashTime" + a].value = ""; document.calc.elements["mashTemp" + a].value = ""; document.calc.elements["mashType" + a].selectedIndex = 0 } updateAll() } function waterProfileUpdate() { profilename = getDropDownValue(document.calc, "waterprofile"); if (profilename == "Custom") { showSection("span_waterprofile_custom") } else { hideSection("span_waterprofile_custom"); document.calc.waterprofile_custom.value = "" } if (profilename != "Custom" && profilename != "--- Water Profile ---") { for (z = 0; z < waterprofiles.length; z++) { if (waterprofiles[z].name == profilename) { jQuery("#water_ca").val(waterprofiles[z].Ca); jQuery("#water_mg").val(waterprofiles[z].Mg); jQuery("#water_so").val(waterprofiles[z].SO4); jQuery("#water_na").val(waterprofiles[z].Na); jQuery("#water_cl").val(waterprofiles[z].Cl); jQuery("#water_hco").val(waterprofiles[z].HCO3) } } } } function toggleCustomYeast(a) { if (a.checked == true) { showSection("customyeast") } else { hideSection("customyeast"); document.calc.yeast_custom_name.value = "" } } function toggleCustomAttenuation(a) { if (a.checked == true) { showSection("span_yeast_attenuation") } else { hideSection("span_yeast_attenuation"); document.calc.yeast_custom_attenuation.value = ""; updateAll() } } function setCurrentStyle() { for (i = 0; i < bjcp.length; i++) { if (subcategorylist[subcategorylist.selectedIndex].value == bjcp[i].name) { currentStyle = bjcp[i]; break } } } function updatesubcategory(a) { setVars(); subcategorylist.options.length = 0; if (a == 0) { for (i = 1; i <= 15; i++) { populateBox(i) } } else { if (a == 16) { for (i = 17; i <= 21; i++) { populateBox(i) } } else { if (a == 22) { for (i = 23; i <= 26; i++) { populateBox(i) } } else { populateBox(a) } } } updateAll() } function populateBox(a) { for (z = 0; z < subcats[a].length; z++) { if (subcats[a][z] != "") { subcategorylist.options[subcategorylist.options.length] = new Option(subcats[a][z], subcats[a][z]) } } } function setupBrewMethod() { setVars(); hideSection("steepinggrains"); hideSection("mashsteps"); jQuery("#startingMashThickness").hide(); jQuery("#efficiency_notes").html(""); updateWaterCalcLink(); var c = 5.5; var b = 7.5; if (brewmethod == "allgrain" || brewmethod == "biab") { showSection("mashsteps"); if (units == "metric") { c = 21; b = 28.5 } if (brewmethod == "allgrain") { jQuery("#startingMashThickness").show() } } if (brewmethod == "extract") { showSection("steepinggrains"); jQuery("#efficiency_notes").html("Steeping Grains Only"); b = 3; document.calc.txtefficiency.value = "35"; if (units == "metric") { c = 21; b = 11 } } if (brewmethod == "partialmash") { showSection("mashsteps"); b = 3; if (units == "metric") { c = 21; b = 11 } } if (brewmethod != "extract") { enableUpdateAll = false; for (i = 0; i <= maxitems; i++) { doRemoveSteepingGrain(i) } enableUpdateAll = true } for (i = 0; i <= maxitems; i++) { var a = document.calc.elements["fermentableType" + i]; if (a) { setupFermentable("fermentableType" + i, brewmethod) } } if (defaultBatchSize != "") { c = defaultBatchSize } if (defaultBoilSize != "") { b = defaultBoilSize } document.calc.txtbatchsize.value = c; document.calc.txtboilsize.value = b; updateAll() } function updateWaterCalcLink() { brewmethod = getDropDownValue(document.calc, "brewmethod"); if (brewmethod == "extract") { jQuery(".waterCalcLink").hide(); return } if (recipeId > 0) { jQuery("#water_calc_link_not_saved_yet").hide(); var a = jQuery("#water_calc_link_url").html(); a += "?recipeId=" + recipeId; jQuery("#water_calc_link").attr("href", a); jQuery("#water_calc_link").show(); jQuery("#water_calc_link").css("display", "block") } else { jQuery("#water_calc_link_not_saved_yet").show(); jQuery("#water_calc_link").hide() } } function notification(b, a) { jQuery("#message").html(""); jQuery("#user_message .closebutton").unbind("click"); jQuery("#user_message").attr("class", "notice"); if (a.color) { if (a.color == "red") { jQuery("#user_message").addClass("red") } else { if (a.color == "green") { jQuery("#user_message").addClass("green") } else { if (a.color == "yellow") { jQuery("#user_message").addClass("yellow") } else { if (a.color == "blue") { jQuery("#user_message").addClass("blue") } } } } } jQuery("#user_message .closebutton").click(function () { jQuery("#user_message").slideUp() }); jQuery("#user_message").slideDown(function () { jQuery(this).find("#message").html(b) }) } function inactiveOverlay(a, b, c) { if (c) { jQuery(a).css("position", "relative"); jQuery(a).prepend('
' + b + "
") } else { if (jQuery(a).find("#inactiveoverlay")) { jQuery(a).find("#inactiveoverlay").fadeOut().remove() } } } function lookupHopsAA(f, c) { var a = 0; if (c != null && c.length >= 3) { for (z = 1; z < hops.length; z++) { if (hops[z].name == c) { a = hops[z].avgaa } } } if (a > 0) { var e = f.replace("Variety", "AA"); jQuery("#" + e).val(a); var b = f.replace("Variety", "Tipo"); var d = f.replace("Variety", "Uso"); if (jQuery("#" + b).val() == "--") { jQuery("#" + b).val(defaultHopType) } if (jQuery("#" + d).val() == "--") { jQuery("#" + d).val("Boil") } updateAll() } } function sortHops() { setVars(); hopsData.sort(sortHopsByOrderTimeName); var a = 0; jQuery("#hops_brewpartitems").children().each(function () { var b = getIndexOfBrewPart("hops", jQuery(this).attr("id")); if (hopsData[a]) { if (hopsData[a].useramount || hopsData[a].useramount == "0") { jQuery("#hopsAmount" + b).val(hopsData[a].useramount) } else { jQuery("#hopsAmount" + b).val("") } jQuery("#hops_units" + b).val(hopsData[a].units); if (hopsData[a].aa || hopsData[a].aa == "0") { jQuery("#hopsAA" + b).val(hopsData[a].aa) } else { jQuery("#hopsAA" + b).val("") } jQuery("#hopsType" + b).val(hopsData[a].type); jQuery("#hopsUse" + b).val(hopsData[a].use); jQuery("#hopsVariety" + b).val(hopsData[a].name); if (hopsData[a].time || hopsData[a].time == "0") { jQuery("#hopsTime" + b).val(hopsData[a].time) } else { jQuery("#hopsTime" + b).val("") } if (hopsData[a].userutilization || hopsData[a].userutilization == "0") { jQuery("#hopUtilization" + b).val(rounddecimal(hopsData[a].userutilization * 100, 0)) } else { jQuery("#hopUtilization" + b).val("") } if (hopsData[a].usertemp || hopsData[a].usertemp == "0") { jQuery("#hopStandTemp" + b).val(hopsData[a].usertemp) } else { jQuery("#hopStandTemp" + b).val("") } } else { doRemoveHops(b) } a++ }); updateAll() } function sortHopsByOrderTimeName(b, a) { var c = []; c.Mash = 1; c["First Wort"] = 2; c.Boil = 3; c.Aroma = 4; c.Whirlpool = 5; c.Hopback = 6; c["Dry Hop"] = 7; hops1UseOrder = c[b.use]; hops2UseOrder = c[a.use]; if (!hops1UseOrder) { hops1UseOrder = 99 } if (!hops2UseOrder) { hops2UseOrder = 99 } if (hops1UseOrder > hops2UseOrder) { return 1 } if (hops1UseOrder < hops2UseOrder) { return -1 } if (hops1UseOrder == hops2UseOrder) { if (parseFloat(b.time) < parseFloat(a.time)) { return 1 } if (parseFloat(b.time) > parseFloat(a.time)) { return -1 } if (b.time == a.time) { if (b.name.toLowerCase() > a.name.toLowerCase()) { return 1 } else { return -1 } } } return 0 } function sortOthers() { setVars(); var e = []; for (c = 0; c <= maxitems; c++) { var g = document.calc.elements["otherName" + c]; if (g) { var a = document.calc.elements["otherName" + c].value; var h = parseFloat(document.calc.elements["otherAmount" + c].value); var k = getDropDownValue(document.calc, "otherUnit" + c); var b = parseFloat(document.calc.elements["otherTime" + c].value); var j = getDropDownValue(document.calc, "otherType" + c); var d = getDropDownValue(document.calc, "otherUse" + c); var f = new Object(); f.name = a; f.amount = h; f.units = k; f.time = b; f.type = j; f.use = d; e.push(f) } } e.sort(sortOthersByOrderUseTimeName); var c = 0; jQuery("#other_brewpartitems").children().each(function () { var l = getIndexOfBrewPart("other", jQuery(this).attr("id")); if (e[c]) { jQuery("#otherName" + l).val(e[c].name); if (e[c].amount || e[c].amount == "0") { jQuery("#otherAmount" + l).val(e[c].amount) } else { jQuery("#otherAmount" + l).val("") } jQuery("#otherUnit" + l).val(e[c].units); if (e[c].time || e[c].time == "0") { jQuery("#otherTime" + l).val(e[c].time) } else { jQuery("#otherTime" + l).val("") } jQuery("#otherType" + l).val(e[c].type); jQuery("#otherUse" + l).val(e[c].use) } else { doRemoveOther(l) } c++ }); updateAll() } function sortOthersByOrderUseTimeName(c, b) { var a = []; a.Mash = 1; a.Boil = 2; a.Primary = 3; a.Secondary = 4; a.Bottling = 5; a.Other = 6; other1UseOrder = a[c.use]; other2UseOrder = a[b.use]; if (!other1UseOrder) { other1UseOrder = 99 } if (!other2UseOrder) { other2UseOrder = 99 } if (other1UseOrder > other2UseOrder) { return 1 } if (other1UseOrder < other2UseOrder) { return -1 } if (other1UseOrder == other2UseOrder) { if (parseFloat(c.time) < parseFloat(b.time)) { return 1 } if (parseFloat(c.time) > parseFloat(b.time)) { return -1 } if (c.time == b.time) { if (c.name.toLowerCase() > b.name.toLowerCase()) { return 1 } else { return -1 } } } return 0 } function sortFermentables() { setVars(); fermentableData.sort(sortFermentableData); var c = []; var b = []; for (a = 0; a < fermentableData.length; a++) { if (fermentableData[a].group == "fermentable") { c.push(fermentableData[a]) } if (fermentableData[a].group == "custom") { b.push(fermentableData[a]) } } var a = 0; jQuery("#fmt_brewpartitems").children().each(function () { var d = getIndexOfBrewPart("fmt", jQuery(this).attr("id")); if (c[a]) { if (c[a].useramount || c[a].useramount == "0") { jQuery("#fermentableAmount" + d).val(c[a].useramount) } else { jQuery("#fermentableAmount" + d).val("") } jQuery("#fmt_units" + d).val(c[a].units); jQuery("#fermentableType" + d).val(c[a].id); if (c[a].lateaddition) { jQuery("#fermentableLate" + d).attr("checked", "checked") } else { jQuery("#fermentableLate" + d).attr("checked", false) } } else { doRemoveFermentable(d) } a++ }); a = 0; jQuery("#cfmt_brewpartitems").children().each(function () { var d = getIndexOfBrewPart("cfmt", jQuery(this).attr("id")); if (b[a]) { if (b[a].useramount || b[a].useramount == "0") { jQuery("#custfermentableAmount" + d).val(b[a].useramount) } else { jQuery("#custfermentableAmount" + d).val("") } jQuery("#custfmt_units" + d).val(b[a].units); jQuery("#custfermentableType" + d).val(b[a].name); if (b[a].ppg || b[a].ppg == "0") { jQuery("#custfermentablePPG" + d).val(b[a].ppg) } else { jQuery("#custfermentablePPG" + d).val("") } if (b[a].lovibond || b[a].lovibond == "0") { jQuery("#custfermentableColor" + d).val(b[a].lovibond) } else { jQuery("#custfermentableColor" + d).val("") } if (b[a].lateaddition) { jQuery("#custfermentableLate" + d).attr("checked", "checked") } else { jQuery("#custfermentableLate" + d).attr("checked", false) } if (b[a].mashable) { jQuery("#custfermentableMashed" + d).attr("checked", "checked") } else { jQuery("#custfermentableMashed" + d).attr("checked", false) } } else { doRemoveCustomFermentable(d) } a++ }); updateAll() } function sortFermentableData(b, a) { if (b.amount > a.amount) { return -1 } if (b.amount < a.amount) { return 1 } if (b.amount == a.amount) { if (b.name.toLowerCase() > a.name.toLowerCase()) { return 1 } else { return -1 } } return 0 } function sortHopsAutoCompleteList(b, a) { if (b.label.toLowerCase() > a.label.toLowerCase()) { return 1 } if (b.label.toLowerCase() < a.label.toLowerCase()) { return -1 } return 0 } function checkInput() { setVars(); if (!isNumber(batchsize)) { alert("Batch Size must be a positive number."); return false } if (!isNumber(boilsize)) { alert("Boil Size must be a positive number."); return false } if (!isNumber(boiltime)) { alert("Boil Time must be a positive number."); return false } if (!isNumber(efficiency)) { alert("Efficiency must be a positive number."); return false } if (efficiency < 0 || efficiency > 100) { alert("Efficiency should be between 0 and 100."); return false } if (noChillExtraMinutes != "") { if (!isNumber(noChillExtraMinutes) || noChillExtraMinutes < 0 || noChillExtraMinutes > 60) { alert("No Chill Extra Minutes should be between 0 and 60, but a normal value is between 5 and 20."); return false } } return true } function setVars() { recipename = document.calc.txtrecipename.value; author = document.calc.txtauthor.value; batchsize = document.calc.txtbatchsize.value; boilsize = document.calc.txtboilsize.value; boiltime = document.calc.txtboiltime.value; efficiency = document.calc.txtefficiency.value; units = getDropDownValue(document.calc, "ddunits"); sugar_scale = jQuery('input[type="radio"][name="sugar_scale"]:checked').val(); brewmethod = getDropDownValue(document.calc, "brewmethod"); noChillExtraMinutes = document.calc.txtnochillextraminutes.value; if (noChillExtraMinutes != "") { noChillExtraMinutes = parseInt(noChillExtraMinutes) } yeastdropdown = document.calc.elements.yeast; subcategorylist = document.calc.elements.subcategory; fermentableData = []; hopsData = []; attenuation = 0.75; var q = getDropDownValue(document.calc, "yeast"); yeastType = "dry"; if (q) { var a = getYeastByID(q); if (a) { attenuation = a.attenuation / 100; var t = a.mintemp; var l = a.maxtemp; if (units != "us") { t = rounddecimal(fahrenheitToCelsius(t), 1); l = rounddecimal(fahrenheitToCelsius(l), 1) } var h = a.alcoholtolerance; if (parseFloat(h) > 0) { h = parseFloat(h) * 100; h = h.toString() + "%" } jQuery("#yeast_stats_temp_min").html(t); jQuery("#yeast_stats_temp_max").html(l); jQuery("#yeast_stats_flocculation").html(a.flocculation); jQuery("#yeast_stats_attenuation").html(a.attenuation); jQuery("#yeast_stats_alcohol_tolerance").html(h); if (a.brand == "Wyeast" || a.brand == "White Labs") { yeastType = "liquid" } } } var o = document.calc.yeast_custom_attenuation.value; if (o != "" && isNumber(o)) { o = parseFloat(o); if (o > 0 && o <= 150) { attenuation = (o / 100) } } for (i = 0; i <= maxitems; i++) { var p = document.calc.elements["fermentableAmount" + i]; if (p) { var s = getDropDownValue(document.calc, "fermentableType" + i); if (s != "") { var D = getIngredientByID(s); var c = false; if (document.calc.elements["fermentableLate" + i] && document.calc.elements["fermentableLate" + i].checked) { c = true; jQuery("#fermentableLateValue" + i).val("true") } else { jQuery("#fermentableLateValue" + i).val("false") } var j = parseFloat(document.calc.elements["fermentableAmount" + i].value); var g = getDropDownValue(document.calc, "fmt_units" + i); if (j >= 0) { var v = new Fermentable(D.name, D.lovibond, D.ppg, j, D.mashable, D.category, c, s, "fermentable", g, i); fermentableData.push(v) } else { jQuery("#fmtOGContribution" + i).html("") } jQuery("#fmtPPGLabel" + i).html(D.ppg); jQuery("#fmtLovibondLabel" + i).html(D.lovibond) } } } for (i = 0; i <= maxitems; i++) { var p = document.calc.elements["custfermentableAmount" + i]; if (p) { var c = false; if (document.calc.elements["custfermentableLate" + i] && document.calc.elements["custfermentableLate" + i].checked) { c = true; jQuery("#custfermentableLateValue" + i).val("true") } else { jQuery("#custfermentableLateValue" + i).val("false") } var e = false; if (document.calc.elements["custfermentableMashed" + i] && document.calc.elements["custfermentableMashed" + i].checked) { e = true; jQuery("#custfermentableMashedValue" + i).val("true") } else { jQuery("#custfermentableMashedValue" + i).val("false") } var j = parseFloat(document.calc.elements["custfermentableAmount" + i].value); var g = getDropDownValue(document.calc, "custfmt_units" + i); var w = parseFloat(document.calc.elements["custfermentableColor" + i].value); var A = parseFloat(document.calc.elements["custfermentablePPG" + i].value); if (j >= 0 && w >= 0 && A >= 0) { var v = new Fermentable(document.calc.elements["custfermentableType" + i].value, w, A, j, e, "user supplied", c, -1, "custom", g, i); fermentableData.push(v) } else { jQuery("#custfmtOGContribution" + i).html("") } } } for (i = 0; i <= maxitems; i++) { var d = document.calc.elements["steepingGrainAmount" + i]; if (d) { var s = getDropDownValue(document.calc, "steepingGrainType" + i); if (s != "") { var D = getIngredientByID(s); var j = parseFloat(document.calc.elements["steepingGrainAmount" + i].value); var g = getDropDownValue(document.calc, "stp_units" + i); if (j > 0) { var v = new Fermentable(D.name, D.lovibond, D.ppg, j, D.mashable, D.category, false, s, "steeping", g, i); fermentableData.push(v) } else { jQuery("#stpOGContribution" + i).html("") } } jQuery("#stpPPGLabel" + i).html(D.ppg); jQuery("#stpLovibondLabel" + i).html(D.lovibond) } } for (i = 0; i <= maxitems; i++) { var C = document.calc.elements["hopsAmount" + i]; if (C) { var j = parseFloat(document.calc.elements["hopsAmount" + i].value); var r = parseFloat(document.calc.elements["hopsAA" + i].value); var y = parseFloat(document.calc.elements["hopsTime" + i].value); var u = getDropDownValue(document.calc, "hopsType" + i); var k = getDropDownValue(document.calc, "hopsUse" + i); var g = getDropDownValue(document.calc, "hops_units" + i); var B = document.calc.elements["hopsVariety" + i].value; var f = document.calc.elements["hopUtilization" + i].value; var b = document.calc.elements["hopStandTemp" + i].value; if (k == "First Wort" || k == "Mash") { document.calc.elements["hopsTime" + i].value = ""; y = 0; jQuery("#hopsTime" + i).attr("disabled", true) } else { jQuery("#hopsTime" + i).removeAttr("disabled") } if (k == "Dry Hop") { jQuery("#hopsTimeUnitLabel" + i).html("days") } else { jQuery("#hopsTimeUnitLabel" + i).html("min.") } if (k == "Whirlpool" || k == "Hopback") { jQuery("#div_hopstand" + i).show() } else { jQuery("#div_hopstand" + i).hide(); jQuery("#hopUtilization" + i).val(""); jQuery("#hopStandTemp" + i).val("") } if (r > 0 && B != "") { var n = getHopIndexByVariety(hops, B); if (n == -1) { hops.push({ name: B, avgaa: r }) } else { hops[n].avgaa = r } var m = getHopAutoCompleteIndex(B); if (m == -1) { hopsAutoCompleteArray.push({ label: B + " (" + r + ")", value: B }) } else { hopsAutoCompleteArray[m].label = B + " (" + r + ")" } } document.calc.elements["hopsTimeValue" + i].value = y; hopsData.push(new Hops(B, u, r, k, j, y, g, f, b)) } } hopsAutoCompleteArray.sort(sortHopsAutoCompleteList); if (subcategorylist.selectedIndex != -1) { if (currentStyle.name != subcategorylist[subcategorylist.selectedIndex].value) { setCurrentStyle() } } if (units != "us") { batchsize = litersToGallons(batchsize); boilsize = litersToGallons(boilsize) } } function updateAll() { if (enableUpdateAll === false) { return } if (brewmethod != "extract") { var l = getDropDownValue(document.calc, "batch_size_mode"); if (l == "f") { jQuery("#efficiency_notes").html("(Brew House)") } else { if (l == "k") { jQuery("#efficiency_notes").html("(Ending Kettle)") } } } jQuery("#user_message").slideUp(); if (!checkInput()) { return false } if (currentStyle != "") { if (sugar_scale == "plato") { jQuery(".ogStyle").html(convertGravityToPlato(currentStyle.oglow) + " - " + convertGravityToPlato(currentStyle.oghigh) + "°P"); jQuery(".fgStyle").html(convertGravityToPlato(currentStyle.fglow) + " - " + convertGravityToPlato(currentStyle.fghigh) + "°P") } else { jQuery(".ogStyle").html(currentStyle.oglow + " - " + currentStyle.oghigh); jQuery(".fgStyle").html(currentStyle.fglow + " - " + currentStyle.fghigh) } jQuery(".abvStyle").html(currentStyle.abvlow + " - " + currentStyle.abvhigh + "%"); jQuery(".ibuStyleTinseth").html(currentStyle.ibulow + " - " + currentStyle.ibuhigh); jQuery(".ibuStyleRager").html(currentStyle.ibulow + " - " + currentStyle.ibuhigh); jQuery(".srmStyleMorey").html(currentStyle.srmlow + " - " + currentStyle.srmhigh); jQuery(".srmStyleDaniels").html(currentStyle.srmlow + " - " + currentStyle.srmhigh); jQuery(".srmStyleMosher").html(currentStyle.srmlow + " - " + currentStyle.srmhigh); jQuery(".ecbStyle").html(rounddecimal(srmToECB(currentStyle.srmlow), 1) + " - " + rounddecimal(srmToECB(currentStyle.srmhigh), 1)); var T = (currentStyle.srmlow + currentStyle.srmhigh) / 2; jQuery(".colorStyle").css("backgroundColor", srm[rounddecimal(T, 0)]) } else { jQuery(".ogStyle").html("-"); jQuery(".fgStyle").html("-"); jQuery(".abvStyle").html("-"); jQuery(".ibuStyleTinseth").html("-"); jQuery(".ibuStyleRager").html("-"); jQuery(".srmStyleMorey").html("-"); jQuery(".srmStyleDaniels").html("-"); jQuery(".srmStyleMosher").html("-"); jQuery(".ecbStyle").html("-") } var F = hasFermentable(fermentableData); var f = hasHop(hopsData); var G, k, L; if (F) { G = calculateOG(fermentableData, efficiency, batchsize, true); k = calculateOG(fermentableData, efficiency, batchsize, false); if (k == 0) { k = 1 } L = calculateBoilGravity(batchsize, boilsize, k); if (G > 1.5) { G = 1.5 } if (k > 1.5) { k = 1.5 } if (L > 1.5) { L = 1.5 } fg = calculateFG(G, attenuation, fermentableData, batchsize); var O = computeCaloriesPer12oz(convertGravityToPlato(G, 10), convertGravityToPlato(fg, 10)); jQuery(".calories").html(rounddecimal(O, 1)); if (sugar_scale == "plato") { jQuery(".boilGravity").html(convertGravityToPlato(L) + " °P"); jQuery(".ogBatch").html(convertGravityToPlato(G) + " °P"); jQuery("#og").val(convertGravityToPlato(G, 10)); jQuery("#boilgravity").val(convertGravityToPlato(L)); var o = convertGravityToPlato(G); var I = convertGravityToPlato(currentStyle.oglow); var b = convertGravityToPlato(currentStyle.oghigh); if (o >= I && o <= b) { jQuery(".ogBatch").parent().addClass("statsMatchingIndicator"); jQuery(".ogBatch").parent().removeClass("statsWarningIndicator") } else { jQuery(".ogBatch").parent().addClass("statsWarningIndicator"); jQuery(".ogBatch").parent().removeClass("statsMatchingIndicator") } jQuery(".fgBatch").html(convertGravityToPlato(fg) + " °P"); jQuery("#fg").val(convertGravityToPlato(fg, 10)) } else { jQuery(".boilGravity").html(rounddecimal(L, 3)); jQuery(".ogBatch").html(rounddecimal(G, 3)); jQuery("#og").val(rounddecimal(G, 3)); jQuery("#boilgravity").val(rounddecimal(L, 3)); var d = rounddecimal(G, 3); if (d >= currentStyle.oglow && d <= currentStyle.oghigh) { jQuery(".ogBatch").parent().addClass("statsMatchingIndicator"); jQuery(".ogBatch").parent().removeClass("statsWarningIndicator") } else { jQuery(".ogBatch").parent().addClass("statsWarningIndicator"); jQuery(".ogBatch").parent().removeClass("statsMatchingIndicator") } jQuery(".fgBatch").html(rounddecimal(fg, 3)); jQuery("#fg").val(rounddecimal(fg, 3)) } for (var U = 0; U < fermentableData.length; U++) { if (fermentableData[U] != undefined) { var j = ""; if (fermentableData[U].group == "fermentable") { j = "fmtOGContribution" } else { if (fermentableData[U].group == "custom") { j = "custfmtOGContribution" } else { if (fermentableData[U].group == "steeping") { j = "stpOGContribution" } } } j = j + fermentableData[U].domIndex; var H = []; H.push(fermentableData[U]); var V = (calculateOG(H, efficiency, batchsize, true) - 1) * 1000; if (V < 0) { V = 0 } if (V > 500) { jQuery("#" + j).html("-") } else { if (sugar_scale == "plato") { var w = (V / 1000) / (G - 1); var Q = w * convertGravityToPlato(G, 10); jQuery("#" + j).html(rounddecimal(Q, 1) + " °P") } else { jQuery("#" + j).html(rounddecimal(V, 2) + "") } } } } abv_standard = calculateABV(G, fg); abv_alternate = calculateABVAlternate(G, fg); if (abv_standard > 100) { abv_standard = 100 } if (abv_alternate > 100) { abv_alternate = 100 } jQuery(".abvBatch_standard").html(rounddecimal(abv_standard, 2) + "%"); if (abv_standard >= currentStyle.abvlow && abv_standard <= currentStyle.abvhigh) { jQuery(".abvBatch_standard").parent().addClass("statsMatchingIndicator"); jQuery(".abvBatch_standard").parent().removeClass("statsWarningIndicator") } else { jQuery(".abvBatch_standard").parent().addClass("statsWarningIndicator"); jQuery(".abvBatch_standard").parent().removeClass("statsMatchingIndicator") } jQuery(".abvBatch_alternate").html(rounddecimal(abv_alternate, 2) + "%"); if (abv_alternate >= currentStyle.abvlow && abv_alternate <= currentStyle.abvhigh) { jQuery(".abvBatch_alternate").parent().addClass("statsMatchingIndicator"); jQuery(".abvBatch_alternate").parent().removeClass("statsWarningIndicator") } else { jQuery(".abvBatch_alternate").parent().addClass("statsWarningIndicator"); jQuery(".abvBatch_alternate").parent().removeClass("statsMatchingIndicator") } var y = calculateSRMMorey(fermentableData, batchsize); var c = calculateSRMDaniels(fermentableData, batchsize); var u = calculateSRMMosher(fermentableData, batchsize); var Z = srmToECB(y); jQuery(".srmBatchMorey").html(rounddecimal(y, 2)); jQuery(".srmmorey").val(rounddecimal(y, 2)); jQuery("#srmmorey").val(rounddecimal(y, 2)); if (y >= currentStyle.srmlow && y <= currentStyle.srmhigh) { jQuery(".srmBatchMorey").parent().addClass("statsMatchingIndicator"); jQuery(".srmBatchMorey").parent().removeClass("statsWarningIndicator") } else { jQuery(".srmBatchMorey").parent().addClass("statsWarningIndicator"); jQuery(".srmBatchMorey").parent().removeClass("statsMatchingIndicator") } jQuery(".srmBatchDaniels").html(rounddecimal(c, 2)); jQuery(".srmdaniels").val(rounddecimal(c, 2)); jQuery("#srmdaniels").val(rounddecimal(c, 2)); if (c >= currentStyle.srmlow && c <= currentStyle.srmhigh) { jQuery(".srmBatchDaniels").parent().addClass("statsMatchingIndicator"); jQuery(".srmBatchDaniels").parent().removeClass("statsWarningIndicator") } else { jQuery(".srmBatchDaniels").parent().addClass("statsWarningIndicator"); jQuery(".srmBatchDaniels").parent().removeClass("statsMatchingIndicator") } jQuery(".srmBatchMosher").html(rounddecimal(u, 2)); jQuery(".srmmosher").val(rounddecimal(u, 2)); jQuery("#srmmosher").val(rounddecimal(u, 2)); if (u >= currentStyle.srmlow && u <= currentStyle.srmhigh) { jQuery(".srmBatchMosher").parent().addClass("statsMatchingIndicator"); jQuery(".srmBatchMosher").parent().removeClass("statsWarningIndicator") } else { jQuery(".srmBatchMosher").parent().addClass("statsWarningIndicator"); jQuery(".srmBatchMosher").parent().removeClass("statsMatchingIndicator") } jQuery(".ecbBatch").html(rounddecimal(Z, 2)); jQuery(".ecbmorey").val(rounddecimal(Z, 2)); jQuery("#srmecbmorey").val(rounddecimal(Z, 2)); if (Z >= srmToECB(currentStyle.srmlow) && Z <= srmToECB(currentStyle.srmhigh)) { jQuery(".ecbBatch").parent().addClass("statsMatchingIndicator"); jQuery(".ecbBatch").parent().removeClass("statsWarningIndicator") } else { jQuery(".ecbBatch").parent().addClass("statsWarningIndicator"); jQuery(".ecbBatch").parent().removeClass("statsMatchingIndicator") } } else { jQuery(".boilGravity").html("-"); jQuery(".ogBatch").html("-"); jQuery(".fgBatch").html("-"); jQuery(".abvBatch_standard").html("-"); jQuery(".abvBatch_alternate").html("-"); jQuery(".srmBatchMorey").html("-"); jQuery(".srmBatchDaniels").html("-"); jQuery(".srmBatchMosher").html("-"); jQuery(".ecbBatch").html("-"); jQuery(".totalGrainWeight").html("-"); jQuery("#og").val(0); jQuery("#fg").val(0); jQuery("#abv").val(0); jQuery("#srmmorey").val(0); jQuery("#srmdaniels").val(0); jQuery("#srmmosher").val(0); jQuery("#srmecbmorey").val(0); jQuery("#boilgravity").val(0); jQuery(".ogBatch").parent().removeClass("statsWarningIndicator"); jQuery(".ogBatch").parent().removeClass("statsMatchingIndicator"); jQuery(".abvBatch_standard").parent().removeClass("statsWarningIndicator"); jQuery(".abvBatch_standard").parent().removeClass("statsMatchingIndicator"); jQuery(".abvBatch_alternate").parent().removeClass("statsWarningIndicator"); jQuery(".abvBatch_alternate").parent().removeClass("statsMatchingIndicator"); jQuery(".srmBatchMorey").parent().removeClass("statsWarningIndicator"); jQuery(".srmBatchMorey").parent().removeClass("statsMatchingIndicator"); jQuery(".srmBatchDaniels").parent().removeClass("statsWarningIndicator"); jQuery(".srmBatchDaniels").parent().removeClass("statsMatchingIndicator"); jQuery(".srmBatchMosher").parent().removeClass("statsWarningIndicator"); jQuery(".srmBatchMosher").parent().removeClass("statsMatchingIndicator"); jQuery(".ecbBatch").parent().removeClass("statsWarningIndicator"); jQuery(".ecbBatch").parent().removeClass("statsMatchingIndicator") } if (y >= 40) { y = 40 } jQuery(".colorBatch").css("backgroundColor", srm[rounddecimal(y, 0)]); if (f == true && F == true) { hopsDataTinseth = IBUTinsethArray(hopsData, L, batchsize, noChillExtraMinutes); var A = getIBUTotal(hopsDataTinseth); hopsDataRager = IBURagerArray(hopsData, L, batchsize, noChillExtraMinutes); var h = getIBUTotal(hopsDataRager); if (A > 0) { jQuery(".ibuBatchTinseth").html(rounddecimal(A, 2)); jQuery("#ibutinseth").val(rounddecimal(A, 2)); if (A >= currentStyle.ibulow && A <= currentStyle.ibuhigh) { jQuery(".ibuBatchTinseth").parent().addClass("statsMatchingIndicator"); jQuery(".ibuBatchTinseth").parent().removeClass("statsWarningIndicator") } else { jQuery(".ibuBatchTinseth").parent().addClass("statsWarningIndicator"); jQuery(".ibuBatchTinseth").parent().removeClass("statsMatchingIndicator") } } else { jQuery(".ibuBatchTinseth").html("0"); jQuery("#ibutinseth").val(0); jQuery(".ibuBatchTinseth").parent().removeClass("statsWarningIndicator"); jQuery(".ibuBatchTinseth").parent().removeClass("statsMatchingIndicator") } if (h > 0) { jQuery(".ibuBatchRager").html(rounddecimal(h, 2)); jQuery("#iburager").val(rounddecimal(h, 2)); if (h >= currentStyle.ibulow && h <= currentStyle.ibuhigh) { jQuery(".ibuBatchRager").parent().addClass("statsMatchingIndicator"); jQuery(".ibuBatchRager").parent().removeClass("statsWarningIndicator") } else { jQuery(".ibuBatchRager").parent().addClass("statsWarningIndicator"); jQuery(".ibuBatchRager").parent().removeClass("statsMatchingIndicator") } } else { jQuery(".ibuBatchRager").html("0"); jQuery("#iburager").val(0); jQuery(".ibuBatchRager").parent().removeClass("statsWarningIndicator"); jQuery(".ibuBatchRager").parent().removeClass("statsMatchingIndicator") } var s = jQuery('input[type="radio"][name="ibu_equation"]:checked').val(); var C = hopsDataTinseth; if (s == "rager") { C = hopsDataRager } var U = 0; jQuery("#hops_brewpartitems").children().each(function () { var aa = getIndexOfBrewPart("hops", jQuery(this).attr("id")); if (C[U].ibu) { jQuery("#hopsInfoIBU" + aa).html(rounddecimal(C[U].ibu, 2)); jQuery("#hopsIBUValue" + aa).val(rounddecimal(C[U].ibu, 2)) } else { jQuery("#hopsInfoIBU" + aa).html("-"); jQuery("#hopsIBUValue" + aa).val("") } if (C[U].utilization) { jQuery("#hopsInfoUtil" + aa).html(rounddecimal(C[U].utilization, 3)) } else { jQuery("#hopsInfoUtil" + aa).html("-") } if (C[U].aau) { jQuery("#hopsInfoAAU" + aa).html(rounddecimal(C[U].aau, 1)) } else { jQuery("#hopsInfoAAU" + aa).html("-") } U++ }) } else { jQuery(".ibuBatchTinseth").html("-"); jQuery(".ibuBatchRager").html("-"); jQuery("#ibutinseth").val(0); jQuery("#iburager").val(0) } currentIBU = jQuery('input[type="radio"][name="ibu_equation"]:checked').parent().parent().find(".statsBatch").text(); currentSRM = jQuery('input[type="radio"][name="srm_equation"]:checked').parent().parent().find(".statsBatch").text(); currentABV = jQuery('input[type="radio"][name="abv_equation"]:checked').parent().parent().find(".statsBatch").text(); jQuery(".ibuMin").text(currentIBU); jQuery(".srmMin").text(currentSRM); jQuery(".abvMin").text(currentABV); jQuery("#abv").val(currentABV); currentABV = currentABV.replace("%", ""); jQuery(".buguRatio").html("-"); if (f == true && F == true && G > 0 && parseFloat(currentIBU) > 0) { var R = parseFloat(currentIBU) / ((G - 1) * 1000); jQuery(".buguRatio").html(rounddecimal(R, 2)) } var B = getTotalAmount(fermentableData); if (B > 0) { var X = B; var P = "lb"; if (units == "metric") { P = "kg"; X = poundsToKilograms(X) } jQuery("#totalGrainWeight").html(rounddecimal(X, 2) + " " + P); for (U = 0; U <= maxitems; U++) { var g = document.calc.elements["fermentableAmount" + U]; if (g && g.value > 0) { var r = getDropDownValue(document.calc, "fmt_units" + U); var E = convertAmountToPounds(g.value, r); jQuery("#fmtpercent" + U).html(rounddecimal((E / B) * 100, 1) + "%"); if (jQuery("#fmtpercent" + U).html() == "100.0%") { jQuery("#fmtpercent" + U).html("100%") } } else { jQuery("#fmtpercent" + U).html("%") } } for (U = 0; U <= maxitems; U++) { var g = document.calc.elements["custfermentableAmount" + U]; if (g && g.value > 0) { var t = parseFloat(document.calc.elements["custfermentableColor" + U].value); var n = parseFloat(document.calc.elements["custfermentablePPG" + U].value); var r = getDropDownValue(document.calc, "custfmt_units" + U); var E = convertAmountToPounds(g.value, r); if (t >= 0 && n > 0) { jQuery("#custfmtpercent" + U).html(rounddecimal((E / B) * 100, 1) + "%"); if (jQuery("#custfmtpercent" + U).html() == "100.0%") { jQuery("#custfmtpercent" + U).html("100%") } } else { jQuery("#custfmtpercent" + U).html("%") } } } for (U = 0; U <= maxitems; U++) { var g = document.calc.elements["steepingGrainAmount" + U]; if (g && g.value > 0) { var r = getDropDownValue(document.calc, "stp_units" + U); var E = convertAmountToPounds(g.value, r); jQuery("#steeppercent" + U).html(rounddecimal((E / B) * 100, 1) + "%"); if (jQuery("#steeppercent" + U).html() == "100.0%") { jQuery("#steeppercent" + U).html("100%") } } else { jQuery("#steeppercent" + U).html("%") } } } else { jQuery("#totalGrainWeight").html("-") } var N = false; var K = jQuery('input[type="radio"][name="srm_equation"]:checked').val(); var v = currentStyle.srmlow; var p = currentStyle.srmhigh; if (K == "ecbmorey") { v = srmToECB(v); p = srmToECB(p) } var m = parseFloat(rounddecimal(G, 3)); var D = currentStyle.oglow; var M = currentStyle.oghigh; if (sugar_scale == "plato") { m = convertGravityToPlato(G); D = convertGravityToPlato(D); M = convertGravityToPlato(M) } if (m >= D && m <= M && currentABV >= currentStyle.abvlow && currentABV <= currentStyle.abvhigh && ((currentIBU >= currentStyle.ibulow && currentIBU <= currentStyle.ibuhigh) || (currentIBU == "-" && currentStyle.ibulow == 0 && currentStyle.ibuhigh == 0)) && currentSRM >= v && currentSRM <= p) { N = true } else { N = false } if (matchesStyle != N) { if (N) { jQuery("#minmatchesstyle .value").css("color", "#226d01"); jQuery("#minmatchesstyle .value").html('yes') } else { jQuery("#minmatchesstyle .value").css("color", "#000"); jQuery("#minmatchesstyle .value").html('no') } matchesStyle = N } var a = calculateStyleMatches(m, currentABV, currentIBU, currentSRM, bjcp, sugar_scale); var e = getStyleNamesAsString(a); jQuery("#currentStyleMatch").html(e); var q = jQuery("#pitchrate").val(); var S = jQuery("#yeast_calc_link_url").html(); S += "?og=" + m; S += "&units=" + units; S += "&batchsize=" + rounddecimal(parseFloat(document.calc.txtbatchsize.value), 2); S += "&sugarscale=" + sugar_scale; S += "&pitchrate=" + q; S += "&yeasttype=" + yeastType; jQuery("#yeast_calc_link").attr("href", S); if (q && batchsize && m > 0) { var W = batchsize * 1000; if (units == "us") { W = gallonsToLiters(batchsize) * 1000 } var J = m; if (sugar_scale == "sg") { J = convertGravityToPlato(m, 10) } var Y = q * W * J; Y = Y / 1000; Y = rounddecimal(Y, 0); jQuery("#row_cells_required").show(); jQuery("#yeast_stats_cells_required").html(Y + " B") } else { jQuery("#row_cells_required").hide(); jQuery("#yeast_stats_cells_required").html("") } setupHopsAutocomplete(); current_state_saved = false } function doPost() { if (jQuery("#txtrecipename").val() == "") { jQuery("#txtrecipename").val("Awesome Recipe") } if (jQuery("#og").val() == "0") { showPostError("No fermentables have been filled out, please select at least one before saving."); saveButtonActive(true, {}); return } saveButtonActive(false, {}); var a = jQuery.ajax({ url: "/homebrew/save_recipe", type: "POST", data: jQuery("#calc").serialize(), timeout: 20000, success: function (c) { var b = jQuery.parseJSON(c); if (b.message == "success") { jQuery("#recipetoken").val(b.recipetoken); recipeViewUrl = b.recipeViewUrl; recipeId = b.recipeId; notification("Recipe Saved!", { color: "green" }); enableButtonsAfterSave(); current_state_saved = true; updateWaterCalcLink() } else { notification("Error: " + b.message, { color: "red" }) } setTimeout(function () { saveButtonActive(true, {}) }, 500) }, error: function (d, b, c) { showPostError(d.responseText); setTimeout(function () { saveButtonActive(true, {}) }, 500); notification("There was an error saving your recipe, please make sure you are connected to the internet and try again.", { color: "red" }) } }) } function saveButtonActive(c, a) { var d = "Saving Awesome Recipe..."; if (a.message) { d = a.message } var b = jQuery(".save"); b.unbind("click"); if (c) { b.text("Save"); if (b.hasClass("savestate")) { b.removeClass("savestate") } inactiveOverlay("#calc", d, false); b.click(doPost) } else { if (!b.hasClass("savestate")) { b.addClass("savestate") } inactiveOverlay("#calc", d, true); b.text("Working...") } } function showPostError(a) { alert("There was a problem saving the recipe:\n" + a) } function showClickError(a) { alert(a) } function convertUnitLabels(b) { var c = []; c["lb."] = "kg."; c["oz."] = "g."; c["qt."] = "L"; c.F = "C"; c["(gallons)"] = "(liters)"; c["qt/oz"] = "L/g"; var e = []; e["kg."] = "lb."; e["g."] = "oz."; e.L = "qt."; e.C = "F"; e["(liters)"] = "(gallons)"; e["L/g"] = "qt/oz"; var a; if (b == "us") { a = e } else { a = c } var d = document.getElementsByTagName("span"); for (i = 0; i < d.length; i++) { if (d[i].id.indexOf("unit") != -1) { if (d[i].innerHTML in a) { d[i].innerHTML = a[d[i].innerHTML] } } } } function setupUnits() { setVars(); convertUnitLabels(units); var a = document.calc.elements.txtboilsize; if (units == "us") { a.value = roundClosestFraction(litersToGallons(a.value), 10) } else { a.value = roundClosestFraction(gallonsToLiters(a.value), 10) } var a = document.calc.elements.txtbatchsize; if (units == "us") { a.value = roundClosestFraction(litersToGallons(a.value), 10) } else { a.value = roundClosestFraction(gallonsToLiters(a.value), 10) } var j = document.calc.elements.primary_temp; if (j && j.value != "") { if (units == "us") { j.value = roundClosestFraction(celsiusToFahrenheit(j.value), 1) } else { j.value = roundClosestFraction(fahrenheitToCelsius(j.value), 1) } } var d = 0; for (d = 0; d <= maxitems; d++) { setupFermentableUnitsDropdown(units, "#fermentableAmount" + d, "#fmt_units" + d); setupFermentableUnitsDropdown(units, "#custfermentableAmount" + d, "#custfmt_units" + d); setupFermentableUnitsDropdown(units, "#steepingGrainAmount" + d, "#stp_units" + d) } for (d = 0; d <= maxitems; d++) { var b = jQuery("#hops_units" + d).val(); var c = jQuery("#hopsAmount" + d).val(); if (c != "") { if (b == "g") { jQuery("#hopsAmount" + d).val(roundClosestFraction(gramsToOunces(c), 10)); jQuery("#hops_units" + d).val("oz") } if (b == "oz") { jQuery("#hopsAmount" + d).val(roundClosestFraction(ouncesToGrams(c), 2)); jQuery("#hops_units" + d).val("g") } } else { if (units != "metric") { jQuery("#hops_units" + d).val("oz") } else { jQuery("#hops_units" + d).val("g") } } } for (d = 0; d <= maxitems; d++) { var a = document.calc.elements["otherAmount" + d]; var h = document.calc.elements["otherUnit" + d]; if (a && a.value != "" && h) { var f = getDropDownValue(document.calc, "otherUnit" + d); if (units == "us") { if (f == "g") { a.value = roundClosestFraction(gramsToOunces(a.value), 10) } if (f == "kg") { a.value = roundClosestFraction(kilogramsToPounds(a.value), 20) } if (f == "L") { a.value = roundClosestFraction(litersToQuarts(a.value), 10) } if (f == "oz") { a.value = roundClosestFraction(ouncesToGrams(a.value), 2) } } else { if (f == "oz") { a.value = roundClosestFraction(ouncesToGrams(a.value), 2) } if (f == "lb") { a.value = roundClosestFraction(poundsToKilograms(a.value), 20) } if (f == "qt") { a.value = roundClosestFraction(quartsToLiters(a.value), 10) } if (f == "g") { a.value = roundClosestFraction(gramsToOunces(a.value), 10) } } } var g = 0; if (h) { var e = h.selectedIndex; setupOtherIngredientsUnitsDropDown(h, units); h.selectedIndex = e } } for (d = 0; d <= maxitems; d++) { setupMashUnitsDropDown(units, "#mashAmount" + d, "#mash_units" + d) } for (d = 0; d <= maxitems; d++) { var l = document.calc.elements["mashTemp" + d]; if (l && l.value != "") { if (units == "us") { l.value = roundClosestFraction(celsiusToFahrenheit(l.value), 1) } else { l.value = roundClosestFraction(fahrenheitToCelsius(l.value), 1) } } } for (d = 0; d <= maxitems; d++) { var l = document.calc.elements["hopStandTemp" + d]; if (l && l.value != "") { if (units == "us") { l.value = roundClosestFraction(celsiusToFahrenheit(l.value), 1) } else { l.value = roundClosestFraction(fahrenheitToCelsius(l.value), 1) } } } var k = document.calc.elements.mash_thickness; if (units == "us") { jQuery("#caloriesLabel").html("Calorie per 340,19gr"); jQuery(".mash_thickness_unit").html("qt/lb"); k.value = roundClosestFraction(mashThicknessLKgToQtLb(k.value), 10) } else { jQuery("#caloriesLabel").html("Calorie per 355mL"); jQuery(".mash_thickness_unit").html("L/kg"); k.value = roundClosestFraction(mashThicknessQtLbToLKg(k.value), 10) } if (k.value === "0") { k.value = "" } setVars(); updateAll() } function setupFermentableUnitsDropdown(e, d, c) { var b = jQuery(c).val(); var a = jQuery(d).val(); jQuery(c).empty(); if (e == "us") { jQuery(c).append(""); jQuery(c).append("") } else { jQuery(c).append(""); jQuery(c).append("") } if (a != "") { if (b == "kg") { jQuery(d).val(roundClosestFraction(kilogramsToPounds(a), 20)); jQuery(c).val("lb") } if (b == "g") { jQuery(d).val(roundClosestFraction(gramsToOunces(a), 10)); jQuery(c).val("oz") } if (b == "lb") { jQuery(d).val(roundClosestFraction(poundsToKilograms(a), 20)); jQuery(c).val("kg") } if (b == "oz") { jQuery(d).val(roundClosestFraction(ouncesToGrams(a), 1)); jQuery(c).val("g") } } } function switchAmountUnit(d, b) { var c = jQuery(d).val(); var a = jQuery(d).parent().parent().find("input:text"); var e = a.val(); if (e != "") { if (b == "hops") { if (c == "g") { a.val(roundClosestFraction(ouncesToGrams(e), 1)) } if (c == "oz") { a.val(roundClosestFraction(gramsToOunces(e), 10)) } } if (b == "fermentable") { if (c == "g") { a.val(roundClosestFraction(e * 1000, 1)) } if (c == "kg") { a.val(roundClosestFraction(e / 1000, 100)) } if (c == "oz") { a.val(roundClosestFraction(e * 16, 5)) } if (c == "lb") { a.val(roundClosestFraction(e / 16, 16)) } } if (b == "mash") { if (c == "qt") { a.val(roundClosestFraction(gallonsToQuarts(e), 10)) } if (c == "gal") { a.val(roundClosestFraction(quartsToGallons(e), 10)) } } } updateAll() } function getOtherIngredientsUnitsArray(a) { var b = []; if (a == "us") { b[0] = "oz"; b[1] = "lb"; b[2] = "qt"; b[3] = "tsp"; b[4] = "tbsp"; b[5] = "each"; b[6] = "g"; b[7] = "ml" } else { b[0] = "g"; b[1] = "kg"; b[2] = "L"; //b[3] = "tsp"; //b[4] = "tbsp"; //b[5] = "each"; //b[6] = "oz"; b[3] = "ml" } return b } function setupOtherIngredientsUnitsDropDown(c, a) { otherUnitsArray = getOtherIngredientsUnitsArray(a); c.options.length = 0; for (z = 0; z < otherUnitsArray.length; z++) { var b = document.createElement("option"); b.value = otherUnitsArray[z]; b.innerHTML = otherUnitsArray[z]; c.appendChild(b) } } function setupMashUnitsDropDown(e, d, c) { var b = jQuery(c).val(); var a = jQuery(d).val(); jQuery(c).empty(); if (e == "us") { jQuery(c).append(""); jQuery(c).append(""); jQuery(c).val(defaultMashUnit) } else { jQuery(c).append("") } if (a != "") { if (b == "L" && defaultMashUnit == "qt") { jQuery(d).val(roundClosestFraction(litersToQuarts(a), 10)); jQuery(c).val("qt") } if (b == "L" && defaultMashUnit == "gal") { jQuery(d).val(roundClosestFraction(litersToGallons(a), 10)); jQuery(c).val("gal") } if (b == "qt") { jQuery(d).val(roundClosestFraction(quartsToLiters(a), 10)); jQuery(c).val("L") } if (b == "gal") { jQuery(d).val(roundClosestFraction(gallonsToLiters(a), 20)); jQuery(c).val("L") } } } function setupDataItemMoreBar(b, a) { if (!(jQuery(b).find(".morebar") === false)) { var c = jQuery(b).find(".morebar").get(0); jQuery(c).click(function () { if (jQuery(c).val() === "â–²") { jQuery(b).css("height", a); jQuery(c).val(jQuery("
").text("â–¼").html()); jQuery(b).find(".moreItems input").attr("disabled", true) } else { jQuery(b).css("height", "auto"); jQuery(c).val("â–²"); jQuery(b).find(".moreItems input").removeAttr("disabled") } }) } } function openAllMores(a) { jQuery("#" + a).find(".dataitem").each(function (b, c) { var d = jQuery(c).find(".morebar").get(0); jQuery(c).css("height", "auto"); jQuery(d).val("â–²"); jQuery(c).find(".moreItems input").removeAttr("disabled") }) } function closeAllMores(a) { jQuery("#" + a).find(".dataitem").each(function (b, c) { var d = jQuery(c).find(".morebar").get(0); jQuery(c).css("height", 28); jQuery(d).val(jQuery("
").text("â–¼").html()); jQuery(c).find(".moreItems input").attr("disabled", true) }) } function setupDataItemOnOffButton(b) { if (!(jQuery(b).find(".onoffbutton") === false)) { var a = jQuery(b).find(".onoffbutton input").get(0); jQuery(a).change(function () { if (jQuery(a).prop("checked")) { jQuery(a).parent().addClass("on"); jQuery(a).parent().removeClass("off") } else { jQuery(a).parent().addClass("off"); jQuery(a).parent().removeClass("on") } }) } } function doScaling() { var c = 1; var b = jQuery("#newbatchsize").val(); var a = jQuery("#newefficiency").val(); if (b != "" && a != "") { alert("Our apologies, but only one scaling method may be used at a time. Please clear one of the inputs and try again."); return false } if (b == "" && a == "") { alert("Our apologies, but no scaling data was provided. Please input a value and try again."); return false } if (b != "") { if (!isNumber(b)) { alert("New batch size must be a positive number."); return false } if (b <= 0.75) { alert("New batch size should be greater than 0.75"); return false } } if (a != "") { if (!isNumber(a)) { alert("New efficiency must be a positive number."); return false } if (a < 1 || a > 100) { alert("New efficiency should be between 1 and 100."); return false } } enableUpdateAll = false; if (b != "") { scaleBatch(b) } if (a != "") { scaleEfficiency(a) } enableUpdateAll = true; updateAll(); jQuery("#scaledialog").dialog("close") } function scaleBatch(a) { batchsize = document.calc.txtbatchsize.value; boilsize = document.calc.txtboilsize.value; a = parseFloat(a); var b = boilsize - batchsize; scaling_percentage = a / batchsize; batchsize = a; jQuery("#txtbatchsize").val(batchsize); boilsize = parseFloat(batchsize) + parseFloat(b); jQuery("#txtboilsize").val(boilsize); if (boilsize < 1) { alert("Boil size has been adjusted to match the batch size since it was so low. Please check this and adjust manually."); boilsize = batchsize; jQuery("#txtboilsize").val(boilsize) } applyScalingToGroup("fermentableAmount", scaling_percentage, 2); applyScalingToGroup("custfermentableAmount", scaling_percentage, 2); applyScalingToGroup("steepingGrainAmount", scaling_percentage, 2); applyScalingToGroup("hopsAmount", scaling_percentage, 2); applyScalingToGroup("otherAmount", scaling_percentage, 2); applyScalingToGroup("mashAmount", scaling_percentage, 1) } function scaleEfficiency(h) { var j = 15; efficiency = document.calc.txtefficiency.value; sugar_scale = jQuery('input[type="radio"][name="sugar_scale"]:checked').val(); h = parseFloat(h); scaling_percentage = efficiency / h; efficiency = h; jQuery("#txtefficiency").val(h); var c = parseFloat(jQuery("#og").val()); applyScalingToGroupMashableOnly("fermentableAmount", "fermentableType", j, scaling_percentage, 2); applyScalingToGroupMashableOnly("steepingGrainAmount", "steepingGrainType", j, scaling_percentage, 2); applyScalingToGroupCustom("custfermentableAmount", "custfermentableColor", "custfermentableMashed", j, scaling_percentage, 2); enableUpdateAll = true; updateAll(); var f = parseFloat(jQuery("#og").val()); if (sugar_scale == "plato") { c = rounddecimal(c, 1); f = rounddecimal(f, 1) } if (f != c) { var k = getLargestFermentableForAdjustment(j); var d = getLargestCustomFermentableForAdjustment(j); var b = null; if (d == null && k != null) { b = k } if (k == null && d != null) { b = d } if (k != null && d != null) { if (parseFloat(k.value) > parseFloat(d.value)) { b = k } else { b = d } } if (b != null) { var a = 0.1; if (f > c) { a = -0.1 } if (sugar_scale == "plato") { a = 0.02; if (f > c) { a = -0.02 } } var g = 0; for (g = 0; g <= 50; g++) { b.value = rounddecimal(parseFloat(b.value) + a, 2); updateAll(); var e = parseFloat(jQuery("#og").val()); if (sugar_scale == "plato") { e = rounddecimal(e, 1) } if (a > 0) { if (c <= e) { break } } else { if (c >= e) { break } } } if (g == 51) { alert("Notice: This scaling operation caused a change in the Original Gravity the calculator could not compensate for. Please adjust amounts of fermentables manually to return the OG to " + c.toString() + ".") } } else { alert("Notice: This scaling operation caused a change in the Original Gravity the calculator could not compensate for. A mashable malt with lovibond below " + j + " was not found. Please adjust amounts of fermentables manually to return the OG to " + c.toString() + ". This was done to avoid throwing off the flavor / color balance from the dark malts in this recipe.") } } } function applyScalingToGroup(b, e, f) { var d = 0; for (d = 0; d <= maxitems; d++) { var a = document.calc.elements[b + d]; if (a) { var c = parseFloat(document.calc.elements[b + d].value); if (c > 0) { document.calc.elements[b + d].value = rounddecimal(c * e, f) } } } } function applyScalingToGroupMashableOnly(f, j, b, h, c) { var d = 0; for (d = 0; d <= maxitems; d++) { var k = document.calc.elements[f + d]; if (k) { var e = parseFloat(document.calc.elements[f + d].value); if (e > 0) { var a = getDropDownValue(document.calc, j + d); if (a != "") { var g = getIngredientByID(a); if (g.mashable && g.lovibond <= b) { document.calc.elements[f + d].value = rounddecimal(e * h, c) } } } } } } function applyScalingToGroupCustom(g, a, h, c, j, d) { var e = 0; for (e = 0; e <= maxitems; e++) { var l = document.calc.elements[g + e]; if (l) { var f = parseFloat(document.calc.elements[g + e].value); var k = parseFloat(document.calc.elements[a + e].value); var b = false; if (document.calc.elements[h + e] && document.calc.elements[h + e].checked) { b = true } if (f > 0 && b && k <= c) { document.calc.elements[g + e].value = rounddecimal(f * j, d) } } } } function getLargestFermentableForAdjustment(c) { var a = null; var h = null; var g = 0; var d = 0; for (d = 0; d <= maxitems; d++) { var j = document.calc.elements["fermentableAmount" + d]; if (j) { var e = parseFloat(document.calc.elements["fermentableAmount" + d].value); if (e > 0) { var b = getDropDownValue(document.calc, "fermentableType" + d); if (b != "") { var f = getIngredientByID(b); if (f.mashable && f.lovibond <= c && e > g) { g = e; h = d } } } } } if (h != null) { a = document.calc.elements["fermentableAmount" + h] } return a } function getLargestCustomFermentableForAdjustment(c) { var a = null; var h = null; var g = 0; var e = 0; for (e = 0; e <= maxitems; e++) { var k = document.calc.elements["custfermentableAmount" + e]; if (k) { var f = parseFloat(document.calc.elements["custfermentableAmount" + e].value); if (f > 0) { var b = document.calc.elements["custfermentableType" + e].value; var d = parseFloat(document.calc.elements["custfermentableColor" + e].value); var j = parseFloat(document.calc.elements["custfermentablePPG" + e].value); if (b != "" && j > 0 && d <= c && f > g) { g = f; h = e } } } } if (h != null) { a = document.calc.elements["custfermentableAmount" + h] } return a } function upateSharingCheckboxes() { if (!jQuery("#sharePublic").is(":checked")) { jQuery("#shareSearchable").attr("checked", false); jQuery("#shareSearchable").attr("disabled", true); jQuery("#shareSearchableLabel").css("color", "#aaa") } else { jQuery("#shareSearchable").attr("checked", "checked"); jQuery("#shareSearchable").attr("disabled", false); jQuery("#shareSearchableLabel").css("color", "#000") } } var bShareButtonInUse = false; function doSharingSettings() { if (bShareButtonInUse) { return } if (recipeId <= 0) { alert("Recipe must be saved before being shared."); return } bShareButtonInUse = true; jQuery("#sharenotification").removeClass("redbackground"); jQuery("#sharenotification").removeClass("greenbackground"); jQuery("#sharenotification").html("Saving..."); jQuery("body").css("cursor", "progress"); var a = jQuery.ajax({ url: "/homebrew/share_recipe", type: "POST", data: { token: jQuery("#recipetoken").val(), "public": jQuery("#sharePublic").is(":checked"), searchable: jQuery("#shareSearchable").is(":checked") }, timeout: 20000, success: function (c) { var b = jQuery.parseJSON(c); if (b.message == "success") { jQuery("#sharenotification").removeClass("redbackground"); jQuery("#sharenotification").addClass("greenbackground"); jQuery("#sharenotification").html("Recipe sharing settings updated successfully!"); if (jQuery("#sharePublic").is(":checked")) { jQuery("#publicurl").val(b.recipeViewUrl); jQuery("#publicurl").show("300") } else { jQuery("#publicurl").val(""); jQuery("#publicurl").hide() } } else { jQuery("#sharenotification").removeClass("greenbackground"); jQuery("#sharenotification").addClass("redbackground"); jQuery("#sharenotification").html("Error: " + b.message) } bShareButtonInUse = false; jQuery("body").css("cursor", "auto") }, error: function (d, b, c) { bShareButtonInUse = false; jQuery("body").css("cursor", "auto"); jQuery("#sharenotification").removeClass("greenbackground"); jQuery("#sharenotification").addClass("redbackground"); jQuery("#sharenotification").html("There was an error, please make sure you are connected to the internet and try again.") } }) }; jQuery("#misceleColori input").blur(function(){ var coloreA=assegnaNumero(jQuery("#coloreA").val()); var coloreB=assegnaNumero(jQuery("#coloreB").val()); var coloreTarget=assegnaNumero(jQuery("#coloreTarget").val()); var percColoreB=0; var percColoreA=0; var risultatoB=0; var risultatoA=0; var grado=assegnaNumero(jQuery("#grado").val()); var gradoPerc=(grado/100)+1; var ac=0; var bc=0; var de=0; if (jQuery("#coloreA").val()!="" && jQuery("#coloreB").val()!="" && jQuery("#coloreTarget").val()!=""){ ac=coloreB-coloreTarget; bc=Math.abs(coloreA-coloreTarget); de=ac+bc; //console.log('ac:'+ac+'\nbc:'+bc+'\nde:'+de); percColoreB=(ac/de).toFixed(5); percColoreA=(bc/de).toFixed(5); jQuery("#percColoreB").text(percColoreB); jQuery("#percColoreA").text(percColoreA); if (jQuery("#grado").val()!=""){ risultatoB=(percColoreB*gradoPerc).toFixed(6); risultatoA=(1-risultatoB).toFixed(6); jQuery("#risultatoB").text(risultatoB); jQuery("#risultatoA").text(risultatoA); } } }); function assegnaNumero(valore){ if (jQuery.isNumeric(valore)) { return valore/1; } else { return 0; } }