isNS = (navigator.appName == "Netscape")
var einkommen1;var einkommen2,  differenznetto, differenzbrutto, Vorteil, Investition1;

function Rechner2(){
differenznetto=document.eingabe.differenznetto.value;
differenzbrutto=document.eingabe.differenzbrutto.value;
Vorteil= differenzbrutto-differenznetto;
Investition1 = document.eingabe.abweichung.value;


/*
Vorteil=formatausgabe(Vorteil);
Investition1=formatausgabe(Investition1);
out="<b>"+Investition1+"</b>"; document.getElementsByTagName('div')['Investition'].innerHTML = out;	
out="<b>"+Vorteil+"</b>"; document.getElementsByTagName('div')['Vorteil'].innerHTML = out;	
Vermittler = document.eingabe.Vermittler.value;
emil = document.eingabe.emil.value;

out="<br><a href='https://www.maklerinfo.biz/homepage-Dateien/load2-Dateien/bav/standart-life/index.php?Vermittler="+Vermittler+"&emil="+emil+"&Eigenbeitrag_Eingabe="+Investition1+"' target='_blank'>Jetzt Angebot rechnen</a>";
document.getElementsByTagName('div')['Verlinkung'].innerHTML = out;	
*/
}

function Rechner()
{

	
	einkommen1 = document.eingabe.einkommen.value;
	einkommen3=formatausgabe(einkommen1);
	out="<b>"+einkommen3+"&nbsp;EUR&nbsp;</b>"; document.getElementsByTagName('div')['einkommen1'].innerHTML = out;	
	

	Calc(einkommen1,1);
Rechner2();
	
	if (document.eingabe.abweichung.value != 0) {
		
		
		if (document.eingabe.vorzeichen.value == "-") {

			einkommen2 = parseFloat(document.eingabe.einkommen.value) - parseFloat(document.eingabe.abweichung.value);
			einkommen3=formatausgabe(einkommen2);
			out="<b>"+einkommen3+"&nbsp;EUR&nbsp;</b>";document.getElementsByTagName('div')['einkommen2'].innerHTML = out;
			Calc(einkommen2,2);
			einkommen1 = document.eingabe.einkommen.value;
			document.eingabe.differenzbrutto.value 	= Math.round((parseFloat(einkommen1) - parseFloat(einkommen2)) * 100) / 100;
			document.eingabe.differenznetto.value 	= Math.round((parseFloat(document.eingabe.netto1.value) - parseFloat(document.eingabe.netto2.value)) * 100) / 100;
Rechner2();
		} else {

			einkommen2 = parseFloat(document.eingabe.einkommen.value)+parseFloat(document.eingabe.abweichung.value);
			einkommen3=formatausgabe(einkommen2);
			out="<b>"+einkommen3+"&nbsp;EUR&nbsp;</b>";document.getElementsByTagName('div')['einkommen2'].innerHTML = out;
			
			Calc(einkommen2,2);
			einkommen1 = document.eingabe.einkommen.value;
			document.eingabe.differenzbrutto.value	= Math.round((parseFloat(einkommen2) - parseFloat(einkommen1)) * 100) / 100;
			document.eingabe.differenznetto.value	= Math.round((parseFloat(document.eingabe.netto2.value) - parseFloat(document.eingabe.netto1.value)) * 100) / 100;
Rechner2();
		}
		
	} else {

		
		einkommen1 = document.eingabe.einkommen.value;
		einkommen2=einkommen1;
		einkommen3=formatausgabe(einkommen2);
		out="<b>"+einkommen3+"&nbsp;EUR&nbsp;</b>";document.getElementsByTagName('div')['einkommen2'].innerHTML = out;
		
		Calc(einkommen1,2);
		document.eingabe.differenzbrutto.value 	= '0.00';
		document.eingabe.differenznetto.value 	= '0.00';
		/*Vorteil();*/
	
	}	

}


function Key_Up(e) 
{

	Rechner();

}


