/*****************************************/
/*     (c) Kufer Software GmbH     */
/*           Loisachstrasse 4		     */
/*           D-84453 Mühldorf			 */
/*****************************************/

/**
 * *TS(20.11.2012): Hier werden die onMouseOver-Effekte für Bilder vorbereitet.
 * 
 * Dies wurde nun umgebaut, dass nur die Bilder auf der Seite geladen werden, welche
 * auch benötigt werden. Damit jedoch der PHP-Code nicht geändert werden muss, wird für jedes Bild
 * 
 * 1. imgSources['VARIABLENAME'] = 'PFAD/ZUM/BILD.gif';
 * 2. VARIABLENAME = 'VARIABLENAME';
 * 
 * erzeugt.
 * 
 * Wenn das Mitarbeitertool umgezogen ist, dürfte dies hier kaum noch verwendet werden.
 * Dann sollten die Effekte mit jQuery realisiert werden, und dieser Teil hier gelöscht werden.
 */
imgSources = new Array();
imgSources['Highlight1'] = 'images/kufer.gif';
imgSources['DetailsGray'] = 'images/kursdetailsg.gif';
imgSources['Details'] = 'images/kursdetails.gif';
imgSources['VorGray'] = 'images/vorg.gif';
imgSources['Vor'] = 'images/vor.gif';
imgSources['BackGray'] = 'images/backg.gif';
imgSources['Back'] = 'images/back.gif';
imgSources['ListeGray'] = 'images/tnlisteg.gif';
imgSources['Liste'] = 'images/tnliste.gif';
imgSources['KurstageGray'] = 'images/kurstageg.gif';
imgSources['Kurstage'] = 'images/kurstage.gif';
imgSources['AnwesenheitGray'] = 'images/anwesenheitg.gif';
imgSources['Anwesenheit'] = 'images/anwesenheit.gif';
imgSources['NotenGray'] = 'images/noteng.gif';
imgSources['Noten'] = 'images/noten.gif';
imgSources['IcsGray'] = 'images/icsg.gif';
imgSources['Ics'] = 'images/ics.gif';
imgSources['DrucklistenGray'] = 'layout/button_druck_listeng.gif';
imgSources['Drucklisten'] = 'layout/button_druck_listen.gif';
imgSources['DruckhmlistenGray'] = 'layout/button_druck_hmlisteng.gif';
imgSources['Druckhmlisten'] = 'layout/button_druck_hmlisten.gif';
imgSources['MarkierenGray'] = 'layout/button_markiereng.gif';
imgSources['Markieren'] = 'layout/button_markieren.gif';
imgSources['DruckhonorarGray'] = 'layout/button_druck_honorarg.gif';
imgSources['Druckhonorar'] = 'layout/button_druck_honorar.gif';
imgSources['DruckgrafikenGray'] = 'layout/button_druck_grafikeng.gif';
imgSources['Druckgrafiken'] = 'layout/button_druck_grafiken.gif';
imgSources['DruckvertraegeGray'] = 'layout/button_druck_vertraegeg.gif';
imgSources['Druckvertraege'] = 'layout/button_druck_vertraege.gif';
imgSources['DruckteilnehmerGray'] = 'layout/button_druck_teilnehmerg.gif';
imgSources['Druckteilnehmer'] = 'layout/button_druck_teilnehmer.gif';
imgSources['LoadtermineGray'] = 'layout/button_druck_termineg.gif';
imgSources['Loadtermine'] = 'layout/button_druck_termine.gif';
imgSources['MarkierenAlleGray'] = 'layout/button_markieren_alleg.gif';
imgSources['MarkierenAlle'] = 'layout/button_markieren_alle.gif';
imgSources['MarkierenSeiteGray'] = 'layout/button_markieren_seiteg.gif';
imgSources['MarkierenSeite'] = 'layout/button_markieren_seite.gif';
imgSources['MarkierenAlleNichtGray'] = 'layout/button_markieren_alle_nichtg.gif';
imgSources['MarkierenAlleNicht'] = 'layout/button_markieren_alle_nicht.gif';
imgSources['MarkierenSeiteNichtGray'] = 'layout/button_markieren_seite_nichtg.gif';
imgSources['MarkierenSeiteNicht'] = 'layout/button_markieren_seite_nicht.gif';
imgSources['MarkierenRaeumeAlleGray'] = 'layout/button_raeume_markieren_alleg.gif';
imgSources['MarkierenRaeumeAlle'] = 'layout/button_raeume_markieren_alle.gif';
imgSources['MarkierenRaeumeSeiteGray'] = 'layout/button_raeume_markieren_seiteg.gif';
imgSources['MarkierenRaeumeSeite'] = 'layout/button_raeume_markieren_seite.gif';
imgSources['MarkierenRaeumeAlleNichtGray'] = 'layout/button_raeume_markieren_alle_nichtg.gif';
imgSources['MarkierenRaeumeAlleNicht'] = 'layout/button_raeume_markieren_alle_nicht.gif';
imgSources['MarkierenRaeumeSeiteNichtGray'] = 'layout/button_raeume_markieren_seite_nichtg.gif';
imgSources['MarkierenRaeumeSeiteNicht'] = 'layout/button_raeume_markieren_seite_nicht.gif';
imgSources['Close'] = 'images/close.gif';
imgSources['Closeh'] = 'images/closeh.gif';
imgSources['RaumauslastungGray'] = 'images/raumg.gif';
imgSources['Raumauslastung'] = 'images/raum.gif';
imgSources['BelegungsuebersichtGray'] = 'images/raumg.gif';
imgSources['Belegungsuebersicht'] = 'images/raum.gif';
imgSources['DruckerGray'] = 'images/printg.gif';
imgSources['Drucker'] = 'images/print.gif';
imgSources['DruckerSmallGray'] = 'images/print_smallg.gif';
imgSources['DruckerSmall'] = 'images/print_small.gif';
imgSources['BuchenGray'] = 'images/bucheng.gif';
imgSources['Buchen'] = 'images/buchen.gif';
imgSources['entBuchenGray'] = 'images/entbucheng.gif';
imgSources['entBuchen'] = 'images/entbuchen.gif';
imgSources['WarenkorbGray'] = 'images/warenkorbg.gif';
imgSources['Warenkorb'] = 'images/warenkorb.gif';
imgSources['AnmFormGray'] = 'images/anmformg.gif';
imgSources['AnmForm'] = 'images/anmform.gif';
imgSources['DozHonGray'] = 'images/dozhong.gif';
imgSources['DozHon'] = 'images/dozhon.gif';
imgSources['DozListGray'] = 'images/dozlistg.gif';
imgSources['DozList'] = 'images/dozlist.gif';
imgSources['CloseWinGray'] = 'images/closewing.gif';
imgSources['CloseWin'] = 'images/closewin.gif';
imgSources['DozAddGray'] = 'images/dozaddg.gif';
imgSources['DozAdd'] = 'images/dozadd.gif';
imgSources['HelpGray'] = 'images/helpg.gif';
imgSources['Help'] = 'images/help.gif';
imgSources['DeleteGray'] = 'images/deleteg.gif';
imgSources['Delete'] = 'images/delete.gif';
imgSources['EditGray'] = 'images/editg.gif';
imgSources['Edit'] = 'images/edit.gif';
imgSources['HausGray'] = 'images/hausg.gif';
imgSources['Haus'] = 'images/haus.gif';
imgSources['BelegungGray'] = 'images/belegungg.gif';
imgSources['Belegung'] = 'images/belegung.gif';
imgSources['CopyGray'] = 'images/copyg.gif';
imgSources['Copy'] = 'images/copy.gif';
imgSources['OkayGray'] = 'images/okayg.gif';
imgSources['Okay'] = 'images/okay.gif';
Highlight1 = 'Highlight1';
DetailsGray = 'DetailsGray';
Details = 'Details';
VorGray = 'VorGray';
Vor = 'Vor';
BackGray = 'BackGray';
Back = 'Back';
ListeGray = 'ListeGray';
Liste = 'Liste';
KurstageGray = 'KurstageGray';
Kurstage = 'Kurstage';
AnwesenheitGray = 'AnwesenheitGray';
Anwesenheit = 'Anwesenheit';
NotenGray = 'NotenGray';
Noten = 'Noten';
IcsGray = 'IcsGray';
Ics = 'Ics';
DrucklistenGray = 'DrucklistenGray';
Drucklisten = 'Drucklisten';
DruckhmlistenGray = 'DruckhmlistenGray';
Druckhmlisten = 'Druckhmlisten';
MarkierenGray = 'MarkierenGray';
Markieren = 'Markieren';
DruckhonorarGray = 'DruckhonorarGray';
Druckhonorar = 'Druckhonorar';
DruckgrafikenGray = 'DruckgrafikenGray';
Druckgrafiken = 'Druckgrafiken';
DruckvertraegeGray = 'DruckvertraegeGray';
Druckvertraege = 'Druckvertraege';
DruckteilnehmerGray = 'DruckteilnehmerGray';
Druckteilnehmer = 'Druckteilnehmer';
LoadtermineGray = 'LoadtermineGray';
Loadtermine = 'Loadtermine';
MarkierenAlleGray = 'MarkierenAlleGray';
MarkierenAlle = 'MarkierenAlle';
MarkierenSeiteGray = 'MarkierenSeiteGray';
MarkierenSeite = 'MarkierenSeite';
MarkierenAlleNichtGray = 'MarkierenAlleNichtGray';
MarkierenAlleNicht = 'MarkierenAlleNicht';
MarkierenSeiteNichtGray = 'MarkierenSeiteNichtGray';
MarkierenSeiteNicht = 'MarkierenSeiteNicht';
MarkierenRaeumeAlleGray = 'MarkierenRaeumeAlleGray';
MarkierenRaeumeAlle = 'MarkierenRaeumeAlle';
MarkierenRaeumeSeiteGray = 'MarkierenRaeumeSeiteGray';
MarkierenRaeumeSeite = 'MarkierenRaeumeSeite';
MarkierenRaeumeAlleNichtGray = 'MarkierenRaeumeAlleNichtGray';
MarkierenRaeumeAlleNicht = 'MarkierenRaeumeAlleNicht';
MarkierenRaeumeSeiteNichtGray = 'MarkierenRaeumeSeiteNichtGray';
MarkierenRaeumeSeiteNicht = 'MarkierenRaeumeSeiteNicht';
Close = 'Close';
Closeh = 'Closeh';
RaumauslastungGray = 'RaumauslastungGray';
Raumauslastung = 'Raumauslastung';
BelegungsuebersichtGray = 'BelegungsuebersichtGray';
Belegungsuebersicht = 'Belegungsuebersicht';
DruckerGray = 'DruckerGray';
Drucker = 'Drucker';
DruckerSmallGray = 'DruckerSmallGray';
DruckerSmall = 'DruckerSmall';
BuchenGray = 'BuchenGray';
Buchen = 'Buchen';
entBuchenGray = 'entBuchenGray';
entBuchen = 'entBuchen';
WarenkorbGray = 'WarenkorbGray';
Warenkorb = 'Warenkorb';
AnmFormGray = 'AnmFormGray';
AnmForm = 'AnmForm';
DozHonGray = 'DozHonGray';
DozHon = 'DozHon';
DozListGray = 'DozListGray';
DozList = 'DozList';
CloseWinGray = 'CloseWinGray';
CloseWin = 'CloseWin';
DozAddGray = 'DozAddGray';
DozAdd = 'DozAdd';
HelpGray = 'HelpGray';
Help = 'Help';
DeleteGray = 'DeleteGray';
Delete = 'Delete';
EditGray = 'EditGray';
Edit = 'Edit';
HausGray = 'HausGray';
Haus = 'Haus';
BelegungGray = 'BelegungGray';
Belegung = 'Belegung';
CopyGray = 'CopyGray';
Copy = 'Copy';
OkayGray = 'OkayGray';
Okay = 'Okay';

