//Funktionen für den deutschsprachigen LIK-Rechner
// on_Feldname wird ausgeführt bei einer Werteänderung des betrreffenden Feldes.
// Damit wird definiert, welche Felder nun automatisch korrigiert werden mit der Funktion update_Folgefeld
// Copyright 2002 by NetConsult AG (ernest.peter@netconsult.ch), all rights reserved

function on_referenzjahr() {
	test_referenzdatum();
	test_daten();
	update_basisindex();
}
function on_referenzmonat() {
	test_referenzdatum();
	update_zieldatum();
	test_daten();
	update_basisindex();
}

function on_zieljahr() {
	test_zieldatum();
	update_basisindex();
}
function on_zielmonat() {
	test_zieldatum();
	update_basisindex();
}
function on_basisindex() {
	update_referenzindex();
	update_zielindex();
	update_veraenderung();
	update_zielbetrag();
}
function on_referenzbetrag() {
	referenzbetrag = document.form.referenzbetrag.value;
	referenzbetrag_zahl = betrag2zahl(referenzbetrag);
	referenzbetrag_gerundet = Math.abs(Math.round(referenzbetrag_zahl));
	if (referenzbetrag_gerundet>=10000000) {
		alert(msg_referenzbetrag_zugross);
		referenzbetrag_gerundet = 9999999;
	}
	else {
		if (referenzbetrag_gerundet!=referenzbetrag_zahl) {
			alert(msg_ganze_franken);
		}
	}
	document.form.referenzbetrag.value = zahl2betrag(referenzbetrag_gerundet);			
	update_zielbetrag();
}
function update_basisindex() {
	var basis = basis_index();
	monat = basisMonat[basis];
	var datum = monate[monat]+" "+basisJahr[basis];
	document.form.basisindex.value = datum;	
	on_basisindex();
}
function update_referenzindex() {
	var selectedItem      = document.form.referenzjahr.selectedIndex;
	var referenzjahr = document.form.referenzjahr.options[selectedItem].value;
	var selectedItem      = document.form.referenzmonat.selectedIndex;
	var referenzmonat = document.form.referenzmonat.options[selectedItem].value;
	var basis = basis_index();	
	if (referenzmonat==0) {
		index = jahres_index(referenzjahr, basis);
	}
	else {
		index = monats_index(referenzjahr, referenzmonat, basis)
	}
	result = round(index, 1);
	document.form.referenzindex.value = result;			
}
function update_zielindex() {
	var selectedItem      = document.form.zieljahr.selectedIndex;
	var zieljahr = document.form.zieljahr.options[selectedItem].value;
	var selectedItem      = document.form.zielmonat.selectedIndex;
	var zielmonat = document.form.zielmonat.options[selectedItem].value;
	var basis = basis_index();	
	if (zielmonat==0) {
		index = jahres_index(zieljahr, basis);
	}
	else {
		index = monats_index(zieljahr, zielmonat, basis)
	}
	result = round(index, 1);
	document.form.zielindex.value = result;			
}

function update_veraenderung() {
	referenzindex = document.form.referenzindex.value;
	zielindex = document.form.zielindex.value;
//	result = round(100*(zielindex/referenzindex)-100, 1);
	result = round(100*((zielindex-referenzindex)/referenzindex),1);
	if (result>0) {
		result = '+'+result;
	}
	document.form.veraenderung.value = round(result, 1);			
}

function update_zielbetrag() {
	referenzbetrag = betrag2zahl(document.form.referenzbetrag.value);
	if (referenzbetrag !='') {
		referenzindex = document.form.referenzindex.value;
		zielindex = document.form.zielindex.value;
		result = Math.round(referenzbetrag*zielindex/referenzindex);
		document.form.zielbetrag.value = zahl2betrag(result);	
	}
}

function test_referenzdatum() {
	var selectedItem      = document.form.referenzjahr.selectedIndex;
	var referenzjahr = document.form.referenzjahr.options[selectedItem].value;
	var selectedItem      = document.form.referenzmonat.selectedIndex;
	var referenzmonat = document.form.referenzmonat.options[selectedItem].value;
	if (referenzmonat>0) {
		if (referenzjahr<1921) {
			alert(msg_monat_vor_1921);
			document.form.referenzmonat.selectedIndex = 0;
		}
		if (referenzjahr==monatsSchlussJahr) {
			if (referenzmonat>monatsSchlussMonat) {
				alert(msg_monat_zu_neu);
				document.form.referenzmonat.selectedIndex = monatsSchlussMonat;				
			}
		}
	}
	if (referenzmonat==0) {
		if (referenzjahr>jahresSchlussJahr) {
			alert(msg_jahr_zu_neu);
			document.form.referenzjahr.selectedIndex = jahresSchlussJahr-jahresAnfangsJahr;							
		}
	}
}

function update_zieldatum() {
	var selectedItem      = document.form.referenzjahr.selectedIndex;
	var referenzjahr = document.form.referenzjahr.options[selectedItem].value;
	var selectedItem      = document.form.referenzmonat.selectedIndex;
	var referenzmonat = document.form.referenzmonat.options[selectedItem].value;
	if (referenzmonat==0) {// falls Jahresdurchschnitt das Zielmonat auf den letzmöglichen Jahresdurchschnitt setzen
		document.form.zieljahr.selectedIndex = jahresSchlussJahr-jahresAnfangsJahr;							
		document.form.zielmonat.selectedIndex = 0;
	}
	else {// falls Monatsindes den Zielmonat auf den letzmöglichen Monat setzen
		document.form.zieljahr.selectedIndex = monatsSchlussJahr-jahresAnfangsJahr;							
		document.form.zielmonat.selectedIndex = monatsSchlussMonat;				
	}
}