if (isNS) {
	document.onkeyup = Key_Up;
	document.captureEvents(Event.KEYUP);
}


function Nullen() 
{

	document.eingabe.einkommen.focus();
	document.eingabe.einkommen.value		= '0.00';
	document.eingabe.abweichung.value		= '0.00';
	document.eingabe.freibe.value			= '0.00';
    document.eingabe.LSTFREI.value			= '0.00';
	document.eingabe.differenzbrutto.value	= '0.00';
	document.eingabe.differenznetto.value	= '0.00';
	document.eingabe.freibe.value			= '0.00';	
	document.eingabe.netto1.value			= '0.00';
	document.eingabe.netto2.value			= '0.00';
	Rechner();

}

function auswahl()
{

	j = 1;

	for (i = 0; i < document.eingabe.zahl.length; ++i) {

		if (document.eingabe.zahl.options[i].selected)
			j = i + 1;
	
	}
	
	sj = j;
	
	if (j == 4)
		j = 3;

}


function Calc(einkommen,ausgabe)
{

	ZahlenHolen();
    
    this.einkommen	= einkommen;
	this.ausgabe	= ausgabe;
	zvenormal=this.einkommen;
	
  /*zvenormal	= change(this.einkommen);*/
  

	kist = 0;
	
	if (document.eingabe.KiSt[1].checked) 
		kist = 8;

	if (document.eingabe.KiSt[2].checked)
		kist = 9;

	for (i = 0; i < document.eingabe.stkl.length; ++i) {
         
		if (document.eingabe.stkl.options[i].selected)
			stkl = i + 1;
	}

	Split = (stkl == 3 ? 2 : 1);

	if (document.eingabe.zeit.options[0].selected) {
		ze 		= 360;
		zefak 	= 0.0056;
        bez		= "Tag";
	}
	
	if (document.eingabe.zeit.options[1].selected) {
		ze 		= 360 / 7;
		zefak 	= 0.0089;
        bez		= "Woche";
	}

	if (document.eingabe.zeit.options[2].selected) {
		ze 		= 12;
		zefak 	= 0.0067;
        bez		= "Monat";
	}
	
	if (document.eingabe.zeit.options[3].selected) {
		ze 		= 1;
		zefak 	= 0;
        bez		= "Jahr";
	}
	
    if (j > 3) 
	 	zefak 		= 0; // Diese Zeile entfernen, wenn 2004 so gerechnet werden soll wie BFM Ablaufplan

	zvesoznormal 	= zvenormal;
	zvenormal 		= (zvenormal/1+zefak);
		
	zve 			= zvenormal * ze;
	zvesoz 			= zvesoznormal * ze;
    zvesozjahr		= zvesoz; 
    versorgfreipl	= 0;
    fvbz			= 0;
    versorgfrei		= 0;
    text2			= "";
    vfrei			= change(document.eingabe.freibe.value);
    
 	if (vfrei > 0) {
    
    	if (j < 6) {

			vfrei		= Math.ceil(vfrei * ze * 100) / 100;
    		versorgfrei	= (j < 3 ? Math.min(0.4 * vfrei, 6000) : Math.min(0.4 * vfrei, 3072));
        
        } else {

        	fvbz		= 900;
            vfrei		= (ze * vfrei);
			versorgfrei	= Math.min(0.4 * vfrei, 3000);

			if (stkl < 6)
            	versorgfreipl = 102;

			if (versorgfrei + versorgfreipl > vfrei) {

				if (vfrei - versorgfrei < fvzb) {
	
    				fvbz			= Math.floor((vfrei - versorgfrei) * 100) / 100;
					versorgfreipl	= 0;
           
           		} else
					fvbz = Math.floor((vfrei - versorgfrei - versorgfreipl) * 100) / 100;

          		text2=(" in diesem Fall nur ");

        	}

      	}        

	}

    altersentlast = 0;

	LSTF	= change(document.eingabe.LSTFREI.value);
	lstfrei	= Math.floor(LSTF * 100) / 100;

    if (stkl < 5) {

		zve	-= altersentlast;
		zve	-= versorgfrei;

    }
	
    zvezeig = Math.floor(zve * 100) / 100;

	CalcSum();

	stwert		= new Array(2);
	stwert[0]	= steuer;
	stwert[1]	= soli;
	stwert[2]	= kisteuer;

	CalcSum();
    
	stwert1		= new Array(2);
	stwert1[0]	= steuer;
	stwert1[1]	= soli;
	stwert1[2]	= kisteuer;

	stwertdiff = new Array(2);
	
    for (i = 0; i < 3; i++)
    	stwertdiff[i] = stwert1[i] - stwert[i];

	steuer		= Math.floor((stwert[0] / ze + stwertdiff[0]) * 100) / 100;
	soli		= Math.floor((stwert[1] / ze + stwertdiff[1]) * 100) / 100;
	kisteuer	= Math.floor((stwert[2] / ze + stwertdiff[2]) * 100) / 100;

	Stganz		= Math.round((steuer + soli + kisteuer) * 100) / 100;
	Sozialabgaben();

   	if (this.ausgabe == 1) {
steuer=formatausgabe(steuer);
		out="- "+steuer+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['Steuer1'].innerHTML = out;
		soli=formatausgabe(soli);
		out="- "+soli+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['Soli1'].innerHTML = out;
		kisteuer=formatausgabe(kisteuer);
		out="- "+kisteuer+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['KiSteuer1'].innerHTML = out;

	} else {
soli=formatausgabe(soli);
		out="- "+soli+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['Soli2'].innerHTML = out;
		steuer=formatausgabe(steuer);
			out="- "+steuer+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['Steuer2'].innerHTML = out;
	kisteuer=formatausgabe(kisteuer);
		out="- "+kisteuer+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['KiSteuer2'].innerHTML = out;		

	}	

}

    
function CalcSum()
{

	auswahl();
    VorsorgAbzug();

	abzugoK = pausch[stkl-1] + vspausch + fvbz + versorgfreipl + lstfrei;
	zvex 	= Math.max(0, Math.floor((zve - abzugoK) / (Split * teiler[j])) * teiler[j]);
	x 		= zvex + adder[j];

	if (KiZahl < 1) zvedemo = zvex;

    if (stkl < 5) {

		EkSt();
		solisteuer = result * Split;
		steuer = Math.floor(100 * solisteuer) / 100;

		if (KiZahl > 0) {

			abzugmK = abzugoK + KiAbzug * Split;
	        zvex 	= Math.max(0, Math.floor((zve - abzugmK) / (Split * teiler[j])) * teiler[j]);
    	    x 		= zvex + adder[j];
        	
			EkSt();
	        
			solisteuer = result * Split;
			
     	}
    
    } else {
        
        if (j < 3)
			x = zvex - adder[j];

		st6betrag = x;

		if (x > st6deckel[j]) {

			st6x = st6deckel[j];
      		steuer6();

		} else {
	
			st6x = st6betrag;
			steuer6();
		}
        
		fac 		= Math.max((st6betrag  * yzahl[j] / 10000), st6diff + Math.max(0, (st6betrag  - st6deckel[j]) * x1[j]));
		st6x		= st6grenz[j];
		steuer6();
		st6 		= Math.floor(Math.min(fac, st6diff + Math.max(0, (st6betrag - st6grenz[j]) * x1[j])));
    	solisteuer 	= st6;
    	steuer 		= Math.floor(100 * solisteuer) / 100;
        
        if (steuer < (anfsteuer[j]-1))
			steuer = 0;
	}

	soli 		= Math.max((Math.min(0.055 * solisteuer,(solisteuer - (solibas * Split)) * 0.2)),0);
	soli 		= Math.floor(100 * soli) / 100;
	kisteuer	= Math.floor(solisteuer * kist) / 100;

	if (steuer == 0) {
	
		soli 		= 0;
		kisteuer 	= 0;
		
	}
	
}

  
function steuer6()
{

	x 		= st6x * 1.25;

	EkSt();

	st1 	= result;
	x 		= st6x * 0.75;

	EkSt();

	st2 	= result;
	st6diff = 2 * (st1 - st2);
	
}