function ChangeImg(Bild,Bildobjekt)
{
  // Ändert das bild in Bild durch das Bild in Bildobjekt
  Bild.src = imgSources[Bildobjekt];
}


function confirmSubmit (pText, pFormname) {
    return confirm(pText);
}

// MK 22.06.2005: Sucht von einem Element die dazugehörige Form und submittet diese
// @currentObject: Element, ab dem gesucht werden soll
// @return: true, wenn Form submitted werden konnte, ansonsten false
function submitParentForm(currentObject)
{ if (!currentObject) return false; // Falls das Objekt nicht existiert, Rekursion verlassen
  // Falls das aktuelle Objekt eine Form ist, diese submitten.
  // Musste leider mit einem String-Vergleich gemacht werden,
  // da JavaScript keine gescheiten Typen-Operatoren hat!
  if (currentObject.nodeName.toLowerCase() == 'form')
  { currentObject.submit();
    return true;
  }
  else
  { // Aktuelles Objekt war keine Form, deshalb rufen wir die Funktion nochmal auf,
    // nur diesmal mit dem übergeordneten Element
  	submitParentForm(currentObject.parentNode);
  }
}

function deepObjCopy (dupeObj) {
  var retObj = new Object();
  if (typeof(dupeObj) == 'object') {
    if (typeof(dupeObj.length) != 'undefined')
      var retObj = new Array();
    for (var objInd in dupeObj) { 
      if (typeof(dupeObj[objInd]) == 'object') {
        retObj[objInd] = deepObjCopy(dupeObj[objInd]);
      } else if (typeof(dupeObj[objInd]) == 'string') {
        retObj[objInd] = dupeObj[objInd];
      } else if (typeof(dupeObj[objInd]) == 'number') {
        retObj[objInd] = dupeObj[objInd];
      } else if (typeof(dupeObj[objInd]) == 'boolean') {
        ((dupeObj[objInd] == true) ? retObj[objInd] = true : retObj[objInd] = false);
      }
    }
  }
  return retObj;
}


