// JavaScript-Funktionen für ELWoMS-Formulare
//
//text
//textarea
//checkbox
//radio
//select-one
//select-multiple
//hidden
//file
//password
//
// Index eines Feldes bestimmen. Bei Fehler wird -1 zurückgegeben.
function getIndex (feld) {
	var ergebnis = -1;
	var i = 0;
	if (feld.type == "radio") {
		for (i=0;i<feld.length;i++) {
			if(feld[i].checked == true) {
				ergebnis = i;
			}
		}
	}
	if (feld.type == "select") {
		ergebnis = feld.selectedIndex;
	}
	return ergebnis;
}
// Wert eines Feldes bestimmen
function getWert (feld) {
	var ergebnis = "";
	var i = 0;
	if (feld.type == "text") {
		ergebnis = feld.value;
	}
	if (feld.type == "textarea") {
		ergebnis = feld.value;
	}
	if (feld.type == "checkbox") {
		if (feld.checked) {
			ergebnis = feld.value;
		}
	}
	if (feld.type == "radio") {
		for (i=0; i<feld.length; i++) {
			if (feld[i].checked) {
				ergebnis = feld[i].value;
			}
		}
	}
	if (feld.type == "select-one") {
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].selected) {
				ergebnis += "\t" + feld[i].value;
			}
		}
		ergebnis = ergebnis.replace(/^\t/,"");
	}
	if (feld.type == "select-multiple") {
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].selected) {
				ergebnis += "\t" + feld[i].value;
			}
		}
		ergebnis = ergebnis.replace(/^\t/,"");
	}
	if (feld.type == "hidden") {
		ergebnis = feld.value;
	}
	if (feld.type == "file") {
		ergebnis = feld.value;
	}
	if (feld.type == "password") {
		ergebnis = feld.value;
	}
	return ergebnis;
}

