/**
 * Calculator stuff
 * @author Wolfram Huesken <woh@lieblingsagentur.tv>
 * @version 0.3 <2008-04-21 1:00>
 */

function vo_calc_close() {
	$('VoRechner').style.visibility = "hidden";
	document.calc_open = false;
}

function vo_calc_open() {
	if(document.calc_open == false) {
		var window = $('VoRechner');
		var header = $('VoRechnerHeader');
		window.style.visibility = "visible";
		new Drag.Move('VoRechner', {'handle' : header});
		document.calc_open = true;
	}
}

function vo_calc_next(source, target) {
	$(source).style.display = "none";
	$(target).style.display = "block";
}

function checkFloat(val) {
	var MyValue = val;
	MyValue = parseFloat(MyValue.replace(",", "."));
	if(isNaN(MyValue)) {
		return false;
	}
	else {
		return MyValue;
	}	
}

function checkInt(val) {
	var MyValue = val;
	MyValue = parseInt(MyValue.replace(",", "."));
	if(isNaN(MyValue)) {
		return false;
	}
	else {
		return MyValue;
	}	
}

function calc_azTag() {
	$('azTag').value = ($('azWoche').value / $('atWoche').value).toFixed(2); 
}

// Calculate Attendance days
function calc_awTageJahr() {
	var aTageNetto = parseFloat($('atWoche').value * 52.0);
	var uTage = parseFloat($('uTageJahr').value);
	var fTage = parseFloat($('feierTageJahr').value);
	var kTage = parseInt($('ktJahr').value);
	var sFTage = parseFloat($('sonstFehlTageJahr').value);
	var aTageRest = parseFloat(aTageNetto - uTage - fTage - kTage - sFTage).toFixed(2);
	$('awTageJahr').value = aTageRest;
}

function calc_raTageWoche() {
	$('raTageWoche').value = (parseFloat($('awTageJahr').value) / 52.0).toFixed(2); 
}

function calc_raStundenWoche() {
	$('raStundenWoche').value = (parseFloat($('raTageWoche').value ) * parseFloat($('azTag').value)).toFixed(2);
}

function calc_page2() {
	var AGA = 0.2;
	$('agaMonat').value = (parseFloat($('avgBrEinkommen').value) * parseInt($('anzMonatGehalt').value) * AGA).toFixed(2);
	$('gLohnJahr').value = (parseFloat($('avgBrEinkommen').value) * parseInt($('anzMonatGehalt').value) + parseFloat($('agaMonat').value) + 12 * (parseFloat($('vmaBeitrag').value) + parseFloat($('provMonat').value) + parseFloat($('bonMonat').value))).toFixed(2);
	$('kostenAt').value = (parseFloat($('gLohnJahr').value) / parseFloat($('awTageJahr').value)).toFixed(2);
	$('kostenAs').value = (parseFloat($('kostenAt').value) / parseFloat($('azTag').value)).toFixed(2); 
}

function calc_page3() {
	var benzKosten = parseFloat($('benzKosten').value);
	var flugKosten = parseFloat($('flugKosten').value);
	var spesenKosten = parseFloat($('spesenKosten').value);
	var nachtKosten = parseFloat($('nachtKosten').value);
	var fzLeasing = parseFloat($('fzLeasing').value);
	var fzVk = parseFloat($('fzVk').value);
	var fzRep = parseFloat($('fzRep').value);
	var telKost = parseFloat($('telKost').value);
	var interKost = parseFloat($('interKost').value);
	var pcHw = parseFloat((parseFloat($('pcHw').value) / 12).toFixed(2));
	var sonstMonatKost = parseFloat($('sonstMonatKost').value);
	var mySum = benzKosten + flugKosten + spesenKosten + nachtKosten + fzLeasing + fzVk + fzRep + telKost + interKost + pcHw + sonstMonatKost;  	

	$('kbAdm').value = parseFloat(mySum).toFixed(2);
}

function calc_page4() {
	var mrkUnterlag = parseFloat($('mrkUnterlag').value);
	var adrEink = parseFloat($('adrEink').value);
	var crmSwLic = parseFloat($('crmSwLic').value);
	var srvKost = parseFloat($('srvKost').value);
	var gesBk = parseFloat($('gesBk').value);
	var mietKost = parseFloat($('mietKost').value);
	var anzVerTeam = parseInt($('anzVerTeam').value);
	var mySum = parseFloat(parseFloat(mrkUnterlag + adrEink + crmSwLic + srvKost + gesBk +  mietKost) / anzVerTeam).toFixed(2);

	$('algKostMit').value = mySum;
}

