
/**
 *  Stellt Methoden und Handler bereit für das Bearbeiten der Unterrichtsmittel im elektronischen Klassenbuch 
 *  
 */  


  // Konstruktor fuer das Unterrichtsmittel handling
  function UnterrichtsmittelContainer () {
	var WT_TRENNER = '|';
	var WT_LEERZEICHEN = ' ';
    // gibt undefined; warum???
    // this.$lisFuerCheckBox = $('ul.addCheckbox li'); 
   
    
    //Diese Quasi Klassenvariablen existieren auch in den inneren Funktionen und sind dort verwendbar
    var markedRow = 0;
    var markedUpdateRow = 0;
   
    // aktuell eingeloggter Dozent (falls user als Dozent eingeloggt ist), sonst leer
    var aktuellerDozent;
    var doznr; 
    // Click Event oder Double Klick Event
    var eventObj4Unterrichtsmittel;
    
    //Anzeige, ob OK Button im Dialog disabled wird
    var disableOkButton = false;
    
    //Instanzvariablen
    this.oddcolor = '#FFFFFF';
    this.evencolor = '#C8C8C8'; // '#BBBBFF';
    this.aktcolor = '#FFFF00';
    this.aktborder = '2px solid #6C66A4';   // '#FF00FF';
    this.normalborder = '1px solid #828177';
    this.hltablecolor = '#C9C9C9';
    this.hltableborder = '1px solid  #828177';
    
    this.initReadyhandling = initReadyhandling;
    
    // Referenz auf das Instanz-Objekt anlegen, da sich this bei der Ausführung auf die Aufrufumgebung,
    // also z.B. das window-Object oder das Element, dem der entspr. Eventhandler anhängt, bezieht und nicht auf das
    // Instanzobjekt; thisObject dagegen zeigt immer auf das Instanzobjekt (hier Unterrichtsmittelcontainer))
    var thisObject = this;
    //this.initTableLayout = initTableLayout;
    
   // nur Funktion initReadyhandling() soll oeffentlich sein 
  /********************************************************************************
  Initialisiert das Handling für das Laden des Dokuments mit $(document).ready(..)
  *********************************************************************************/
  function initReadyhandling(aktuellerDozent,doznr) {
  
    // initialisieren des Tabellen-Layouts
    initTableLayoutPrivat();
    
   /* Achtung: für die Initialisierung der Zeit in der Slidebar des Timepickers wird keine Einschränkung
      auf eine Kurstagzeit (von, bis) benötigt; falls doch ein vordef. wert verwendet werden soll wie z.B.
      (beginUhrzeit = window.kurstagzeit[0]) ist zu beachten: die Variable window.kurstagzeit ist bei der initialisierung der 
      Unterrichtsmittel noch undefined; sie wird erst später in initAnwesenheitenary() (das aufgerufen wird in getDialogAnzeige
      im AnwesenheitAPI) belegt.
      Der Zeitbereich für die Auswahl mit Timepicker wird hier NICHT eingeschränkt
       */
           
    $('.hasTimePicker','div#dialog_unterrichtsmittel').timepicker({ });

     //Öffnen Button für den Dialog mit den Unterrichtsmitteln
	$('#button_insert').click(function(event) {
	  // Event hier in globaler Variable speichern (ist nötig für den Dialog)
      eventObj4Unterrichtsmittel = event;
      //Beim Insert Datum und Uhrzeit auf alle Fälle neu Vorbesetzen
        
      var $input4Uhrzeit = $('input#uhrzeit','#dialog_unterrichtsmittel');
      var $input4Datum = $('input#datum','#dialog_unterrichtsmittel');
      var $textarea4Unterrichtsmittel = $('textarea#unterrichtsmittel','#dialog_unterrichtsmittel');
      var $input4Anzahl = $('input#anzahl','#dialog_unterrichtsmittel');    
      var $input4Dozent = $('input#dozent','#dialog_unterrichtsmittel');
      var $hiddeninput4Dnr = $('input#dnr','#dialog_unterrichtsmittel');
      var $textarea4Bemerkung = $('#bemerkung','#dialog_unterrichtsmittel');         
	  var jetzt = new Date();
	  $input4Uhrzeit.val(FormatTime(jetzt));
      $input4Datum.val(FormatDate(jetzt));
      $input4Anzahl.val('1');
      // Vorbesetzen mit Dozentennamen und Doznr des aktuell eingeloggten Dozenten
      $input4Dozent.val(aktuellerDozent);
      $hiddeninput4Dnr.val(doznr);
      $textarea4Bemerkung.val('');
      $textarea4Unterrichtsmittel.val('');
    
	  $('#dialog_unterrichtsmittel').dialog('open');
	  // Dialog Titel überschreiben
	  $('#dialog_unterrichtsmittel').dialog('option','title','Neues Unterrichtsmittel:'); 
	  // prevent the default action, e.g., following a link
	  return false;
	});
	  
	 
	  $('textarea#unterrichtsmittel','#dialog_unterrichtsmittel').bind('mouseleave', checkFieldNotEmpty);
	 
	  
	 $('#button_update').click(function(event){
       // Event hier in globaler Variable speichern (ist nötig für den Dialog)
       eventObj4Unterrichtsmittel = event;
       // markiertes TR Element aus der Unterrichtsmitteltabelle
       var $source = $('#untmittelzeile_' + markedRow,'#unterrichtsmittelarea');
       var $target = $('#dialog_unterrichtsmittel');
       
       if (!isempty($source.html())) {
         //Objekt Id ist im td.blockimg versteckt
         objectid = $('td.blockimg',$source).text();
         if (objectid == '') {
           // kopiert die Werte von aus der Tabelle der Unterrichtsdmittelarea in die Inputfelder des Dialogs
           getObjFieldsfromTable2Dialog($source,$target);
           $('#dialog_unterrichtsmittel').dialog('open');
           // Dialog Titel überschreiben
	         $('#dialog_unterrichtsmittel').dialog('option','title','Unterrichtsmittel bearbeiten:');	
	       } 
	       else
	         showMessage('Update ist nur bei neu eingetragenen Werten möglich.', 'Hinweis');
	         // prevent the default action, e.g., following a link
	     }
	     else
	       showMessage('Update ist nicht möglich: kein Eintrag vorhanden', 'Hinweis'); 
	     return false;  
    });
	  
		
	  $('#button_delete').click(function(){
	  var $target = $('tbody','#unterrichtsmittelarea');
      //gelöscht wird nur falls noch ein Eintrag vorhanden ist;
      // alert("isempty targetchild: " + isempty($target.children('tr').html()) + " empty null: " + isempty(null));
      if (!isempty($target.children('tr').html())) {
       // ID als Hidden TD in Tabelle mitschleppen um evtl. bei leerer Id (des Unterrichtsmittels) delete nicht zuzulassen
        $trMarkedLine = $('#untmittelzeile_' + markedRow, $target);
        //Objekt Id ist im td.blockimg versteckt
        objectid = $('td.blockimg',$trMarkedLine).text();
        if (objectid == '')
          deleteEntryfromObjectTable(markedRow,$target,'#unterrichtsmittelarea','#untmittelzeile_');
        else  
          showMessage('Löschen ist nur bei neu eingetragenen Werten möglich.', 'Hinweis');
      } 
      else
	    showMessage('Löschen ist nicht möglich: kein Eintrag vorhanden', 'Hinweis'); 
    });
    

     // Dialog für Einfügen bzw. Bearbeiten von Unterrichtsmitteln
	  $('#dialog_unterrichtsmittel').dialog({ 
	  	autoOpen:  false, 
	  	title:     '', 
	  	width: 400,
	  	modal:     true,
      buttons:   {
				"Ok": function() {
				  if (!disableOkButton) { 
					  // Event hier in globaler Variable speichern
					  var eventobj = eventObj4Unterrichtsmittel;				
					  //alert("eventtype ind dialogupd= " + eventobj.handleObj.type + "; eventtarget: " + eventobj.target + " event tar id: " + eventobj.target.id);
					  
					  //Bei vorausgehendem Click auf das  Bearbeiten Symbol wird ein Eintrag eingefügt
					  if (eventobj.handleObj.type == "click" && eventobj.target.id == "button_insert") 
					    insertEntry2ObjectTable($(this),$('tbody','#unterrichtsmittelarea'));
					  else  //bei dblclick bzw.live Event oder Klick auf #button_update wird nur Update durchgeführt
				  	    updateEntryofObjectTable($(this),$('table','#unterrichtsmittelarea'));
					 $(this).dialog("close");
				  } //end  (!disableOkButton) 
				}, //end function Ok
                                "Abbrechen": function() { $(this).dialog("close"); }
	  	} //end buttons 
	  });
      
	
	/** Handling der Klick-Events: Bei einfachem Klick nur die gewählte Tabellenzelle highlighten (markieren)
	/**  bei Doppelklick: Zelle markieren und Dialog aufrufen 
	/** hierbei: eventhandler an tbody knüpfen; dann muss NICHT fuer jedes neu erzeugte tr Element
    /** ein Eventhandler angehängt werden; Verbesserung ggü.: ('tbody','#unterrichtsmittelarea').click(myHighlight);	     **/
	 
	 var clicks = 0;
	 $(document).on('click', '#unterrichtsmittelarea tbody', function(event) {
				clicks++;
				if (clicks == 1) {
					setTimeout(function(){
						if(clicks == 1) {
						//	$('#log').text('Single-Click Action');
							myHighlight(event);
							eventObj4Unterrichtsmittel = event; // Event hier in globaler Variable speichern
							//alert("eventtype click in clicks= " + event.handleObj.type);
						} else {
						//	$('#log').text('Double-Click Action');
							myHighlight(event);
							// Event hier in globaler Variable speichern
							eventObj4Unterrichtsmittel = event;
							//alert("eventtype dblclick in clicks= " + event.handleObj.type);

							// markiertes TR Element aus der Objekttabelle
                            var $source = $('#untmittelzeile_' + markedRow,'#unterrichtsmittelarea');
                            var $target = $('#dialog_unterrichtsmittel');
                         
                            //Objekt Id ist im td.blockimg versteckt
                            objectid = $('td.blockimg',$source).text();
                            if (objectid == '') {
                              // kopiert die Werte von aus der Tabelle der Unterrichtsdmittelarea in die Inputfelder des Dialogs
                              getObjFieldsfromTable2Dialog($source,$target);
                              $('#dialog_unterrichtsmittel').dialog('open');
                              // Dialog Titel überschreiben
	                          $('#dialog_unterrichtsmittel').dialog('option','title','Unterrichtsmittel bearbeiten:');
	                        }	
                            else
                              showMessage('Update ist nicht möglich, da der Wert bereits in der DB eingetragen ist', 'Hinweis');    
						}
						 //event.preventDefault();
						clicks = 0;
					}, 400);
				}
     });
	  
	 /*
	   Holt die Werte aus der Tabelle für Unterrichtsmittel und schreibt sie in die Inputfelder des  Dialog
	 */
	 function getObjFieldsfromTable2Dialog($source,$target) {
	   /***************** gleiches Handling wie bei $(#button_update).click(...     */
       /* TODO: hier evtl. spaeter auch get_object_vars() verwenden; dazu:
       var objEntry = new UnterrichtsmittelEintrag();
       var objpropertyAry =   get_object_vars(objEntry);
       var  objproplen = objpropertyAry.length;
       var tdelemspart = '';
       foreach (objpropertyAry as prop) {
      
       tdelemspart += '<td class="' + prop + '">' + AryElem.prop + '</td>' ;
       //diesen dann ins <tr..> einfügen 
       }
       *************************************************************************************/
       // Holt Werte aus der Tabelle; Objekt id wird versteckt im td.blockimg mitgeschleppt
       var id = $('td.blockimg',$source).text();
       var datum = $('td.datum',$source).text();
       var uhrzeit = $('td.uhrzeit',$source).text();
       var dozent = $('td.dozent',$source).text();
       var dnr = $('td.dnr',$source).text();
       var anzahl = $('td.anzahl',$source).text();
       var unterrichtsmittel = $('td.unterrichtsmittel',$source).text();
       var bemerkung = $('td.bemerkung',$source).text();
       
       // Besetzt die Inputfelder im Dialog
       $('#datum',$target).val(datum);
       $('#uhrzeit',$target).val(uhrzeit); 
       $('#dozent',$target).val(dozent);
       // Hidden input #dnr muss auch upgedatet werden
       $('#dnr',$target).val(dnr);
       $('#anzahl',$target).val(anzahl);
       $('#unterrichtsmittel',$target).val(unterrichtsmittel);
       $('#bemerkung',$target).val(bemerkung);
	 } 
	  
	  
    // Button für den Dialog mit den hinterlegten Dozenten aus dem Update Fenster heraus
	  $('#button_dozentenakt, #button_dozentenall').click(function() {
	    //Hier highlighten des 1ten Elements
	    $input4Dozentendialog = $('input#dozent','#dialog_unterrichtsmittel');
	    if ($input4Dozentendialog.val() == '')
	      markedUpdateRow = 0;	      
	    // alert("this id: " + $(this).prop('id'));
	    //Standardfärbung für alle anderen Elemente in der HL Tabelle
	    if ($(this).prop('id') == 'button_dozentenakt')
	      var id4dozentendialog = '#dialog_dozentenupdakt';
	    else 
	      var id4dozentendialog = '#dialog_dozentenupdall';
	        
	    $tableBody = $('.dozententable tbody',id4dozentendialog);  
        $tableBody.find('tr').css('background-color',thisObject.hltablecolor);
 
        //neu markiertes Element in der Hinterlegungstabelle highlightn  
	    $aktTrElem = $('#dozzeile_' + markedUpdateRow,id4dozentendialog);
	    $aktTrElem.css('background-color',thisObject.aktcolor);
		$(id4dozentendialog).dialog('open');
		
	    // prevent the default action, e.g., following a link
	    return false;
	  });
  

	  	
	  // Dialog mit den hinterlegten Dozenten für das Fenster zum Update der Unterrichtsmittel
	  $(' #dialog_dozentenupdakt, #dialog_dozentenupdall').dialog({ 
	  	autoOpen:  false, 
	  	title:     'Dozenten:', 
	  	width: 400,
	  	height: 450,
	  	modal:     true,
        buttons:   {
				"Ok": function() { 
				 /* Speichert ggf. mehrere Spalten aus dem Zeileneintrag in der Dozententabelle in verschiedene Inputfelder
				    des Ausgangs Dialogs zurück; hier td.name u. td.id */
				_restoreSelectToDialog(markedUpdateRow, $(this), $('#dozent','#dialog_unterrichtsmittel'),'#dozzeile','name');
				_restoreSelectToDialog(markedUpdateRow, $(this), $('#dnr','#dialog_unterrichtsmittel'),'#dozzeile','id');
				 $(this).dialog("close");}, //end Ok
                                "Abbrechen": function() { $(this).dialog("close"); }
	  	} 
	  	});
	  	
	  	
	  	
	   /* Auswahl des angeklickten Dozenten aus der Dozententabelle (und Highlighten) 
	      Clickhandler ist an DOM element TBody geknüpft	
	     */
	   $('#dialog_dozentenupdakt, #dialog_dozentenupdall').click(function(eventobj){
       eventobj.preventDefault();
       // event.target bezieht sich auf das aktuell angeklickte DOM Element, also:  tr#dozzeile_i td.xxxx
	     // (hier nicht event.currentTarget verwenden; das bezieht sich auf das DOM Element des Clickhandlers, also etwa div#dialog_dozentenupdakt)
	   
	   $aktuellesIdEl = $(this).prop('id'); // ist z.B. dialog_dozentenupdall
	   var $aktTrElem = $(eventobj.target).parents('#' + $aktuellesIdEl + ' tr');
       markedUpdateRow = $aktTrElem.prop('id').split('_')[1];
       
       var $aktTBody = $(this).find('tbody');
       //alert('markedUpdateRow: ' + markedUpdateRow + ' akttr ' + $aktTrElem.html());  
       //Standardfärbung
       $aktTBody.find('tr').css('background-color',thisObject.hltablecolor);
       //Highlighten des akt. Elements
		   $aktTrElem.css('background-color',thisObject.aktcolor); 
		   //$aktTrElem.css({'border':thisObject.aktborder});
    });  	
	  	
	  	
	  	

  } //end initReadyhandling
  
  //****************************************************************************************************
  /* Alle anderen Methoden (außer initReadyHandling) im UnterrichtsmittelContainer sollen privat bleiben
  /*  daher nicht mit this....   zur Verfuegung stellen                                       **********/
  
    // wird hier anonym deklariert; waere auch anders mgl.
   function initTableLayoutPrivat() {
      var $aktTabcontent = $('#unterrichtsmittelarea table');

      //alert("in initTableLayout Eigenschaft: " + thisObject.eigenschaft);
      $('tr',$aktTabcontent).css('border',thisObject.normalborder);
      $('tr:even',$aktTabcontent).css('background-color',thisObject.evencolor);
      $('tr:odd',$aktTabcontent).css('background-color',thisObject.oddcolor);
    
      var zeilenid = 0;
      $aktelem = $('tr#untmittelzeile_' + zeilenid, $aktTabcontent);
	  $aktelem.css({'border':thisObject.aktborder});
	  //$('td:not(.blockimg)',$aktelem).css('background-color','yellow');
	  $aktelem.css('background-color',thisObject.aktcolor);
	  
	  // Falls Objekt Id bereits vorhanden (d.h. Eintrag in DB) ist, werden der delete und Update Button ausgegraut,
	  // da für einen solchen eintrag Löschen u. Updaten nicht mehr mgl. sein soll 
	  var $img4update = $('img#button_update','div#buttonleiste_vert');
	  var $img4delete = $('#button_delete','div#buttonleiste_vert');
	  
	  //!!!!Achtung: hier darf im Body auch kein Quellcode Zeilenumbruch (also \n) stehen
	  if (isempty($aktTabcontent.children('tbody').text())) {
	    $img4update.prop('src','images/editg.gif');
	    $img4delete.prop('src','images/loescheng.gif');
	  }
	  else {
	    var objectid = $('td.blockimg',$aktelem).text();

	    if (objectid != '') {
	      $img4update.prop('src','images/editg.gif');
	      $img4delete.prop('src','images/loescheng.gif');
	    }
	    else {
	      $img4update.prop('src','images/edit.gif');
	      $img4delete.prop('src','images/loeschen.gif');
	    }
	  }    
    markedRow = zeilenid;
  }
    
   
   // Löscht einen Eintrag aus der Objekt Tabelle und reorganisiert diese
   function deleteEntryfromObjectTable(zeilenindex,$target,id4ObjTable,id4ObjZeile) {
    // z.B. id4ObjTable = '#unterrichtsmittelarea'; id4ObjZeile = '#untmittelzeile_'
    var removestr = id4ObjZeile + zeilenindex;
    var $tableTr = $('tr',id4ObjTable);
    var $delTrValue = $(removestr,$target);
    // Dieser Wert muß evtl. noch aus anderen Input Einträgen entfernt werden
    var $delTdInhalt = $('td.unterrichtsmittel',$delTrValue);
    $tableTr.remove(removestr);
    
     //Tabelle reorganisieren, falls noch ein Eintrag vorhanden ist 
     //jetzt die neuen Kinder zum Ermitteln der übriggebliebenen TableRows 
     $tableTrNew = $target.children();
     tablelen = $tableTrNew.length;
 
     //hier z.B.: 'untmittelzeile' statt '#untmittelzeile' verwenden, d.h. 1tes Zeichen aus String weglassen
     zeilenstr = id4ObjZeile.substr(1);
     $tableTrNew.each( function(index) {
        $(this).prop('id',zeilenstr + index);
     });
     
     //Standardfärbung
     $target.find('tr:even').css('background-color',thisObject.evencolor);
     $target.find('tr:odd').css('background-color',thisObject.oddcolor);
     // Nach dem Löschen die Markierung auf das 1te Element in der Tabelle setzen, da das bisher markierte
     // dann nicht mehr vorhanden ist
     markedRow = 0;
     $aktTrNew =  $target.find(id4ObjZeile + markedRow);
     $aktTrNew.css({'border':thisObject.aktborder});
     $aktTrNew.css('background-color',thisObject.aktcolor);

     /* ACHTUNG: wird nicht mehr gebraucht; besserer Mechanismus mit Fkt. generiereHiddenString */
	  // Beim Löschen das Object Hidden Feld updaten (hier für Unterrichtsmittel)	 
	  // updateHiddenObjectField(zeilenindex, '', null,'#unterrichtsmittel_hidden');
   } //end function


    // ACHTUNG!!!! bezieht sich auf TBODY Element
	  // Markiert das aktuell ausgewählte Tabellenfeld
    // hier wird zum Ermitteln des aktuell angeklickten Elements event.target verwendet
  function myHighlight(eventobj) {
	   //Hier gilt: $(this) ist ein  Tbody Element
	   // event.target bezieht sich auf das aktuell angeklickte DOM Element, also tr#untmittelzeile_i
	   // (hier nicht event.currentTarget verwenden; das bezieht sich auf das DOM Element des Clickhandlers,
     //  also tbody)
     $aktTBody = $(eventobj.currentTarget);
	 $aktTrElem = $(eventobj.target).parents('#unterrichtsmittelarea tr');
     // alert ('eventtyp in highlight:  ' + eventobj.handleObj.type + ' //  aktbody: ' + $aktTBody.html());
     var zeile = $aktTrElem.prop('id');
     var zeilenid = zeile.split('_')[1];
    
     //aktTable ersetzt this
     var $aktTable = $('tbody','#unterrichtsmittelarea');
     
     //Hier wird die Markierung fuer alle Geschwister zurueckgesetzt; mgl. waere auch ein Ruecksetzen aller
     //Tr Elemente durch Auswahl von $(this).parent().children();
     var $allTrElemensinTable = $aktTable.children();
     $allTrElemensinTable.each( function() { 
       $(this).css('border',thisObject.normalborder);
      });
     //Standardfärbung
     $aktTBody.find('tr:even').css('background-color',thisObject.evencolor);
     $aktTBody.find('tr:odd').css('background-color',thisObject.oddcolor);
     //Das ausgewählte Tabellenelement  gesondert markieren
	 $aktTrElem.css({'border':thisObject.aktborder});
	 //$('td:not(.blockimg)',$aktelem).css('background-color','yellow');
     $aktTrElem.css('background-color',thisObject.aktcolor);
     markedRow = zeilenid;
    
	 // Falls Objekt Id bereits vorhanden (d.h. Eintrag in DB) ist, werden der delete und Update Button ausgegraut,
	 // da für einen solchen eintrag Löschen u. Updaten nicht mehr mgl. sein soll 
	 var objectid = $('td.blockimg',$aktTrElem).text();
	 $img4update = $('img#button_update','div#buttonleiste_vert');
	 $img4delete = $('#button_delete','div#buttonleiste_vert');
	 if (objectid != '') {
	   $img4update.prop('src','images/editg.gif');
	   $img4delete.prop('src','images/loescheng.gif');
	 }
	 else {
	   $img4update.prop('src','images/edit.gif');
	   $img4delete.prop('src','images/loeschen.gif');
	 }
  } // end myHighlight
	 
	 
  //Rückspeichern des gewählten Selectfelds in die Dialogfelder für die Dozentenauswahl  
  function _restoreSelectToDialog($zeilenindex, $source, $target,id4zeile, class4td) {
    //z.B. id4zeile = 'dozzeile'; class4td = 'name'
    // target ist input#update_medium im Dialogfeld zum Bearbeiten eines Mediums
    // alert("target: " + $target.prop("name") + ' mit Wert: ' + $target.val());
    var objinhalt = '';
    var $selectedTr = $(id4zeile + '_' + $zeilenindex,$source);
    var $tdinhalt = $('.' + class4td,$selectedTr);
    objinhalt = $tdinhalt.text();
    if (objinhalt != '')
      $target.val(objinhalt);
  }
	 
	 
	/* Speichert die Werte aus dem Dialog für Unterrichtsmittel im Objekt-Eintrag i ab
	   hier: Objekt für Unterrichtsmittel                    
	   Achtung!!: die Objekt id wird hier nicht gebraucht; wird nur in updateHiddenObjectField verwendet  
	 */
	function _restoreInput2Array($source) { 
     var objentry = new UnterrichtsmittelEintrag();
     
	  var objary = new Array();
	  var $datinput = $('#datum',$source);
	  var $uhrzeitinput = $('#uhrzeit',$source);
	
	  var $dozinput = $('#dozent',$source);
	  //dnr wird als hidden input im Dialog für Unterrichtsmittel mitgeliefert
	  var $dnrinput = $('#dnr',$source);  
	  var $anzinput = $('#anzahl',$source);
	  var $input = $('#unterrichtsmittel',$source);
	  var $beminput = $('#bemerkung',$source);
	  //Hauptinput sind die Unterrichtsmittel; Array enthält nur ein Element oder gar keins
	  if ($input.val() != '') {
        objentry.datum = $datinput.val();
        objentry.uhrzeit = $uhrzeitinput.val();
        objentry.dozent = $dozinput.val()
        objentry.dnr = $dnrinput.val() 
        objentry.anzahl = $anzinput.val();
        objentry.unterrichtsmittel = $input.val();
        objentry.bemerkung = $beminput.val();
        objary[0] = objentry;
      }
	  return objary;
	}
	
	// Konstruktorfunktion fuer einen einzelnen Unterrichtsmitteleintrag
	function UnterrichtsmittelEintrag() {
	  this.id = '';
      this.datum = '';
      this.uhrzeit = '';
      //  Dozent und dnr sind 2 attribute zum selben Objekt, nämlich Dozent; daher werden sie bei der Länge nur als 1 gezählt;
      // dozent wird benötigt zur Anzeige im Tabellenfeld; dnr wird für den Hidden Input String zum Abspeichern in der DB benötigt
      this.dozent = '';
      this.dnr = '';
      this.anzahl = '';
      this.unterrichtsmittel = '';
      this.bemerkung = '';
      this.getObjlength = getObjlength;
  }
  
  /*
    liefert die Länge des Objekts (hier: UnterrichtsmittelEintrag)
  */
  function getObjlength() {
    anzahlObjElems = 7;
    return anzahlObjElems;
  }
  
  /* Fügt die Werte aus dem Dialog für das Objekt (hier: Unterrichtsmittel) in die Tabelle der ausgewählten 
     Unterrichtsmittel ein  */
  function insertEntry2ObjectTable($source, $target) {
    var ObjAry = new Array();
    ObjAry = _restoreInput2Array($source);

    //Danach Objekte aus dem Array in die ObjektTable übernehmen (hier: Unterrichtsmittel)
    fillObjTablefromArray(ObjAry,$target);
    
    // Falls Objekt Id bereits vorhanden (d.h. Eintrag in DB) ist, werden der delete und Update Button ausgegraut,
	// da für einen solchen eintrag Löschen u. Updaten nicht mehr mgl. sein soll 
	var $img4update = $('img#button_update','div#buttonleiste_vert');
	var $img4delete = $('#button_delete','div#buttonleiste_vert');
	
	// $target ist hier #unterrichtsmittelarea tbody
	//!!!!Achtung: hier darf im Body auch kein Quellcode Zeilenumbruch (also \n) stehen
	if (!isempty($target.text())) {
	  $img4update.prop('src','images/editg.gif');
	  $img4delete.prop('src','images/loescheng.gif');
	} 
  }//end insertEntry2ObjectTable
    
  
  /* Holt die Werte aus dem Objekt Array und fügt sie in die Tabelle der ausgewählten Objekte ein  
    hier: verwendet als Input ein Array von UnterrichtsmittelEinträgen
  */ 
  function fillObjTablefromArray(objary,$target) {
   // hier objary ist Array von Unterrichtsmitteln, wobei es nur ein Element ist, da nur
   // ein Unterrichtsmitteleintrag
   var objlen = objary.length;
   /* Beste Variante:   last-child Selektor  */
   var $lasttrchild = $('tr:last-child',$target);
   
   var removelastentry = false;
   if ($lasttrchild.is(':not(' + null + ')')) {
     /* alert ("Targetindex: " + $lasttrchild.index('tr:last-child') + " has td: " + $lasttrchild.has('td').html() ); */
     var firstindex = 0;
     // Gibt die Position an ab der die Indizes als zeilen id attribut in das <tr> Element eingefügt werden sollen
     var position4insert = $('tr',$target).index($lasttrchild);
  
     // Hier muss das tr- Element vorher korrekt angelegt worden sein, also z.B. <tr id = "untmittelzeile_1">
     // Ein Zeileneintrag ohne <td>s oder mit leeren tds wird entfernt, da er falsch ist
     if ($lasttrchild.has('td').html() != null) {
         //falls das einzige tr Element leer ist, wird zunächst dieses aufgefüllt;
         if ($('td.unterrichtsmittel',$lasttrchild).text() == '') {
           if (objlen >=1)
             removelastentry = true;      
         }
       }  //end if lasttrchild has td
     
     var offset4remove = 0
       //alert ("lasttrchild cmp: " + $lasttrchild.is(':not(' + null +')') + " objlen: " + objlen); 
       //letzten Eintrag nur einmal entfernen
     if (removelastentry == true) {
       $lasttrchild.remove();
       //jetzt das letzte Kind nach dem Enfernen nehmen (also das voher vorletzte)
       $lasttrchild = $('tr:last-child',$target);
       removelastentry = false;
       offset4remove = 1;
     }
              
     if (position4insert > 0 ) {
       for (var i = objlen -1 ; i >= 0; i--) {
         var zeilind = position4insert + i + 1 - offset4remove;
         // HTML-String Darstellung fuer das neue TR Element, das hinten angehängt wird 
         var $neuesTr = getNewTrElement(objary[i],zeilind);
         
        //  $neuesTr.click(myHighlight4singleTr);
          $lasttrchild.after($neuesTr);   
       }
     } //end if position4insert > 0
     
     // jetzt ist ein leeres tr Element (ohne td Inhalt) enthalten das zunächst gelöscht wird
     else {
       //hier wurde das Element enfernt, wenn es leer war (s.o.)
       for (i=0 ; i < objlen; i++) {
         var zeilind = position4insert + i + 1 - offset4remove;
         var $neuesTr = getNewTrElement(objary[i],zeilind);
         
         //$neuesTr.click(myHighlight4singleTr);                
         $target.append($neuesTr);   
       }    //end for  
     } //end else
   } // end if is(':not(null)')
   
   // Tabelle mit Objekten (hier: Unterrichtsmitteln) ist  komplett leer (enthält nicht mal tr Elemente)
   else {
     for (i=0 ; i < objlen; i++) {
        var $neuesTr = getNewTrElement(objary[i],i);
       // $neuesTr.click(myHighlight4singleTr);
        $target.append($neuesTr);
      }
    }
   
   /* ACHTUNG: wird nicht mehr gebraucht; besserer Mechanismus mit Fkt. generiereHiddenString */
    //Beim Einfügen von Zeilen das Object Hidden Feld updaten (für Unterrichtsmittel)	 
  /*  for(i = 0; i < objlen; i++) {
    	 updateHiddenObjectField(-1, objary[i].unterrichtsmittel, objary[i],'#unterrichtsmittel_hidden');
    }           */
    //ungerade und gerade Zeilen farblich markieren
    $('tr:even',$target).css('background-color',thisObject.evencolor);
    $('tr:odd',$target).css('background-color',thisObject.oddcolor);
    $('tr',$target).css('border',thisObject.normalborder);
    $aktelem = $('#untmittelzeile_' + markedRow, $target);
	  $aktelem.css({'border':thisObject.aktborder});
	  //$('td:not(.blockimg)',$aktelem).css('background-color','yellow');
	  $aktelem.css('background-color',thisObject.aktcolor);
  } //end fillObjTablefromArray(  )


  /**
     liefert ein neu angelegtes <TR> Element für die Tabelle
     AryElem ist hier ein UnterrichtsmittelEintrag
     Hinweis: Für das Dozentenfeld wird hier der Dozentenname aus dem Unterrichtsmittel 
     Objekt verwendet (nicht die dnr); die Objekt id wird im td.blockimg versteckt
  */
  function getNewTrElement(AryElem,index) {
    /* TODO: hier evtl. spaeterauch get_object_vars() verwenden; dazu:
    var objEntry = new UnterrichtsmittelEintrag();
    var objpropertyAry =   get_object_vars(objEntry);
    var  objproplen = objpropertyAry.length;
    var tdelemspart = '';
    foreach (objpropertyAry as prop) {
      
      tdelemspart += '<td class="' + prop + '">' + AryElem.prop + '</td>' ;
     //diesen dann ins <tr..> einfügen 
    }
    *************************************************************************************/
    
    /* TODO: hier evtl. untmittelzeile noch parametriesieren  */
    
    $newtr = $('<tr id = "untmittelzeile_' + index + '"><td class="blockimg">' + AryElem.id + '</td>' +
                        '<td class="datum">' + AryElem.datum + '</td>' +
                        '<td class="uhrzeit">' + AryElem.uhrzeit + '</td>' +
                        '<td class="dozent">' + AryElem.dozent + '</td>' +
                        '<td class="anzahl">' + AryElem.anzahl + '</td>' +
                        '<td class="unterrichtsmittel">' + AryElem.unterrichtsmittel + '</td>' +
                        '<td class="bemerkung">' + AryElem.bemerkung + '</td>'+
                        '<td class="dnr">' + AryElem.dnr + '</td>' +
                        '</tr>');
    markedRow = index;                    
    return $newtr;
  }


  /**
     ändert den Inhalt der Tabellenobjekte
     das sind hier Zeilen mit Unterrichtsmittel Elementen
     Hinweis: Für das Dozentenfeld (td.dozent) wird hier der Dozentenname aus dem Unterrichtsmittel 
     Objekt verwendet (nicht die dnr)
     Achtung!!: die Objekt id wird hier nicht gebraucht; wird nur in updateHiddenObjectField verwendet
  */
  function updateEntryofObjectTable($source,$target) {
    
    var $updateelement = $('tr#untmittelzeile_' + markedRow,$target);
    //alert ("markedRow: " + markedRow + "updateelem: " + $updateelement.html());
    var objentry = new UnterrichtsmittelEintrag();
     /* TODO:  hier spaeter die Objekt variablen direkt aus dem Objekt holen mit get_object_vars(objEntry)
      evtl. noch foreach verwenden
     var objpropertyAry =   get_object_vars(objEntry);
     var objproplen = objpropertyAry.length;
     alert("objproplen: " + objproplen);
     for (var i = 0; i < objproplen; i++) {
       alert(" Objektvar_ " + i + " : " + objpropertyAry[i]);
       //dann eine Zuweisung wie z.B hier, das dann die Zuweisungen unten ersetzt
       objentry.objpropertyAry[i] = $('#' + objpropertyAry[i],$source).val();
       // hier:  evtl die ids noch per Fkt. anpassen
     }
     /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
   
	 
	objentry.datum = $('#datum',$source).val();
	objentry.uhrzeit = $('#uhrzeit',$source).val();
	objentry.dozent = $('#dozent',$source).val();
	// Dozentennr. wird aus dem hidden Feld des Dialogs geholt; wird für den Hidden Input  string verwendet
	objentry.dnr = $('#dnr',$source).val();
	objentry.anzahl = $('#anzahl',$source).val();
	objentry.unterrichtsmittel = $('#unterrichtsmittel',$source).val();
	objentry.bemerkung = $('#bemerkung',$source).val();
 
    // Hauptfeld muß gefüllt sein damit die werte in der Tabelle ueberhaupt upgedated werden
    var objvalue = objentry.unterrichtsmittel;
    var bemvalue =   $('#untmittel_bem',$source).val();
        
    //nur falls ein Wert für Medium enthalten ist, wird dieser und die Bemerkung eingetragen
    if (objvalue != '') {
      $('td.datum',$updateelement).text(objentry.datum);
      $('td.uhrzeit',$updateelement).text(objentry.uhrzeit);
      $('td.dozent',$updateelement).text(objentry.dozent);
      $('td.dnr',$updateelement).text(objentry.dnr);
      $('td.anzahl',$updateelement).text(objentry.anzahl);
      $('td.unterrichtsmittel',$updateelement).text(objvalue);
      $('td.bemerkung',$updateelement).text(objentry.bemerkung);
      
      /* ACHTUNG: wird nicht mehr gebraucht; besserer Mechanismus mit Fkt. generiereHiddenString */
     //Beim Update eines Zeileneintrags das Object Hidden Feld updaten (für Unterrichtsmittel)
     // updateHiddenObjectField(markedRow, objvalue, objentry,'#unterrichtsmittel_hidden');	
    }
  }  //end updateEntryofObjectTable


  //Prüft, ob das Eingabefeld (für Unterrichtsmittel leer ist)
  function checkFieldNotEmpty() {
    var textvalue = $('textarea#unterrichtsmittel').val();
    var eingabe = true;
    var errortext = '';
    if (textvalue == '') {
      errortext = 'Bitte ein Unterrichtsmittel eingeben';
      eingabe = false
      showFaultMessageinDialog(false,errortext);
    }
    showFaultMessageinDialog(eingabe,errortext);
    return eingabe;
  }


   /**
    * Gibt eine Fehlermeldung im Dialog aus und blockiert gleichzeitig den OK Button
    * @param boolean pEingabe Angabe, Eingabewert fehlerhaft ist
    * @param string Error Text
    */
    function showFaultMessageinDialog(pEingabe,pErrortext) {
      var $dialogfaultfield = $('#dialogfault','#dialog_unterrichtsmittel');
      if (pEingabe == false) { 
         //alert("dialogfaulfield: " + $dialogfaultfield.html());
         //Falls noch kein Faultfield im DOM Baum hängt
         if ($dialogfaultfield.length == 0) {
           var dialogfaultfield = '<div id="dialogfault">' + pErrortext + '</div>';
           $('#dialog_unterrichtsmittel').append(dialogfaultfield);
         }
         else
           $dialogfaultfield.html(pErrortext);
           
        disableOkButton = true;    
      }
      else {
        if ($dialogfaultfield.length != 0)
          $dialogfaultfield.html('');   
        disableOkButton = false;  
      }       
    } //end showFaultMessageinDialog
    


} //end UnterrichtsmittelContainer



  /*************************************************************************************************************
   Jquery Events die beim Laden des Dokuments bereitgestellt werden und beim entspr. Handling (z.B. Anklicken)
   ausgeloest werden 
  ***************************************************************************************************************/
  // $(document).ready(function() {
 

  //Methode zum Bereitstellen von Unterrichtsmitteln und Events dazu
  function loadJSHandling4Unterrichtsmittel(aktuellerDozent,doznr) {
    /** Via Unterrichtsmittelcontainer werden die Events und Funktionen zur Bearbeitung von Unterrichtsmitteln bereitgestellt */
    /**************************************************************************************************/ 
    var container = new UnterrichtsmittelContainer();
    container.initReadyhandling(aktuellerDozent,doznr);
  }