function isLeap(year) {
  if ((year%400==0)||((year%4==0)&&(year%100!=0))) 
    {return true;}
  else 
    {return false;}
}

function isDateValid(pDate)
{
  var ret = true;
  var datefields = pDate.split(".");
  if (datefields.length != 3) 
  {
    ret = false;
    return(ret);
  }
  else
  {
	  if (!pDate.match(/\d\d.\d\d.\d\d\d\d/)) ret = false;
	  switch (datefields[1])
	  {
	    default:
	      ret = false;
	      break;
	    case '01':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '02':
		  if (isLeap(datefields[2])) { if (datefields[0] > 29) ret = false; }
	      else                       { if (datefields[0] > 28) ret = false; }
	      break;
	    case '03':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '04':
	      if (datefields[0] > 30) ret = false;
	      break;
	    case '05':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '06':
	      if (datefields[0] > 30) ret = false;
	      break;
	    case '07':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '08':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '09':
	      if (datefields[0] > 30) ret = false;
	      break;
	    case '10':
	      if (datefields[0] > 31) ret = false;
	      break;
	    case '11':
	      if (datefields[0] > 30) ret = false;
	      break;
	    case '12':
	      if (datefields[0] > 31) ret = false;
	      break;
	  }
	  if (!pDate.match(/\d\d.\d\d.\d\d\d\d/)) ret = false;
	  if (pDate.length != 10) ret = false;
	  return(ret);
  }
}

