/**
 * Promillerechner
 *
 * @author		Matthias Krumm <mkrumm at gmx-gmbh dot de>
 * @copyright	copyright (c) 2007 by GMX GmbH
 */


var promillerechner = {

	// Initial-Funktion - index.wjsp
	init: function() {
		this.resultPromille = $ui('#result-promille');
		this.resultAlc = $ui('#result-alc');
		this.resultKcal = $ui('#result-kcal');
		this.resultKcalDaily = $ui('#result-kcal-daily');
		this.resultKcalAlc = $ui('#result-kcal-alc');

		this.alkohol_gramm = 0;
		this.alkohol_promille = 0;

		this.hintMsg = [];
		this.hintMsg['nonumber'] = 'Bitte keinen Text! Geben Sie hier einen Zahlenwert ein. Wert wurde zur&uuml;ck gesetzt.';
		this.hintMsg['ltzero'] = 'Bitte keine negativen Zahlenwerte! Geben Sie hier einen Zahlenwert gr&ouml;&szlig;er null ein. Wert wurde zur&uuml;ck gesetzt.';
		this.hintMsg['nonsense'] = 'Die angegebenen Zahlenwerte f&uuml;r Alter, Gr&ouml;&szlig;e und Gewicht lassen keine Berechnung zu. Werte wurden zur&uuml;ckgesetzt.';
		this.hintMsg['gt100percent'] = 'Es sind keine Werte &uuml;ber 100% zul&auml;ssig. Wert wurde zur&uuml;ckgesetzt.';
		this.hintMsg['drinktime'] = 'Sie k&ouml;nnen das letzte Getr&auml;nk nicht vor dem ersten getrunken haben. Zahlenwert f&uuml;r das erste Getr&auml;nk wurde automatisch korrigiert.'
		this.hintDiv = $ui('#hint');
		this.hintDivMsg = $ui('#hint-msg');

		this.humanbodyDef = [];
		this.humanbodyDef["gender"] = 0;
		this.humanbodyDef["age"] = 30;
		this.humanbodyDef["size"] = 175;
		this.humanbodyDef["weight"] = 75;

		this.humanbody = [];
		this.humanbody["gender"] = ($ui('#gender-female').checked) ? $ui('#gender-female').val() : this.humanbodyDef["gender"];
		this.humanbody["age"] = ($ui('#age').val() != this.humanbodyDef["age"]) ? $ui('#age').val() : this.humanbodyDef["age"];
		this.humanbody["size"] = ($ui('#size').val() != this.humanbodyDef["size"]) ? $ui('#size').val() : this.humanbodyDef["size"];
		this.humanbody["weight"] = ($ui('#weight').val() != this.humanbodyDef["weight"]) ? $ui('#weight').val() : this.humanbodyDef["weight"];

		this.getraenk = [];
		this.getraenk[0] = [];
		this.getraenk[0]["prozent"] = 0.025;
		this.getraenk[0]["menge"] = ($ui('#drinks-biermix').val() != '') ? $ui('#drinks-biermix').val().toString().replace(',','.') : 0;
		this.getraenk[1] = [];
		this.getraenk[1]["prozent"] = 0.05;
		this.getraenk[1]["menge"] = ($ui('#drinks-bier').val() != '') ? $ui('#drinks-bier').val().toString().replace(',','.') : 0;
		this.getraenk[2] = [];
		this.getraenk[2]["prozent"] = 0.08;
		this.getraenk[2]["menge"] = ($ui('#drinks-starkbier').val() != '') ? $ui('#drinks-starkbier').val().toString().replace(',','.') : 0;
		this.getraenk[3] = [];
		this.getraenk[3]["prozent"] = 0.12;
		this.getraenk[3]["menge"] = ($ui('#drinks-wein').val() != '') ? $ui('#drinks-wein').val().toString().replace(',','.') : 0;
		this.getraenk[4] = [];
		this.getraenk[4]["prozent"] = 0.32;
		this.getraenk[4]["menge"] = ($ui('#drinks-korn-likoer').val() != '') ? $ui('#drinks-korn-likoer').val()/100 : 0;
		this.getraenk[5] = [];
		this.getraenk[5]["prozent"] = 0.38;
		this.getraenk[5]["menge"] = ($ui('#drinks-weinbrand-rum').val() != '') ? $ui('#drinks-weinbrand-rum').val()/100 : 0;
		this.getraenk[6] = [];
		this.getraenk[6]["prozent"] = 0.42;
		this.getraenk[6]["menge"] = ($ui('#drinks-wodka-whisky').val() != '') ? $ui('#drinks-wodka-whisky').val()/100 : 0;
		this.getraenk[7] = [];
		this.getraenk[7]["prozent"] = ($ui('#drinks-self').val() != '') ? $ui('#drinks-self').val()/100 : 0;
		this.getraenk[7]["menge"] = ($ui('#drinks-self-value').val() != '') ? $ui('#drinks-self-value').val().toString().replace(',','.') : 0;

		this.trinken = [];
		this.trinken["food"] = 1;
	},

	korr_koerper: function() {
		$ui('#age').val(this.humanbodyDef["age"]);
		$ui('#size').val(this.humanbodyDef["size"]);
		$ui('#weight').val(this.humanbodyDef["weight"]);
	},

	// Messagefunktion
	hint: function(msg,cls) {
		$ui(this.hintDiv).show();
		$ui(this.hintDivMsg).text(this.hintMsg[msg]);
		if (cls) {
			$ui(this.hintDiv).hide();
			$ui(this.hintDivMsg).text("");
		}
	},

	// Rundungsfunktion
	round: function(numb,quant) {
		var factor = 10;
		if (quant == 0) {
			numb = Math.round(numb);
		} else {
			for (var i = 1; i < quant; i++) factor*=factor;
			numb = Math.round(numb*factor)/factor;
		}
		return numb;
	},

	// Haupterrechnungsfunktion
	calc: function() {
		var sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, kalorien_total=0, kalorien_bedarf=0, kalorien_anteil=0;
		sum1 = this.round(this.alcTotal(),1);
		sum2 = this.gkw(this.humanbody["gender"],this.humanbody["age"],this.humanbody["size"],this.humanbody["weight"]);
		sum3 = this.ab(this.trinken["anfang"],this.trinken["ende"]);
		sum4 = this.round(this.bak(sum1,sum2,sum3),1);
		$ui(this.resultPromille).val(sum4.toString());
		this.alkohol_gramm = sum1;
		this.alkohol_promille = sum4;

		kalorien_total=this.round(this.e(this.alkohol_gramm),0);
		kalorien_bedarf=this.round(this.b(this.humanbody["gender"],this.humanbody["age"],this.humanbody["size"],this.humanbody["weight"]),0);
		kalorien_anteil=this.round(this.ba(kalorien_total,kalorien_bedarf),0);
		$ui(this.resultAlc).val(this.alkohol_gramm);
		$ui(this.resultKcal).val(kalorien_total);
		$ui(this.resultKcalDaily).val(kalorien_bedarf);
		$ui(this.resultKcalAlc).val(kalorien_anteil);
	},

	// Menge aendern, wenn anderer Wert eingegeben
	changeLiter: function(id,obj,cl) {
		var newVal = $ui(obj).val();
		if (this.zahl_ok(newVal,obj)>0) {
			newVal = (!cl) ? newVal : newVal/100;
			this.getraenk[id]["menge"] = newVal.toString().replace(',','.');
		}
	},

	// Prozent aendern, wenn anderer Wert eingegeben
	changeVol: function(id,val,obj) {
		if (this.zahl_ok(val,obj)>0 && val<=100) {
			this.getraenk[id]["prozent"] = val/100;
		} else {
			this.hint('gt100percent');
			this.getraenk[id]["prozent"] = 1;
			$ui(obj).val(100);
			return false;
		}
	},

	// eingegebene Zahl pruefen
	zahl_ok: function(wert,obj) {
		var ok = 1;
		wert = wert.toString().replace(',','.');
		if (isNaN(wert)) {
			this.hint("nonumber");
			ok=0;
		} else {
			if (wert < 0) {
				this.hint("ltzero");
				ok=0;
			}
		}
		if (ok == 1) {
			this.hint('',true);
		} else {
			if (obj) $ui(obj).val('');
		}
		return ok;
	},

	// Funktionen zur Berechnung des Blutalkohols
	a: function(v,e,rp) {
		var summe=0, da=0.79;
		summe=1000*v*e*da*(1-rp);
		return summe;
	},

	gkw: function(weibl,t,h,m) {
		var summe = 0;
		if (weibl<1) {
			summe=2.447-0.09516*t+0.1074*h+0.3362*m
		} else {
			summe=-2.097+0.1069*h+0.2466*m
		}
		summe = this.round(summe,2);
		if (summe<=0) {
			this.korr_koerper();
			this.hint('nonsense');
		}
		return summe;
	},

	ab: function(t1,t2) {
		var summe=0, p=0.1, start=2;
		if ((t2<=t1) && (t2>=start)) {
			summe=p*(t1-start)
		} else {
			summe=0
		}
		summe = this.round(summe,2);
		return summe;
	},

	bak: function(a,gkw,ab) {
		var summe=0, db=1.055;
		summe=0.8*a/(db*gkw)-ab;
		if (summe<0) summe=0;
		return summe;
	},

	// Promille errechnen
	alcTotal: function() {
		var alc = 0;
		for (var i = 0; i < 8; i++) alc = alc + this.a(this.getraenk[i]["menge"],this.getraenk[i]["prozent"],(0.1*this.trinken["food"]));
		return alc;
	},

	// Funktionen zur Berechnung der Kalorien
	e: function(a) {
		var speicher=0, k=7;
		speicher=a*k;
		return speicher;
	},

	b: function(weibl,t,h,m) {
		var speicher=0;
		if (weibl<1) {
			speicher=66.5+13.7*m+5*h-6.8*t
		} else {
			speicher=655.1+9.6*m+1.8*h-4.7*t
		}
		if (speicher<=0) this.hint('nonsense');
		return speicher;
	},

	ba: function(e,b) {
		var speicher=0;
		speicher=(e/b)*100;
		return speicher;
	},

	// Results - result.wjsp
	results: function(val) {
		var i=1;
		if (val>=0.3) i=2;
		if (val>=0.5) i=3;
		if (val>=1.0) i=4;
		if (val>=1.5) i=5;
		if (val>=2.0) i=6;
		if (val>=2.5) i=7;
		if (val>=3.5) i=8;
		$ui('#result-txt-' + i).show();
	}

}
