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

//Kufer-Icon
Highlight1 = new Image();
Highlight1.src = 'images/kufer.gif';

//Details bei Tool 1
DetailsGray = new Image();
DetailsGray.src = 'images/kursdetailsg.gif';
Details = new Image();
Details.src = 'images/kursdetails.gif';

//Details bei Pfeilvor
VorGray = new Image();
VorGray.src = 'images/vorg.gif';
Vor = new Image();
Vor.src = 'images/vor.gif';

//Details bei Pfeilback
BackGray = new Image();
BackGray.src = 'images/backg.gif';
Back = new Image();
Back.src = 'images/back.gif';

//TN-Liste bei Tool1
ListeGray = new Image();
ListeGray.src = 'images/tnlisteg.gif';
Liste = new Image();
Liste.src = 'images/tnliste.gif';

//Kurstage bei Tool1
KurstageGray = new Image();
KurstageGray.src = 'images/kurstageg.gif';
Kurstage = new Image();
Kurstage.src = 'images/kurstage.gif';

//Anwesenheit bei Tool1
AnwesenheitGray = new Image();
AnwesenheitGray.src = 'images/anwesenheitg.gif';
Anwesenheit= new Image();
Anwesenheit.src = 'images/anwesenheit.gif';

//Ics bei Tool1
IcsGray = new Image();
IcsGray.src = 'images/icsg.gif';
Ics= new Image();
Ics.src = 'images/ics.gif';

//Drucklisten bei Tool1
DrucklistenGray = new Image();
DrucklistenGray.src = 'layout/button_druck_listeng.gif';
Drucklisten= new Image();
Drucklisten.src = 'layout/button_druck_listen.gif';

//HMListen bei Tool5
DruckhmlistenGray = new Image();
DruckhmlistenGray.src = 'layout/button_druck_hmlisteng.gif';
Druckhmlisten= new Image();
Druckhmlisten.src = 'layout/button_druck_hmlisten.gif';

//Button Honorar bei Tool1
DruckhonorarGray = new Image();
DruckhonorarGray.src = 'layout/button_druck_honorarg.gif';
Druckhonorar= new Image();
Druckhonorar.src = 'layout/button_druck_honorar.gif';

//Button Grafiken bei Tool1
DruckgrafikenGray = new Image();
DruckgrafikenGray.src = 'layout/button_druck_grafikeng.gif';
Druckgrafiken= new Image();
Druckgrafiken.src = 'layout/button_druck_grafiken.gif';

//Button Sonstiges bei Tool1
DruckvertraegeGray = new Image();
DruckvertraegeGray.src = 'layout/button_druck_vertraegeg.gif';
Druckvertraege= new Image();
Druckvertraege.src = 'layout/button_druck_vertraege.gif';



//Details auf- bzw. zuklappen bei der WebÜbersicht
Close = new Image();
Close.src = 'images/close.gif';
Closeh = new Image();
Closeh.src = 'images/closeh.gif';

//Raumauslastung bei Tool3
RaumauslastungGray = new Image();
RaumauslastungGray.src = 'images/raumg.gif';
Raumauslastung = new Image();
Raumauslastung.src = 'images/raum.gif';

//BelegungsuebersichtGray bei Tool5
BelegungsuebersichtGray = new Image();
BelegungsuebersichtGray.src = 'images/raumg.gif';
Belegungsuebersicht = new Image();
Belegungsuebersicht.src = 'images/raum.gif';

//Drucker
DruckerGray = new Image();
DruckerGray.src = 'images/printg.gif';
Drucker = new Image();
Drucker.src = 'images/print.gif';

//Drucker klein
DruckerSmallGray = new Image();
DruckerSmallGray.src = 'images/print_smallg.gif';
DruckerSmall = new Image();
DruckerSmall.src = 'images/print_small.gif';

//mehrere TN zu 1 Kurs buchen
BuchenGray = new Image();
BuchenGray.src = 'images/bucheng.gif';
Buchen = new Image();
Buchen.src = 'images/buchen.gif';

//Kurs entbuchen
entBuchenGray = new Image();
entBuchenGray.src = 'images/entbucheng.gif';
entBuchen = new Image();
entBuchen.src = 'images/entbuchen.gif';