function FormatDate(pDate)
{
  var day = pDate.getDate().toString();
  if (day.length < 2)
  	day = "0" + day;
  	
  var month = pDate.getMonth()+1;
  monthstr = month.toString();
  if (monthstr.length < 2)
  	monthstr = "0" + monthstr;
  return day + "." + monthstr + "." + pDate.getFullYear();
}

function FormatTime(pDate)
{
  var hour = pDate.getHours().toString();
  if (hour.length < 2)
  	hour = "0" + hour;
  var minute = 	pDate.getMinutes().toString();
  if (minute.length < 2)
  	minute = "0" + minute;
  return hour + ":" + minute;
}


// Setzt den Text der Elemente auf ein bestimmtes Datum.
// pType kann folgende Werte annehmen:
// 0: Heute
// 1: Morgen
// 2: Diese Woche
// 3: Nächste Woche
// 4: Diesen Monat
// 5: Nächsten Monat
function getDate(pElement1, pElement2, pType)
{
  var jetzt = new Date();

  switch(pType)
  {
  	case 0: // Heute
  	{  	  
  	  pElement1.value = FormatDate(jetzt);
  	  pElement2.value = FormatDate(jetzt);
  	  break;
  	}
  }
}

function objExists(pObj)
{
  if (pObj) return(true);
  else      return(false);
}

function setRowID(pRow, pID)
{
  // Diese Funktion sorgt dafür, dass die Spalte, über der der Mauszeiger gerade ist, gehighlightet wird
  var theCells = null;
  var c = null;
  var CellCnt = 0;
  var domDetect = false;

  theCells = pRow.cells;
  CellCnt = theCells.length;

  // Abfrage, ob ein DOM-Fähiger Browser verwendet wird
  if ((typeof(window.opera) == 'undefined') && (typeof(theCells[0].getAttribute) != 'undefined')) domDetect = true;
  else domDetect = false;

  for (c = 0; c < CellCnt; c++)
  {
    if (domDetect) theCells[c].setAttribute('id',pID,0);
    else theCells[c].style.backgroundColor = pID;
  }
}

function showToolSub(pToolId, pSightId)
{
// Funktion für die Auswahl mit der Kombobox bei den zentralen Einstellungen
   document.location.href = "hleinstell.php?sightid="+pSightId+"&tool="+pToolId+"&einstieg=1";
}

//*AN; 14.09.07 Prüft ob Druckeingabe eine Zahl ist
function checkZahl(druckeingabe) 
{
  var chkzahl = true;
  for (i=0;i<druckeingabe.length;++i) 
  {  
    if (druckeingabe.charAt(i) < "0" || druckeingabe.charAt(i) > "9" )
      chkzahl = false;
  }
  return chkzahl;
}

// *AN; 14.09.07 notwendig für einige Tools, um für die Druckausgabe die Eingabeparameter zu checken. Falls die
// notwendigen Request Parameter (aktuell, alles, anzahl) im Formular nicht eingegeben wurden, wird das Absenden 
// des Formulars verhindert. Der Aufruf erfolgt wird im Formular mit onSubmit = checkPrintInput() 
function checkPrintInput(p_seitenzahl)
{
  var druckmodus = ""; 
  var druckvon =  "";
  var druckbis =  "";

  if (!document.getElementsByName("druckseiten_modus")[0].checked &&
  	  !document.getElementsByName("druckseiten_modus")[1].checked &&
  	  !document.getElementsByName("druckseiten_modus")[2].checked) {
  	  alert("Sie haben keine Option ausgewählt.");
  	  return false;
  }
  
  if (document.getElementsByName("druckseiten_modus")[2].checked) {
      druckvon = document.getElementsByName("druck_von")[0].value;
      druckbis = document.getElementsByName("druck_bis")[0].value;
      if (druckvon =="" || druckbis =="") 
      {
        alert("Mindestens ein Eingabefeld ist leer. Bitte  eine gültige Seitenzahl zwischen 1 und " + p_seitenzahl +  
              " für die erste bzw. letzte Seite des Ausdrucks eingeben!");  
        return false;      
      }
      if (checkZahl(druckvon) == false  || checkZahl(druckbis) == false )
      {
        alert("Mindestens ein Eingabewert ist keine Zahl. Bitte  eine gültige Seitenzahl zwischen 1 und " + p_seitenzahl +  
              " für die erste bzw. letzte Seite des Ausdrucks eingeben!");
        return false;
      } 
      //Casting auf integer     
      druckvon = druckvon*1;
      druckbis = druckbis*1;
      if (druckvon < 1 || druckvon > p_seitenzahl || druckbis < 1 || druckbis > p_seitenzahl)
      {
        alert("Ihre Seitenangabe liegt außerhalb des gültigen Bereichs. Bitte  eine gültige Seitenzahl zwischen 1 und " + p_seitenzahl +  
              " für die erste bzw. letzte Seite des Ausdrucks eingeben!");
        return false;
      }
      if (druckvon > druckbis)
      {
       alert("Die unter 'von' eingegebene Seitenzahl muß kleiner oder gleich der unter 'bis' eingegebenen Zahl sein!");  
        return false;
      }
      return true;
  }
  return true;
}

function checkInRange(allowedValues, element) {
  if (allowedValues.length<1 || !element.value)
    return false;
  valueArray = allowedValues.split('-');
  for (i=0 ; i<valueArray.length ; i++) {
    if (element.value == valueArray[i]) {
      return true;
    }
  }
  element.value = '';
  return false;
}

