/**
 * Allgemeine Variablen und Funktionen für AJAX Aufrufe
 */   

// XML Request Objekt global verwendbar.
var req = null;

/**
 * Sendet AJAX-Request
 * 
 * url - Pfad zur PHP-Datei, die aufgerufen wird
 *       inklusive aller GET-Parameter !!! 
 * requestID - Name der Funktion, die beim onreadystatechange-Eventhandler aufgerufen wird
 *             (diese beinhaltet ebenfalls die Verarbeitung des zurückgegebenen XML-Objektes) 
 */
function ajax_request(url,requestID){
  // Erstellen des Request-Objektes
  if(window.XMLHttpRequest)req = new XMLHttpRequest;
  if(window.ActiveXObject)req = new ActiveXObject("Microsoft.XMLHTTP");

  req.open("GET", url, true);

  // Festlegen der durchzuführenden Operationen nach Rückgabe des Request-Objektes
  // (Eine Callbackfunction wird angegeben, die auf events des Request Objekts reagieren soll.)

  switch(requestID){
    // ---
    // Lightbox
    case 'displayLBnavi':
      req.onreadystatechange = displayLBnavi;
      break;
    // ---
    // Flyout
    case 'insertFlyout':
      req.onreadystatechange = insertFlyout;
      break;            
    /*default:
      http_request.onreadystatechange = defaultHandler;*/ 
  }
    
  //Abschicken des Request-Objektes mit Post-Variablen
  req.send(null);
}

/**
 * Rückgabe eines Wertes des Request-Objektes
 * tagName = Tag-Name innerhalb des Objektes
 * xml = gesamtes oder Teilstück des XML-Objektes (der tagName darf in diesem Teilstück nur 1x vorkommen)                  
 */                     
function get_xmltag_value(tagName,xml){
  xmltag = xml.getElementsByTagName(tagName);
  
  if (xmltag.length != 0){ // XML-Tag vorhanden
      if (!navigator.appVersion.match(/MSIE/i)){
        return decodeURIComponent(xmltag[0].textContent); // FF 
      }
      else{
        if (xmltag[0].firstChild.nodeValue){ // IE
          return decodeURIComponent(xmltag[0].firstChild.nodeValue);
        }
        else{
          return false;
        }
      }     
  }
  else{
    //return tagName;
    return false;
  }
}

/** (Extra)
 * Prüft, ob ein Element in einem Array vorhanden ist
 * @param str - string der gesucht werden soll (needle)
 *        arr - array das durchsucht werden soll (haystack)
 * @return boolean
 */ 
var ia;

function in_array(str, arr){
  for (ia=0; ia<arr.length; ia++){
    if (arr[ia] == str){
      return true;
    }
  }
  return false;
}

/**
 * Erzeugt HTML-Element, fügt dieses ins DOM ein und fügt Inhalte ein (innerHTML)
 * 
 * tagName - TagName des neuen Elements (z.B. div)
 * attNames - Namen der einzufügenden Attribute
 * attValues - zuzuweisende Werte der Attribute
 * content - text oder HTML-Inhalte des neuen Elementes
 * 
 * 1. Problem: 
 * !! wenn im IE das style-Attribut eingefügt wird, erfolgt Änderung über innerHTML von parentName,
 * dabei gehen in parentName über JavaScript gesetzte events verloren !!
 * (entsprechenden eventLoader erneut ausführen !!) 
 * 2. Problem:
 * !! verwendet man als parent das body-Tag, kommt der IE ins stocken,
 * also vermeiden und Elemente mit möglichst wenig Inhalt als parent verwenden
 *  
 * Neu in v2: 
 * parentData - Daten zum Elternelement (damit man nich immer body nehmen muss) 
 *        [0](parId) - Id des Elternelements       
 *        [1](tagName) - TagName des Elternelements
 *        [2](parKey) - Schlüssel des Elternelements im getElementsByTagName-Objekte-Array     
 */ 
function createHTMLelement_v2(tagName, attNames, attValues, parentData, content){
  // -----
  // Element erstellen
  newTAG = document.createElement(tagName);
  
  // -----
  //Attribute hinzufügen
  for (i=0; i<attNames.length; i++){
    //alert(navigator.appVersion);
    //alert(navigator.appVersion.match(/MSIE/i));

    // Alle Attribute bis auf style
    if (attNames[i] != 'style'){ 
      newATT = document.createAttribute(attNames[i]);
      newATT.nodeValue = attValues[i];
      newTAG.setAttributeNode(newATT);
    }
    else{// style-Attribut
      // FF; Opera
      if (!navigator.appVersion.match(/MSIE/i)){
        newATT = document.createAttribute(attNames[i]);
        newATT.nodeValue = attValues[i];
        newTAG.setAttributeNode(newATT);
      }
      // IE
      else{
        // IE (7) Anpassung
        // hier funktioniert setAttributeNode mit style nicht
        // siehe http://www.it-blogger.com/2007-06-22/microsofts-internetexplorer-und-mitglied-nicht-gefunden/ 
        var AttVals = attValues[i].split(";"); // Speichert style-Eigenschaften mit Werten in einem Array     
      }
    }
  }
  
  // -----
  // Element ins DOM einfügen
  if (parentData[0] != ''){ // Id
    document.getElementById(parentData[0]).appendChild(newTAG);
  }
  else{ // TagName
    document.getElementsByTagName(parentData[1])[parentData[2]].appendChild(newTAG);
  }
  
  
  // -----
  // style im IE ergänzen
  if (navigator.appVersion.match(/MSIE/i)){
   //document.getElementsByTagName(parentName)[0].lastChild.style.setAttribute('height', '100%', true);
   //document.getElementsByTagName(parentName)[0].lastChild.style.setAttribute('width', '100%', true);
   //document.getElementsByTagName(parentName)[0].lastChild.style.setAttribute('backgroundColor', 'green', true);
   //alert(AttVals);
    for (i=0; i<AttVals.length-1; i++){ 
      //alert(styleValues[i]);

      var ATT = AttVals[i].substring(0, AttVals[i].indexOf(":"));
      var VAL = AttVals[i].substring((AttVals[i].indexOf(":")+1), AttVals[i].length);
      
      //alert(ATT+' - '+VAL);
      if (parentData[0] != ''){ // Id
        document.getElementById(parentData[0]).lastChild.style.setAttribute(ATT, VAL, false);
      }
      else{ // TagName
        document.getElementsByTagName(parentData[1])[parentData[2]].lastChild.style.setAttribute(ATT, VAL, false);
      }
      // style.setAttribute funktioniert nur im IE und Konqueror
    }
    if (parentData[0] != ''){ // Id
      document.getElementById(parentData[0]).innerHTML = document.getElementById(parentData[0]).innerHTML;
    }
    else{
      document.getElementsByTagName(parentData[1])[parentData[2]].innerHTML = document.getElementsByTagName(parentData[1])[parentData[2]].innerHTML;
    }
  }
  
  // -----
  // Inhalte einfügen
  if (content){
    if (parentData[0] != ''){ // Id
      document.getElementById(parentData[0]).lastChild.innerHTML = content;
    }
    else{
      document.getElementsByTagName(parentData[1])[parentData[2]].lastChild.innerHTML = content;
    }
  }
}