//1 TN zu mehreren Kursen buchen
WarenkorbGray = new Image();
WarenkorbGray.src = 'images/warenkorbg.gif';
Warenkorb = new Image();
Warenkorb.src = 'images/warenkorb.gif';

AnmFormGray = new Image();
AnmFormGray.src = 'images/anmformg.gif';
AnmForm = new Image();
AnmForm.src = 'images/anmform.gif';

DozHonGray = new Image();
DozHonGray.src = 'images/dozhong.gif';
DozHon = new Image();
DozHon.src = 'images/dozhon.gif';

DozListGray = new Image();
DozListGray.src = 'images/dozlistg.gif';
DozList = new Image();
DozList.src = 'images/dozlist.gif';

CloseWinGray = new Image();
CloseWinGray.src = 'images/closewing.gif';
CloseWin = new Image();
CloseWin.src = 'images/closewin.gif';

DozAddGray = new Image();
DozAddGray.src = 'images/dozaddg.gif';
DozAdd = new Image();
DozAdd.src = 'images/dozadd.gif';

HelpGray = new Image();
HelpGray.src = 'images/helpg.gif';
Help = new Image();
Help.src = 'images/help.gif';

DeleteGray = new Image();
DeleteGray.src = 'images/deleteg.gif';
Delete = new Image();
Delete.src = 'images/delete.gif';

EditGray = new Image();
EditGray.src = 'images/editg.gif';
Edit = new Image();
Edit.src = 'images/edit.gif';

HausGray = new Image();
HausGray.src = 'images/hausg.gif';
Haus = new Image();
Haus.src = 'images/haus.gif';

BelegungGray = new Image();
BelegungGray.src = 'images/belegungg.gif';
Belegung = new Image();
Belegung.src = 'images/belegung.gif';

CopyGray = new Image();
CopyGray.src = 'images/copyg.gif';
Copy = new Image();
Copy.src = 'images/copy.gif';

OkayGray = new Image();
OkayGray.src = 'images/okayg.gif';
Okay = new Image();
Okay.src = 'images/okay.gif';

function confirmAction (pText, pLink)
{ var result=confirm(pText);
  if (result) window.location.href=pLink;
}

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

// 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 nich 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 ToUpperText(obj)
{ obj.value = obj.value.toUpperCase();
}

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();
}

