function getRadialLoadFactor(RefNumber){
	var radial_loadfactor = new Array(4);
	
	radial_loadfactor[1] = 2.25;
	radial_loadfactor[2] = 2.5;
	radial_loadfactor[3] = 2;
	
	var loadfactor = radial_loadfactor[RefNumber];
	return loadfactor;
}

function getRadialCycles(RefNumber,SampleSize){
	var radial_cycles = new Array(4);
	radial_cycles[1] = new Array(8);
	radial_cycles[2] = new Array(8);
	radial_cycles[3] = new Array(8);
	
	radial_cycles[1][2] = 750000;
	radial_cycles[1][3] = 600000;
	radial_cycles[1][4] = 525000;
	radial_cycles[1][5] = 475000;
	radial_cycles[1][6] = 425000;
	radial_cycles[1][7] = 400000;
	
	radial_cycles[2][2] = 1100000;
	radial_cycles[2][3] = 900000;
	radial_cycles[2][4] = 775000;
	radial_cycles[2][5] = 700000;
	radial_cycles[2][6] = 650000;
	radial_cycles[2][7] = 600000;
	
	radial_cycles[3][2] = 1850000;
	radial_cycles[3][3] = 1500000;
	radial_cycles[3][4] = 1300000;
	radial_cycles[3][5] = 1200000;
	radial_cycles[3][6] = 1100000;
	radial_cycles[3][7] = 1000000;
	
	var cycles = radial_cycles[RefNumber][SampleSize];
	return cycles;
}

function getRotaryLoadFactor(RefNumber){
	var rotary_loadfactor = new Array(5);
	
	rotary_loadfactor[1] = 1.6;
	rotary_loadfactor[2] = 2;
	rotary_loadfactor[3] = 1.6;
	rotary_loadfactor[4] = 1.35;
	
	var loadfactor = rotary_loadfactor[RefNumber];
	return loadfactor;
}

function getRotaryCycles(RefNumber,SampleSize){
	var rotary_cycles = new Array(4);
	rotary_cycles[1] = new Array(8);
	rotary_cycles[2] = new Array(8);
	rotary_cycles[3] = new Array(8);
	rotary_cycles[4] = new Array(8);
	
	rotary_cycles[1][2] = 35000;
	rotary_cycles[1][3] = 30000;
	rotary_cycles[1][4] = 25000;
	rotary_cycles[1][5] = 22000;
	rotary_cycles[1][6] = 20000;
	rotary_cycles[1][7] = 18000;
	
	rotary_cycles[2][2] = 95000;
	rotary_cycles[2][3] = 75000;
	rotary_cycles[2][4] = 65000;
	rotary_cycles[2][5] = 60000;
	rotary_cycles[2][6] = 55000;
	rotary_cycles[2][7] = 50000;
	
	rotary_cycles[3][2] = 150000;
	rotary_cycles[3][3] = 120000;
	rotary_cycles[3][4] = 105000;
	rotary_cycles[3][5] = 95000;
	rotary_cycles[3][6] = 85000;
	rotary_cycles[3][7] = 80000;
	
	rotary_cycles[4][2] = 475000;
	rotary_cycles[4][3] = 375000;
	rotary_cycles[4][4] = 325000;
	rotary_cycles[4][5] = 300000;
	rotary_cycles[4][6] = 275000;
	rotary_cycles[4][7] = 250000;
	
	var cycles = rotary_cycles[RefNumber][SampleSize];
	return cycles;
}

