// JavaScipt Funktionen 
// (c) Nicol Hermann, 2006-2007
// $Id$

execute='';  // Variable in die Funktionsaufrufe als String codiert werden
dsAction=null;  // Variable die zur Unterscheidung verschiedener Speicher-Optionen (Update/Insert) dient
adrID=null;	// Variable mit der AdressID

// Variable die aller Felder enthält die im persönlichen Bereich wieder aktiviert werden
// VERALTET!!! Siehe Lösung über Object!
//pReActivate = new Array("ae", "as", "author", "addrecord", "asearch");

/*
// Objekt in dem Steuerungsvariablen und Funktionen festgelegt sind
// Werden über die Funktion 'setFormData' gesetzt.
// Die Objekt-Parameter: 'keyValue', 'maxIDFunction', 'timeoutFuncton' 
// stehen danach als globale Variablen zur Verfügung
formObj = new Object();
formObj['autoren']= new Object();
formObj['autoren']['formName'] = 'autoren';
formObj['autoren']['keyValue'] = 'authorID';
formObj['autoren']['keyField'] = 'autorenid';
formObj['autoren']['maxIDFunction'] = 'getMaxAutorenId()';
formObj['autoren']['timeoutFunction'] = 'waitAuthorID()';
formObj['autoren']['reActivate'] = new Array("ae", "as", "author", "addrecord", "asearch");
formObj['adressen']= new Object();
formObj['adressen']['formName'] = 'adressen';
formObj['adressen']['keyValue'] = 'adrID';
formObj['adressen']['keyField'] = 'adrid';
formObj['adressen']['maxIDFunction'] = 'getMaxAdrId()';
formObj['adressen']['timeoutFunction'] = 'waitAdrID';
formObj['adressen']['reActivate'] = new Array("ae", "as", "adrid", "addrecord", "asearch");
*/


function showHideMainDiv(div) {
   var divElement;
   for (var i = 0; i < mainDiv.length; ++i){
      divElement = document.getElementById(mainDiv[i]).style;
      if (mainDiv[i] == div) {
         divElement.display="inline";
      } else {
         // Ausblenden
         divElement.display="none";         
      }
   }
}

function setFormData(formname){
   // Methode mit der Steuerungsparameter für das aktive Formular gesetzt werden
   for (var formOption in formObj[formname]){
      objectname = formOption + " = formObj[formname][formOption]";
      eval(objectname);
   }
}

function change(id) {
   // Funktion zum Einblenden von DIVs
   var object = document.getElementById(id);
   if (object.style.display=="none"){
      object.style.display="inline";
   }
}

function hide(id) {
   // Funktion zum Ausblenden von DIVs
   var object = document.getElementById(id);
   object.style.display="none";
}

/*
 * Ermittelt die Datensätze mit den Arbeitsschwerpunkten
 */
function getWork(div){
	// sendXmlHttpCall(url, parameters, callback, mimetype, tagname, action, resultString, requestHeader);
	sendXmlHttpCall('getarbeitbyauthorid.php', '?dsid='+ authorID, callbackGetWork, null, div, null, 'xml', null);
}

function callbackGetWork(tagName, action, resultString, resultType){
	var divElement = document.getElementById(tagName);
	divElement.innerHTML = resultString;
}

/*
 * Ermittelt die Datensätze mit den Publikationen des Autors
 */

function getPublications(div){
	// sendXmlHttpCall(url, parameters, callback, mimetype, tagname, action, resultString, requestHeader);
	sendXmlHttpCall('getliteraturbyauthorid.php', '?dsid='+ authorID, callbackGetPublications, null, div, null, 'xml', null);
}

function callbackGetPublications(tagName, action, resultString, resultType){
	var divElement = document.getElementById(tagName);
	divElement.innerHTML = resultString;
}

