

//
//	AG Calculator
//
Calculators[nCalculators++] = new Array (
	"ANION GAP (AG)",
	"The Anion Gap",
	"The Anion Gap is calculated from the serum sodium, potassium, chloride and bicarbonate. It may assist in determining the cause of a metabolic acidosis.",
	new Array (
	    new Array (
		"0300915",
		"0300010",
		"S.Sodium",
		"mmol/L",
		"80",
		"190",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300020",
		"S.Potassium",
		"mmol/L",
		"1.0",
		"12.0",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300030",
		"S.Chloride",
		"mmol/L",
		"60",
		"140",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300040",
		"S.Bicarbonate",
		"mmol/L",
		"0",
		"50",
		"0","0"
	    )
	),
	"",
	"10","18","mmol/L",
     	"","","1",ComputeAGCalculator,"0","","0",BuildAGCalculator
     );

//
//	AG Calculator
//	Build and Compute Functions
//
function BuildAGCalculator(calcIndex) {
	var CalcDef = Calculators[calcIndex];
	var CalFormName="AGCalc";
	var text="";

	text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
	text=text+ "<FORM NAME="+CalFormName+">"
	text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

	text=text+ "<TD><TABLE><TR>"
	text=text+ BuildCalculatorField(calcIndex,0);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>+</TD>"
	text=text+ BuildCalculatorField(calcIndex,1);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>-</TD>"
	text=text+ BuildCalculatorField(calcIndex,2);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>-</TD>"
	text=text+ BuildCalculatorField(calcIndex,3);
	text=text+ BuildCalculatorResultField(calcIndex,'');
	text=text+ "</TR></TABLE>"
	text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
	text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

	text=text+ BuildCalculatorTail(CalcDef);

	text=text+ "</FORM></TABLE></DIV><BR>"
	document.write(text);

	CalcDef[IDX_CAL_FORM]=AGCalc;
	CalcDef[IDX_CAL_DIV]=divAGCalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;
	CalcDef[IDX_CAL_HELPDIV]=divHelpAGCalc;
	showHideHelp(calcIndex,0);
	return(AGCalc)
}
function ComputeAGCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
	var calcFlds=Calc[IDX_CAL_FIELDS];
	var result = '';

	if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 && calcFlds[2][IDX_FLD_VALID]>0 && calcFlds[3][IDX_FLD_VALID]>0 ) {
		result= parseFloat(args[0].value)+parseFloat(args[1].value)-(parseFloat(args[2].value))-parseFloat(args[3].value);
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
	return result;
}


//
//	OG Calculator
//	Build and Compute Functions
//
//
//	"OSMOLAR GAP (OG)" Calculator
//
Calculators[nCalculators++] = new Array (
	"OSMOLAR GAP (OG)",
	"The Osmolar Gap",
	"The Osmolar Gap is calculated from the serum sodium, glucose, urea and osmolality. It may be useful in identifying the presence of unmeasured substances in hign molar amounts, eg ethanol, methanol, ethylene glycol. It is also increased in cases of pseudohyponatraemia, eg massive hypertriglyceridaemia or marked elevation in gamma globulins. ",
	new Array (
	    new Array (
		"0310040",
		"0310040",
		"S.Osmolality",
		"mosm/kg",
		"200",
		"450",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300010",
		"S.Sodium",
		"mmol/L",
		"80",
		"190",
		"0","0"
	    ),
	    new Array (
		"0300080",
		"0300080",
		"S.Glucose",
		"mmol/L",
		"1.0",
		"150.0",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300050",
		"S.Urea",
		"mmol/L",
		"0.0",
		"100.0",
		"0","0"
	    )
	),
	"",
	"0","10","mmol/L",
     	"","","1",ComputeOGCalculator,"0","","0",BuildOGCalculator
     );