function test_zieldatum() {
	var selectedItem      = document.form.zieljahr.selectedIndex;
	var zieljahr = document.form.zieljahr.options[selectedItem].value;
	var selectedItem      = document.form.zielmonat.selectedIndex;
	var zielmonat = document.form.zielmonat.options[selectedItem].value;
	if (zielmonat>0) {
		if (zieljahr<1921) {
			alert(msg_monat_vor_1921);
			document.form.zielmonat.selectedIndex = 0;
		}
		if (zieljahr==monatsSchlussJahr) {
			if (zielmonat>monatsSchlussMonat) {
				alert(msg_monat_zu_neu);
				document.form.zielmonat.selectedIndex = monatsSchlussMonat;				
			}
		}
	}
	if (zielmonat==0) {
		if (zieljahr>jahresSchlussJahr) {
			alert(msg_jahr_zu_neu);
			document.form.zieljahr.selectedIndex = jahresSchlussJahr-jahresAnfangsJahr;							
		}
	}	
	test_daten();
}
function test_daten() {
	var selectedItem      = document.form.referenzjahr.selectedIndex;
	var referenzjahr = document.form.referenzjahr.options[selectedItem].value;
	var selectedItem      = document.form.referenzmonat.selectedIndex;
	var referenzmonat = document.form.referenzmonat.options[selectedItem].value;
	var selectedItem      = document.form.zieljahr.selectedIndex;
	var zieljahr = document.form.zieljahr.options[selectedItem].value;
	var selectedItem      = document.form.zielmonat.selectedIndex;
	var zielmonat = document.form.zielmonat.options[selectedItem].value;
	if (((referenzmonat==0)&&(zielmonat>0))||((zielmonat==0)&&(referenzmonat>0))) {
		alert(msg_unterschiedliche_monate);
		document.form.zielmonat.selectedIndex = referenzmonat;
		test_zieldatum();
	}
	else {
//	alert('zieljahr: '+zieljahr+', referenzjahr: '+referenzjahr+'zielmonat: '+zielmonat+', referenzmonat: '+referenzmonat);
		if ((zieljahr<referenzjahr) || ((zieljahr==referenzjahr) &&(-(-zielmonat)<-(-referenzmonat)))) {// Klammertrick damit Zahlen verglichen werden, nicht Strings
			alert(msg_zieljahr_kleiner_referenzjahr);
			document.form.zieljahr.selectedIndex = referenzjahr-jahresAnfangsJahr;				
			document.form.zielmonat.selectedIndex = referenzmonat;				
		}
	}
}

function basis_index() {
	var selectedItem      = document.form.referenzjahr.selectedIndex;
	var referenzjahr = document.form.referenzjahr.options[selectedItem].value;
	var selectedItem      = document.form.referenzmonat.selectedIndex;
	var referenzmonat = document.form.referenzmonat.options[selectedItem].value;
	for (i=0 ; basisJahr[i]<referenzjahr; i++) {}	
	if ((basisJahr[i] == referenzjahr) && (basisMonat[i] <= referenzmonat)) {
//		alert('Jahr: '+referenzjahr+', Monat: '+referenzmonat+', Basis: '+i);
		return i;
	}
	else {
//		alert('Jahr: '+referenzjahr+', Monat: '+referenzmonat+', Basis: '+i+'-1');	
		return i-1;
	}
}
function monats_index(jahr, monat, basis) {
	return monatsIndex[jahr-monatsAnfangsJahr][monat-1][basis];
}
function jahres_index(jahr, basis) {
	var jahrdiff = jahr-jahresAnfangsJahr;
	return jahresIndex[jahrdiff][basis];
}

function round(number,X) {
// rounds number to X decimal places, defaults to 2
    X = (!X ? 2 : X);
    result = Math.round(number*Math.pow(10,X))/Math.pow(10,X);
// auf eine Stelle runden:	
  	var s = "" + Math.round(result * 10) / 10;
  	var i = s.indexOf('.');
  	if (i < 0) return s + ".0";
	else return s;
}

function zahl2betrag(zahl) {
     zahl= '' + Math.round(zahl);
     if (zahl.length > 3) {
         var mod = zahl.length%3;
         var output = (mod > 0 ? (zahl.substring(0,mod)) : '');
         for (i=0 ; i < Math.floor(zahl.length/3) ; i++) {
             if ((mod ==0) && (i ==0))
                 output+= zahl.substring(mod+3*i,mod+3*i+3);
             else
                 output+= '\'' + zahl.substring(mod+3*i,mod+3*i+3);
         }
         return (output);
     }
     else return zahl;
 }

function betrag2zahl(betrag) {
	betrag= '' + betrag; 
	var output = '';
	for (var i=0 ; (i < betrag.length); i++) {
   		if ((betrag.substring(i, i+1) == '.') || ((betrag.substring(i, i+1) >= '0') && (betrag.substring(i, i+1) <= '9'))) {
   			output+= betrag.substring(i, i+1);
		}
	}
	return (output-0);
}