// 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 CheckUserInput(pToolSectionId)
{
  var datefield1ok = true;
  var datefield2ok = true;
  var alertmessage = 'Das eingegebene Datum ist ungültig! Bitte geben Sie das Datum im Format "TT.MM.JJJJ" an!';
  
  switch (pToolSectionId)
  {
    case 1: // Kursplanung für Dozenten - Kurs bearbeiten
      if (objExists(window.document.getElementsByName('Col_beginn_dat')[0]))
      {
		datefield1ok = isDateValid(window.document.getElementsByName('Col_beginn_dat')[0].value);
        if (window.document.getElementsByName('Col_beginn_dat')[0].value == '') datefield1ok = true;
      }
      if (objExists(window.document.getElementsByName('Col_ende_dat')[0]))
      {
	    datefield2ok = isDateValid(window.document.getElementsByName('Col_ende_dat')[0].value);
		if (window.document.getElementsByName('Col_ende_dat')[0].value == '') datefield2ok = true;      
	  }	
	  if(datefield1ok && datefield2ok) document.FormEditKurs.submit();
      else alert(alertmessage);
      break;

    case 2: // Kurplanung durch HPM - Kurstage hinzufügen
      if (objExists(window.document.getElementsByName('Col_datum')[0]))
      {
        datefield1ok = isDateValid(window.document.getElementsByName('Col_datum')[0].value);
        if (window.document.getElementsByName('Col_datum')[0].value == '') datefield1ok = true;
	  }
	  if(datefield1ok) document.FormAddNewKT.submit();
      else alert(alertmessage);
      break;

    case 3: // Kursplanung für Dozenten - Kursdetails bearbeiten
      if (objExists(window.document.getElementsByName('Col_beginn_dat')[0]))
      {
        datefield1ok = isDateValid(window.document.getElementsByName('Col_beginn_dat')[0].value);
        if (window.document.getElementsByName('Col_beginn_dat')[0].value == '') datefield1ok = true;
	  }
	  if (objExists(window.document.getElementsByName('Col_ende_dat')[0]))
      {
	    datefield2ok = isDateValid(window.document.getElementsByName('Col_ende_dat')[0].value);
        if (window.document.getElementsByName('Col_ende_dat')[0].value == '') datefield2ok = true;
	  }
	  if(datefield1ok && datefield2ok) document.Tool3Kursdetails.submit();
      else alert(alertmessage);
      break;

    case 4: // TN Anmeldung - Einen oder mehrere Teilnehmer zum Kurs buchen
      if (objExists(window.document.getElementsByName('w_Geburtsdatum')[0]))
      { if ((window.document.getElementsByName('w_Geburtsdatum')[0].value == "") || (window.document.getElementsByName('w_Geburtsdatum')[0].value == "..")) datefield1ok = true;
        else datefield1ok = isDateValid(window.document.getElementsByName('w_Geburtsdatum')[0].value); }
      if(datefield1ok) document.Tool6TnToKAnm.submit();
      else alert(alertmessage);
      break;

    case 5: // Kursplanung für HPM - Kurs bearbeiten
      if (objExists(window.document.getElementsByName('Col_beginn_dat')[0]))
      {
        datefield1ok = isDateValid(window.document.getElementsByName('Col_beginn_dat')[0].value);
        if (window.document.getElementsByName('Col_beginn_dat')[0].value == '') datefield1ok = true;
	  }
	  if (objExists(window.document.getElementsByName('Col_ende_dat')[0]))
      {
	    datefield2ok = isDateValid(window.document.getElementsByName('Col_ende_dat')[0].value);
        if (window.document.getElementsByName('Col_ende_dat')[0].value == '') datefield2ok = true;
	  }
	  if(datefield1ok && datefield2ok) document.FormEditKursHPM.submit();
      else alert(alertmessage);
      break;
      
    case 6: // Kursplanung für HPM - Kursdetails bearbeiten
      if (objExists(window.document.getElementsByName('Col_beginn_dat')[0]))
      {
        datefield1ok = isDateValid(window.document.getElementsByName('Col_beginn_dat')[0].value);
        if (window.document.getElementsByName('Col_beginn_dat')[0].value == '') datefield1ok = true;
	  }
	  if (objExists(window.document.getElementsByName('Col_ende_dat')[0]))
      {
	    datefield2ok = isDateValid(window.document.getElementsByName('Col_ende_dat')[0].value);
        if (window.document.getElementsByName('Col_ende_dat')[0].value == '') datefield2ok = true;
	  }
	  if(datefield1ok && datefield2ok) document.Tool8Kursdetails.submit();
      else alert(alertmessage);
      break;

    case 7: // Kursplanung für HPM - DozHonorar bearbeiten
      if (objExists(window.document.getElementsByName('Col_gebdat')[0]))
      { if ((window.document.getElementsByName('Col_gebdat')[0].value == "") || (window.document.getElementsByName('Col_gebdat')[0].value == "..")) datefield1ok = true;
        else datefield1ok = isDateValid(window.document.getElementsByName('Col_gebdat')[0].value); }
      if (objExists(window.document.getElementsByName('Col_dozentseit')[0]))
      { if ((window.document.getElementsByName('Col_dozentseit')[0].value == "") || (window.document.getElementsByName('Col_dozentseit')[0].value == "..")) datefield2ok = true;
        else datefield2ok = isDateValid(window.document.getElementsByName('Col_dozentseit')[0].value); }
      if(datefield1ok && datefield2ok) document.Tool8DozHon.submit();
      else alert(alertmessage);
      break;
      
    case 8: // TN Anmeldung - Einen oder mehrere Teilnehmer zum Kurs buchen
      if (objExists(window.document.getElementsByName('w_Geburtsdatum')[0]))
      { if ((window.document.getElementsByName('w_Geburtsdatum')[0].value == "") || (window.document.getElementsByName('w_Geburtsdatum')[0].value == "..")) datefield1ok = true;
        else datefield1ok = isDateValid(window.document.getElementsByName('w_Geburtsdatum')[0].value); }
      if(datefield1ok) return true; //document.Tool8NewDoz.submit();
      else alert(alertmessage); return false;
  }
}

