/*Cookie scripts from: http://www.quirksmode.org */
/*Not used at this moment*/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
/* ------------- */

function Printversion()
{
	if (!status)
	{
		status = true;
		show(1,'step1');
		show(1,'step2');
		show(1,'step3');
		show(1,'cleardetails');
	}
	else
	{
		status = false;
		show(0,'step1');
		show(0,'step2');
		show(0,'step3');
		show(0,'cleardetails');
	}
}


var newwindow;
function poptastic(url)
{
	newwindow=window.open(url,'w'+new Date().getTime(),'height=700,width=800,resizable=yes,status=yes,scrollbars=yes');
	if (window.focus) {newwindow.focus()}
}


function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function stdout(newtext) 
{
	document.forms['diet'].messagebox.value += '\n' + newtext;
}

function do_buttons()
/*activate or deactivate the buttons on load*/
{
	//show(0,'Acid','fattyacid');
	show(1,'IndAcid','indivacids');
	show(1,'LongAcid','longfattyacids');
	show(1,'cholesterol','dietcholselect');
	show(1,'protein','dietprotselect');
	show(1,'totalenergy','totenergy');
	show(0,'totalenergy1');
	show(1,'totalenergy2');
}

function show(flag,id,button)
{
	var x = document.getElementById(id);
	x.style.display = (flag) ? 'none' : 'block';
	
	if (button !== undefined)
	{
		var buttonyes = button+'yes';
		var buttonno = button+'no';
		var x = document.getElementById(buttonyes);
		var y = document.getElementById(buttonno);
		//x.style.background = (flag) ? '#cccccc' : '#eeeeee';
		//x.style.border = (flag) ? '1px outset' : '1px outset';
		x.style.display = (flag) ? 'inline' : 'none';
		//y.style.background = (flag) ? '#eeeeee' : '#cccccc';
		//y.style.border = (flag) ? '1px outset' : '1px outset';
		y.style.display = (flag) ? 'none' : 'inline';
	}
}


function scrollto(anchor)
{
	location.hash = anchor;
}

function ClearResults()
{
	if (document.getElementById("confirm1"))
	{
		var d = document.getElementById("inserthere"); 
		var d_nested = document.getElementById("confirm1"); 
		var throwawayNode = d.removeChild(d_nested);
		var d_nested = document.getElementById("confirm2"); 
		var throwawayNode = d.removeChild(d_nested);
	}
	show(1,'step2');
	show(1,'step3');
	show(1,'details');
}

function changeindfats(unit)
{
	/*This should be done with a cleaner code!*/
	document.forms['diet'].unit_C10.value = unit;
	document.forms['diet'].unit_C12.value = unit;
	document.forms['diet'].unit_C14.value = unit;
	document.forms['diet'].unit_C16.value = unit;
	document.forms['diet'].unit_C18.value = unit;
	//document.forms['diet'].unit_other.value = unit;
}

function NeedMore(entity,unit)
/*Checks if more info is needed, depending on the units selected
Returns true or false */
{
	for (x in initdiet[entity])
	{
		//srch = 'unit_' + initdiet[entity][x].name;
		srch = 'unit_' + x;
		if ((document.forms['diet'][srch].value == unit) && (document.getElementById(entity).style.display !== 'none')) 
		{
			return(true);
		}
	}
}

function UnitFat(group,unit)
/*changes the units in a group to the unit of the first item*/
{
	for (x in initdiet[group])
	{
		if (x!=='name')
		{
			dst = "unit_"+x;
			document.forms['diet'][dst].value = unit;
		}
	}
}

