// +-----------------------------------------------------------------------------------------------------+
// | rechner.js                                                                                          |
// +-----------------------------------------------------------------------------------------------------+
// | Copyright (c) 2009 steuerberaten.de                                                                 |
// +-----------------------------------------------------------------------------------------------------+
// | Datum: 19.01.2009                                                                                   |
// +-----------------------------------------------------------------------------------------------------+
// | Urheberrechtshinweis:                                                                               |
// | Diese Script ist urheberrechtlich geschützt. Einer Freigabe zur Publikation in anderen Medien oder  |
// | zu sonstiger Verwendung wird ausdrücklich widersprochen. Jede Zuwiderhandlung wird - unabhängig von |
// | Zweck, Person, Umfang, Einsatzgebiet - sofort und ohne weitere Warnung juristisch verfolgt.         |
// +-----------------------------------------------------------------------------------------------------+
// | Autor: Frank Moritz <moritz@imagineon.de>                                                           |
// +-----------------------------------------------------------------------------------------------------+

// ********** INFO TEXTE *********

function set_info(type) {

	var obj;
	var txt;

	if (document.all)
		obj = document.all.infotext;
	else
		obj = document.getElementById("infotext");

	switch (type) {
		case "ausgabe":
			txt = txtausgabe;
			break;

		case "rente":
			txt = "Geben Sie bitte den Bruttomonatsbetrag – nicht den niedrigeren Auszahlungsbetrag - Ihrer aktuellen Rente(n) aus der gesetzlichen Rentenversicherung (z.B. BfA – Rente, Witwen- oder Waisentente etc.) in einer Summe ein.";
			break;
		case "beginn_jahr":
			txt = "Bitte geben Sie das Jahr an, ab dem Sie die Rente bereits beziehen.";
			break;
		case "beginn_betrag":
			txt = "Um den Freibetrag berechnen zu können, müssen wir wissen, wie hoch die Brutto-Monatsrente in dem Jahr war, in dem Sie die Rente erstmals bekommen haben. Wenn dies bereits vor 2005 war, geben Sie bitte den Bruttomonatswert aus 2005 ein.";
			break;

		case "rente_empty":
			txt = "Bitte geben Sie die aktuelle Monatsrente ein.";
			break;

		case "rente_invalid_mann":
			txt = "Beim Mann: Bitte geben Sie die Monatsrente in ganzen EUR ein. (Maximal 3.200)";
			break;
		case "beginn_jahr_empty_mann":
			txt = "Beim Mann: Bitte geben Sie das Jahr an, ab dem Sie die Rente bereits beziehen.";
			break;
		case "beginn_jahr_invalid_mann":
			txt = "Beim Mann: Die Jahreseingabe ist nicht 4-stellig oder liegt nicht zwischen 1970 und 2020. Bitte geben Sie kein Datum sondern nur ein Jahr ein.";
			break;	
		case "beginn_betrag_empty_mann":
			txt = "Beim Mann: Um den Freibetrag berechnen zu können, müssen wir wissen, wie hoch die Brutto-Monatsrente in dem Jahr war, in dem Sie die Rente erstmals bekommen haben. Wenn dies bereits vor 2005 war, geben Sie bitte den Bruttomonatswert aus 2005 ein.";
			break;	
		case "beginn_betrag_invalid_mann":
			txt = "Beim Mann: Bitte geben Sie die Monatsrente im Jahr des Rentenbeginns in ganzen EUR ein.";
			break;	

		case "rente_invalid_frau":
			txt = "Bei der Frau: Bitte geben Sie die Monatsrente in ganzen EUR. (Maximal 3.200)";
			break;
		case "beginn_jahr_empty_frau":
			txt = "Bei der Frau: Bitte geben Sie das Jahr an, ab dem Sie die Rente bereits beziehen.";
			break;
		case "beginn_jahr_invalid_frau":
			txt = "Bei der Frau: Die Jahreseingabe ist nicht 4-stellig oder liegt nicht zwischen 1970 und 2020. Bitte geben Sie kein Datum sondern nur ein Jahr ein.";
			break;	
		case "beginn_betrag_empty_frau":
			txt = "Bei der Frau: Um den Freibetrag berechnen zu können, müssen wir wissen, wie hoch die Brutto-Monatsrente in dem Jahr war, in dem Sie die Rente erstmals bekommen haben. Wenn dies bereits vor 2005 war, geben Sie bitte den Bruttomonatswert aus 2005 ein.";
			break;	
		case "beginn_betrag_invalid_frau":
			txt = "Bei der Frau: Bitte geben Sie die Monatsrente im Jahr des Rentenbeginns in ganzen EUR ein.";
			break;
	}

	if (type != 'ausgabe') {
		txt2 = '<table>';
		txt2 += '<tr>';
		txt2 += '<td style="vertical-align:top;">';
		txt2 += txt;
		txt2 += '</td><td style="vertical-align:top;"><img src="../../../assets/pics/rentenampel.gif" />';
		txt2 += '</td>';
		txt2 += '</tr>';
		txt2 += '</table>';

		txt = txt2;
	}

    obj.innerHTML = txt;
}

