// ---------------------------------------------------------
// globale MERKVARIABLEN

// Arrays mit allen ausf&uuml;llbaren Formularfeldern
// (untergeordnete Routinen verlassen sich auf die Korrektheit dieser Angaben,
// automatische Ermittlung mit getElementByID/DOM wg. Differenzierung Integer und
// Currency, sowie vor allem Netscape4-Kompatibilität nicht möglich)
ganzzahlen_felder = new Array("kinder6","kinder13","kinder15","kinder17","kinder24","kschwanger","bkinder6","bkinder13","bkinder15","bkinder17","bkinder24");
waehrungs_felder  = new Array("aalg","palg","kaltmiete","heizkosten","wohngeld","aeinbr","aeinne","peinbr","peinne","renten","unterhalt","kindergeld","sonstein");
datums_felder     = new Array("aalgdatum","palgdatum");
radio_felder      = new Array("palter");
checkbox_felder   = new Array("p","heizkostenwarmwasser","aschwanger","pschwanger","abehindert","pbehindert");
menue_felder		= new Array("bundesl","akrank","pkrank");
eingabe_felder    = ganzzahlen_felder.concat(waehrungs_felder, datums_felder, radio_felder, checkbox_felder, menue_felder); // alle

// Formularvariablen generieren und initialisieren

for (var i=0; i<ganzzahlen_felder.length; i++) eval("var "+ganzzahlen_felder[i]+"=0");
for (var i=0; i<waehrungs_felder.length; i++) eval("var "+waehrungs_felder[i]+"=0.00");
for (var i=0; i<datums_felder.length; i++) eval("var "+datums_felder[i]+"=''");
for (var i=0; i<radio_felder.length; i++) eval("var "+radio_felder[i]+"=0"); // 0 steht für keine Auswahl
for (var i=0; i<checkbox_felder.length; i++) eval("var "+checkbox_felder[i]+"=false");
for (var i=0; i<menue_felder.length; i++) eval("var "+menue_felder[i]+"='xxxx'");

// ---------------------------------------------------------
// PROGRAMM-FUNKTIONEN
//

function ersetzeKomma(wert) {
	// Ersetzt Komma durch Dezimalpunkt
	var ergebnis=""+wert;
	var pos=ergebnis.indexOf(",");
	if (pos >= 0) {
		ergebnis=ergebnis.substring(0,pos)+"."+ergebnis.substring(pos+1);
	}
	ergebnis=parseFloat(ergebnis);
	return ergebnis;
}

function ersetzePunkt(wert) {
	// Ersetzt Dezimalpunkt durch Komma und schneidet bei Bedarf die hinteren Stellen ab
	var ergebnis=""+wert;
	var pos=ergebnis.indexOf(".");
	if (pos >= 0) {
		ergebnis=ergebnis.substring(0,pos)+","+(ergebnis+"00").substr(pos+1,2);
	} else if (parseFloat(ergebnis)==0)
	ergebnis="0";
	else
	ergebnis=parseInt(ergebnis)+",00";
	return ergebnis;
}

function rundeEuro(a) {
	// rundet den Betrag auf 2 Stellen nach dem Komma
	z1=parseFloat(a)*100;
	z1=Math.round(z1);
	z2=parseInt(z1)/100;

	return z2;
}

function schreibeEuro(betrag) {
	// gibt einen Eurobetrag mit Komma und zwei Stellen zurück
	// für die Ausgabe in Feldern
	return ersetzePunkt(rundeEuro(betrag))+" &euro;";
}

function pruefeFeldWaehrung(Name) {
	// überschreibt ein Euro-Feld mit seinem schönformatierten Inhalt
	if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)")))
		eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(ersetzeKomma(document.berechnung."+Name+".value)))")
	else
		eval("document.berechnung."+Name+".value=0");
}

