var drinksEntered = new Array();
var drinksEnteredCounter = 0;
var totalDrinks = 0;
var totalAlcoholIngested = 0;

var rupDrink = new Array();
rupDrink["drink"] = new Array();			// Drink name, eg. "Beer"
rupDrink["alcohol_desc"] = new Array();		// Alcohol content description, eg. "Light"	| Linked to alcohol_num
rupDrink["alcohol_num"] = new Array();		// Alcohol content percentage, eg. "5.5";	| Linked to alcohol_desc
rupDrink["vessel_name"] = new Array();		// Vessel name, eg. "Stubbie";				| Linked to vessel_volume
rupDrink["vessel_volume"] = new Array();	// Vessel volume, eg. "375";				| Linked to vessel_name

rupDrink["drink"][0] = "Alus";
rupDrink["drink"][1] = "Vynas";
rupDrink["drink"][2] = "Spiritiniai gėrimai";

// Alcohol Content:

rupDrink["alcohol_desc"][0] = "Lengvas";
rupDrink["alcohol_desc"][1] = "Vidutinio stiprumo";
rupDrink["alcohol_desc"][2] = "Stiprus";
rupDrink["alcohol_desc"][3] = "Vynas";
rupDrink["alcohol_desc"][4] = "Portveinas";
rupDrink["alcohol_desc"][5] = "Aperityvas";
rupDrink["alcohol_desc"][6] = "Spiritiniai gėrimai";
rupDrink["alcohol_desc"][7] = "Brangieji spiritiniai gėrimai";
rupDrink["alcohol_desc"][8] = "Likeris";


rupDrink["alcohol_num"][0] = "2.7";
rupDrink["alcohol_num"][1] = "3.5";
rupDrink["alcohol_num"][2] = "4.9";
rupDrink["alcohol_num"][3] = "12";
rupDrink["alcohol_num"][4] = "18";
rupDrink["alcohol_num"][5] = "22";
rupDrink["alcohol_num"][6] = "37";
rupDrink["alcohol_num"][7] = "40";
rupDrink["alcohol_num"][8] = "45";
rupDrink["alcohol_num"][9] = "50";

// Drinking Vessel:

rupDrink["vessel_name"][0] = "Stiklinė";
rupDrink["vessel_name"][1] = "Pot";
rupDrink["vessel_name"][14] = "Mažas bokalas";
rupDrink["vessel_name"][2] = "Bokalas";
rupDrink["vessel_name"][11] = "Butelis";
rupDrink["vessel_name"][3] = "Skardinė";
rupDrink["vessel_name"][4] = "Maža vyno taurė";
rupDrink["vessel_name"][5] = "Didelė vyno taurė";
rupDrink["vessel_name"][6] = "Pusė vyno butelio";
rupDrink["vessel_name"][7] = "Vyno butelis";
rupDrink["vessel_name"][8] = "Stiklas portveino";
rupDrink["vessel_name"][9] = "Pusė stikliuko";
rupDrink["vessel_name"][10] = "Stikliukas";
rupDrink["vessel_name"][12] = "Skardinė";
rupDrink["vessel_name"][13] = "Bokalas";
rupDrink["vessel_name"][15] = "US Pint Glass";
rupDrink["vessel_name"][16] = "British Pint Glass";

rupDrink["vessel_volume"][0] = "200";
rupDrink["vessel_volume"][1] = "285";
rupDrink["vessel_volume"][14] = "250";
rupDrink["vessel_volume"][2] = "345";
rupDrink["vessel_volume"][11] = "250";
rupDrink["vessel_volume"][3] = "375";
rupDrink["vessel_volume"][4] = "120";
rupDrink["vessel_volume"][5] = "160";
rupDrink["vessel_volume"][6] = "375";
rupDrink["vessel_volume"][7] = "750";
rupDrink["vessel_volume"][8] = "60";
rupDrink["vessel_volume"][9] = "15";
rupDrink["vessel_volume"][10] = "30";
rupDrink["vessel_volume"][12] = "375";
rupDrink["vessel_volume"][13] = "345";
rupDrink["vessel_volume"][15] = "473";
rupDrink["vessel_volume"][16] = "568";

