// JavaScript Document
/////////////////////////////////////////////////////////
// setup Constant tables - FEMALE
/////////////////////////////////////////////////////////
hipsTable = new table(30,new Array(33.48,33.83,34.87,35.22,36.27,36.62,37.67,38.02,39.06,39.41,40.46,40.81,41.86,42.21,43.25,43.60,44.65,45.32,46.05,46.40,47.44,47.79,48.84,49.19,50.24,50.59,51.64,51.99,53.03,53.41,54.53,54.86,55.83,56.18,57.22,57.57,58.62,58.97,60.02,60.37,61.42,61.77,62.81,63.16,64.21,64.56,65.61,65.96,67.00,67.35,68.40,68.75,69.80,70.15,71.19,71.54,72.59,72.94,73.99,74.34,75.39));
waistTable = new table(20,new Array(14.22,14.40,14.93,15.11,15.64,15.82,16.35,16.53,17.06,17.24,17.78,17.96,18.49,18.67,19.20,19.38,19.91,20.27,20.62,20.80,21.33,21.51,22.04,22.22,22.75,22.93,23.46,23.64,24.18,24.36,24.89,25.07,25.60,25.78,26.31,26.49,27.02,27.20,27.73,27.91,28.44,28.62,29.15,29.33,29.87,30.05,30.58,30.76,31.29,31.47,32.00,32.18,32.71,32.89,33.42,33.60,34.13,34.31,34.84,35.02,35.56));
heightTable = new table(55,new Array(33.52,33.67,34.13,34.28,34.74,34.89,35.35,35.50,35.96,36.11,36.57,36.72,37.18,37.33,37.79,37.94,38.40,38.70,39.01,39.16,39.62,39.77,40.23,40.38,40.84,40.99,41.45,41.60,42.06,42.21,42.67,42.82,43.28,43.43,43.89,44.04,44.50,44.65,45.11,45.26,45.72,45.87,46.32));

