
function calcBEE(p) {

	var obj= document.formulaForm;
	 var Ht     = obj.Ht.value;
   var Wt     = obj.Wt.value;
   var Age    = obj.Age.value;
   var Activity = 1.0;
   var Factor   = 0;
   var TotCR, TotCrNRC;
   var lbKg=1.0;
   var WeightFactorNRC, WeightFactorHB, WeightFactorAve;
 
	if (!obj.gender[0].checked && !obj.gender[1].checked) {
      alert("Click either male or female");
      return; }

   if (!IsNum(obj.Ht.value) ) {
      alert("Height invalid");
      return; }

      
  if ( eval(obj.Ht.value) < 10) {
      alert("Height invalid");
      return; }
         
      
   if (!IsNum(obj.Wt.value)) {
      alert("Weight invalid");
      return; }
      
  if (eval(obj.Wt.value)<10) {
      alert("Weight invalid");
      return; }
      
   if ( eval(obj.Age.value) < 18) {
      alert("Age invalid");
      return; }
      
         if ( eval(obj.Age.value) < 18) {
      alert("Age invalid");
      return; }
      

 // obj.ReeValueAve.value = "filling";
      

  

   // Conversions
   if (obj.cmin[1].checked) {
      Ht = Math.round(Ht * 2.54 * 100)/100;}    

   if (obj.kglb[1].checked) {
      Wt = Math.round(Wt*100 / 2.2)/100;
      obj.WeightMultUnits.value="Cal/day/lb";
      lbKg = 2.2;
      obj.lbsOrKg.value="lbs";
   }
      
    else {
       obj.lbsOrKg.value="kg";
       obj.WeightMultUnits.value="Cal/day/kg";
    }

   
   Age = Math.round(Age * 100) / 100;


   // Stress and Activity factors
   // Default activity factor of 1.0 set at declaration
   
  if (obj.gender[0].checked) { // male
   		if (obj.Activity[1].checked) {Activity = 1.3; }
   		if (obj.Activity[2].checked) {Activity = 1.55;}
   		if (obj.Activity[3].checked) {Activity = 1.8;}
   		if (obj.Activity[4].checked) {Activity = 2.1;}
   }
   else { // female  
   		if (obj.Activity[1].checked) { Activity = 1.3; }
   		if (obj.Activity[2].checked) {Activity = 1.6;}
   		if (obj.Activity[3].checked) {Activity = 1.7;}
   		if (obj.Activity[4].checked) {Activity = 1.9;}
   }
   
   Factor = parseFloat(Activity);

   // Calculation using BH equation
   
   // Male
   if (obj.gender[0].checked) {
      REE = 66.5 + 13.75 * Wt + 5.003 * Ht - 6.775 * Age;
      WeightFactHB = 13.75/lbKg;
      
      if (obj.Age.value > 60) {     ReeNRC =  13.5 * Wt + 487 ; WeightFactNRC = 13.5/lbKg; }
      else if (obj.Age.value > 30){ ReeNRC = 11.6 * Wt + 879; WeightFactNRC = 13.5/lbKg;}
      else                    {ReeNRC = 15.3 * Wt + 679; WeightFactNRC = 15.3/lbKg;}
   }

   else { // female
   	
   	  REE = 655.1 + 9.563 * Wt + 1.85 * Ht - 4.676 * Age;
   	   WeightFactHB = 9.563/lbKg;
   
      if (obj.Age.value > 60) {     ReeNRC = 10.5 * Wt + 596; WeightFactNRC = 10.5/lbKg;}
      else if (obj.Age.value > 30) {ReeNRC = 8.7 * Wt + 829; WeightFactNRC = 8.7/lbKg;}
      else {                       ReeNRC = 14.7 * Wt + 496; WeightFactNRC = 14.7/lbKg; }
         
  }
  
  // This is the cunningham formula for both men and women or any age
  var BodyFat = obj.bodyFatP.value;
  var ReeC= false;
 
  if(!isNaN(BodyFat) && (0 < BodyFat) ){
  	ReeC = 370+21.6*Wt*(1-obj.bodyFatP.value/100);
  }
  
// find upper and lower boudns etc.

    var timeExercising = (obj.hours.value + obj.minutes.value/60 )*obj.times.value/7;
    var calExercising = obj.extra.value*obj.times.value/7;
    
   // They can't burn LESS exercising than they do resting around.
    
   // they can't burn MORE exercising than 50 * their REE;
   calExercising = Math.min(calExercising, REE*50/24);
   
   var minTotCR = REE*Factor;
   var minTotCrNRC = ReeNRC*Factor;
    
   TotCR 	= REE	 * Factor*(24-timeExercising)/24 + calExercising ;  // harris-benedict.
   TotCrNRC	=ReeNRC * Factor*(24-timeExercising)/24 + calExercising ; // NRC
    TotCrC	=ReeC 	*Factor*(24-timeExercising)/24 + calExercising ; // cunningham
   
   TotCR=Math.max(minTotCR,TotCR);
   TotCrNRC=Math.max(minTotCrNRC, TotCrNRC);
   TotCrC = Math.max(ReeC*Factor, TotCrC);
   
   obj.ReeValueBH.value = Math.round(REE);   
   obj.CalReqValueBH.value = Math.round(TotCR);
   
   obj.ReeValueNRC.value = Math.round(ReeNRC);
   obj.CalReqValueNRC.value = Math.round(TotCrNRC);
   
    // average, upper and lower
   var three;  // take care of possibility that ReeC is not defined.

   
   if(ReeC){
   		obj.ReeValueC.value = Math.round(ReeC);
   		obj.CalReqValueC.value = Math.round(TotCrC);
   		three=3;
   }
	else {
		obj.ReeValueC.value = '??';
   		obj.CalReqValueC.value = '??';
   		ReeC=0;
   		three = 2;
   		TotCrC=0;
	}
  
   obj.WeightMultHB.value = Math.round( WeightFactHB*Factor*100)/100;   
   obj.WeightMultNRC.value = Math.round( WeightFactNRC*Factor*100)/100;

  
   
   obj.ReeValueAve.value = Math.round((ReeNRC+REE+ReeC)/three);
   obj.ReeValueUpper.value=Math.round((ReeNRC+REE+ReeC)*1.20/three);
   obj.ReeValueLower.value = Math.round((ReeNRC+REE+ReeC)*0.8/three);

// avearage, upper and lower
 var aveCal = (TotCR+TotCrNRC+TotCrC)/three;


   obj.CalReqValueAve.value = Math.round(aveCal);
   obj.CalReqValueUpper.value = Math.round(aveCal*1.20);
   obj.CalReqValueLower.value = Math.round(aveCal*0.80);
   
   
 // average, upper, lower  
 
  obj.WeigthMultAve.value = Math.round( 0.5*(WeightFactNRC+WeightFactHB)*Factor*10)/10;
   obj.WeigthMultUpper.value = Math.round( 0.5*(WeightFactNRC+WeightFactHB)*Factor*10*1.20)/10;
   obj.WeigthMultLower.value = Math.round( 0.5*(WeightFactNRC+WeightFactHB)*Factor*10*0.8)/10;
  
  // protein needs.
  // The RDA of 0.8 grams/ Kg is ok for sedentary people. 
  // endurance athletes need at least 65% more.
  // The american heart association recommends 15%.
  // Most articles recommend 12%
  
  recDaily = new recommendations ( aveCal,Wt,calExercising,0,0);
  
  	var minProt= recDaily.minProt;
    var maxProt = recDaily.maxProt;
    var minProtCal=recDaily.minProtCal;
    var maxProtCal= recDaily.maxProtCal; 
  
 	var maxFatCal = recDaily.maxFatCal;
  	var minFatCal = recDaily.minFatCal;
  
  var maxFat = recDaily.maxFat
  var minFat = recDaily.minFat
  
  var maxCarbCal = recDaily.maxCarbCal;
  var minCarbCal = recDaily.minCarbCal;

// set out output  
  obj.ProteinLower.value = Math.round( minProt);
  obj.ProteinUpper.value = Math.round( maxProt);
  
  obj.ProteinLowerCal.value= Math.round(minProtCal);
  obj.ProteinUpperCal.value = Math.round( maxProtCal);
  
 	// fat 15% to avoid deficiencies. 30% to avoid cardiovascularrisk. 
  obj.FatLowerCal.value = Math.round(minFatCal);
  obj.FatUpperCal.value = Math.round(maxFatCal);
  
  obj.FatLower.value = Math.round(minFat);
  obj.FatUpper.value = Math.round(maxFat);
  obj.absFatLower.value = Math.round(recDaily.absMinFat);
  
  // carbohydrate-- remaining stuff.
  obj.CarbLowerCal.value =  Math.round( minCarbCal);  
  obj.CarbUpperCal.value =   Math.round(maxCarbCal );
  
  obj.CarbLower.value = Math.round(minCarbCal/4);
  obj.CarbUpper.value= Math.round(maxCarbCal/4);

// Diet recommendations:=========================================================
	// find diet recommendations
  if(!IsNum(obj.lbsToLose.value)){obj.lbsToLose.value=0;} // set to 0 if it's not a number. 
  
  else { // don't let them lose more than 5 lbs/ month under any circumstances.
   obj.lbsToLose.value = Math.max(eval(obj.lbsToLose.value),0);
   obj.lbsToLose.value = Math.round(10*Math.min(eval(obj.lbsToLose.value), 5 * (lbKg/2.2) ))/10; 
  }
  
  var lbLose_Week =eval(obj.lbsToLose.value) * (2.2/ lbKg) /4 ; // in lbs
  
  if(obj.metabolism[0].checked){aveCal = aveCal*0.8};
  if(obj.metabolism[2].checked){aveCal = aveCal*1.2};
  
  obj.calToMaintain.value = Math.round(aveCal);
   
  var CalDiet = Math.max(aveCal -  lbLose_Week * 3500/7, 0.9 * eval(obj.ReeValueAve.value) ) ;
  CalDiet = Math.max(CalDiet,1200);
  
  obj.CalDiet.value = Math.round(CalDiet);
  var CalDef = aveCal-CalDiet;
  
  // determine real loss, and if it's smaller than the value in the box, replace.
  var realLoss= ( (CalDef * 28)/3500) * ( lbKg/2.2);  
  
  if(realLoss <  eval(obj.lbsToLose.value) ) {obj.lbsToLose.value = Math.round(10*realLoss)/10;}
  
 //  call with minimum fat and target fat % for diet.
 var percentFat, proteinLevel;
 
 if (obj.dietType[0].checked) { percentFat = 0.15; }
 else if (obj.dietType[1].checked)  { percentFat = 0.225; }
 else {percentFat = 0.30;} 
 
 if (obj.proteinType[0].checked) { proteinLevel = 0; }
 else if (obj.proteinType[1].checked)  {  proteinLevel = 1; }
 else { proteinLevel = 2;} 
 
 dietDaily = new recommendations ( CalDiet ,Wt, calExercising,recDaily.absMinFat,percentFat,proteinLevel);
 
 obj.CalDiet2.value = Math.round(CalDiet);  

// set out output  
  obj.ProteinDietCal.value = Math.round(dietDaily.dietProtCal);   
  obj.ProteinDiet.value= Math.round(dietDaily.dietProtCal/4);
  
  obj.ProteinDietP.value = Math.round(100*dietDaily.dietProtCal/CalDiet);
  
 	// fat 
  obj.FatDietCal.value = Math.round(dietDaily.dietFatCal)  
  obj.FatDiet.value = Math.round(dietDaily.dietFatCal/9);
  obj.FatDietP.value = Math.round(100*dietDaily.dietFatCal/CalDiet);
  
  
  // carbohydrate-- remaining stuff.
  obj.CarbDietCal.value =  Math.round( dietDaily.dietCarbCal);  
  obj.CarbDiet.value = Math.round(dietDaily.dietCarbCal/4);
  obj.CarbDietP.value = Math.round(100*dietDaily.dietCarbCal/CalDiet);
   
}

