function calculate(obj) {
   // var w = (obj.wu[1].checked) ? obj.wt.value : obj.wt.value / 2.2
   var w = (obj.wu[1].checked) ? obj.wt.value : obj.wt.value / 22 * 10
   // var h = (obj.hu[1].checked) ? obj.ht.value : obj.ht.value * .0254
   var h = (obj.hu[1].checked) ? obj.ht.value : obj.ht.value * 254 / 10000

   obj.bmi.value = Math.round(w / h / h * 10) / 10
   obj.status.value = assess(obj.bmi.value)

   var a = obj.ag.value
   var g = (obj.gn[0].checked) ? 0 : (obj.gn[1].checked) ? 1 : -1

   if (a == "") {
      obj.bmiac.value = ""
      obj.statusac.value = ""
   } else {
      if (a < 19) {
         obj.bmiac.value = "(none)"
         obj.statusac.value = ""
      } else {
         // max out at 75
         if (a > 75) a = 75
         // adjustment = 1 for every 10 years from 30
         obj.bmiac.value = Math.round((obj.bmi.value - (a - 30) / 10) * 10) / 10
         obj.statusac.value = assess(obj.bmiac.value)
      }
   }

   if ((a == "") || (g == -1)) {
      obj.per.value = ""
   } else if ((0 < a) && (a < 20) && (-1 < g)) {
      obj.per.value = Math.round(percentile(g, a, obj.bmi.value))
   } else {
      obj.per.value = "(none)"
   }
}

// return string interpretation for number index
function assess(ind) {

   if        (ind < 20) {
      return "underweight"
   } else if (ind < 25) {
      return "healthy weight"
   } else if (ind < 30) {
      return "overweight"
   } else if (ind < 40) {
      return "severely overweight / obese"
   } else {
      return "severely obese"
   }
}

//m = 0, f = 1

pct = new Array(2)
for (i = 0; i < 2; i++) {
   pct[i] = new Array(19)
}

pct[0][ 0] = new Array(14.6,	19.9,	17.2,	4.5974644,	-128.5099,	900.63047,	0,	-2.01467,	91.603202,	-929.6572,	0,	0,	0)
pct[0][ 1] = new Array(14.4,	19,	16.5,	8.0084129,	-225.8683,	1596.6707,	0,	-3.840346,	154.60113,	-1455.577,	0,	0,	0)
pct[0][ 2] = new Array(14,	18.4,	16,	10.144836,	-281.8513,	1962.5378,	0,	-4.862358,	186.22083,	-1684.927,	0,	0,	0)
pct[0][ 3] = new Array(13.8,	18.1,	15.8,	8.4018375,	-225.8422,	1521.1476,	0,	-7.345051,	268.36966,	-2356.446,	0,	0,	0)
pct[0][ 4] = new Array(13.7,	18,	15.5,	12.899116,	-351.9558,	2406.0664,	0,	-7.016402,	252.73142,	-2181.287,	0,	0,	0)
pct[0][ 5] = new Array(13.6,	18.1,	15.4,	9.5231433,	-251.2705,	1661.0014,	0,	-5.6235,	204.77956,	-1769.631,	0,	0,	0)
pct[0][ 6] = new Array(13.6,	18.9,	15.5,	7.0078568,	-180.1728,	1159.0779,	16.5,	-5.681818,	206.81818,	-1790.625,	-3.472222,	131.25,	-1145.313)
pct[0][ 7] = new Array(13.7,	19.7,	15.7,	7.0665829,	-185.3957,	1218.7955,	0,	-2.849003,	112.04624,	-1006.758,	0,	0,	0)
pct[0][ 8] = new Array(14,	20.9,	16,	4.666799,	-117.6612,	737.82339,	0,	-1.893939,	79.031345,	-729.5582,	0,	0,	0)
pct[0][ 9] = new Array(14.2,	22.2,	16.6,	3.0675692,	-75.72176,	461.6862,	0,	-1.498702,	66.155292,	-635.1081,	0,	0,	0)
pct[0][10] = new Array(14.6,	23.5,	17.2,	2.4852546,	-61.77326,	377.23969,	19.2,	-1.30662,	60.060976,	-596.4983,	-1.132588,	53.012685,	-525.3262)
pct[0][11] = new Array(15.1,	24.8,	17.8,	1.8298339,	-43.53786,	245.20803,	20,	-1.075977,	52.035573,	-535.3206,	-0.942029,	46.369565,	-475.5797)
pct[0][12] = new Array(15.6,	25.8,	18.4,	2.0573725,	-53.97538,	346.55949,	0,	-0.849432,	43.608961,	-464.7563,	0,	0,	0)
pct[0][13] = new Array(16.1,	26.8,	19.1,	1.8117346,	-48.73513,	319.92319,	0,	-0.786164,	41.845615,	-462.1297,	0,	0,	0)
pct[0][14] = new Array(16.6,	27.7,	19.7,	2.5054069,	-76.59692,	586.52726,	22.2,	-0.932018,	49.051535,	-554.6086,	-0.457016,	26.441453,	-286.7646)
pct[0][15] = new Array(17.2,	28.4,	20.5,	2.178566,	-68.54933,	539.67771,	22.9,	-1.023065,	54.817708,	-643.8198,	-0.457016,	27.081275,	-305.4975)
pct[0][16] = new Array(17.7,	29,	21.2,	1.932012,	-62.26754,	501.77516,	23.4,	-1.240857,	66.705852,	-806.4734,	-0.297619,	19.166667,	-210.5357)
pct[0][17] = new Array(18.3,	29.7,	21.9,	1.7205506,	-56.51408,	462.60923,	24,	-1.35357,	74.03364,	-922.1508,	-0.272641,	18.149597,	-203.5491)
pct[0][18] = new Array(19,	30.1,	22.5,	2.3074556,	-82.98123,	748.85294,	24.4,	-1.605473,	88.454558,	-1127.457,	-0.187434,	13.723947,	-148.2734)