function runcheck(value)
{
	/*Take away old results*/
	ClearResults();
	
	/*Change all units in the same group to the first unit selected*/
	if (value == 'satfatacid')
	{
		var unit_satfatacid = document.forms['diet'].unit_satfatacid.value;
		UnitFat('SatFatAcid',unit_satfatacid);
	}
	if (value == 'C8')
	{
		var unit_C8 = document.forms['diet'].unit_C8.value;
		UnitFat('IndAcid',unit_C8);
	}
/*Als voor de Unit van total fat' g/d wordt geselecteerd
      moet ook 'total energy' ingevuld worden*/
	if (value == 'totalfat')
	{
		var unit_satfat = document.forms['diet'].unit_satfatacid.value;
		var unit_totalfat = document.forms['diet'].unit_totalfat.value;
		if (unit_totalfat=='gpd') 
		{
			for (x in diets)
			/*Put it in macronutrients as well*/
			{
				src = 'totalfat'+x;
				dst = 'TotalFat'+x; 
				document.forms['diet'][dst].value = document.forms['diet'][src].value;
			}
			show(0,'totalenergy');
		}
		else 
		{
			show(1,'totalenergy');
		}
	}
	if (value == 'dietprotein')
	{
		/*If dietary protein has been filled in, put it in macronutrients as well*/
		var unit_dietprotein = document.forms['diet'].unit_dietprotein.value;
		if (unit_dietprotein == 'gpd')
		{
			for (x in diets)
			/*Put it in macronutrients as well*/
			{
				src = 'dietprotein'+x;
				dst = 'Protein'+x;
				document.forms['diet'][dst].value = document.forms['diet'][src].value;
			}
			/*Hier moet nog iets komen met uitklappen van totalenergy?*/
		//document.forms['diet'].unit_Protein.value = document.forms['diet'].unit_dietprotein.value;
		}
	}
	totalfat = false;
	/*If any of the fats results true for the unit as gpd...*/
	totalfat = totalfat | NeedMore('SatFatAcid','gp100g');
	totalfat = totalfat | NeedMore('Acid','gp100g');
	totalfat = totalfat | NeedMore('IndAcid','gp100g');
	totalfat = totalfat | NeedMore('LongAcid','gp100g');
	
	if (totalfat)
	/*... make totalfat available*/
	{
		show(0,'totalfat');
	}
	else 
	{
		show(1,'totalfat');
		show(1,'totalenergy');	
	}
	
	totalenergy = false;
	totalenergy = totalenergy | NeedMore('SatFatAcid','gpd');
	totalenergy = totalenergy | NeedMore('Acid','gpd');
	totalenergy = totalenergy | NeedMore('IndAcid','gpd');
	totalenergy = totalenergy | NeedMore('protein','gpd');
	totalenergy = totalenergy | NeedMore('totalfat','gpd');
	if (totalenergy)
	{
		show(0,'totalenergy');
	}
	else 
	{
		show(1,'totalenergy');
	}
}

function row(group)
{
	var c = 0;
	for (x in initdiet[group])
	{
		c++;
	}
	tabindex_factor = c;
	for (entity in initdiet[group])
	{
		if (initdiet[group][entity].description)
		{
			tabindex++;
			document.write('<tr><td></td><td class="name">'+ initdiet[group][entity].description +'</td>');
			//for (var x = 0; x < diets.length ; x++)
			for (diet in diets)
			{
				value = diets[diet][group][entity].value;
				if (isNaN(value)) {value = 0;}
				tabindex_out = parseInt(tabindex) + (parseInt(tabindex_factor) * parseInt(diet));
				name = diets[diet][group][entity].name;
				/*next lines have been replaced for disabled tabindex*/
				/*document.write('<td><input tabindex="'+tabindex_out+'" class="value" value="'+value+'" id='
				+ name + diet +' name='
				+ name +' onchange="runcheck(\''+name+'\')"/>');*/
				document.write('<td><input class="value" value="'+value+'" id='
				+ name + diet +' name='
				+ name +' onclick="this.select()" onchange="runcheck(\''+name+'\')"/>');
			}
			tabindex_out = parseInt(tabindex) + (parseInt(tabindex_factor) * (parseInt(diet)+1));
			document.write('<td><select tabindex="'+tabindex_out+'" class="unit" name="unit_' + name +'" id="unit_' + name +'" onchange="runcheck(\''+name+'\')">');
			for (y in initdiet[group][entity].units)
			{
				name = initdiet[group][entity].units[y].name;
				code = initdiet[group][entity].units[y].code;
				document.write("<option  value="+ code +">"+ name +"</option>");
			}
			document.write("</select></td></tr>")
		}
	}
	tabindex = tabindex_out;
}

function addtostring_old(s,string)
/*obsolete*/
{
	s = s+string;
	return(s);
}

