/**
 * @author Clemens Gull * (c) 2008 - 2010, Salzburg
 */

 //Statistik
 saveStat   = true;
 accessCode = "";

 //Waehrung
 curShort = "";
 curLong  = "";
 
 //Array zum 'uebersetzen' der Zahlen
 arrZahlen = new Array('null', 'ein', 'zwei', 'drei', 'vier', 'f&uuml;nf', 'sechs', 'sieben', 'acht', 'neun', 'zehn', 'elf', 'zw&ouml;f', '13', '14', '15', '16', '17', '18', '19', '20');

 //Felder festlegen und Fortschritt berechnen
 progFields = new Array("statStaat",      "statBundesland", "statBranche",    "step_2_1_sum12", "step_2_1_sum01", "step_2_2_sum12",  "step_2_2_sum01", 
 						"step_2_3_sum12", "step_2_3_sum01", "step_2_4_sum12", "step_2_4_sum01", "step_2_5_sum12", "step_2_5_sum01",  "step_2_6_sum12",  "step_2_6_sum01", 
 						"step_2_7_sum12", "step_2_7_sum01", "step_2_8_sum12", "step_2_8_sum01", "step_2_9_sum12", "step_2_9_sum01", "step_2_10_sum12", "step_2_10_sum01", 
 						"step_3_1_sum12", "step_3_1_sum01", "step_3_2_sum12", "step_3_2_sum01", "step_3_3_sum12", "step_3_3_sum01",  "step_4_1_sum12",  "step_4_1_sum01",
						"step_5_1_sum12", "step_5_1_sum01", "step_5_1_sum00", "step_5_2_sum12", "step_5_2_sum01", "step_5_2_sum00",  "step_6_finish_sum12", "step_6_finish_sum01",
						"step_7_1_1_b_resultat", 			"step_7_1_2_b_resultat", 			"step_7_1_3_b_resultat", 			 "step_7_1_4_b_resultat",
						"step_6_1_1_E_X_0_X_N",             "step_6_1_2_E_X_0_X_N"
 						);
 progDirty  = new Array();
 for (i = 0; i < progFields.length; i++) {
 	progDirty[i] = 0;
 }
 
 //Text des Detailknopfs anpassen 
 function changeButtonText(step, subStep) {
 	layer  = "step" + "_" + step + "_" + subStep + "_detail";
	button = "step" + "_" + step + "_" + subStep + "_show_detail";
	if (!$(layer).visible()) {
		$(button).innerHTML = $(button).innerHTML.replace("eingeben", "ausblenden");
	} else {
		$(button).innerHTML = $(button).innerHTML.replace("ausblenden", "eingeben");
	}
	document.location.href = "#step_" + step + "_" + subStep + "_anchor";
 }

 //Groessenaenderung des Fensters
 window.onresize = function() {
	elems = $$("div:[rel=sbDiv]");
	elems.each(function(elem){
		elemID     = elem.identify();
		elemIDpart = elemID.split("_");
		elemIDBtn  = elemIDpart[0] + "_" + elemIDpart[1];
		elmPos = $(elemIDBtn).cumulativeOffset();
		elmLft = (elmPos.left - 10) + 'px';
		$(elemID).setStyle({left: elmLft});
	});
 }
 
 //Initialisieren des Rechners
 window.onload = function(){
		//  new JS_BRAMUS.jsProgressBar($('hereComesMyFirstProgressBar'), 50, {animate: false, width: 240, height: 24});
    pgBar  = new JS_BRAMUS.jsProgressBar($('statProgress'), 0, {animate: true, showText: true});
	elmPos = $('nav_menu').cumulativeOffset();
	elmLft = ($('nav_menu').getWidth() - $('wndError').getWidth() + elmPos.left) + 'px';
 	// Hauptfelder
 	for (i = 0; i < progFields.length; i++) {
 		try {
			//Handler fuer Feldaenderungen setzen
 			$(progFields[i]).observe('blur', function() {
				dirty = 1;
				switch ($(this).tagName) {
					case "SELECT":
						if ($F(this) == "---") {dirty = 0;}
						break;
					case "INPUT":
						wert = $F(this);
						wert = wert.replace(/^s+/g, '').replace(/s+$/g, '')
						wert = conv2Number(wert);
						if (isNaN(wert)) {wert = 0;}
						if (wert == "---" || wert == "" || parseInt(wert) == 0) {dirty = 0; wert = 0;}
						$(this).value = formatNumber(wert, 2, true);
						break;
					default:
						alert($(this).tagName);
				}
				progDirty[(progFields.indexOf(this.id))] = dirty;
				checkProgress();
				elemID = $(this).id;
				if (elemID.substr(-2) == "12") {
					elem = elemID.substr(0, (elemID.length - 2)) + '01';
					$(elem).value = formatNumber(wert * 12, 2, true);
				}
				if (elemID.substr(-2) == "01") {
					elem = elemID.substr(0, (elemID.length - 2)) + '12';
					$(elem).value = formatNumber((wert / 12), 2, true);
				}
				if ($(this).id.substr(2,1) == "Z") {
					$(this).value = formatNumber(wert, 2, true);
				}
			});
			$(progFields[i]).observe('focus', function() {
				if ($(this).tagName == "INPUT") {
					wert = $F(this);
					wert = wert.replace(/^s+/g, '').replace(/s+$/g, '')
					wert = conv2Number(wert);
					if (isNaN(wert) || wert == "---" || wert == "" || parseInt(wert) == 0) {wert = 0;}
					$(this).value = wert;
					this.select();
				}
			});
		} catch (e) {}
	} //ende for i

	//Selection fuer Staaten
	$('statStaat').observe('change', function(){
		getStatistik(0);
		setRegion(this.id);
		$('statBranche').value = '---';
	});
	//Selection fuer Region
	$('statBundesland').observe('change', function(){
		getStatistik(1);
		$('statBranche').value = '---';
	});
	//Selection fuer Branche
	$('statBranche').observe('change', function(){
		getStatistik(2);
	});
	
	//eMail Adresse pruefen
	$('statEmail').observe('blur', function() {
		ajxCheckMail();
	});

	//Statistik uebertragen
	$('statSpeichern').observe('click', function() {
		changeStatusStatistik($F(this));
	});
	
	//email senden
	$('btnSendEmail').observe('click', function() {
		ajxSendEmail();
	} );
	//Captcha reload
	$('capreload').observe('click', function() {
		$('imgcaptcha').src = '../common/captcha/securimage_show.php?' + Math.random();
		return false
	});
	
	//Buy me a coffee
	$('buyMe').observe('click', function() {
		window.open('http://buckdrop.com/pkxfadt', 'guruSpende');
	})
	//Hooks fuer sbDivs (Menues)
	elems = $$("div:[rel=sbDiv]");
	elems.each(function(elem){
		elemID     = elem.identify();
		elemIDpart = elemID.split("_");
		elemID     = elemIDpart[0] + "_" + elemIDpart[1];
		$(elemID).observe('click', function() {
			showMenu(this);
		})
	});

	//Buttons fuer die Detailanzeige
	elems = $$('p.link');
	elems.each(function(elem){
		pID  = $(elem).identify();
		zw   = pID.split("_");
		$(pID).observe('click', function(){
			pID  = $(this).identify();
			zw   = pID.split("_");
			dLay = zw[0] + "_" + zw[1] + "_" + zw[2] + "_" + zw[4];
			Effect.toggle(dLay, 'blind', {
				afterFinish: changeButtonText(zw[1], zw[2])
			});
		});
	});	

	//Berechnung der SubSchritte
	elems = $$('p:[rel=calcSub]');
	elems.each(function(elem){
		pID  = $(elem).identify();
		zw   = pID.split("_");
		$(pID).observe('click', function(){
			pID  = $(this).identify();
			zw   = pID.split("_");
			calcDetails(zw[1], zw[2]);
		});
	});	
	//Berechnung eines Schritts
	elems = $$('p:[rel=calcFinish]');
	elems.each(function(elem){
		pID  = $(elem).identify();
		zw   = pID.split("_");
		$(pID).observe('click', function(){
			pID  = $(this).identify();
			zw   = pID.split("_");
			calcStep(zw[1]);
		});
	});	

	//Loeschen von Feldinhalten
	elems = $$('p:[rel=delSubFields]');
	elems.each(function(elem){
		pID  = $(elem).identify();
		zw   = pID.split("_");
		$(pID).observe('click', function(){
			pID  = $(this).identify();
			zw   = pID.split("_");
			deleteFields(zw[1], zw[2], zw[4], zw[5]);
			if (zw[6]) {
				Effect.BlindUp("step_" + zw[1] + "_" + zw[2] + "_detail");
				$("step_" + zw[6] + "_" + zw[7] + "_sum12").value   = "0,00";
				$("step_" + zw[6] + "_" + zw[7] + "_sum01").value   = "0,00";
				$("step_" + zw[6] + "_" + zw[7] + "_sum00").value   = "0,00";
				$("step_" + zw[1] + "_" + zw[2] + "_sum12").value   = "0,00";
				$("step_" + zw[1] + "_" + zw[2] + "_sum01").value   = "0,00";
				progDirty["step_" + zw[1] + "_" + zw[2] + "_sum12"] = 1;
				progDirty["step_" + zw[1] + "_" + zw[2] + "_sum01"] = 1;
				progDirty["step_" + zw[6] + "_" + zw[7] + "_sum12"] = 1;
				progDirty["step_" + zw[6] + "_" + zw[7] + "_sum01"] = 1;
				progDirty["step_" + zw[6] + "_" + zw[7] + "_sum00"] = 1;
				checkProgress();
			} 
		});
	});	
 }

 //Menue fuer die Schritte in der Statusbar anzeigen
 function showMenu(elem) {
 	divID  = $(elem).identify() + "_div";
	elems = $$("div:[rel=sbDiv]");
	elems.each(function(elem){
		elemID = elem.identify();
		if (elemID != divID) {
		 	if ($(elemID).getHeight() > 10) {
				$(elemID).morph('height: 0px;');
			}
		}
	});
	elmPos = $(elem).cumulativeOffset();
	elmLft = (elmPos.left - 10) + 'px';
	$(divID).setStyle({left: elmLft});
 	if ($(divID).getHeight() > 10) {
		$(divID).morph('height: 0px;');
	} else {
		if (divID.indexOf("email") < 0) {
			$(divID).morph('height: 150px;');
		} else {
			$(divID).morph('height: 500px;');
		}
	}
 }
 
 //Schritt berechnen
 function calcStep(step) {
	sum12    = 0;
	sum01    = 0;
	sum00    = 0;
	if (step != 6 && step != 7) {
		elems = $$("div#step" + step + " input:[rel=calcSum]");
		elems.each(function(elem){
			elmID = $(elem).identify();
			idVal = elmID.split("_");
			if (idVal[3] == "sum00") {
				sum00 += conv2Number($F(elmID));
			}
			if (idVal[3] == "sum01") {
				sum01 += conv2Number($F(elmID));
			}
			if (idVal[3] == "sum12") {
				sum12 += conv2Number($F(elmID));
			}
			progDirty[(progFields.indexOf(elmID))] = 1;
		});
		$('step_' + step + "_finish_sum12").value = formatNumber(sum12, 2, true);
		$('step_' + step + "_finish_sum01").value = formatNumber(sum01, 2, true);
		if (step == 5) { $('step_' + step + "_finish_sum00").value = formatNumber(sum00, 2, true); }
	}
	umsNetto = conv2Number($F("step_2_finish_sum01")) + conv2Number($F("step_3_finish_sum01")) + conv2Number($F("step_4_1_sum01"));
	$('step_6_info').innerHTML = "&euro;&nbsp;" + formatNumber(umsNetto, 2, true);
	if (step < 6) {
		$("step_6_1_1_E_X_0_X_N").value = formatNumber(Math.round((umsNetto / 4)), 2, true);
	}
	if (step > 1) {
		$('step_7_buero').innerHTML = "&euro;&nbsp;" + formatNumber(conv2Number($F("step_2_1_sum01")), 2, true);
	}
	if (step == 6) {
		clearField("step_6_1_1_E_X_0_X_N");
		clearField("step_6_1_2_E_X_0_X_N");
		$('step_6_finish_sum12').value = formatNumber(conv2Number($F("step_6_1_1_E_X_0_X_N")), 2, true);
		steuer = Math.round(((umsNetto + conv2Number($F("step_6_1_1_E_X_0_X_N"))) * (conv2Number($F("step_6_1_2_E_X_0_X_N")) / 100)));
		$('step_6_finish_sum01').value = formatNumber(steuer, 2, true);
	}
	if (step == 7) {
	 	error  = 0;
		errMsg = "";
	 	if ($F('statSpeichern') == 1) {
			$('infoCalc').innerHTML = '<img src="../images/loader.gif" alt="Daten speichern" title="Daten speichern" />&nbsp;Deine Daten werden &uuml;bertragen, gespeichert und ' +
									  'analysiert, bitte hab einen Moment Geduld.'
			if ($F('statStaat') == '---') {
				error++;
				errMsg += "<li>Du musst im <a href='#step1Anchor'>1. Schritt</a> den Staat und dann die Region ausw&auml;hlen.</li>";
			}
			if ($F('statBundesland') == '---') {
				error++;
				errMsg += "<li>Du musst im <a href='#step1Anchor'>1. Schritt</a> die Region ausw&auml;hlen.</li>";
			}
			if ($F('statBranche') == '---') {
				error++;
				errMsg += "<li>Du musst im <a href='#step1Anchor'>1. Schritt</a> Deine Branche ausw&auml;hlen.</li>";
			}
		}
		if (error > 0) {
			if (error == 1) {
				$('errTitle').innerHTML = "Es wurde " + arrZahlen[error] + " Fehler gefunden!";
			} else {
				$('errTitle').innerHTML = "Es wurden " + arrZahlen[error] + " Fehler gefunden!";
			}
			$('errMessage').innerHTML = "Das Resultat kann noch nicht berechnet werden.<ul id='liError'>" + errMsg +
			"</ul><p class='center'><strong>Bitte behebe diese Fehler, bevor Du das <a href='#step7Anchor'>Resultat</a> berechnest.</strong></p>";
			$('wndError').morph('height: 300px;');
			return false;
		} else {
			if ($('wndError').getHeight() > 10) {
				$('wndError').morph('height: 0px;');
			}
		}
		gewinn     = conv2Number($F("step_6_1_1_E_X_0_X_N"));
		steuer     = conv2Number($F("step_6_finish_sum01"));
		umsBrutto  = umsNetto + gewinn + steuer;
		steuer2    = Math.round((umsNetto * (conv2Number($F("step_6_1_2_E_X_0_X_N")) / 100)));
		umsBrutto2 = umsNetto + steuer;
		umsNetto3  = umsNetto - conv2Number($F("step_2_1_sum01"));
		steuer3    = Math.round(((umsNetto + gewinn) * (conv2Number($F("step_6_1_2_E_X_0_X_N")) / 100)));
		umsBrutto3 = umsNetto3 + gewinn + steuer3;
		steuer4    = Math.round((umsNetto * (conv2Number($F("step_6_1_2_E_X_0_X_N")) / 100)));
		umsBrutto4 = umsNetto3 + steuer4;
		$('step_7_1_1_b_resultat').value = formatNumber(umsNetto, 2, true);
		$('step_7_1_2_b_resultat').value = formatNumber(gewinn, 2, true);
		$('step_7_1_3_b_resultat').value = formatNumber(steuer, 2, true);
		$('step_7_1_4_b_resultat').value = formatNumber(umsBrutto, 2, true);
		$('step_7_1_5_b_resultat').value = formatNumber(Math.round((umsBrutto / 12), 2), 2, true);
		pStunden = conv2Number($F("step_5_finish_sum12"));
		uStunden = conv2Number($F("step_5_finish_sum01"));
		gStunden = conv2Number($F("step_5_finish_sum00"));
		idealStd = umsBrutto / pStunden;
		breakStd = umsBrutto2 / pStunden;
		sparStd  = umsBrutto3 / pStunden;
		sSparStd = umsBrutto4 / pStunden;
		$('step_7_2_1_b_resultat').value = formatNumber(idealStd, 2, true);
		$('step_7_2_2_b_resultat').value = formatNumber(breakStd, 2, true);
		$('step_7_2_3_b_resultat').value = formatNumber(sparStd, 2, true);
		$('step_7_2_4_b_resultat').value = formatNumber(sSparStd, 2, true);
		for (i = 3; i < progFields.length; i++) { progDirty[(progFields.indexOf(progFields[i]))] = 1;}
		checkProgress();
		evalResult();
		ajxSaveValue();
	}
	checkProgress();
 }

 //Details loeschen
 function deleteFields(step, subStep, from, to) {
	elems 	   = $$('#frmStep_' + step + '_' + subStep + ' input:[rel=calc]');
	elems.each(function(elem){
		elmID 	 = $(elem).identify();
		idVal 	 = elmID.split("_");
		idVal[3] = parseInt(idVal[3]);
		if (idVal[3] >= from && idVal[3] <= to) {
			$(elmID).value = "0,00";
		}
	});
	if (step == 4) {
		elems = $$("div#step_5_1_detail input:[rel=calc]");	
		elems.each(function(elem){
			elmID 	 = $(elem).identify();
			$(elmID).value = "0,00";
		});
	}
 }
 
 //Details berechnen
 //Feldnamen:
 //    step_2_1_1_M_R_2_M_J
 //    XXXX_step_subStep_FeldNr_Zeit_Relation_FeldNrRelation_Berechnung_Pflicht
 //         Zeit: E ... Einzelwert
 //               M ... Monatswert 
 //               W ... Wochenwert 
 //               Q ... Quartalswert 
 //               J ... Jahreswert (1 Jahr) 
 //               Y ... Jahreswert (x Jahre {definiert durch das Rel-Feld}) 
 //               R ... Ist ein Relationsfeld 
 //				  G ... Gehaltsberechnung (G-Feld = Anzahl, folgendes Feld = Bruttogehalt, folgendes Feld = Sonderzahlung/Jahr)
 //			Relation:		R ... Ist mit FeldNrRelation verbunden
 //			         		X ... Hat keine Relation
 //         FeldNrRelation: Feldnummer des verbundenen Feldes (0 = keine Relation)
 //			Berechnung:	X ... Ist bereits ein Monatswert
 //					 	M ... Mit FeldNrRelation multiplizieren ergibt den Monatswert (value * FeldNrRelation.value)
 //					 	N ... Mit FeldNrRelation dividieren ergibt den Monatswert (value / FeldNrRelation.value)
 //					 	W ... Mit (52 / FeldNrRelation) multiplizieren und durch 12 dividieren ergibt den Monatswert
 //							  (value * (52 / FeldNrRelation.value)) / 12
 //					 	T ... Mit FeldNrRelation multiplizieren und mit 52 multiplizieren durch 12 dividieren ergibt den Monatswert
 //							  (value * FeldNrRelation.value) * 52) / 12
 //					 	J ... Mit FeldNrRelation multiplizieren ergibt den Jahreswert und durch 12 dividieren ergibt den Monatswert
 //						Y ... Durch FeldNrRelation und 12 dividieren ergibt den Monatswert
 //					 	Q ... Mit 4 multiplizieren ergibt den Jahreswert und durch 12 dividieren ergibt den Monatswert
 //						R ... Ist ein Relationsfeld
 //                     K ... Berechnet aus elmValue (= liter) die Kubikmeter per Monat
 //						S ... Berechnet aus elmValue (= kw/h) den Monatsverbrauch
 //		                Z ... Arbeitszeit Mitarbeiter berechnen (Z (Wochenstunden), Z+3 (Wochenproduktivstunden), Z+6 (Urlaubstage), Z+9 (Krankentage))
 //               		F ... Feiertage
 //               		A ... Arbeitstage
 //			Pflicht:	J ... Ist ein Pflichtfeld (Relationsfelder genau gleich wie Hauptfeld einstellen)
 //			   			N ... Ist kein Pflichtfeld
 errorMsg 		= new Array();
 errorMsg[2] 	= new Array();
 errorMsg[3] 	= new Array();
 errorMsg[5] 	= new Array();
 errorMsg[2][1] = new Array("", "Die Mietkosten pro m&sup2; und die Fl&auml;che wurden nicht angegeben!", "",
 							"Die Stromkosten pro kW/h und der Verbrauch wurden nicht angegeben!", "",
							"Die Wasserkosten pro m&sup3; und der Verbrauch wurden nicht angegeben!", "",
							"Die Kosten f&uuml;r die Heizung wurden nicht angegeben!");
 errorMsg[2][2] = new Array("", "Es wurden keine Werte f&uuml;r die monatlichen Fahrtkosten angegeben!", "", "",
							"Beide Werte beim &ldquo;Tanken&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Versicherung&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Mautgeb&uuml;hren&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;Service&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Reinigung&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Verkehrsstrafen&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Parkgeb&uuml;hren&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[2][3] = new Array("", "Beide Werte bei den &ldquo;B&uuml;rom&ouml;beln&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
 							"Beide Werte bei dem &ldquo;Computer&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei dem &ldquo;Drucker&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei dem &ldquo;Scanner&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei dem &ldquo;Kopierger&auml;t&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Digitalkamera&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;1. Softwarepacket&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;2. Softwarepacket&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;3. Softwarepacket&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Sonstigen Werten&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!"); 
 errorMsg[2][4] = new Array("", "Die Kosten f&uuml;r die Telefone wurden nicht richtig angegeben!", "",
 							"Du musst die monatlichen mobilen Telefonkosten eingeben!", "",
 							"Du musst die Kosten f&uuml;r den Internetzugang eingeben!");
 errorMsg[2][5] = new Array("", "Die Kosten f&uuml;r das Papier m&uuml;ssen eingegeben werden!",
 							"Die Werte f&uuml;r den Tinten-/Tonerverbrauch sind nicht richtig!", "",
 							"Die Werte f&uuml;r die Notizen sind nicht richtig!", "",
							"Beide Werte bei den &ldquo;Skizzen &amp; Stiften&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Du musst etwas bei den Ordnungssystemem eingeben!", "",
							"Bei der Datensicherung sind keine korrekten Werte angegeben!", "",
							"Bei den Speicherkarten sind keine korrekten Werte angegeben!", "",
							"Beide Werte bei den &ldquo;externen Festplattent&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Bei den Kleinigkeiten des B&uuml;ros sind keine korrekten Werte angegeben!", "");
 errorMsg[2][6] = new Array("", "Beide Werte beim &ldquo;Gesch&auml;schtspapier&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
 							"Du musst f&uuml;r die Visitenkarten etwas eingeben!", "",
							"Beide Werte beim &ldquo;webDesign&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;webHosting&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;Dom&auml;nennamen&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;pers&ouml;nlichen Kontakt&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Werbegeschenken&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[2][7] = new Array("", "Du musst bei der Kranken- und Pensionsversicherung etwas eingeben!", "",
							"Beide Werte bei der &ldquo;Pensionsvorsorge&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Betriebsunterbrechungsversicherung&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Rechtschutzversicherung&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Haftpflichtversicherung&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[2][8] = new Array("", "Beide Werte bei der &ldquo;Pflichtmitgliedschaft&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;1. Business-Netzwerk&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;2. Business-Netzwerk&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;1. Kreativ-Netzwerk&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;2. Kreativ-Netzwerk&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;Verein&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[2][9] = new Array("", "Bei den Kontogeb&uuml;hren musst Du etwas eingeben.", "",
							"Beide Werte bei der &ldquo;ec-Card&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei der &ldquo;Kreditkarte&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte beim &ldquo;Steuerberater&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Rundfunkgeb&uuml;hren&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[2][10]= new Array("", "", "",
							"Beide Werte bei den &ldquo;Monatszahlungen&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "",
							"Beide Werte bei den &ldquo;Wochenausgaben&bdquo; m&uuml;ssen Null sein oder eine Zahl enthalten!", "");
 errorMsg[3][1] = new Array("", "Die Mietkosten pro m&sup2; und die Fl&auml;che wurden nicht angegeben!", "",
 							"Die Stromkosten pro kW/h und der Verbrauch wurden nicht angegeben!", "",
							"Die Wasserkosten pro m&sup3; und der Verbrauch wurden nicht angegeben!", "",
							"Die Kosten f&uuml;r die Heizung wurden nicht angegeben!");
 errorMsg[3][2] = new Array("", "Die Kosten f&uuml;r Essen &amp; Trinken wurden nicht angegeben!",
 							"Die f&uuml;r die K&ouml;rperpflege wurden nicht angegeben!", "",
							"Die Kosten f&uuml;r die Bekleidung wurden nicht angegeben!", "",
							"Die Kosten f&uuml;r die Reinigungsmittel wurden nicht angegeben!");
 errorMsg[5][2] = new Array("", "Es wurde keine Zahl bei den Arbeitsstunden pro Woche angegeben!",
 							"Es wurde keine Zahl bei den produktiven Arbeitsstunden pro Woche angegeben!", "", "",
							"Es wurde keine Zahl bei den Feiertagen angegeben!",
							"Es wurde keine Zahl bei den Arbeitstagen  angegeben!");
 function calcDetails(step, subStep) {
	idSumMonat = "step_" + step + "_" + subStep + "sum12";
	idSumJahr  = "step_" + step + "_" + subStep + "sum01";
	frmName    = "frmStep_" + step + "_" + subStep;
	elems 	   = $$('#frmStep_' + step + '_' + subStep + ' input:[rel=calc]');
 	detSum 	   = 0;		//Detailsumme
	stdProd    = 0;		//ProduktivStunden Mitarbeiter
	stdUProd   = 0;		//Unproduktivstunden Mitarbeiter
	error  	   = 0;		//Anzahl der Fehler
	errMsg 	   = "";	//Fehlermeldung
	errFld     = "";	//erstes fehlerhaftes Feld (ID)
	elems.each(function(elem){
		elmID 	 = $(elem).identify();
		idVal 	 = elmID.split("_");
		aktError = false;
		wert 	 = 0;
		wert  	 = 0;
		rIDJ     = "step_" + step + "_" + subStep + "_" + idVal[6] + "_R_X_0_R_J";
		rIDN     = "step_" + step + "_" + subStep + "_" + idVal[6] + "_R_X_0_R_N";
		clearField(elmID); //Feld bereinigen, leere Werte auf 0 ergaenzen
		elmValue = conv2Number($F(elmID));
		if (idVal[8] == "J") { //auf Pflichtfeld und Fehler pruefen
			if (idVal[5] == "R") {
				relValue = conv2Number($F(rIDJ));
				if (elmValue == 0 || relValue == 0) {
					error++;
					errMsg += "<li>" + errorMsg[step][subStep][idVal[3]] + "</li>\n";
					detSum = 0;
					if (elmValue == 0) {
						$(elmID).addClassName('error');
						if (errFld == "") { errFld = elmID; }
					}
					if (relValue == 0) {
						$(rIDJ).addClassName('error');
						if (errFld == "") { errFld = rIDJ; }
					}
					aktError = true;
				} else {
					$(elmID).removeClassName('error');
					$(rIDJ).removeClassName('error');
				}
			} else {		
				if ((idVal[4] != "R" && idVal[5] != "X") || (idVal[4] != "R" && idVal[5] == "X" && idVal[7] == "X")) {
					if (elmValue == 0 && idVal[7] != "R") {
						error++;
						errMsg += "<li>" + errorMsg[step][subStep][idVal[3]] + "</li>\n";
						detSum = 0;
						if (errFld == "") {
							errFld = elmID;
						}
						$(elmID).addClassName('error');
						aktError = true;
					} else {
						$(elmID).removeClassName('error');
					}
				}
			}
		} else {
			if (idVal[5] == "R" && idVal[7] != "R") {				
				relValue = conv2Number($F(rIDN));
				if ((elmValue == 0 || relValue == 0) && !(elmValue == 0 && relValue == 0)) {
					error++;
					errMsg += "<li>" + errorMsg[step][subStep][idVal[3]] + "</li>\n";
					detSum = 0;
					if (errFld == "") {
						errFld = elmID;
					}
					if (elmValue == 0) {
						$(elmID).addClassName('error');
					}
					if (relValue == 0) {
						$(rIDN).addClassName('error');
					}
					aktError = true;
				} else {
					$(elmID).removeClassName('error');
					$(rIDN).removeClassName('error');
				}
			}
		}//end Fehlerpruefung
		//Wert berechnen
		if (step != 5) {
			if (!aktError && (idVal[4] != "R")) {
				if (idVal[5] == "R") { //Verbunden mit Relationsfeld
					switch (idVal[7]) {
						case "M": //Monatswert --> Mit RelFeld multiplizieren
							wert = elmValue * relValue;
							break;
						case "N": //Monatswert --> Mit RelFeld dividieren
							wert = elmValue / relValue;
							if (relValue == 0) {
								wert = 0;
							}
							break;
						case "W": //Wochenwert --> auf Jahr hochrechnen und durch 12 dividieren
							wert = (elmValue * (52 / relValue)) / 12;
							if (relValue == 0) {
								wert = 0;
							}
							break;
						case "T": //Tage per Woche --> Mit RelFeld multiplizieren, mit 52 multiplizieren und durch 12 dividieren
							wert = (elmValue * 52 * relValue) / 12;
							break;
						case "J": //Jahreswert --> auf Jahr hochrechnen (elmID * relID) und durch 12 dividieren
							wert = (elmValue * relValue) / 12;
							break;
						case "Y": //Mehrjahreswert --> auf Jahr runterrechnen (elmID / relID) und durch 12 dividieren
							wert = (elmValue / relValue) / 12;
							if (relValue == 0) {
								wert = 0;
							}
							break;
						case "K": //Berechnung fuer Kubikmeter per Monat; value = Liter per Tag
							wert = (((elmValue * 365.25) / 12) / 1000) * relValue;
							break;
						case "S": //Berechnung fuer kw/H per Monat; value = kW/h per Tag
							wert = (((elmValue * 365.25) / 12)) * relValue;
							break;
						default:
							alert("7: (" + elmID + ") " + idVal[7]);
					}
				} else { //Einzelwert
					if (idVal[4] != "R") {
						switch (idVal[4]) {
							case "X": //Einzelwert
							case "M": //Monatswert
								wert = elmValue;
								break;
							case "Q": //Quartalswert
								wert = (elmValue * 4 / 12);
								break;
							case "W": //Wochenwert
								wert = (elmValue * 52 / 12);
								break;
							case "J": //Jahreswert
								wert = (elmValue / 12);
								break;
							case "G": //Gehalt
								rIDN = "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 1) + "_R_X_0_X_N";
								clearField(rIDN);
								gehalt = conv2Number($F(rIDN)) * 12;
								rIDN = "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 2) + "_R_X_0_X_N";
								clearField(rIDN);
								sonder = conv2Number($F(rIDN));
								wert = ((gehalt + sonder) * elmValue) / 12;
								break;
							default:
								alert("4: (" + elmID + ") " + idVal[4]);
						}
					}
				}
				detSum += wert;
			} // end Berechen !aktError
		} else {
			//Zeiten berechnen
			if (subStep == 1) {
				if (idVal[7] == "Z") {
					elID = new Array(elmID, "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 3) + "_R_X_0_R_N", "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 6) + "_R_X_0_R_N", "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 9) + "_R_X_0_R_N");
					tgID = "step_" + step + "_" + subStep + "_" + (elems.length) + "_A_X_0_E_N";
					fgID = "step_" + step + "_" + subStep + "_" + (elems.length - 1) + "_F_X_0_E_N";
					for (i = 0; i <= 3; i++) {
						clearField(elID[i]);
						formatNumber($F(elID[i]), 2, true);
					}
					clearField(tgID);
					clearField(fgID);
					formatNumber($F(tgID), 2, true);
					formatNumber($F(fgID), 2, true);
					aTage = conv2Number($F(tgID)) - conv2Number($F(fgID));
					kTage = conv2Number($F(elID[2])) + conv2Number($F(elID[3]));
					Tage  = (aTage - kTage) / 5;
					aStd  = Tage * conv2Number($F(elID[0]));
					pStd  = Tage * conv2Number($F(elID[1]));
					uStd  = aStd - pStd;
					stdProd  += pStd;
					stdUProd += uStd;
				}
			} else {
				if (idVal[7] == "Z") {
					elID = new Array(elmID, "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 1) + "_R_X_0_R_J", "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 2) + "_R_X_0_R_N", "step_" + step + "_" + subStep + "_" + (parseInt(idVal[3]) + 3) + "_R_X_0_R_N");
					tgID = "step_" + step + "_" + subStep + "_" + (elems.length) + "_A_X_0_E_J";
					fgID = "step_" + step + "_" + subStep + "_" + (elems.length - 1) + "_F_X_0_E_J";
					for (i = 0; i <= 3; i++) {
						clearField(elID[i]);
						formatNumber($F(elID[i]), 2, true);
					}
					clearField(tgID);
					clearField(fgID);
					formatNumber($F(tgID), 2, true);
					formatNumber($F(fgID), 2, true);
					if (conv2Number($F(elID[0])) == 0) {
						error++;
						errMsg += "<li>" + errorMsg[step][subStep][1] + "</li>\n";
						$(elID[0]).addClassName('error');
						if (errFld == "") { errFld = elID[0]; }
						aktError = true;
					} else {
						$(elID[0]).removeClassName('error');
					}
					if (conv2Number($F(elID[1])) == 0) {
						error++;
						errMsg += "<li>" + errorMsg[step][subStep][2] + "</li>\n";
						$(elID[1]).addClassName('error');
						if (errFld == "") { errFld = elID[1]; }
						aktError = true;
					} else {
						$(elID[1]).removeClassName('error');
					}
					if (conv2Number($F(tgID)) == 0) {
						error++;
						errMsg += "<li>" + errorMsg[step][subStep][5] + "</li>\n";
						$(tgID).addClassName('error');
						if (errFld == "") { errFld = tgID; }
						aktError = true;
					} else {
						$(tgID).removeClassName('error');
					}
					if (conv2Number($F(fgID)) == 0) {
						error++;
						errMsg += "<li>" + errorMsg[step][subStep][6] + "</li>\n";
						$(fgID).addClassName('error');
						if (errFld == "") { errFld = fgID; }
						aktError = true;
					} else {
						$(fgID).removeClassName('error');
					}
					if (!aktError) {
						aTage = conv2Number($F(tgID)) - conv2Number($F(fgID));
						kTage = conv2Number($F(elID[2])) + conv2Number($F(elID[3]));
						Tage = (aTage - kTage) / 5;
						aStd = Tage * conv2Number($F(elID[0]));
						pStd = Tage * conv2Number($F(elID[1]));
						uStd = aStd - pStd;
						stdProd  += pStd;
						stdUProd += uStd;
					} else {
						stdProd  = 0;
						stdUProd = 0;
					}
				}
			}
		}
	});
	if (step != 5) {
		detSum = Math.round(detSum);
		$('step_' + step + "_" + subStep + "_sum12").value = formatNumber(detSum, 2, true);
		$('step_' + step + "_" + subStep + "_sum01").value = formatNumber((detSum * 12), 2, true);
	} else {
		stdProd  = Math.round(stdProd);
		stdUProd = Math.round(stdUProd);
		$('step_' + step + "_" + subStep + "_sum01").value = formatNumber(stdProd, 2, true);
		$('step_' + step + "_" + subStep + "_sum12").value = formatNumber(stdUProd, 2, true);
		$('step_' + step + "_" + subStep + "_sum00").value = formatNumber((stdProd + stdUProd), 2, true);
	}
	//Fehler sind aufgetreten
	if (error > 0) {
		if (error == 1) { 
			$('errTitle').innerHTML   = "Es wurde " + arrZahlen[error] + " Fehler gefunden!";
		} else {
			$('errTitle').innerHTML   = "Es wurden " + arrZahlen[error] + " Fehler gefunden!";			
		}
		$('errMessage').innerHTML = "Es sind Fehler aufgetreten:<ul id='liError'>" + errMsg + 
									"</ul><p class='center'><strong>Du musst die Werte in den rot markierten Feldern korrigieren.</strong></p>";
		$('wndError').morph('height: 300px;');
		$(errFld).focus();
	} else {
		progDirty[(progFields.indexOf('step_' + step + "_" + subStep + "_sum12"))] = 1;
		progDirty[(progFields.indexOf('step_' + step + "_" + subStep + "_sum01"))] = 1;
		checkProgress();
		$('wndError').morph('height: 0px;');
		Effect.toggle("step_" + step + "_" + subStep + "_detail", 'blind', {
			afterFinish: changeButtonText(step, subStep)
		});
	}
 }
 
 //Fortschritt berechnen
 function checkProgress() {
 	progress = 0;
	for (i = 0; i < progFields.length; i++) {
		if (progDirty[i] != 0) {progress = progress + progDirty[i];}
	}
	progress = parseInt((progress / progFields.length) * 100);
	pgBar.setPercentage(progress, true);
 }
	
 //Aenderungen mitverfolgen
 function setDirty(fldID) {
 	alert(fldID);
 }
 
 //Staaten holen
 function ajxHoleStaaten(staat) {
	new Ajax.Request('bin/ajax.php?m=5&p1=' + staat, {
	  onSuccess: function(t) {
	  	selID  = "statStaat";
		option = t.responseText.split("|");
		$(selID).options.length = 0;
		if (staat == "") { bolSel == true; }
		$(selID).options[0] = new Option("Staat ausw&auml;hlen", "---", bolSel, false);
		try {
			for (i = 0; i < (option.length - 1); i++) {
				opt = option[i].split(";");
				bolSel = false;
				if (statt != "" && opt[0] == staat) { bolSel = true; }
				$(selID).options[(i + 1)] = new Option(opt[1], opt[0], bolSel, false);
			}
			if (regID != "") { $(selID).value = regID; }
		} catch(e) {}
	  }
	});
 } 

 //eMail zu AccessKey pruefen
 function ajxCheckMail() {
 	eMail = $F('statEmail');
	if (eMail == "") {
		$('spanAccKey').innerHTML = "<p>Du hast noch keine eMail-Adresse angegeben. Daher k&ouml;nnen keine Daten abgerufen werden.</p>";
	} else {
		new Ajax.Request('bin/ajax.php?m=3&p1=' + eMail, {
			onSuccess: function(t) {
				if (t.responseText > 0) {
					$msg = "Um Deine Daten abzurufen, gibst Du jetzt Deinen pers&ouml;nlichen Zugangscode ein. Danach verl&auml;sst Du das Eingabfeld. " +
						   "Danach wartest Du bis Du eine Best&auml;tigung f&uuml;r das Verarbeiten der Daten erh&auml;ltst.</p><p>" +
						   '<label class="textLabel"">Zugangscode</label>' +
						   '<input type="text" id="statAccess" name="statAccess" class="normalText" value="" onblur="ajxCheckAccess();" />' +
						   '<input type="hidden" id="statUID" name="statUID" value="' + t.responseText + '"';
				} else {
					$msg = "Diese eMail-Adresse ist nicht vorhanden. du hast Deine Daten noch nie gespeichert.";
				}
				$('spanAccKey').innerHTML = "<p class='explain'>" + $msg +"</p>";
			}
		});
	}
 }
 
 //AccessKey ueberpruefen
 function ajxCheckAccess() {
 	eMail  = $F('statEmail');
	accKey = $F('statAccess');
	if (eMail == "" || accKey == "") {
		$('spanAccInfo').innerHTML = "<p class='AccessError'>Entweder die eMail-Adresse oder der Zugangscode sind nicht vorhanden!</p>"
	} else {
		$('spanAccInfo').innerHTML = "<p class='explain'><img src'../../images/loader.gif' />Deine Daten werden abgerufen. Habe ein wenig Geduld.</p>";
		new Ajax.Request('bin/ajax.php?m=4&p1=' + eMail + "&p2=" + accKey + "&p3=" + $F('statUID'), {
			onSuccess: function(t) {
				tupel = t.responseText.split('^');
				if (tupel[0] == 1) {
					msg = "<p class='AccessSuccess'>Deine Zugangsdaten wurden akzeptiert und die entsprechenden Daten stehen Dir wieder zur Verf&uuml;gung.<br/>" +
						  "Bis auf den <a href='#step7Anchor'>letzten Schritt</a> wurden alle Berechnungen wieder durchgef&uuml;hrt.</p>";
					valPart = tupel[1].split("=");
					new Ajax.Request('bin/ajax.php?m=5&p1=' + valPart[1], {
						onSuccess: function(t) {
							$('statStaat').options.length=0;
							option  = t.responseText.split("^");
							var sel = new Array (false, true);
							staat = "";
							try {
								$('statStaat').options[0] = new Option('Staat ausw&aum;hlen', '---', false, false);
								for (i = 0; i < (option.length - 1); i++) {
									if (option[i] != "") {
										opt = option[i].split("|");
										if (opt[2] == 1) {staat = opt[0];}
										$('statStaat').options[(i+1)] = new Option(opt[1], opt[0], sel[opt[2]], false);
									}
								}
								$('statStaat').value = staat;
								valPart = tupel[2].split("=");
								setRegion(valPart[1]);
							} catch(e) {}
						}
					});
					valPart = tupel[3].split("=");
					$('statBranche').value = valPart[1];
					for (i = 4; i < tupel.length - 2; i++) {
						valPart = tupel[i].split("=");
						try {
							$(valPart[0]).value = formatNumber(valPart[1], 2, true);
						} catch(e) {}
					}
					calcStep(2);
					calcStep(3);
					calcStep(5);
					try {
						valPart = tupel[(tupel.length - 2)].split("=");
						$(valPart[0]).value = formatNumber($valPart[1], 2, true);
						valPart = tupel[(tupel.length - 1)].split("=");
						$(valPart[0]).value = formatNumber($valPart[1], 2, true);
					} catch(e) {}
					calcStep(6);
				} else {
					msg = "<p class='AccessError'>Entweder sind die eMail-Adresse oder der Zugangscode fehlerhaft bzw. die Kombination der beiden Werte ist falsch " +
						   "oder sie existieren nicht!</p>";
				}
				$('spanAccInfo').innerHTML = msg;
			}
		});
	}
 }
 
 //Daten uebertragen
 function ajxSaveValue() {
 	if ($F('statSpeichern') == 1) {
		frms = $$('form:[rel=submit]');
		param = "m=2";
		i = 1;
		frms.each(function(frm){
			param += "&p" + i + "=" + $(frm).identify() + "&" + $(frm).serialize();
			i++;
		});
		new Ajax.Request('bin/ajax.php', {
			method: 'post',
			parameters: param,
			onComplete: function(t) {
				Element.Fade('infoCalc');
			}
		});
	}
 } 

 //eMail Senden 
 function ajxSendEmail() {
	    $('btnSendEmail').innerHTML = "Versende eMail...";
		Element.addClassName('btnSendEmail', "sending");
		$('btnSendEmail').observe('click', function() {
			return false;
		} );
		param = "m=6&p1=fCeM&p2=T&" + $('frmEmail').serialize();
	    new Ajax.Request('bin/ajax.php', {
			method: 'post',
			parameters: param,
	      	onSuccess: function(transport) {
	        	if (transport.responseText.match(/^OK/) != null) {
					if ($('wndError').getHeight() > 10) {$('wndError').morph('height: 0px;');}
					$('menue_email_div').morph('height: 0px;');
	          		$('frmEmail').reset();
	          		alert('Deine Nachricht wurden an den Guru 2.0 gesendet!');
	        	} else {
					$('errMessage').innerHTML = transport.responseText;
					$('wndError').morph('height: 300px;');
	        	}
	        	$('btnSendEmail').innerHTML = 'eMail senden';
				Element.removeClassName('btnSendEmail', "sending");
				$('btnSendEmail').observe('click', function() {
					ajxSendEmail();
				} );
	      	}
		});
	    return false;
 }
 
 //Auswahlliste veraendern
 function setRegion(regID) {
	new Ajax.Request('bin/ajax.php?m=0&p1='+$F('statStaat'), {
	  onSuccess: function(t) {
	  	selID  = "statBundesland";
		option = t.responseText.split("|");
		$(selID).options.length=0;
		$(selID).options[0] = new Option("Region festlegen", "---", false, false);
		try {
			for (i = 0; i < (option.length - 1); i++) {
				opt = option[i].split(";");
				bolSel = false;
				if (regID != "" && opt[0] == regID) { bolSel = true; }
				$(selID).options[(i + 1)] = new Option(opt[1], opt[0], bolSel, false);
			}
			if (regID != "") { $(selID).value = regID; }
		} catch(e) {}
	  }
	});
	new Ajax.Request('bin/ajax.php?m=1&p1='+$F('statStaat'), {
	  onSuccess: function(t) {
	  	selID = "statBundesland";
		wert  = t.responseText.split("^");
		try {
			elems = $$('span.currency');
			elems.each(function(elem) {
				$(elem).innerHTML = wert[0];
			});
			elems = $$('span.currencyLong');
			elems.each(function(elem) {
				$(elem).innerHTML = wert[1];
			});
		} catch(e) {}
	  }
	});
 }
 
 //Bewertung der Resultate
 function evalResult() {
 	currency 	= "";
	preisMedian = 70; 	//mittlerer Stundenpreis
	preisMax	= 140; 	//maximaler Stundenpreis
	stdPreis 	= conv2Number($F('step_7_2_1_b_resultat'));
	prodStd		= conv2Number($F('step_5_finish_sum12')); 	
	gesStd		= conv2Number($F('step_5_finish_sum00'));
	gKosten 	= conv2Number($F('step_2_finish_sum01'));
	pKosten 	= conv2Number($F('step_3_finish_sum01'));
	mKosten     = conv2Number($F('step_4_1_sum01'));
	gKstBuero 	= conv2Number($F('step_2_1_sum01'));  pBuero	= parseInt(gKstBuero / gKosten * 100);
	gKstReise 	= conv2Number($F('step_2_2_sum01'));  pReise	= parseInt(gKstReise / gKosten * 100);
	gKstMoebel 	= conv2Number($F('step_2_3_sum01'));  pMoebel	= parseInt(gKstMoebel / gKosten * 100);
	gKstKommuni = conv2Number($F('step_2_4_sum01'));  pKommuni	= parseInt(gKstKommuni / gKosten * 100);
	gKstMateri 	= conv2Number($F('step_2_5_sum01'));  pMateri	= parseInt(gKstMateri / gKosten * 100);
	gKstWerbung = conv2Number($F('step_2_6_sum01'));  pWerbung	= parseInt(gKstWerbung / gKosten * 100);
	gKstVersi 	= conv2Number($F('step_2_7_sum01'));  pVersi	= parseInt(gKstVersi / gKosten * 100);
	gKstBeitr 	= conv2Number($F('step_2_8_sum01'));  pBeitr	= parseInt(gKstBeitr / gKosten * 100);
	gKstGeb 	= conv2Number($F('step_2_9_sum01'));  pGeb		= parseInt(gKstGeb / gKosten * 100);
	gKstSonst 	= conv2Number($F('step_2_10_sum01')); pSonst	= parseInt(gKstSonst / gKosten * 100);
	relP2GStd	= (prodStd / gesStd) * 100;
	gewinn		= conv2Number($F('step_6_finish_sum12'));
	steuer      = conv2Number($F("step_6_finish_sum01"));
	umsNetto 	= conv2Number($F("step_2_finish_sum01")) + conv2Number($F("step_3_finish_sum01")) + conv2Number($F("step_4_1_sum01"));
	umsNetto2   = umsNetto + gewinn;
	umsBrutto  	= umsNetto + gewinn + steuer;
	relUms2Gew  = gewinn / umsNetto * 100;
	// Der Stundensatz
 	strStunden = "<h3 class='details'>Der Stundensatz</h3><p>Dein idealer Stundentsatz ist %curr%&nbsp;" + formatNumber(stdPreis, 2, true) + ". Du liegst damit ";
	if (stdPreis >= preisMedian && stdPreis <= preisMax) {
		strStunden += "genau in der Bandbreite von dem, was Freelancer &amp; Agenturen normalerweise f&uuml;r die Arbeitsstunde berechnen.";
	}
	if (stdPreis < preisMedian) {
		strStunden += "um %curr%&nbsp;" + formatNumber((preisMedian - stdPreis), 2, true) + " unterhalb dessen, was 50 % der Freelancer &amp; Agenturen verrechnen. ";
		diffPzt = ((preisMedian - stdPreis) / preisMedian) * 100;
		if (diffPzt <= 25) {
			zuGewinn = (preisMedian - stdPreis) * prodStd;
			strStunden += "Da Du " + formatNumber(diffPzt, 2, true) + "&nbsp;% unterhalb liegst, ist es nicht so schlimm, falls Du am Anfang Deiner Laufbahn stehst.<br/>Denke " +
						  "jedoch daran, dass der Billigste nicht immer alle Auftr&auml;ge bekommt. Kunden sind bei billigen Angeboten oft zur&uuml;ckhaltend. Au&szlig;erdem ist " +
						  "es schwierig einen g&uuml;nstigen Preis in sp&auml;terer Folge zu erh&ouml;hen.<br/>Falls Du deinen Preis auf %curr%&nbsp;" + 
						  formatNumber(preisMedian, 2, true) + " erh&ouml;hst, hast Du auch %curr%&nbsp;" + formatNumber(zuGewinn, 2, true) + " (insgesamt %curr%&nbsp;" + 
						  formatNumber((zuGewinn + gewinn), 2, true) + ") mehr Gewinn (vor Steuern).";
		} else {
			zuGewinn = (preisMedian - stdPreis) * prodStd;
			strStunden += "Du verrechnest um " + formatNumber(diffPzt, 2, true) + "&nbsp;% weniger als der Durchschnitt. Du solltest Deinen Stundenpreis auf zumindest %curr%&nbsp;" + 
						  formatNumber(preisMedian, 2, true) + " anheben. Dadurch hast Du auch %curr%&nbsp;" + formatNumber(zuGewinn, 2, true) + " mehr Gewinn (vor Steuern).";
		}
	}
	if (stdPreis > preisMax) {
		strStunden += "um &euro; " + formatNumber((stdPreis - preisMax), 2, true) + " oberhalb dessen, was 50 % der Freelancer &amp; Agenturen verrechnen. ";
		diffPzt = ((stdPreis - preisMax) / preisMax) * 100;
		if (diffPzt <= 20) {
			strStunden += "Da Du " + formatNumber(diffPzt, 2, true) + "&nbsp;% oberhalb liegst, ist es nicht so schlimm, falls Du wirklich gute oder besondere Leistungen " +
						  "erbringst. Du hast bei harten Preisverhandlungen so einen gr&ouml;&szlig;eren Handlunsspielraum um den Preis anzupassen.";
		} else {
			zuGewinn = (stdPreis - preisMax) * prodStd;
			strStunden += "Du verrechnest um " + formatNumber(diffPzt, 2, true) + "&nbsp;% mehr als der Durchschnitt. Du solltest Deinen Stundenpreis auf zumindest " + 
						  currency + " " + formatNumber(preisMax, 2, true) + " senken. Dadurch hast Du leider um %curr%&nbsp;" + formatNumber(zuGewinn, 2, true) + 
						  " weniger Gewinn (vor Steuern).<br/>Falls Du bei dem verminderten Stundenpreis Deine Kosten nicht mehr decken kannst, musst Du entweder " +
						  "<a href='#step2Anchor'>die Kosten Deiner Arbeitsmittel</a> oder <a href='#step3Anchor'>Deine Lebenshaltungskosten</a> einschr&auml;nken.";
			if (relUms2Gew > 100) {
				maxGewinn   = formatNumber((Math.round((umsNetto / 100), 0) * 100), 2, true);
				strStunden += "<br />Da das Verh&auml;ltnis von Umsatz zu Gewinn nicht ideal ist, solltest Du auch <a href='#step6Anchor'>den Gewinn</a> &uuml;berpr&uuml;fen. " +
							  "Nat&uuml;rlich kann man nicht genug Gewinn machen, aber dazu muss man die Leistung auch verkaufen k&ouml;nnen. Daher ist es besser den Gewinn mit " +
							  "maximal %curr%&nbsp;" + maxGewinn + " <a href='javascript:void(0);' onclick='$(\"step_6_1_1_E_X_0_X_N\").value=\"" + maxGewinn + 
							  "\";calcStep(6);calcStep(7);>festzulegen und neuzuberechnen</a>."
			} 
		}
	}
	// produktive Stunden
	strStunden += "</p><h3 class='details'>Deine produktiven Stunden</h3><p>Du verrechnest " + formatNumber(relP2GStd, 2, true) + "&nbsp;% Deiner Stunden.<br />";
	woStunden   = conv2Number($F('step_5_2_1_E_X_0_Z_J'));
	if (relP2GStd > 60) {
		strStunden += "Dies ist f&uuml;r einen Freelancer nicht &uuml;blich. Entweder warst Du bei der gesamten Stundenanzahl nicht ehrlich, oder Du hast zuviele produktive " + 
					  "Stunden bzw. zuwenig unproduktive Stunden angenommen. Kurzzeitig kann nat&uuml;rlich eine sehr gute Auslastung vorkommen, aber im Jahresmittel sind rund " +
					  "50&nbsp;% normal. Denn Du hast auch sogenannte &ldquo;tote&bdquo; Zeiten, wie im Sommer. Denn in dieser Zeit hast Du fast keine Auftr&auml;ge. " +
					  "&Uuml;berpr&uuml;fe Deine Angaben im <a href='#step5Anchor'>5.&nbsp;Schritt</a>."
		if (woStunden <= 40) {
			strStunden += "Kann es sein, dass Deine Wochenarbeitszeit zu kurz ist, sie liegt unter 40 Stunden?"
		}
	}
	if (relP2GStd < 40) {
		strStunden += "Dies ist f&uuml;r einen Vollzeit-Freelancer nicht &uuml;blich. Entweder warst Du bei der gesamten Stundenanzahl nicht ehrlich, oder Du hast zuwenig produktive " + 
					  "Stunden bzw. zuviele unproduktive Stunden angenommen. Falls Du die T&auml;tigkeit aber nebenberuflich aus&uuml;bst kann es stimmen. Trotzdem solltest Du " +
					  "nachdenken, warum Du soviele unproduktive Zeiten hast. &Uuml;berpr&uuml;fe Deine Angaben im <a href='#step5Anchor'>5.&nbsp;Schritt</a>."
	}
	if (relP2GStd >= 40 && relP2GStd <= 60) {
		strStunden += "Das Verh&auml;ltnis von produktiven zu unproduktiven Stunden liegt im &uuml;blichen Bereich."
	}
	// Aufteilung der Kosten
	strStunden+= "</p><h3 class='details'>Die Verteilung Deiner Kosten</h3>";
	wert1 = parseInt((gKosten / umsBrutto) * 100);
	wert2 = parseInt((pKosten / umsBrutto) * 100);
	wert3 = parseInt((gewinn / umsBrutto) * 100);
	wert4 = parseInt((steuer / umsBrutto) * 100);
	wert5 = parseInt((mKosten / umsBrutto) * 100);
	reise = parseInt(conv2Number($F('step_2_2_sum01')) * 0.33);
	vers1 = (conv2Number($F('step_2_7_3_E_R_4_J_N')) * conv2Number($F('step_2_7_4_R_X_0_R_N')));
	vers2 = (conv2Number($F('step_2_7_5_E_R_6_J_N')) * conv2Number($F('step_2_7_6_R_X_0_R_N')));
	versi = vers1 + vers2;
	wert1a = gKosten - reise - versi;
	wert2a = pKosten + reise + versi;
	if (wert5 == 0) {
		strStunden += '<p style="padding:30px 0px"><img src="http://chart.apis.google.com/chart?chs=520x200&chd=t:' + wert1 + ',' + wert2 + ',' + wert3 + ',' + wert4 + '&cht=p3&chl=Gesch&auml;ft (' +
					  wert1 + '%)|Privat (' + wert2 + '%)|Gewinn (' + wert3 + '%)|Steuern (' + wert4 + 
					  '%)&chf=bg,s,FFFFFF&chco=9EA04B,D5D925,8A8D18,D7D966&chtt=Kostenverteilung&chts=8A8D18,20" /></p>';
	} else {
		strStunden += '<p style="padding:30px 0px"><img src="http://chart.apis.google.com/chart?chs=520x200&chd=t:' + wert1 + ',' + wert2 + ',' + wert3 + ',' + wert4 + ',' + wert5 + 
					  '&cht=p3&chl=Gesch&auml;ft (' + wert1 + '%)|Privat (' + wert2 + '%)|Gewinn (' + wert3 + '%)|Steuern (' + wert4 + '%)|Mitarbeiter ('+ wert5 +
					  '%)&chf=bg,s,FFFFFF&chco=9EA04B,D5D925,8A8D18,D7D966,595A0F&chtt=Kostenverteilung&chts=8A8D18,20" /></p>';
	}
	faktor1 = (wert1 / wert2);
	faktor2 = (wert1a / wert2a);
	if (faktor1 >= 0.8 && faktor1 <=1.2) {
		strStunden += "<p>Die Verteilung der Kosten zwischen Arbeitsmittel und pers&ouml;nlichen Aufw&auml;nden ist nahezu ideal, n&auml;mlich (1 zu " + 
					  formatNumber(faktor1, 2, true) + ").</p>";
	} else {
		strStunden += "<p>Die Verteilung der Kosten zwischen Arbeitsmittel und pers&ouml;nlichen Kosten ist nicht ideal, n&auml;mlich (1 zu " + formatNumber(faktor1, 2, true) + 
					  "). Ein ideales Verh&auml;ltnis w&auml;re etwa 1 zu 1.<br/>";
		if (faktor1 > 1 ) {
			strStunden += "<p class='explainDetail'>Du verbrauchst um " + formatNumber((faktor1 - 1) * 100, 2, true) + "&nbsp;% mehr Arbeitsmittel, als Du f&uuml;r Dich privat aufwendest.<br/>" +
						  "&Uuml;berpr&uuml;fe nochmals <a href='#step2Anchor'>Deine Gesch&auml;ftskosten</a> oder <a href='#step3Anchor'>Deine privaten Kosten</a>. " +
						  "Wahrscheinlich warst Du bei den Arbeitsmitteln zu gro&szlig;z&uuml;gig oder Du hast bei Deinen Lebenshaltungskosten etwas &uuml;bersehen.";
		} else {
			strStunden += "<p class='explainDetail'>Deine Lebenshaltungskosten sind um " + formatNumber((faktor1 - 1) * 100, 2, true) + "&nbsp;% h&ouml;her als die Kosten f&uuml;r die Arbeitsmittel.<br/>" +
						  "&Uuml;berpr&uuml;fe nochmals <a href='#step2Anchor'>Deine Gesch&auml;ftskosten</a> oder <a href='step3Anchor'>Deine privaten Kosten</a>. " +
						  "Wahrscheinlich warst Du bei den Arbeitsmitteln zu gro&szlig;z&uuml;gig oder Du hast bei Deinen Lebenshaltungskosten etwas &uuml;bersehen."
		}
		if (faktor2 >= 0.8 && faktor2 <=1.2) {
			strStunden += "<br/>Wenn ein Drittel der Reisekosten (%curr%&nbsp;" + formatNumber(reise, 2, true) + "), die Pensionsvorsorge (%curr%&nbsp;" + 
						  formatNumber(vers1, 2, true) + ") und die Betriebsunterbrechnungsversicherung (%curr%&nbsp;" + formatNumber(vers2, 2, true) + ") zu den privaten Kosten " +
						  "addiert werden (Was realistisch ist.), sieht es ganz gut aus. Dann ergibt sich eine Verteilung der Kosten zwischen Arbeitsmittel (%curr%&nbsp;" + 
						  formatNumber(wert1a, 2, true) + ") und pers&ouml;nlichen Aufw&auml;nden (%curr%&nbsp;" + formatNumber(wert2a, 2, true) + ") die nahezu ideal ist: 1 zu " + 
						  formatNumber(faktor2, 2, true) + ").";
		} else {
			strStunden += "<br/>Wenn ein Drittel der Reisekosten (%curr%&nbsp;" + formatNumber(reise, 2, true) + "), die Pensionsvorsorge (%curr%&nbsp;" + 
						  formatNumber(vers1, 2, true) + ") und die Betriebsunterbrechnungsversicherung (%curr%&nbsp;" + formatNumber(vers2, 2, true) + 
						  ") zu den privaten Kosten addiert werden (Was realistisch ist.), ist die Verteilung der Kosten zwischen Arbeitsmittel (%curr%&nbsp;" + 
						  formatNumber(wert1a, 2, true) + ") und pers&ouml;nlichen Aufw&auml;nden (&euro;&nbsp;" + formatNumber(wert2a, 2, true) + ") noch immer nicht ideal: 1 zu " + 
						  formatNumber(faktor2, 2, true) + "). Du solltest daher die Kosten f&uuml;r das Gesch&auml;ft im <a href='#step2Anchor'>2.&nbsp;Schritt</a> und die Kosten " +
						  "f&uuml;r das t&auml;gliche Leben im <a href='#step3Anchor'>3.&nbsp;Schritt</a> nochmals &uuml;berpr&uuml;fen.";
		}
	}
	strStunden += '</p><p style="padding-top:30px"><img src="http://chart.apis.google.com/chart?chs=540x200&chd=t:' + pBuero + ',' + pReise + ',' + pMoebel + ',' + pKommuni + ',' + 
				  pMateri + ',' + pWerbung + ',' + pVersi + ',' + pBeitr + ',' + pGeb + ',' + pSonst + '&cht=p3&chl=B&uuml;romiete (' + pBuero + ' %)|' +
				  'Reisekosten (' + pReise + ' %)|Ausstattung (' + pMoebel + ' %)|Kommunikation (' + pKommuni + ' %)|Material (' + pMateri + ' %)|Werbung (' + pWerbung + 
				  ' %)|Versicherungen (' + pVersi + ' %)|Geb&uuml;hren (' + pGeb + ' %)|Sonstiges (' + pSonst + ' %)&chf=bg,s,FFFFFF&chco=8A8D18&' +
				  'chtt=Aufteilung+der+Gesch&auml;ftskosten&chts=8A8D18,20" /></p>'
	// fixe/variable Kosten
	fgKst     = new Array();
	vgKst 	  = new Array();
	fgKst[0]  = conv2Number($F('step_2_1_sum12'));
	fgKst[1]  = conv2Number($F('step_2_2_sum12')) * 0.4;
	fgKst[2]  = conv2Number($F('step_2_3_sum12'));
	fgKst[3]  = (conv2Number($F('step_2_4_1_Y_R_2_Y_J')) / conv2Number($F('step_2_4_2_R_X_0_R_J'))) / 12;
	fgKst[4]  = (conv2Number($F('step_2_6_5_Y_R_6_Y_N')) / conv2Number($F('step_2_6_6_R_X_0_R_N'))) / 12;
	fgKst[5]  = conv2Number($F('step_2_7_sum12'));
	fgKst[6]  = conv2Number($F('step_2_8_sum12'));
	fgKst[7]  = conv2Number($F('step_2_9_sum12'));
	fgKst[8]  = conv2Number($F('step_2_10_sum12')) / 2;
	fgKst[9]  = conv2Number($F('step_4_1_sum12'));
	vgKst[0]  = conv2Number($F('step_2_2_sum12')) * 0.6;
	vgKst[1]  = conv2Number($F('step_2_4_3_M_X_0_X_J'));
	vgKst[2]  = conv2Number($F('step_2_4_4_M_X_0_X_N'));
	vgKst[3]  = conv2Number($F('step_2_4_5_M_X_0_X_J'));
	vgKst[4]  = conv2Number($F('step_2_4_6_M_X_0_X_N'));
	vgKst[5]  = conv2Number($F('step_2_5_sum12'));
	vgKst[6]  = conv2Number($F('step_2_6_sum12')) - ((conv2Number($F('step_2_6_5_Y_R_6_Y_N')) / conv2Number($F('step_2_6_6_R_X_0_R_N'))) / 12);
	vgKst[7]  = conv2Number($F('step_2_10_sum12')) / 2;
	vgKst[9]  = conv2Number($F('step_6_finish_sum01')) / 12;
	fpKst     = new Array();
	vpKst 	  = new Array();
	fpKst[0]  = conv2Number($F('step_3_1_sum12'));
	fpKst[1]  = conv2Number($F('step_3_2_sum12')) * 0.4;
	fpKst[2]  = conv2Number($F('step_3_3_sum12')) * 0.6;
	vpKst[0]  = conv2Number($F('step_3_2_sum12')) * 0.6;
	vpKst[2]  = conv2Number($F('step_3_3_sum12')) * 0.4;
	vpKst[3]  = conv2Number($F('step_6_finish_sum12')) / 12;
	fixGK = 0; varGK = 0;
	fixPK = 0; varPK = 0;
	for (i = 0; i < fgKst.length; i++) {
		if (!isNaN(fgKst[i])) {fixGK += fgKst[i];}
	}
	for (i = 0; i < vgKst.length; i++) {
		if (!isNaN(vgKst[i])) {varGK += vgKst[i];}
	}
	for (i = 0; i < fpKst.length; i++) {
		if (!isNaN(fpKst[i])) {fixPK += fpKst[i];}
	}
	for (i = 0; i < vpKst.length; i++) {
		if (!isNaN(vpKst[i])) {varPK += vpKst[i];}
	}
	fixGK  = Math.round(fixGK, 0);
	varGK  = Math.round(varGK, 0);
	fixPK  = Math.round(fixPK, 0);
	varPK  = Math.round(varPK, 0);
	fixKst = fixGK + fixPK;
	varKst = varGK + varPK;
	Kst    = fixKst + varKst;
	relFix2Var = (varKst / fixKst);
	strStunden += '<h3 class="details">fixe und variable Kosten</h3>' +
				  '<p>Du hast %curr%&nbsp;' + formatNumber(fixKst, 2, true) + ' fixe Kosten angegeben. Diesen Betrag musst Du jeden Monat zahlen, egal ob Du hundert ' + 
				  'Stunden oder keine einzige verkaufst. Als variable Kosten wurden %curr%&nbsp;' + formatNumber(varKst, 2, true) + ' pro Monat ermittelt. Dies ist zwar nicht ' +
				  'ganz exakt, denn manche der privaten Kosten sind eigentlich fix. Aber wir haben sie trotzdem, den variablen Kosten zugeschlagen, da Du sie zu einem gewissen ' +
				  'Prozentsatz einsparen kannst, falls das Gesch&auml;ft nicht so gut l&auml;uft. Die variablen Kosten ver&auml;ndern sich, je nach dem wieviele Stunden Du ' +
				  'verkaufst. Je mehr Auftr&auml;ge Du hast, desto h&ouml;her werden diese Kosten.</p><p>Das Verh&auml;ltnis der fixen zu den variablen Kosten ist: 1 zu ' + 
				  formatNumber(relFix2Var, 2, true) + ". Damit ist gemeint, dass Du f&uuml;r jeden %currLong% den Du fix ausgibst auch noch %curr%&nbsp;"+ 
				  formatNumber(relFix2Var, 2, true) + ' an variablen Ausgaben hast.</p><p>';
	if (relFix2Var < 0.5) {
		strStunden += "Das Verh&auml;tnis ist zu ideal. Du hast sehr niedrige Fixkosten. Kann es sein, dass Du bei manchen variablen Werten, wie Telefon oder B&uuml;romaterial zu " +
					  "hohe Werte eingetragen hast? Oder Du hast wirklich so g&uuml;nstige Mieten, dass sich dieses Verh&auml;ltnis ergibt. Es kann aber auch sein, dass Du die " +
					  "Ausstattungspreise nicht richtig angegeben oder ignoriert hast.";
	}
	if (relFix2Var >= 0.5 && relFix2Var < 1) {
		strStunden += "Das Verh&auml;tnis ist ideal. Du hast etwa gleichviel fixe und variable Kosten.";
	}
	if (relFix2Var >= 1 && relFix2Var < 1.5) {
		strStunden += "Das Verh&auml;tnis ist nicht ganz ideal. Versuche Deine Fixkosten zu senken. Denn wenn diese zu hoch sind und die Auftr&auml;ge nicht wie gew&uuml;nscht " +
					  "hereinkommen, kannst Du Probleme mit der Liquidit&auml;t bekommen.";
	}
	if (relFix2Var >= 1.5) {
		strStunden += "Das Verh&auml;tnis ist schlecht. Versuche Deine Fixkosten um mindestens die H&auml;fte zu senken. Denn bei dieser H&ouml;he wirst Du bald Probleme mit der " +
					  "Liquidit&auml;t bekommen. Du kannst Deine Rechnungen dann nicht mehr laufend bezahlen.";
	}
	strStunden += '</p><p style="padding:30px 0px"><img src="http://chart.apis.google.com/chart?chs=520x200&chd=t:' + fixGK + ',' + varGK + ',' + varPK + ',' + fixPK +  
				  '&cht=p3&chl=fix Gesch&auml;ft (' + Math.round((fixGK / Kst * 100), 2) + '%)|var. Gesch&auml;ft (' + Math.round((varGK / Kst * 100), 2) + '%)|var. Privat (' + 
				  Math.round((varPK / Kst * 100), 2) + '%)|fix. Privat (' + Math.round((fixPK / Kst * 100), 2) + '%)&chf=bg,s,FFFFFF&chco=8A8D18,CAD247,263D42,53848F' +
				  '&chtt=Verteilung fixe/var. Kosten&chts=8A8D18,20" /></p>';
	// Buerokosten
	strStunden += "<h3 class='details'>Deine B&uuml;rokosten</h3><p>";
	anteil  = pBuero;
	minimal = Math.round(gKosten * 0.30, 0);
	maximal = Math.round(gKosten * 0.50, 0);
	if (gKstBuero == 0) {
		strStunden += "Du hast keine B&uuml;rokosten angegeben, Du arbeitestet also von zu Haus aus.";
	} else {
		if (anteil < 30) {
			strStunden += "Der Anteil der B&uuml;rokosten von " + formatNumber(anteil, 2, true) + "&nbsp;% der Gesch&auml;ftskosten ist f&uuml;r ein normales Unternehmen zu niedrig. " +
			"&Uuml;berpr&uuml;fe die B&uuml;rokosten im <a href='#step_2_1_anchor'>2.&nbsp;Schritt</a>. Du solltest die Kosten von %curr%&nbsp;" +
			formatNumber(gKstBuero, 2, true) +
			" auf mindestens %curr%&nbsp;" +
			formatNumber(minimal, 2, true) +
			" anheben. Falls Deine Miete aber so g&uuml;nstig ist, " +
			"k&ouml;nnten die restlichen Kosten zu hoch sein.";
		}
		if (anteil > 50) {
			strStunden += "Der Anteil der B&uuml;rokosten von " + formatNumber(anteil, 2, true) + "&nbsp;% des Gesch&auml;ftskosten ist f&uuml;r ein normales Unternehmen zu hoch. " +
			"&Uuml;berpr&uuml;fe die Kosten im <a href='#step_2_1_anchor'>2.&nbsp;Schritt</a>. Du solltest den Wert von %curr%&nbsp;" +
			formatNumber(gKstBuero, 2, true) +
			" auf maximal %curr%&nbsp;" +
			formatNumber(maximal, 2, true) +
			" senken. Falls Deine Miete wirklich so teuer ist, " +
			"&uuml;berlege, ob Du nicht g&uuml;nstigere R&auml;umlichkeiten findest, oder andere Kosten vielleicht zu gering angegeben wurden.";
		}
		if (anteil >= 30 && anteil <= 50) {
			strStunden += "Der Anteil der B&uuml;rokosten von " + formatNumber(anteil, 2, true) + "&nbsp;% des Gesch&auml;ftskosten liegt im normalen Bereich von 30 bis 50 Prozent.";
		}
	}
	// Privatkosten
	strStunden += '</p><h3 class="details">Deine privaten Kosten</h3><p>';
	privKosten  = Math.round((pKosten / 12), 0);
	wohnKst		= conv2Number($F('step_3_1_sum12'));
	lebKst		= conv2Number($F('step_3_2_sum12'));
	funKst		= conv2Number($F('step_3_3_sum12'));
	relWKst     = Math.round((wohnKst / privKosten * 100), 2);
	relLeb2Fun  = funKst / lebKst;
	strStunden += "Bei den privaten Kosten ergeben sich folgende Werte. F&uuml;r Deine Wohnung ben&ouml;tigst Du %curr%&nbsp;" + formatNumber(wohnKst, 2, true) + " pro Monat, dass " +
				  "sind " + formatNumber(relWKst, 2, true) +"&nbsp;% der privaten Kosten.<br />";
	if (relWKst < 20) {
		strStunden += "Du hast entweder eine sehr g&uuml;nstige Wohnung oder die restlichen privaten Kosten sind zu hoch.<br />";
	}
	if (relWKst >= 20 && relWKst < 50) {
		strStunden += "Die Kosten f&uuml;r das Wohnen liegen im normalen Bereich.<br />";
	}
	if (relWKst >= 50 && relWKst < 65) {
		strStunden += "Die Kosten f&uuml;r das Wohnen sind hoch. Entweder hast Du eine sehr teuere Wohnung oder die Kosten f&uuml;r das restliche Leben sind zu nieder.<br />";
	}
	if (relWKst >= 65) {
		strStunden += "Du musst ehr als zwei Drittel Deines Einkommens f&uuml;r das Wohnen ausgeben. Entweder hast Du eine sehr teuere Wohnung oder Du hast Die Kosten f&uuml;r " +
					  "das t&auml;glichen Leben nicht richtig angegeben.<br />";
	}
	strStunden += "Das Verh&auml;ltnis von lebensnotwendingen Kosten zu Kosten f&uuml;r den Komfort ist: 1 zu " + formatNumber(relLeb2Fun, 2, true) + ". <br />";
	if (relLeb2Fun < 0.5) {
		strStunden += "Dieser Wert ist zu niedrig. Entweder warst Du bei den beiden Kostenbereichen im <a href='#step3Anchor'>3.&nbsp;Schritt</a> nicht ganz ehrlich. Oder Du " +
					  "denkst zu wenige an Dein Leben neben der Arbeit und schr&auml;nkst Dich zu stark ein. Du musst auch Spass haben um gute Leistungen erbringen zu k&ouml;nnen.";
	}
	if (relLeb2Fun >= 0.5 && relLeb2Fun < 1.5) {
		strStunden += "Dieser Wert ist relativ normal. Wenn der Wert &uuml;ber eins liegt, solltest Du dich ein wenig einschr&auml;nken. Denn Du gibst ein wenig zuviel f&uuml;r " + 
					  "Unterhaltung aus.";
	}
	if (relLeb2Fun >= 1.5) {
		strStunden += "Dieser Wert ist zu hoch. Entweder hast Du bei den Lebenshaltungskosten etwas &uuml;bersehen oder Du gibst einfach zu viel f&uuml;r die Unterhaltung aus.";
	}
	strStunden += '</p><p style="padding:30px 0px"><img src="http://chart.apis.google.com/chart?chs=520x200&chd=t:' + wohnKst + ',' + lebKst + ',' + funKst +  
				  '&cht=p3&chl=Wohnen (' + Math.round((wohnKst / privKosten * 100), 2) + '%)|Lebenskosten (' + Math.round((lebKst / privKosten * 100), 2) + '%)|Komfort (' +
				   Math.round((funKst / privKosten * 100), 2) + '%)&chf=bg,s,FFFFFF&chco=8A8D18' + '&chtt=Aufteilung der privaten Kosten&chts=8A8D18,20" /></p>';
	// Werbung
	strStunden += '<h3 class="details">Der Anteil der Werbung</h3><p>';
	anteil  = (gKstWerbung / umsNetto2 * 100);
	minimal = Math.round(umsNetto2 * 0.025, 0);
	maximal = Math.round(umsNetto2 * 0.05, 0);
	if (anteil < 2.5) {
		strStunden += "Der Anteil der Werbung von " + formatNumber(anteil, 2, true) + "&nbsp;% des Gesamtumsatzes ist f&uuml;r ein normales Unternehmen zu gering. " +
					  "&Uuml;berpr&uuml;fe die Werbekosten im <a href='#step_2_6_anchor'>2.&nbsp;Schritt</a>. Du solltest die Werbekosten von %curr%&nbsp;" + 
					  formatNumber(gKstWerbung, 2, true) + " auf mindestens %curr%&nbsp;" + formatNumber(minimal, 2, true) + " anheben.";
	}
	if (anteil > 5) {
		strStunden += "Der Anteil der Werbung von " + formatNumber(anteil, 2, true) + "&nbsp;% des Gesamtumsatzes ist f&uuml;r ein normales Unternehmen zu hoch. " +
					  "&Uuml;berpr&uuml;fe die Werbekosten im <a href='#step_2_6_anchor'>2.&nbsp;Schritt</a>. Du solltest die Werbekosten von %curr%&nbsp;" + 
					  formatNumber(gKstWerbung, 2, true) + " auf maximal %curr%&nbsp;" + formatNumber(maximal, 2, true) + " senken.";
	}
	if (anteil >= 2.5 && anteil <= 5) {
		strStunden += "Der Anteil der Werbung von " + formatNumber(anteil, 2, true) + "&nbsp;% des Gesamtumsatzes liegt im normalen Bereich von zweieinhalb bis f&uuml;nf Prozent.";
	}
	// Abschreibungsquote
	strStunden += "</p><h3 class='details'>Die Abnutzung der Ausstattung</h3><p>";
	AfA = new Array();
	AfA[0]  = (conv2Number($F('step_2_3_1_Y_R_2_Y_N')) / conv2Number($F('step_2_3_2_R_X_0_R_N')));
	AfA[1]  = (conv2Number($F('step_2_3_3_Y_R_4_Y_N')) / conv2Number($F('step_2_3_4_R_X_0_R_N')));
	AfA[2]  = (conv2Number($F('step_2_3_5_Y_R_6_Y_N')) / conv2Number($F('step_2_3_6_R_X_0_R_N')));
	AfA[3]  = (conv2Number($F('step_2_3_7_Y_R_8_Y_N')) / conv2Number($F('step_2_3_8_R_X_0_R_N')));
	AfA[4]  = (conv2Number($F('step_2_3_9_Y_R_10_Y_N')) / conv2Number($F('step_2_3_10_R_X_0_R_N')));
	AfA[5]  = (conv2Number($F('step_2_3_11_Y_R_12_Y_N')) / conv2Number($F('step_2_3_12_R_X_0_R_N')));
	AfA[6]  = (conv2Number($F('step_2_3_13_Y_R_14_Y_N')) / conv2Number($F('step_2_3_14_R_X_0_R_N')));
	AfA[7]  = (conv2Number($F('step_2_3_15_Y_R_16_Y_N')) / conv2Number($F('step_2_3_16_R_X_0_R_N')));
	AfA[8]  = (conv2Number($F('step_2_3_17_Y_R_18_Y_N')) / conv2Number($F('step_2_3_18_R_X_0_R_N')));
	AfA[9]  = (conv2Number($F('step_2_3_19_Y_R_20_Y_N')) / conv2Number($F('step_2_3_20_R_X_0_R_N')));
	AfA[10] = (conv2Number($F('step_2_4_1_Y_R_2_Y_J')) / conv2Number($F('step_2_4_2_R_X_0_R_J')));
	AfASumme= 0;
	for (i = 0; i < 11; i++) {
		if (!isNaN(AfA[i])){
			AfASumme += AfA[i];
		}
	}
	AfASumme = Math.floor(AfASumme) + 1;
	AfAStd = AfASumme / prodStd;
	AfAPzt = AfASumme / umsNetto2;
	strStunden += "Vom Umsatz in H&ouml;he von %curr%&nbsp;" + formatNumber(umsNetto2, 2, true) + " musst Du jedes Jahr %curr%&nbsp;" + formatNumber(AfASumme, 2, true) + 
				  " (Das sind " + formatNumber(AfAPzt, 2, true) + "&nbsp;% vom Umsatz.) sparen, damit Du die Anlageg&uuml;ter wieder anschaffen kannst.<br/>" +
				  "Du kannst auch von jedem Stundenumsatz (%curr%&nbsp;" + formatNumber(stdPreis, 2, true) + "), genau %curr%&nbsp;" + formatNumber(AfAStd, 2, true) + 
				  " auf die Seite legen um den Betrag anzusparen.<br/>Monatlich musst Du also %curr%&nbsp;" + formatNumber((Math.floor((AfASumme / 12)) + 1), 2, true) + 
				  " auf die Seite legen.</p>";
	// Fremdfinanzierung
	fKapital  = conv2Number($F('step_2_3_1_Y_R_2_Y_N'))   + conv2Number($F('step_2_3_3_Y_R_4_Y_N'))   + conv2Number($F('step_2_3_5_Y_R_6_Y_N')) + 
				conv2Number($F('step_2_3_7_Y_R_8_Y_N'))   + conv2Number($F('step_2_3_9_Y_R_10_Y_N'))  + conv2Number($F('step_2_3_11_Y_R_12_Y_N')) + 
				conv2Number($F('step_2_3_13_Y_R_14_Y_N')) + conv2Number($F('step_2_3_15_Y_R_16_Y_N')) + conv2Number($F('step_2_3_17_Y_R_18_Y_N')) + 
				conv2Number($F('step_2_3_19_Y_R_20_Y_N')) + conv2Number($F('step_2_4_1_Y_R_2_Y_J'));
	fkZinsen  = 9;
	fkJahre1  = 3;
	fkKosten1 = Math.floor(((fKapital * (fkZinsen / 100)) * fkJahre1) / 2) + 1;
	mehrPreis1= (fkKosten1 / 12) / prodStd;
	fkKosten1*= fkJahre1;
	fkJahre2  = 5;
	fkKosten2 = Math.floor(((fKapital * (fkZinsen / 100)) * fkJahre2) / 2) + 1;
	mehrPreis2= (fkKosten2 / 12) / prodStd; 
	fkKosten2*= fkJahre2;
	jZinsen   = Math.floor(fKapital * (fkZinsen /100)) + 1;
	strStunden += "<h3 class='details'>Das Fremdkapital</h3><p>Bis jetzt sind wir davon ausgegangen, dass Du alles aus eigener Kraft finanzieren " +
				  "kannst. Wie sieht es aber aus, wenn Du gar nichts hast und die Anlageg&uuml;ter mit einem Kredit in H&ouml;he von %curr%&nbsp;" + formatNumber(fKapital, 2, true) + 
				  " finanzieren musst?</p><p>Du musst einen Kredit in H&ouml;he von %curr%&nbsp;" + formatNumber(fKapital, 2, true) + " aufnehmen. Die Laufzeit kann " + 
				  arrZahlen[fkJahre1] + " oder " + arrZahlen[fkJahre2] + " Jahre betragen. Der Zinssatz pro Jahr wird etwa " + fkZinsen + "&nbsp;% betragen. " +
				  "Dadurch ergeben sich Zinsen von %curr%&nbsp;" + 
				  formatNumber(jZinsen, 2, true) + " pro Jahr, welche Du zus&auml;tzlich verdienen musst. Im ersten Fall ergeben sich &uuml;ber die " +
				  "Laufzeit des Kredits Gesamtkosten von %curr%&nbsp;" + formatNumber(fkKosten1, 2, true) + " und im zweiten Fall von %curr%&nbsp;" + 
				  formatNumber(fkKosten2, 2, true) + ". Daher musst Du deinen Stundenpreis beim kurzfristigen Kredit um %curr%&nbsp;" + 
				  formatNumber(mehrPreis1, 2, true) + " auf %curr%&nbsp;" + formatNumber((stdPreis + mehrPreis1), 2, true) + " und beim mittelfristigen Kredit um %curr%&nbsp;" + 
				  formatNumber(mehrPreis2, 2, true) + " auf %curr%&nbsp;" + formatNumber((stdPreis + mehrPreis2), 2, true) + " erh&ouml;hen.</p>";
	new Ajax.Request('bin/ajax.php?m=1&p1='+$F('statStaat'), {
	  onSuccess: function(t) {
	  	selID = "statBundesland";
		wert  = t.responseText.split("^");
		try {
			strStunden = strStunden.replace(/%curr%/g, wert[0]);
			strStunden = strStunden.replace(/%currLong%/g, wert[1]);
			$('step_7_3_detail').innerHTML = strStunden;
			$('infoCalc').innerHTML = "Die Analyse wurde fertiggestellt.";
		} catch(e) {}
	  }
	});
	
 }

 //Statistik holen
 function getStatistik(type) {
	param = "m=8" 
 	switch (type) {
		case 0: //Staat
			param += "&p1=" + $F('statStaat');
			break;
		case 1: //Region
			param += "&p1=" + $F('statStaat') + "&p2=" + $F('statBundesland');
			break;
		case 2: //Branche
			param += "&p1=" + $F('statStaat') + "&p2=" + $F('statBundesland') + "&p3=" + $F('statBranche');
			break;
	}
	$('infoStatistik').innerHTML = "<p><img src='../images/loader.gif'>&nbsp;Bitte warte einen Moment, die statistischen Daten werden abgerufen...</p>";
	new Ajax.Request('bin/ajax.php?' + param, {
	  onSuccess: function(t) {
	  	msg    = "";
		werte  = t.responseText.split("^");
		setVal = 1;
		if (werte[0] <= 0) {
			msg = "F&uuml;r Deine Auswahl wurden noch keine statistischen Werte gefunden!";
			setVal = 0;
		} else {
			if (werte[1] == 1) {
				msg = "F&uuml;r Deine Auswahl wurde ein statistischer Wert gefunden!";
				setVal = 1;
			} else if (werte[1] == 0 ) {
				msg = "F&uuml;r Deine Auswahl wurden noch keine statistischen Werte gefunden!";
				setVal = 0;
				if (werte[5] == "S") {
					zahl = arrZahlen[werte[2]];
					if (zahl == undefined) { zahl = werte[2]; }
					if (werte[2] == 1) {
						msg += " Aber f&uuml;r den Staat wurde ein Wert gefunden.";
						setVal = 1;
					} else if (werte[2] <= 0) {
						msg += " Auch f&uuml;r den Staat wurde kein Wert gefunden.";
						setVal = 0;
					} else {
						msg += " Aber f&uuml;r den Staat wurden " + zahl + " statistische Werte gefunden!";
						setVal = 1;
					}
				}
				if (werte[5] == "R") {
					zahl = arrZahlen[werte[3]];
					if (zahl == undefined) { zahl = werte[3]; }
					if (werte[3] == 1) {
						msg += " Aber f&uuml;r die Region wurde ein Wert gefunden.";
						setVal = 1;
						} else if (werte[3] <= 0) {
							msg += " Auch f&uuml;r die Region wurde kein Wert gefunden.";
							setVal = 0;
						zahl = arrZahlen[werte[2]];
						if (zahl == undefined) { zahl = werte[2]; }
						if (werte[2] == 1) {
							msg += " Aber f&uuml;r den Staat wurde ein Wert gefunden.";
							setVal = 1;
						} else if (werte[2] <= 0) {
							msg += " Und f&uuml;r den Staat wurde auch kein Wert gefunden.";
							setVal = 0;
						} else {
							msg += " Aber f&uuml;r den Staat wurden " + zahl + " statistische Werte gefunden!";
							setVal = 1;
						}						
					} else {
						msg += " Aber f&uuml;r die Region wurden " + zahl + " statistische Werte gefunden!";
						setVal = 1;
					}
				}
			} else {
				zahl = arrZahlen[werte[1]];
				if (zahl == undefined) { zahl = werte[1]; }
				msg  = "F&uuml;r Deine Auswahl wurden " + zahl + " statistische Werte gefunden!";		
				setVal = 1;		
			}
		}
		if (setVal == 1) {
			for (i = 6; i < werte.length; i++) {
				valPart = werte[i].split("=");
				try {
					$(valPart[0]).value = formatNumber(valPart[1], 2, true);
				} catch (e) {}
			}
			$('step_2_finish_sum12').value = "0,00";
			$('step_2_finish_sum01').value = "0,00";
			$('step_3_finish_sum12').value = "0,00";
			$('step_3_finish_sum01').value = "0,00";
			$('step_5_finish_sum12').value = "0,00";
			$('step_5_finish_sum01').value = "0,00";
			$('step_5_finish_sum00').value = "0,00";
			$('step_6_finish_sum12').value = "0,00";
			$('step_6_finish_sum01').value = "0,00";
			msg += "<br/>Die Durchschnittswerte wurden jetzt eingetragen. Bitte &uuml;berpr&uuml;fe sie und berechne danach die einzelnen Schritte bis zum Endresultat."
		}
		$('infoStatistik').innerHTML = "<p>" + msg + "</p>";
	  }
	});
 } 
 
 //Ebene ein-/ausblenden
 function showHideExplain(id) {
 	id += "";
	if (id=="") {return;}
	newID    = id.split("_");
	newID[0] = newID[0] + "Hide";
	if (!$(newID[0]).visible()) {
		Element.addClassName(id, "stepHide");
		Element.removeClassName(id, "stepShow");
	} else {
		Element.addClassName(id, "stepShow");
		Element.removeClassName(id, "stepHide");
	}
	Effect.toggle(newID[0], 'appear');
	return false;
 } //end showHideExplain

 //Statistik (Speichern) ein-/ausschalten
 function changeStatusStatistik(statWert) {
 	if (parseInt(statWert) == 1) {
		img 	 = "";
		txt 	 = "Du stellst Deine Daten zur Verf&uuml;gung";
		saveStat = true;
	} else {
		img 	 = "_off";
		txt 	 = "Du stellst Deine Daten NICHT zur Verf&uuml;gung";
		saveStat = false;
	}
		$('statSave').src   = "images/lightbulb"+img+".png";
		$('statSave').alt   = txt;
		$('statSave').title = txt;
 }

 //Zahl in US-Format
 function conv2Number(strWert){
 	if (strWert == "") { strWert = "0"; }
	var posPnt = strWert.indexOf(".", 0);
	var posCol = strWert.indexOf(",", 0);
	strWert = strWert.replace(/ /, '');
	if (posCol < 0) {
		posCol = strWert.length;
	}
	if (posCol < posPnt) {
		strWert = strWert.replace(/,/, '');
		return parseFloat(strWert);
	}
	while ((0 <= posPnt) && (posPnt < posCol)) {
		strWert = strWert.substring(0, posPnt) + strWert.substring(posPnt + 1, strWert.length);
		posPnt = strWert.indexOf(".", 0);
		posCol--;
	}
	posCol = strWert.indexOf(",", 0);
	if (posCol >= 0) {
		strWert = strWert.substring(0, posCol) + "." + strWert.substring(posCol + 1, strWert.length);
	}
	if (isNaN(strWert)) { strWert = 0;}
	return parseFloat(strWert);
 }
 
 //Zahl formatieren
 function formatNumber(zahl, k, fix){
	if (!k) 
		k = 0;
	var neu = '';
	var f = Math.pow(10, k);
	zahl = '' + parseInt(zahl * f + (0.5 * (zahl > 0 ? 1 : -1))) / f;
	var idx = zahl.indexOf('.');
	if (fix) {
		zahl += (idx == -1 ? '.' : '') +
		f.toString().substring(1);
	}
	idx = zahl.indexOf('.');
	if (idx == -1) 
		idx = zahl.length;
	else 
		neu = ',' + zahl.substr(idx + 1, k);
	while (idx > 0) {
		if (idx - 3 > 0) 
			neu = '.' + zahl.substring(idx - 3, idx) + neu;
		else 	
			neu = zahl.substring(0, idx) + neu;
		idx -= 3;
	}
	return neu;
}

//Formate entfernen
function clearField(fldID) {
	try {
		wert = conv2Number($F(fldID));
		if (isNaN(wert) || wert == 0) {
			wert = 0;
			$(fldID).setValue('0,00');
		}
	} catch(e) {
		try {
			wert = conv2Number($(fldID).innerHTML);
			if (isNaN(wert) || wert == 0) {
				wert = 0;
				$(fldID).innerHTML ='0,00';
			}
		} catch(e) {}
	}
	return wert;
}

 //***************************
 //* Prototype Erweiterungen *
 //***************************

 //Formularfeld setzen
 Form.Element.setValue = function(element,newValue) {
    element_id = element;
    element = $(element);
    if (!element){element = document.getElementsByName(element_id)[0];}
    if (!element){return false;}
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.SetSerializers[method](element,newValue);
}
 