function EkSt() 
{

	z 		= (x - ztausx[j]) / 10000;
	y 		= (x - ztausy[j]) / 10000;
	c9 		= (x > anfst[j] && x < midst[j] + 1) ? Math.floor((y1[j] * y + yzahl[j]) * y) : 0;
	c10 	= (x > midst[j] && x < endst[j] + 1) ? Math.floor((z1[j] * z + zzahl1[j]) * z + zzahl2[j]) : 0;
	c11 	= x > endst[j] ? Math.floor(x1[j] * x - xzahl[j]) : 0;
	result 	= c9 + c10 + c11;

}


function VorsorgAbzug()
{

	vsf = new Array(3068, 1334, 667, 1134);

    if (j != 1 && j < 4)
		aufbas = (Math.floor(zve / teiler[j]) * teiler[j]) + teilervor[j];
	
	else
		aufbas = zve;
	
	aufw = 0.2 * aufbas;
   
	if (document.eingabe.tabelle[0].selected) {
	
		vspau1 = Math.max(0,Split * vsf[0] - (0.16 * aufbas));
		vspau2 = Math.min(Split * vsf[1],aufw - vspau1);
		vspau3 = Math.min(Split * vsf[2],(aufw - vspau1 - vspau2) / 2);
		vspau4 = Math.min(aufw, vspau1 + vspau2 + vspau3);

	} else {

		vspau4 = Math.min(aufw,vsf[3] * Split);
		
	}
	
	vspausch	= (stkl < 5 ? Math.ceil(vspau4 / teiler[j]) * teiler[j] : 0);
   	vspau4zeig	= vspausch;
	
	if (j > 5 && vspausch > 0) {  //Berücksichtigung des Alterseinkünftegesetzes

		gekvor		= 1500 * Split;
		gekvspausch	= (zve * 0.11 < gekvor ? zve * 0.11 : gekvor);
		bemesrv		= Math.min(62400,zve);
		rentanteil	= Math.floor(bemesrv * 1.95) / 100;
      
		if (document.eingabe.tabelle[0].selected == false)
			rentanteil = 0;

		if (Math.floor(rentanteil + gekvspausch) > vspausch)  //Günstigerprüfung
			vspausch = Math.ceil(rentanteil + gekvspausch);

	} else {
    
		gekvspausch	= 0;
        rentanteil	= 0;
        vspau4		= 0;
	
    }
	
    for (i = 0; i < document.eingabe.Kinder.length; ++i) {

		if (document.eingabe.Kinder.options[i].selected == true)
			KiZahl = Math.max(i / 2,0);
	
    }

    pausch = new Array(1080, 3420, 1116, 1080, 1044, 0);

  	if (j > 3)
    	pausch = new Array(956, 2264, 992, 956, 920, 0);

  	text1 ="";

    if (j > 5 && Math.floor(vfrei) >= Math.floor(zvesozjahr)) {

		pausch = new Array(36, 1344, 72, 36, 0, 0);
		text1 = "<br>(da nur Versorgungsbezüge angegeben, § 9a, Satz 1, Nr. 1b EStG) ";
	
    }

	KiAbzug = (stkl < 4 ? KiZahl * 5808 / Split : KiZahl * 2904);
  	
	if (stkl > 4)
		KiAbzug = 0;

	if (j > 1)
		zve = Math.floor(zve / teiler[j]) * teiler[j];
	
    if (j == 2) {

		pausch[5] = 0;
		pausch[4] = 1998;
	}

}
   