function BuildOGCalculator(calcIndex) {
	var CalcDef = Calculators[calcIndex];
	var CalFormName="OGCalc";
	var text="";

	text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

	text=text+ BuildCalculatorField(calcIndex,0);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>- ((</TD>"
	text=text+ BuildCalculatorField(calcIndex,1);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>x2) +</TD>"
	text=text+ BuildCalculatorField(calcIndex,2);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>+</TD>"
	text=text+ BuildCalculatorField(calcIndex,3);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>)</TD>"
	text=text+ BuildCalculatorResultField(calcIndex,'');
	text=text+ "</TR></TABLE>"
	text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
        text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

	text=text+ BuildCalculatorTail(CalcDef);

	text=text+ "</FORM></TABLE></DIV><BR>"
	document.write(text);

	CalcDef[IDX_CAL_FORM]=OGCalc;
	CalcDef[IDX_CAL_DIV]=divOGCalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;
	CalcDef[IDX_CAL_HELPDIV]=divHelpOGCalc;
	showHideHelp(calcIndex,0);
	return(OGCalc)
}
function ComputeOGCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
	var calcFlds=Calc[IDX_CAL_FIELDS];
	var result = '';

	if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 && calcFlds[2][IDX_FLD_VALID]>0 && calcFlds[3][IDX_FLD_VALID]>0 ) {
		result= parseFloat(args[0].value) - ((parseFloat(args[1].value)*2)+parseFloat(args[2].value)+parseFloat(args[3].value));
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
	return result;
}

//
//	CASA Calculator
//	Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
	"CALCIUM ADJUSTED FOR SERUM ALBUMIN",
	"Calcium adjusted for Serum Albumin",
	"The adjustment of serum total calcium for albumin is performed to remove the effect of albumin concentration on the measured calcium. The adjusted calcium can then be evaluated using standard reference intervals.",
	new Array (
	    new Array (
		"0300945",
		"0300100",
		"S.Calcium",
		"mmol/L",
		"1.00",
		"5.00",
		"0","0"
	    ),
	    new Array (
		"0300900",
		"0300210",
		"S.Albumin",
		"g/L",
		"8",
		"60",
		"0","0"
	    )
	),
	"",
	"2.10","2.60","mmol/L",
     	"","","1",ComputeCASACalculator,"0","","2",BuildCASACalculator
     );

function BuildCASACalculator(calcIndex) {
	var CalcDef = Calculators[calcIndex];
	var CalFormName="CASACalc";
	var text="";

	text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

	text=text+ BuildCalculatorField(calcIndex,0);
	text=text+ "<TD CLASS='equstyle'><CENTER>+ (40 -</TD>"
	text=text+ BuildCalculatorField(calcIndex,1);
	text=text+ "<TD CLASS='equstyle'><CENTER>) x 0.02</TD>"
	text=text+ BuildCalculatorResultField(calcIndex,'');
	text=text+ "</TR></TABLE>"
	text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
        text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

	text=text+ BuildCalculatorTail(CalcDef);

	text=text+ "</FORM></TABLE></DIV><BR>"
	document.write(text);

	CalcDef[IDX_CAL_FORM]=CASACalc;
	CalcDef[IDX_CAL_DIV]=divCASACalc;
	CalcDef[IDX_CAL_HELPDIV]=divHelpCASACalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;
	showHideHelp(calcIndex,0);
	return(CASACalc)
}
function ComputeCASACalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
	var calcFlds=Calc[IDX_CAL_FIELDS];
	var result = '';

	if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 ) {
		result= parseFloat(args[0].value)+(40-parseFloat(args[1].value))*0.02;
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
	return result;
}


//
//	LDL Calculator
//	Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
	"LDL CHOLESTEROL",
	"LDL Cholesterol",
	"LDL cholesterol is calculated from serum measurements for total cholesterol, HDL cholesterol and triglyceride using the Friedwald equation. Note that the formula is not suitable for triglyceride concentrations greater than 4.4 mmol/L. Note this formula is ONLY suitable for results in SI units (mmol/L).",
	new Array (
	    new Array (
		"0300905",
		"0300130",
		"S.Cholesterol",
		"mmol/L",
		"1.0",
		"40.0",
		"0","0"
	    ),
	    new Array (
		"0300306",
		"0300306",
		"S.HDLCcholesterol",
		"mmol/L",
		"0.0",
		"5.0",
		"0","0"
	    ),
	    new Array (
		"0300905",
		"0300140",
		"S.Trigs",
		"mmol/L",
		"0.0",
		"4.4",
		"0","0"
	    )
	),
	"<B>Special Note</B>: Calculation of LDL Cholesterol is not valid if serum triglycerides are greater than 4.4 mmol/L",
	"","4.0","mmol/L",
     	"","","1",ComputeLDLCalculator,"0","","1",BuildLDLCalculator
     );