// isNum function

function IsNum(str) {
      for (var i = 0; i < str.length; i++) {
         var chr = str.substring(i, i+1);
         if ((chr < "0" || "9" < chr) && chr != ".")
            return false; 
      }
      if (eval(str)==0)
         return false;
      return true;
   }
 //---------------------------------------------------------  
   
function recommendations (aveCal,Wt,exCal, absMinFat, fracFat,protein) {

	// fracFat should be the fraction for the diet type.
	// absMinFat should be the minimum for the person-- calculated previously.

	this.minProt = 0.8*Wt;
	
	if(  0.12 < exCal/aveCal ){	this.maxProt = Math.max(this.minProt*1.65,0.15*aveCal/4);}
 	else { 						this.maxProt =  Math.max(this.minProt,0.15*aveCal/4);}
  
 	this.minProtCal=this.minProt*4;
 	this.maxProtCal= this.maxProt*4; 
 	
 	if(protein == 0){		this.dietProtCal =this.minProtCal;}
 	else if(protein == 1){	this.dietProtCal = (this.minProtCal + this.maxProtCal)/2;} // average
 	else {					this.dietProtCal =this.maxProtCal;}
 	
  
	this.maxFatCal = aveCal*0.30;
	this.minFatCal = Math.max(aveCal*0.15,absMinFat);// limit
	this.absMinFatCal= aveCal*0.06;
	
	//this.dietFatCal = Math.max(absMinFat,fracFat*aveCal, this.maxFatCal); //	
       this.dietFatCal=Math.max(absMinFat,fracFat*aveCal);
       this.dietFatCal=Math.min(this.dietFatCal,this.dietFatCal);
       
	this.maxFat = this.maxFatCal/9;
	this.minFat =this. minFatCal/9;
	this.absMinFat = this.absMinFatCal/9;
  
	this.maxCarbCal = aveCal-(this.minProtCal+this.minFatCal);
 	this.minCarbCal = aveCal-(this.maxProtCal+this.maxFatCal);
 	this.absMaxCarbCal = aveCal-(this.minProtCal+this.absMinFatCal);
 	
 	this.dietCarbCal = aveCal-(this.dietProtCal+this.dietFatCal);


}


function openWin(){

 newWindow = window.open('RestingEnergyChild.html','directions',
'left=screen.width-225,top=0,scrollbars=yes,toolbar=yes,resizable=yes,width=150,height=150');

}
function fillChild(){
var q=newWindow.document.formulaForm;
 var p = document.formulaForm;
 // fill window with data 
 
 q.ReeValueAve.value=  p.ReeValueAve.value;
 
 
 
}

