// CONSTANTS
option = 1;
final_p_km = "";
final_p_m = "";
count = 0;
error_P = "Please enter the Pace correctly";
error_D = "Please enter the distance correctly";
error_T = "Please enter the time correctly";

// FUNCTION - switch tabs
function Show(choice)
{
	document.getElementById('timeTab').style.display = '';
	document.getElementById('distTab').style.display = '';
	document.getElementById('paceTab').style.display = '';
	Msg = new Array();
	Msg[1] = "Calculate your running pace."
	Msg[2] = "Calculate the distance run";
	Msg[3] = "Calculate the time run";

	if(choice == 1)
{
		document.getElementById('HOne').className='tabselected';
		document.getElementById('HThree').className='tabnormal';
		document.getElementById('HTwo').className='tabnormal';
		document.getElementById('paceTab').style.display = 'none';
}

	if(choice == 2)
	{
		document.getElementById('HTwo').className='tabselected';
		document.getElementById('HOne').className='tabnormal';
		document.getElementById('HThree').className='tabnormal';
		document.getElementById('distTab').style.display = 'none';
	}

	if(choice == 3)
	{
		document.getElementById('HThree').className='tabselected';
		document.getElementById('HOne').className='tabnormal';
		document.getElementById('HTwo').className='tabnormal';
		document.getElementById('timeTab').style.display = 'none';
	}
	
	status("Summary", Msg[choice]);
	option = choice;
	//document.getElementById('1').style.backgroundColor='#99CCFF';
	//document.getElementById('2').style.backgroundColor='#99CCFF';
	//document.getElementById('3').style.backgroundColor='#99CCFF';
	//document.getElementById(option).style.backgroundColor='white';
}


/* FUNCTION - make calculations */
function Calculate()
{
	document.getElementById('hours').value = document.getElementById('hours').value;
	document.getElementById('mins').value = document.getElementById('mins').value;
	document.getElementById('secs').value = document.getElementById('secs').value;
	document.getElementById('dist').value = document.getElementById('dist').value;

	// Time
	var hr  = document.getElementById('hours').value;
	var min = document.getElementById('mins').value;
	var sec = document.getElementById('secs').value;
	var min = parseInt(min) + parseInt(hr * 60);
	var t = (min*1) + (sec/60);

	// Distance
	d=document.getElementById('dist').value;

	// Pace
	var minP=document.getElementById('Pmins').value;
	var secP=document.getElementById('Psecs').value;
	var p = (minP*1) + (secP/60);

	switch(option)
		{
		case 1:
			if(validate_time() && validate_dist())
				CalculatePace(t, d);				
			break;
		case 2:
			if(validate_time() && validate_pace())
				CalculateDist(t, p);
			break;
		case 3:
			if(validate_pace() && validate_dist())
				CalculateTime(p, d, 0);
			break;
		}
}

/* FUNCTION - validate pace */
function validate_pace()
{
	var check = 0;
	field = document.getElementById('Pmins').value;
	error = error_P;

	if(	validate_empty(field, error) &&
		validate_number(field, error) &&
		validate_range(field, error, 0, 59)  &&
		validate_whole(field, error) &&
		field.length<=2 )
		check = 1;
	else
			return false;
	field = document.getElementById('Psecs').value;
	if(	validate_empty(field, error) &&
		validate_number(field, error) &&
		validate_range(field, error, 0, 59)  &&
		validate_whole(field, error) &&
		field.length<=2 )
		check = 1;
	else
			return false;
	if(check == 1)
		return true;
	else
		return false;
}

/* FUNCTION - validate distance */
function validate_dist()
{
	var check = 0;
	field = document.getElementById('dist').value;
	error=error_D;
	if(	validate_empty(field, error) &&
		validate_number(field, error) &&
		validate_range(field, error, 0, 999.9)	)
		check = 1;
	else
			return false;
	if(check == 1)
		return true;
	else
		return false;
}