function getBesteuerungsanteil(jahr) {

	if (jahr <= 2005) return 50;
	if (jahr <= 2020) return (jahr - 2005) * 2 + 50;
	if (jahr <= 2040) return (jahr - 2020) + 80;
	return 100;
}

function getFreibetrag(jahr) {

	return 100 - getBesteuerungsanteil(jahr);
}

function trim(zeichenkette) {

	return zeichenkette.replace(/^\s+/, '').replace(/\s+$/, '');
}

function berechne_steuer(einkommen) {

	if (einkommen <= 7664)
		return 0;

	if (einkommen <= 12739) {
		y = (einkommen - 7664) / 10000;
		return Math.floor((883.74 * y + 1500) * y);
	}

	if (einkommen <= 52151) {
		z = (einkommen - 12739) / 10000;
		return Math.floor((228.74 * z + 2397) * z + 989);
	}

	if (einkommen <= 250000) {
		return Math.floor(0.42 * einkommen) - 7914;
	}

	return Math.floor(0.45 * einkommen - 15414);
}

// ********** CALC *********

function CalcRentenAmpel(widget) {

	erklaerungspflicht = false;
	einkommensteuer = false;
	einkommensteuer_betrag = 0;

	rente_mann			= parseInt(document.eingabe.rente_mann.value.replace(/\./, ''));
	rente_frau			= parseInt(document.eingabe.rente_frau.value.replace(/\./, ''));
	var beginn_jahr_mann	= parseInt(document.eingabe.beginn_jahr_mann.value);
	var beginn_jahr_frau	= parseInt(document.eingabe.beginn_jahr_frau.value);
	var beginn_betrag_mann	= parseInt(document.eingabe.beginn_betrag_mann.value.replace(/\./, ''));
	var beginn_betrag_frau	= parseInt(document.eingabe.beginn_betrag_frau.value.replace(/\./, ''));

	if (((trim(document.eingabe.rente_mann.value) == '') && (trim(document.eingabe.rente_frau.value) == '')) ||
		((trim(document.eingabe.rente_mann.value) == '0') && (trim(document.eingabe.rente_frau.value) == '0'))) {
		set_info('rente');
		return;
	}

	if ((isNaN(rente_mann) && (trim(document.eingabe.rente_mann.value) != '')) || (rente_mann < 0) || (rente_mann > 3200)) {
		set_info('rente_invalid_mann');
		return;
	}

	if ((isNaN(rente_frau) && (trim(document.eingabe.rente_frau.value) != '')) || (rente_frau < 0) || (rente_frau > 3200)) {
		set_info('rente_invalid_frau');
		return;
	}

	if (!isNaN(rente_mann) && (rente_mann > 0)) {
		if (trim(document.eingabe.beginn_jahr_mann.value) == '') {
			set_info('beginn_jahr_empty_mann');
			return;
		}

		if ((isNaN(beginn_jahr_mann) && (trim(document.eingabe.beginn_jahr_mann.value) != '')) || (beginn_jahr_mann < 1970) || (beginn_jahr_mann > 2020)) {
			set_info('beginn_jahr_invalid_mann');
			return;
		}

		if (trim(document.eingabe.beginn_betrag_mann.value) == '') {
			set_info('beginn_betrag_empty_mann');
			return;
		}

		if ((isNaN(beginn_betrag_mann) && (trim(document.eingabe.beginn_betrag_mann.value) != '')) || (beginn_betrag_mann <= 0) || (beginn_betrag_mann > 3200)) {
			set_info('beginn_betrag_invalid_mann');
			return;
		}
	}

	if (!isNaN(rente_frau) && (rente_frau > 0)) {
		if (trim(document.eingabe.beginn_jahr_frau.value) == '') {
			set_info('beginn_jahr_empty_frau');
			return;
		}

		if ((isNaN(beginn_jahr_frau) && (trim(document.eingabe.beginn_jahr_frau.value) != '')) || (beginn_jahr_frau < 1970) || (beginn_jahr_frau > 2020)) {
			set_info('beginn_jahr_invalid_frau');
			return;
		}

		if (trim(document.eingabe.beginn_betrag_frau.value) == '') {
			set_info('beginn_betrag_empty_frau');
			return;
		}

		if ((isNaN(beginn_betrag_frau) && (trim(document.eingabe.beginn_betrag_frau.value) != '')) || (beginn_betrag_frau <= 0) || (beginn_betrag_frau > 3200)) {
			set_info('beginn_betrag_invalid_frau');
			return;
		}
	}

	if (!isNaN(rente_mann)) {

		rente_mann *= 12;
		beginn_betrag_mann *= 12;

		if (rente_mann > 0)
			freibetrag_mann = getFreibetrag(beginn_jahr_mann) / 100 * beginn_betrag_mann;
		else
			freibetrag_mann = 0;

		e_mann = rente_mann - freibetrag_mann - 102 - 36;
		erklaerungspflicht_mann = (e_mann >= 7834);
		est_mann = e_mann + 36 - rente_mann * 0.09;
		einkommensteuer_mann = (est_mann >= 7834);

	} else {

		freibetrag_mann = 0;
		e_mann = 0;
		erklaerungspflicht_mann = 0;
		est_mann = 0;
		einkommensteuer_mann = 0;
	}

	if (!isNaN(rente_frau)) {

		rente_frau *= 12;
		beginn_betrag_frau *= 12;

		if (rente_frau > 0)
			freibetrag_frau = getFreibetrag(beginn_jahr_frau) / 100 * beginn_betrag_frau;
		else
			freibetrag_frau = 0;

		e_frau = rente_frau - freibetrag_frau - 102 - 36;
		erklaerungspflicht_frau = (e_frau >= 7834);
		est_frau = e_frau + 36 - rente_frau * 0.09;
		einkommensteuer_frau = (est_frau >= 7834);

	} else {

		freibetrag_frau = 0;
		e_frau = 0;
		erklaerungspflicht_frau = 0;
		est_frau = 0;
		einkommensteuer_frau = 0;
	}

	e_zusammen = (e_mann + e_frau) / 2;
	erklaerungspflicht_zusammen = (e_zusammen >= 7834);
	est_zusammen = (est_mann + est_frau) / 2;
	einkommensteuer_zusammen = (est_zusammen >= 7834);

	if (!isNaN(rente_mann) && isNaN(rente_frau)) {

		erklaerungspflicht = erklaerungspflicht_mann;
		einkommensteuer = einkommensteuer_mann;
		einkommen = est_mann;

	} else if (isNaN(rente_mann) && !isNaN(rente_frau)) {

		erklaerungspflicht = erklaerungspflicht_frau;
		einkommensteuer = einkommensteuer_frau;
		einkommen = est_frau;

	} else {

		erklaerungspflicht = erklaerungspflicht_zusammen;
		einkommensteuer = einkommensteuer_zusammen;
		einkommen = est_zusammen;
	}

	if (erklaerungspflicht && einkommensteuer) {
		einkommensteuer_betrag = berechne_steuer(einkommen);
		if (!isNaN(rente_mann) && !isNaN(rente_frau))
			einkommensteuer_betrag *= 2;
	}

	textzusammen(widget);
	set_info('ausgabe');
}