function intovars(group)
{
	for (diet in diets)
	{
		for (entity in diets[diet][group])
		{
			if (entity !== 'name')
			{
				/*Eerst de waarden (mits ingevuld)*/
				srch = diets[diet][group][entity].name + diet;
				if (!isNaN(document.forms['diet'][srch].value))
				{
					diets[diet][group][entity].value = document.forms['diet'][srch].value;
				}
				/*If no value given, variable gets NaN*/
				else 
				{
						diets[diet][group][entity].value = NaN;
				}
				/*Dan de units, alleen voor de initdiet*/
				srch = 'unit_' + initdiet[group][entity].name;
				unit = document.forms['diet'][srch].value;
				initdiet[group][entity].unit = unit;
			}
		}
	}
}

function sumIndAcids()
/*This is bogus I think. Disabled on june 29 07 -tilt- */
/*Sums the (converted) values of individual acids to one value for satfatacid*/
{
	node = document.getElementById('IndAcid');
	if ((node) && (node.style.display == 'block'))
	{
		sumindacids = 'true';
		for (diet in diets)
		{
			sum = 0;
			for (entity in diets[diet].IndAcid)
			{
				value = parseInt(diets[diet].IndAcid[entity].value);
				sum += value; 
			}
			if ((sum!==0) && (sum!==100))
			{
				//alert('You entered individual fatty acids.\n Their total value should be 100 but is '+sum);
			}
			diets[diet].SatFatAcid.satfatacid.value = sum;
			//stdout(sum);
		}
	}
	else 
	{
		sumindacids = 'false';
	}
}

function convertTotalEnergy()
/*Converts the totalenergy to Calories*/
{
	node = document.getElementById('totalenergy2');
	if ((node) && (node.style.display == 'block'))
	/*if macronutrients are used:*/
	{
		/* Get a value from macronutrients */
		for (diet in diets)
		{
			Fatvalue 	= diets[diet].totalenergy2.TotalFat.value * constants['AtwaterFat'];
			diets[diet].totalenergy2.TotalFat.value = Fatvalue;
			
			Protvalue 	= diets[diet].totalenergy2.Protein.value * constants['AtwaterProt'];
			diets[diet].totalenergy2.Protein.value = Protvalue;
			
			Carbvalue 	= diets[diet].totalenergy2.TotalCarb.value * constants['AtwaterCarb'];
			diets[diet].totalenergy2.TotalCarb.value = Carbvalue;
			
			Alcvalue 	= diets[diet].totalenergy2.Alcohol.value * constants['AtwaterAlc'];
			diets[diet].totalenergy2.Alcohol.value = Alcvalue;
			
			energyout = Fatvalue + Protvalue + Carbvalue + Alcvalue;
			diets[diet].totalenergy1.TotalEnergy.value = energyout;
		}
		initdiet.totalenergy2.TotalFat.unit = 'calpd';
		initdiet.totalenergy2.Protein.unit = 'calpd';
		initdiet.totalenergy2.TotalCarb.unit = 'calpd';
		initdiet.totalenergy2.Alcohol.unit = 'calpd';
		initdiet.totalenergy1.TotalEnergy.unit = 'calpd';
	}
	else
	/*if the normal total energy is filled in:*/
	{
		unit = initdiet.totalenergy1.TotalEnergy.unit;
		/*Do we have a direct value for totalenergy?*/
		if (unit == 'calpd')
		{
			/*no conversion needed*/
		}
		else if (unit == 'mjpd')
		{
			for (diet in diets)
			{
				energyout = diets[diet].totalenergy1.TotalEnergy.value;
				energyout = 1000 * (energyout/constants['KcalKJ']);
				diets[diet].totalenergy1.TotalEnergy.value = energyout;
			}
			initdiet.totalenergy1.TotalEnergy.unit = 'calpd';
		}
		else if (unit == 'kjpd')
		{
			for (diet in diets)
			{
				energyout = diets[diet].totalenergy1.TotalEnergy.value;
				energyout = energyout/constants['KcalKJ'];
				diets[diet].totalenergy1.TotalEnergy.value = energyout;
			}
		}
		initdiet.totalenergy1.TotalEnergy.unit = 'calpd';
		/*Now check for zero values in total energy*/
		zeroEnergy = 'false';
		for (diet in diets)
		{
			if (diets[diet].totalenergy1.TotalEnergy.value == 0)
			{
				zeroEnergy = 'true';
			}
		}
		
		if ((zeroEnergy == 'true') && (document.getElementById("totalenergy").style.display == 'block')) 
		{
			alert("One or more of the values of total energy returned zero. This can cause a division by zero.")
		}
	}
}