/* FUNCTION - validate time */
function validate_time()
{
var check = 0;
	field = document.getElementById('mins').value;
	error = error_T;
	if(	validate_empty(field, error) &&
		validate_number(field, error) &&
		validate_range(field, error, 0, 59) &&
		validate_whole(field, error)  )
			check = 1;
	else
			return false;
	field = document.getElementById('hours').value;
	if(field != "")
	if(	validate_number(field, error) &&
		validate_range(field, error, 0, 99) &&
		validate_whole(field, error)  )
		check = 1;
	else
			return false;
	field = document.getElementById('secs').value;
	if(field != "")
	if(	validate_number(field, error) &&
		validate_range(field, error, 0, 59) &&
		validate_whole(field, error)  )
		check = 1;
	else
			return false;
	if(check == 1)
		return true;
	else
		return false;
}

/* FUNCTION - check for empty fields */
function validate_empty(field, msg)
{
	if(field.length == 0)		//empty
		{
		status("Error", msg);
		return false;
		}
	return true;
}

/* FUNCTION - check for valid numbers */
function validate_number(field, msg)
{
	if(isNaN(parseInt(field)))		//only numbers
		{
		status("Error", msg);
		return false;
		}
		
/* FUNCTION - validate letters */
	if (field.match(/[a-zA-Z]/))
		{
		status("Error", msg);
		return false;
		}
	return true;
}

/* FUNCTION - validate user entered data */
function validate_range(field, msg, start, end)
{
	if((parseInt(field)<start) || (parseInt(field)>end))		//valid range
		{
		status("Error", msg);
		return false;
		}
	return true;
}

/* FUNCTION - check for proper numbers */
function validate_whole(field, msg)
{
	if( (parseFloat(field) % 1) != 0 )		//whole numbers
		{
		status("Error", msg);
		return false;
		}
	return true;
}

/* FUNCTION - calculate the time of the run */
function CalculateTime(p, d, x)
{
	if(x==0)
		{
		if((document.doc.P_MKm[0].checked && document.doc.D_MKm[0].checked) ||
			(document.doc.P_MKm[1].checked && document.doc.D_MKm[1].checked)) 	//same units
			{
			time = p*d;
			final_p_km = DecToTime(time/d);
			final_p_m = DecToTime(time/d);
			}
		else if(document.doc.P_MKm[1].checked)	//p_km, d_m selected
			{
			time = p*(d*1.61);
			final_p_km = DecToTime(time/d*1.61);
			final_p_m = DecToTime(time/d);
			}
		else if(document.doc.D_MKm[1].checked)	//d_km, p_m selected
			{
			time = p*(d/1.61);
			final_p_km = DecToTime(time/d);
			final_p_m = DecToTime(time/(d/1.61));
			}		
		time = DecToTime(time);
		pos = time.indexOf(":");
		dec = parseInt(time.substring(pos+1));
		num = parseInt(time.substring(0,pos+1));
		time = chkTime(num, dec);
// NOTE change the format here ----------------------------------------
		status("Results", "Time of Run: "+time);
		}
	else if (x==1)
		{
		return DecToTime(p*d);
		}
}

/* FUNCTION - calculate the distance run */
function CalculateDist(t, p)
{
	if(document.doc.P_MKm[0].checked)	//miles
		{
		d_miles = t/p;		
		d_kms = d_miles*1.61;
		}
	else if(document.doc.P_MKm[1].checked)	//kms
		{
		d_kms = t/p;
		d_miles = d_kms/1.61;		
		}
	final_p_km = DecToTime(t/d_kms);
	final_p_m = DecToTime(t/d_miles);
// NOTE change the format here ----------------------------------------
	status("Results", "Miles Run: "+roundNumber(d_miles,2)+" <br/>Kilometers Run: "+roundNumber(d_kms,2))
}