// notwendig für einige Tools, um am Anfang zwischen Liste und Grafik zu entscheiden
function decideListOrGraphic(p_url,p_target)
{
  var a = true; var b = true; var c = ""; var d = "";

  a = isDateValid(document.getElementsByName("DatVon")[0].value);
  b = isDateValid(document.getElementsByName("DatBis")[0].value);
  if (a && b)
  {
    c = document.getElementsByName("DatVon")[0].value;
    d = document.getElementsByName("DatBis")[0].value;
    ts = "";//Startzeit, nur in Tool 5 - Terminübersicht vorhanden
    te = "";
    if ( document.getElementsByName("starttime")[0] )
      ts = "&starttime=" + document.getElementsByName("starttime")[0].value;
    if ( document.getElementsByName("endtime")[0] )
      te = "&endtime=" + document.getElementsByName("endtime")[0].value;
    if (p_target == "self") window.location.href = p_url + "&DatVon=" + c + "&DatBis=" + d +ts+te;
    else if (p_target == "new") window.open (p_url + "&DatVon=" + c + "&DatBis=" + d +ts+te,"");
  }
  else alert("Ungültiges Datumsformat. Bitte geben Sie das Datum in der Form TT.MM.JJJJ ein!");
}

// notwendig für Tool 5, damit morgen etc. analog Gebäudeübersicht funktioniert
function showPeriodGraphic(p_url,p_target)
{
    ts = "";//Startzeit, nur in Tool 5 - Terminübersicht vorhanden
    te = "";
    if ( document.getElementsByName("starttime")[0] )
      ts = "&starttime=" + document.getElementsByName("starttime")[0].value;
    if ( document.getElementsByName("endtime")[0] )
      te = "&endtime=" + document.getElementsByName("endtime")[0].value;
    if (p_target == "self") window.location.href = p_url + ts+te;
    else if (p_target == "new") window.open (p_url + ts+te,"");
}

// notwendig für Tool5 (ToolRaumUebersicht), um die Grafik für die Belegungen 
// für 1 Gebäude anzuzeigen
function showGraphicForGebaeude(p_url,p_target)
{
  var a = true; var b = "";
  a = isDateValid(document.getElementsByName("DatVon")[0].value);
  if (a)
  {ts = "";//Startzeit, nur in Tool 5 - Raumübersicht vorhanden
    te = "";
    if ( document.getElementsByName("starttime")[0] )
      ts = "&starttime=" + document.getElementsByName("starttime")[0].value;
    if ( document.getElementsByName("endtime")[0] )
      te = "&endtime=" + document.getElementsByName("endtime")[0].value;
    b = document.getElementsByName("DatVon")[0].value;
    if (p_target == "self") window.location.href = p_url + "&DatVon=" + b +ts+te;
    else if (p_target == "new") window.open (p_url + "&DatVon=" + b +ts+te,"");
  }
  else alert("Ungültiges Datumsformat. Bitte geben Sie das Datum in der Form TT.MM.JJJJ ein!");
}

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

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(x, sightid)
{
// Funktion für die Auswahl mit der Kombobox bei den zentralen Einstellungen
   document.location.href = "hleinstell.php?sightid="+sightid+"&tool="+x+"&section=-1";
}

function showRightTable(user_id, sightid)
{
// Funktion für die Auswahl mit der Kombobox bei den Rechten
   if (user_id != -1) document.location.href = "hleinstell.php?sightid="+sightid+"&tool=1&section=5&userid="+user_id;
}

function getCalendarFor(formname, elementname)
{
  var newWindow;
  var urlstring = '../calendar/calendar.php';
  newWindow = window.open(urlstring+'?formname='+formname+'&elementname='+elementname,'','height=220,width=280,toolbar=no,minimize=no,status=no,memubar=no,location=no,scrollbars=no');
}

