/* Ajax-Funktionen für das Portal - 12/2009 */

var request = new Array();
var LastRequestId = 0;

// Request senden
function ax(r, felder, url) {
  LastRequestId++;
  RequestId = LastRequestId;
  
  if (!url)
    url = 'index.php';
  
  // Request erzeugen
  if (window.XMLHttpRequest) {
    request[RequestId] = new XMLHttpRequest(); // Mozilla, Safari, Opera
  } else if (window.ActiveXObject) {
    try {
      request[RequestId] = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
    } catch (e) {
      try {
        request[RequestId] = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
      } catch (e) {}
    }
  }

  // überprüfen, ob Request erzeugt wurde
  if (!request) {
    alert("Kann keine XMLHTTP-Instanz erzeugen");
    return true;
  } else {
    if (!document.getElementById(felder + '_loading'))
      alert(felder);
    document.getElementById(felder + '_loading').style.visibility = 'visible';


    // Felder hinzufügen
    var i = 0;
    var postdata = sessname + '=' + sessid;   // wird zentral im Hauptdokument gesetzt
    postdata += '&ajax=true&r=' + r;
    while(ele = document.getElementById(felder + '_' + ++i)) {
	    if (ele.type == 'text' || ele.type == 'select-one' || ele.type == 'hidden') {
        postdata += '&' + ele.name + '=' + escape(ele.value);
	      ele.disabled = true;
	    } else if (ele.type == 'submit') {
	      ele.disabled = true;
      }
    }

//    alert(url);
//    alert(postdata);

    // Request öffnen
    request[RequestId].open('post', url, true);
    // Requestheader senden
    request[RequestId].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    // Request senden
    request[RequestId].send(postdata);
    // Request auswerten
    request[RequestId].onreadystatechange = function() {
      interpretRequest(RequestId, r, felder);
    };
  }

  return false;
}

// Request auswerten
function interpretRequest(RequestId, r, felder)
{
  switch (request[RequestId].readyState) {
    // wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
    case 4:
      if (request[RequestId].status != 200) {
        alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request[RequestId].status);
        alert(request[RequestId].responseText);
      } else {
        // Antwort des Servers -> als XML-Dokument
        var xmlDoc  = request[RequestId].responseXML;

        if (!xmlDoc) {
          alert('Es gab keine Antwort!');
          return;
        }

        // Alle Felder ausblenden
        if (xmlDoc.getElementsByTagName('AlleFelderAusblenden').length > 0) {
          if (ausblenden = xmlDoc.getElementsByTagName('AlleFelderAusblenden')[0].getAttribute('value')) {
            i = 0;
	          while(ele = document.getElementById(felder + '_' + ++i)) {
              ele.style.display = 'none';
	          }
          }
        }

        // Feld setzen
        i = 0;
        while(field = xmlDoc.getElementsByTagName('SetField')[i++]) {
          id = field.getAttribute('id');
          value = field.getAttribute('value');
          src = field.getAttribute('src');

          if (!id)
          {
            name = field.getAttribute('name');
            eles = document.getElementsByName(name);
          }
          else
            eles = new Array(document.getElementById(id));
            
          for (elenr = 0; elenr < eles.length; elenr++)
          {
            ele = eles[elenr];
            
            if (ele) {
              if (src) {
                ele.src = src;
                ele.title = field.getAttribute('title');
              } else if (ele.type == 'text' || ele.type == 'hidden' || ele.type == 'select-one') {
                if (value != null)
                  ele.value = value;
              } else {
                if (title = field.getAttribute('title'))
                  ele.title = title;
                if (value == null && field.firstChild)
                  value = field.firstChild.data;
                if (value != null)
                  ele.innerHTML = value;
              }
              disabled = field.getAttribute('disabled');
              if (disabled == 'false')
                ele.disabled = false;

              display = field.getAttribute('display');
              if (display == '' || display == 'none')
                ele.style.display = display;
              else
                ele.style.display = '';

              visibility = field.getAttribute('visibility');
              if (visibility == 'visible' || visibility == 'hidden')
                ele.style.visibility = visibility;
            }
            else
            {
              if (field.getAttribute('IfExist') != 'true')
                alert('Element mit der id ' + id + ' gibt es nicht.');
            }
          }
        }

        // Child setzen
        i = 0;
        while(field = xmlDoc.getElementsByTagName('SetChild')[i++]) {
          id = field.getAttribute('id');
          value = field.getAttribute('value');
          src = field.getAttribute('src');

          ele = document.getElementById(id);
          
          addele = field.getElementsByTagName('div')[0];

          if (ele && addele) {
            // Alle Kindknoten löschen
            while (ele.firstChild)
              ele.removeChild(ele.firstChild);
            newele = addele.cloneNode(true);
            ele.appendChild(newele);

            display = field.getAttribute('display');
            if (display == '' || display == 'none')
              ele.style.display = display;
          }
        }

        // Select/Option setzen
        i = 0;
        while(field = xmlDoc.getElementsByTagName('SetOption')[i++]) {
          id = field.getAttribute('id');
          value = field.getAttribute('value');

          ids = id.split(',');
          // Folgende Zeile funktioniert z.Zt. nur mit Firefox: for each (var id in ids)
          for(nr = 0; nr < ids.length; nr++)
          {
            id = ids[nr];
            ele = document.getElementById(id);

            if (ele) {
              OptClear = field.getAttribute('clear');
              if (OptClear == 'true')
              {
                while(ele.length > 0)
                  ele.options[ele.length-1] = null;
              }
              if (field.firstChild)
              {
                newOpt = new Option(field.firstChild.data, value, false, false);
                ele.options[ele.length] = newOpt;
              }
            }
          }
        }

        // Script ausführen
        i = 0;
        while(field = xmlDoc.getElementsByTagName('StartFunction')[i++]) {
          name = field.getAttribute('name');
          value = field.getAttribute('value');

          if (name == 'ReihenfolgeTemperaturen')
            ReihenfolgeTemperaturen();
        }
        
        
        if (ele = document.getElementById(felder + '_loading'))
          ele.style.visibility = 'hidden';
      }
      break;
    default:
      break;
  }
}

// einem HTML-Tag ein Attribut anhängen
function addAttribute(object, nr) {
  object.setAttribute('id', 'option_'+nr, 0);
}