/* FUNCTION - calculate the pace */
function CalculatePace(t, d, x)
{
	if(document.doc.D_MKm[0].checked)	//miles
		{
		p=t/d;		
		p_miles = DecToTime(p);
		speed_miles = (d/t) * 60;
		p=t/(d*1.61);
		p_kms = DecToTime(p);
		speed_kms = ((d*1.61)/t) * 60;
		}
	else if(document.doc.D_MKm[1].checked)	//kms
		{
		p=t/(d);
		p_kms = DecToTime(p);
		speed_kms = (d/t) * 60;;
		p=t/(d/1.61);
		p_miles = DecToTime(p);
		speed_miles = ((d/1.61)/t) *60;
		}
	
	final_p_km = p_kms;
	final_p_m = p_miles;
	var pos = p_kms.indexOf(":");
	var dec = parseInt(p_kms.substring(pos+1));
	var num = parseInt(p_kms.substring(0,pos+1));
	if(dec % 10 == dec)
		dec = "0"+dec;
	if(num % 10 == num)
		num = "0"+num;
	p_kms = num+":"+dec;
	pos = p_miles.indexOf(":");
	dec = parseInt(p_miles.substring(pos+1));
	num = parseInt(p_miles.substring(0,pos+1));
	if(dec % 10 == dec)
		dec = "0"+dec;
	if(num % 10 == num)
		num = "0"+num;
	p_miles	 = num+":"+dec;
// NOTE change the format here ----------------------------------------
	status("Results","Your running Pace is:<br />"+p_miles+" per Mile"+"<br/>"+p_kms+" per Kilometer<br /><br />Your Running Speed is:<br />"+roundNumber(speed_miles,2)+" Miles per hour</b> <br/>"+roundNumber(speed_kms,2)+" Kilometers per hour<br/><br/>");
}

/* FUNCTION - round numbers */
function roundNumber(num, dec) 
{
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

/* FUNCTION - pace chart in miles */
function PaceChart_miles()
{
count=0;
	if(final_p_m == "")
		return;
	var tbl = document.getElementById('chart');
	var lastRow = tbl.rows.length;
  while (lastRow > 1) 
	{
	tbl.deleteRow(lastRow - 1);
	lastRow --;
	}
	var chart = document.getElementById('chart');
 	arr = TimeOutput(final_p_m);
	addRow("Miles", arr);
	for(var i=1; i<=3; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_m)*i)));
	arr = TimeOutput(DecToTime(TimeToDec(final_p_m)*3.11));		//for 5Km
	addRow("5K", arr);
	arr = TimeOutput(final_p_m);
	for(var i=4; i<=6; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_m)*i)));
	arr = TimeOutput(DecToTime(TimeToDec(final_p_m)*6.21));		//for 10Km
	addRow("10K", arr);
	arr = TimeOutput(final_p_m);
	for(var i=7; i<=13; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_m)*i)));
	arr = TimeOutput(DecToTime(TimeToDec(final_p_m)*13.12));		//for half marathon
	addRow("Half Marathon", arr);
	arr = TimeOutput(final_p_m);
	for(var i=14; i<=26; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_m)*i)));
	arr = TimeOutput(DecToTime(TimeToDec(final_p_m)*26.22));		//for marathon
	addRow("Marathon", arr);
}

/* FUNCTION - pace chart in kilometers */
function PaceChart_kms()
{
	count=0;
	if(final_p_km == "")
		return;
	var tbl = document.getElementById('chart');
	var lastRow = tbl.rows.length;
	while (lastRow > 1) 
		{
		tbl.deleteRow(lastRow - 1);
		lastRow --;
		}
	var chart = document.getElementById('chart');
	arr = TimeOutput(final_p_km);
	addRow("Kilometers", arr);
	for(var i=1; i<=21; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_km)*i)));
	arr = TimeOutput(DecToTime(TimeToDec(final_p_km)*21.10));		//half marathon
	addRow("Half Marathon", arr);
	arr = TimeOutput(final_p_km);
	for(var i=22; i<=42; i++)	
		addRow(i, TimeOutput(DecToTime(TimeToDec(final_p_km)*i)));	
	arr = TimeOutput(DecToTime(TimeToDec(final_p_km)*42.19));		//for full marathon
	addRow("Marathon", arr);
}

