/*** author: Lukas Klausner ***/
/*** copyright by HFP Steuerberatungsgesellschaft m.b.H., www.hfp.at  ***/

var fbig = new FBIG ();
var js15 = false;

function FBIG () {
	// Eingabefelder
	this.einnahmen_gesamt = 0;
	this.einnahmen_6pro=0;
	this.einnahmen_12pro=0;
	this.einkuenfte_nicht_relevant=0;
	
	this.eigenpersonal=0;
	this.fremdloehne=0;
	this.material=0;
	this.sozialversicherung=0;
	this.abpausch_ba=0;
	
	// Eingabefelder in Textform
	this.einnahmen_6pro_tf="";
	this.einnahmen_12pro_tf="";
	this.einnahmen_nicht_relevant_tf="";
	
	this.eigenpersonal_tf="";
	this.fremdloehne_tf="";
	this.material_tf="";
	this.sozialversicherung_tf="";
	this.abpausch_ba_tf="";
	
	// Ausgabefelder
	this._pausch_steuersatz=0;
	this._fbig_steuersatz=0;
	
	this.summe_steuerersparnis_pausch = 0;
	this.summe_steuerersparnis_fbig = 0;

	this.fbig_empfohlen = false;
}

function update_ausgabefelder() {
	document.rechner.einnahmen_gesamt.value = formatZahl(fbig.einnahmen_gesamt);
	
	document.rechner._pausch_steuersatz.value	= (fbig._pausch_steuersatz*100) + "%";
	document.rechner._fbig_steuersatz.value		= (fbig._fbig_steuersatz*100) + "%";
	
	document.rechner.summe_steuerersparnis_pausch.value	= formatZahl(fbig.summe_steuerersparnis_pausch) + " EUR";
	document.rechner.summe_steuerersparnis_fbig.value	= formatZahl(fbig.summe_steuerersparnis_fbig) +  " EUR";
	
    if (fbig.fbig_empfohlen) 
    	document.getElementById("empfehlung").firstChild.nodeValue = "Abgehen von Pauschalierung in Erwägung ziehen";
    else
        document.getElementById("empfehlung").firstChild.nodeValue = "Beibehalten der Pauschalierung";
}

function fbig_init() {
	
	if (_js_supported_) {
		checkJavascript();
		
		var browser_not_supported = document.getElementById("browser_not_supported");
		browser_not_supported.style.position="absolute";
		browser_not_supported.style.zIndex=100;
		browser_not_supported.style.left=0;
		browser_not_supported.style.top=0;
		browser_not_supported.style.visibility = "hidden";
		
		document.rechner.style.visibility = "visible";
		
		if (document.rechner.einkuenfte_nicht_relevant.value != "")
			fbig.einkuenfte_nicht_relevant = convert2Zahl(document.rechner.einkuenfte_nicht_relevant.value);
		if (document.rechner.einnahmen_6pro.value != "")
			fbig.einnahmen_6pro = convert2Zahl(document.rechner.einnahmen_6pro.value);
		if (document.rechner.einnahmen_12pro.value != "")
			fbig.einnahmen_12pro = convert2Zahl(document.rechner.einnahmen_12pro.value);
		if (document.rechner.eigenpersonal.value != "")
			fbig.eigenpersonal = convert2Zahl(document.rechner.eigenpersonal.value);
		if (document.rechner.fremdloehne.value != "")
			fbig.fremdloehne = convert2Zahl(document.rechner.fremdloehne.value);
		if (document.rechner.material.value != "")
			fbig.material = convert2Zahl(document.rechner.material.value);
		if (document.rechner.sozialversicherung.value != "")
			fbig.sozialversicherung = convert2Zahl(document.rechner.sozialversicherung.value);
		if (document.rechner.abpausch_ba.value != "")
			fbig.abpausch_ba = convert2Zahl(document.rechner.abpausch_ba.value);
		
		rechne();
		update_ausgabefelder();
	}
}

function checkJavascript () {
	var test = 1;
	if (test.toFixed)
		js15 = true;
}

function getIEVersionNumber() {    
	var ua = navigator.userAgent;
    var MSIEOffset = ua.indexOf("MSIE ");
    
    if (MSIEOffset == -1) {
        return 0;
    } else {
        return parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset)));
    }
}

function check (eingabe) {
  var nur_das = "0123456789,.";
  for (var i = 0; i < eingabe.length; i++)
    if (nur_das.indexOf(eingabe.charAt(i)) < 0)
      return false;
  return true;
}

