function round(value,precision)
{
var exp = Math.pow(10,precision);
return Math.round(value*exp)/exp;
}
function initialize()
{
}
var youngLimits = new Array();
function addLimit(years,sex,limit5,limit85,limit95)
{
if(youngLimits[years]==undefined) youngLimits[years] = Array();
youngLimits[years][sex] = Array(limit5,limit85,limit95);
}
//boys
addLimit( 5,0,13.4,16.7,17.7);
addLimit( 6,0,13.4,16.9,18.0);
addLimit( 7,0,13.6,17.3,18.5);
addLimit( 8,0,13.8,17.7,19.1);
addLimit( 9,0,14.0,18.3,19.8);
addLimit(10,0,14.3,18.9,20.7);
addLimit(11,0,14.7,19.6,21.6);
addLimit(12,0,15.1,20.5,22.6);
addLimit(13,0,15.7,21.4,23.7);
addLimit(14,0,16.3,22.4,24.7);
addLimit(15,0,16.8,23.2,25.7);
addLimit(16,0,17.3,24.0,26.5);
addLimit(17,0,17.7,24.7,27.2);
addLimit(18,0,18.1,25.3,27.8);
addLimit(19,0,18.2,25.6,28.1);
//girls
addLimit( 5,1,13.1,17.0,18.2);
addLimit( 6,1,13.1,17.2,18.6);
addLimit( 7,1,13.2,17.6,19.1);
addLimit( 8,1,13.4,18.1,19.8);
addLimit( 9,1,13.7,18.8,20.7);
addLimit(10,1,14.1,19.5,21.6);
addLimit(11,1,14.6,20.4,22.7);
addLimit(12,1,15.2,21.4,23.9);
addLimit(13,1,15.8,22.4,25.0);
addLimit(14,1,16.3,23.3,25.9);
addLimit(15,1,16.7,24.0,26.7);
addLimit(16,1,16.9,24.5,27.2);
addLimit(17,1,17.1,24.8,27.5);
addLimit(18,1,17.2,25.0,27.7);
addLimit(19,1,17.2,25.1,27.8);
function recalculate(field)
{
var form = field.form;
if(field.type=="text")
{
if(field.value.indexOf(',')>0)
field.value = field.value.replace(',','.');
var numberRegExp = new RegExp("^[0-9\.,]*$");
if(!numberRegExp.test(field.value))
field.value = field.value.replace(/[^0-9\.,]*/ig,'');
//check for double decimal separator
var firstSep = field.value.indexOf(".");
var secondSep = firstSep>0?field.value.indexOf(".",firstSep+1):-1;
if(firstSep>0 && secondSep>firstSep)
{
field.value = field.value.substring(0,secondSep);
}
if(field.value[field.value.length-1]=='.')
return;
}
var resultDiv = document.getElementById("bmiResult");
var resultWeightDiv = document.getElementById("bmiResultWeight");
var bmiAge = parseInt(form.bmiAge.value);
if(form.bmiAge.value>=5 && form.bmiAge.value<=18)
{
document.getElementById("bmiChooseSexSelect").style.removeProperty("display");
document.getElementById("bmiChooseSexLabel").style.removeProperty("display");
}else {
document.getElementById("bmiChooseSexSelect").style.display = "none";
document.getElementById("bmiChooseSexLabel").style.display = "none";
}
if(!form.bmiAge.value || !form.bmiWeight.value || !form.bmiHeight.value)
{
resultDiv.innerHTML = "";
resultWeightDiv.innerHTML = "";
return;
}
var bmiWeight = parseFloat(form.bmiWeight.value);
var bmiHeight = parseFloat(form.bmiHeight.value)/100;
var bmiSex = form.bmiSex.value;
var bmi = bmiWeight/(bmiHeight*bmiHeight);
var bmiResult = 0;//-1 niedowaga, 0 - ok, 1 nadwaga, 2 - otyłość
var weightMin;
var weightMax;
if(bmiWeight<10 || bmiWeight>900 || bmiHeight<0.5 || bmiHeight>3 || bmi<4 || bmi>99)
{
resultDiv.innerHTML = "";
resultWeightDiv.innerHTML = "";
return;
}
if(bmiAge>=5 && bmiAge<20)
{
weightMin = calculateWeightForBMI(youngLimits[bmiAge][bmiSex][0],bmiHeight);
weightMax = calculateWeightForBMI(youngLimits[bmiAge][bmiSex][1],bmiHeight);
if(bmi < youngLimits[bmiAge][bmiSex][0]) bmiResult = -1; else
if(bmi > youngLimits[bmiAge][bmiSex][2]) bmiResult = 2; else
if(bmi > youngLimits[bmiAge][bmiSex][1]) bmiResult = 1;
}else
if(bmiAge<121)
{
weightMin = calculateWeightForBMI(18.5,bmiHeight);
weightMax = calculateWeightForBMI(25,bmiHeight);
if(bmi<18.5) bmiResult = -1; else
if(bmi>30) bmiResult = 2; else
if(bmi>25) bmiResult = 1;
}
if(bmiAge<5)
{
resultDiv.innerHTML = "Wyznaczone BMI to: "+round(bmi,1)+".
Skala BMI nie nadaje się jednak do obliczeń dla tak małych dzieci, nie sugeruj się więc tą wartością przy określaniu, czy waga jest prawidłowa!";
resultWeightDiv.innerHTML = "";
}else
if(bmiAge<121)
{
resultDiv.innerHTML = "Wyliczone BMI to: "+round(bmi,1)+"
";
switch(bmiResult)
{
case -1:
resultDiv.innerHTML += "Niedowaga";
break;
case 0:
resultDiv.innerHTML += "Waga prawidłowa";
break;
case 1:
resultDiv.innerHTML += "Nadwaga";
break;
case 2:
resultDiv.innerHTML += "Otyłość";
break;
}
resultWeightDiv.innerHTML = "Prawidłowa waga dla
wzrostu "+round(bmiHeight*100,0)+"cm:
od "+round(weightMin,0)+"kg do "+round(weightMax,0)+"kg";
}else
{
resultDiv.innerHTML = "Limit wieku tego kalkulatora to 120 lat.";
resultWeightDiv.innerHTML = "";
}
}
function calculateWeightForBMI(bmi,height)
{
return round(bmi*height*height,1);
}
function selectInput(field)
{
addClass(field,"input_selected");
for(var i = 0; i < document.forms.length; i++)
for(var j = 0; j < document.forms[i].elements.length; j++)
{
var currentElement = document.forms[i].elements[j];
if(currentElement == field)
continue;
removeClass(currentElement,"input_selected");
}
}
function addClass(item, classname)
{
var obj = item
if (typeof item=="string") {
obj = document.getElementById(item)
}
obj.className += " " + classname
}
function removeClass(item, classname)
{
var obj = item
if (typeof item=="string") {
obj = document.getElementById(item)
}
var classes = ""+obj.className
while (classes.indexOf(classname)>-1) {
classes = classes.replace (classname, "")
}
obj.className = classes
}
Number.prototype.toMoney = function(decimals, decimalSeparator, thousandsSeparator)
{
var n = this;
c = isNaN(decimals) ? 2 : Math.abs(decimals);
d = decimalSeparator || '.';
t = (typeof thousandsSeparator === 'undefined') ? ' ' : thousandsSeparator;
sign = (n < 0) ? '-' : '',
i = parseInt(n = Math.abs(n).toFixed(c)) + '',
j = ((j = i.length) > 3) ? j % 3 : 0;
return sign + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
}
String.prototype.startsWith = function (str)
{
return this.indexOf(str) == 0;
};