function calc_Ov() {
	$('atProJahrTOv').value = (parseFloat($('atWoche').value * 52.0)).toFixed(2);
	$('awTageJahrOv').value = $('awTageJahr').value;	
	
	$('gLohnJahrOv').value = $('gLohnJahr').value;
	$('kbAdmOv').value = (parseFloat($('kbAdm').value) * 12.0).toFixed(2);
	$('algKostMitOv').value = $('algKostMit').value;

	$('jahrKostMitarbOv').value = (parseFloat($('gLohnJahrOv').value) + parseFloat($('kbAdmOv').value) + parseFloat($('algKostMitOv').value)).toFixed(0);
	$('jahrKostVOv').value = (parseFloat($('jahrKostMitarbOv').value) * parseInt($('anzVerTeam').value)).toFixed(0);
}

function processField(fld) {
	// Default values
	var fixed_decs   = 2;
	
	var azWoche_def           = 38.5;
	var atWoche_def           = 5;
	var tageJahr_def          = 365;
	var abzWe_def             = 104;
	var uTageJahr_def         = 25;
	var feierTageJahr_def     = 9.5;
	var ktJahr_def            = 12;
	var sonstFehlTageJahr_def = 0; 
	var avgBrEinkommen_def    = 4000;
	var anzMonatGehalt_def    = 13;
	var vmaBeitrag_def        = 72;
	var provMonat_def         = 415;
	var bonMonat_def          = 350;
	var benzKosten_def        = 400;
	var flugKosten_def        = 350;
	var spesenKosten_def      = 400;
	var nachtKosten_def       = 480;
	var fzLeasing_def         = 400;
	var fzVk_def              = 150;
	var fzRep_def             = 50;
	var telKost_def           = 60;
	var interKost_def         = 15;
	var pcHw_def              = 2000;
	var sonstMonatKost_def    = 0;
	var mrkUnterlag_def       = 6000;
	var adrEink_def           = 4000;
	var crmSwLic_def          = 4000;
	var srvKost_def           = 1500;
	var gesBk_def             = 6000;
	var mietKost_def          = 21600;
	var anzVerTeam_def        = 4;
	
	switch(fld.id) {
		case "azWoche":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = azWoche_def;
				return false;
			}
			else if(MyValue > 168 || MyValue <= 0) {
				alert("Die Wochenstundenanzahl muß zwischen 1 und 168 Stunden liegen!");
				fld.value = azWoche_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(1);
			}
			calc_azTag();
			calc_raStundenWoche();
			break;
		case "atWoche":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = atWoche_def;
				return false;
			}
			else if(MyValue > 7 || MyValue <= 0) {
				alert("Bitte geben Sie eine Zahl zwischen 1 und 7 ein!");
				fld.value = atWoche_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(fixed_decs);
			}
			calc_azTag();
			calc_awTageJahr();
			calc_raTageWoche();
			calc_raStundenWoche()
			break;
		case "tageJahr":
			var MyValue = checkInt(fld.value);
			if(MyValue == false) {
				fld.value = tageJahr_def;
				return false;
			}
			else if(MyValue > 366 || MyValue < 365) {
				alert("Ein Jahr kann nur 365 oder 366 Tage haben!");
				fld.value = tageJahr_def;
				return false;
			}
			else {
				fld.value = MyValue;
			}
			break;
		case "abzWe":
			var MyValue = checkInt(fld.value);
			if(MyValue == false) {
				fld.value = abzWe_def;
				return false;
			}
			else if(MyValue > 104 || MyValue <= 0) {
				alert("Die Anzahl der Wochenenden sollte sich zwischen 0 und 104 Tagen bewegen!");
				fld.value = abzWe_def;
				return false;
			}
			else {
				fld.value = MyValue;
			}
			break;
		case "uTageJahr":
			// Calculate vacation entitlement
			var vacEnt = (parseFloat($('atWoche').value) * 4.0).toFixed(1);
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = vacEnt;
				return false;
			}
			else if(MyValue < vacEnt) {
				alert("Bei der von Ihnen eingegebenen Wochenarbeitszeit hat der Arbeitnehmer Anspruch auf mindestens " + vacEnt.toString() + " Tage Urlaub!");
				fld.value = vacEnt;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(1);
			}
			calc_awTageJahr();
			calc_raTageWoche();
			calc_raStundenWoche();
			break;
		case "feierTageJahr":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = feierTageJahr_def;
				return false;
			}
			else if(MyValue <= 0 || MyValue > 75) {
				alert("Die Anzahl der Feiertage sollte zwischen 1 und 75 liegen!");
				fld.value = feierTageJahr_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(1);
			}
			calc_awTageJahr();
			calc_raTageWoche();
			calc_raStundenWoche();
			break;
		case "ktJahr":
			var MyValue = checkInt(fld.value);
			var aTageNetto = parseFloat($('atWoche').value * 52.0);
			if(MyValue == false) {
				fld.value = ktJahr_def;
				return false;
			}
			else if(MyValue < 0) {
				alert("Die Anzahl der Krankentage muß mindestens Null sein!");
				fld.value = ktJahr_def;
				return false;
			}
			else if(MyValue > aTageNetto) {
				alert("Die Anzahl der Krankentage kann nicht höher sein als die Anzahl der möglichen Arbeitstage (" + aTageNetto.toString() + ")!");
				fld.value = ktJahr_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(1);
			}
			calc_awTageJahr();
			calc_raTageWoche();
			calc_raStundenWoche();
			break;
		case "sonstFehlTageJahr":
			var MyValue = checkFloat(fld.value);
			var aTageNetto = parseFloat($('atWoche').value * 52.0);
			if(MyValue == false) {
				fld.value = sonstFehlTageJahr_def;
				return false;
			}
			else if(MyValue < 0) {
				alert("Die Anzahl der sonstigen Fehltage muß mindestens Null sein!");
				fld.value = sonstFehlTageJahr_def;
				return false;
			}
			else if(MyValue > aTageNetto) {
				alert("Die Anzahl der sonstigen Fehltage kann nicht höher sein als die Anzahl der möglichen Arbeitstage (" + aTageNetto.toString() + ")!");
				fld.value = sonstFehlTageJahr_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(1);
			}
			calc_awTageJahr();
			calc_raTageWoche();
			calc_raStundenWoche();
			break;
		// Page 2

		case "avgBrEinkommen":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = avgBrEinkommen_def;
				return false;
			}
			else if(MyValue < 0) {
				alert("Das Monatsbruttoeinkommen muß ein positiver Wert sein!");
				fld.value = avgBrEinkommen_def;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page2();
			break;
		case "anzMonatGehalt":
			var MyValue = checkInt(fld.value);
			if(MyValue == false) {
				fld.value = anzMonatGehalt_def;
				return false;
			}
			else if(MyValue < 12) {
				fld.value = 12;
				return false;
			}
			else {
				fld.value = MyValue;
			}
			calc_page2();
			break;
		case "vmaBeitrag":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = vmaBeitrag_def;
				return false;
			}
			else if(MyValue < 0) {
				fld.value = 0;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page2();		
			break;
		case "provMonat":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = provMonat_def;
				return false;
			}
			else if(MyValue < 0) {
				fld.value = 0;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page2();		
			break;
		case "bonMonat":
			var MyValue = checkFloat(fld.value);
			if(MyValue == false) {
				fld.value = bonMonat_def;
			}
			else if(MyValue < 0) {
				fld.value = 0;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page2();		
			break;

		// Page 3
		case "benzKosten":
		case "flugKosten":
		case "spesenKosten":
		case "nachtKosten":
		case "fzLeasing":
		case "fzVk":
		case "fzRep":
		case "telKost":
		case "interKost":
		case "pcHw":
		case "sonstMonatKost":
			var MyValue = checkFloat(fld.value);
			if(MyValue == 0) {
				fld.value = 0;
			}
			else if(MyValue == false) {
				fld.value = eval(fld.id+'_def');
			}
			else if(MyValue < 0) {
				fld.value = 0;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page3();		
			break;
		// Page 4
		case "mrkUnterlag":
		case "adrEink":
		case "crmSwLic":
		case "srvKost":
		case "gesBk":
		case "mietKost":
			var MyValue = checkFloat(fld.value);
			if(MyValue == 0) {
				fld.value = 0;
			}
			else if(MyValue == false) {
				fld.value = eval(fld.id+'_def');
				return false;
			}
			else if(MyValue < 0) {
				fld.value = 0;
				return false;
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page4();
			break;
		case "anzVerTeam":
			var MyValue = checkInt(fld.value);
			if(MyValue <= 0) {
				fld.value = 1;
			}
			else if(MyValue == false) {
				fld.value = eval(fld.id+'_def');
			}
			else {
				fld.value = MyValue.toFixed(2);
			}
			calc_page4();		
	}
}