function value_changed (object) {
	var wert = object.value;
	var id = object.id;
	
	if (check(wert) && wert.length < 13) {
    	if (wert == "")
    	    fbig[id] = 0;
    	else {
    	    fbig[id+"_tf"] = wert;
    		fbig[id] = convert2Zahl(wert);
    	}
		rechne();
		update_ausgabefelder();
	}
	else {
		object.value = fbig[id+"_tf"];
	}
}
 

function rechne() {
	
	fbig.einnahmen_gesamt = fbig.einnahmen_6pro + fbig.einnahmen_12pro + fbig.einkuenfte_nicht_relevant;
	
	var zusaetzlicheBA = fbig.eigenpersonal + fbig.fremdloehne + fbig.material + fbig.sozialversicherung;
	
	
	var _6pro_pausch = fbig.einnahmen_6pro * 0.06;
	
	var _12pro_pausch = fbig.einnahmen_12pro * 0.12;
								
	var _fbig = (fbig.einnahmen_gesamt - fbig.einkuenfte_nicht_relevant 
								- zusaetzlicheBA - fbig.abpausch_ba) * 0.1;
	
	
	var verprobung_einkuenfte = fbig.einnahmen_gesamt - zusaetzlicheBA - fbig.abpausch_ba;
	
	var pausch_einkommen = fbig.einnahmen_gesamt - _6pro_pausch - _12pro_pausch - zusaetzlicheBA;
	var fbig_einkommen = fbig.einnahmen_gesamt - zusaetzlicheBA - fbig.abpausch_ba - _fbig;
	
	fbig._pausch_steuersatz  = getSteuersatz(pausch_einkommen);	
	fbig._fbig_steuersatz  = getSteuersatz(fbig_einkommen);	
	
	var verprobung_abzglSteuer = getAbzglSteuer(verprobung_einkuenfte);
	var pausch_abzglSteuer = getAbzglSteuer(pausch_einkommen);
	var fbig_abzglSteuer = getAbzglSteuer(fbig_einkommen); 
	
	
	// Summe Steuerersparnis
	fbig.summe_steuerersparnis_pausch =  verprobung_abzglSteuer - pausch_abzglSteuer;
	if (fbig.summe_steuerersparnis_pausch < 0) fbig.summe_steuerersparnis_pausch = 0; 
	fbig.summe_steuerersparnis_fbig	  = verprobung_abzglSteuer - fbig_abzglSteuer;
	if (fbig.summe_steuerersparnis_fbig < 0) fbig.summe_steuerersparnis_fbig = 0;
	
	fbig.fbig_empfohlen = ( (fbig.summe_steuerersparnis_fbig-300) > fbig.summe_steuerersparnis_pausch)
}

function getSteuersatz (einkommen) {
	var steuersatz = 0;
	
	if (einkommen <= 11000)
		steuersatz = 0;
	else if (einkommen <= 25000)
		steuersatz = 0.365;
	else if (einkommen <= 60000)
		steuersatz = 0.4321;
	else
		steuersatz = 0.50;
	
	return steuersatz;
}

function getAbzglSteuer (einkommen) {
	var abzglSteuer = 0;
	
	if (einkommen <= 11000)
		abzglSteuer = 0;
	else if (einkommen <= 25000)
		abzglSteuer = (einkommen-11000) * 5110/14000;  // * 36,5 %
	else if (einkommen <= 60000)
		abzglSteuer = (einkommen-25000) * 15125/35000 + 5110;	// * 43,21 %
	else
		abzglSteuer = (einkommen-60000) * 0.5 + 20235;	// * 50 %
	
	return abzglSteuer;
}

function convert2Zahl (text) {
    var text_tmp = text;
    while (text_tmp.indexOf(".") != -1)
        text_tmp = text_tmp.replace(".", "");
	return parseInt(text_tmp);
}

function formatZahl(zahl) {
			
	var zahl_fix = toFixed13(zahl, 2);
	
	var text_tmp = zahl_fix.replace(".", ",");
		
	// Tausendertrennzeichen
	var idx = text_tmp.indexOf(',');
	var text = text_tmp.substring(idx,text_tmp.length);
	while(idx > 0) {
	
		if(idx - 3 > 0)
			text = '.' + text_tmp.substring( idx - 3, idx) + text;
		else
			text = text_tmp.substring(0, idx) + text;
			idx -= 3;
		}
    
    return text;
}

function toFixed13(wert,ds){
	var text = "";
	if (js15)
		text = wert.toFixed(ds);
	else
		text =  Math.floor(wert)+"."+(Math.pow(10,ds)+Math.round((wert-Math.floor(wert))*Math.pow(10,ds))+"").substr(1,ds);
	return text;
}
