/**
 * lurgi unit converter
 *
 * lastchanged 30.09.2010
 * autor: rms GmbH (mkettel@gmail.com)
 */


 /****************************************************************\
  * DEFINITIONEN der Referenzwerte
 \****************************************************************/

/**
 * CONCENTRATION (Referenz = mole/meter_3)
 ***********************************************/
var concentration 			= Array();
concentration["kat"] 		= "Concentration";
for(var i=0; i<4; i++) {
	concentration[i] = Array();
}

concentration[0]["name"] 	= "mole/meter³";
concentration[0]["ref"] 	= 1;		
concentration[1]["name"] 	= "mole/decimeter³";
concentration[1]["ref"] 	=0.001;		
concentration[2]["name"] 	= "mole/liter";
concentration[2]["ref"] 	= 0.001;		
concentration[3]["name"] 	= "one elementary entity/meter³";
concentration[3]["ref"] 	= 6.022137e+023;	

/**
 * DENSITY (Referenz = ton/yard_3)
 ***********************************************/
var density 			= Array();
density["kat"] 	= "Density";
for(var i=0; i<6; i++) {
	density[i] = Array();
}

density[0]["name"] 	= "ton/yard³";
density[0]["ref"] 	= 1;
density[1]["name"] 	= "gram/centimeter³";
density[1]["ref"] 	= 0.6935925;	
density[2]["name"] 	= "gram/meter³";
density[2]["ref"] 	= 693592.5;		
density[3]["name"] 	= "ounce/gallon";
density[3]["ref"] 	= 92.61296;		
density[4]["name"] 	= "pound/foot³";
density[4]["ref"] 	= 43.29957;	
density[5]["name"] 	= "pound/inch³";
density[5]["ref"] 	= 0.02505762;		

/**
 * FLOW (Referenz = gallon/minute	)
 ***********************************************/ 	
var flow 			= Array();
flow["kat"] 	= "Flow";
for(var i=0; i<8; i++) {
	flow[i] = Array();
}

flow[0]["name"] 	= "foot³/hour";
flow[0]["ref"] 	= 8.020833;		
flow[1]["name"] 	= "gallon (UK)/day";
flow[1]["ref"] 	= 1199.05;
flow[2]["name"] 	= "gallon (UK)/hour";
flow[2]["ref"] 	= 49.96043;	
flow[3]["name"] 	= "gallon/day";
flow[3]["ref"] 	= 1440;		
flow[4]["name"] 	= "gallon/hour";
flow[4]["ref"] 	= 60;
flow[5]["name"] 	= "liter/day";
flow[5]["ref"] 	= 5450.993;	
flow[6]["name"] 	= "liter/hour";
flow[6]["ref"] 	= 227.1247;
flow[7]["name"] 	= "meter³/day";
flow[7]["ref"] 	= 5.450993;
flow[7]["name"] 	= "meter³/hour";
flow[7]["ref"] 	= 0.2271247;	
	
/**
 * POWER (Referenz = horsepower)
 ***********************************************/	
var energy 	= Array();
energy["kat"] 	= "Power";
for(var i=0; i<7; i++) {
	energy[i] = Array();
}

energy[0]["name"] 	= "BTU/hour";
energy[0]["ref"] 		= 2546.699;
energy[1]["name"] 	= "BTU/minute";
energy[1]["ref"] 		= 42.44498;	
energy[2]["name"] 	= "calorie/second";
energy[2]["ref"] 		= 178.2659;	
energy[3]["name"] 	= "horsepower";
energy[3]["ref"] 		= 1;		
energy[4]["name"] 	= "kilowatt";
energy[4]["ref"] 		= 0.7456999;
energy[5]["name"] 	= "megawatt";
energy[5]["ref"] 		= 0.0007456999;	
energy[6]["name"] 	= "watt";
energy[6]["ref"] 		= 745.6999;	
	
/**
 * PRESSURE (Referenz = bar)
 ***********************************************/
var pressure = Array();
pressure["kat"] 	= "Pressure";
for(var i=0; i<12; i++) {
	pressure[i] = Array();
}