/***************************************************************************************************
    *AN; 26.01.2011;  evtl. bei gelegenheit Paket php.js oder geeignetes Teilpaket einfügen,
     das PHP Funktionen (u.a. assoz. Arrays, get_object_vars() etc. ) für Javascript bereitstellt)
     
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**********/

/*
   Gibt ein Array von Objekt Properties zurück
/******************************************
function get_object_vars (obj) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: function Myclass () {this.privMethod = function (){}}
    // *     example 1: Myclass.classMethod = function () {}
    // *     example 1: Myclass.prototype.myfunc1 = function () {return(true);};
    // *     example 1: Myclass.prototype.myfunc2 = function () {return(true);}
    // *     example 1: get_object_vars('MyClass')
    // *     returns 1: {}

    var retArr = {}, prop = '';
    alert("objekt: " + obj);
    for (prop in obj) {
         alert("prop1: " + prop);
        if (typeof obj[prop] !== 'function' && prop !== 'prototype') {
            retArr[prop] = obj[prop];
        }
    }
    for (prop in obj.prototype) {
        if (typeof obj.prototype[prop] !== 'function') {
            alert("prop2: " + prop);
            retArr[prop] = obj.prototype[prop];
        }
    }
    alert("getobjvars ende");
    
    return retArr;
}

************************************************************************************************************/