/////////////////////////////////////////////////////////
// setup fat table - MALE
/////////////////////////////////////////////////////////
// makeRow() function:
// select row based on weight
/////////////////////////////////////////////////////////
function makeRow(row) {
	if (row == 120)
		return new Array(4,6,8,10,12,14,16,18,20,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,50,52,54)
	if (row == 125)
		return new Array(4,6,7,9,11,13,15,17,19,20,22,24,26,28,30,32,33,35,37,39,41,43,45,46,48,50,52,54)
	if (row == 130)
		return new Array(3,5,7,9,11,12,14,16,18,20,21,23,25,27,28,30,32,34,36,37,39,41,43,44,46,48,50,52,53,55)
	if (row == 135)
		return new Array(3,5,7,8,10,12,13,15,17,19,20,22,24,26,27,29,31,32,34,36,38,39,41,43,44,46,48,50,51,53,55)
	if (row == 140)
		return new Array(3,5,6,8,10,11,13,15,16,18,19,21,23,24,26,28,29,31,33,34,36,38,39,41,43,44,46,48,49,51,53,54)
	if (row == 145)
		return new Array(null,4,6,7,9,11,12,14,15,17,19,20,22,23,25,27,28,30,31,33,35,36,38,39,41,43,44,46,47,49,51,52,54,55)
	if (row == 150)
		return new Array(null,4,6,7,9,10,12,13,15,16,18,19,21,23,24,26,27,29,30,32,33,35,36,38,40,41,43,44,46,47,49,50,52,53,55)
	if (row == 155)
		return new Array(null,4,5,6,8,10,11,13,14,16,17,19,20,22,23,25,26,28,29,31,32,34,35,37,38,40,41,43,44,46,47,49,50,52,53,55)
	if (row == 160)
		return new Array(null,4,5,6,8,9,11,12,14,15,17,18,19,21,22,24,25,27,28,30,31,33,34,35,37,38,40,41,43,44,46,47,48,50,51,53,54)
	if (row == 165)
		return new Array(null,3,5,6,8,9,10,12,13,15,16,17,19,20,22,23,24,26,27,29,30,31,33,34,36,37,38,40,41,43,44,45,47,48,50,51,52,54,55)
	if (row == 170)
		return new Array(null,3,4,6,7,9,10,11,13,14,15,17,18,19,21,22,24,25,26,28,29,30,32,33,34,36,37,39,40,41,43,44,45,47,48,49,51,52,54,55)
	if (row == 175)
		return new Array(null,null,4,6,7,8,10,11,12,12,15,16,17,19,20,21,23,24,25,27,28,29,31,32,33,35,36,37,39,40,41,43,44,45,47,48,49,51,52,53,55)
	if (row == 180)
		return new Array(null,null,4,5,7,8,9,10,12,13,14,16,17,18,19,21,22,23,25,26,27,28,30,31,32,34,35,36,37,39,40,41,43,44,45,47,48,49,50,52,53,54)
	if (row == 185)
		return new Array(null,null,4,5,6,8,9,10,11,13,14,15,16,18,19,20,21,23,24,25,26,28,29,30,31,33,34,35,36,38,39,40,41,43,44,45,46,48,49,50,51,53,54,55)
	if (row == 190)
		return new Array(null,null,4,5,6,7,8,10,11,12,13,15,16,17,18,19,21,22,23,24,26,27,28,29,30,32,33,34,35,37,38,39,40,41,43,44,45,46,48,49,50,51,52,54,55)
	if (row == 195)
		return new Array(null,null,3,5,6,7,8,9,11,12,13,14,15,16,18,19,20,21,22,24,25,26,27,28,30,31,32,33,34,35,37,38,39,40,41,43,44,45,46,47,49,50,51,52,53,55)
	if (row == 200)
		return new Array(null,null,3,4,6,7,8,9,10,11,12,14,15,16,17,18,19,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,43,44,45,46,47,48,50,51,52,53,54,55)
	if (row == 205)
		return new Array(null,null,null,4,5,6,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,43,44,45,46,47,48,49,51,52,53,54,55)
	if (row == 210)
		return new Array(null,null,null,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,53,54,55)
	if (row == 215)
		return new Array(null,null,null,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,46,47,48,49,50,51,52,53,54,55)
	if (row == 220)
		return new Array(null,null,null,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55)
	if (row == 225)
		return new Array(null,null,null,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55)
	if (row == 230)
		return new Array(null,null,null,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,34,35,36,37,38,39,40,41,42,44,44,45,46,47,48,49,50,51,52,53,54,55)
	if (row == 235)
		return new Array(null,null,null,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,51,52,53,54,55)
	if (row == 240)
		return new Array(null,null,null,null,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54)
	if (row == 245)
		return new Array(null,null,null,null,4,5,6,7,8,9,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,44,45,46,47,48,49,50,51,52,53)
	if (row == 250)
		return new Array(null,null,null,null,4,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,28,29,30,31,31,32,33,34,35,36,37,38,39,40,41,42,43,44,44,45,46,47,48,49,50,51,52)
	if (row == 255)
		return new Array(null,null,null,null,3,4,5,6,7,8,9,10,11,12,13,14,14,15,16,17,18,19,20,21,22,23,24,24,25,26,27,28,29,30,31,32,33,34,34,35,36,37,38,39,40,41,42,43,44,44,45,46,47,48,49,50,51)
	if (row == 260)
		return new Array(null,null,null,null,3,4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,18,19,19,20,21,22,23,24,25,26,27,27,28,29,30,31,32,33,34,35,35,36,37,38,39,40,41,42,43,43,44,45,46,47,48,49,50)
	if (row == 265)
		return new Array(null,null,null,null,null,4,5,6,7,8,8,9,10,11,12,13,14,15,15,16,17,18,19,20,21,22,22,23,24,25,26,27,28,29,29,30,31,32,33,34,35,36,36,37,38,39,40,41,42,43,43,44,45,46,47,48,49)
	if (row == 270)
		return new Array(null,null,null,null,null,4,5,6,7,7,8,9,10,11,12,13,13,14,15,16,17,18,19,19,20,21,22,23,24,25,25,26,27,28,29,30,31,31,32,33,34,35,36,37,37,38,39,40,41,42,43,43,44,45,46,47,48)
	if (row == 275)
		return new Array(null,null,null,null,null,4,5,5,6,7,8,9,10,11,11,12,13,14,15,16,16,17,18,19,20,21,22,22,23,24,25,26,27,27,28,29,30,31,32,32,33,34,35,36,37,38,38,39,40,41,42,43,43,44,45,46,47)
	if (row == 280)
		return new Array(null,null,null,null,null,4,4,5,6,7,8,9,9,10,11,12,13,14,14,15,16,17,18,19,19,20,21,22,23,24,24,25,26,27,28,29,29,30,31,32,33,33,34,35,36,37,38,38,39,40,41,42,43,43,44,45,46)
	if (row == 285)
		return new Array(null,null,null,null,null,4,4,5,6,7,8,8,9,10,11,12,12,13,14,15,16,17,17,18,19,20,21,21,22,23,24,25,26,26,27,28,29,30,30,31,32,33,34,34,35,36,37,38,39,39,40,41,42,43,43,44,45)
	if (row == 290)
		return new Array(null,null,null,null,null,3,4,5,6,7,7,8,9,10,11,11,12,13,14,15,15,16,17,18,19,19,20,21,22,23,23,24,25,26,27,27,28,29,30,31,31,32,33,34,35,35,36,37,38,39,39,40,41,42,43,43,44)
	if (row == 295)
		return new Array(null,null,null,null,null,3,4,5,6,6,7,8,9,10,10,11,12,13,14,14,15,16,17,17,18,19,20,21,21,22,23,24,25,25,26,27,28,28,29,30,31,32,32,33,34,35,36,36,37,38,39,39,40,41,42,43,43)
	if (row == 300)
		return new Array(null,null,null,null,null,3,4,5,5,6,7,8,9,9,10,11,12,12,13,14,15,16,16,17,18,19,19,20,21,22,22,23,24,25,26,26,27,28,29,29,30,31,32,33,33,34,35,36,36,37,38,39,39,40,41,42,43)
}