function pruefeFeldNumerisch(Name) {
	// überschreibt ein numerisches Feld mit seinem errechneten Inhalt
	if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)"))) {
		var val=parseInt(eval("ersetzeKomma(document.berechnung."+Name+".value)")); // Direkte Zuweisung macht Fehler in Mozilla - Bug?
		eval("document.berechnung."+Name+".value=val")
	} else
	eval("document.berechnung."+Name+".value=0");
}

function pruefeFeldDatum(Name, quiet) {
	// prüft ein Datum und ersetzt den Inhalt mit dem schönformatierten Inhalt
	// im Fehlerfall wird das Feld rot eingefärbt und die Funktion gibt false zurück
	var jetzt=new Date();
	var aktj=jetzt.getYear();
	if (aktj<2000) aktj=aktj+1900; // Y2K-Fehler umgehen
	var fehler="Das Datum ist nicht richtig eingegeben worden oder macht keinen Sinn.\nBitte geben Sie das Datum im Format \"tt.mm.jj\" oder \"tt.mm.\" an (z.B. 1.7."+aktj+" oder 1.7.).";
	var feld=eval("document.berechnung."+Name);
	var datum=feld.value;

	// Prüfen
	if (datum=="") return true; // leere Eingabe
	if (datum.indexOf(".")==-1) { // 1. Punkt fehlt
		Fehler();
		return false;
	}
	var t=parseFloat(datum.substring(0,datum.indexOf("."))); // Tag
	datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); // Rest isolieren
	if (datum.indexOf(".")==-1) { // 2. Punkt fehlt
		Fehler();
		return false;
	}
	var m=parseFloat(datum.substring(0,datum.indexOf("."))); // Monat
	datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); // Rest isolieren
	if (datum=="") datum=aktj;
	var j=parseFloat(datum); // Jahr
	if (j>=0 && j<50) j=j+parseInt(aktj/100)*100; // Datum 0-49 zweistellig eingegeben (2000-2049)
	if (j>=50 && j<100) j=j+parseInt(aktj/100)*100-100; // Datum 50-99 zweistellig eingegeben (1950-1999)
	if (isNaN(t) || isNaN(m) || isNaN(j) || t<=0 || m<=0 || j<=1950 || m>12 || j>aktj+1) { // untere oder obere Grenze verletzt
		Fehler();
		return false;
	}
	var tgrenze=31; // Obergrenze für den Tag bestimmen
	if (m==4 || m==6 || m==9 || m==11) tgrenze=30;
	if (m==2) { // Schaltjahr
		tgrenze=28;
		if (j%4==0) tgrenze++;
		if (j%100==0) tgrenze--;
		if (j%400==0) tgrenze++;
	}
	if (t>tgrenze) { // Obergrenze Tag verletzt
		Fehler();
		return false;
	}

	// Nullen bei den Einzelwerten einfügen
	if ((""+t).length==1) t="0"+t;
	if ((""+m).length==1) m="0"+m;

	// Datum neu zusammenbauen und ins Feld schreiben
	feld.value=t+"."+m+"."+j;
	document.getElementById(Name).className="";
	return true;

	function Fehler() {
		// Hilfsfunktion für prüfeFeldDatum
		//feld.value=""; // Inhalt nicht löschen - Feld muss vor Berechnung erneut geprüft werden
		if (!quiet) alert (fehler);
		if (document.getElementById(Name)) document.getElementById(Name).className="error"; // nur 6er Browser, Datumsfelder brauchen ID
	}

}

function schreibeFeld(Name,wert) {
	// schreibt Wert in das Inputfeld
	eval("document.berechnung."+Name+".value=schreibeEuro(wert)");
}

function schreibeFeldNumerisch(Name,wert) {
	// schreibt numerischen Wert in das Inputfeld
	// für sichtbare Inputfelder mit Ganzzahlenangabe
	eval("document.berechnung."+Name+".value=parseInt(wert)");
}

function schreibeFeldOhneEuro(Name,wert) {
	// schreibt Euro-Wert ohne Währungssymbol in das Inputfeld
	// für sichtbare Inputfelder mit Eurowerten
	eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(wert))");
}