pct[1][ 0] = new Array(14.7,	19.3,	16.6,	6.5745111,	-182.3837,	1265.7856,	0,	-4.852769,	190.85499,	-1780.938,	0,	0,	0)
pct[1][ 1] = new Array(14.3,	18.7,	16,	9.6601537,	-266.0637,	1834.1067,	0,	-4.102342,	159.18945,	-1446.988,	0,	0,	0)
pct[1][ 2] = new Array(13.9,	18.3,	15.6,	10.929732,	-295.4886,	2000.0595,	0,	-4.102342,	155.90758,	-1383.969,	0,	0,	0)
pct[1][ 3] = new Array(13.6,	18.2,	15.4,	10.400031,	-276.3876,	1840.0429,	0,	-4.02173,	151.26489,	-1325.746,	0,	0,	0)
pct[1][ 4] = new Array(13.5,	18.3,	15.3,	10.400031,	-274.3076,	1812.5082,	0,	-4.588485,	168.95286,	-1460.582,	0,	0,	0)
pct[1][ 5] = new Array(13.3,	18.8,	15.3,	10.144836,	-267.6486,	1770.2128,	0,	-3.787879,	141.86394,	-1233.534,	0,	0,	0)
pct[1][ 6] = new Array(13.4,	19.7,	15.5,	8.0084129,	-209.8514,	1378.8109,	16.7,	-4.166667,	155,	-1351.458,	-1.388889,	57.222222,	-493.2639)
pct[1][ 7] = new Array(13.6,	21,	16,	4.8623579,	-124.9701,	804.91472,	17.2,	-4.122103,	157.68717,	-1417.736,	-0.97189,	42.389354,	-366.573)
pct[1][ 8] = new Array(14,	22.7,	16.6,	3.5880286,	-92.50822,	596.90511,	18,	-2.97619,	120.83333,	-1135.714,	-0.579907,	27.857543,	-238.5458)
pct[1][ 9] = new Array(14.3,	24.2,	17.1,	3.3517478,	-88.94666,	591.09876,	19,	-1.659734,	73.074308,	-714.2477,	-0.629579,	31.043956,	-287.5572)
pct[1][10] = new Array(14.6,	25.7,	17.8,	1.3605238,	-29.68961,	147.63683,	19.8,	-1.502404,	68.990385,	-702.0072,	-0.480618,	25.257965,	-236.6861)
pct[1][11] = new Array(15,	26.8,	18.3,	1.2853726,	-29.01195,	150.55772,	20.4,	-1.362835,	64.646465,	-676.6306,	-0.458211,	24.752566,	-239.2632)
pct[1][12] = new Array(15.4,	27.9,	18.9,	0.721787,	-11.71291,	13.651678,	21.2,	-1.135147,	56.388948,	-610.2654,	-0.40645,	22.941764,	-228.6906)
pct[1][13] = new Array(15.7,	28.6,	19.4,	0.7268851,	-13.11623,	31.041935,	21.8,	-1.039144,	53.229419,	-591.5583,	-0.407436,	23.475936,	-243.1457)
pct[1][14] = new Array(16.1,	29.4,	19.9,	0.8137127,	-17.27052,	71.571639,	22.4,	-0.956284,	50.45082,	-575.2732,	-0.385154,	22.808123,	-242.6471)
pct[1][15] = new Array(16.4,	30,	20.2,	1.0986916,	-28.25778,	172.58255,	22.8,	-0.882751,	47.573673,	-550.7905,	-0.36465,	22.031317,	-237.7542)
pct[1][16] = new Array(16.9,	30.5,	20.7,	1.0986916,	-29.35647,	186.98611,	23.3,	-0.885628,	48.582996,	-576.1855,	-0.343997,	21.28483,	-234.1839)
pct[1][17] = new Array(17.2,	31,	21.1,	1.4948127,	-45.64661,	347.70261,	23.7,	-0.882751,	49.162624,	-594.3218,	-0.365091,	22.71021,	-258.164)
pct[1][18] = new Array(17.5,	31.3,	21.4,	1.835396,	-59.80232,	489.29761,	24,	-0.882751,	49.692275,	-609.1501,	-0.365091,	22.929265,	-265.0099)

function percentile(g, a, b) {

   var p = pct[g][a - 1]

   if        (b < p[0]) {
      return "<  5th"
   } else if (b > p[1]) {
      return "> 95th"
   } else if (b < p[2]) {
      return (p[ 3] * b * b) + (p[ 4] * b) + p[ 5]
   } else if ((p[6] == 0) || (b < p[6])) {
      return (p[ 7] * b * b) + (p[ 8] * b) + p[ 9]
   } else {
      return (p[10] * b * b) + (p[11] * b) + p[12]
   }
}

function reverse(obj) {

   var h = (obj.hu[1].checked) ? obj.ht.value : obj.ht.value * 254 / 10000
   var b =  obj.tbmi.value

   var w = b * h * h
   w  = (obj.wu[1].checked) ? Math.round(w * 10) / 10 : Math.round(w * 22) / 10
   // w += (obj.wu[1].checked) ? " kg" : " lb"
   if (obj.wu[1].checked) {

      obj.w2[1].checked = true
   } else {
      obj.w2[0].checked = true
   }
   obj.tweight.value = w

}