function BuildLDLCalculator(calcIndex) {
	var CalcDef = Calculators[calcIndex];
	var CalFormName="LDLCalc";
	var text="";

	text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

	text=text+ BuildCalculatorField(calcIndex,0);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>-</TD>"
	text=text+ BuildCalculatorField(calcIndex,1);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>- (</TD>"
	text=text+ BuildCalculatorField(calcIndex,2);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER> / 2.2 )</TD>"
	text=text+ BuildCalculatorResultField(calcIndex,'');
	text=text+ "</TR></TABLE>"
	text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
	text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

	text=text+ BuildCalculatorTail(CalcDef);

	text=text+ "</FORM></TABLE></DIV><BR>"
	document.write(text);

	CalcDef[IDX_CAL_FORM]=LDLCalc;
	CalcDef[IDX_CAL_DIV]=divLDLCalc;
	CalcDef[IDX_CAL_HELPDIV]=divHelpLDLCalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;

	showHideHelp(calcIndex,0);
	return(LDLCalc)
}
function ComputeLDLCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
        var calcFlds=Calc[IDX_CAL_FIELDS];
        var result = '';

        if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 && calcFlds[2][IDX_FLD_VALID]>0 ) {
		result= parseFloat(args[0].value)-parseFloat(args[1].value)-parseFloat(args[2].value)/2.2;
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
	return result;
}

//BuildLDLCalculator(3);  				// calculator with index = 3


//
//	Creatinine Calculator - Weight
//	Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
	"CREATININE CLEARANCE BY COCKCROFT AND GAULT EQUATION",
	"Creatinine Clearance",
	"Estimation of creatinine clearance by the Cockcroft and Gault equation (Nephron, 1976) requires the serum creatinine, age, sex and weight of the patient. Note that the equation becomes less accurate at extremes of body composition (eg high or low percent body muscle).",
	new Array (
	    new Array (
		"AGE",
		"AGE",
		"Age",
		"years",
		"18",
		"110",
		"0","0"
	    ),
	    new Array (
		"",
		"",
		"Weight",
		"kg",
		"30",
		"150",
		"0","0"
	    ),
	    new Array (
		"SEX",
		"SEX",
		"Sex",
		"M/F",
		"",
		"",
		"0","0"
	    ),
	    new Array (
		"0300915",
		"0300060",
		"S.Creatinine",
		"mmol/L",
		"0.03",
		"1.50",
		"0","0"
	    )
	),
	"Where: Sex=1 (males) or Sex=0.85 (females)",
	"1.5","2.5","mL/s",
     	"","","1",ComputeCCCalculator,"0","","1",BuildCCCalculator
     );

function BuildCCCalculator(calcIndex) {
	var CalcDef = Calculators[calcIndex];
	var CalFormName="CCCalc";
	var text="";

	text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>{(140-</TD>"
	text=text+ BuildCalculatorField(calcIndex,0);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>)x</TD>"
	text=text+ BuildCalculatorField(calcIndex,1);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>x</TD>"
	text=text+ BuildCalculatorField(calcIndex,2);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>}/ (</TD>"
	text=text+ BuildCalculatorField(calcIndex,3);
	text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>x 48816)</TD>"
	text=text+ BuildCalculatorResultField(calcIndex,'');
	text=text+ "</TR></TABLE>"
	text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
	text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

	text=text+ BuildCalculatorTail(CalcDef);

	text=text+ "</FORM></TABLE></DIV><BR>"
	document.write(text);

	CalcDef[IDX_CAL_FORM]=CCCalc;
	CalcDef[IDX_CAL_DIV]=divCCCalc;
        CalcDef[IDX_CAL_HELPDIV]=divHelpCCCalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;

	showHideHelp(calcIndex,0);
	return(CCCalc)
}
function ComputeCCCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
	var Sex
        var calcFlds=Calc[IDX_CAL_FIELDS];
        var result = '';

	if(args[2].value=="M" || args[2].value=="m") Sex="1.0"
	else if(args[2].value=="F" || args[2].value=="f") Sex="0.85"
	else Sex="0";

        if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 && calcFlds[3][IDX_FLD_VALID]>0 && Sex>0 ) {
		result= (( 140-parseFloat(args[0].value) )*parseFloat(args[1].value)*parseFloat(Sex))/(parseFloat(args[3].value)*48816);
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
	return result;
}
//BuildCCCalculator(4);  				// calculator with index = 4