// Links:

var rupLink = new Array();
rupLink["drink_alcohol"] = new Array();

// Beer
rupLink["drink_alcohol"][0] = new Array();
rupLink["drink_alcohol"][0]["alcohol"] = new Array(
 0, 1, 2
);
rupLink["drink_alcohol"][0]["vessel"] = new Array(
 0, 1, 14, 2, 3, 15, 16
);

// Wine
rupLink["drink_alcohol"][1] = new Array();
rupLink["drink_alcohol"][1]["alcohol"] = new Array(
 3, 4
);
rupLink["drink_alcohol"][1]["vessel"] = new Array(
 8, 4, 5, 6, 7
);

// Spirit
rupLink["drink_alcohol"][2] = new Array();
rupLink["drink_alcohol"][2]["alcohol"] = new Array(
 5, 6, 7, 8
);
rupLink["drink_alcohol"][2]["vessel"] = new Array(
 9, 10, 13
);


function rupStartOver() {
	// Clear numDrinks and totalAlcoholIngested
	
	totalDrinks = 0;
	totalAlcoholIngested = 0;
	for (i = 0; i < drinksEntered.length; i++) {
		drinksEntered[i] = "";
	}
	document.getElementById('rupOutputDrinksEntered').value = "Dar nepasirinkote gėrimų.";	
}

function rupAddDrink() {
	// Add a drink to the list
	
	if ((parseInt(document.getElementById('rupInputAlcoholLevel').value) >= 0) && (parseInt(document.getElementById('rupInputVessel').value) >= 0)) {
		// Need to use custom data from input boxes
		var alcoholLevel = document.getElementById('rupInputAlcoholLevel').value;
		var alcoholName = "Alkoholinis mišinys (" + alcoholLevel + "%)";
		var vesselVolume = document.rupInput.rupInputVessel.value;
		var vesselName = "Tara";
		// Clear input fields:
		document.getElementById('rupInputAlcoholLevel').value = "";
		document.getElementById('rupInputVessel').value = "";

	} else {
		// Need to use pre-defined data from drop-down boxes
		var alcoholName = document.getElementById('rupSelAlcoholLevel').options[document.getElementById('rupSelAlcoholLevel').selectedIndex].text;
		var alcoholLevel = document.getElementById('rupSelAlcoholLevel').options[document.getElementById('rupSelAlcoholLevel').selectedIndex].value;
		var vesselName = document.getElementById('rupSelVessel').options[document.getElementById('rupSelVessel').selectedIndex].value;
		var vesselIndex = -1;
		var vesselVolume = "error";
		for (i = 0; i < rupDrink["vessel_name"].length; i++) {
			if (rupDrink["vessel_name"][i] == vesselName) {
				vesselIndex = i;
			}
		}
		
		if (vesselIndex > -1) {
			vesselVolume = rupDrink["vessel_volume"][vesselIndex];
		}
	}
		
	if (vesselVolume != "error") {
		var numDrinks = parseInt(document.getElementById('rupInputNumDrinks').value);
		if (numDrinks > 0) {
			drinksEntered[drinksEnteredCounter] = numDrinks + " x " + vesselVolume + "mL " + vesselName + ", " + alcoholName
			drinksEnteredCounter++;
			totalDrinks += numDrinks;
			totalAlcoholIngested += rupCalcIngested(numDrinks, vesselVolume, alcoholLevel);
		}

		// Add an entry to Drinks List:
		var drinksEnteredList = "";
		for (i = 0; i < drinksEntered.length; i++) {
			if (drinksEntered[i].length > 0) {
				drinksEnteredList += drinksEntered[i] + "\n";
			}
		}
		drinksEnteredList += "\nSuvartoto alkoholio kiekis: " + totalDrinks;
		document.getElementById('rupOutputDrinksEntered').value = drinksEnteredList;
	}	
}