function calculateAutoLoadedRadius(TireSize2,TireSize3,TireSize4,WheelDiameter){
	//var AutoLoadedRadius = (TireSize2*(TireSize3/100))+(WheelDiameter/2*25.4);
	var AutoLoadedRadius = Math.round(((TireSize4/2)*25.4) + ((((TireSize2*TireSize3)/100) - 17.5)*.76) + 17.5);
	return AutoLoadedRadius;
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function calculate(){	
	Exist_wheel_diameter=false;
	Exist_wheel_width=false;
	Exist_wheel_ratedload=false;
	Exist_wheel_offset=false;	
	Exist_tire_size_2=false;
	Exist_tire_size_3=false;
	
	Exist_tire_ratedpressure=false;
	Exist_vehicle_placcard=false;
	Exist_boltpattern_1=false;
	Exist_boltpattern_2=false;
	
	Exist_tests_radial=false;
	Exist_tests_cornering=false;
	Exist_tests_impact=false;
	
	Exist_test_radialfactor=false;	
	Exist_test_corneringfactor=false;	
	
	corneringComplete=false;
	impactComplete=false;
	radialComplete=false;
	
	wheel_diameter				= document.forms['testCalculator'].wheel_diameter.value;
	wheel_width					= document.forms['testCalculator'].wheel_width.value;
	wheel_ratedload				= document.forms['testCalculator'].wheel_ratedload.value;
	wheel_offset				= document.forms['testCalculator'].wheel_offset.value;
	tire_size_1					= document.forms['testCalculator'].tire_size_1.value;
	tire_size_2					= document.forms['testCalculator'].tire_size_2.value;
	tire_size_3					= document.forms['testCalculator'].tire_size_3.value;
	tire_size_4					= document.forms['testCalculator'].tire_size_4.value;
	tire_loadedradius			= document.forms['testCalculator'].tire_loadedradius.value;
	tire_loadedradiusAuto		= document.forms['testCalculator'].tire_loadedradiusAuto.value;
	tire_ratedpressure			= document.forms['testCalculator'].tire_ratedpressure.value;
	vehicle_placcard			= document.forms['testCalculator'].vehicle_placcard.value;
	boltpattern_1				= document.forms['testCalculator'].boltpattern_1.value;
	boltpattern_2				= document.forms['testCalculator'].boltpattern_2.value;
	/*
	hardware_typesize			= document.forms['testCalculator'].hardware_typesize.value;
	*/
	tests_radial				= document.forms['testCalculator'].tests_radial.value;
	tests_cornering				= document.forms['testCalculator'].tests_cornering.value;
	tests_impact				= document.forms['testCalculator'].tests_impact.value;
	/*
	vehicle						= document.forms['testCalculator'].vehicle.value;
	wheel_material				= document.forms['testCalculator'].wheel_material.value;
	*/
	test_radialfactor			= document.forms['testCalculator'].test_radialfactor.value;
	test_corneringfactor		= document.forms['testCalculator'].test_corneringfactor.value;
	
	document.forms['testCalculator'].wheel_diameter.value = tire_size_4;
	
	if(wheel_diameter != ''){
		Exist_wheel_diameter=true;
	}
	if(wheel_width != ''){
		Exist_wheel_width=true;
	}
	if(wheel_ratedload != ''){
		Exist_wheel_ratedload=true;
	}
	if(wheel_offset != ''){
		Exist_wheel_offset=true;
	}
	if(tire_size_2 != ''){
		Exist_tire_size_2=true;
	}
	if(tire_size_3 != ''){
		Exist_tire_size_3=true;
	}
	
	if(tire_ratedpressure != ''){
		Exist_tire_ratedpressure=true;
	}
	if(vehicle_placcard != ''){
		Exist_vehicle_placcard=true;
	}
	if(boltpattern_1 != ''){
		Exist_boltpattern_1=true;
	}
	if(boltpattern_2 != ''){
		Exist_boltpattern_2=true;
	}
	
	if(tests_radial != ''){
		Exist_tests_radial=true;
	}
	if(tests_cornering != ''){
		Exist_tests_cornering=true;
	}
	if(tests_impact != ''){
		Exist_tests_impact=true;
	}
	
	if(test_radialfactor != ''){
		Exist_test_radialfactor=true;
	}
	if(test_corneringfactor != ''){
		Exist_test_corneringfactor=true;
	}
	
	if(Exist_wheel_diameter && Exist_wheel_width){
		if(wheel_diameter < 14){
			document.forms['testCalculator'].wheel_diameter.value = 14;
			wheel_diameter = 14;
		}
		if(wheel_diameter > 26){
			document.forms['testCalculator'].wheel_diameter.value = 26;
			wheel_diameter = 26;
		}
		if(wheel_width < 3){
			document.forms['testCalculator'].wheel_width.value = 3;
			wheel_width = 3;
		}
		if(wheel_width > 14){
			document.forms['testCalculator'].wheel_width.value = 14;
			wheel_width = 14;
		}
	}
	
	if(Exist_wheel_ratedload){
		if(wheel_ratedload < 300){
			document.forms['testCalculator'].wheel_ratedload.value = 300;
			wheel_ratedload = 300;
		}
		if(wheel_ratedload > 40000){
			document.forms['testCalculator'].wheel_ratedload.value = 40000;
			wheel_ratedload = 40000;
		}
	}
	
	if(Exist_tire_ratedpressure){
		if(tire_ratedpressure < 41){
			document.forms['testCalculator'].tire_ratedpressure.value = 41;
			tire_ratedpressure = 41;
		}
		if(tire_ratedpressure > 79){
			document.forms['testCalculator'].tire_ratedpressure.value = 79;
			tire_ratedpressure = 79;
		}
	}
	
	if(Exist_vehicle_placcard){
		if(vehicle_placcard < 24){
			document.forms['testCalculator'].vehicle_placcard.value = 24;
			vehicle_placcard = 24;
		}
		if(vehicle_placcard > 95){
			document.forms['testCalculator'].vehicle_placcard.value = 95;
			vehicle_placcard = 95;
		}
	}
	
	if(Exist_boltpattern_1){
		if(boltpattern_1 < 5){
			document.forms['testCalculator'].boltpattern_1.value = 5;
			boltpattern_1 = 5;
		}
		if(boltpattern_1 > 9){
			document.forms['testCalculator'].boltpattern_1.value = 9;
			boltpattern_1 = 9;
		}
	}
	
	if(Exist_boltpattern_2){
		if(boltpattern_2 < 101){
			document.forms['testCalculator'].boltpattern_2.value = 101;
			boltpattern_2 = 101;
		}
		if(boltpattern_2 > 224){
			document.forms['testCalculator'].boltpattern_2.value = 224;
			boltpattern_2 = 224;
		}
	}
	
	if(Exist_wheel_diameter && Exist_tire_size_2 && Exist_tire_size_3){
		document.forms['testCalculator'].tire_loadedradiusAuto.value = calculateAutoLoadedRadius(tire_size_2,tire_size_3,tire_size_4,wheel_diameter);	
	}
	
	/* Calculate Radial Results */
	var testPressureCalc = (vehicle_placcard*1.2);
	if(testPressureCalc > 65){
		document.getElementById("radialTestPressure").innerHTML = testPressureCalc;
		document.forms['testCalculator'].form_radialTestPressure.value = testPressureCalc;
	}
	else{
		document.getElementById("radialTestPressure").innerHTML = "65";	
		document.forms['testCalculator'].form_radialTestPressure.value = "65";
	}
	
	if(tire_ratedpressure < 45){
		document.getElementById("radialTestPressure").innerHTML = "65";
		document.forms['testCalculator'].form_radialTestPressure.value = "65";
	}
	else{
		if((vehicle_placcard*1.2)>65){
			document.getElementById("radialTestPressure").innerHTML = vehicle_placcard*1.2;
			document.forms['testCalculator'].form_radialTestPressure.value = vehicle_placcard*1.2;
		}
		else{
			document.getElementById("radialTestPressure").innerHTML = "65";
			document.forms['testCalculator'].form_radialTestPressure.value = "65";
		}
	}
	
	if(Exist_wheel_ratedload && Exist_test_radialfactor){
		radialComplete = true;
		var radial_W = wheel_ratedload;
		var radial_K = getRadialLoadFactor(test_radialfactor);
		var radial_F = (radial_W * radial_K);  //.45*9.8, lb to kg
		document.getElementById("radialTestLoad").innerHTML = Math.round(radial_F);
		document.forms['testCalculator'].form_radialTestLoad.value = Math.round(radial_F);
		
		var radial_cyclesToBogie = getRadialCycles(test_radialfactor,tests_radial);
		var radial_cyclesToCompletion = radial_cyclesToBogie * 2;
		
		Print_radial_cyclesToBogie = addCommas(radial_cyclesToBogie);
		document.getElementById("radialCyclesToBogie").innerHTML = Print_radial_cyclesToBogie;
		document.forms['testCalculator'].form_radialCyclesToBogie.value = Print_radial_cyclesToBogie;
		
		Print_radial_cyclesToCompletion = addCommas(radial_cyclesToCompletion);
		document.getElementById("radialCyclesToCompletion").innerHTML = Print_radial_cyclesToCompletion;
		document.forms['testCalculator'].form_radialCyclesToCompletion.value = Print_radial_cyclesToCompletion;
	}
	else{
		document.getElementById("radialTestLoad").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_radialTestLoad.value = "";
		document.getElementById("radialCyclesToBogie").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_radialCyclesToBogie.value = "";
		document.getElementById("radialCyclesToCompletion").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_radialCyclesToCompletion.value = "";
	}
	
	/* Calculate Rotary Results */	
	if((tire_loadedradius != '' || tire_loadedradiusAuto != '') && Exist_wheel_offset && Exist_wheel_ratedload){
		corneringComplete = true;
		var rotary_W = wheel_ratedload;
		if(tire_loadedradius != ''){
			var rotary_R = tire_loadedradius;	
		}
		else{
			var rotary_R = tire_loadedradiusAuto;	
		}	
		var rotary_Mu = 0.7;
		var rotary_d = (wheel_offset/1000); //Convert mm to m
		var rotary_S = getRotaryLoadFactor(test_corneringfactor);
		var rotary_M = (((((rotary_R/1000) * rotary_Mu) + rotary_d) * rotary_W * rotary_S));
		document.getElementById("corneringTestLoad").innerHTML = Math.round(rotary_M);
		document.forms['testCalculator'].form_corneringTestLoad.value = Math.round(rotary_M);
		
		var rotary_cyclesToBogie = getRotaryCycles(test_corneringfactor,tests_cornering);
		var rotary_cyclesToCompletion = rotary_cyclesToBogie * 2;
		
		Print_rotary_cyclesToBogie = addCommas(rotary_cyclesToBogie);
		document.getElementById("corneringCyclesToBogie").innerHTML = Print_rotary_cyclesToBogie;
		document.forms['testCalculator'].form_corneringCyclesToBogie.value = Print_rotary_cyclesToBogie;
		
		Print_rotary_cyclesToCompletion = addCommas(rotary_cyclesToCompletion);
		document.getElementById("corneringCyclesToCompletion").innerHTML = Print_rotary_cyclesToCompletion;
		document.forms['testCalculator'].form_corneringCyclesToCompletion.value = Print_rotary_cyclesToCompletion;
	}
	else{
		document.getElementById("corneringTestLoad").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_corneringTestLoad.value = "";
		document.getElementById("corneringCyclesToBogie").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_corneringCyclesToBogie.value = "";
		document.getElementById("corneringCyclesToCompletion").innerHTML = "<i>N/A</i>";	
		document.forms['testCalculator'].form_corneringCyclesToCompletion.value = "";
	}
	
	/* Calculate Impact Results */	
	if(Exist_wheel_ratedload){
		impactComplete = true;
		var impact_W = (wheel_ratedload/9.8); //convert N to kg
		var impact_Constant = 180;
		var impact_D = (0.6 * impact_W) + impact_Constant;
		document.getElementById("impactTestLoad").innerHTML = Math.round(impact_D);
		document.forms['testCalculator'].form_impactTestLoad.value = Math.round(impact_D);
		
		if(vehicle_placcard != ''){
			var impactTestPressure = vehicle_placcard;	
		}
		else{
			var impactTestPressure = 29;		
		}
		document.getElementById("impactTestPressure").innerHTML = impactTestPressure;
		document.forms['testCalculator'].form_impactTestPressure.value = impactTestPressure;
	}
	else{
		document.getElementById("impactTestLoad").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_impactTestLoad.value = "";
		document.getElementById("impactTestPressure").innerHTML = "<i>N/A</i>";
		document.forms['testCalculator'].form_impactTestPressure.value = "";
	}
	
	if(radialComplete && corneringComplete && impactComplete){
		document.getElementById("printTestResults").innerHTML = "<input type='submit' name='printdata' value='Print Calculator Results'>";
	}
	else{
		document.getElementById("printTestResults").innerHTML = "Fill out all required fields to print results.  Required fields are in bold.";
	}
	
}
