/* Cursor beim Neuladen ins erste Feld setzen */
document.observe("dom:loaded", function(){
	$('r_umsatz').focus();
});


/* Funktion, die rechnet */
function calculate(){
	
	/* Hole die Eingabewerte und formatiere den Inhalt der Felder */
	var umsatz = formatValue('r_umsatz', 0, 999999999999, 'currency');
	var renditeprozent = formatValue('r_renditeprozent', 0, 100, 'percent');
	var forderungsausfall = formatValue('r_forderungsausfall', 0, 100, 'percent');
	var mgmtausgaben = formatValue('r_mgmtausgaben', 0, 9999999999, 'currency');
	
	/* ----------------------------------------------- */
	
	
	/* Berechne den Gewinn */ 
	if(isNumeric(renditeprozent) && isNumeric(umsatz)){
		var gewinn = (renditeprozent/100) * umsatz;
		$('s_gewinn').innerHTML = formatResult(gewinn, 'currency');
	}
	else{
		$('s_gewinn').innerHTML = '';
	}

	/* Berechne den Debitorenverlust */
	if(isNumeric(forderungsausfall) && isNumeric(umsatz)){
		var debitorenverlust = (forderungsausfall/100) * umsatz;
		$('s_debitorenverlust').innerHTML = formatResult(debitorenverlust, 'currency');
	}
	else{
		$('s_debitorenverlust').innerHTML = '';
	}	

	/* Berechne den Gewinn nach Debitorenverlust */
	if(isNumeric(gewinn) && isNumeric(debitorenverlust)){
		var gewinndanach = gewinn - debitorenverlust;
		$('s_gewinndanach').innerHTML = formatResult(gewinndanach, 'currency');
	}	
	else{
		$('s_gewinndanach').innerHTML = '';
	}	

	/* Berechne die Gesamtkosten */
	if(isNumeric(mgmtausgaben) && isNumeric(debitorenverlust)){
		var gesamtkosten = mgmtausgaben + debitorenverlust;
		$('s_gesamtkosten').innerHTML = formatResult(gesamtkosten, 'currency');
	}
	else{
		$('s_gesamtkosten').innerHTML = '';
	}			
	
	/* Berechne notwendigen Mehrumsetz */
	if(isNumeric(debitorenverlust) && isNumeric(renditeprozent)){
		var mehrumsatz = (debitorenverlust / renditeprozent) * 100;
		$('s_mehrumsatz').innerHTML = formatResult(mehrumsatz, 'currency');
	}
	else{
		$('s_mehrumsatz').innerHTML = '';
	}	
	
	/* Berechne Umsatzsteigerung in % */
	if(isNumeric(mehrumsatz) && isNumeric(umsatz)){
		var umsatzsteigerung = (mehrumsatz*100) / umsatz;
		$('s_umsatzsteigerung').innerHTML = formatResult(umsatzsteigerung, 'percent');
	}
	else{
		$('s_umsatzsteigerung').innerHTML = '';
	}	
	
	/* ----------------------------------------------- */

	/* Wenn soweit alles ausgefuellt, dann einblenden des zweiten Teils */
	if(isNumeric(umsatzsteigerung)){
		if($('rechner_secondpart').style.display == 'none'){
			$('rechner_secondpart').blindDown({ duration: 2.0 });
		}
	}
	
	/* ----------------------------------------------- */

	
	/* Berechne Gesamtkosten */
	if(isNumeric(debitorenverlust) && isNumeric(mgmtausgaben)){
		var gesamtkosten = debitorenverlust + mgmtausgaben;
		$('s_gesamtkosten').innerHTML = formatResult(gesamtkosten, 'currency');
	}
	else{
		$('s_gesamtkosten').innerHTML = '';
	}	

	/* Berechne Management-Ausgaben fuer das Folgejahr */	
	if(isNumeric(mgmtausgaben)){
		var mgmtausgaben_folgejahr = mgmtausgaben * 1.6;
		$('s_mgmtausgaben_folgejahr').innerHTML = formatResult(mgmtausgaben_folgejahr, 'currency');
	}	
	else{
		$('s_mgmtausgaben_folgejahr').innerHTML = '';
	}
	
	/* Berechne Debitorenverlust fuer das Folgejahr */
	if(isNumeric(debitorenverlust)){
		var debitorenverlust_folgejahr = debitorenverlust * 0.6;
		$('s_debitorenverlust_folgejahr').innerHTML = formatResult(debitorenverlust_folgejahr, 'currency');
	}
	else{
		$('s_debitorenverlust_folgejahr').innerHTML = '';
	}	
	
	/* Berechne Gesamtkosten fuer das Folgejahr */
	if(isNumeric(mgmtausgaben_folgejahr) && isNumeric(debitorenverlust_folgejahr)){
		var gesamtkosten_folgejahr = mgmtausgaben_folgejahr + debitorenverlust_folgejahr;
		$('s_gesamtkosten_folgejahr').innerHTML = formatResult(gesamtkosten_folgejahr, 'currency');
	}
	else{
		$('s_gesamtkosten_folgejahr').innerHTML = '';
	}		
	
	/* Berechne Kostensenkung / Einsparungen */
	if(isNumeric(gesamtkosten) && isNumeric(gesamtkosten_folgejahr)){
		var kostensenkung = gesamtkosten - gesamtkosten_folgejahr;
		$('s_kostensenkung').innerHTML = formatResult(kostensenkung, 'currency');
	}
	else{
		$('s_kostensenkung').innerHTML = '';
	}
	
	/* set cursor */
	/*
	if($('umsatz').value == ''){
		$('umsatz').focus();
	}
	else{
		if($('r_renditeprozent').value == ''){
			$('r_renditeprozent').focus();
		}
		else{
			if($('r_forderungsausfall').value == ''){
				$('r_forderungsausfall').focus();
			}
			else{
				if($('r_mgmtausgaben').value == ''){
					$('r_mgmtausgaben').focus();
				}		
			}		
		}
	}
	*/

}



