function reset() {
	Efficiency.resetAll();
	Tow.resetAll();
}


function Efficiency() {}

	Efficiency.resetAll = function() {
		document.getElementById("eff").reset();
		document.getElementById("eff-input1-label").innerHTML = "KV 40 °C";
		document.getElementById("eff-input2-label").innerHTML = "VI";
		document.getElementById("eff-pressure-label").innerHTML = "Pressure, Bar";
	}

	Efficiency.resetResults = function() {
		document.getElementById("eff-rpm").value = "";

		for(var i = 0; i < document.getElementsByName("eff-t").length; ++i) {
			document.getElementsByName("eff-t")[i].value = "";
			document.getElementsByName("eff-kv")[i].value = "";
			document.getElementsByName("eff-ve")[i].value = "";
		}
	}

	Efficiency.solve = function() {
		var a1, a2, b, flow, geom, kv, kv40, kv100, p, ve, vi;
		var t = new Array();

		document.getElementById("eff-input1").value = document.getElementById("eff-input1").value.replace(/,/, ".");
		document.getElementById("eff-input2").value = document.getElementById("eff-input2").value.replace(/,/, ".");
		document.getElementById("eff-pressure").value = document.getElementById("eff-pressure").value.replace(/,/, ".");
		document.getElementById("eff-min").value = document.getElementById("eff-min").value.replace(/,/, ".");
		document.getElementById("eff-max").value = document.getElementById("eff-max").value.replace(/,/, ".");

		switch(document.getElementById("eff-pump")[document.getElementById("eff-pump").selectedIndex].text) {
			case "Bosch gear pump":
				document.getElementById("eff-rpm").value = "1500";
				flow = 1641;
				geom = 44.6 / 0.82;
				break;
			case "Vickers V20 Vane pump":
				document.getElementById("eff-rpm").value = "1200";
				flow = 31.7;
				geom = 0.0302;
				break;
			case "Vickers V104 Vane pump":
				document.getElementById("eff-rpm").value = "1200";
				flow = 32.2;
				geom = 0.0384;
				break;
			default:
				alert("Please Select a pump");
				return false;
		}

		if(document.getElementsByName("eff-options")[0].checked) {
			if(document.getElementById("eff-input1").value == "" || isNaN(document.getElementById("eff-input1").value)) {
				alert("Please enter a number as KV40!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(parseFloat(document.getElementById("eff-input1").value) < 2) {
				alert("KV40 must be higher than 2!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(document.getElementById("eff-input2").value == "" || isNaN(document.getElementById("eff-input2").value)) {
				alert("Please enter a number as VI!");
				document.getElementById("eff-input2").value = "";
				document.getElementById("eff-input2").focus();
				return false;
			}
		}

		if(document.getElementsByName("eff-options")[1].checked) {
			if(document.getElementById("eff-input1").value == "" || isNaN(document.getElementById("eff-input1").value)) {
				alert("Please enter a number as KV40!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(parseFloat(document.getElementById("eff-input1").value) < 2) {
				alert("KV40 must be higher than 2!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(document.getElementById("eff-input2").value == "" || isNaN(document.getElementById("eff-input2").value)) {
				alert("Please enter a number as KV100!");
				document.getElementById("eff-input2").value = "";
				document.getElementById("eff-input2").focus();
				return false;
			}
			if(parseFloat(document.getElementById("eff-input2").value) < 2) {
				alert("KV100 must be higher than 2!");
				document.getElementById("eff-input2").value = "";
				document.getElementById("eff-input2").focus();
				return false;
			}
		}

		if(document.getElementsByName("eff-options")[2].checked) {
			if(document.getElementById("eff-input1").value == "" || isNaN(document.getElementById("eff-input1").value)) {
				alert("Please enter a number as KV100!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(parseFloat(document.getElementById("eff-input1").value) < 2) {
				alert("KV100 must be higher than 2!");
				document.getElementById("eff-input1").value = "";
				document.getElementById("eff-input1").focus();
				return false;
			}
			if(document.getElementById("eff-input2").value == "" || isNaN(document.getElementById("eff-input2").value)) {
				alert("Please enter a number as VI!");
				document.getElementById("eff-input2").value = "";
				document.getElementById("eff-input2").focus();
				return false;
			}
		}

		if(document.getElementById("eff-pressure").value == "" || isNaN(document.getElementById("eff-pressure").value)) {
			alert("Please enter a number as Pressure!");
			document.getElementById("eff-pressure").value = "";
			document.getElementById("eff-pressure").focus();
			return false;
		}
		if(document.getElementById('eff-pressure-label').innerHTML == "Pressure, psi" && parseFloat(document.getElementById("eff-pressure").value) > 2500) {
			alert("Please enter a Pressure below 2500 psi");
			document.getElementById("eff-pressure").value = "";
			document.getElementById("eff-pressure").focus();
			return false;
		}
		if(document.getElementById('eff-pressure-label').innerHTML == "Pressure, Bar" && parseFloat(document.getElementById("eff-pressure").value) > 275) {
			alert("Please enter a Pressure below 275 bars");
			document.getElementById("eff-pressure").value = "";
			document.getElementById("eff-pressure").focus();
			return false;
		}
		if(document.getElementById("eff-min").value == "" || isNaN(document.getElementById("eff-min").value)) {
			alert("Please enter a number as Minimum Temperature Range!");
			document.getElementById("eff-min").value = "";
			document.getElementById("eff-min").focus();
			return false;
		}
		if(document.getElementById("eff-max").value == "" || isNaN(document.getElementById("eff-max").value)) {
			alert("Please enter a number as Maximum Temperature Range!");
			document.getElementById("eff-max").value = "";
			document.getElementById("eff-max").focus();
			return false;
		}
		if(parseFloat(document.getElementById("eff-min").value) >= parseFloat(document.getElementById("eff-max").value)) {
			alert("Maximum must be higher than Minimum!");
			document.getElementById("eff-min").value = "";
			document.getElementById("eff-max").value = "";
			document.getElementById("eff-min").focus();
			return false;
		}

		if(document.getElementsByName("eff-options")[0].checked) {
			kv40 = parseFloat(document.getElementById("eff-input1").value);
			vi = parseFloat(document.getElementById("eff-input2").value);
			kv100 = calcKv100(vi, kv40);
		}
		if(document.getElementsByName("eff-options")[1].checked) {
			kv40 = parseFloat(document.getElementById("eff-input1").value);
			kv100 = parseFloat(document.getElementById("eff-input2").value);
		}
		if(document.getElementsByName("eff-options")[2].checked) {
			kv100 = parseFloat(document.getElementById("eff-input1").value);
			vi = parseFloat(document.getElementById("eff-input2").value);
			kv40 = calcKv40(vi, kv100);
		}

		if(((parseInt(document.getElementById("eff-min").value / 10) + 1) * 10) + 79.9 >= parseFloat(document.getElementById("eff-max").value)) {
			t[0] = parseFloat(document.getElementById("eff-min").value);

			if((parseInt(document.getElementById("eff-min").value / 10) + 1) * 10 < parseFloat(document.getElementById("eff-max").value)) {
				t[1] = (parseInt(document.getElementById("eff-min").value / 10) + 1) * 10;

				for(var i = 2; i < 10; ++i) {
					if(t[i - 1] + 10 < parseFloat(document.getElementById("eff-max").value)) {
						t[i] = t[i - 1] + 10;
					}
					else {
						t[i] = parseFloat(document.getElementById("eff-max").value);
						break;
					}
				}
			}
			else {
				t[1] = parseFloat(document.getElementById("eff-max").value);
			}
		}
		else {
			a1 = (parseFloat(document.getElementById("eff-max").value) - parseFloat(document.getElementById("eff-min").value)) / 9;
			a1 = parseInt(a1 * 10 + 0.5) / 10;

			t[0] = parseFloat(document.getElementById("eff-min").value);

			a2 = parseFloat(document.getElementById("eff-min").value);
			for(var i = 1; i < 9; ++i) {
				a2 = a2 + a1;
				t[i] = parseInt((a2 + 5) / 10) * 10;
			}

			t[9] = parseFloat(document.getElementById("eff-max").value);
		}

		for(var i = 0; i < t.length; ++i) {
			b = (Math.log(Math.log(kv100)) - Math.log(Math.log(kv40))) / (Math.log((273.15 + 100) / (273.15 + 40)));
			kv = Math.log(Math.log(kv100)) - b * Math.log(100 + 273.15);
			kv = Math.exp(Math.exp(kv + b * Math.log(273.15 + t[i])));
			kv = parseInt(kv * 100 + 0.5) / 100;
			ve = parseInt((((flow - geom * (parseFloat(document.getElementById("eff-pressure").value) / kv)) / flow) * 100) * 10 + 0.5) / 10;

			if(ve >= 0) {
				document.getElementsByName("eff-t")[i].value = t[i];
				document.getElementsByName("eff-kv")[i].value = kv;
				document.getElementsByName("eff-ve")[i].value = ve;
			}
		}
	}


function Tow() {}

	Tow.lowKv40 = 28.8;
	Tow.highKv40 = 35.2;

	Tow.resetAll = function() {
		document.getElementById("tow").reset();
		Tow.lowKv40 = 28.8;
		Tow.highKv40 = 35.2;
	}

	Tow.resetResults = function() {
		document.getElementById("tow-kv100").value = "";
		document.getElementById("tow-t10").value = "";
		document.getElementById("tow-t750").value = "";
		document.getElementById("tow-otw").value = "";
	}

	Tow.solve = function() {
		document.getElementById("tow-kv40").value = document.getElementById("tow-kv40").value.replace(/,/, ".");
		document.getElementById("tow-vi").value = document.getElementById("tow-vi").value.replace(/,/, ".");

		if(document.getElementById("tow-kv40").value == "" || isNaN(document.getElementById("tow-kv40").value)
				|| parseFloat(document.getElementById("tow-kv40").value) < Tow.lowKv40 || parseFloat(document.getElementById("tow-kv40").value) > Tow.highKv40) {
			alert("Please enter a number between " + Tow.lowKv40 + " and " + Tow.highKv40 + " as KV40!");
			document.getElementById("tow-kv40").value = "";
			document.getElementById("tow-kv40").focus();
			return false;
		}
		if(document.getElementById("tow-vi").value == "" || isNaN(document.getElementById("tow-vi").value)
				|| parseFloat(document.getElementById("tow-vi").value) < 90 || parseFloat(document.getElementById("tow-vi").value) > 200) {
			alert("Please enter a number between 90 and 200 as Viscosity Index!");
			document.getElementById("tow-vi").value = "";
			document.getElementById("tow-vi").focus();
			return false;
		}
		
		document.getElementById("tow-kv40").value = Math.round(parseFloat(document.getElementById("tow-kv40").value) * 10) / 10;
		document.getElementById("tow-vi").value = Math.round(parseFloat(document.getElementById("tow-vi").value));

		var kv40 = parseFloat(document.getElementById("tow-kv40").value);
		var kv100 = calcKv100(parseFloat(document.getElementById("tow-vi").value), kv40);
		
		var b = Math.log(Math.log(kv40) / Math.log(kv100)) / Math.log(313 / 373);
		var f = Math.log(Math.log(kv40)) - b * Math.log(313);
		var t10 = Math.exp((Math.log(Math.log(10)) - f) / b) - 273;
		var t850 = Math.exp((Math.log(Math.log(850)) - f) / b) - 273;
		
		document.getElementById("tow-kv100").value = parseInt(kv100 * 100 + 0.5) / 100;
		document.getElementById("tow-t10").value = parseInt(t10 * 10 + 0.5) / 10;
		document.getElementById("tow-t750").value = parseInt(t850 * 10 + 0.5) / 10;
		document.getElementById("tow-otw").value = parseInt((t10 - t850) * 10 + 0.55) / 10;
	}
