//==========================================
//
// Conversion Functions
//
//==========================================


// unitSplit
function unitSplit(value,multiplier) {
	
	var resultArray = new Array(2);
	
	resultArray[0] = Math.floor(value);
	resultArray[1] = Math.round((value - resultArray[0]) * multiplier);
	
	while(resultArray[1] >= multiplier) {
		resultArray[0]++;
		resultArray[1] -= multiplier;
	}
	return resultArray;
}

// NaN To Zero
function nanToZero(value) {

	if(isNaN(value)) {
		value = 0;
	}
	return value;
}

//
// Fahrenheit to Celsius
//
function fahrenheitToCelsius(f) {
	var c = (f - 32) * 5. / 9.;
	return c;
}


//
// Fahrenheit to Celsius
//
function celsiusToFahrenheit(c) {
	var f = (c * 9./5.) + 32;
	return f;
}

//
// Celsius to Kelvin
//
function celsiusToKelvin(c) {
	var k = c + 273.15;
	return k;
}

//
// Kelvin to Celsius
//
function kelvinToCelsius(k) {
	var c = k - 273.15;
	return c;
}

//
// Fahrenheit to Kelvin
//
function fahrenheitToKelvin(f) {
	var c = fahrenheitToCelsius(f);
	var k = celsiusToKelvin(c);
	return k;
}

//
// Kelvin to Fahrenheit
//
function kelvinToFahrenheit(k) {
	var c = kelvinToCelsius(k);
	var f = celsiusToFahrenheit(c);
	return f;
}

//
// Fahrenheit to Rankine
//
function fahrenheitToRankine(f) {
	var r = f + 459.67;
	return r;
}

//
// Rankine to Fahrenheit
//
function rankineToFahrenheit(r) {
	var f = r - 459.67;
	return f;
}

//
// Celsius to Rankine
//
function celsiusToRankine(c) {
	var f = celsiusToFahrenheit(c);
	var r = fahrenheitToRankine(f);
	return r;
}

//
// Rankine to Celsius
//
function rankineToCelsius(r) {
	var f = rankineToFahrenheit(r);	
	var c = fahrenheitToCelsius(f);
	return c;
}

//
// Kelvin to Rankine
//
function kelvinToRankine(k) {
	var r = k * 1.8;
	return r;
}

//
// Rankine to Kevlin
//
function rankineToKelvin(r) {
	var k = r / 1.8;
	return k;
}

//
// Feet To Meters
//
function feetToMeters(feet) {
	var meters = feet * 0.3048;
	return meters;
}

//
// Meters To Feet
//
function metersToFeet(meters) {
	var feet = meters * 3.2808399;
	return feet;
}


//
// Miles To Km
//
function milesToKm(miles) {
	var km = miles * 1.609344;
	return km;
}

//
// km To Miles
//
function kmToMiles(km) {
	var miles = km / 1.609344;
	return miles;
}

//====================================
//
// Pints to Liters
//
function pintsToLiter(pints) {
	var liter = pints * 0.473176473;
	return liter;
}


//=====================================
//
// Water Content Conversions
//
//=====================================

//
// gpp to gpkg
// Grains per Pound to Grams (water) per Kilograms (air)
//
function gppToGpkg(gpp) {
	var grainsPerGram = 15.432;
	var poundsPerKg = 2.2;
	
	var gpkg = gpp * poundsPerKg / grainsPerGram;
	
	return gpkg;
}

//
// gpkg to gpp
// Grams (water) per Kilograms (air) to Grains per Pound
//
function gpkgToGpp(gpkg) {
	var grainsPerGram = 15.432;
	var poundsPerKg = 2.2;
	
	var gpp = gpkg * grainsPerGram / poundsPerKg;
	
	return gpp;
}



//=========================================
//
// Dew Point Calculation
//
//=========================================

function calcDewPoint(t,rh,tempID) {
	var result = -9999;
	if(tempID == 1) {
		result = dewPointFahrenheit(t,rh);
	} else if(tempID == 2) {
		result = dewPointCelsius(t,rh);
	} else if(tempID == 3) {
		result = dewPointKelvin(t,rh);
	} else if(tempID == 4) {
		result = dewPointRankine(t,rh);
	}
	return result;
}

function dewPoint_withTempCheck(t,rh) {
	var temperatureIDObj = window.document.getElementsByName('temperatureID');
	var result = -9999;
	if(temperatureIDObj.length > 0) {
		var temperatureID = temperatureIDObj[0].value;
		if(temperatureID == 1) {
			result = dewPointFahrenheit(t,rh);
		} else if(temperatureID == 2) {
			result = dewPointCelsius(t,rh);
		} else if(temperatureID == 3) {
			result = dewPointKelvin(t,rh);
		} else if(temperatureID == 4) {
			result = dewPointRankine(t,rh);
		}
	} else {
		result = dewPoint(t,rh);
	}
	return result;
}

function dewPoint(f,rh) {
	var c = fahrenheitToCelsius(f);
	var dewC = dewPointCelsius(c,rh);
	var dew = celsiusToFahrenheit(dewC);
	return dew;
}

function dewPointFahrenheit(f,rh) {
	var dew = dewPoint(f,rh);
	return dew;
}

function dewPointCelsius(c,rh) {
	
	
	//
	// August-Roche-Magnus approximation
	//
	// Good for 0C < T < 60C, 1% < RH < 100%, 0C < Dew < 50C
	//
	var a = 17.271;
	var b = 237.7;
	var c = parseFloat(c);
	var rh = parseFloat(rh);
	
	if((b+c) == 0) {
		var tau1 = 0;	
	} else {
		var tau1 = ((a * c) / (b + c));
	}
	var tau2 = Math.log(rh/100.0);
	var tau = tau1 + tau2;
	if((a - tau) == 0) {
		var dewC = 0;	
	} else {
		var dewC = (b * tau) / (a - tau);
	}
	
	if(isNaN(dewC)) {
		dewC = -273.15;
	}
	return dewC;
}

function dewPointKelvin(k,rh) {
	var c = kelvinToCelsius(k);
	var dewC = dewPointCelsius(c,rh);
	var dewK = celsiusToKelvin(dewC);
	return dewK;
}

function dewPointRankine(r,rh) {
	var c = rankineToCelsius(r);
	var dewC = dewPointCelsius(c,rh);
	var dewR = celsiusToRankine(dewC);
	return dewR;
}


//========================================
//
// Date Conversions
//
function mysqldate2mmddyy(mysqldate) {

	var dateSplit = mysqldate.split('-',3);
	var y2d = parseInt(dateSplit,10) % 100;
	
	var mmddyy = parseInt(dateSplit[1],10) + '/' + parseInt(dateSplit[2],10) + '/' + y2d;

	return mmddyy;
}

function mmddyy2mysqldate(mmddyy) {
	var dateSplit = mmddyy.split('/',3);
	var year = parseInt(dateSplit[2],10);
	var month = parseInt(dateSplit[0],10);
	var day = parseInt(dateSplit[1],10);
	if(year < 100) {
		// BWS - Bret W. Sheeley -
		// WARNING: Watch for Y2KC bug (year 2100)
		year += 2000;	
	}
	if(month < 10) {
		month = 0 + month.toString();	
	}
	if(day < 10) {
		day = 0 + day.toString();
	}
	var mysqldate = year + '-' + month + '-' + day;
	
	return mysqldate;
}

function mysqlTimeStampToDate(timestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
}

function mysqlDateStampToDate(datestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9])?$/;
    var parts=datestamp.replace(regex,"$1 $2 $3").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],0,0,0);
}