/**
 * Öffnet ein neues Fenster, wobei an die übergebene URL noch der Wert des inputs mit der 
 * übergebenen ID drangehängt wird
*/
function openHlWindowWithParam(url, inputID, args) {
  if (inputID == '' || document.getElementById(inputID).value == '') {
  	alert('Es ist noch keine Hinterlegung eingetragen');
  	return false;
  }
  if (args.length == 0)
	window.open(url + document.getElementById(inputID).value);
  if (args.length == 1)
	window.open(url + document.getElementById(inputID).value, args[0]);
  if (args.length == 2)
	window.open(url + document.getElementById(inputID).value, args[0], args[1]);
}


function activate_kanw(event) {
  var srcelement = null;
  if (!event) {
  	event = window.event;
  	srcelement = event.srcElement;
  }
  else {
  	srcelement = event.target;
  }
  //ausgelöst wird ja auf der td und die ID der tr hat das Format: 'kanwzeile'.$lfdnr
  var neueLfd = srcelement.parentNode.id.substring(9);
  
  var alteLfd = document.getElementsByName('chosenIndex')[0].value;
  //editierte Werte zurücksetzen:
  // in die hidden inputs
  getValueFromInputToInput('kanwstatus'+alteLfd, 'kanwstatus');
  getValueFromInputToInput('kanwbemerkung'+alteLfd, 'kanwbemerkung');
  getValueFromInputToInput('kanwzeitvon'+alteLfd, 'kanwvon');
  getValueFromInputToInput('kanwzeitbis'+alteLfd, 'kanwbis');
  getValueFromInputToInput('kanwpause'+alteLfd, 'kanwpause');
  //in die Anzeige, also &nbsp; falls leer
  setAnzeigeFromInputToTD_kanw('kanwstatus', 'kanwzeile'+alteLfd, 0);
  setAnzeigeFromInputToTD_kanw('kanwbemerkung', 'kanwzeile'+alteLfd, 1);
  setAnzeigeFromInputToTD_kanw('kanwvon', 'kanwzeile'+alteLfd, 2);
  setAnzeigeFromInputToTD_kanw('kanwbis', 'kanwzeile'+alteLfd, 3);
  setAnzeigeFromInputToTD_kanw('kanwpause', 'kanwzeile'+alteLfd, 4); 
  //Werte der Anwesenheit übernehmen
  document.getElementsByName('kanwstatus')[0].value = document.getElementById('kanwstatus'+neueLfd).value;
  document.getElementsByName('kanwbemerkung')[0].value = document.getElementById('kanwbemerkung'+neueLfd).value;
  document.getElementsByName('kanwvon')[0].value = document.getElementById('kanwzeitvon'+neueLfd).value;
  document.getElementsByName('kanwbis')[0].value = document.getElementById('kanwzeitbis'+neueLfd).value;
  document.getElementsByName('kanwpause')[0].value = document.getElementById('kanwpause'+neueLfd).value;
  
  //aktuell ausgewählte lfdnr aktualisieren
  document.getElementsByName('chosenIndex')[0].value = neueLfd;
}

/**
 * Value des ZielInputs auf den Value des QuellInputs setzen,
 * wobei ZielInput über ID und QuellInput über Name (erstes Auftreten)
 * angesprochen werden.
 */
function getValueFromInputToInput(zielInputId, quellInputName) {
  document.getElementById(zielInputId).value = document.getElementsByName(quellInputName)[0].value;
}
/**
 * Schreibt den Value des ersten Elements mit Name quellName in den zielLfdNr - ten Kindknoten des 
 * Elements mit zielId, falls der Wert leer ist, wird &nbsp; geschrieben
 */
function setAnzeigeFromInputToTD_kanw( quellName, zielId, zielLfdNr) {
  if (document.getElementsByName(quellName)[0].value != '')
    document.getElementById(zielId).childNodes[zielLfdNr].firstChild.nodeValue = document.getElementsByName(quellName)[0].value;
  else //&nbsp; wegen des Rahmens -> javascript: &nbsp; entspricht \u00a0
    document.getElementById(zielId).childNodes[zielLfdNr].firstChild.nodeValue = '\u00a0';
}

function onSubmitKanwDetail() {
  //Daten aus den Eingabefeldern in die HiddenInputs zurückschreiben und absenden
  var alteLfd = document.getElementsByName('chosenIndex')[0].value;
  getValueFromInputToInput('kanwstatus'+alteLfd, 'kanwstatus');
  getValueFromInputToInput('kanwbemerkung'+alteLfd, 'kanwbemerkung');
  getValueFromInputToInput('kanwzeitvon'+alteLfd, 'kanwvon');
  getValueFromInputToInput('kanwzeitbis'+alteLfd, 'kanwbis');
  getValueFromInputToInput('kanwpause'+alteLfd, 'kanwpause');
  return true;
}

function toggleElemVisibilityByCheckbox(elemId, checkboxId) {
  elem = document.getElementById( elemId );
  checkbox = document.getElementById( checkboxId );
  if (!checkbox.checked) { 
  	elem.style.visibility = "hidden"; }
  else { 
    elem.style.visibility = "visible"; }
}