function convert()
/*Convert the values to en%*/
{
	/*Loop door alle rijen heen*/
	for (group in initdiet)
	{
		for (entity in initdiet[group])
		{
			unit = initdiet[group][entity].unit;
			
			/*Als we een gp100g vinden moet er wat gebeuren*/
			if ((unit == 'gp100g') && ((group == 'SatFatAcid') || (group == 'Acid') || (group == 'IndAcid')))
			{
				/*voor ALLE dieten*/
				for (diet in diets)
				{
					value = diets[diet][group][entity].value;
					totalfat = diets[diet].totalfat.totalfat.value;
					totalfat_unit = initdiet.totalfat.totalfat.unit;
					if (totalfat_unit == 'en%')
					{
						diets[diet][group][entity].value = (value * totalfat)/100;
						initdiet[group][entity].unit = 'en%';
					}
					else if (totalfat_unit == 'gpd')
					{
						totenergy = diets[diet].totalenergy1.TotalEnergy.value;
						if (!totenergy) {break;}
						value = (value * totalfat)/100;
						value = (value * constants['AtwaterFat']);
						value = (value * 100/totenergy);
						diets[diet][group][entity].value = value;
						initdiet[group][entity].unit = 'en%';
					}
				}
			}
			else if ((unit == 'gpd') && ((group == 'SatFatAcid') || (group == 'Acid') || (group == 'IndAcid')))
			{
				for (diet in diets)
				{
					value = diets[diet][group][entity].value;
					totenergy = diets[diet].totalenergy1.TotalEnergy.value;
					//if (!totenergy) {alert('Missing total energy!');break;}
					value = value * constants['AtwaterFat'];
					value = value * 100/totenergy;
					diets[diet][group][entity].value = value;
					initdiet[group][entity].unit = 'en%';
				}
			}
			else if ((unit == 'mgpkc') && (group == 'cholesterol'))
			{
				/*do nothing*/
			}
			else if ((unit == 'mgpmj') && (group == 'cholesterol'))
			{
				for (diet in diets)
				{
					value = diets[diet][group][entity].value;
					value = value/constants['KcalKJ'];
					diets[diet][group][entity].value = value;
					initdiet[group][entity].unit = 'mgpkc';
				}
			}
			else if ((unit == 'mgpkj') && (group == 'cholesterol'))
			{
				for (diet in diets)
				{
				value = diets[diet][group][entity].value;
				value = 1000 * value/constants['KcalKJ'];
				diets[diet][group][entity].value = value;
				initdiet[group][entity].unit = 'mgpkc';
				}
			}
			else if ((unit == 'mgpd') && (group == 'cholesterol'))
			{
				for (diet in diets)
				{
				/*Do nothing*/
				/*
				value = diets[diet][group][entity].value;
				totenergy = TotalEnergy(diet);
				if (!totenergy) {break;}
				value = 1000 * value/totenergy;
				diets[diet][group][entity].value = value;
				initdiet[group][entity].unit = 'mgpkc';
				*/
				}
			}
			else if ((unit == 'en%')  && (group == 'protein'))
			{
				/*do nothing*/
			}
			else if ((unit == 'gpd') && (group == 'protein'))
			{
				for (diet in diets)
				{
				value = diets[diet][group][entity].value;
				totenergy = diets[diet].totalenergy1.TotalEnergy.value;
				if (!totenergy) {break;}
				value = value * constants['AtwaterProt'];
				value = 100 * value/totenergy;
				diets[diet][group][entity].value = value;
				initdiet[group][entity].unit = 'en%';
				}
			}
		}
	}
/*End of Convert the values to en%*/
}

function clearvars(entity)
{
	for (u in diets)
	{
		for (v in diets[u][entity])
		{
			diets[u][entity][v].value = NaN;
		}
	}
}

