////////////////////////////////////////////////////////////////////////////
// BMIcalc v1.50 / JS_bmi.0  -- Do some fancy calculations regarding the BMI
// Copyright (C) by XenoAntares, IX 2003 - I 2007. All rights reserved.
// License granted to "Die Nebenwelt" [2005-06-05, 2006-06-13, 2007-01-18], XA.
////////////////////////////////////////////////////////////////////////////

var cRanges = new Array(
//     sub        norm      sup       adi       xadi
[ [0, 19], [19, 24], [24, 30], [30, 40], [40, 99] ],   // female
[ [0, 20], [20, 25], [25, 30], [30, 40], [40, 99] ]    // male
);

var cRangesPI = new Array(
//     sub        norm      sup       adi       xadi
[ [0, 11], [11, 14], [14, 30], [30, 40], [40, 99] ],   // female
[ [0, 11], [11, 14], [14, 30], [30, 40], [40, 99] ]    // male
);

var compMode;
if (document.getElementById) {
   compMode = "DOM"; // fu*king IE doesn't cope with namedItem - &$%#!
   var sex     = document.getElementById("xaBMI").elements.sex; //namedItem("sex");
   var age     = document.getElementById("xaBMI").elements.age; //namedItem("age");
   var size    = document.getElementById("xaBMI").elements.size; //namedItem("size");
   var weight  = document.getElementById("xaBMI").elements.weight; //namedItem("weight");
   var bmi     = document.getElementById("xaBMI").elements.BMI; //namedItem("BMI");
   var bmiW    = document.getElementById("xaBMI").elements.BMIW; //namedItem("BMIW");
   var weightW = document.getElementById("xaBMI").elements.weightW; //namedItem("weightW");
   var range   = document.getElementById("xaBMI").elements.normRange; //namedItem("normRange");
   var rangeW  = document.getElementById("xaBMI").elements.normRangeW; //namedItem("normRangeW");

   var weightPI  = document.getElementById("xaBMI").elements.weightPI; //namedItem("weightPI");
   var pi        = document.getElementById("xaBMI").elements.PI; //namedItem("PI");
   var piW       = document.getElementById("xaBMI").elements.PIW; //namedItem("PIW");
   var weightPIW = document.getElementById("xaBMI").elements.weightPIW; //namedItem("weightPIW");
   var rangePI   = document.getElementById("xaBMI").elements.normRangePI; //namedItem("normRangePI");
   var rangePIW  = document.getElementById("xaBMI").elements.normRangePIW; //namedItem("normRangePIW");
} else
if (eval(document.all)) {
   compMode = "IE";
   var sex     = document.all.xaBMI.sex;
   var age     = document.all.xaBMI.age;
   var size    = document.all.xaBMI.size;
   var weight  = document.all.xaBMI.weight;
   var bmi     = document.all.xaBMI.BMI;
   var bmiW    = document.all.xaBMI.BMIW;
   var weightW = document.all.xaBMI.weightW;
   var range   = document.all.xaBMI.normRange;
   var rangeW  = document.all.xaBMI.normRangeW;

   var weightPI  = document.all.xaBMI.weightPI;
   var pi        = document.all.xaBMI.PI;
   var piW       = document.all.xaBMI.PIW;
   var weightPIW = document.all.xaBMI.weightPIW;
   var rangePI   = document.all.xaBMI.normRangePI;
   var rangePIW  = document.all.xaBMI.normRangePIW;
} else {
   compMode = "NS";
   var sex     = document.forms["xaBMI"].sex;
   var age     = document.forms["xaBMI"].age;
   var size    = document.forms["xaBMI"].size;
   var weight  = document.forms["xaBMI"].weight;
   var bmi     = document.forms["xaBMI"].BMI;
   var bmiW    = document.forms["xaBMI"].BMIW;
   var weightW = document.forms["xaBMI"].weightW;
   var range   = document.forms["xaBMI"].normRange;
   var rangeW  = document.forms["xaBMI"].normRangeW;

   var weightPI  = document.forms["xaBMI"].weightPI;
   var pi        = document.forms["xaBMI"].PI;
   var piW       = document.forms["xaBMI"].PIW;
   var weightPIW = document.forms["xaBMI"].weightPIW;
   var rangePI   = document.forms["xaBMI"].normRangePI;
   var rangePIW  = document.forms["xaBMI"].normRangePIW;
}

function ageOffset(age)
{
   if (age < 19)  return 0;
   if (age < 25)  return 0;
   if (age < 35)  return 1;
   if (age < 45)  return 2;
   if (age < 55)  return 3;
   if (age < 65)  return 4;
   return 5;
}