// ########################################################
function getRadio (radioname) {
   wert = -1;
   return (wert);
}
function getInt(numberstring) {
   return(Math.round(getValue(numberstring)));
}
function getOption (optname) {
   index = -1;
   var i = 0;
   for (i=0;i<optname.length;i++) {
      if(optname.options[i].selected == true) {
         index = i;
      }
   }
   return index;
}
function getValue (string) {
   var ergebnis = "";
   var zeichen = "";
   var nonumber = false;
   var i = 0;
   if (string.length > 0) {
      for (i=0;i<string.length;i++) {
         zeichen = string.charAt(i);
         if (zeichen == ".") {zeichen = (i<(string.length-3)) ? "" : ".";}
         if (zeichen == ",") {zeichen = (i>(string.length-4)) ? "." : "";}
         if (zeichen == "." || Number(zeichen) || zeichen == "0" || zeichen == "-") {
            ergebnis = ergebnis + zeichen;
         }
         else {
            if (zeichen != "") {nonumber = true;}
         }
      }
   }
   else {
      ergebnis = "0";
   }
   if (nonumber == false) {
      ergebnis = ergebnis.replace(/^(-?)0+/,"$1");
//      ergebnis = ergebnis.replace(/([^0-9])0/,"$1");
      if (ergebnis != "") {
         return eval(ergebnis);
      }
      else {
         return 0;
      }
   }
   else {
      alert ("Die Eingabe " + string + " kann nicht in eine Zahl umgewandelt werden!");
      return 0;
   }
}
//
function feldWert(feld) {
	return getValue(feld.value);
}
// Intervall-Objekt
// Uwe Gerdes, uwe.gerdes@elwoms.de, (c) ELWoMS Systems GmbH
//
// Aufgabe: Ein Objekt zur Speicherung von zwei Arrays, ein Array enthält Eingabewert, eins die zugeordneten Ausgabewerte. Auf Anfrage gibt das Objekt den entsprechenden Ausgabewert zurück
//
// Planung: Routinen für Eingabewerte, Ausgabewerte, Abfrage.
// Ist der Eingabewert kleiner als der kleinste Eingabewert (oder größer als der größte), wird NaN zurückgegeben.
// Es muß einen Startwert mehr geben als Ausgabewerte. Denn die Intervalle haben Grenzen, die Ausgabewerte sind für den Zwischenraum. Wird ein Eingabewert exakt auf einer Intervallgrenze angegeben, so wird das untere Intervall ausgegeben.
//
function Interval (params,values) {
	if (params.length == values.length+1) {
		this.params = params;
		this.values = values;
		this.getInterval = getInterval;
	}
	else {
		alert("Intervallangaben fehlerhaft: "+params.length+" vs. "+values.length);
	}
}
//
function getInterval (eingabe) {
   var i = 0;
	for (i=0;i<this.params.length;i++) {
		if ((eingabe >= this.params[i]) && (eingabe < this.params[i+1])) {
			return this.values[i];
		}
	}
	return NaN;
}
//
// Bearbeitung der Optionen in einem Select-Feld
function rebuildSelect (feld, values, labels) {
	for (i=feld.length-1; i>=0; i--) {
		feld.options[i] = null;
	}
	if (feld.length == 0) {
		for (i=0; i<values.length; i++) {
			feld.options[feld.length] = new Option(values[i], labels[i], false, false);
		}
	}
}
//
// Bearbeitung der Währungsdarstellung
function waehrungString (wert,rundung) {
   wertString = String(Math.round(wert*Math.pow(10.,rundung))/Math.pow(10.,rundung));
   neuerString = "";
   if (wertString.indexOf(".") == -1) {
      wertString += ".";
   }
   wertString = ((wertString.length - wertString.indexOf(".")) <= rundung) ? wertString+"0" : wertString;
   wertString = ((wertString.length - wertString.indexOf(".")) <= rundung) ? wertString+"0" : wertString;
   wertString = wertString.slice(0,wertString.indexOf(".")+1+rundung);
   index = wertString.indexOf(".");
   wertString = wertString.slice(0,index)+","+wertString.slice(index+1,wertString.length);
   if (index > 3) {
      wertString = wertString.slice(0,index-3) + "." + wertString.slice(index-3,wertString.length);
   }
   if (index > 6) {
      wertString = wertString.slice(0,index-6) + "." + wertString.slice(index-6,wertString.length);
   }
   if (wertString.slice(0,1) == ",") {
      wertString = "0"+wertString;
   }
   return(wertString);
}
//
// Währung setzen
function setWaehrung (feld, stellen) {
	feld.value = waehrungString (getValue(feld.value), stellen);
}
//
// Umrechnungen
// Prüfung auf Datumsbereich
//
function pruefeDatumBereich(datum,beginn,ende) {
	if (pruefeDatum(datum) == false) {
		return -2;
	}
	var datumarray = datum.split(".");
	var datumDatum = new Date(getInt(datumarray[2]),getInt(datumarray[1])-1,getInt(datumarray[0]));
	beginn = getRealDatum(beginn);
	var beginnarray = beginn.split(".");
	var beginnDatum = new Date(getInt(beginnarray[2]),getInt(beginnarray[1])-1,getInt(beginnarray[0]));
	ende = getRealDatum(ende);
	var endearray = ende.split(".");
	var endeDatum = new Date(getInt(endearray[2]),getInt(endearray[1])-1,getInt(endearray[0]));
	if (datumDatum < beginnDatum) {
		return -1;
	}
	if (datumDatum > endeDatum) {
		return +1;
	}
	return 0;
}
//
function pruefeDatumVergleich(datum,beginn) {
	if (pruefeDatum(datum) == false) {
		return -2;
	}
	var datumarray = datum.split(".");
	var datumDatum = new Date(getInt(datumarray[2]),getInt(datumarray[1])-1,getInt(datumarray[0]));
	beginn = getRealDatum(beginn);
	var beginnarray = beginn.split(".");
	var beginnDatum = new Date(getInt(beginnarray[2]),getInt(beginnarray[1])-1,getInt(beginnarray[0]));
	if (datumDatum < beginnDatum) {
		return -1;
	}
	if (datumDatum > beginnDatum) {
		return +1;
	}
	return 0;
}
function getRealDatum (datumstring) {
	var datumteile;
	var differenzen;
	if (pruefeDatum(datumstring) == true) {
		return (datumstring);
	}
	if (datumstring.indexOf("+") > 0) {
		datumteile = datumstring.split("+");
		differenzen = datumteile[1].split(".");
	}
	else {
		datumteile = new Array(datumstring);
		differenzen = new Array("0","0","0");
	}
	var datum = new Date();
	switch (datumteile[0]) {
		case "heute":
			break;
		case "morgen":
			datum.setTime(datum.getTime() + (24*60*60*1000));
			break;
		case "gestern":
			datum.setTime(datum.getTime() - (24*60*60*1000));
			break;
		default:
			datumteilchen = datumteile[0].split(".");
			datum.setYear(getInt(datumteilchen[2]));
			datum.setMonth(getInt(datumteilchen[1])-1);
			datum.setDate(getInt(datumteilchen[0]));
	}
	datumJahr = datum.getYear();
	if (datumJahr < 1000) {
		datumJahr += 1900;
	}
	datum.setYear(datumJahr+getInt(differenzen[2]));
	if ((getInt(differenzen[1]) > 11) || (getInt(differenzen[1]) < -11)) {
	}
	diffMonat = datum.getMonth()+getInt(differenzen[1]);
	if (diffMonat >= 12) {
		datum.setYear(datum.getYear()+1);
		diffMonat -= 12;
	}
	if (diffMonat < 0) {
		datum.setYear(datum.getYear()-1);
		diffMonat += 12;
	}
	datum.setMonth(diffMonat);
	datum.setTime(datum.getTime() + getInt(differenzen[0])*24*60*60*1000);
	datumTag = (datum.getDate()<10) ? "0"+String(datum.getDate()) : String(datum.getDate());
	datumMonat = ((datum.getMonth()+1)<10) ? "0"+String((datum.getMonth()+1)) : String((datum.getMonth()+1));
	datumJahr = datum.getYear()+1900;
	if (datumJahr < 1000) {
		datumJahr += 1900;
	}
	return datumTag+"."+datumMonat+"."+datumJahr;
}
function pruefeDatum (datestring) {
	if (datestring.length == 0) {
		return false;
	}
	if (datestring.search(/^[0-9][0-9][0-9][0-9][0-9][0-9]$/) != -1) {
		var suche = /^([0-9][0-9])([0-9][0-9])([0-9][0-9])$/;
		suche.exec(datestring);
		datestring = RegExp.$1+"."+RegExp.$2+"."+RegExp.$3;
	}
	if ((datestring.search(/^[0-9][0-9]?\.[0-9][0-9]?\.[0-9][0-9]$/) != -1) || (datestring.search(/^[0-9][0-9]?\.[0-9][0-9]?\.[0-9][0-9][0-9][0-9]$/) != -1)) {
		var zeichen = "";
		var nodate = false;
		var dateparts = new Array("","","");
		var datepartsindex = 0;
		if (datestring.length > 0) {
			dateparts = datestring.split(".");
			if (!(dateparts[0]) || !(dateparts[1]) || !(dateparts[2])) {
				return false;
			}
			var tag = getInt(dateparts[0]);
			if ((tag < 1) || (tag > 31)) {
				nodate = true;
			}
			var monat = getInt(dateparts[1]);
			if ((monat < 1) || (monat > 12)) {
				nodate = true;
			}
			var jahr = getInt(dateparts[2]);
			if (jahr < 20) { jahr += 2000; }
			if (jahr < 200) { jahr += 1900; }
			if (jahr > 2100) {
				nodate = true;
			}
			if ((monat <= 0) || (monat > 12)) {
				nodate = true;
			}
			if (tag < 1) {
				nodate = true;
			}
			if ((tag > 29) && (monat == 2)) {
				nodate = true;
			}
			if ((tag > 28) && (monat == 2) && (0 != jahr%4)) {
				nodate = true;
			}
			if ((tag > 30) && ((monat == 4) || (monat == 6) || (monat == 9) || (monat == 11))) {
				nodate = true;
			}
			if (tag > 31) {
				nodate = true;
			}
		}
		else {
			return false;
		}
		if (nodate == false) {
			return true;
		}
		else {
			return false;
		}
	}
	else {
		return false;
	}
}
// Berechnung eines Zeitabstandes
function diffdatum(datum1,datum2) {
	var tagzahlen = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	var differenz = new Array("","","");
	var datum1array = datum1.split(".");
	var datum2array = datum2.split(".");
	differenz[0] = datum2array[0] - datum1array[0];
	differenz[1] = datum2array[1] - datum1array[1];
	differenz[2] = datum2array[2] - datum1array[2];
	if (differenz[0] < 0) {
		differenz[0] += tagzahlen[differenz[1]];
		differenz[1]--;
	}
	if (differenz[1] < 0) {
		differenz[1] += 12;
		differenz[2]--;
	}
	return differenz;
}
function checkDatum (datestring) {
	return pruefeDatum(datestring);
}
function setDatum (feld) {
	if(pruefeDatum(feld.value)) {
		feld.value=getDatum(feld.value);
	}
	else{
		alerthtml("Datumsformat korrigieren (TTMMJJ oder T.M.JJ oder TT.MM.JJJJ)");
		feld.focus();
		feld.select();
	}
	return;
}
function getDatum (datestring) {
	if (pruefeDatum(datestring) == false) {
		alerthtml("Datumsformat korrigieren (TTMMJJ oder T.M.JJ oder TT.MM.JJJJ)");
		return "";
	}
	if (datestring.search(/^[0-9][0-9][0-9][0-9][0-9][0-9]$/) != -1) {
		var suche = /^([0-9][0-9])([0-9][0-9])([0-9][0-9])$/;
		suche.exec(datestring);
		datestring = RegExp.$1+"."+RegExp.$2+"."+RegExp.$3;
	}
	var ergebnis = "";
	var zeichen = "";
	var nodate = false;
	var dateparts = new Array("","","");
	var datepartsindex = 0;
	if (datestring.length > 0) {
		dateparts = datestring.split(".");
		if (!(dateparts[0]) || !(dateparts[1]) || !(dateparts[2])) {
			alerthtml("Datumsformat korrigieren: TT.MM.JJJJ");
			return "";
		}
		var tag = getInt(dateparts[0]);
		var monat = getInt(dateparts[1]);
		var jahr = getInt(dateparts[2]);
		if (jahr < 20) { jahr += 2000; }
		if (jahr < 200) { jahr += 1900; }
		if (jahr > 2100) {
			alerthtml ("Fehler bei Datumserkennung, bitte noch einmal schreiben: TT.MM.JJJJ");
			nodate = true;
		}
		if ((monat <= 0) || (monat > 12)) {
			alerthtml ("Fehler bei Monatsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if (tag < 0) {
			alerthtml ("Fehler bei Monatsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if ((tag > 29) && (monat == 2)) {
			alerthtml ("Fehler bei Datumsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if ((tag > 28) && (monat == 2) && (0 != jahr%4)) {
			alerthtml ("Fehler bei Datumsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if ((tag > 30) && ((monat == 4) || (monat == 6) || (monat == 9) || (monat == 11))) {
			alerthtml ("Fehler bei Datumsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if (tag > 31) {
			alerthtml ("Fehler bei Datumsangabe, bitte Eingabe korrigieren: TT.MM.JJJJ");
			nodate = true;
		}
		if (nodate == false) {
			var tagstring = (tag>9)?String(tag):"0"+String(tag);
			var monatstring = (monat>9)?String(monat):"0"+String(monat);
			var datestring = tagstring+"."+monatstring+"."+String(jahr);
			return datestring;
		}
		return "";
	}
}
function checkPLZ (plz) {
	if (plz.value != plz.value.match(/^[0-9]{5,5}/)) {
		alerthtml("Bitte PLZ-Format prüfen");
	}
}
function checkColor (farbe) {
	if (farbe) {
		if (farbe.value != farbe.value.match(/^[0-9A-Fa-f]{6,6}/)) {
			alerthtml("Bitte Format der Farbangabe prüfen (6 Zeichen 0-9, A-F).");
		}
	}
	else {
		alert('Farbfeld nicht gefunden, Fehler bei Aufruf von checkColor.');
	}
}
function alerthtml(text) {
	alert(html2txt(text));
}
function html2txt(string) {
	if (string) {
		string = string.replace(/&auml;/g,"ä");
		string = string.replace(/&ouml;/g,"ö");
		string = string.replace(/&uuml;/g,"ü");
		string = string.replace(/&Auml;/g,"Ä");
		string = string.replace(/&Ouml;/g,"Ö");
		string = string.replace(/&Uuml;/g,"Ü");
		string = string.replace(/&szlig;/g,"ß");
		string = string.replace(/&quot;/g,'"');
	}
	return string;
}
//
// Hervorhebung von Formularfeldern
function highlightField(feld) {
	feld.style.backgroundColor = "#EFEFFF";
	return;
}
function lowlightField(feld) {
	feld.style.backgroundColor = "#FFFFFF";
	return;
}
//
function openwin(filename,x,y) {
	var xPos = 50;
	var yPos = 50;
	var infoFenster = open(filename, 'Info'+String(Math.round(Math.random()*1000)), 'width='+x+',height='+y+',left='+xPos+',top='+yPos+',directories=no,location=no,menubar=no,personalbar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes');
	if (infoFenster != null) {
		if (infoFenster.opener == null) {
			infoFenster.opener = self;
		}
	}
	infoFenster.focus();
}
// Komplexe Feldfunktionen
function setFieldValue (feld,wert) {
	var ergebnis = "";
	var i = 0;
	if (feld.type == "text") {
		ergebnis = feld.value = wert;
	}
	if (feld.type == "textarea") {
		ergebnis = feld.value = wert;
	}
	if (feld.type == "checkbox") {
		if (feld.value == wert) {
			feld.checked = true;
			ergebnis = wert;
		}
	}
	if (feld.type == "radio") {
		for (i=0; i<feld.length; i++) {
			if (feld[i].value == wert) {
				feld[i].checked = true;
				ergebnis = wert;
			}
			else {
				feld[i].checked = false;
			}
		}
	}
	if (feld.type == "select-one") {
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].value == wert) {
				feld.selectedIndex = i;
				ergebnis = wert;
			}
		}
	}
	if (feld.type == "select-multiple") {
		feld.selectedIndex = -1;
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].value == wert) {
				feld.options[i].selected = true;
			}
		}
alert("Setzen von select-multiple nicht implementiert");
		ergebnis = wert;
	}
	if (feld.type == "hidden") {
		ergebnis = feld.value = wert;
	}
	if (feld.type == "file") {
		ergebnis = feld.value = wert;
	}
	if (feld.type == "password") {
		ergebnis = feld.value = wert;
	}
}
// Wert eines Feldes bestimmen
function getFieldValue (feld) {
	var ergebnis = "";
	var i = 0;
	if (feld.type == "text") {
		ergebnis = feld.value;
	}
	if (feld.type == "textarea") {
		ergebnis = feld.value;
	}
	if (feld.type == "checkbox") {
		if (feld.checked) {
			ergebnis = feld.value;
		}
	}
	if (feld.type == "radio") {
		for (i=0; i<feld.length; i++) {
			if (feld[i].checked) {
				ergebnis = feld[i].value;
			}
		}
	}
	if (feld.type == "select-one") {
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].selected) {
				ergebnis = feld[i].value;
			}
		}
	}
	if (feld.type == "select-multiple") {
		for (i=0; i<feld.length; i++) {
			if (feld.options[i].selected) {
				ergebnis += "\t" + feld[i].value;
			}
		}
		ergebnis = ergebnis.replace(/^\t/,"");
	}
	if (feld.type == "hidden") {
		ergebnis = feld.value;
	}
	if (feld.type == "file") {
		ergebnis = feld.value;
	}
	if (feld.type == "password") {
		ergebnis = feld.value;
	}
	return ergebnis;
}