function Sozialabgaben()
{

    krank 		= 0;
	pflege 		= 0;
	zvesozmj 	= zvesoznormal * ze;
	retzvesoz 	= zvesoz;

 	if (document.eingabe.tabelle[0].selected)
	    var f;
    else
		zvesoz = 0;
        
	sozberech();
	
	sozwert 	= new Array(3)
	sozwert[0]	= rentewert;
	sozwert[1]	= kvwert;
	sozwert[2]	= aloswert;
	sozwert[3]	= pflegewert;

	sozberech();
	
	sozwert1	= new Array(3);
	sozwert1[0]	= rentewert;
	sozwert1[1]	= kvwert;
	sozwert1[2]	= aloswert;
	sozwert1[3]	= pflegewert;

	sozwertdiff = new Array(3);

	for (i = 0; i < 4; i++) { 
		
		sozwertdiff[i] = sozwert1[i] - sozwert[i];
	
	}

	rentewert 	= Math.round((sozwert[0] / ze + sozwertdiff[0]) * 100) / 100;
	kvwert 		= Math.round((sozwert[1] / ze + sozwertdiff[1]) * 100) / 100;
	aloswert 	= Math.round((sozwert[2] / ze + sozwertdiff[2]) * 100) / 100;
	pflegewert 	= Math.round((sozwert[3] / ze + sozwertdiff[3]) * 100) / 100;
	sozabgabe	= Math.round((rentewert + kvwert + pflegewert + aloswert) * 100) / 100;

	if (this.ausgabe == 1) {
	

		document.eingabe.netto1.value		= Math.round((zvesoznormal - (sozabgabe + Stganz)) * 100) / 100;
		rentewert=formatausgabe(rentewert);
				out="- "+rentewert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['rente1'].innerHTML = out;
				kvwert=formatausgabe(kvwert);
				out="- "+kvwert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['kv1'].innerHTML = out;
				aloswert=formatausgabe(aloswert);
				out="- "+aloswert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['arbeitslos1'].innerHTML = out;
				pflegewert=formatausgabe(pflegewert);
				out="- "+pflegewert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['pflege1'].innerHTML = out;								

	} else {
				rentewert=formatausgabe(rentewert);
				out="- "+rentewert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['rente2'].innerHTML = out;
				kvwert=formatausgabe(kvwert);
				out="- "+kvwert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['kv2'].innerHTML = out;
				aloswert=formatausgabe(aloswert);
				out="- "+aloswert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['arbeitslos2'].innerHTML = out;
				pflegewert=formatausgabe(pflegewert);
				out="- "+pflegewert+"&nbsp;EUR&nbsp;";document.getElementsByTagName('div')['pflege2'].innerHTML = out;		
		
		document.eingabe.netto2.value		= Math.round((zvesoznormal - (sozabgabe + Stganz)) * 100) / 100;

	}

}


