//set global variables
var EA = 50000 //activation energy in J per mol
var R = 8.314472 //ideal gas constant in J per K per mol
var lastFocus = "temperature2" //keeps a record of the last clicked data box so we know if we are calculating temperature or time, sets a default just in case it's bypassed

function isNumberKey(evt, elementID) //checks that the character being entered is a number, if it isn't then it's not entered
	{
		var e = window.event || evt  //cross broswer compatibility
		var charCode = e.which || e.keyCode; //cross broswer compatibility

		if ((elementID == "temperature1") || (elementID == "temperature2")){ //are we a temperature box, if yes allow a value of zero
			if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 45  && charCode != 37  && charCode != 39) {//allow number and -
				return false;
			}
		}

		else {
			if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 37  && charCode != 39) { //allow number and -
				return false;
			}
		}
		if (e.shiftkey) 
			return false;
		
		else
			return true;
		
	}
	
function checkElementValue(elementID, defaultValue)
	{

		if ((elementID == "temperature1") || (elementID == "temperature2")){ //are we a temperature box, if yes allow a value of zero
		var test = Number(document.getElementById(elementID).value);
			if ((document.getElementById(elementID).value == 0) || (isNaN(test))) { //checks to see if it is empty or not a number
			document.getElementById(elementID).value = defaultValue;
			}
			else if (elementID == "temperature2"){
			lastFocus = elementID
			}
		}
		else if ((document.getElementById(elementID).value == "") || (document.getElementById(elementID).value == "0")){ //checks to see if it is empty or zero
			document.getElementById(elementID).value = defaultValue;
		}
		else {
			if (document.getElementById(elementID).value.length == 1) {
				document.getElementById(elementID).value = "0" + document.getElementById(elementID).value
			}
			if ((elementID == "timeHours2") || (elementID == "timeMinutes2") || (elementID == "timeSeconds2")) {
			lastFocus = elementID
			}
		}
	}
	
function checkCalculateButton()
	{
	
	var time1 = (document.getElementById("timeHours1").value * 3600) + (document.getElementById("timeMinutes1").value * 60) + (document.getElementById("timeSeconds1").value * 1);
	var time2 = (document.getElementById("timeHours2").value * 3600) + (document.getElementById("timeMinutes2").value * 60) + (document.getElementById("timeSeconds2").value * 1);
	
	var temp1 = document.getElementById("temperature1").value //NOT converted to Kelvin as it could be ? and we just need to check it's not
	var temp2 = document.getElementById("temperature2").value //NOT converted to Kelvin as it could be ? and we just need to check it's not

	if (time1 !=0 && temp1 != "?" && temp1 != "" && temp1 != "-" && temp2 != "?" && temp2 != "" && temp2 != "-")  { //check we have valid values for time calc
			document.getElementById("calculateBtn").disabled = false;
		}
	else if (time1 !=0 && temp1 != "?" && temp1 != "" && temp1 != "-" && time2 != 0){ //check we have valid values for temp calc
			document.getElementById("calculateBtn").disabled = false;
		}
	else {
			document.getElementById("calculateBtn").disabled = true;
		}
	
		
	}
	
function clearPromptValue(textboxName, defaultValue) //clears the default value when a users clicks in the box
	{ 
		if (document.getElementById(textboxName).value == defaultValue){
			document.getElementById(textboxName).value = "";
		}
	}

function calculateReactionTimeOrTemperature()
{ 

	var time1 = (document.getElementById("timeHours1").value * 3600) + (document.getElementById("timeMinutes1").value * 60) + (document.getElementById("timeSeconds1").value * 1);
	var time2 = (document.getElementById("timeHours2").value * 3600) + (document.getElementById("timeMinutes2").value * 60) + (document.getElementById("timeSeconds2").value * 1);
	
	var temp1 = Number(document.getElementById("temperature1").value) + 273.15; //convert to Kelvin
	var temp2 = Number(document.getElementById("temperature2").value) + 273.15; //convert to Kelvin
	
	//if ((document.getElementById("temperature2").value != "?")) { //do the time calculation by default
	if (lastFocus == "temperature2") { //do the time calculation 

	
		var calculatedTime = convertToHMS(calculateReactionTime(temp1, time1, temp2));
		
		document.getElementById("timeHours2").value = ((calculatedTime.getUTCHours() < 10) ? "0" : "") + calculatedTime.getUTCHours() //add leading zero if needed
		document.getElementById("timeMinutes2").value = ((calculatedTime.getUTCMinutes() < 10) ? "0" : "") + calculatedTime.getUTCMinutes() //add leading zero if needed
		document.getElementById("timeSeconds2").value = ((calculatedTime.getUTCSeconds() < 10) ? "0" : "") + calculatedTime.getUTCSeconds() //add leading zero if needed
		
	}
	
	//else if ((document.getElementById("temperature2").value == "?") && (time2 != 0))  { //calculate the temperature, but check we have a valid time first
	else if ((lastFocus == "timeHours2") || (lastFocus == "timeMinutes2") || (lastFocus == "timeSeconds2"))  { //calculate the temperature, but check we have a valid time first
	
	document.getElementById("temperature2").value = Math.round((calculateReactionTemperature(temp1, time1, time2)) - 273.15); //convert back to degrees C before displaying
		
	}

	else {
	
	alert("Error!\n\nPlease enter only the desired working temperature (Temperature 2) or working time (Time 2)"); //this should never happen!!!
	
	}
	
}

function calculateReactionTime(temp1, time1, temp2) //temp1 and temp2 to be in Kelvin and time1 to be in seconds
	{
		var time2 = time1 * (Math.pow(Math.E, (-EA/(R*temp1))) / Math.pow(Math.E, (-EA/(R*temp2))));
		return time2;
	}

function calculateReactionTemperature(temp1, time1, time2) //temp1 to be in Kelvin and time1 and time2 to be in seconds
	{
		var temp2 = -EA / (R*((Math.log(time1 / time2)) + (Math.log(Math.pow(Math.E, (-EA/(R*temp1)))))));
		return temp2;
	}

function convertToHMS(seconds)
	{
		var t = new Date(0);
		t.setSeconds(seconds);
		return t;
	}

function clearReactionTimeAndTemperature(){
	document.getElementById("temperature2").value = "?";
	document.getElementById("timeHours2").value = "00";
	document.getElementById("timeMinutes2").value = "00";
	document.getElementById("timeSeconds2").value = "00";
	document.getElementById("calculateBtn").disabled = true;
}