/* ----------------------------------------------- */


/* isNumeric gibt TRUE zurueck, wenn das 1. Argument numerisch ist */
function isNumeric(value){
	return !isNaN(value);
}



function resetCalc(){
	$('r_umsatz').value = '';
	$('r_renditeprozent').value = '';
	$('r_forderungsausfall').value = '';
	$('r_mgmtausgaben').value = '';
	calculate();
}



/* formatValue gibt den Wert des Feldes "eid" in Maschninensprache zurueck, und formatiert gleichzeitig den Eingabewert innerhalb von "min" und "max" */
function formatValue(eid, min, max, type){
	var val = $(eid).value;
	val = val.replace(/\'/g, '');  // Apostophe raus
	val = val.replace(/ /g, '');  // Leerschlaege raus
	val = val.replace(/,/g, '.');  // Kommas in Punkte umwandeln
	val = val.replace(/\.\D+$/g, 'x');  // .- am Ende raus 
	val = parseFloat(val);
	
	if(isNaN(val)){
		$(eid).value = '';
		return Number.NaN;
	}
	else{
		if(val < min){
			val = min;
		}
		if(val > max){
			val = max;
		}
		$(eid).value = apostrophiert(val, type);
		return val;
	}
}

/* Formatiert ein berechnetes Resultat */
function formatResult(number, type){
	number = (Math.round(number * 100)) / 100;
	number = parseFloat(number);	
	return apostrophiert(number, type);
}


/* Wandelt eine Nummer in einen apostrophierten String um. Ausserdem Nachkomma-Formatierungen. */
function apostrophiert(number, type){
	number = '' + number;

	// Check, obs Nachkomma-Stellen hat
	var teile = number.split(".");
	if(teile.length == 1){
		nachkomma = '';
	}
	else{
		number = teile[0];
		nachkomma = teile[1];
	}

	// Splitte die Zahl in Tausender-Pakete und setze Apostroph dazwischen
	if (number.length > 3) {
		var mod = number.length % 3;
		var output = (mod > 0 ? (number.substring(0,mod)) : '');
		for (i=0 ; i < Math.floor(number.length / 3); i++) {
			if ((mod == 0) && (i == 0)){
				output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
			}
			else{
				output+= "'" + number.substring(mod + 3 * i, mod + 3 * i + 3);
			}
		}
	}
	else{
		output = number;
	}
	
	// Rueckgabewert formatieren
	if(nachkomma == ''){
		if(type == 'currency'){
			var div = new Element('div').update('&ndash;');
			return output + '.'+ div.innerHTML;
		}
		else{
			return output + '.00';
		}
	}
	else{
		if(nachkomma.length == 1){
			return output + '.' + nachkomma + '0';
		}
		else{
			return output + '.' + nachkomma;
		}
	}
}







