/*

JavaScript:  Framingham Heart Disease Risk Calculator


*/

function riskCalc(form,complete) {
	var age = form.age.value;
	var sbp = form.sbp.value;
	var dbp = form.dbp.value;
	var chol = form.ldlchol.selectedIndex;
	var cholnum = form.cholnum.value;
	var hdl = form.hdl.value;

	var agerf, smokerf, smokerr, dmrf, dmrr, bprf, bprr
	var cholrf, cholrr, hdlrf, hdlrr, sbppt, dbppt, chdrisk
	var avgrisk, lowrisk

//  Check sex
	if (form.sex[0].checked) {
		var sex = "male"
	} else {
		if (form.sex[1].checked) {
		var sex = "female"
		} else {
			alert("Please select your sex.");
			return false
		}
	}

//  Check age
	if (age == "pi") {alert("Pi = 3.14159265358979323...");
		  alert("This calculator was written by Charles Hu.")};

	if (!checkNum(age)) {
		alert("Please enter your age.");
		form.age.select();
		form.age.focus();
		return false
	}

	if ((age < 30) || (age > 74)) {
		if (!confirm("Results are ONLY applicable between the " +
		"ages of 30 and 74.  Do you still want to proceed?")) {
			form.age.select();
			form.age.focus();

			form.agerf.value = "";
			form.smokerf.value = "";
			form.smokerr.value = "";
			form.dmrf.value = "";
			form.dmrr.value = "";
			form.bprf.value = "";
			form.bprr.value = "";
			form.cholrf.value = "";
			form.cholrr.value = "";
			form.hdlrf.value = "";
			form.hdlrr.value = "";
			form.totalpts.value = "";
			form.chdrisk.value = "";
			form.avgrisk.value = "";
			form.lowrisk.value = "";

			return false
		}
	}

//  Check smoking
	if (form.smoke[0].checked) {
		var smoke = "yes"
	} else {
		if (form.smoke[1].checked) {
		var smoke = "no"
		} else {
			alert("Do you smoke?");
			return false
		}
	}


//  Check diabetes
	if (form.dm[0].checked) {
		var dm = "yes"
	} else {
		if (form.dm[1].checked) {
		var dm = "no"
		} else {
			alert("Do you have diabetes?");
			return false
		}
	}

if (complete == 1) {
//  Check blood pressure
	if (!checkNum(sbp)) {
		alert("Please enter your systolic blood pressure.");
		form.sbp.focus();
		form.sbp.select();
		return false
	}

	if (!checkNum(dbp)) {
		alert("Please enter your diastolic blood pressure.");
		form.dbp.focus();
		form.dbp.select();
		return false
	}


//  Check cholesterol
	if (chol < 2) {
		alert("Please select a cholesterol.");
		form.ldlchol.focus();
		return false
	}

	if (chol == 2) 	{var whatChol = "total"}
		else	{var whatChol = "LDL"}

	if (!checkNum(cholnum)) {
		alert("Please enter your " + whatChol + " cholesterol.")
		form.cholnum.select();
		form.cholnum.focus();
		return false
	}

	if (!checkNum(hdl)) {
		alert("Please enter your HDL cholesterol.")
		form.hdl.focus();
		form.hdl.select();
		return false
	}
}


//  Calculate risks

//  Sex Risks
	if (sex == "male") {
		agerf = Math.floor((age-35)/5);

		if (age < 35) {agerf = -1}
		if (age >=70) {agerf = 7}
	}

	if (sex == "female") {
		if (age < 35) {agerf = -9}
		if ((age >=35) && (age < 40)) {agerf = -4}
		if ((age >=40) && (age < 45)) {agerf = 0}
		if ((age >=45) && (age < 50)) {agerf = 3}
		if ((age >=50) && (age < 55)) {agerf = 6}
		if ((age >=55) && (age < 60)) {agerf = 7}
		if (age >=60) {agerf = 8}
	}

	form.agerf.value = agerf;


//  Smoking risks
	if (smoke == "yes") {
		smokerf = 2;
		smokerr = "High"
	} else {
		smokerf = 0;
		smokerr = "Low"
	}

	form.smokerf.value = smokerf;
	form.smokerr.value = smokerr;


//  Diabetes risks
	if (dm == "yes") {
		dmrr = "High"
		if (sex == "female") {dmrf = 4}
			else {dmrf = 2}
	} else {
		dmrf = 0;
		dmrr = "Low"
	}

	form.dmrf.value = dmrf;
	form.dmrr.value = dmrr;


//  Blood Pressure risks

if ((checkNum(sbp)) && (checkNum(dbp))) {
if (sex == "male") {
        if (dbp < 80) {dbppt = 0}
	if ((dbp >=80) && (dbp < 85)) {dbppt = 0}
	if ((dbp >=85) && (dbp < 90)) {dbppt = 1}
	if ((dbp >=90) && (dbp < 100)) {dbppt = 2}
	if (dbp >=100) {dbppt = 3}

	if (sbp < 120) {sbppt = 0}
        if ((sbp >=120) && (sbp < 130)) {sbppt = 0}
	if ((sbp >=130) && (sbp < 140)) {sbppt = 1}
	if ((sbp >=140) && (sbp < 160)) {sbppt = 2}
	if (sbp >= 160) {sbppt = 3}
} else {		//  For females...
        if (dbp < 80) {dbppt = -3}
	if ((dbp >=80) && (dbp < 85)) {dbppt = 0}
	if ((dbp >=85) && (dbp < 90)) {dbppt = 0}
	if ((dbp >=90) && (dbp < 100)) {dbppt = 2}
	if (dbp >=100) {dbppt = 3}

	if (sbp < 120) {sbppt = -3}
        if ((sbp >=120) && (sbp < 130)) {sbppt = 0}
	if ((sbp >=130) && (sbp < 140)) {sbppt = 0}
	if ((sbp >=140) && (sbp < 160)) {sbppt = 2}
	if (sbp >= 160) {sbppt = 3}
        }
	//  Which gives more points?
	bprf = Math.max(sbppt,dbppt);

	if (bprf <= 0) {
		if ((sbp < 120) && (dbp < 80)) {bprr = "Very Low"} else
		if ((sbp < 130) && (dbp < 85)) {bprr = "Low"} else
                if ((sbp < 140) && (dbp < 90)) {bprr = "Moderate"}
		} else 
	if (bprf == 1) {bprr = "Moderate"}
	if (bprf == 2) {bprr = "High"}
	if (bprf == 3) {bprr = "Very High"}
        
	form.bprf.value = bprf;
	form.bprr.value = bprr;
} else {
	form.sbp.value = "";
	form.dbp.value = "";
	form.bprf.value = "";
	form.bprr.value = "";
}


//  Cholesterol risks

if ((chol > 1) && (checkNum(cholnum))) {
if (sex == "male") {
	if ((whatChol == "ldl") || (chol == 3)) {
		if (cholnum < 100) {
			cholrf = -3;
			cholrr = "Very Low"
		}
		if ((cholnum >= 100) && (cholnum < 160)) {
			cholrf = 0;
			if (cholnum < 130) {cholrr = "Low"}
				else {cholrr = "Moderate"}
		}
		if ((cholnum >= 160) && (cholnum < 190)) {
			cholrf = 1;
			cholrr = "High"
		}
		if (cholnum >= 190) {
			cholrf = 2;
			cholrr = "Very High"
		}
	} else {	//  For Total Cholesterol...

		if (cholnum < 160) {
			cholrf = -3;
			cholrr = "Very Low"
		}
		if ((cholnum >= 160) && (cholnum < 200)) {
			cholrf = 0;
			cholrr = "Low"
		}
		if ((cholnum >= 200) && (cholnum < 240)) {
			cholrf = 1;
			cholrr = "Moderate"
		}
		if ((cholnum >= 240) && (cholnum < 280)) {
			cholrf = 2;
			cholrr = "High"
		}
		if (cholnum >= 280) {
			cholrf = 3;
			cholrr = "Very High"
		}
	}
} else {		//  For females...

	if ((whatChol == "ldl") || (chol == 3)) {
		if (cholnum < 100) {
			cholrf = -2;
			cholrr = "Very Low"
		}
		if ((cholnum >= 100) && (cholnum < 160)) {
			cholrf = 0;
			if (cholnum < 130) {cholrr = "Low"}
				else {cholrr = "Moderate"}
		}
		if (cholnum >= 160) {
			cholrf = 2;
			if (cholnum < 190) {cholrr = "High"}
				else {cholrr = "Very High"}
		}
	} else {	//  For Total Cholesterol...chuckhu

		if (cholnum < 160) {
			cholrf = -2;
			cholrr = "Very Low"
		}
		if ((cholnum >= 160) && (cholnum < 200)) {
			cholrf = 0;
			cholrr = "Low"
		}
		if ((cholnum >= 200) && (cholnum < 280)) {
			cholrf = 1;
			if (cholnum < 240) {cholrr = "Moderate"}
				else {cholrr = "High"}
		}
		if (cholnum >= 280) {
			cholrf = 3;
			cholrr = "Very High"
		}
	}
}
	form.cholrf.value = cholrf;
	form.cholrr.value = cholrr
} else {
	form.ldlchol.selectedIndex = 0;
	form.cholnum.value = "";
	form.cholrf.value = "";
	form.cholrr.value = ""
}


//  HDL risks
if (checkNum(hdl)) {
if (sex == "male") {
	if (hdl < 35) {
		hdlrf = 2;
		hdlrr = "Very High"
	}
	if ((hdl >=35) && (hdl < 45)) {
		hdlrf = 1;
		hdlrr = "High"
	}
	if ((hdl >= 45) && (hdl < 60)) {
		hdlrf = 0;
		if (hdl < 50) {hdlrr = "Moderate"}
			else {hdlrr = "Low"}
	}
	if (hdl >= 60) {
		hdlrr = "Very Low"
		if (chol == 3) {hdlrf = -1}	// If LDL's were also done
			else {hdlrf = -2}
	}
} else {		//  For women...

	if (hdl < 35) {
		hdlrf = 5;
		hdlrr = "Very High"
	}
	if ((hdl >=35) && (hdl < 45)) {
		hdlrf = 2;
		hdlrr = "High"
	}
	if ((hdl >= 45) && (hdl < 50)) {
		hdlrf = 1;
		hdlrr = "Moderate"
	}
	if ((hdl >= 50) && (hdl < 60)) {
		hdlrf = 0;
		hdlrr = "Low"
	}
	if (hdl >= 60) {
		hdlrr = "Very Low"
		if (chol == 3) {hdlrf = -2}	// If LDL's were also done
			else {hdlrf = -3}
	}
}
	form.hdlrf.value = hdlrf;
	form.hdlrr.value = hdlrr
} else {
	form.hdl.value = "";
	form.hdlrf.value = "";
	form.hdlrr.value = ""
}


//  Calculate Point Total
	if (isNaN(bprf)) {bprf = 0}
	if (isNaN(cholrf)) {cholrf = 0}
	//isNaN(chuckhu@mcw.edu) = 0
	if (isNaN(hdlrf)) {hdlrf = 0}

	totalpts = agerf + smokerf + dmrf + bprf + cholrf + hdlrf;
	form.totalpts.value = totalpts;


//  Find 10-Year Risk
if (sex == "male") {
	for (var gg=0; gg < 16; gg++) {
		if (totalpts == menchd[gg][0]) {
			if (chol == 3) {	// LDL risk
				chdrisk = menchd[gg][1]
			} else {		// chol risk
				chdrisk = menchd[gg][2]
			}
		break
		}
	}
	if ((totalpts <= -3) && (chol==3)) {chdrisk = 1}
				// Minimum risk for lowest LDL points
	if ((totalpts >= 14) && (chol==3)) {chdrisk = "> 56"}
				// Maximum risk for highest LDL points
	if ((totalpts <= -1) && (chol==2)) {chdrisk = 2}
				// Minimum risk for lowest chol points
	if ((totalpts >= 14) && (chol==2)) {chdrisk = "> 53"}
				// Maximum risk for highest chol points

	//  Male average & low risk
	gh = Math.floor((age - 30) / 5);
	if (gh < 0) {gh = 0}
	if (gh > 8) {gh = 8}

	avgrisk = avgmrisk[gh][0];
	lowrisk = avgmrisk[gh][1];

} else {	//  Risks for women...

	for (var gg=0; gg < 20; gg++) {
		if (totalpts == femchd[gg][0]) {
			if (chol == 3) {	// LDL risk
				chdrisk = femchd[gg][1]
			} else {		// chol risk
				chdrisk = femchd[gg][2]
			}
		break
		}
	}
	if (totalpts < -2) {chdrisk = 1}
				// Minimum risk for lowest points
	if ((totalpts > 17) && (chol==3)) {chdrisk = "> 32"}
				// Maximum risk for highest LDL points
	if ((totalpts > 17) && (chol==2)) {chdrisk = "> 27"}
				// Maximum risk for highest chol points

	//  Female average & low risk
	gh = Math.floor((age - 30) / 5);
	if (gh < 0) {gh = 0}
	if (gh > 8) {gh = 8}

	avgrisk = avgfrisk[gh][0];
	lowrisk = avgfrisk[gh][1];
}

	form.chdrisk.value = chdrisk;
	form.avgrisk.value = avgrisk;
	form.lowrisk.value = lowrisk;

	return true;
}