function deactivate(){
   // Alle Felder das Autoren Formulares werden deaktiviert
   str= "var cntFormElements= document." + formName + ".elements.length;";
   eval(str);
   for (var i = 0; i < cntFormElements; ++i) {
     str="document." + formName + ".elements[i].disabled=true;";
     eval(str);
   }
   
   /*
   for (var i = 0; i < document.autoren.elements.length; ++i) {
      document.autoren.elements[i].disabled=true;
   }
   */
   
   // Reaktiviert alle Felder des Arrays 'reActivate'. Die Inhalte werden für jedes Formular über das Object definiert
   reactivate();
}

function deactivateAdressFields(){
   // Methode zur Deaktivierung aller Felder des Adress-Formulares im Reiter Allgemein
} 

function reactivate(){
  // Funktion mit der nachträglich Felder wieder aktiviert werden
  var str;
  for (var r=0; r < reActivate.length; r++){
     str= "document." + formName + "." + reActivate[r] + ".disabled=false;";
     eval(str);
  }
}

function editRecords(){
   // Aktiviert die Felder und setzt das dsAction-Flag auf Update
   dsAction='update';
   activate();
}

function activate(){
   str= "var cntFormElements= document." + formName + ".elements.length;";
   eval(str);
   for (var i = 0; i < cntFormElements; ++i) {
     str="document." + formName + ".elements[i].disabled=false;";
     eval(str);
   }
   /*
   for (var i = 0; i < document.autoren.elements.length; ++i) {
      document.autoren.elements[i].disabled=false;
   }
   */
}

function getXHR() {
   // Holt einen XML-HTTP-Request
   var xmlhttp=false;
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
     try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (E) {
        xmlhttp = false;
     }
   }
   if (!xmlhttp && typeof XMLHttpRequest!="undefined") {
      xmlhttp = new XMLHttpRequest();
   }
   return (xmlhttp);
}

function getAuthorByID(idx) {
    xmlhttp = getXHR();
    xmlhttp.open("GET", "getauthorbyid.php?dsid="+idx,true);
    xmlhttp.onreadystatechange=function() {
     if (xmlhttp.readyState==4) {
       if ( xmlhttp.responseText != "false" ) {
          // AutorenID wird gesetzt
          authorID = idx;
          var authorDS = xmlhttp.responseText.split("|");
          changeFormData (fields_pGeneral, 'autoren', authorDS);
       } else {
         alert ('Fehler bei der Ermittlung der Autoren-Information. Bitte versuchen Sie es erneut!');
       }
     }
    }
    xmlhttp.send(null);
}

function getAdressByID(idx){
   // Methode zur Ermittlung des Adresseintrages
   // Rückgabewert ist eine mit Pipe(|) getrennte Liste
   xmlhttp = getXHR();
   xmlhttp.open("GET", "getadressbyid.php?dsid="+idx,true);
   xmlhttp.onreadystatechange=function() {
   if (xmlhttp.readyState==4) {
     if ( xmlhttp.responseText != "false" ) {
        // AdressID wird gesetzt
          adrID = idx;
          var adrDS = xmlhttp.responseText.split("|");
          changeFormData (fields_adrGeneral, 'adressen', adrDS);  // Allgemein schreiben
       } else {
         alert ('Fehler bei der Ermittlung der Adress-Information. Bitte versuchen Sie es erneut!');
       }
     }
    }
    xmlhttp.send(null);
}

function getMaxAutorenId() {
   // Funktion zur Ermittlung der maximalen Autorenid
   xmlhttp = getXHR();
   xmlhttp.open("GET", "getmaxauthorid.php",true);
   xmlhttp.onreadystatechange=function() {
     if (xmlhttp.readyState==4) {
      if ( xmlhttp.responseText != "false" ) {
         // AutorenID wird gesetzt
         authorID = xmlhttp.responseText;
         // Kontakteintrag wird aktualisiert
         getAutorenContact('pGeneralAuthorsContact');  // hardgecodet!!!!
      } else {
        authorID=null;
        alert ('Fehler bei der Ermittlung der AutorenID. Bitte versuchen Sie es erneut!');
      }
     }
   }
   xmlhttp.send(null);
}