function sozberech()
{

	if (document.eingabe.tabelle[0].selected == false)
    	zvesoz = 0;
 
    bemesk = Math.min(kvgrenz[sj],zvesoz);
	
    if (document.eingabe.ost.checked) {

		if (sj == 1)
			bemesk = Math.min(63900,zvesoz);

	} else {

		if (sj == 1)
			bemesk = Math.min(77400,zvesoz);
	
	} 
    
    if (document.eingabe.ost.checked)
		bemesr = Math.min(rvgrenzo[sj],zvesoz);
      
	else
		bemesr = Math.min(rvgrenzw[sj],zvesoz);

   for (i = 0; i < document.eingabe.barmer.length; ++i) {

		if (document.eingabe.barmer[i].selected) {

			if (i != 0) {

				krank	= (i * 0.1) + 11.4;
				pflege	= 1.7;

				if (document.eingabe.sachsen.checked) {

					pflege = 2.7;
					bemesr = Math.min(rvgrenzo[sj],zvesoz);
				
				}
			}
		}
	}
    
    rente = 19.1;

	if (sj == 1)
		rente = 19.3;

	if (sj > 3)
		rente = 19.5;
    
	if (!document.eingabe.pvohne.checked && j > 5 && KiZahl == 0)
         pflege = pflege + 0.5;    
    
    alos 		= 6.5;
	
    if (krank == 0)
    	pflege = 0; 
    
    rentewert	= Math.round(bemesr * rente 	/ 2) / 100;
	kvwert		= Math.round(bemesk * krank 	/ 2) / 100;
	pflegewert	= Math.round(bemesk * pflege 	/ 2) / 100;
	aloswert	= Math.round(bemesr * alos 		/ 2) / 100;
    
}

