function isPosNumber(val) {
  var str = val + "";
  if (str != "") {
    oneDecimal = false;
    for (var i = 0; i < str.length; i++) {
      var oneChar = str.charAt(i);
      if (oneChar == "." && !oneDecimal) {
        oneDecimal = true;
        continue;
      }
      if (oneChar < "0" || oneChar > "9") {
        return false;
      }
    }
  }
  return true;
}		

function checkNum(thisChar) {

	if((thisChar != '0') &&
		(thisChar != '1') &&
		(thisChar != '2') &&
		(thisChar != '3') &&
		(thisChar != '4') &&
		(thisChar != '5') &&
		(thisChar != '6') &&
		(thisChar != '7') &&
		(thisChar != '8') &&
		(thisChar != '9')) {
		
		return false;
		
	} else {
	
		return true;
		
	}
}
		

function checkValue(thisString) {

	var isNum = true;
	var stringLen = thisString.length;
	
	if(stringLen == 0) {
	
		isNum = false;
		
	} else {
	
		for(count = 0; count < stringLen; count++) {
	
			if(!(checkNum(thisString.charAt(count)))) {
		
				isNum = false;
				break;
		
			}	
		}
	}
	
	return isNum;
	
}


function format(expr, decplaces) {
  var str = "" + Math.round(eval(expr) * Math.pow(10, decplaces));
  while (str.length <= decplaces) str = "0" + str;
  var decpoint = str.length - decplaces;
  var right = str.substring(decpoint, str.length);
  if (right == "00") right = ""; else right = "." + right;
  return str.substring(0, decpoint) + right;
}



function checkForm(form) {

var formValid = true;
var fieldsUsed = 0;

var distance = form.dist.value;

var timeHours = form.TimeHours.value;
var timeMins = form.TimeMins.value;
var timeSecs = form.TimeSecs.value;

var paceHours = form.PaceHours.value;
var paceMins = form.PaceMins.value;
var paceSecs = form.PaceSecs.value;

var timestr = timeHours.toString() + timeMins.toString() + timeSecs.toString();
var pacestr = paceHours.toString() + paceMins.toString() + paceSecs.toString();

	if(distance != '') {
		fieldsUsed++
	}

	if(timestr != '') {
		fieldsUsed++
	}
	
	if(pacestr != '') {
		fieldsUsed++
	}
	
	
	if(fieldsUsed < 2) {
	
		alert('Please include at least two variables.');
		
		formValid = false;
		
	} else {
	
		if(fieldsUsed == 3) {
		
			alert('Please include only two variables.')
			
			formValid = false;
			
		} else {
		
			validNumbers = true;
			
			if (((timeHours != '') && (!(checkValue(timeHours)))) ||
				((timeMins != '') && (!(checkValue(timeMins)))) ||
				((timeSecs != '') && (!(checkValue(timeSecs))))) {
			
				validNumbers = false;
			
			}
			
			if (((paceHours != '') && (!(checkValue(paceHours)))) ||
				((paceMins != '') && (!(checkValue(paceMins)))) ||
				((paceSecs != '') && (!(checkValue(paceSecs))))) {
			
				validNumbers = false;
			
			}
			
			if ((distance != '') && (!(isPosNumber(distance)))) {
			
				validNumbers = false;
			
			}
			
			
			if (!(validNumbers)) {
			
				alert('Please enter only numbers for the field values.');
				
				formValid = false;
			
			}
		}
	} 
	
	return formValid;
}