function getParentTD(elem) {
  if (elem.tagName.toLowerCase() == 'td')
    return elem;
  else
    return getParentTD(elem.parentNode);
}

/**
* Erhöht oder erniedrigt den Wert im Inputfeld mit ID inputID um 1.
* Falls dort keine Zahl eingetragen ist, wird eine entsprechende Meldung ausgegeben.
* @param string inputID id des Inputfelds
* @param bool increase Inhalt erhöhen oder erniedrigen
* @return void
*/
function incOrDecInputById(inputID, increase) {
  var chkzahl = true;
 
  var input = document.getElementById(inputID);

  var value = input.value;
  for (var i=0;i<value.length;++i) {  
    if (value.charAt(i) < "0" || value.charAt(i) > "9" )
    chkzahl = false;
  }

  if (chkzahl && !(input.value==0 && !increase)) {
  	if (increase) {
  		input.value++;
  	}
  	else {
  		input.value--;
  	}
  }
  else {
  	window.alert('Bitte eine positive Zahl ins Eingabefeld eintragen!');
  }
}

/**
* Setzt den Wert des Input Felds auf den Wert, der bei der neu ausgewählten Option gesetzt ist
* @param string pName Name des upzudatenden Input Felds
* @param Element pNode select, das upgedated wird
* @return void
*/
function updateErmProz(pName, pNode) {
  var inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].name == pName) {
      var options = pNode.getElementsByTagName('option');
      for (var j = 0; j < options.length; j++) {
        if (options[j].value == pNode.value) {
          var inhalt = options[j].text;
          var klammerAuf = inhalt.lastIndexOf('(');
          var substr = inhalt.substring(klammerAuf+1);;
          inputs[i].value = substr.substring(0, substr.indexOf(' '));
        }
      }
    }
  }
}


/****************** Funktionen für Drucklistenausgabe **********************************************
/****************************************************************************************************


/*********************************************************************************
* Diese Funktion Berechnet das Datum des ersten und letzten Tages d.h. des Montags 
* und Sonntags der [intWeek]-ten Kalenderwoche
*+des Jahres [intYear] und gibt es als Array von Javascript Date()-Objekt zurück.
* Verwendet wird die DIN 1355 / ISO 8601 Kalenderwochen-Norm
* [intYear] muss nach 1990 sein, wegen Unzulänglichkeiten von Javascript.
*
*********************************************************************************/

function _getWocheVonBis(intWeek,intYear) {
// VORARBEIT    
    var dat = new Date(intYear,0,1);    // Datum hier initalisiert auf der 1.1 des Jahres
    var firstDay = dat.getDay();    // Wochentag für den 1.1. des Jahres
    if( firstDay == 0 ) firstDay = 7; // (1=Montag, 2=Diestag, ..., 7=Sonntag)
// EINGABEPRÜFUNG
    // Date-Objekt verhält sich nur gutartig für Jahre nach 1990
    // Ein jahr hat normalerweise 52 Kalenderwochen nach Definition
    // Ist der 1.1 des Jahres aber ein Donnerstag, hat es 53 Kalenderowchen
    // Negative Kalenderwochen machen keinen Sinn
    if( intYear < 1991 || intWeek<1 || intWeek>53 || (intWeek>52 && firstDay!=4) ) return false;
    var eintag = 24*60*60*1000;
	var einewoche = 7 * eintag;
// BERECHNEN DES STARTDATUMS FÜR DIE ERSTE KALENDERWOCHE
    // Ist der 1.1 später als Donnerstag, startet die erste Kalenderwoche erst am folgenden Montag
    if( firstDay > 4 )
        dat.setTime( dat.getTime() + (8-firstDay) * eintag );
    // Sonst startet die erste Kalenderwoche am Montag vor dem 1.1 bzw. am 1.1 wenn er ein Montag ist
    else
        dat.setTime( dat.getTime() + (1-firstDay) * eintag );
    // Die [intWeek]-te Kalenderwoche ist sieben mal [intWeek] minus eins Tage später als die erste
	  var datAry = new Array(2);
	  dat.setTime( dat.getTime() + (intWeek-1)* einewoche );// Von Datumswert
	  datAry[0] = FormatDate(dat);
	  dat.setTime( dat.getTime() + 6 * eintag); //Bis Datumswert
	  datAry[1] = FormatDate(dat);
// RETURN DES DATUM-OBJEKTS
    return datAry;
}


function Kalwoche(kwNr,kwYear) {
   this.kwNr = kwNr;
   this.kwYear = kwYear;
 }


function incKalwoche(intWeek,intYear,i) {
  	// berechnet Anzahl der Kalenderwochen eines Jahres
  	anzkw = getAnzKalwochenofYear(intYear);
  	sumWeek = intWeek*1 + i;
  	if (sumWeek > anzkw) {
  	  intYear++;
      sumWeek = sumWeek - anzkw;
  	}
  	kwoche = new Kalwoche(sumWeek,intYear);
    return kwoche;	
  }

