//Globale Variablen
var aoe_FileList_List;
var aoe_Footer;
var aoe_Filename;
var aoe_EditArea_Textbox;
var aoe_currentFile;
var aoe_files = new Array();
var aoe_changed = false;
var aoe_updateFileList = false;

//Editor initialisieren
function initAjaxOnlineEditor()
{
  //Event-Handler an Buttons koppeln
  document.getElementById("aoebtn_new_file").onclick = aoeNewFile;
  document.getElementById("aoebtn_update").onclick = aoeLoadFileList;
  document.getElementById("aoebtn_save").onclick = aoeSaveToFile;
  document.getElementById("aoebtn_save_as").onclick = aoeSaveToFileAs;
  document.getElementById("aoebtn_delete").onclick = aoeDeleteFile;
 
  //Referenzen auf HTML-Elemente
  aoe_FileList_List = document.getElementById("aoe_filelist_list");
  aoe_Footer = document.getElementById("aoe_footer");
  aoe_EditArea_Textbox = document.getElementById("aoe_editarea_textbox");
  aoe_Filename = document.getElementById("aoe_filename");
  
  //Dateiliste laden und neue Datei vorbereiten
  aoeLoadFileList();
  aoeNewFile();
}

//Dateiliste vom Server laden
function aoeLoadFileList()
{
  //Status-Anzeige aktualisieren
  aoe_Footer.innerHTML = "Dateiliste wird vom Server abgerufen...";
  
  //getFileList.php via AJAX abrufen
  var myAjax = new Ajax();
  myAjax.url="php/getFileList.php";
  
  //Verarbeitung der Response / PHP-Skript lieferte Ergebnis
  myAjax.onSuccess = function(txt,xml) {
  
    //Lieferte das PHP-Skript eine Fehlermeldung?
    if (aoeHasError(txt)) {
      myAjax.onError(aoeGetError(txt));
      return null;
    }
    
    //Falls Dateiliste geliefert wurde, diese in Array wandeln
    if (txt) {
      aoe_files = txt.split("\n");
    }  
    
    //Array files im Editor anzeigen
    aoeCreateFileList();
    
    //Status-Anzeige aktualisieren
    aoe_Footer.innerHTML = "Dateiliste wurde übertragen, "+aoe_files.length+" Dateien gefunden";
  }
  
  //Fehler bei Übertragung der Dateiliste
  myAjax.onError = aoeErrorHandler;
  
  //Dateiliste abrufen
  myAjax.doRequest();
}


//Array files in HTML-Elemente umwandeln
function aoeCreateFileList()
{
 //Momentane Liste löschen
 aoe_FileList_List.innerHTML = "";
 
 //Array files sortieren
 aoe_files.sort();
 
 //Durch Array iterieren und HTML-Elemente erzeugen
 for (i=0; i<aoe_files.length; i++) {
   
   //Neues li-Element erzeugen und an aoe_FileList_List anhängen
   var myLi = document.createElement("li");
   aoe_FileList_List.appendChild(myLi);
   
   //Neues a-Element erzeugen
   var myA = document.createElement("a");
   
   //Text-Node / Welcher Text soll angezeigt werden?
   var myText = document.createTextNode(aoe_files[i]);
   myA.appendChild(myText);
   myA.setAttribute("href","javascript:void(0)");
   myA.onclick=aoeLoadFile;
   
   //a an li anhängen
   myLi.appendChild(myA); 
 }
}

//Editor für neue Datei vorbereiten
function aoeNewFile()
{
  //Neue Datei = Datei ohne Namen
  aoe_currentFile = "";
  
  //Inhalt der Textbox entfernen
  aoe_EditArea_Textbox.value = "";
  
  //Dateinamenanzeige aktualisieren  
  aoe_Filename.innerHTML = "[Unbenannte Datei]";
}

//Dateiinhalt vom Server laden
function aoeLoadFile()
{
  //Anschließend muss die Dateiliste nicht aktualisiert werden
  aoe_updateFileList = false; 
  
  //Welche Datei wurde angeklickt / soll geladen werden?
  aoe_currentFile = this.firstChild.nodeValue;
  
  //Status-Anzeige aktualisieren
  aoe_Footer.innerHTML = "Datei "+aoe_currentFile+" wird geladen...";
  
  //loadFile.php via AJAX abrufen
  var myAjax = new Ajax();
  myAjax.url="php/loadFile.php";
  
  //Dateiname als Parameter an PHP-Skript übergeben
  myAjax.params="filename="+aoe_currentFile;
  
  //Verarbeitung der Response / PHP-Skript lieferte Ergebnis
  myAjax.onSuccess = function(txt,xml) {
  
    //Lieferte das PHP-Skript eine Fehlermeldung?
    if (aoeHasError(txt)) {
      myAjax.onError(aoeGetError(txt));
      return null;
    }
    
    //Abrufen war erfolgreich
    //Dateiinhalt anzeigen, Ststus- und Dateinamenanzeige aktualisieren
    aoe_EditArea_Textbox.value=txt;
    aoe_Filename.innerHTML = aoe_currentFile;
    aoe_Footer.innerHTML = "Datei "+aoe_currentFile+" wurde geladen";
  }
  
  //Fehler bei Übertragung der Dateiinhalts
  myAjax.onError = aoeErrorHandler;
  
  //Datei abrufen
  myAjax.doRequest();
}

