 function CalculatePlan() {
	// hide alert field
	document.getElementById("enfooter").style.display = "none";
	// object to store input values
	var k = {
		age:document.getElementById("enage").value,
		ageIsMonth:document.getElementById("enageunit1").checked,
		weight:document.getElementById("enweight").value,
		calories:document.getElementById("encalories").value,
		getup:document.getElementById("enup").value,
		tobed:document.getElementById("enbed").value,
		handlesFood:document.getElementById("enhandle").value
	};
	// check for empty values
	for(var i in k) {
		if(k[i] == "" || k[i] == undefined || k[i] == null) {
			if(i != "ageIsMonth") {
				DisplayErrorMessage(i, "empty");
				return;
			}
		}
	}
	// validate numeric inputs
	var numerics = ["age", "weight", "calories"];
	for(var i in numerics) {
		// convert , to .
		var komma = k[numerics[i]].indexOf(",");
		var dot = k[numerics[i]].indexOf(".");
		if(komma > -1) {
			k[numerics[i]] = k[numerics[i]].substring(0, komma) + "." + k[numerics[i]].substring(komma+1);
		}
		if(komma == 0 || dot == 0) {
			k[numerics[i]] = "0" + k[numerics[i]];
		}
		k[numerics[i]] = parseFloat(k[numerics[i]]);
		if(isNaN(k[numerics[i]])) {
			DisplayErrorMessage(numerics[i], "num");
			return;
		}
	}
	// validate times
	var times = ["getup", "tobed"];
	for(var i in times) {
		var colon = k[times[i]].indexOf(":");
		var komma = k[times[i]].indexOf(",");
		var dot = k[times[i]].indexOf(".");
		if(komma > -1) {
			k[times[i]] = k[times[i]].substring(0, komma) + "." + k[times[i]].substring(komma+1);
		}
		if(colon > -1) {
			k[times[i]] = k[times[i]].substring(0, colon) + "." + k[times[i]].substring(colon+1);
		}
		if(komma == 0 || dot == 0 || colon == 0) {
			k[times[i]] = "0" + k[times[i]];
		}
		k[times[i]] = parseFloat(k[times[i]]);
		if(isNaN(k[times[i]])) {
			DisplayErrorMessage(times[i], "time");
			return;
		}
		var num = parseInt(k[times[i]]);
		if(num > 23) {
			DisplayErrorMessage(times[i], "time");
			return;
		}
		dot = k[times[i]].toString().indexOf(".");
		var dec = (dot > 0) ? k[times[i]].toString().substring(dot+1) : "0";
		if(dec.length > 1) {
			if(dec > 59) {
				DisplayErrorMessage(times[i], "time");
				return;
				dec = 0;
			} else {
				dec = dec.substring(0,2);
			}
		} else if (dec.length == 1) {
			if(dec > 5) {
				DisplayErrorMessage(times[i], "time");
				return;
				dec = 0;
			} else {
				dec *= 10;
			}
		}
		dec = dec/60;
		k[times[i]] = parseFloat(num + dec);
	}
	// calculate wake time
	k.wakeTime = k.tobed - k.getup;
	k.feedTime = k.wakeTime -2;
	if(k.feedTime < 4) {
		DisplayErrorMessage(null, "wake");
		return;
	}
	// convert years into months
	if(!k.ageIsMonth) {
		k.age *= 12;
	}
	// do calculations
	// create object for computed results
	var r = {};
	// get cal/kg/day
	r.calkg = GetCalPerKg(k.age);
	// get cal/day
	r.calories = Math.round(k.weight * r.calkg);
	// get food/day
	r.food = r.calories/k.calories;
	// set a water factor depending on the calorie density of the food
	r.factor = k.calories/4;
	// get water/day
	r.water = r.food * r.factor;
	// get fluid/day
	r.fluid = r.food + r.water;
	// get feed intervals rounded to .25 of an hour (ie 15 mins)
	r.feedIntervals = Math.round((k.feedTime/(k.handlesFood-1))*4)/4;
	// get per feed values rounded to nearest 5ml
	r.foodPerFeed = Math.round((r.food/k.handlesFood)/5)*5;
	r.waterPerFeed = Math.round((r.water/k.handlesFood)/5)*5;
	// get total daily values
	r.totalFood = r.foodPerFeed * k.handlesFood;
	r.totalWater = r.waterPerFeed * k.handlesFood;
	r.totalCalories = Math.round(r.totalFood * k.calories);
	// get start feeding time
	r.startTime = Math.ceil(k.getup * 4)/4;
	
	// write html output
	var html = "<table id='rechnerresult' summary='Tabelle für die vorgeschlagene Verteilung der Mahlzeiten &uuml;ber einen Tag' class='datatable'><thead><tr><th colspan='3' class='centered'>Vorschlag f&uuml;r die Verteilung der Mahlzeiten &uuml;ber einen Tag</th></tr></thead><tbody>";
	for(var i = 0; i < k.handlesFood; i++) {
		html += DisplayFoodRows(i, r);
	}
	html += "<tfoot><tr><th colspan='3' class='centered'>Gesamt: Kalorien - " + r.totalCalories + " kcal, Nahrung - " + r.totalFood +" ml, Wasser/Tee - " + r.totalWater + " ml</th></tr></tfoot>"
	html += "</tbody></table>";
	document.getElementById("enresult").innerHTML = html;
}
function DisplayFoodRows(i, objR) {
	var waterTime = objR.startTime + (i * objR.feedIntervals);
	var foodTime = waterTime + 1;
	var wNum = Math.floor(waterTime);
	var fNum = Math.floor(foodTime);
	var wDec = ((waterTime%1) * 6000) / 100;
	if(wDec < 15) wDec = "00";
	var fDec = ((foodTime%1) * 6000) / 100;
	if(fDec < 15) fDec = "00";
	var waterRow = "<tr><td class='right'>" + wNum + ":" + wDec + " Uhr</td><td class='right'>" + objR.waterPerFeed + " ml</td><td>Wasser oder Tee</td></tr>";
	var foodRow = "<tr class='food'><td class='right'>" + fNum + ":" + fDec + " Uhr</td><td class='right'>" + objR.foodPerFeed + " ml</td><td>Sondennahrung</td></tr>";
	return waterRow + foodRow;
}
function GetCalPerKg(age) {
	if(age <=1) return 130;
	if(age <=3) return 125;
	if(age <=5) return 120;
	if(age <=7) return 115;
	if(age <=9) return 110;
	if(age <=11) return 105;
	if(age <=19) return 100;
	if(age <=28) return 95;
	if(age <=37) return 90;
	if(age <=46) return 85;
	if(age <=55) return 80;
	if(age <=64) return 75;
	if(age <=73) return 70;
	if(age <=82) return 65;
	if(age <=100) return 60;
	if(age <=115) return 55;
	if(age <=131) return 50;
	return 45;
}
function DisplayErrorMessage(prop, type) {
	// show alert field
	document.getElementById("enfooter").style.display = "table-footer-group";
	// setup refs
	var res = document.getElementById("enalert");
	var props = {
		age:"Alter",
		weight:"Gewicht",
		calories:"Kaloriengehalt",
		getup:"Tagesanfang",
		tobed:"Tagesende"
	};
	// output error message
	if(type == "num") {
		res.innerHTML = "Der Wert im Feld '" + props[prop] + "' ist keine Zahl!";
	} else if (type == "empty") {
		res.innerHTML = "Das Feld '" + props[prop] + "' ist leer!";
	} else if (type == "time") {
		res.innerHTML = "Ung&uuml;ltige Tageszeit im Feld '" + props[prop] + "'!";
	} else if (type == "wake") {
		res.innerHTML = "Zeitspanne zu kurz oder ung&uuml;tig!";
	}
}