function ResumeIntostring(group)
{
	for (entity in initdiet[group])
	{
		name = initdiet[group][entity].name;
		description = initdiet[group][entity].description;
		unit = initdiet[group][entity].unit;
		
		/*If no unit description is present, we take the code*/
		unit_long = unit;
		
		for (z in initdiet[group][entity].units)
		{
			/*Look for a unit description*/
			if (initdiet[group][entity].units[z].code == unit)
			{
				unit_long = initdiet[group][entity].units[z].name;
			}
		}
		mycurrent_row = document.createElement('tr');
		Cell(description);
		//s = addtostring(s,'<tr><td>'+description+'</td>');
		for (diet in diets)
		{
			value = diets[diet][group][entity].value;
			value = Math.round(10*value)/10;
			//s= addtostring(s,'<td width="50px" align="right">'+value+'</td>');
			Cell(value);
		}
		Cell(unit_long);
		mycurrent_body.appendChild(mycurrent_row);
		//s = addtostring(s,'<td>&nbsp;&nbsp;</td><td>'+unit_long+'</td></tr>');
	}
}

function resume()
{
	/*Take away old results*/
	ClearResults();
	
	/*First check for the names.*/
	for (diet in diets)
	{
		srch = 'dietname' + (parseInt(diet) + 1);
		diets[diet].name = document.forms['diet'][srch].value;
	}
	theTable = document.createElement('table');
	theTable.setAttribute("id","confirm1");
	theTable.setAttribute("style","float:left");
	block = document.getElementById('inserthere');
	block.appendChild(theTable);
	
	theTable.setAttribute("border",2); 
	theTable.setAttribute("frame","hsides"); 
	theTable.setAttribute("rules","groups");
	/*Colgroup(span,id)*/
	Colgroup(1);
	cols = diets.length;
	Colgroup(cols);
	Colgroup(1);
	
	mycurrent_head = document.createElement("thead");
	mycurrent_row = document.createElement("tr");
	Cell('<b>Your input</b>');
	for (diet in diets)
	{
		Cell(diets[diet].name); 
	}
	mycurrent_head.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_head);
	
	mycurrent_body = document.createElement("tbody");
	for (group in initdiet)
	{
		node = document.getElementById(group);
		if ((node) && (node.style.display != 'none'))
		{
			intovars(group);
			/*Put vars into string (s)*/
			ResumeIntostring(group);
		}
		else
		{
			clearvars(group);
		}
	}
	theTable.appendChild(mycurrent_body);
	
	theTable = document.createElement('table');
	theTable.setAttribute("id","confirm2");
	block = document.getElementById('inserthere');
	block.appendChild(theTable);
	
	theTable.setAttribute("border",2); 
	theTable.setAttribute("frame","hsides"); 
	theTable.setAttribute("rules","groups");
	/*Colgroup(span,id)*/
	Colgroup(1);
	Colgroup(3);
	Colgroup(1);
	
	mycurrent_head = document.createElement("thead");
	mycurrent_row = document.createElement("tr");
	Cell('<b>Calculated from your input</b>');
	for (diet in diets)
	{
		Cell(diets[diet].name); 
	}
	mycurrent_head.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_head);
	
	/*Now convert all vars into the correct units*/
	
	convertTotalEnergy()
	convert();
	
	/*Now check for zero values in total fat*/
		zeroFat = 'false';
		for (diet in diets)
		{
			if (diets[diet].totalfat.totalfat.value == 0)
			{
				zeroFat = 'true';
			}
		}
		
		if ((zeroFat == 'true') && (document.getElementById("totalfat").style.display == 'block')) 
		{
			alert("One or more of the values of total fat returned zero. This can cause a division by zero.")
		}
	
	/*If individual fatty acids are used, calculate a satfatacid value for them*/
	//That makes no sense I think!
	//sumIndAcids();
	/*and redo the string creation with all these values%*/
	mycurrent_body = document.createElement("tbody");
	for (group in initdiet)
	{
		node = document.getElementById(group);
		if ((node) && (node.style.display != 'none'))
		{
			ResumeIntostring(group);
		}
		else
		{
			//clearvars(group);
		}
	}
	/*Append totalenergy info if needed*/
	node = document.getElementById('totalenergy2');
	if ((node) && (node.style.display != 'none'))
	{
		ResumeIntostring('totalenergy1');
	}
	
	theTable.appendChild(mycurrent_body);
	/*some layout*/
	//THIS SHOULD BE DONE NICER!!!
	mycell = get_Cell("confirm1",0,1);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	mycell = get_Cell("confirm1",0,2);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	mycell = get_Cell("confirm1",0,3);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	mycell = get_Cell("confirm2",0,1);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	mycell = get_Cell("confirm2",0,2);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	mycell = get_Cell("confirm2",0,3);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("width","50px");
	
	
	show(0,'step2');
	scrollto('anchor_step2');
}


