// variables used in CalculateVO2max()
var dist = 0;
var distUnit = 0;
var hour = 0;
var min = 0;
var sec = 0;
var VO2 = 0;
var percentMax = 0;
var VO2max = 0;
var velocity = 0;
var easyPace = 0;
var thresholdPace = 0;
var intervalPace = 0;
var repPace = 0;

// calculateTrainPace()
// Written by Ryan Hill
// Revision History:
//  3/23/2001     Ryan Hill
//                -created
function calculateTrainPaces()
{
	dist = eval (document.trainPaceCalc.dist.value);
	distUnit = document.trainPaceCalc.distUnits.value;
	hour = eval (document.trainPaceCalc.hours.value);
	min = eval (document.trainPaceCalc.mins.value);
	sec = eval (document.trainPaceCalc.secs.value);

	if (distUnit == 'k')
	{
		dist = dist * 1000;
	}
	else if (distUnit == 'm')
	{
		dist = dist * 1609;
	}
	// If hour is blank or not a number, use 0
//	if (isNAN (hour))
//	{
//		hour = 0;
//	}
	min = min + (hour * 60) + (sec / 60);
	velocity = dist / min;
	
	// Calculations
	VO2 = -4.60 + (0.182258 * velocity) + (0.000104 * (velocity * velocity));
	percentMax = 0.8 + 0.1894393 * Math.exp (-0.012778 * min)
	             + 0.2989558 * Math.exp (-0.1932605 * min);
	VO2max = VO2 / percentMax;

	// Format for output
	VO2 = (Math.round (VO2 * 100)) / 100;
	percentMax = (Math.round (percentMax * 1000)) / 10;
	VO2max = (Math.round (VO2max * 100)) / 100;
	
	// Calculate training paces
	easyPace = vo2ToPace (VO2max * 0.7);
	thresholdPace = vo2ToPace (VO2max * 0.88);
	intervalPace = vo2ToPace (VO2max * .973);
	repPace = vo2ToPace (VO2max * 1.091);

	// Display results
//	document.VO2maxCalc.VO2.value = VO2;
//	document.VO2maxCalc.percentMax.value = percentMax;
//	document.VO2maxCalc.VO2max.value = VO2max;
	document.trainPaceCalc.easyMile.value = buildTime ((60 / easyPace) * 1609);
	document.trainPaceCalc.easyKilo.value = buildTime ((60 / easyPace) * 1000);
	document.trainPaceCalc.thresholdMile.value = buildTime ((60 / thresholdPace) * 1609);
	document.trainPaceCalc.threshold400.value = buildTime ((60 / thresholdPace) * 400);
	document.trainPaceCalc.interval400.value = buildTime ((60 / intervalPace) * 400);
	document.trainPaceCalc.intervalKilo.value = buildTime ((60 / intervalPace) * 1000);
	document.trainPaceCalc.rep200.value = buildTime ((60 / repPace) * 200);
	document.trainPaceCalc.rep400.value = buildTime ((60 / repPace) * 400);
}

// variables used in calculateTime()
var dist1 = 0;
var dist2 = 0;
var dist1unit = 0;
var dist2unit = 0;
var hour1 = 0;
var hour2 = 0;
var min1 = 0;
var min2 = 0;
var sec1 = 0;
var sec2 = 0;

// calculateTime()
// Revision History:
//                -bug fix: calculate original minutes, then seconds.
//                 For some reason, calculating secs = secs + (mins*60) + (hrs*360)
//                 doesn't work
function calculateTime()
{
	dist1 = eval(document.raceCalc.dist1.value);
	dist2 = eval(document.raceCalc.dist2.value);
	hour1 = eval(document.raceCalc.hours1.value);
	min1 = eval(document.raceCalc.mins1.value);
	sec1 = eval(document.raceCalc.secs1.value);
	dist1unit = document.raceCalc.dist1units.value;
	dist2unit = document.raceCalc.dist2units.value;
	
	if (dist1unit == 'k' && dist2unit == 'm')
	{
		dist2 = milesToKilos(dist2);
	}
	else if (dist1unit == 'm' && dist2unit == 'k')
	{
		dist1 = milesToKilos(dist1);
	}
//	if (isNAN (hour1))
//	{
//		hour1 = 0;
//	}

	min1 = min1 + (hour1 * 60);
	sec1 = sec1 + (min1 * 60);
	sec2 = Math.floor(sec1 * (Math.pow((dist2 / dist1), 1.06)));

	document.raceCalc.time2.value = buildTime (sec2);
}

// updateKilos()
//                -created
function updateKilos()
{
	document.distConvert.Kilos.value = milesToKilos (document.distConvert.Miles.value);
}

// updateMiles()
//                -created
function updateMiles()
{
	document.distConvert.Miles.value = kilosToMiles (document.distConvert.Kilos.value);
}

// milesToKilos(miles)
// Return value: kilos
//
function milesToKilos(miles)
{
	return (Math.round(1.609 / 1 * miles * 1000)) / 1000;
}

// kilosToMiles(kilos)
// Return value: miles
//
function kilosToMiles(kilos)
{
	return (Math.round(1 / 1.609 * kilos * 1000)) / 1000;
}

// vo2ToPace(vo2Val)
// Return value: pace (sec/m)
// Takes a VO2 measurement and converts it to a pace (sec/m)
//
function vo2ToPace(vo2Val)
{
	return (29.54 + 5.000663 * vo2Val - 0.007546 * vo2Val * vo2Val);
}

// buildTime(time)
// Return value: time (hh:mm:ss or mm:ss format)
// Takes a time in seconds and converts it to time in hh:mm:ss or mm:ss format
//
function buildTime(time)
{
	var timeHour;
	var timeMin;
	var timeSec;

	timeSec = time;
	timeMin = Math.floor(timeSec / 60);
	timeSec = Math.round(timeSec - (timeMin * 60));
	if (timeSec < 10)
		timeSec = "0" + timeSec;
	
	timeHour = Math.floor(timeMin / 60);
	timeMin = timeMin - (timeHour * 60);
	if (timeMin < 10)
		timeMin = "0" + timeMin;

	if (timeHour > 0)
	{
		return timeHour + ":" + timeMin + ":" + timeSec;
	}
	else
	{
		return timeMin + ":" + timeSec;
	}
}