//  An array of CHD risk factors for men
//  menchd[x] = [points, ldlrisk, cholrisk]

menchd = new Array(16)
for (var g=0; g < 16; g++) {
	menchd[g] = new Array(2)
}

menchd[0] = [-2,2,2]
menchd[1] = [-1,2,2]
menchd[2] = [0,3,3]
menchd[3] = [1,4,3]
menchd[4] = [2,4,4]
menchd[5] = [3,6,5]
menchd[6] = [4,7,7]
menchd[7] = [5,9,8]
menchd[8] = [6,11,10]
menchd[9] = [7,14,13]
menchd[10] = [8,18,16]
menchd[11] = [9,22,20]
menchd[12] = [10,27,25]
menchd[13] = [11,33,31]
menchd[14] = [12,40,37]
menchd[15] = [13,47,45]


//  An array of average CHD risk factors for men
//  avgmrisk[x] = [avgrisk, lowrisk]

avgmrisk = new Array(9)
for (g=0; g < 9; g++) {
	avgmrisk[g] = new Array(1)
}

avgmrisk[0] = [3,2]
avgmrisk[1] = [5,3]
avgmrisk[2] = [7,4]
avgmrisk[3] = [11,4]
avgmrisk[4] = [14,6]
avgmrisk[5] = [16,7]
avgmrisk[6] = [21,9]
avgmrisk[7] = [25,11]
avgmrisk[8] = [30,14]