function getMaxAdrId(){
  // Methode zur Ermittlung der maximalen AdressID
  xmlhttp = getXHR();
  xmlhttp.open("GET", "getmaxadrid.php",true);
  xmlhttp.onreadystatechange=function() {
     if (xmlhttp.readyState==4) {
      if ( xmlhttp.responseText != "false" ) {
         // AdrID wird gesetzt
         adrID = xmlhttp.responseText;
         // evtl. über lösen wenn die Funktionen dynamischer werden
         //   keyAction= keyValue + "=null";
         //   eval(keyAction);
         // ToDo! Verknüpfte Bereiche aktualisieren
      } else {
        authorID=null;
        alert ('Fehler bei der Ermittlung der AdrID. Bitte versuchen Sie es erneut!');
      }
     }
   }
   xmlhttp.send(null);
}

function getAutorenContact(div) {
	// sendXmlHttpCall(url, parameters, callback, mimetype, tagname, action, resultString, requestHeader);
	sendXmlHttpCall('getauthorcontact.php', '?dsid='+ authorID, callbackGetAutorenContact, null, div, null, 'xml', null);
}

function callbackGetAutorenContact(tagName, action, resultString, resultType){
	var divElement = document.getElementById(tagName);
	divElement.style.display="inline";
	divElement.innerHTML = resultString;
}

function changeAuthor(idx, div){
   // Steuerungs-Funktion für die Ermittlung der Autoren-Informationen
   authorID=null;
   getAuthorByID(idx); 
   deactivate(); 
   execute = "getAutorenContact('" + div + "')";
   timeout = window.setInterval( "waitAuthorID()", 5);
}

function changeAdress(idx){
  adrID=null;
  getAdressByID(idx);
  deactivate(); 
  
  // alert('Bisher nicht implementiert. AdressID: '. idx);
}

function waitAuthorID(){
   // Warteschleifenfunktion bis die AuthorID gesetzt ist
   if (authorID == null){
     return false;
   } else {
      window.clearInterval(timeout);
      eval(execute);
   }
}

function waitAdrID(){
   // Warteschleifenfunktion bis die adrID gesetzt ist
   if (adrID == null){
     return false;
   } else {
      window.clearInterval(timeout);
      eval(execute);
   }
}

function changeFormData (fields, formname, values) {
   for (var i = 0; i < fields.length; ++i) {
     objectname = "this.document."+formname+"."+fields[i]+".value = '" + values[i] + "'";
     eval(objectname);
   }
}

function addNewRecord(formname, formFields) {
   // Methode mit der formularübergreifend neue Datensätze hinzugefügt werden können.
   
   // Formulardaten werden gesetzt
   // setFormData(formname); // veraltet. Umgezogen in die onload Funktion des Body-Tags
   
   // Setzt Schlüsselfeld zurück
   keyAction= keyValue + "=null";
   eval(keyAction);
   // Bestimmt die letzte Datzensatznummer, setzt die Eingabe-Felder zurück und vergibt die neue Autorenid
   eval(maxIDFunction);
   resetInputFields(formFields, formname);
   activate();
   dsAction='insert';
   // execute ="this.document."+formname+".autorenid.value = authorID";
   execute ="this.document."+formname+"." +keyField+ ".value = " + keyValue;
   timeout = window.setInterval( timeoutFunction, 5);
}

function resetInputFields(fields, formname){
   // Setze alle angegbenen Eingabefelder auf einen Leer-String
   for (var i = 0; i < fields.length; ++i) {
     objectname = "this.document."+formname+"."+fields[i]+".value = ''";
     eval(objectname);
   }
}