function Value(diet,entity)
{
	for (group in diets[diet])
	{
		for (t in diets[diet][group])
		{
			if (entity == t)
				{value = diets[diet][group][entity].value;}
		}
	}
	if (isNaN(value))
	{
		value = 0;
	}
	return(value);
}

function Step3Calculate(coeffname,diet_x,diet_y)
{
	var sum = 0;
	delete(x);
	for (x in coeff[coeffname])
	{
		if (x == 'Cholesterol')
		/*Cholesterol needs a different calculation*/
		{
			number = coeff[coeffname][x] * ((Value(diet_y,x) - Value(diet_x,x))/100);
			sum	+= number;
		}
		else
		{
			number = coeff[coeffname][x] * (Value(diet_y,x) - Value(diet_x,x));
			sum	+= number;
		}
	}
	//stdout(x+coeff[coeffname][x]);
	return(sum); 
}

function fill_levels()
{
	/*Fill in predefined blood levels*/
	person = document.forms['calculate'].person.value;
	for (lipid in persons[person].lipids)
	{
		srch_level = lipid + '_init';
		srch_unit = lipid +'_unit';
		document.forms['calculate'][srch_level].value = persons[person].lipids[lipid];
		document.forms['calculate'][srch_unit].value = "mgpdl";
		
	}
	document.forms['calculate'].Ratio_init.value = persons[person].ratio.Ratio;
	for (apoprotein in persons[person].apoproteins)
	{
		srch_level = apoprotein + '_init';
		srch_unit = apoprotein +'_unit';
		document.forms['calculate'][srch_level].value = persons[person].apoproteins[apoprotein];
		document.forms['calculate'][srch_unit].value = "mgpdl";
	}
	//step3();
}

function start_step3()
{
	show(0,'step3');
	scrollto('anchor_step3');
	for (diet in diets)
	/*populate diet selections*/
	{
		document.forms['calculate'].initdiet.options[diet] = new Option(diets[diet].name,diet);
		document.forms['calculate'].compdiet.options[diet] = new Option(diets[diet].name,diet);
	}
	document.forms['calculate'].compdiet.options[1].selected = true;
	fill_levels();
	step3();
}

function convert_level(unit,item)
/*Changes the level values when switching from unit*/
{	
	srch_initlevel = item+'_init';
	srch_hidden = item+'_hiddeninit';
	
	
	/*Put original in hidden if no hidden is defined*/
	if (!document.forms['calculate'][srch_hidden].value)
	{
		document.forms['calculate'][srch_hidden].value =document.forms['calculate'][srch_initlevel].value;
	}
	
	if ((unit == 'mgpdl') && ((item == 'TotChol') || (item == 'LDL') || (item == 'HDL') || (item == 'Trig')))
	{
	 	if (item == 'Trig')
		{
			output_init = document.forms['calculate'][srch_initlevel].value * (constants['MolwtTrig']/10);
		}
		else
		{
			output_init = document.forms['calculate'][srch_initlevel].value * (constants['MolwtChol']/10);
		}
	}
	else if (unit == 'mmolpl')
	{
		if (item == 'Trig')
		{
			output_init = document.forms['calculate'][srch_initlevel].value * (10/constants['MolwtTrig']);
		}
		else
		{
			output_init = document.forms['calculate'][srch_initlevel].value * (10/constants['MolwtChol']);
		}
	}
	else if ((unit == 'mgpdl') && ((item == 'ApoA') || (item == 'ApoB')))
	{
		output_init = document.forms['calculate'][srch_initlevel].value / 10;
	}
	else if (unit == 'mgpl')
	{
		output_init = document.forms['calculate'][srch_initlevel].value * 10;
	}
	document.forms['calculate'][srch_initlevel].value = output_init.toFixed(3);
	document.forms['calculate'][srch_hidden].value = output_init;
}