function rupFillDrink(rupSelDrinkIndex) {
	
		// Reset list
		document.getElementById('rupSelAlcoholLevel').options.length = 0;
				
		for (i = 0; i < rupLink["drink_alcohol"][rupSelDrinkIndex]["alcohol"].length; i++) {
			tmp1 = eval("rupDrink['alcohol_desc']" + "[" + eval("rupLink['drink_alcohol']" + "[" + rupSelDrinkIndex + "]['alcohol'][" + i + "]") + "]");
			tmp2 = eval("rupDrink['alcohol_num']" + "[" + eval("rupLink['drink_alcohol']" + "[" + rupSelDrinkIndex + "]['alcohol'][" + i + "]") + "]");
			tmp3 = tmp1 + " (" + tmp2 + "%)";
			document.getElementById('rupSelAlcoholLevel').options[i] = new Option(tmp3, tmp2);
		}
		document.getElementById('rupSelAlcoholLevel').options[0].selected = true;
	
		// Reset list
		document.getElementById('rupSelVessel').options.length = 0;
			
		// Fill Vessel:
		for (i = 0; i < document.getElementById('rupSelVessel').options.length; i++) {
			document.getElementById('rupSelVessel').options[i] = null;
		}
	
		for (i = 0; i < rupLink["drink_alcohol"][rupSelDrinkIndex]["vessel"].length; i++) {
			tmp1 = eval("rupDrink['vessel_name']" + "[" + eval("rupLink['drink_alcohol']" + "[" + rupSelDrinkIndex + "]['vessel'][" + i + "]") + "]");
			tmp2 = eval("rupDrink['vessel_volume']" + "[" + eval("rupLink['drink_alcohol']" + "[" + rupSelDrinkIndex + "]['vessel'][" + i + "]") + "]");
			tmp3 = tmp1 + " (" + tmp2 + "mL)";
			document.getElementById('rupSelVessel').options[i] = new Option(tmp3, tmp1);
		}

		document.getElementById('rupSelVessel').options[0].selected = true;
}

function rupInit() {
	// Insert Drink Types:
	for (i = 0; i < rupDrink["drink"].length; i++) {
		document.getElementById('rupSelDrinkType').options[i] = new Option(rupDrink["drink"][i], i);
	}

	rupFillDrink(0);	// Fill with beer
	document.getElementById('rupSelDrinkType').options[0].selected = true;
	document.getElementById('rupSelAlcoholLevel').options[0].selected = true;
	document.getElementById('rupInputElapsedTime_hours').value = 0;
	document.getElementById('rupInputElapsedTime_mins').value = 0;
	rupStartOver();
}

function rupCalcTime() {
	// This function takes the time from the drop-down boxes and calculates the total elapsed time, then places this value into the input boxes beneath the drop-downs.

	var start_hours = parseInt(document.getElementById('rupSelStartedDrinking_hour').options[document.getElementById('rupSelStartedDrinking_hour').selectedIndex].value);
	var start_mins = parseInt(document.getElementById('rupSelStartedDrinking_mins').options[document.getElementById('rupSelStartedDrinking_mins').selectedIndex].value);

	var finish_hours = parseInt(document.getElementById('rupSelFinishedDrinking_hour').options[document.getElementById('rupSelFinishedDrinking_hour').selectedIndex].value);
	var finish_mins = parseInt(document.getElementById('rupSelFinishedDrinking_mins').options[document.getElementById('rupSelFinishedDrinking_mins').selectedIndex].value);

	var start_total_mins = start_hours * 60 + start_mins;
	var finish_total_mins = finish_hours * 60 + finish_mins;
	
	var elapsed_total_mins = 0;
	
	if (finish_total_mins >= start_total_mins) {
		elapsed_total_mins = finish_total_mins - start_total_mins;
	} else {
		elapsed_total_mins = (24 * 60) + finish_total_mins - start_total_mins;
	}

	if (!(elapsed_total_mins >= 0)) { elapsed_total_mins = 0; }

	elapsed_hours = Math.floor(elapsed_total_mins / 60);
	elapsed_mins = elapsed_total_mins % 60;
	
	document.getElementById('rupInputElapsedTime_hours').value = elapsed_hours;
	document.getElementById('rupInputElapsedTime_mins').value = elapsed_mins;	
}

function rupCalcIngested(numDrinks, vesselVolume, alcoholLevel) {
	var ALCOHOL_DENSITY = 0.79;
	return(numDrinks * vesselVolume * alcoholLevel * 0.01 * ALCOHOL_DENSITY);
}