function getAnzKalwochenofYear(intYear) {
    // gibt wochentagszahl aus  Mo => 1, Di => 2,..., So=> 7
    var dat = new Date(intYear,0,1);    // Datum hier initalisiert auf der 1.1 des Jahres
    var firstDay = dat.getDay();    // Wochentag für den 1.1. des Jahres
    if( firstDay == 0 ) firstDay = 7; // (1=Montag, 2=Diestag, ..., 7=Sonntag)
  	// Normalerweise hat das Jahr 52 KW; falls der 01.01. ein Donnerstag ist hat das Jahr 53 KW;
  	// Bei schaltjahren hat das Jahr auch 53 KW falls der 01.01. ein Mittwoch ist
  	var anzkws = 52;
  	
  	if (isSchaltjahr(intYear) == 0) {
 	  if ((firstDay == 4) || (firstDay == 3))
 	    anzkws = 53;
  	}
 	else 
 	  if (firstDay == 4)
 	    anzkws = 53;
 	return anzkws;
  }

function isSchaltjahr(intYear) {
  var dat = new Date(intYear,0,1);
  var Jhr = dat.getYear();
  var Jahr = (Jhr >= 2000) ? Jhr : ((Jhr< 80) ? Jhr + 2000 : Jhr + 1900);
  var SJahr = Jahr%4;
  var SHJahr = Jahr%100;
  var S4Jahr = Jahr%400;
  return ((S4Jahr == "0") ? (1) : ((SHJahr == "0") ? (0) : ((SJahr == "0") ? (1) : (0))));
}

/**
 * Setzt beim Wechsel der Werte im Select Feld dateFrom und dateTo neu
 * @param {Object} intWeek
 * @param {Object} intYear
 * @param {Object} date1From
 * @param {Object} date1To
 * @param {Object} date2From
 * @param {Object} date2To
 */
function getDateValuesFromKalWoInput(kWeek,kYear,date1From,date1To,date2From,date2To,i) {
  var datVon;  //Datumsstring z.B. 12.01.2008
  var datBis;
  var intWeek = document.getElementsByName(kWeek)[0].value;
  var intYear = document.getElementsByName(kYear)[0].value;
  var datary = _getWocheVonBis(intWeek,intYear);
  datVon = datary[0];
  //alert ("i = " + i);
  if (i==0) {
    datBis = datary[1];
    }
  else {
    biswoche=incKalwoche(intWeek,intYear,i);
    //alert ("biswoche: = " + biswoche.kwNr + ", " + biswoche.kwYear);
    datary = _getWocheVonBis(biswoche.kwNr,biswoche.kwYear);
    datBis = datary[1];
    }
  document.getElementById(date1From).value = datVon;
  document.getElementById(date1To).value = datBis;
  document.getElementById(date2From).value = datVon;
  document.getElementById(date2To).value = datBis;
}

function setFieldsToDisabled(par1,par2,par3,par4) {
	document.getElementById("kwmonat").disabled  = par1;
	document.getElementById("kwnr").disabled  = par2;
	document.getElementById("kwjahr").disabled  = par3;
	document.getElementById("ktdat_von").disabled  = par4;
	document.getElementById("ktdat_bis").disabled  = par4;
	document.getElementById("calvon").disabled  = par4;
	document.getElementById("calbis").disabled  = par4;
}
 
function setZeitSelectDisabled(zbool,i) {
	document.getElementById("selectzeitab1").disabled  = false;
}

function setZeitDisabledChange(i) {
	
	if(document.getElementById("selectzeitab"+i).disabled == true)
		document.getElementById("selectzeitab"+i).disabled = false;
	else
		document.getElementById("selectzeitab"+i).disabled = true;
}

function setOption2Change() {
	
	if(document.getElementById("ein_option2").disabled == true)
		document.getElementById("ein_option2").disabled = false;
	else
		document.getElementById("ein_option2").disabled = true;
}

function setOption7Checked(){
	if(document.getElementById("ein_option7").checked == false)
		document.getElementById("ein_option7").checked = true;
	
}

function setOption6NotChecked(){
	if(document.getElementById("ein_option6").checked == true)
		document.getElementById("ein_option6").checked = false;
}

function setAllDisabled(){
	if(document.getElementById("ein_option26").checked == true) {
		for(var i = 1;i<=25;i++){
			document.getElementById("ein_option"+i).checked = true;
			document.getElementById("ein_option"+i).disabled = true;
		}
		for(var i = 27;i<=28;i++){
			document.getElementById("ein_option"+i).checked = true;
			document.getElementById("ein_option"+i).disabled = true;
		}
	}
	else {
		for(var i = 1;i<=25;i++)
			document.getElementById("ein_option"+i).disabled = false;
		for(var i = 27;i<=28;i++)
			document.getElementById("ein_option"+i).disabled = false;
	}
}

function raumart_fuer(){
	if(document.getElementById("ohne_raumart").checked == true)
		document.getElementById("ohne_raumart").checked = false;
}

function raumart_ohne(){
	if(document.getElementById("nur_raumart").checked == true)
		document.getElementById("nur_raumart").checked = false;
}


//****************** Funktionen für das  ************************
//************ Markieren von Einträgen über mehrere Seiten hinweg ************

function markAction(seitenr,suchaction,markaction) {
  document.drucklistenform.action = suchaction;
  document.getElementById("seitenr").value = seitenr;
  document.getElementById("markerActionID").value = markaction;
  document.drucklistenform.submit();
}