function step3()
{
	diet_x = document.forms['calculate'].initdiet.value;
	diet_y = document.forms['calculate'].compdiet.value;
	
	for (coeffname in coeff)
	{
		value = Step3Calculate(coeffname,diet_x,diet_y);
		document.forms['calculate'][coeffname].value = value.toPrecision(2);
	}
	
	for (item in results['lipids'])
	{
		/*First put the result into the results array*/
		results['lipids'][item].value = document.forms['calculate'][item].value;
		
		srch_newlevel = item+'_new';
		srch_initlevel = item+'_init';
		srch_unit = item+'_unit';
		if (document.forms['calculate'][srch_unit].value == 'mgpdl')
		{
			/*Convert to mg per dl*/
			if (item == 'Trig')
			{
				output = results['lipids'][item].value * constants['MolwtTrig']/10;
			}
			else
			{
				output = results['lipids'][item].value * constants['MolwtChol']/10;
			}
			document.forms['calculate'][item].value = output.toFixed(1);
		}
		else
		{
			/*Show in mmol per litre (default)*/
			output = parseFloat(results['lipids'][item].value);
			
			document.forms['calculate'][item].value = output.toFixed(2);
		}
		val1 = parseFloat(document.forms['calculate'][item].value);
		val2 = parseFloat(document.forms['calculate'][srch_initlevel].value);
		result = val1 + val2;
		if (isNaN(result)) 
		{
			result = '?';
		}
		else
		{
			result = result.toFixed(2);
		}
		document.forms['calculate'][srch_newlevel].value = result;
	}
	
	for (item in results['ratio'])
	{
		/*First put the result into the results array*/
		results['ratio'][item].value = document.forms['calculate'][item].value;
		
		srch_newlevel = item+'_new';
		srch_initlevel = item+'_init';
		val1 = parseFloat(document.forms['calculate'][item].value);
		val2 = parseFloat(document.forms['calculate'][srch_initlevel].value);
		result = val1 + val2;
		if (isNaN(result)) 
		{
			result = '?';
		}
		else
		{
			result = result.toFixed(1);
		}
		document.forms['calculate'][srch_newlevel].value = result;	
	}
	
	
	for (item in results['apoproteins'])
	{
		/*First put the result into the results array*/
		results['apoproteins'][item].value = document.forms['calculate'][item].value;
	
		srch_newlevel = item+'_new';
		srch_initlevel = item+'_init';
		srch_unit = item+'_unit';
		if (document.forms['calculate'][srch_unit].value == 'mgpdl')
		{
			/*Convert to mg per dl*/
			result = results['apoproteins'][item].value/10;
			document.forms['calculate'][item].value = result.toFixed(1);
		}
		else
		{
			/*Show in mg per litre (default)*/
			result = results['apoproteins'][item].value;
			result = parseFloat(result);
			document.forms['calculate'][item].value = result.toFixed(1);
		}
		val1 = parseFloat(document.forms['calculate'][item].value);
		val2 = parseFloat(document.forms['calculate'][srch_initlevel].value);
		result = val1 + val2;
		if (isNaN(result)) 
		{
			result = '?';
		}
		else
		{
			result = result.toFixed(1);
		}
		document.forms['calculate'][srch_newlevel].value = result;
	}
}

function Cell(content)
{
	mycurrent_cell 	= document.createElement("td");
	mycurrent_cell.innerHTML = content;
	mycurrent_row.appendChild(mycurrent_cell);
}

function Colgroup(span)
{
	colgroup = document.createElement('colgroup');
	colgroup.setAttribute("span",span);
	theTable.appendChild(colgroup);
}

function get_Cell(table, row, column)
{
	mytable = document.getElementById(table);
	rows = mytable.getElementsByTagName('tr');
	cells = rows[row].getElementsByTagName('td');
	mycell = cells[column];
	return(mycell);
}