function leseFeld(Name) {
	// liest das Formularfeld mit dem übergebenen Namen aus und zwingt das Ergebnis nach Float
	return parseFloat(eval("ersetzeKomma(document.berechnung."+Name+".value)"));
}

function leseDatum(Name) {
	// prüft und liest das Datums-Formularfeld im sicher gültigen Format tt.mm.jjjj (oder leer) aus
	if (pruefeFeldDatum(Name,true)) return eval("document.berechnung."+Name+".value");
	else return "";
}

function leseRadiobutton(feldname){
	// wertet eine Radiobutton-Gruppe aus und liefert den Wert des angeklickten Elements
	var wert="";
	var radiolen=eval("document.berechnung."+feldname+".length");
	for (var element=0; element<radiolen; element++) {
		if (eval("document.berechnung."+feldname+"["+element+"].checked")) wert=eval("document.berechnung."+feldname+"["+element+"].value")
	}
	return wert;
}

function leseMenue(feldname) {
	// liest das Formularfeld Bundesland in eine Variable ein
	wert=eval("document.berechnung."+feldname+".value");
	return wert;
}


function isInArray(wert, feld) {
	// sucht einen Wert im Array und liefert den entsprechenden Wahrheitswert zurück
	var erfolg=false;
	for (var i in feld) {
		if (feld[i]==wert) {
			erfolg=true;
			break;
		}
	}
	return erfolg;
}

function holeFeldInVariable(feldname) {
	// holt den Wert des Formularfeldes in die gleichnamige Variable

	if (isInArray(feldname, radio_felder)) eval(feldname+"=leseRadiobutton('"+feldname+"')");
	else if (isInArray(feldname, checkbox_felder)) eval(feldname+"=document.berechnung."+feldname+".checked");
	else if (isInArray(feldname, datums_felder)) eval(feldname+"=leseDatum('"+feldname+"')");
	else if (isInArray(feldname, menue_felder)) eval(feldname+"=leseMenue('"+feldname+"')");
	else eval(feldname+"=leseFeld('"+feldname+"')");
}

function pruefeFeld(feldname) {
	// prüft das angegebene Feld auf Plausibilität und ändert es bei Bedarf
	if (isInArray(feldname, datums_felder)) return pruefeFeldDatum(feldname);
	else if (isInArray(feldname, ganzzahlen_felder)) return pruefeFeldNumerisch(feldname);
	else if (isInArray(feldname, waehrungs_felder)) return pruefeFeldWaehrung(feldname);
	else return true; // Radiobuttons und Checkboxen: immer ok.
}

function faerbeFehlerfeld(Name) {
	// Färbt das übergebene Feld rot ein
	if (document.getElementById(Name)) { // nur 6er Browser, Felder brauchen ID!
		document.getElementById(Name).className="error";
	}
}

function entfaerbeFehlerfeld(Name) {
	// Färbt das übergebene Feld wieder normal
	if (document.getElementById(Name)) { // nur 6er Browser, Felder brauchen ID!
		document.getElementById(Name).className="";
	}
}

function setzeFocus(Name) {
	// setze den Focus auf das übergebene Feld
	if (Name=="palter") Name="palter[0]"; // Sonderfall!!!
	if (Name) if (!eval("document.berechnung."+Name+".disabled")) eval("document.berechnung."+Name+".focus()");
}

function waehleFeld (Feld) {
	// Text markieren
	if (Feld.select)  Feld.select();
}

function vorpruefung() {
	// Wird einmal am Anfang aufgerufen. Initialisierungsaufgaben.

	// Partnerschalter
	p=document.berechnung.p.checked;
	aktivierePartner(p);

	// Prüfung aller wertgebundenen Formularfelder
	for (var i in ganzzahlen_felder) pruefeFeldNumerisch(ganzzahlen_felder[i]);
	for (i in waehrungs_felder) pruefeFeldWaehrung(waehrungs_felder[i]);
	for (i in datums_felder) pruefeFeldDatum(datums_felder[i]);

	// Mozilla löscht bei einem Reload die Felder nicht, daher alle Werte ziehen
	for (var i in eingabe_felder) holeFeldInVariable(eingabe_felder[i]);
}