pressure[0]["name"] 	= "atmosphere";
pressure[0]["ref"] 	= 0.9869233;	
pressure[1]["name"] 	= "bar";
pressure[1]["ref"] 	= 1;	
pressure[2]["name"] 	= "centimeters of mercury";
pressure[2]["ref"] 	= 75.00617;	
pressure[3]["name"] 	= "inches of mercury";
pressure[3]["ref"] 	= 29.52999;	
pressure[4]["name"] 	= "megapascal";
pressure[4]["ref"] 	= 0.1;	
pressure[5]["name"] 	= "pascal";
pressure[5]["ref"] 	= 100000;	
pressure[6]["name"] 	= "pound/foot²";
pressure[6]["ref"] 	= 2088.543;
pressure[7]["name"] 	= "pound/Inch²";
pressure[7]["ref"] 	= 14.50377;
pressure[8]["name"] 	= "PSI";
pressure[8]["ref"] 	= 14.50377;	
pressure[9]["name"] 	= "ton/foot²";
pressure[9]["ref"] 	= 1.044272;
pressure[10]["name"] = "ton/inch²";
pressure[10]["ref"] 	= 0.007251887;	
pressure[11]["name"] = "torr";
pressure[11]["ref"] 	= 750.0617;
	
/**
 * TEMEPRATURE (Referenz = celsius)
 ***********************************************/
var temp	= Array();
temp["kat"] 	= "Temperature";
for(var i=0; i<4; i++) {
	temp[i] = Array();
}

temp[0]["name"] 	= "celsius";
temp[0]["ref"] 	= 1;
temp[1]["name"] 	= "fahrenheit";
temp[1]["ref"] 	= 33.8;	
temp[2]["name"] 	= "kelvin";
temp[2]["ref"] 	= 274.15;		
temp[3]["name"] 	= "rankine";
temp[3]["ref"] 	= 493.47;					
/**
 * VOLUME (Referenz = cubic foot)
 ***********************************************/
var volume = Array();
volume["kat"] 	= "Volume";
for(var i=0; i<7; i++) {
	volume[i] = Array();
}

volume[0]["name"] = "cubic centimeter";
volume[0]["ref"] 	= 28316.85;	
volume[1]["name"] = "cubic foot";
volume[1]["ref"] 	= 1;		
volume[2]["name"] = "cubic inch";
volume[2]["ref"] 	= 1728;	
volume[3]["name"] = "gallon";
volume[3]["ref"] 	= 7.480519;	
volume[4]["name"] = "gallon (UK)";
volume[4]["ref"] 	= 6.228833;	
volume[5]["name"] = "liter";
volume[5]["ref"] 	= 28.31685;	
volume[6]["name"] = "milliliter";
volume[6]["ref"] 	= 28316.85;
	
/**
 * VOLUME DRY (Referenz = liter)
 ***********************************************/
var volume_dry = Array();
volume_dry["kat"] 	= "Volume Dry";

for(var i=0; i<4; i++) {
	volume_dry[i] = Array();
}

volume_dry[0]["name"] = "barrel (UK)";
volume_dry[0]["ref"] 	= 0.00628484;	
volume_dry[1]["name"] = "barrel (US)";
volume_dry[1]["ref"] 	= 0.00628981;	
volume_dry[2]["name"] = "bushel";
volume_dry[2]["ref"] 	= 0.02837759;	
volume_dry[3]["name"] = "liter";
volume_dry[3]["ref"] 	= 1;	
	
	
 /****************************************************************\
  * FUNKTIONEN
 \****************************************************************/		
var aktuelle_einheit = Array();	
			
/**
 * die Von- und Nachfelder 
 * nach einem Kategorienwechsel aktualisieren
 ***********************************************/
function change(obj) 
{	
	aktuelle_einheit = flow;
	
	switch(obj.value) {			
		case "Density":		
			aktuelle_einheit = density;					
			break;
		case "Concentration":		
			aktuelle_einheit = concentration;
			break;
		case "Flow":		
			aktuelle_einheit = flow;					
			break;
		case "Power":		
			aktuelle_einheit = energy;					
			break;
		case "Pressure":		
			aktuelle_einheit = pressure;					
			break;
		case "Temperature":		
			aktuelle_einheit = temp;	
			break;
		case "Volume":		
			aktuelle_einheit = volume;					
			break;
		case "Volume Dry":		
			aktuelle_einheit = volume_dry;					
			break;
		default:
			aktuelle_einheit = flow;
			break;
	}	
	hinzufuegen (aktuelle_einheit);
}// end change	
		
/**
 * die Von- und Nachfelder 
 * mit Werten füllen, 
 * die zur gewählten Kategorie passen
 ***********************************************/