//
//      Creatinine Calculator - Height
//      Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
        "CREATININE CLEARANCE BY COCKCROFT AND GAULT USING HEIGHT",
        "Creatinine Clearance",
        "Estimation of creatinine clearance by the Cockcroft and Gault equation Nephron, 1976) requires the serum creatinine, age, sex and height of the patient. In this version of the equation ideal body weight is estimaed from patient's height, age and sex. Note that the equation becomes less accurate at extremes of body composition (eg high or low percent body muscle).",
        new Array (
            new Array (
                "AGE",
                "AGE",
                "Age",
                "years",
                "18",
                "110",
		"0","0"
            ),
            new Array (
                "",
                "",
                "Height",
                "cm",
                "150",
                "220",
		"0","0"
            ),
            new Array (
                "SEX",
                "SEX",
                "Sex",
                "M/F",
                "",
                "",
		"0","0"
            ),
            new Array (
                "0300915",
                "0300060",
                "S.Creatinine",
                "mmol/L",
                "0.03",
                "1.50",
		"0","0"
            )
        ),
        "Where: Sex=1 (males) or Sex=0.85 (females)<BR> Weight is predicted from patient's height as follows:<BR> Males(kg) = 50kg + 0.9kg for every cm of height > 150cm<BR>Females(kg) = 45kg + 0.9kg for every cm of height > 150cm<BR>Estimated Mass: <INPUT TEXT READONLY SIZE=5 NAME=Mass>",
        "1.5","2.5","mL/s",
        "","","1",ComputeCCHCalculator,"0","","1",BuildCCHCalculator
     );

function BuildCCHCalculator(calcIndex) {
        var CalcDef = Calculators[calcIndex];
        var CalFormName="CCHCalc";
        var text="";

        text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>{(140-</TD>"
        text=text+ BuildCalculatorField(calcIndex,0);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>)x wt(</TD>"
        text=text+ BuildCalculatorField(calcIndex,1);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>) x</TD>"
        text=text+ BuildCalculatorField(calcIndex,2);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>}/ (</TD>"
        text=text+ BuildCalculatorField(calcIndex,3);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER>x 48816)</TD>"
        text=text+ BuildCalculatorResultField(calcIndex,'');
        text=text+ "</TR></TABLE>"
        text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
        text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

        text=text+ BuildCalculatorTail(CalcDef);

        text=text+ "</FORM></TABLE></DIV><BR>"
        document.write(text);

        CalcDef[IDX_CAL_FORM]=CCHCalc;
        CalcDef[IDX_CAL_DIV]=divCCHCalc;
        CalcDef[IDX_CAL_HELPDIV]=divHelpCCHCalc;
	CalcDef[IDX_CAL_INDEX]=calcIndex;

        showHideHelp(calcIndex,0);
        return(CCHCalc)
}
function ComputeCCHCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
        var Sex
        var calcFlds=Calc[IDX_CAL_FIELDS];
        var result = '';


        if(args[2].value=="M" || args[2].value=="m") {
		Sex="1.0"
		Wt=50;
	}
        else if(args[2].value=="F" || args[2].value=="f") {
		Sex="0.85"
		Wt=45;
	}
        else Sex="0";

	//if(Sex!="" && args[1].value!="" && !isNaN(parseFloat(args[1].value)) ){
	if(calcFlds[1][IDX_FLD_VALID]>0 && Sex>0 ){
		cm= parseFloat(args[1].value) - 150;
		if(cm > 0)	Wt=Wt+(0.9 * cm);
		CCHCalc.Mass.value=Wt+"kg";
	}
	else {
		CCHCalc.Mass.value="";
	}

        if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[3][IDX_FLD_VALID]>0 && Sex>0 ) {
        	result= (( 140-parseFloat(args[0].value) )*parseFloat(Wt)*parseFloat(Sex))/(parseFloat(args[3].value)*48816);
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
        return result;
}

