<!-- Hide JavaScript
// Format to given number of fractional digits.
// If "decimals" == -1 use as many as necessary.
// (This is quite cumbersome because of the differences
// between the binary (base-2) floating point representation
// and the decimal (base-10) numbers.
function formatNumber(num, decimals)
{
	var numStr;
	switch (decimals) {
// Round to integer.
		case 0: num = Math.round(num);
// If number of decimals == -1 return as many as necessary.
		case -1: numStr = num+""; break;
// Else round to given number of decimals.
		default: {
// Don't bother with numbers in scientific notation.
			numStr = num + "";
			if (numStr.indexOf("e") >= 0) break;
// Use the old trick: add 0.5*10^(-decimals) then truncate.
			var roundAdder = 0.5;
			for (i=0; i<decimals; i++) {
				roundAdder /= 10.0;
			}
			if (num<0) num -= roundAdder;
			else num += roundAdder;
			numStr = num + "";
			var dot = numStr.indexOf(".");
			if (dot >= 0) {
				dot += decimals+1;
				if (dot > numStr.length) dot = numStr.length;
				numStr = numStr.substring(0, dot);
			}
		}
	}
	return numStr;
  }
function consumptionToLP100KM(unit, value)
{
	switch (unit) {
		case 1: return value;
		case 2: return (100.0*4.543/1.609344)/value;
		case 3: return (100.0*3.7854118/1.609344)/value;
		default: return 0.0;
	}
}

function consumptionFromLP100KM(unit, value)
{
	switch (unit) {
		case 1: return value;
		case 2: return (100.0*4.543/1.60933)/value;
		case 3: return (100.0*3.7854118/1.60933)/value;
		default: return 0.0;
	}
}

// form: form to operate on.
// toCommonUnit: name of function that convert to common unit.
// fromCommonUnit: name of function that convert from common unit.
function update1(form, toCommonUnit, fromCommonUnit) {
	var unit1 = form.unit1.selectedIndex;
	var unit2 = form.unit2.selectedIndex;
	var value1 = 0.0;
	var value2 = form.value2.value;
	if ((unit1 != 0) && (unit1 != 0)) {
		var common = eval(toCommonUnit+"("+unit2+","+value2+")");
		value1 = eval(fromCommonUnit+"("+unit1+","+common+")");
	}
	var decimals = form.decimals.selectedIndex-1;
	form.value1.value = formatNumber(value1, decimals);
}

// form: form to operate on.
// toCommonUnit: name of function that convert to common unit.
// fromCommonUnit: name of function that convert from common unit.
function update2(form, toCommonUnit, fromCommonUnit) {
	var unit1 = form.unit1.selectedIndex;
	var unit2 = form.unit2.selectedIndex;
	var value1 = form.value1.value;
	var value2 = 0.0;
	if ((unit1 != 0) && (unit1 != 0)) {
		var common = eval(toCommonUnit+"("+unit1+","+value1+")");
		value2 = eval(fromCommonUnit+"("+unit2+","+common+")");
	}
	var decimals = form.decimals.selectedIndex-1;
	form.value2.value = formatNumber(value2, decimals);
}


function computeWheelDiameter(width, profile, rimDiameter) {
	return (rimDiameter*25.4+2.0*width*profile/100.0);
}

function computeWheelCircuference(width, profile, rimDiameter) {
	return computeWheelDiameter(width, profile, rimDiameter)*Math.PI;
}

function updateCarTyreCode(form) {
	var width = form.width.options[form.width.selectedIndex].value;
	var profile = form.profile.options[form.profile.selectedIndex].value;
	var rimDiameter = form.rimDiameter.options[form.rimDiameter.selectedIndex].value;
	var code = "";
	if (width==0) code += "???";
	else code += width;
	if (profile==0) code += "/??";
	else if (profile!=100) code += "/"+profile;
	if (rimDiameter==0) code += " R??";
	else code += " R"+rimDiameter;
	form.tyrecode.value = code;
}