function hinzufuegen (aktuelle_einheit) 
{	
	document.Form1.von.options.length=0;		
	for(var i=0; i<aktuelle_einheit.length; i++) {
		NeuerEintrag = new Option(aktuelle_einheit[i]["name"], aktuelle_einheit[i]["ref"], false, true);
		document.Form1.von.options[document.Form1.von.length] = NeuerEintrag;		 
	}	
	
	document.Form1.nach.options.length=0;
	for(var i=0; i<aktuelle_einheit.length; i++) {
		NeuerEintrag = new Option(aktuelle_einheit[i]["name"], aktuelle_einheit[i]["ref"], false, true);
		document.Form1.nach.options[document.Form1.nach.length] = NeuerEintrag;  
}		
}// end hinzuf
	
/**
 * Werte umrechnen
 ***********************************************/
function umrechnen(obj) 
{	
	var nachkomma = 4;	
	var ergebnis 	= 0;	
	
	var von 	= obj.form.von.value;
	var nach	= obj.form.nach.value;		
	var anz 	= obj.form.eingabe.value;
	anz 			= anz.replace(",", ".");	
	anz 			= parseFloat(anz);
	
	/**
	 * Temperature - 
	 * danicht linear, müssen extra Formeln angewendet werden 
	 */
	var indexVon = obj.form.von.selectedIndex;
	var indexNach = obj.form.nach.selectedIndex;
	
	if(obj.form.einheiten.value == "Temperature") 
	{			
		// CELSIUS nach Fahrenheit
		if(indexVon == 0 && indexNach == 1) {
			ergebnis = 1.8 * anz + 32;
		}			
		// CELSIUS nach Kelvin 
		if(indexVon == 0 && indexNach == 2) {
			ergebnis = anz + 273.15;
		}		
		// CELSIUS nach Rankine
		if(indexVon == 0 && indexNach == 3) {
			ergebnis = anz * 1.8 + 32 + 459.67;
		}
		// CELSIUS nach Celsius
		if(indexVon == 0 && indexNach == 0) {
			ergebnis = anz*von;
		}			
		// FAHRENHEIT nach Celsius
		if(indexVon == 1 && indexNach == 0) {
			ergebnis = (anz-32)/1.8;
		}				
		// FAHRENHEIT nach Kelvin
		if(indexVon == 1 && indexNach == 2) {
			ergebnis =  ((anz +459.67 ) / 1.8);
			//(°F + 459,67) / 1,8
		}		
		// FAHRENHEIT nach Rankine
		if(indexVon == 1 && indexNach == 3) {
			ergebnis = anz + 459.67;
		}
		// FAHRENHEIT nach Farenheit
		if(indexVon == 1 && indexNach == 1) {
			ergebnis = anz;
		}							
		// KELVIN nach Celsius
		if(indexVon == 2 && indexNach == 0) {
			ergebnis = anz - 273.15;
		}				
		// KELVIN nach Fahrenheit
		if(indexVon == 2 && indexNach == 1) {
			ergebnis = (anz*1.8)-459.67;
		}		
		// KELVIN nach Rankine
		if(indexVon == 2 && indexNach == 3) {
			ergebnis = anz*1.8;
		}	
		// KELVIN nach Kelvin
		if(indexVon == 2 && indexNach == 2) {
			ergebnis = anz;
		}							
		// RANKINE nach Celsius
		if(indexVon == 3 && indexNach == 0) {
			ergebnis = (anz-32-459.67)/1.8;
		}				
		// RANKINE nach Fahrenheit
		if(indexVon == 3 && indexNach == 1) {
			ergebnis = anz - 459.67;
		}		
		// RANKINE nach Kelvin
		if(indexVon == 3 && indexNach == 2) {
			ergebnis = anz/1.8
		}
		// RANKINE nach Rankine
		if(indexVon == 3 && indexNach == 3) {
			ergebnis = anz;
		}							
	} else { // Alles, was nicht Temperatur ist
		ergebnis = (anz*nach) / von;			
	}			
		
	// Ergebnis auf angegebene Nachkommastellen runden
	var round = 1000000;		
	switch(nachkomma) {	
		case 2:		
			round = 100;					
			break
		case 3:		
			round = 1000;					
			break	
		case 4:		
			round = 10000;					
			break	
		case 5:		
			round = 100000;					
			break	
		case 6:		
			round = 1000000;					
			break
		default:
			round = 100000;
		break;				
	}//end switch 
	
	ergebnis = Math.round(ergebnis * round) / round;
	//ergebnis = ergebnis.replace(".", ",");	
	
	obj.form.ergebnis.value = ergebnis;
}// end umrechnen