//BuildCCHCalculator(5);                           // calculator with index = 5


//
//      Serum Globulins
//      Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
        "SERUM GLOBULINS",
        "Serum Globulins",
        "Serum globulins are calculated from the total protein and serum albumin and primarily reflect the serum immunoglogulin concentration.",
        new Array (
            new Array (
                "0300200",
                "0300200",
                "S.Total Protein",
                "g/L",
                "30",
                "180",
		"0","0"
            ),
            new Array (
                "0300210",
                "0300210",
                "S.Albumin",
                "g/L",
                "8",
                "60",
		"0","0"
            )
        ),
        "",
        "22","38","g/L",
        "","","1",ComputeSGCalculator,"0","","0",BuildSGCalculator
     );

function BuildSGCalculator(calcIndex) {
        var CalcDef = Calculators[calcIndex];
        var CalFormName="SGCalc";
        var text="";

        text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"

        text=text+ BuildCalculatorField(calcIndex,0);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER> - </TD>"
        text=text+ BuildCalculatorField(calcIndex,1);
        text=text+ BuildCalculatorResultField(calcIndex,'');
        text=text+ "</TR></TABLE>"
        text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
        text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

        text=text+ BuildCalculatorTail(CalcDef);

        text=text+ "</FORM></TABLE></DIV><BR>"
        document.write(text);

        CalcDef[IDX_CAL_FORM]=SGCalc;
        CalcDef[IDX_CAL_DIV]=divSGCalc;
        CalcDef[IDX_CAL_HELPDIV]=divHelpSGCalc;
        CalcDef[IDX_CAL_INDEX]=calcIndex;

        showHideHelp(calcIndex,0);
        return(SGCalc)
}
function ComputeSGCalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
        var calcFlds=Calc[IDX_CAL_FIELDS];
        var result = '';

        if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 ) {
        	result= parseFloat(args[0].value) - parseFloat(args[1].value);
	}

	SetCalculatorResult(Calc[IDX_CAL_INDEX],result,'');
        return result;
}
//BuildSGCalculator(6);                           // calculator with index = 6


//
//      BSA Calculator
//      Build and Compute Functions
//
Calculators[nCalculators++] = new Array (
        "BODY SURFACE AREA, BODY MASS INDEX, and DOSAGE CALCULATOR",
        "Body Surface Area",
        "Body surface area in m^2 is calculated from height (in cm) and weight (in kg) according to formula fo Gehan and George (1970) for adults.<BR>Body Mass Index (BMI) in kg/m^2 is a measure of body composition. Values >25 are consistent with increased body fat. Values <25 indicate low body fat.",
        new Array (
            new Array (
                "",
                "",
                "Height",
                "cm",
                "120",
                "220",
		"0","0"
            ),
            new Array (
                "WEIGHT",
                "WEIGHT",
                "Weight",
                "kg",
                "40",
                "200",
		"0","0"
            ),
            new Array (
                "",
                "BSA",
                "Body Surface Area",
                "m^2",
                "",
                "",
                "1","0",
		"2"
            ),
            new Array (
                "BMI",
                "BMI",
                "Body Mass Index",
                "kg/m^2",
                "20",
                "25",
		"1","0",
		"1"
            ),
            new Array (
                "",
                "DrugDose",
                "Drug Dose",
                "units/m^2",
                "",
                "",
		"0","0"
            ),
            new Array (
                "",
                "DrugUnits",
                "Drug Dose Units",
                "units",
                "",
                "",
		"1","0",
		"1"
            )

        ),
        "",
        "","","m^2",
        "","","1",ComputeBSACalculator,"0","","2",BuildBSACalculator
     );