function rupCalcRemaining(ingested, elapsedTime) {
	var METABOLIC_REMOVAL_RATE = 7;		// in g/hr
	return(ingested - (METABOLIC_REMOVAL_RATE * elapsedTime));
}

function rupCalcBodyWater(height, weight, age, sex) {
	var HEIGHT_FACTOR = (sex == "m") ? 0.1074 : 0.1069;
	var WEIGHT_FACTOR = (sex == "m") ? 0.3362 : 0.2466;
	var AGE_FACTOR = (sex == "m") ? 0.09516 : 0;
	var BODY_WATER_CONST = (sex == "m") ? 2.447 : 2.097;
	var h = HEIGHT_FACTOR * height;
	var w = WEIGHT_FACTOR * weight;
	var a = AGE_FACTOR * age;
	var ml = (h - a + w + BODY_WATER_CONST) * 1000;
	return(ml);
}

function rupCalcBAC(remaining, bodyWater) {
	var WATER_CONTENT_OF_BLOOD = 0.8157;
	return(100 * (remaining / (bodyWater / WATER_CONTENT_OF_BLOOD)));
}

function rupCalculate() {

	var inputError = false;
	
	var age = parseInt(document.getElementById('rupInputAge').value);
	if (!(age > 0)) { inputError = true; }
	
	var sex = document.getElementById('rupSelGender').options[document.getElementById('rupSelGender').selectedIndex].value;
	sex = (sex.substring(0, 1).toLowerCase() == "f") ? "f" : "m";
	var height = parseInt(document.getElementById('rupInputHeight').value);
	
	if (!(height > 0)) { inputError = true; }
	var weight = parseInt(document.getElementById('rupInputWeight').value);
	if (!(weight > 0)) { inputError = true; }
	
	// Calculations:
	if (inputError == false) {
		var elapsedTime = parseInt(document.getElementById('rupInputElapsedTime_hours').value) + (parseInt(document.getElementById('rupInputElapsedTime_mins').value) / 60);
		var outputIngested = totalAlcoholIngested;
		var outputRemaining = rupCalcRemaining(outputIngested, elapsedTime);
		if (outputRemaining < 0) {
			outputRemaining = 0;
		}
		var outputBAC = rupCalcBAC(outputRemaining, rupCalcBodyWater(height, weight, age, sex));
		
		// Round values
		outputIngested = Math.round(outputIngested * 100) / 100;
		outputRemaining = Math.round(outputRemaining * 100) / 100;
		outputBAC = Math.round(outputBAC * 1000) / 1000;
		
		document.getElementById('rupOutputIngested').value = outputIngested;
		document.getElementById('rupOutputRemaining').value = outputRemaining;
		document.getElementById('rupOutputBAC').value = outputBAC;
		
		// Display output
		
		if (outputBAC > 0.30) {
			document.getElementById('rupOutputStatus').value = "Jūs vis dar gyvas???";
		} else if (outputBAC > 0.22) {
			document.getElementById('rupOutputStatus').value = "Tikriausiai esat be sąmonės.";
		} else if (outputBAC > 0.15) {
			document.getElementById('rupOutputStatus').value = "Tikriausiai šio puslapio vaizdas susiliejęs.";
		} else if (outputBAC > 0.11) {
			document.getElementById('rupOutputStatus').value = "Ar sunku naudotis klaviatūra?";
		} else if (outputBAC > 0.07) {
			document.getElementById('rupOutputStatus').value = "Kvieskite taksi! Greičiau!";
		} else if (outputBAC > 0.05) {
			document.getElementById('rupOutputStatus').value = "Palaukite valandėlę, kad vėl galėtumėt sėst prie vairo";
		} else if (outputBAC > 0.03) {
			document.getElementById('rupOutputStatus').value = "Esate truputį įkaušęs...";
		} else {
			document.getElementById('rupOutputStatus').value = "Šviežias kaip agurkėlis!";
		}
		
		
	}	
	else {
		alert("Nepavyko suskaičiuoti jūsų apsvaigimo laipsnio. Pamėginkite dar kartą.");
	}
}

window.onload=rupInit;