function saveForm(formname){
   // Methode zum Speichern von Autoren-Daten.
   xmlhttp = getXHR();
   xmlhttp.open("POST", "saveAuthorForm.php",false);
   xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   var sendPost = generatePostString(formname, fields_pGeneral);
   xmlhttp.send(sendPost);
   if ( xmlhttp.responseText != "false" ) {
     alert('Die Autoren-Daten wurden erfolgreich gespeichert.');
   } else{
     alert('Fehler beim Speichern der Autoren-Daten. Bitte versuchen Sie es erneut');
   }
   dsAction=null;
   deactivate();  // Deaktiviert Formular und erzwingt neues Editieren
}

function generatePostString(formname, fields){
   // Methode zur Formatierung eines Strings der für die Übermittlung mit POST benötigt wird
   var fieldvalue=null;
   var string='dsaction=' + dsAction;
   for (var i = 0; i < fields.length; ++i) {
     objectname = "fieldvalue =this.document."+formname+"."+fields[i]+".value";
     eval(objectname);
     string = string + "&" + fields[i] +"=" + fieldvalue;
   }
   return(string);
}

/*
 * Suchfunktion für Autoren. Zwischenversion. Durch Version ersetzen die mir Menü mit Namen darunter aufklappt 
 */

function quicksearch(div, str){
   // sendXmlHttpCall(url, parameters, callback, mimetype, tagname, action, resultString, requestHeader);
   sendXmlHttpCall('searchDistributor.php', "?dsid="+str+"&datasource="+formName, callbackQuicksearch, null, div, null, 'xml', null);
}

function callbackQuicksearch(tagName, action, resultString, resultType){
	var divElement = document.getElementById(tagName);
	divElement.style.display="inline";
	divElement.innerHTML = resultString;
}

function saveNewContact(formname, authorID){
   // Methode zum Speichern eines neuen Kontakteintrages
   dsAction='insert';
   xmlhttp = getXHR();
   xmlhttp.open("POST", "saveAuthorContactForm.php",false);
   xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   var sendPost = generatePostString(formname, fields_pAuthorContact);
   xmlhttp.send(sendPost);
   if ( xmlhttp.responseText != "false" ) {
     alert('Die Kontaktdaten des Autors wurden erfolgreich gespeichert.');
   } else{
     alert('Fehler beim Speichern der Autoren-Kontakt Daten. Bitte versuchen Sie es erneut');
   }
   dsAction=null;
   getAutorenContact('pGeneralAuthorsContact');  // Hardgecodet!
}

/*
 * Ermittelt die Datensätze mit den Publikationen der Organisation
 */

function getAdrPublications(div){
   if (adrID != null) {
	   // sendXmlHttpCall(url, parameters, callback, mimetype, tagname, action, resultString, requestHeader);
	   sendXmlHttpCall('getpubbyadrid.php', '?dsid='+ adrID, callbackGetAdrPublications, null, div, null, 'xml', null);      
   }
}

function callbackGetAdrPublications(tagName, action, resultString, resultType){
	var divElement = document.getElementById(tagName);
	divElement.innerHTML = resultString;
}


function getAdrKeywords(div){
   alert ('ToDo: getAdrKeywords');
}

function getAdrStaff(div){
   alert ('ToDo: getAdrStaff');
}

function deleteContact(formname, contactID, authorID){
  // Methode zum Löschen eines Kontakteintrages
  if(confirm("Wollen Sie den Kontakteintrag wirklich löschen?")) {
     xmlhttp = getXHR();
     xmlhttp.open("POST", "deleteAuthorContact.php",false);
     xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     var sendPost ="dsaction=delete&contactID=" + contactID;
     xmlhttp.send(sendPost);
     if ( xmlhttp.responseText == "true" ) {
       alert('Kontakteintrag erfolgreich gelöscht.');
     } else{
       alert('Fehler beim Löschen des Kontakteintrages. Bitte versuchen Sie es erneut');
     }
     getAutorenContact('pGeneralAuthorsContact');  // Hardgecodet!
  } else {
     alert ('Der Kontakteintrag ' + contactID + ' wird nicht gelöscht!');
  }
 
}