//********** Funktionen für den Farbwechsel bei Selectboxen zur Farbauswahl ********
//********* werden z.B. im Twitter Tool (Tool17 verwendet) *************************

function setColors4Select(selectformname,backgroundcolor,fontcolor) {
  document.getElementsByName(selectformname)[0].style.backgroundColor = backgroundcolor;
  document.getElementsByName(selectformname)[0].style.color= fontcolor;
}

/** Setzt die HintergrundFarbe für das Select auf die Hintergrundfarbe der selektierten Option - jetzt über jQuery gelöst*/
function updateSelectBackgroundColor(elem) {
  elem.style.backgroundColor=elem.options[elem.selectedIndex].style.backgroundColor;
}

/***** Funktion zum Wechsel der Klasse für TableRows beim Highlighten (analog zu KuferWeb) **/
/** wechselt die Klasse zwischen highlight_ein und highlight_aus; ist relevant für die Ausgabe der Anmeldesichten */ 
function setRowClass(pRow, pClass)
{
  pRow.setAttribute('class',pClass,"false");
}

    
 /**
  *  Klasse für Datumsoperationen
  *  Achtung: in Javascript werden Klassen durch Ihren Konstruktor repräsentiert; Es gibt hier kein Schlüsselwort "class"
  */
  function DateOperations() {

    //Klassenvariablen und Funktionen
    this.plusAnzahlMonate = plusAnzahlMonate;
    this.getAnzDay4Month = getAnzDay4Month;
    this.isInArray = isInArray;
    this.CheckUserInput = CheckUserInput;
   
    /**
     * Ermittelt das Datum in n Monaten ausgehend vom eingegebenen Datumswert
     * @param pDatum Datumsobjekt
     * @param int monatsanzahl Zahl der zu addierenden Monate 
     * @return Date Datumsobjekt
     */
    function plusAnzahlMonate (pDatum,monatsanzahl) {
      var day = pDatum.getDate();
      var month = pDatum.getMonth() + 1;
      var year = pDatum.getFullYear();
      var plusmonth = parseInt(month) + parseInt(monatsanzahl);
      
      plusyears = parseInt((plusmonth-1)/12);
      year += plusyears;
      if (plusmonth % 12 != 0)
        plusmonth = plusmonth % 12;
      else
        plusmonth = 12;
      var maxday = this.getAnzDay4Month(plusmonth, year);
      // alert("maxday für monat: " + plusmonth + " im Jahr: " + year + " ist: " + maxday);
      if (day > maxday)
        day = maxday;
      var plusDate = new Date(year,plusmonth - 1,day);
      var DatumFormat = FormatDate(plusDate);
      //alert("plusDatum format: " + DatumFormat);
      
      //var Zeit = new Date(2012,0,15);
      return plusDate;
    }
    
    /**
     * Berechnet die (maximale) Anzahl der Tage eines monats
     * @param int monat  Monatswert zwischen 1 und 12
     * @param int jahr Jahreszahl
     * @return int Anzahl der Tage des angegebenen Monats
     */
    function getAnzDay4Month(monat, jahr) {
      var monatlang = new Array(1,3,5,7,8,10,12);
      var monatkurz = new Array(4,6,9,11);
      if (monat == 2) {
        if (isLeap(jahr))
          return  29;
        return 28;
      }
      if (this.isInArray(monat, monatlang) > 0)
        return 31;
      if (this.isInArray(monat,monatkurz) > 0)
        return 30;
      alert("Falscher Monatswert." + monat + " liegt nicht zwischen 1 und 12.");
      return;
    }

    /**
     *  Ermittelt, ob ein integer Wert in einem Array enthalten ist
     *  @return true, falls Wert im integer Array enthalten ist
     */
    
    function isInArray(value, Ary) {
      var len = Ary.length;
      for (var i = 0;  i<len; i++) {
        if (value == Ary[i])
          return value;
        //continue;  
      }
      return false
    }
  
	//TODO: Falls Input noch irgendwie validiert werden soll, ist diese Funktion noch aufzurufen
	// dann ggf. etwas anpassen
	 
	function CheckUserInput(pVon,pBis) {
	  var datefield1ok = true;
	  var datefield2ok = true;
	  var alertmessage = 'Das eingegebene Datum ist leer oder ungültig! Bitte geben Sie das Datum im Format "TT.MM.JJJJ" an!';
	  datefield1ok = isDateValid(pVon);
	  if (pVon == '') 
	    datefield1ok = false;
	  datefield2ok = isDateValid(pBis);
	  if (pBis == '') 
	    datefield2ok = false;      
	  if (datefield1ok && datefield2ok) 
	    return true; // document.getElementbyId('suchformDiv').submit(); ????
	  else 
	    //alert(alertmessage);
	    showMessage(alertmessage);
	  return false;
	} //end function
   
} // end DateOperations

// Wie $(document).ready, jedoch ohne jQuery. Kann verwendet werden, falls jQuery zu dem Zeitpunkt noch nicht geladen ist.

/**
 * @param {() => void} fn
 */
function docReady(fn) {
    if (document.readyState !== 'loading') {
        fn();
    } else {
        document.addEventListener('DOMContentLoaded', () => {
            fn();
        });
    }
}