function updateCarGearBox(form) {
	var width = form.width.options[form.width.selectedIndex].value;
	var profile = form.profile.options[form.profile.selectedIndex].value;
	var rimDiameter = form.rimDiameter.options[form.rimDiameter.selectedIndex].value;
	var gearbox = 1.0;
	var finaldrive = form.finaldrive.value;
	var rpm = form.rpm.value;
	var speed = form.speed.value;
// This is not very accurate since the tyre deforms and
// thus the effective rimDiameter is smaller than what is calculated here.
	var wheelcircum = computeWheelCircuference(width, profile, rimDiameter)/1000.0;
	if ((wheelcircum > 0) && (finaldrive!=0) && (speed!=0)) {
		switch (form.speedunit.selectedIndex) {
			case 0: speed = speed/3.6; break;
			case 1: speed = speed*1.60933/3.6; break;
			default:
		}
		gearbox = (rpm*wheelcircum)/(60.0*finaldrive*speed)
	}
	form.gearbox.value = formatNumber(gearbox, 3);
}

function updateCarFinalDrive(form) {
	var width = form.width.options[form.width.selectedIndex].value;
	var profile = form.profile.options[form.profile.selectedIndex].value;
	var rimDiameter = form.rimDiameter.options[form.rimDiameter.selectedIndex].value;
	var gearbox = form.gearbox.value;
	var finaldrive = 3.0;
	var rpm = form.rpm.value;
	var speed = form.speed.value;
// This is not very accurate since the tyre deforms and
// thus the effective rimDiameter is smaller than what is calculated here.
	var wheelcircum = computeWheelCircuference(width, profile, rimDiameter)/1000.0;
	if ((wheelcircum > 0) && (gearbox!=0) && (speed!=0)) {
		switch (form.speedunit.selectedIndex) {
			case 0: speed = speed/3.6; break;
			case 1: speed = speed*1.60933/3.6; break;
			default:
		}
		finaldrive = (rpm*wheelcircum)/(60.0*gearbox*speed)
	}
	form.finaldrive.value = formatNumber(finaldrive, 3);
}

function updateCarRPM(form) {
	var width = form.width.options[form.width.selectedIndex].value;
	var profile = form.profile.options[form.profile.selectedIndex].value;
	var rimDiameter = form.rimDiameter.options[form.rimDiameter.selectedIndex].value;
	var gearbox = form.gearbox.value;
	var finaldrive = form.finaldrive.value;
	var rpm = 0.0;
	var speed = form.speed.value;
// This is not very accurate since the tyre deforms and
// thus the effective rimDiameter is smaller than what is calculated here.
	var wheelcircum = computeWheelCircuference(width, profile, rimDiameter)/1000.0;
	if ((wheelcircum > 0) && (finaldrive!=0) && (gearbox!=0)) {
		switch (form.speedunit.selectedIndex) {
			case 0: speed = speed/3.6; break;
			case 1: speed = speed*1.60933/3.6; break;
			default:
		}
		rpm = 60.0*finaldrive*gearbox*speed/wheelcircum;
	}
	form.rpm.value = Math.round(rpm);
}

function updateCarSpeed(form) {
	var width = form.width.options[form.width.selectedIndex].value;
	var profile = form.profile.options[form.profile.selectedIndex].value;
	var rimDiameter = form.rimDiameter.options[form.rimDiameter.selectedIndex].value;
	var gearbox = form.gearbox.value;
	var finaldrive = form.finaldrive.value;
	var rpm = form.rpm.value;
	var speed = 0.0;
// This is not very accurate since the tyre deforms and
// thus the effective rimDiameter is smaller than what is calculated here.
	var wheelcircum = computeWheelCircuference(width, profile, rimDiameter)/1000.0;

	if ((wheelcircum > 0) && (finaldrive!=0) && (gearbox!=0)) {
		speed = (rpm*wheelcircum)/(60.0*finaldrive*gearbox)
		switch (form.speedunit.selectedIndex) {
			case 0: speed = speed*3.6; break;
			case 1: speed = speed*3.6/1.60933; break;
			default:
		}
	}
	form.speed.value = formatNumber(speed, 2);
}
// -->