/*
JavaScript:  NICU Fluids Calculator
October 24, 2000

This calculator was created by Charles Hu for MedCalc.com.  This calculator may not be
copied without consent from the author.  Please contact him at
chuckhu@medcalc.com
*/

function fen(form,actualGoal) {
/* actualGoal 0 = calculate actual
   actualGoal 1 = calculate goals
*/

	var weight = form.weight.value;
	var wtUnits = form.gramKg.selectedIndex;
	var dIVF = form.dIVF.value;
	var dTPN = form.dTPN.value;
	var tpnProtein = form.tpnProtein.value;
	var proteinContent = form.proteinContent.selectedIndex;
	var tpnLipid = form.tpnLipid.value;
	var milkType = form.milkType.selectedIndex;
	var milkCalOz = form.milkCalOz.value;

// Variables for Actual/Total calculations
	var ivfTotal = form.ivfTotal.value;
	var tpnTotal = form.tpnTotal.value;
	var lipidsTotal = form.lipidsTotal.value;
	var milkTotal = form.milkTotal.value;
	var otherTotal = form.otherTotal.value;
	var urineTotal = form.urineTotal.value;

// Variables for Goal calculations
	var ivfKg = form.ivfKg.value;
	var tpnKg = form.tpnKg.value;
	var lipidsKg = form.lipidsKg.value;
	var milkKg = form.milkKg.value;
	var otherKg = form.otherKg.value;


	if ((weight <=0) || (isNaN(parseFloat(weight)))) {
		alert("Please enter the patient's weight.");
		form.weight.focus();
		form.weight.select();
		return false;
	}

	if (isNaN(parseFloat(dIVF))) {
		if (((ivfTotal > 0) && (actualGoal == 0)) || ((ivfKg > 0) && (actualGoal == 1))) {
		alert("Please enter the IVF dextrose concentration.");
		form.dIVF.focus();
		form.dIVF.select();
		return false;
	}}

	if (isNaN(parseFloat(tpnProtein))) {
		if (((tpnTotal > 0) && (actualGoal == 0)) || ((tpnKg > 0) && (actualGoal == 1))) {
		alert("Please enter the TPN protein concentration.");
		form.tpnProtein.focus();
		form.tpnProtein.select();
		return false;
	}}

	if (isNaN(parseFloat(dTPN))) {
		if (((tpnTotal > 0) && (actualGoal == 0)) || ((tpnKg > 0) && (actualGoal == 1))) {
		// if (!chuckhu(this.form)) {return false}
		alert("Please enter the TPN dextrose concentration.");
		form.dTPN.focus();
		form.dTPN.select();
		return false;
	}}

// If calculating goals, clear all "actual" values
	if (actualGoal == 1) {
		form.ivfTotal.value="";
		form.tpnTotal.value="";
		form.lipidsTotal.value="";
		form.milkTotal.value="";
		form.otherTotal.value="";
		form.totalTotal.value="";
	}

// Convert grams to kilograms
	if (wtUnits == 0) {weight = weight / 1000}
	if (weight > 15) {
		alert("NICU babies are usually less than 10 kg.");
		form.weight.focus();
		form.weight.select();
		return false;
	}

// IV Fluids
if (actualGoal == 0) {						// calculating IVF actual
	if (isNaN(parseFloat(ivfTotal))) {
		var ivfTotal=0; var ivfKg=0; var ivfCal=0;
		form.ivfTotal.value="";
		form.ivfKg.value="";
		form.ivfCal.value="";
	} else {
		var ivfKg = ivfTotal / weight;
		form.ivfKg.value = roundNum(ivfKg,0);

		var ivfCal = ivfKg * dIVF * 3.4 / 100;	// Calories from IVF
		form.ivfCal.value = roundNum(ivfCal,0);
	}
}

if (actualGoal == 1) {						// calculating IVF goals
	if (isNaN(parseFloat(ivfKg))) {
		var ivfTotal=0; var ivfKg=0; var ivfCal=0;
		form.ivfTotal.value="";
		form.ivfKg.value="";
		form.ivfCal.value="";
	} else {
		var ivfCal = ivfKg * dIVF * 3.4 / 100;	// Calories from IVF
		form.ivfCal.value = roundNum(ivfCal,0);
	}
}


// TPN
if (actualGoal == 0) {						// calculate TPN actual
	if (isNaN(parseFloat(tpnTotal))) {
		var tpnTotal=0; var tpnKg=0; var tpnCal=0
		form.tpnTotal.value="";
		form.tpnKg.value="";
		form.tpnCal.value="";
		form.calProtein.value="";
	} else {
	var tpnKg = tpnTotal / weight;
	form.tpnKg.value = roundNum(tpnKg,0);

	// Convert protein % to g/kg/day
	if (proteinContent == 0) {
		tpnProtein = tpnProtein * tpnKg / 100;
	}

	var calProtein = tpnProtein * 4;		// Total calories from protein
	form.calProtein.value = roundNum(calProtein,0);

	var calCHOtpn = dTPN * tpnKg * 3.4 / 100;	// Calories from TPN Dextrose
	var tpnCal = calCHOtpn + calProtein;
	form.tpnCal.value = roundNum(tpnCal,0);
	}
}

if (actualGoal == 1) {						// calculate TPN goals
	if (isNaN(parseFloat(tpnKg))) {
		var tpnTotal=0; var tpnKg=0; var tpnCal=0
		form.tpnTotal.value="";
		form.tpnKg.value="";
		form.tpnCal.value="";
		form.calProtein.value="";
	} else {
	// Convert protein % to g/kg/day
	if (proteinContent == 0) {
		tpnProtein = tpnProtein * tpnKg / 100;
	}

	var calProtein = tpnProtein * 4;		// Total calories from protein
	form.calProtein.value = roundNum(calProtein,0);

	var calCHOtpn = dTPN * tpnKg * 3.4 / 100;	// Calories from TPN Dextrose
	var tpnCal = calCHOtpn + calProtein;
	form.tpnCal.value = roundNum(tpnCal,0);
	}
}

// Total calories from IVF and TPN dextrose
	if (isNaN(calCHOtpn)) {calCHOtpn = 0}
	var calCHO = calCHOtpn + ivfCal;
	// Charles Hu
	if (calCHO > 0) {
		form.calCHO.value = roundNum((calCHOtpn + ivfCal),0);
	} else {
		form.calCHO.value = "";
	}

// Lipids
if (actualGoal == 0) {					// calculate actual lipids
	if (isNaN(parseFloat(lipidsTotal))) {
		var lipidsTotal=0; var lipidsKg=0; var lipidsCal=0;
		form.lipidsTotal.value="";
		form.lipidsKg.value="";
		form.lipidsCal.value="";
		form.calFat.value="";
	} else {
		var lipidsKg = lipidsTotal / weight;
		form.lipidsKg.value = roundNum(lipidsKg,0);

		var lipidsCal = lipidsKg * 2;
		form.lipidsCal.value = roundNum(lipidsCal,0);
		form.calFat.value = roundNum(lipidsCal,0);
	}
}

if (actualGoal == 1) {					// calculate lipid goals
	if (isNaN(parseFloat(lipidsKg))) {
		var lipidsTotal=0; var lipidsKg=0; var lipidsCal=0;
		form.lipidsTotal.value="";
		form.lipidsKg.value="";
		form.lipidsCal.value="";
		form.calFat.value="";
	} else {
		var lipidsCal = lipidsKg * 2;
		form.lipidsCal.value = roundNum(lipidsCal,0);
		form.calFat.value = roundNum(lipidsCal,0);
	}
}

// Enteral feeds
if (actualGoal == 0) {					// calculate actual enteral feeds
	if (isNaN(parseFloat(milkTotal))) {
		var milkTotal=0; var milkKg=0; var milkCal=0;
		form.milkTotal.value="";
		form.milkKg.value="";
		form.milkCal.value="";
	} else {
		if ((milkType == 0) && (isNaN(parseFloat(milkCalOz)))) {
			alert("Please enter the type of enteral feeds.");
			form.milkType.focus();
			return false;
		}
		if ((milkType == 1) || (milkType == 3)) {var milkCalOz = 20}
		if ((milkType == 2) || (milkType == 4)) {var milkCalOz = 24}

		var milkKg = milkTotal / weight;
		form.milkKg.value = roundNum(milkKg,0);

		var milkCal = milkKg * milkCalOz / 30;
		form.milkCal.value = roundNum(milkCal,0);
	}
}

if (actualGoal == 1) {					// calculate enteral feed goals
	if (isNaN(parseFloat(milkKg))) {
		var milkTotal=0; var milkKg=0; var milkCal=0;
		form.milkTotal.value="";
		form.milkKg.value="";
		form.milkCal.value="";
	} else {
		if ((milkType == 0) && (isNaN(parseFloat(milkCalOz)))) {
			alert("Please enter the type of enteral feeds.");
			form.milkType.focus();
			return false;
		}
		if ((milkType == 1) || (milkType == 3)) {var milkCalOz = 20}
		if ((milkType == 2) || (milkType == 4)) {var milkCalOz = 24}

		var milkCal = milkKg * milkCalOz / 30;
		form.milkCal.value = roundNum(milkCal,0);
	}
}

// Other fluids
if (actualGoal == 0) {					// calculate actual other fluids
	if (isNaN(parseFloat(otherTotal))) {
		var otherTotal=0; var otherKg=0;
		form.otherTotal.value="";
		form.otherKg.value="";
	} else {
		var otherKg = otherTotal / weight;
		form.otherKg.value = roundNum(otherKg,0);
	}
}

if (actualGoal == 1) {					// other fluids goals
	if (isNaN(parseFloat(otherKg))) {
		var otherTotal=0; var otherKg=0;
		form.otherTotal.value="";
		form.otherKg.value="";
	} 
}


// Total values
if (actualGoal == 0) {
	var totalTotal = parseFloat(ivfTotal) + parseFloat(tpnTotal) + parseFloat(lipidsTotal) + parseFloat(milkTotal) + parseFloat(otherTotal);
	form.totalTotal.value = roundNum(totalTotal,0);
}
	var totalKg = parseFloat(ivfKg) + parseFloat(tpnKg) + parseFloat(lipidsKg) + parseFloat(milkKg) + parseFloat(otherKg);
	form.totalKg.value = roundNum(totalKg,0);
	form.totalCal.value = roundNum((ivfCal + tpnCal + lipidsCal + milkCal),0);

// GIR - Glucose Infusion Rate
	var girIVF = dIVF * ivfKg / 144;
	var girTPN = dTPN * tpnKg / 144;
	form.gir.value = roundNum((girIVF + girTPN),1);
	
// Urine output
	var urineKg = urineTotal / (weight * 24);
	form.urineKg.value = roundNum(urineKg,1);

return true;
}

function proteinChange(form) {
	var proteinType = form.proteinContent.selectedIndex;
	var tpnProtein = form.tpnProtein.value;
	var tpnKg = form.tpnKg.value;

	if ((isNaN(parseFloat(tpnKg))) || (isNaN(parseFloat(tpnProtein)))) {return false}

	if (proteinType == 0) {			// changed from protein g/kg/d to %
		tpnProtein = tpnProtein * 100 / tpnKg;
	}

	if (proteinType == 1) {			// changed from protein % to g/kg/d
		tpnProtein = tpnProtein * tpnKg / 100;
	}

	form.tpnProtein.value = roundNum(tpnProtein,1);
	return true;
}

function roundNum(thisNum,dec) {
	thisNum = thisNum * Math.pow(10,dec)
	thisNum = Math.round(thisNum)
	thisNum = thisNum / Math.pow(10,dec)
	return thisNum
}