//*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 getContextMenuKursAnw(event) {
  var srcelement = null;
  if (!event) {
  	event = window.event;
  	srcelement = event.srcElement;
  }
  else {
  	srcelement = event.target;
  }
  var idtraeger = null;
  if (srcelement.parentNode.tagName == 'TR')
  	idtraeger = srcelement;
  else
  	idtraeger = srcelement.parentNode;
  	
  //Kursnummer bestimmen:
  var table = document.getElementById('anwesenheiten');
  var knr = table.title.substring(5);
  //tool_id und toolsection_id
  var adresspart = '&tool_id='+table.tool_id+'&toolsection_id='+table.toolsection_id;
  
  var ids = idtraeger.id;
  var belegungid = extractKeyFromString(idtraeger.id, 'bel');
  var kurstagid = extractKeyFromString(idtraeger.id, 'kt');
  
  if (belegungid != '')
  	adresspart += '&belegid='+belegungid;
  if (kurstagid != '')
  	adresspart += '&tagid='+kurstagid;
  	
  //berechnen des URLParameters mode Unterscheidung wohin geklickt wurde anhand Vorhandensein belegungid/kurstagid
  //0 -> Doppelklick Hauptbereich (td)
  //	 oder Rechtsklick auf Kurstag Header (th mit id kt.., ohne bel)
  //1 -> Rechtsklick TN Header (th mit id bel.., ohne kt)
  //2 -> Rechtsklick Hauptbereich (td)
    
  //beim IE6 ist button immer 0
  //Rechtsklick: (Opera ??? eigentlich: Preferences / Content / JavaScript options... / Allow script to receive right clicks -> trotzdem Dialogfenster nötig)
  if ((event.type && event.type == "contextmenu")) {
    if (kurstagid != '' && belegungid == '')
      adresspart += '&mode=0';
    else if (belegungid != '' && kurstagid == '')
      adresspart += '&mode=1';
    else if (belegungid != '' && kurstagid != '')
      adresspart += '&mode=2';
  	window.open('toolspopup.php?nr='+knr+adresspart, 'mehrereAnwesenheitenFenster', 'height=500,width=650');
  	return false;
  }
  //Linker Doppelklick
  if ((event.button == 0) && (event.type=="dblclick")) {
    adresspart += '&mode=0';
  	window.open('toolspopup.php?nr='+knr+adresspart, 'mehrereAnwesenheitenFenster', 'height=500,width=650');
    return false;
  }
  return false;
}
//Annahme ein key k steht als k oder -k im String, der Wert kommt direkt hinter k,
//falls es weiter hinten noch keys l im String gibt, werden diese mit -l abgegrenzt
//Logische Folge: der Wert darf kein "-" enthalten
function extractKeyFromString(string, key) {
  var index = string.indexOf(key);
  if (index == -1)
  	return '';
  var nextKeyIndex = string.indexOf('-', index + key.length);
  if (nextKeyIndex > -1) //es kommt danach noch ein weiterer key
    return string.substring(index + key.length, nextKeyIndex);//-index-key.length??
  else
    return string.substring(index + key.length);
}

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 Drucklistenausdgabe **********************************************
/****************************************************************************************************


/*********************************************************************************
* 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    
    dat = new Date(intYear,0,1);    // Datum hier initalisiert auf der 1.1 des Jahres
    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;
    eintag = 24*60*60*1000;
	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
    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
  	anzkws =52;
  	
  	if (isSchaltjahr(intYear) == 0) {
 	  if ((firstDay == 4) || (firstDay == 3))
 	    anzkws = 53;
  	}
 	else 
 	  if (firstDay == 4)
 	    anzkws = 53;
 	return anzkws;
  }

function isSchaltjahr(intYear) {
  dat = new Date(intYear,0,1);
  Jhr = dat.getYear();
  Jahr = (Jhr >= 2000) ? Jhr : ((Jhr< 80) ? Jhr + 2000 : Jhr + 1900)
  SJahr = Jahr%4;
  SHJahr = Jahr%100;
  S4Jahr = Jahr%400;
  STag = ((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;		
		}
	else
		for(var i = 1;i<=25;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 Blättern bzw. für ************************
//************ das Markieren von Einträgen über mehrere Seiten hinweg ************

function blaetternKlick(seitenr,suchaction) {
  //suchaction = "starttools.php?tool_id=1&toolsection_id=1&searchkurs=1";
  document.drucklistenform.action = suchaction;
  document.getElementById("seitenr").value = seitenr;
  document.drucklistenform.submit();
}

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 */
function updateSelectBackgroundColor(elem) {
  elem.style.backgroundColor=elem.options[elem.selectedIndex].style.backgroundColor;
}