// Berechnungen

function pruefeFormular(changed) {
	// prüft das Formular. Sofort erkennbare Widersprüche werden dem
	// Nutzer per PopUp-Fenster mitgeteilt (nur Datum), logische
	// Fehler werden vor Absendung des Formulars geprüft.

	// Prüfung der Änderung/Eingabe im entsprechenden Feld
	pruefeFeld(changed);

	// Ermittlung des geänderten Formularwertes und übernahme in die korrespondierende Variable
	if (changed) holeFeldInVariable(changed);
	//for (var i in eingabe_felder) holeFeldInVariable(eingabe_felder[i]);

	// Sonderfall Partnerstatus
	if (changed=="p") aktivierePartner(p);

	// Plausibilitätsprüfungen vor der Absendung
	if (changed=="submit") {
		for (i in eingabe_felder) entfaerbeFehlerfeld(eingabe_felder[i]);
		var text="";

		// 1.1.1
		if (bundesl=="xxxx") {
			text+="<li>Wählen Sie das Bundesland in dem Sie wohnen aus.<br />";
			faerbeFehlerfeld("bundesl");
		}
		// 1.1
		if (aalg&&!aalgdatum) {
			text+="<li>Geben Sie das Datum an, bis zu dem Sie Arbeitslosengeld bezogen haben/beziehen.<br />";
			faerbeFehlerfeld("aalgdatum");
		}
		// 1.2
		if (aalgdatum&&!aalg) {
			text+="<li>Geben Sie die Höhe des Arbeitslosengelds ein, das Sie bezogen haben/beziehen.<br />";
			faerbeFehlerfeld("aalg");
		}
		// 2.2
		if (p&&palter==0) {
			text+="<li>Geben Sie das Alter Ihres/r Partners/in an.<br />";
			faerbeFehlerfeld("palter");
		}
		// 2.3
		if (p&&palg&&!palgdatum) {
			text+="<li>Geben Sie das Datum an, bis zu dem Ihr/e Partner/in Arbeitslosengeld bezogen hat/bezieht.<br />";
			faerbeFehlerfeld("palgdatum");
		}
		// 2.4
		if (p&&palgdatum&&!palg) {
			text+="<li>Geben Sie die Höhe des Arbeitslosengelds ein, das Ihr/e Partner/in bezogen hat/bezieht.<br />";
			faerbeFehlerfeld("palg");
		}
		// 3.1
		if (bkinder6>kinder6) {
			text+="<li>Die Anzahl der Kinder 6 Jahre und jünger ist kleiner als die Anzahl der Behinderten Kinder.<br />";
			faerbeFehlerfeld("bkinder6");
			faerbeFehlerfeld("kinder6");
		}
		// 3.2
		if (bkinder13>kinder13) {
			text+="<li>Die Anzahl der Kinder 7 - 13 ist kleiner als die Anzahl der behinderten Kinder.<br />";
			faerbeFehlerfeld("bkinder13");
			faerbeFehlerfeld("kinder13");
		}
		// 3.3
		if (bkinder15>kinder15) {
			text+="<li>Die Anzahl der Kinder 14 - 16 ist kleiner als die Anzahl der behinderten Kinder.<br />";
			faerbeFehlerfeld("bkinder15");
			faerbeFehlerfeld("kinder15");
		}
		// 3.4
		if (bkinder17>kinder17) {
			text+="<li>Die Anzahl der Kinder 16 - 18 ist kleiner als die Anzahl der behinderten Kinder.<br />";
			faerbeFehlerfeld("bkinder17");
			faerbeFehlerfeld("kinder17");
		}
		// 3.5
		if (bkinder24>kinder24) {
			text+="<li>Die Anzahl der Kinder 18 - 25 ist kleiner als die Anzahl der behinderten Kinder.<br />";
			faerbeFehlerfeld("bkinder24");
			faerbeFehlerfeld("kinder24");
		}

		// 4.2
		if (heizkostenwarmwasser&&!heizkosten) {
			text+="<li>Geben Sie die Höhe der Heizkosten ein, bei denen das Warmwasser inklusive ist.<br />";
			faerbeFehlerfeld("heizkosten");
		}
		// 5.1 + 5.2
		if  (!aeinbr&&aeinne) {
			text+="<li>Geben Sie Ihr Bruttoeinkommen an.<br />";
			faerbeFehlerfeld("aeinbr");
		}
		// 5.3 + 5.4
		if  (!peinbr&&peinne) {
			text+="<li>Geben Sie das Bruttoeinkommen Ihres/r Partners/in an.<br />";
			faerbeFehlerfeld("peinbr");
		}

		if (text) {
			text="<strong>Fehler: Bitte korrigieren Sie Ihre Angaben</strong><br /><ul class=\"error\">"+text+"</ul>";
			document.getElementById("errorblock").style.display = "block";
			document.getElementById("errorblock").innerHTML = text;
			window.location.hash = "#errorblock";
			return false;
		}
		else {
			document.getElementById("errorblock").style.display = "none";
			window.location.hash = "#pagewrap";
			return true;
		}
	}
	else {
		entfaerbeFehlerfeld(changed);
		if(changed=='kinder13') entfaerbeFehlerfeld('bkinder13');
		else if(changed=='kinder15') entfaerbeFehlerfeld('bkinder15');
		else if(changed=='kinder17') entfaerbeFehlerfeld('bkinder17');
		else if(changed=='kinder24') entfaerbeFehlerfeld('bkinder24');
		else if(changed=='bkinder13') entfaerbeFehlerfeld('kinder13');
		else if(changed=='bkinder15') entfaerbeFehlerfeld('kinder15');
		else if(changed=='bkinder17') entfaerbeFehlerfeld('kinder17');
		else if(changed=='bkinder24') entfaerbeFehlerfeld('kinder24');
	}

}