function umrech()
{
	zveum		= change(document.eingabe.einkommen.value);
    vfreium		= change(document.eingabe.freibe.value);
    LSTFum		= change(document.eingabe.LSTFREI.value);
    auswahl();

	if (document.eingabe.wert.checked && j > 2) {

		document.eingabe.einkommen.value	= Math.round(zveum	 * 100 * 1.95583) / 100;
		document.eingabe.freibe.value		= Math.round(vfreium * 100 * 1.95583) / 100;
		document.eingabe.LSTFREI.value		= Math.round(LSTFum	 * 100 * 1.95583) / 100;
	}
     
	if (!document.eingabe.wert.checked && j > 2) {

		document.eingabe.einkommen.value	= Math.round(zveum	 * 100 / 1.95583) / 100;
		document.eingabe.freibe.value		= Math.round(vfreium * 100 / 1.95583) / 100;
		document.eingabe.LSTFREI.value		= Math.round(LSTFum	 * 100 / 1.95583) / 100;
	}

	Calc();

}


function change(z) 
{

	z = z.replace(/,/,".");
	z = parseFloat(z);

	if (isNaN(z)) 
		z = 0;

	return Math.abs(z);

}


function ZahlenHolen()
{
	jahrdr		= new Array (0,"2000","2001","2002/2003",0,"2004","2005","2006");
	stkldr		= new Array (0,"I","II","III","IV","V","VI");
	rvgrenzw	= new Array (0,103200,104400,54000,61200,61800,62400);
    rvgrenzo	= new Array (0,85200,87600,45000,51000,52200,52800);
    kvgrenz		= new Array (0,77400,78300,40500,41400,41850,42300);
    anfst		= new Array (13067,13499,14093,7235,7426,7664,7664);
    midst		= new Array (66365,17495,18089,9251,12755,12739,12739);
    endst		= new Array (120041,114695,107567,55007,52292,52151,52151);
    y1			= new Array (350.35,262.76,387.89,768.85,747.80,793.10,883.74);
    yzahl		= new Array (2390,2290,1990,1990,1700,1600,1500);
    z1			= new Array (151.93,133.74,142.49,278.65,278.59,265.78,228.74);
    zzahl1		= new Array (3669,2500,2300,2300,2497,2405,2397);
    zzahl2		= new Array (16637,957,857,432,1118,1016,989);
    x1			= new Array (0.53,0.51,0.485,0.485,0.47,0.45,0.42);
    xzahl		= new Array (22886,20575,19299,9872,9232,8845,7914);
    ztausy		= new Array (13014,13446,14040,7200,7426,7664,7664);
    ztausx		= new Array (66312,17442,18036,9216,12755,12739,12739);
    teiler		= new Array (54,54,54,36,1,1,1);
    teilervor	= new Array (0,0,53,35,0,0,0);
    st6deckel	= new Array (64476,57348,53784,27306,26964,26072,25812);
    st6grenz	= new Array (0,17118,17442,8946,9036,9228,9144);
    adder		= new Array (0,0,27,18,0,0,0);
    anfsteuer	= new Array (1,12,16,10,10,10,10)
    solibas		= ( j < 3 ? 1836 : 972 );
}



function formatausgabe(geber){
Rente9=(Math.round(geber*100))/100;
b = Rente9.toString();
c = b.split(".");
if ( c.length == 1 ) {
d = "00";
} else {
d = c[1] + "0";
}
e=c[0].length;
if (e > 3 ){
f=e-3;
g=c[0].substring(f,e);
h=c[0].substring(0,f);
c[0]=h+"."+g;};
Rente9=c[0] + "," + d.substr(0,2);

return Rente9;
}