function BuildBSACalculator(calcIndex) {
        var CalcDef = Calculators[calcIndex];
        var CalFormName="BSACalc";
        var text="";

        text=BuildCalculatorHead(calcIndex,CalFormName)

        text=text+ "<DIV ID=div"+CalFormName+"><TABLE BORDER=0 CELLSPACING=0 WIDTH="+CALC_WIDTH+">"
        text=text+ "<FORM NAME="+CalFormName+">"
        text=text+ "<TR CLASS=c_t_body><TD CLASS=c_tl_body>&nbsp;</TD>"

        text=text+ "<TD><TABLE><TR>"
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER>  0.01545 * (</TD>";
        text=text+ BuildCalculatorField(calcIndex,0);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER> ^ 0.54468 ) * ( </TD>";
        text=text+ BuildCalculatorField(calcIndex,1);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER> ^ 0.46336 )</TD>";
        text=text+ BuildCalculatorResultField(calcIndex,2);
        text=text+ "</TR><TR>";
	text=text+ "<TD COLSPAN=5>Body Mass Index is calculated as Weight (kg) / (Height (m) ^2) </TD>"
        text=text+ BuildCalculatorResultField(calcIndex,3);
	//text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><FONT COLOR=BLUE><CENTER>=</TD>"
	//text=text+ "<TD CLASS='fieldstyle'>"
	//text=text+ "<INPUT TYPE=TEXT NAME='Result3' VALUE='' READONLY SIZE=8 style='background:lightgrey'>"
	//text=text+ "kg/m^2 Range:(20-25)</TD>"
        text=text+ "</TR><TR>";
        text=text+ "<TD></TD>"+BuildCalculatorField(calcIndex,4);
        text=text+ "<TD CLASS='equstyle' ALIGN=CENTER><CENTER> * </TD><TD><CENTER>BSA </TD><TD></TD>";
        text=text+ BuildCalculatorResultField(calcIndex,5);
	text=text+ "</TR></TABLE>";
        text=text+ "<INPUT TYPE=HIDDEN NAME=calcIndex VALUE='"+calcIndex+"'></TD>"
        text=text+ "<TD CLASS=c_tr_body>&nbsp;</TD></TR>"

        text=text+ BuildCalculatorTail(CalcDef);

        text=text+ "</FORM></TABLE></DIV><BR>"
        document.write(text);

        CalcDef[IDX_CAL_FORM]=BSACalc;
        CalcDef[IDX_CAL_DIV]=divBSACalc;
        CalcDef[IDX_CAL_HELPDIV]=divHelpBSACalc;
        CalcDef[IDX_CAL_INDEX]=calcIndex;
        showHideHelp(calcIndex,0);
        return(BSACalc)
}
function ComputeBSACalculator(Calc) {
	var calcForm=Calc[IDX_CAL_FORM];
	var args=calcForm.elements
        var calcFlds=Calc[IDX_CAL_FIELDS];
        var resultBSA = '';
        var resultBMI = '';
        var resultDDU = '';

        if( calcFlds[0][IDX_FLD_VALID]>0 && calcFlds[1][IDX_FLD_VALID]>0 ) {
        	resultBSA=  0.01545 * Math.pow(parseFloat(args[0].value),0.54468) * Math.pow(parseFloat(args[1].value),0.46336);
        	resultBMI=  parseFloat(args[1].value) / Math.pow((parseFloat(args[0].value) / 100),2);
	}
	SetCalculatorResult(Calc[IDX_CAL_INDEX],resultBSA,2);
	SetCalculatorResult(Calc[IDX_CAL_INDEX],resultBMI,3);

	if( calcFlds[2][IDX_FLD_VALID]>0 && calcFlds[4][IDX_FLD_VALID]>0 ) {
		resultDDU = parseFloat(args[4].value) * resultBSA;
	}
	SetCalculatorResult(Calc[IDX_CAL_INDEX],resultDDU,5);

        return resultBSA;
}


Calculators[0][IDX_CAL_BUILDFUNC](0);
Calculators[1][IDX_CAL_BUILDFUNC](1);
Calculators[2][IDX_CAL_BUILDFUNC](2);
Calculators[3][IDX_CAL_BUILDFUNC](3);
Calculators[4][IDX_CAL_BUILDFUNC](4);
Calculators[5][IDX_CAL_BUILDFUNC](5);
Calculators[6][IDX_CAL_BUILDFUNC](6);
Calculators[7][IDX_CAL_BUILDFUNC](7);

