function checkRaceDist()
{ 
	var p = getPacerFromForm(); 
	
	if(isNaN(p.baseSpeed))
	{ 
		// This should never happen. 
		dEl("paceError").innerHTML = "<br>Formating is incorrect - please enter a valid race time.";
		return false; 
	} 
	if(p.baseSpeed > 399) // 399 is approx 4:01 adjusted 5K pace, 3:43 mile.
	{ 
		dEl("paceError").innerHTML = "<br>Invalid time for the chosen distance. Please re-enter."; 
		//dEl("paceError").innerHTML = "<br>Given adjusted 5K race pace of " +  timeConvert(p.baseSpeed, false) + "min/mile is too fast - please enter a valid race time."
		return false; 	
	} 
	if(p.baseSpeed < 83) // 83 is approx one hour for a 5K
	{ 
		dEl("paceError").innerHTML = "<br>Invalid time for the chosen distance. Please re-enter."; 
		//var e = "<br>Given asdfasdf 5K race pace of " + timeConvert(p.baseSpeed, false) + "min/mile is too slow - please enter a valid race time."; 		dEl("paceError").innerHTML = e;  
		return false; 
	}
	
	dEl("paceError").innerHTML = ""; 
	return true;  
} 



function doSubmit()
{
	if(!checkRaceDist())
	{ return; } 

	var fd = new Object(); 
	var na = getFormFields()
	for(var i = 0; i < na.length; i++)
	{ fd[na[i]] = document.forms.trainform[na[i]].value; } 
			 
	// Set validity-checked flag
	document.forms.trainform.startf.value = "123xyz"; 
	document.forms.trainform.submit(); 
}


function setFormData()
{ 
	var fd = getValidData(); 
	if(fd == null) { 
	dEl("smartcoachresult").style.display = "none";
	dEl("smartcoachform").style.display = "block";
	return;
	}
	
	for(var k in fd)
	{ 
	   
		if(document.forms.trainform[k])
		{ document.forms.trainform[k].value = fd[k]; } 	
	}  
	
	if(!checkRaceDist())
	{ 
	dEl("smartcoachresult").style.display = "none";
	dEl("smartcoachform").style.display = "block";
	return; 
	} 
	
	dEl("smartcoachresult").style.display = "block";
	dEl("smartcoachform").style.display = "none";
	
   
	
} 

function isMetric()
{ 
	var m = qsParams["metr"]; 
	return m == "km"; 
} 

function getDiffCode(s)
{ 
	var x = s == "main" ? 0 : (s == "mod" ? 1 : (s == "hard" ? 2 : 3)); 
	return x; 
} 

function getDistDispStr(mDist, met)
{ 
	mDist *= met ? 16 : 10; 
	mDist /= 10; 
	var s = met ? " km" : " mi"; 
	return mDist + s; 
} 



/** 
 * Sets the information in the page from data in the object. The object comes 
 * from either cookies or QS. 
 */ 
function setPageData()
{  
	
	dEl("racetime").innerHTML = fullTimeString(dataObj.hour, dataObj.mins, dataObj.secs);  
	dEl("rlenvalue").innerHTML = (new paceSelect()).opts[dataObj["rlen"]];  
	dEl("mpwevalue").innerHTML = (new mpweSelect()).opts[dataObj["mpwe"]];   
	dEl("diffvalue").innerHTML = (new diffSelect()).opts[dataObj["diff"]]; 
 	dEl("rdstvalue").innerHTML = (new trainGoal()).opts[dataObj["rdst"]];  
	dEl("lrdyvalue").innerHTML = (new daySelect()).opts[dataObj["lrdy"]]; 
	
	var nWeeks = Math.round(dataObj["slen"]*1.0);  
	//alert("Monday, " + longDate(startDate));
	dEl("trainstartvalue").innerHTML = "Monday, " + longDate(startDate); 
	dEl("trainendvalue").innerHTML = "Sunday, " + longDate(new Date(startDate.getTime() + (nWeeks*7-1)*24*60*60*1000)); 
	
	dEl("trainlengthvalue").innerHTML = nWeeks + " weeks";

} 

function shortDate(d)
{ 
	var s = d.getDate(); 
	s += "/"; 
	s += d.getMonth()+1; 
	return s; 
} 

function longDate(d)
{ 
	var s = shortDate(d); 
	s += "/"; 
	s += d.getFullYear(); 
	return s; 
} 

/** 
 * Returns true if the given program does not reach an appropriate level for
 * the selected training goal. 
 */ 
function checkWarning(allWeeks)
{ 	
	var mlr = getMaxLR(allWeeks); 
	
	if((dataObj["rdst"] == "mara" && mlr < 14) || (dataObj["rdst"].indexOf("half") != -1 && mlr < 6)) 
	{ 
		dEl("warningText").innerHTML =
		"The RUNNER'S WORLD SmartCoach has provided the training program you selected. " + 
		"However, you have asked for a program that doesn't allow you sufficient time to get in " + 
		"optimal shape. Please consider changing your race plans. If you go ahead with your plan to " + 
		"enter this race, be prepared to run very conservatively."; 		
	} 
}

/** 
 * This function returns the maximum Long Run distance for all the weeks in 
 * a program, with the caveat that the marathon itself is not counted. 
 */ 
function getMaxLR(allWeeks)
{ 
	var mlr = 0; 
	for(var i = 0; i < allWeeks.length; i++)
	{ 
		var lr = allWeeks[i].getLongRun();  
		// Be sure to disregard the marathon itself. 
		if(lr && mlr < lr.dst && lr.dst < 26)
		{ mlr = lr.dst; } 
	} 
	return mlr; 
} 


/**
 * Factory method to obtain scheduler objects. Used in preference to 
 * simple constructor because in the future we might want to return 
 * user-specified training day selections. 
 */ 
function getScheduler()
{ 
	return new defaultScheduler();  
} 

function dw(s) { document.write(s); } 

function getDistDispStr(mDist, met)
{ 
	mDist *= met ? 16 : 10; 
	mDist /= 10; 
	var s = met ? "km" : "mi"; 
	return mDist + s; 
} 

// TODO: must revise for RW pages. 
function goRevise()
{ 
	//var u = "http://10.19.10.60:821/cda/toolsmain";// 0,,s6-2380-0-0,00.html";  
	//u += getQueryStringFromObject(dataObj); 
	//window.location.href = u; 
	dEl("smartcoachform").style.display="block";
	dEl("smartcoachresult").style.display="none";
} 