function aktivierePartner(status) {
	// Partnerbereich ein- oder ausblenden
	mode=(status==0);
	document.berechnung.palter[0].disabled=mode;
	document.berechnung.palter[1].disabled=mode;
	document.berechnung.palg.disabled=mode;
	document.berechnung.palgdatum.disabled=mode;
	document.berechnung.peinbr.disabled=mode;
	document.berechnung.peinne.disabled=mode;
	document.berechnung.pschwanger.disabled=mode;
	document.berechnung.pbehindert.disabled=mode;
	document.berechnung.pkrank.disabled=mode;
	if (mode) { // bei Bedarf Inhalte löschen
		document.berechnung.palter[0].checked=false;
		document.berechnung.palter[1].checked=false;
		palter=0;
		document.berechnung.palg.value="0";
		palg=0;
		document.berechnung.palgdatum.value="";
		palgdatum="";

		document.getElementById("palgdatum").className="";
		document.berechnung.peinbr.value="0";
		peinbr=0;
		document.berechnung.peinne.value="0";
		peinne=0;
		document.berechnung.pschwanger.checked=false;
		document.berechnung.pbehindert.checked=false;
		document.berechnung.pkrank.value="xxxx";
	}
}

// am anfang erstmal die partner-spezifischen felder deaktivieren
aktivierePartner(false);

// tooltip-bilder vorab laden
ttop = new Image();
ttop.src = '../img/tooltip/top.png';
tbottom = new Image();
tbottom.src = '../img/tooltip/bottom.png';
btop = new Image();
btop.src = '../img/tooltip/top_big.png';
bbottom = new Image();
bbottom.src = '../img/tooltip/bottom_big.png';

