// Source code is copyright 2004 USA Track & Field, Inc.

function convertToImperial(mark, eventName)
{
	if (eventName == '')
		alert('You must choose an event');
	else if (mark == '')
		alert('You must enter a mark to convert');
	else if (! isValidMetricMark(mark))
		alert('Invalid mark (please use the format 0.00)');
	else
		document.getElementById('M2I').innerHTML = '<b>' + formatMetricMark(mark) + ' = ' + formatImperialMark(convertMark(mark, eventName)) + '</b>';
}


function convertToMetric(mark, eventName)
{
	if (eventName == '')
		alert('You must choose an event');
	else if (mark == '')
		alert('You must enter a mark to convert');
	else if (! isValidImperialMark(mark))
		alert('Invalid mark (please use the format 0\' 0.00\")');
	else
		document.getElementById('I2M').innerHTML = '<b>' + formatImperialMark(mark) + ' = ' + formatMetricMark(convertImperialMark(mark, eventName)) + '</b>';
}



//------------- METRIC TO IMPERIAL CONVERSIONS (begin) -------------
function convertMark(mark, eventName)
{
	switch (eventName.toLowerCase())
	{
		case 'high jump' :
		case 'pole vault' :
			return convertMark_vertical(mark);
			break;
		case 'long jump' :
		case 'triple jump' :
		case 'shot put' :
			return convertMark_horizontal(mark);
			break;
		case 'discus throw' :
		case 'hammer throw' :
		case 'javelin throw' :
			return convertMark_horizontal_long(mark);
			break;
		default :
			return 'Error: unrecognized event';
			break;
	}
}



function convertMark_vertical(mark)
{
	var conversionFactor_vertical = 0.002;
	return doConversion(mark, conversionFactor_vertical);
}

function convertMark_horizontal(mark)
{
	var conversionFactor_horizontal = 0.004999;
	return doConversion(mark, conversionFactor_horizontal);
}

function convertMark_horizontal_long(mark)
{
	var convertedMark = convertMark_horizontal(mark);
	return ((convertedMark.replace('.25', '')).replace('.5', '')).replace('.75', '');
}


function doConversion(mark, conversionFactor)
{
	var adjustedMark, convertedMark, feet, inches, fractionInches;
	
	adjustedMark = Number(mark) + conversionFactor;
	convertedMark = adjustedMark * 100 / 2.54 / 12;		// in feet
	
	feet = Math.floor(convertedMark);
	inches = Math.floor((convertedMark - feet) * 12);
	fractionInches = ((convertedMark - feet) * 12) - inches;
	
	if (fractionInches >= 0.75)
		fractionInches = 0.75;
	else if (fractionInches >= 0.50)
		fractionInches = 0.50;
	else if (fractionInches >= 0.25)
		fractionInches = 0.25;
	else
		fractionInches = 0.00;
	
	return feet + '\' ' + (inches + fractionInches) + '\"';
}
//------------- METRIC TO IMPERIAL CONVERSIONS (end) -------------


//------------- IMPERIAL TO METRIC CONVERSIONS (begin) -------------
function convertImperialMark(mark, eventName)
{
	var convertedMark;
	convertedMark = Math.floor(getInches(mark) * 2.54) / 100;		// convert to centimeters and truncate and convert back to meters
	return parseInt(convertedMark) + (convertedMark % 1.0) + ' m';
}


function convertImperialMark_PROBABILITY(mark, eventName)
{
	switch (eventName.toLowerCase())
	{
		case 'high jump' :
		case 'pole vault' :
			return convertImperialMark_vertical(mark);
			break;
		default :
			return convertImperialMark_horizontal(mark);
			break;
	}
}


function convertImperialMark_vertical(mark)
{
	var conversionFactor_vertical = 0.05;		// conversionFactor is in inches:  0.2*0.25=0.05 for vertical jumps
	return doImperialConversion(mark, conversionFactor_vertical);
}


function convertImperialMark_horizontal(mark)
{
	var conversionFactor_horizontal = 0.124999;		// conversionFactor is in inches:  0.5*0.25=0.125 for throws
	return doImperialConversion(mark, conversionFactor_horizontal);
}


function doImperialConversion(mark, conversionFactor)
{
	var convertedMark, adjustedMark;
	adjustedMark = getInches(mark) + conversionFactor;
	convertedMark = Math.floor(adjustedMark * 2.54) / 100;		// convert to centimeters and truncate and convert back to meters
	return parseInt(convertedMark) + (convertedMark % 1.0) + ' m';
}
//------------- IMPERIAL TO METRIC CONVERSIONS (end) -------------


function getInches(imperialMark)
{
	var feetInchesArray;
	
	if (imperialMark.indexOf('-') > 0)
		feetInchesArray = imperialMark.split('-');
	else if (imperialMark.indexOf('\'') > 0)
		feetInchesArray = ((imperialMark.replace(' ', '')).replace('\"', '')).split('\'');
	else
		feetInchesArray = ('0-0').split('-');
	
	return Number(feetInchesArray[0]) * 12 + Number(feetInchesArray[1]);
}


function isValidMetricMark(mark)
{
	return (/^[0-9]{1,3}(\.[0-9]{1,2}){0,1}$/).test(mark);
}


function isValidImperialMark(mark)
{
	return (/^[0-9]{1,3}\'((\s){0,1}(([0-1][0-1])|([0-9]))(\.[0-9]{1,2}){0,1}\"){0,1}$|^[0-9]{1,3}(\-(([0-1][0-1])|([0-9]))(\.[0-9]{1,2}){0,1}){0,1}$/).test(mark);
}


function formatMetricMark(mark)
{
	var tempMark = (mark.replace('m', '')).replace(' ', '');
	var decimalPart = Math.round(100 * (tempMark % 1.0));
	if (decimalPart == 0)
		decimalPart = '00';
	else if (decimalPart < 10)
		decimalPart = '0' + decimalPart;
	
	return parseInt(tempMark) + '.' + decimalPart + ' m';
}

function formatImperialMark(mark)
{
	var feetInchesArray;
	var fractionalPart;
	
	if (mark.indexOf('-') > 0)
		feetInchesArray = mark.split('-');
	else if (mark.indexOf('\'') > 0)
		feetInchesArray = ((mark.replace(' ', '')).replace('\"', '')).split('\'');
	else
		feetInchesArray = ('0-0').split('-');
	
	switch (Math.round(100 * Number(feetInchesArray[1])) % 100)
	{
		case 25 :
			fractionalPart = '¼';
			break;
		case 50 :
			fractionalPart = '½';
			break;
		case 75 :
			fractionalPart = '¾';
			break;
		default :
			fractionalPart = '';
			break;
	}
	
	return Number(feetInchesArray[0]) + '\' ' + parseInt(feetInchesArray[1]) + fractionalPart + '\"';
}


function formatImperialMark_OLD(mark)
{
	var feetInchesArray;
	
	if (mark.indexOf('-') > 0)
		feetInchesArray = mark.split('-');
	else if (mark.indexOf('\'') > 0)
		feetInchesArray = ((mark.replace(' ', '')).replace('\"', '')).split('\'');
	else
		feetInchesArray = ('0-0').split('-');
	
	return Number(feetInchesArray[0]) + '\' ' + Number(feetInchesArray[1]) + '\"';
}