function showdetails()
/*This function can be done a lot better!*/
{
	/*Clear old table*/
	RemoveDetails();
	/*Check what diets are being compared*/
	diet_x = document.forms['calculate'].initdiet.value;
	diet_x_name = diets[diet_x].name;
	diet_y = document.forms['calculate'].compdiet.value;
	diet_y_name = diets[diet_y].name;
	
	theTable = document.createElement('table');
	theTable.setAttribute("id","details_table");
	block = document.getElementById('detailsblock');
	block.appendChild(theTable);
	
	
	
	/*Colgroup(span)*/
	Colgroup(1);
	Colgroup(3);
	Colgroup(4);
	Colgroup(1);
	Colgroup(2);
	
	theTable.setAttribute("border",2); 
	theTable.setAttribute("frame","hsides"); 
	theTable.setAttribute("rules","groups");
	
	mycurrent_head = document.createElement('thead');
	mycurrent_row  	= document.createElement('tr');
	Cell('');
	Cell('Diets');
	Cell('Change in blood lipids and lipoproteins');
	mycurrent_head.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_head);
	
	mycurrent_head = document.createElement('thead');
	mycurrent_row  	= document.createElement('tr');
	Cell('');
	Cell('');
	Cell('');
	Cell('');
	Cell('mmol/l <img alt="info" src="./info_small.ong" onmouseover="show(0,&quot;help_details_2&quot;)" onmouseout="show(1,&quot;help_details_2&quot;)">');
	Cell('Ratio');
	Cell('mg/l');
	mycurrent_head.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_head);
	
	mycurrent_head = document.createElement('thead');
	mycurrent_row  	= document.createElement('tr');
	Cell('');
	Cell(diet_x_name);
	Cell(diet_y_name);
	Cell('&Delta;');
	for (result in results)
	{
		for (x in results[result])
		{
		name = results[result][x].name;
		Cell("&Delta;"+name);
		}
	}
	mycurrent_head.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_head);
	
	/*Contents part of table*/
	mycurrent_body = document.createElement('tbody');
	
	for (group in initdiet) 
	{
		if ((group != 'totalfat') && (group != 'totalenergy1') && (group != 'totalenergy2'))
		{
			for (entity in initdiet[group])
			{
				val_x =  parseFloat(diets[diet_x][group][entity].value);
				val_y =  parseFloat(diets[diet_y][group][entity].value);
				if (!isNaN(val_x))
				{
					mycurrent_row  	= document.createElement("tr");
					content = initdiet[group][entity].name;
					unit = initdiet[group][entity].unit;
					Cell(content+" ("+unit+")");
					Cell(val_x.toFixed(2));
					Cell(val_y.toFixed(2));
					diff = (val_y-val_x);
					Cell(diff.toFixed(2));
					for (result in results)
					{
						for (x in results[result])
						{
							if (entity == 'Cholesterol')
							{
								output = (coeff[x][entity]* (val_y - val_x)/100);
							}
							else
							{
							output = (coeff[x][entity]* (val_y - val_x));
							}
							if (!isNaN(output))
								{
								Cell(output.toFixed(2)) ;
								}
						}
					}
					mycurrent_body.appendChild(mycurrent_row);
				}
			}
		}
	}
	theTable.appendChild(mycurrent_body);
	
	mycurrent_body 	= document.createElement("tbody");
	mycurrent_row  	= document.createElement("tr");
	Cell("Totals");
	Cell("");
	Cell("");
	Cell("");
	for (group in results)
	{
		for (result in results[group])
		{
			Cell("");
		}
	}
	mycurrent_body.appendChild(mycurrent_row);
	theTable.appendChild(mycurrent_body);
	
	/*Rows.length gives the amount of rows in the table*/
	rows = theTable.getElementsByTagName("tr");
	
	/*Doing layout*/
	mycell = get_Cell("details_table",0,1);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("colspan","3");
	
	mycell = get_Cell("details_table",0,2);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("colspan","7");
	
	mycell = get_Cell("details_table",1,4);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("colspan","4");
	
	mycell = get_Cell("details_table",1,5);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("colspan","1");
	
	mycell = get_Cell("details_table",1,6);
	mycell.style.fontWeight = "bold";
	mycell.setAttribute("align","center");
	mycell.setAttribute("colspan","2");
	
	/*Adding totals*/
	row = rows.length -1;
	column = 4;
	
	mycell = get_Cell("details_table",row,0);
	mycell.style.fontWeight = "bold";
	
	for (group in results)
	{
		for (result in results[group])
		{
			mycell = get_Cell("details_table",row,column);
			column++;
			value =  parseFloat(results[group][result].value);
			mycell.innerHTML = value.toFixed(2);
		}
	}
	
	/*showtime!*/
	show(0,'details');
	scrollto('anchor_details');
}

function RemoveDetails()
{
	if (document.getElementById("details_table"))
	{
		var d = document.getElementById("detailsblock"); 
		var d_nested = document.getElementById("details_table"); 
		var throwawayNode = d.removeChild(d_nested);
	}
	show(1,'details');
}