/* FUNCTION - build pace chart rows */
function addRow(str, dataArr)
{
	Sclass = 'pace-row-odd';
	if(count==0)
		Sclass = 'pace-row-header';
	else if(count % 2 == 0)
		Sclass = 'pace-row-even';
	count++;
	var tr=document.createElement('tr');  
	var td=document.createElement('td');
  td.appendChild(document.createTextNode(str));
	tr.appendChild(td);
	td.className='pace-row-header';
	tr.className=Sclass;
  for(var i=0;i<dataArr.length;i++)
  {
    var td=document.createElement('td');
    td.appendChild(document.createTextNode(dataArr[i]));
    tr.appendChild(td);
  }  
  document.getElementById('chart').appendChild(tr);
}

/* FUNCTION - pace chart time headers */
function TimeOutput( time )
{
	var pos = time.indexOf(":");
	var dec = parseInt(time.substring(pos+1));
	var num = parseInt(time.substring(0,pos+1))
	m = (dec/10)+1;
	dec3 = m*10;
	dec3 = dec3 - (dec3 % 10);
	dec1 = dec3-20
	dec0 = dec1 - 10;
	dec2 = dec;
	dec4 = dec3 + 10;
	var times = new Array(chkTime(num, dec0), chkTime(num, dec1), chkTime(num, dec2), 
	chkTime(num, dec3), chkTime(num, dec4));
	return times;
}

/* FUNCTION - pace chart check time */
function chkTime(num, dec)
{
	if (dec>59)
		{
		num++;
		dec = dec-60;
		}
	else if(dec<0)
		{
		num--;
		dec = 60+dec;
		}
	num_hr = 0;
	if(num>59)
		{
		num_hr = Math.round( ((num /60) -(10/60) ) );
		num = Math.round(num % 60);
		}
		if(num_hr % 10 == num_hr)
			num_hr = "0"+num_hr;
		if(num % 10 == num)
			num = "0"+num;
		if(dec % 10 == dec)
			dec = "0"+dec;
	if(num_hr == "00")
		return num+":"+dec;
	else
		return num_hr+":"+num+":"+dec;
}

/* FUNCTION - pace chart calc time 1 */
function DecToTime(num)
{
	sec = Math.round((num*60)%60);
	min = Math.round(( (num*60)-sec )/60);
	return (min+":"+sec);
}

/* FUNCTION - pace chart calc time 2 */
function TimeToDec(time)
{
	var pos = time.indexOf(":");
	var sec = parseInt(time.substring(pos+1));
	var min = parseInt(time.substring(0,pos+1));
	return (min*1) + (sec/60);
}

/* FUNCTION - select box */
function selectBox(value)
{
if(value==5)
	{num=3; box='M';}
else if(value==10)
	{num=10; box='M';}
else if(value=='5k')
	{num=5; box='K';}
else if(value=='10k')
	{num=10; box='K';}
else if(value=='15k')
	{num=15; box='K';}
else if(value=='20k')
	{num=20; box='K';}
else if(value==0.5)
	{num=21.10; box='K';}
else if(value==1)
	{num=42.19; box='K';}
	document.getElementById('dist').value = num;
	if(box == 'K')
		document.doc.D_MKm[1].checked = true;
	else if(box == 'M')
		document.doc.D_MKm[0].checked = true;
}

/* FUNCTION - reset form */
// CHECK THIS IT MAY BREAK IN WORDPRESS ----------------------------------
function Reset()
{
	location.href = 'index.php';
}

/* FUNCTION - update message box */
function status(msg1, msg2)
{
	if(msg1=="Results")
	{
		document.getElementById('ChartLinks').style.visibility="visible";
		document.getElementById('ResultTable').style.visibility="visible";
	}
	else
	{
		document.getElementById('ChartLinks').style.visibility="hidden";
		document.getElementById('ResultTable').style.visibility="hidden";
	}
	document.getElementById('MSG1').innerHTML = msg1;
	document.getElementById('MSG2').innerHTML = msg2;
}