//Neuen Dateiinhalt speichern
function aoeSaveToFile()
{
  //Falls noch kein Dateiname existiert, dann Dateinamen erfragen
  if(!aoe_currentFile) {
    aoeSaveToFileAs();
    return null;
  }
  
  //Status-Anzeige aktualisieren
  aoe_Footer.innerHTML = "Datei "+aoe_currentFile+" wird gespeichert...";
  
  //saveToFile.php via AJAX abrufen und dabei neuen Dateiinhalt übergeben (POST)
  var myAjax = new Ajax();
  myAjax.method="POST";
  myAjax.url="php/saveToFile.php";
  myAjax.params="filename="+aoe_currentFile+"&filecontent="+encodeURIComponent(aoe_EditArea_Textbox.value);
  
  //Response war erfolgreich
  myAjax.onSuccess = function(txt,xml) {
    
    //Lieferte Das PHP-Skript eine Fehlermeldung?
    if (aoeHasError(txt)) {
      myAjax.onError(aoeGetError(txt));
      return null;
    }
    
    //Datei wurde erfolgreich gespeichert, Status-, Dateinamen-
    //anzeige und ggf. Dateiliste aktualisieren
    aoe_Footer.innerHTML = aoe_currentFile+" wurde gespeichert";
    aoe_Filename.innerHTML = aoe_currentFile;
    if (aoe_updateFileList) {
      aoe_files.push(aoe_currentFile);
      aoeCreateFileList();
      aoe_updateFileList = false;
    } 
  }
  
  //Fehler bei Kommunikation zw. Client und Server
  myAjax.onError = aoeErrorHandler;
  
  //Datei speichern
  myAjax.doRequest();
}

//Dateinamen vergeben
function aoeSaveToFileAs()
{
  //Dateinamen erfragen
  var newFilename = prompt("Bitte geben Sie einen Dateinamen an. Bitte im Dateinamen keine Umlaute, sz und Sonderzeichen verwenden","");
  if (newFilename == null) {
    return null; //Vorgang wurde abgebrochen
  }  
  
  //Existiert Dateiname bereits?
  if (aoeFileExists(newFilename)) {
    if (!confirm("Diese Datei existiert bereits. Dennoch fortfahren?")) {
      return null; //Datei nicht überschreiben
    }
    //Dateiliste muss nach dem Speichern nicht aktualisiert werden
    aoe_updateFileList = false;
  } else {
    //Dateiliste muss nach dem Speichern aktualisiert werden
    aoe_updateFileList = true;
  }
  
  //Dateiname wurde vergeben
  aoe_currentFile = newFilename;
  
  //Datei speichern
  aoeSaveToFile();
}

//Datei von Server und aus Dateiliste löschen
function aoeDeleteFile()
{
  //Löschen bestätigen
  if (confirm("Möchten Sie die Datei wirklich löschen?")) {
    //Löschen OK, aber Datei wurde noch nicht gespeichert?
    if (!aoe_currentFile) {
      aoe_Footer.innerHTML = "Inhalt der unbenannten Datei wurde gelöscht";
      aoeNewFile(); //Auf Ursprung zurücksetzen
      return null;
    }
  } else {
    return null; //Löschen? Nö!
  }
   
  //Status-Anzeige aktualisieren
  aoe_Footer.innerHTML = "Datei "+aoe_currentFile+" wird gelöscht...";
  
  //deleteFile.php via AJAX aufrufen
  var myAjax = new Ajax();
  myAjax.url="php/deleteFile.php";
  myAjax.params="filename="+aoe_currentFile;
  
  //Response war erfolgreich
  myAjax.onSuccess = function(txt,xml) {
  
    //Lieferte PHP-Skript eine Fehlermeldung? 
    if (aoeHasError(txt)) {
      myAjax.onError(aoeGetError(txt));
      return null;
    }
    
    //Status-Anzeige aktualisieren
    aoe_Footer.innerHTML = aoe_currentFile+" wurde gelöscht";
    
    //Datei vom Server gelöscht, nun aus lokaler Dateiliste entfernen
    for (i=0; i<aoe_files.length; i++) {
      if (aoe_files[i]==aoe_currentFile) {
        aoe_files.splice(i,1);
        break;        
      }
    }
    
    //Neue Dateiliste anzeigen
    aoeCreateFileList();
    
    //Editor auf Ursprung setzen
    aoeNewFile();
  }
  
  //Fehler bei Kommunikation zwiwchen Client und Server
  myAjax.onError = aoeErrorHandler;
  
  //Datei auf Server löschen
  myAjax.doRequest();
}

//Existiert Datei file in Dateiliste bereits?
function aoeFileExists(file)
{
  for(i=0; i<aoe_files.length; i++) {
   if (aoe_files[i] == file) {
     return true; //Datei existiert bereits
   }
  } 
}

//Überprüft Rückgabe eines PHP-Skripts, ob es eine Fehlermeldung ist
function aoeHasError(msg)
{
  //Hat msg einen Inhalt?
  if (!msg) return false; 
  
  //Befindet sich Zeichenkette AOEERROR: am Anfang von msg?
  if (msg.indexOf("AOEERROR:") == 0) {
    return true;
  } else {
    return false;
  }
}

//Aufbereiten der Fehlermeldung eines PHP-Skripts
function aoeGetError(msg)
{
  //AOEERROR: aus Fehlermeldung entfernen
  return msg.replace(/AOEERROR:/, "");
}

//Allgemeine Funktion für alle Fehlerfälle
function aoeErrorHandler(msg)
{
  //Fehler als Meldungsfenster anzeigen
  alert(msg);
  
  //Fehler in Statusanzeige schreiben 
  aoe_Footer.innerHTML = msg;
}

window.onload=initAjaxOnlineEditor;