function textzusammen(widget) {

	text = '<table>';
	text += '<tr>';
	text += '<td colspan="2"><b>Ergebnis der Rentenprüfung:</b></td></tr><tr><td style="vertical-align:top;">';

	if (!isNaN(rente_mann) && !isNaN(rente_frau))
		text += 'Zusammen - Veranlagung: ';
	else
		text += 'Einzel - Veranlagung: ';

	if (erklaerungspflicht && einkommensteuer)
		text += 'Sie müssen wohl eine Steuererklärung abgeben und wohl auch Steuern (ca. ' + (Math.round(einkommensteuer_betrag / 10) * 10) + ' EUR) zahlen.</td><td style="vertical-align:top;"><img src="../../../assets/pics/rentenampel-red.gif" />';
	else if (!erklaerungspflicht && !einkommensteuer)
		text += 'So wie es aussieht, müssen Sie keine Steuererklärung abgeben und keine Steuern zahlen.</td><td style="vertical-align:top;"><img src="../../../assets/pics/rentenampel-green.gif" />';
	else
		text += 'Sie müssen wohl eine Steuererklärung abgeben. Steuern kommen wohl nicht auf Sie zu.</td><td style="vertical-align:top;"><img src="../../../assets/pics/rentenampel-yellow.gif" />';

	text += '</td>';
	text += '</tr>';
	text += '</table>';

	if (!widget) 
	{ 
		//promo = promo_e;
		promo = "";
	} 
	else 
	{ 
		promo = "";
	}

	txtausgabe = text + promo;
}