function checkValuesBMI()
{
   var w = weight.value;
   if ((w < 15) || (w > 220))  w = weightPI.value;
   if ((w < 15) || (w > 220))
      weight.value = weightPI.value = 55;
   else
   	  weight.value = w;
   if ((bmiW.value < 10) || (bmiW.value > 55))  bmiW.value = 20;
   if ((bmi.value < 10) || (bmi.value > 55))  bmi.value = "n/a";
   if ((weightW.value < 15) || (weightW.value > 220))  weightW.value = "n/a";
}

function checkValuesPI()
{
   var w = weightPI.value;
   if ((w < 15) || (w > 220))  w = weight.value;
   if ((w < 15) || (w > 220))
      weightPI.value = weight.value = 55;
   else
   	  weightPI.value = w;
   if ((piW.value < 4) || (piW.value > 30))  piW.value = 12;
   if ((pi.value < 4) || (pi.value > 30))  pi.value = "n/a";
   if ((weightPIW.value < 15) || (weightPIW.value > 220))  weightPIW.value = "n/a";
}

function checkValues()
{
   if ((age.value <= 10) || (age.value > 120))  age.value = 19;
   if ((size.value < 35) || (size.value > 300)) {
      if ((size.value < 0.35) || (size.value > 3))  size.value = 180;
      else size.value *= 100;
   }
}

function adjustNormRangesBMI()
{
   if (age.value < 19) {
      range.value = "gilt ab 19!";
      rangeW.value = "gilt ab 19!";
   }
   else {
      var s = (sex[0].checked)? 0: (sex[1].checked)? 1: 0;
      range.value = ((cRanges[s][1][0])+ageOffset(age.value)) + " bis "
                  + ((cRanges[s][1][1])+ageOffset(age.value));
      rangeW.value = Math.round(calcWeight(((cRanges[s][1][0])+ageOffset(age.value)), size.value)*10)/10 + " bis "
                   + Math.round(calcWeight(((cRanges[s][1][1])+ageOffset(age.value)), size.value)*10)/10;
   }
   return true;
}

function adjustNormRangesPI()
{
   //rangePI.value = "(tba)";
   //rangePIW.value = "(tba)";
   //return true;
   
   if (age.value < 19) {
      rangePI.value = "gilt ab 19!";
      rangePIW.value = "gilt ab 19!";
   }
   else {
      var s = (sex[0].checked)? 0: (sex[1].checked)? 1: 0;
      rangePI.value = (cRangesPI[s][1][0]) + " bis "
                    + (cRangesPI[s][1][1]);
      rangePIW.value = Math.round(calcWeightPI(cRangesPI[s][1][0], size.value)*10)/10 + " bis "
                     + Math.round(calcWeightPI(cRangesPI[s][1][1], size.value)*10)/10;
   }
   return true;
}

function adjustNormRanges()
{
   return adjustNormRangesBMI()| adjustNormRangesPI();
}

function actCalcBMI()
{
   checkValues();
   checkValuesBMI();
   checkValuesPI();
   weightPI.value = weight.value;
   bmi.value = calcBMI(weight.value, size.value);
   pi.value  = calcPI(weight.value, size.value);
   adjustNormRanges();
   return true;
}

function actCalcPI()
{
   checkValues();
   checkValuesPI();
   checkValuesBMI();
   weight.value = weightPI.value;
   pi.value  = calcPI(weight.value, size.value);
   bmi.value = calcBMI(weight.value, size.value);
   adjustNormRanges();
   return true;
}

function actCalcWeight()
{
   checkValues();
   checkValuesBMI();
   checkValuesPI();
   piW.value = Math.round((bmiW.value / size.value * ((size.value > 3)? 100: 1)) * 10) / 10;
   weightW.value   = calcWeight(bmiW.value, size.value);
   weightPIW.value = calcWeightPI(piW.value, size.value);
   adjustNormRanges();
   return true;
}

function actCalcWeightPI()
{
   checkValues();
   checkValuesPI();
   checkValuesBMI();
   bmiW.value = Math.round((piW.value * size.value / ((size.value > 3)? 100: 1)) * 10) / 10;
   weightPIW.value = calcWeightPI(piW.value, size.value);
   weightW.value   = calcWeight(bmiW.value, size.value);
   adjustNormRanges();
   return true;
}

function calcBMI (w, s)
{
   if (s == 0) return 0;
   var t = (s >= 3)? s / 100: s;
   return Math.round((w / t / t) * 10) / 10;
}

function calcPI (w, s)
{
   if (s == 0) return 0;
   var t = (s >= 3)? s / 100: s;
   return Math.round((w / t / t / t) * 10) / 10;
}

function calcWeight (b, s)
{
   var t = (s >= 3)? s / 100: s;
   return Math.round((b * t * t) * 100) / 100;
}

function calcWeightPI (p, s)
{
   var t = (s >= 3)? s / 100: s;
   return Math.round((p * t * t * t) * 100) / 100;
}

// [eof] //