function calculate() {
	var form = document.IronPointForm;
	if(checkForm(form)) {
		var dist;
		var empty="";
		var timestr = form.TimeHours.value.toString() + form.TimeMins.value.toString() + form.TimeSecs.value.toString();
		var timeHours = form.TimeHours.value;
		var timeMins = form.TimeMins.value;
		var timeSecs = form.TimeSecs.value;
		var paceHours = form.PaceHours.value;
		var paceMins = form.PaceMins.value;
		var paceSecs = form.PaceSecs.value;
		if(timeHours == '') { timeHours = 0 }
		if(timeMins == '') { timeMins = 0 }
		if(timeSecs == '') { timeSecs = 0 }
		if(paceHours == '') { paceHours = 0 }
		if(paceMins == '') { paceMins = 0 }
		if(paceSecs == '') { paceSecs = 0 }
		timeHours = parseInt(timeHours, 10);
		timeMins = parseInt(timeMins, 10);
		timeSecs = parseInt(timeSecs, 10);
		paceHours = parseInt(paceHours, 10);
		paceMins = parseInt(paceMins, 10);
		paceSecs = parseInt(paceSecs, 10);
		var time1 = (timeHours* 60) + timeMins + (timeSecs / 60);
		var time2 = (paceHours* 60) + paceMins + (paceSecs / 60);
		if (form.dist.value != "") {
			if (form.disttype.selectedIndex == 0) dist = form.dist.value * 1000;
		  	else if (form.disttype.selectedIndex == 1) dist = form.dist.value * 1609.34;
		  	else if (form.disttype.selectedIndex == 2) dist = form.dist.value;
		  	else if (form.disttype.selectedIndex == 3) dist = form.dist.value / 1.093616;
  		 	if (timestr == "") empty = "time"; else empty = "pace";
  		} else {
			empty = "dist";
		}
		var h, m, s;
		var hstr, mstr, sstr;
		var thepace = 0;

if (empty == "pace") {
  //time1 / dist --> minutes / meters
  if (form.pacetype.selectedIndex == 0) thepace = (time1 / dist) * 1000; //per kilometer
  else thepace = (time1 / dist) * 1609.34; //per mile
  h = parseInt(thepace / 60, 10);
  m = parseInt(thepace % 60, 10);
  s = parseInt((thepace - parseInt(thepace)) * 60, 10);
  if (h < 10) hstr = "0" + h; else hstr = h;
  if (m < 10) mstr = "0" + m; else mstr = m;
  if (s < 10) sstr = "0" + s; else sstr = s;
  if (isNaN(hstr)) hstr = "00";
  if (isNaN(mstr)) mstr = "00";
  if (isNaN(sstr)) sstr = "00";
  
  form.PaceHours.value = hstr;
  form.PaceMins.value = mstr;
  form.PaceSecs.value = sstr;
  
}


else if (empty == "dist") {

  if (form.pacetype.selectedIndex == 0) { //per kilometer
  
    var kilometers = time1 / time2;
    if (form.disttype.selectedIndex == 0) form.dist.value = format(kilometers, 2); //kilometers
    else if (form.disttype.selectedIndex == 1) form.dist.value = format(kilometers * .62137274, 2); //miles
    else if (form.disttype.selectedIndex == 2) form.dist.value = format(kilometers * 1000, 2); //meters
    else form.dist.value = format(kilometers * 1093.6160165, 2); //yards 
  }  
  
  else { //per mile
  
    var miles = time1 / time2; 
    if (form.disttype.selectedIndex == 0) form.dist.value = format(miles * 1.60934, 2);
    else if (form.disttype.selectedIndex == 1) form.dist.value = format(miles, 2);
    else if (form.disttype.selectedIndex == 2) form.dist.value = format(miles * 1609.34, 2);
    else form.dist.value = format(miles * 1760, 2);
	
  }
}

else if (empty == "time") {

  var tempdist = form.dist.value;
  
  if (form.pacetype.selectedIndex == 0) { //per kilometer
  
    if (form.disttype.selectedIndex == 1) tempdist *= 1.60934; //miles
    else if (form.disttype.selectedIndex == 2) tempdist /= 1000; //meters
    else if (form.disttype.selectedIndex == 3) tempdist /= 1093.6160165; //yards
	
  }
  
  else { //per mile
  
    if (form.disttype.selectedIndex == 0) tempdist *= .62137274; //k
    else if (form.disttype.selectedIndex == 2) tempdist /= 1609.34;
    else if (form.disttype.selectedIndex == 3) tempdist /= 1760;
	
  }
  
  thepace = tempdist * time2;
  
  h = parseInt(thepace / 60, 10);
  m = parseInt(thepace % 60, 10);
  s = parseInt((thepace - parseInt(thepace)) * 60, 10);
  if (h < 10) hstr = "0" + h; else hstr = h;
  if (m < 10) mstr = "0" + m; else mstr = m;
  if (s < 10) sstr = "0" + s; else sstr = s;
  if (isNaN(hstr)) hstr = "00";
  if (isNaN(mstr)) mstr = "00";
  if (isNaN(sstr)) sstr = "00";
  
  form.TimeHours.value = hstr;
  form.TimeMins.value = mstr;
  form.TimeSecs.value = sstr;
  
}

}

}



function setDistance() {

	var form = document.IronpointForm;
	
	distIndex = form.disttype.selectedIndex;
	
	if(distIndex == 5) {
	
		form.disttype.selectedIndex = 1;
		form.dist.value = '26.2';
		
	}
	
	
	if(distIndex == 6) {
	
		form.disttype.selectedIndex = 1;
		form.dist.value = '13.1';
		
	}
	
	
	if(distIndex == 7) {
	
		form.disttype.selectedIndex = 0;
		form.dist.value = '10';
		
	}
	
	
	if(distIndex == 8) {
	
		form.disttype.selectedIndex = 0;
		form.dist.value = '5';
		
	}

}