//  An array of CHD risk factors for women
//  femchd[x] = [points, ldlrisk, cholrisk]

femchd = new Array(20)
for (var g=0; g < 20; g++) {
	femchd[g] = new Array(2)
}

femchd[0] = [-2,1,1]
femchd[1] = [-1,2,2]
femchd[2] = [0,2,2]
femchd[3] = [1,2,2]
femchd[4] = [2,3,3]
femchd[5] = [3,3,3]
femchd[6] = [4,4,4]
femchd[7] = [5,5,4]
femchd[8] = [6,6,5]
femchd[9] = [7,7,6]
femchd[10] = [8,8,7]
femchd[11] = [9,9,8]
femchd[12] = [10,11,10]
femchd[13] = [11,13,11]
femchd[14] = [12,15,13]
femchd[15] = [13,17,15]
femchd[16] = [14,20,18]
femchd[17] = [15,24,20]
femchd[18] = [16,27,24]
femchd[19] = [17,32,27]


//  An array of average CHD risk factors for women
//  avgfrisk[x] = [avgrisk, lowrisk]

avgfrisk = new Array(9)
for (g=0; g < 9; g++) {
	avgfrisk[g] = new Array(1)
}

avgfrisk[0] = ["< 1","< 1"]
avgfrisk[1] = ["< 1",1]
avgfrisk[2] = [2,2]
avgfrisk[3] = [5,3]
avgfrisk[4] = [8,5]
avgfrisk[5] = [12,7]
avgfrisk[6] = [12,8]
avgfrisk[7] = [13,8]
avgfrisk[8] = [14,8]



function checkNum(val) {
	if ((val == null) || (isNaN(val)) || (val == "") || (val < 0)) {
		return false
	}
	return true;
}
