//
// Maximal ein Request gleichzeitig. Deshalb: Globale Variable für das Request-Objekt
//
var xmladRequest;



//
// Löschen der angezeigten Akronyme
//
function deleteAcroList() {
    document.getElementById("outputB").innerHTML = "";
}


//
// Callback-Funktion für "ersten" Ajax-Request:
// Anzeigen der geladenen Akronyme
//
function showAcroList(xmlResponse) {

    deleteAcroList();

    var ul, li, anchor, text;

    // Aus der XML-Antwort alle Elemente vom Typ "Acronym" herausholen
    var items = xmlResponse.getElementsByTagName("Acronym");

    // Den gewaehlten Akronymtyp (Organisation) ermitteln
    var acrotyp;
    for (var i = 0; i < document.forms["rootform"].typ.length; i++) {
      if (document.forms["rootform"].typ[i].checked) {
        acrotyp = document.forms["rootform"].typ[i].value;
      }
    }
    //alert(acrotyp);

    // Im Anzeigebereich ein neues UL-Element einfuegen
    var outputArea = document.getElementById("outputB");
    ul = document.createElement("ul");



    // Akronyme als LI's in die Liste einfuegen
    for (var i = 0; i < items.length; i++) {
      var itemType = "";
      // Hier wuerde ich gerne abfragen, ob das Attribut type existiert,
      // doch leider hat MSIE6 die entsprechende Methode aus 
      // DOM Level 2 nicht implementiert.
      //if (items[i].hasAttribute("type")) {
      //  itemType = items[i].getAttributeNode("type").value;
      //}
      itemType = String(items[i].getAttribute("type"));
      if (itemType.indexOf(acrotyp) >= 0 ||acrotyp == "") {
        li = document.createElement("li");
        anchor = document.createElement("a");

	var ID = items[i].attributes["id"].value;
        anchor.setAttribute("href","javascript:void(Lokris.AjaxCall('/code/WS/getXmladEntryWS/', showDescription, {method: 'POST', postBody: 'id=" + ID +"'}))");

        text = document.createTextNode(items[i].firstChild.nodeValue);
        anchor.appendChild(text);
        li.appendChild(anchor);
        ul.appendChild(li);
      }
    }

    outputArea.appendChild(ul);

}


//
// Wrapper-Funktion, die dafür sorgt, dass ein ggf. vorhandenes Request-Objekt
// wieder verwendet wird. Ein ggf. laufender Request wird abgebrochen.
//
function reuseRequest(ajaxReq, uri, callback, options) {
    if (ajaxReq && (ajaxReq.readyState == 2 || ajaxReq.readyState == 3)) {
	ajaxReq.abort();     // falls ein Request läuft, diesen abbrechen
    }

    return Lokris.AjaxCall(uri, callback, options);
}



//
// Callback-Funktion für "zweiten" Ajax-Request:
// Anzeigen der Beschreibung eines Akronyms.
//
function showDescription(xmlResponse) {
    document.getElementById("description").innerHTML = "";

    var text, heading, ul, li, dl, dt, dd;

    // 
    var completeAcronym = xmlResponse.documentElement;

    // Im Anzeigebereich neue Elemente einfuegen
    var outputArea = document.getElementById("description");

    // Ueberschrift
    heading = document.createElement("h3");
    text = document.createTextNode(completeAcronym.getElementsByTagName("Acronym")[0].getAttributeNode("expansion").value);
    heading.appendChild(text);
    outputArea.appendChild(heading);


    dl = document.createElement("dl");

    // alternative Formen
    var alternateForms = completeAcronym.getElementsByTagName("AlternateForms");
    if (alternateForms.length != 0) {
       var alternatives = alternateForms[0].getElementsByTagName("AlternateForm");

       dt = document.createElement("dt");
       dt.appendChild(document.createTextNode("Alternative Formen"));
       dd = document.createElement("dd");

       ul = document.createElement("ul");
       for (var i = 0; i < alternatives.length; i++) {
          li   = document.createElement("li");
          text = document.createTextNode(alternatives[i].firstChild.nodeValue);
          li.appendChild(text);
          ul.appendChild(li);
       }
       dd.appendChild(ul);

       dl.appendChild(dt);
       dl.appendChild(dd);
    }


    // Urheber
    // Hier wuerde ich gerne completeAcronym.getElementsByTagName("Acronym")[0].hasAttribute("type")
    // abfragem, doch leider ist das eine "DOM Level 2"-Methode, die der
    // MSIE 6 nicht implementiert hat
    if (completeAcronym.getElementsByTagName("Acronym")[0].getAttribute("type") != "") {

       dt = document.createElement("dt");
       dt.appendChild(document.createTextNode("Entwickelt von"));
       dd = document.createElement("dd");

       // p = document.createElement("p");
       text = document.createTextNode(completeAcronym.getElementsByTagName("Acronym")[0].getAttribute("type"));

       // p.appendChild(text);
       dd.appendChild(text);
       dl.appendChild(dt);
       dl.appendChild(dd);
    }





    // Spezifikationen
    var specs = completeAcronym.getElementsByTagName("SpecLoc");
    if (specs.length != 0) {

       dt = document.createElement("dt");
       dt.appendChild(document.createTextNode("Spezifikationen"));
       dd = document.createElement("dd");

       ul = document.createElement("ul");
       for (var i = 0; i < specs.length; i++) {
          li   = document.createElement("li");
          text = document.createTextNode(specs[i].firstChild.nodeValue);

          anchor = document.createElement("a");
          anchor.setAttribute("href",specs[i].firstChild.nodeValue);

          anchor.appendChild(text);
          li.appendChild(anchor);
          ul.appendChild(li);
       }
       dd.appendChild(ul);

       dl.appendChild(dt);
       dl.appendChild(dd);
    }


    // MoreInfo
    var specs = completeAcronym.getElementsByTagName("MoreInfo");
    if (specs.length != 0) {

       dt = document.createElement("dt");
       dt.appendChild(document.createTextNode("Weitere Informationen"));
       dd = document.createElement("dd");

       ul = document.createElement("ul");
       for (var i = 0; i < specs.length; i++) {
          li   = document.createElement("li");
          text = document.createTextNode(specs[i].firstChild.nodeValue);

          anchor = document.createElement("a");
          anchor.setAttribute("href",specs[i].firstChild.nodeValue);

          anchor.appendChild(text);
          li.appendChild(anchor);
          ul.appendChild(li);
       }
       dd.appendChild(ul);

       dl.appendChild(dt);
       dl.appendChild(dd);
    }

    // Definition
    var def = completeAcronym.getElementsByTagName("Definition");
    if (def.length != 0) {

       dt = document.createElement("dt");
       dt.appendChild(document.createTextNode("Definition"));
       dd = document.createElement("dd");

       p = document.createElement("p");
       text = document.createTextNode(def[0].firstChild.nodeValue);
       p.appendChild(text);
       dd.appendChild(p);

       dl.appendChild(dt);
       dl.appendChild(dd);
    }


    outputArea.appendChild(dl);

}