///////////////////////////////////////////////////////////
// table() function: - MALE
// create row and select column
///////////////////////////////////////////////////////////
function mtable(row,column) {
	theRow = makeRow(row)
	column = (column - 22) * 2
	return theRow[column]
}


///////////////////////////////////////////////////////////
// validate() function:
// validates float and range of the passed arguments
///////////////////////////////////////////////////////////
function validate(obj,min,max) {
  //convert to float if necessary
  var theValue = parseFloat(obj.value)
  if ((!theValue) ||  ( theValue < min) || ( theValue > max)){
      alert("Please enter a value between " + min + " and " + max + " for " + obj.name + ".") 
      obj.focus()
      obj.select()
	}
	else obj.value = theValue 
}

///////////////////////////////////////////////////////////
// maketable() function: FEMALE
// makes a table object
///////////////////////////////////////////////////////////
function table(base,arr) {
	this.base = base; //first argument is base
	this.col = arr;
	this.element = tableElement;
}

///////////////////////////////////////////////////////////
// tableElement() function :
// select column for table object
///////////////////////////////////////////////////////////
function tableElement(c) {
	c = Math.round(c);
	var column = (c - this.base) * 2;
	return this.col[column];
}

///////////////////////////////////////////////////////////
// calcTotal() function: MALE
// Calculates the totals
///////////////////////////////////////////////////////////
function calcTotalM() {
	var wwMin = 22
	var wwMax = 50

	if (!validateFormM())
		return

	var ww = document.calcForm.waist.value - document.calcForm.wrist.value
	if ( (ww < wwMin) || ( ww > wwMax)){
		alert("Waist - Wrist is out of range (" + wwMin + " -> " + wwMax + ").")
		return
	}
	var row = Math.round(document.calcForm.totalWeight.value / 5) * 5
	var column = Math.round( (document.calcForm.waist.value - document.calcForm.wrist.value) * 2) / 2
	
	document.getElementById("results").className="show";
	document.calcForm.percentFat.value = mtable(row,column);
	document.calcForm.fat.value =
    	Math.round(document.calcForm.totalWeight.value * document.calcForm.percentFat.value / 100);
	document.calcForm.lean.value =
    	(document.calcForm.totalWeight.value - document.calcForm.fat.value);
}

///////////////////////////////////////////////////////////
// calcTotal() function: FEMALE
// Calculates the totals
///////////////////////////////////////////////////////////
function calcTotalF() {
	if (!validateFormF())
		return;

	var A = hipsTable.element(document.calcForm.hips.value);
	var B = waistTable.element(document.calcForm.fwaist.value);
	var C = heightTable.element(document.calcForm.height.value);
	
	document.getElementById("results").className="show";
	document.calcForm.percentFat.value = Math.round(A + B - C);
	document.calcForm.fat.value =
    	Math.round(document.calcForm.ftotalWeight.value * document.calcForm.percentFat.value / 100);
	document.calcForm.lean.value =
    	Math.round(document.calcForm.ftotalWeight.value - document.calcForm.fat.value);
}


//////////////////////////////////////////////////////////////////////
// validateForm() function:
// Validates input of entire form. 
//////////////////////////////////////////////////////////////////////
function validateFormF() {
  var fixThis = "";

  if (!(exists(document.calcForm.fwaist.value))) {
    fixThis += "Please enter a numeric value for the waist field.\n";
  }

  if (!(exists(document.calcForm.hips.value))) {
    fixThis += "Please enter a numeric value for the hips field.\n";
  }

  if (!(exists(document.calcForm.height.value))) {
    fixThis += "Please enter a numeric value for the height field.\n";
  }
  
  if (!(exists(document.calcForm.ftotalWeight.value))) {
    fixThis += "Please enter a numeric value for the weight field.\n";
  }
  
  if (fixThis != "") {
    alert(fixThis);
    return 0
  } else {
    return 1;
  }
} 

//////////////////////////////////////////////////////////////////////
// validateForm() function:
// Validates input of entire form. 
//////////////////////////////////////////////////////////////////////
function validateFormM() {
  var fixThis = "";

  if (!(exists(document.calcForm.waist.value))) {
    fixThis += "Please enter a numeric value for the waist field.\n";
  }

  if (!(exists(document.calcForm.wrist.value))) {
    fixThis += "Please enter a numeric value for the wrist field.\n";
  }

  if (!(exists(document.calcForm.totalWeight.value))) {
    fixThis += "Please enter a numeric value for the weight field.\n";
  }
  
  if (fixThis != "") {
    alert(fixThis);
    return 0
  } else {
    return 1;
  }
} 


//////////////////////////////////////////////////////////////////////
// exists() function:
// Validates there has been a entry. 
//////////////////////////////////////////////////////////////////////
function exists(s) {
	if (s == "")
		return 0
	else
		return 1
}

function change(id) {
identity=document.getElementById(id);
document.getElementById("male").className="hide";
document.getElementById("female").className="hide";
	if (identity.className=="hide") {
		identity.className="show";
	} else {
		identity.className="hide";
	}
}

function plainchange(id) {
	identity=document.getElementById(id);
	if (identity.className=="hide") {
		identity.className="show";
	} else {
		identity.className="hide";
	}
}
