/**
 * AJAX Funktionen
 *
 * Copyright 2007 by DACHCOM digital AG.
 * All rights reserved.
 *
 * Author: Roman Gräzer, rgraezer@dachcomdigital.com
 * Version 1.0, 22.10.2007
 *
 * History:
 *  1.0 22.10.2007	rgraezer	initial relase
 *
 */

// Datenuebertragung starten
function getAjaxResult(rslt,fl,fltr,mthd,frmt,ldng,tmt,lng) {
  
  // Variablen
  this.result = rslt || "text";
  this.url = fl;
  this.params = fltr || "";
  this.method = mthd || "GET";
  this.format = frmt || "xml";
  this.loading = ldng || "loading";
  this.timeout = tmt || 120000;
  this.lang = lng || "de";
  this.onSuccess = successHandler;
  this.onError = errorHandler;
  this.sendError = true;
  
  // Text loeschen
  document.getElementById(this.result).innerHTML = "";
  
  // Loading-Element
  var sload = document.getElementById(this.loading);
  sload.style.display = "block";
  
  // Cache-Probleme IE
  rnd = parseInt(Math.random()*99999999);
  this.params = this.params + "&random=" + rnd;
  
  // Do request
  doRequest();
  
  // Den Text in die Seite einfuegen
  function successHandler(txt,xml){
    sload.style.display = "none";
    
    if (this.format == 'txt') {
        document.getElementById(this.result).innerHTML=txt;
    } else {
        if(typeof window['showAjaxList'] == 'function') window['showAjaxList'](xml);
    }
  }
  
  // Fehler
  function errorHandler(msg){
    sload.style.display = "none";
    document.getElementById(this.result).innerHTML=msg;
  }
}

// Request ausfuehren
function doRequest() {
    
  //Zugriff auf Klasse fuer readyStateHandler ermoeglichen
  var _this = this;
    
  //Ueberpruefen der Angaben
  if (!this.url) {
    onError(getErrorMsg(0,this.lang));
    return false;
  }

  //XMLHttpRequest-Objekt erstellen
  xmlHttpRequest = getXMLHttpRequest();
  
  if (!xmlHttpRequest) {
    onError(getErrorMsg(1,this.lang));
    return false;
  }
  
  //Methode
  this.method=this.method.toUpperCase();
  
  //Fallunterscheidung nach Übertragungsmethode
  switch (this.method) {
    case "GET":  xmlHttpRequest.open(this.method, this.url+"?"+this.params, true);
                 xmlHttpRequest.onreadystatechange = readyStateHandler;
                 xmlHttpRequest.send(null);
                 this.tmout = window.setTimeout("abbrechen()", this.timeout);
                 break;
    case "POST": xmlHttpRequest.open(this.method, this.url, true);
                 xmlHttpRequest.onreadystatechange = readyStateHandler;
                 xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                 xmlHttpRequest.send(this.params);
                 this.tmout = window.setTimeout("abbrechen()", this.timeout);
                 break;
  }

  
  //Private Methode zur Verarbeitung der erhaltenen Daten
  function readyStateHandler() {

    if (_this.sendError && xmlHttpRequest.readyState < 4) {
      return false;
    }
    if (_this.sendError && (xmlHttpRequest.status == 200 || xmlHttpRequest.status == 304)) {
      if (_this.onSuccess) {
        clearTimeout(_this.tmout);
        onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);
      }
    } else {
      if (_this.onError && _this.sendError) {
        clearTimeout(_this.tmout);
        onError("["+xmlHttpRequest.status+" "+xmlHttpRequest.statusText+"] " + getErrorMsg(2,_this.lang));
      }
      _this.sendError = true;
    }
  }
}

// Gibt browserunabhaengig ein XMLHttpRequest-Objekt zurueck
function getXMLHttpRequest() {
    
    if (this.xmlHttpRequest) {
        if (this.xmlHttpRequest.readyState != 0 && this.xmlHttpRequest.readyState != 4) {
            this.sendError = false; // Fehlermeldung nicht ausgeben
            xmlHttpRequest.abort();
        }
    }
    
    var req;
    var msxml = [
      "MSXML2.XMLHTTP.5.0",
      "MSXML2.XMLHTTP.4.0",
      "MSXML2.XMLHTTP.3.0",
      "MSXML2.XMLHTTP",
      "Microsoft.XMLHTTP"
    ];
    
    if (window.XMLHttpRequest) {
       req = new XMLHttpRequest();
    }
    else {
        if (window.ActiveXObject) {
            for (var i = 0; i < msxml.length; i++) {
                try { req = new ActiveXObject(msxml[i]); }
                catch (e) {}
            }
        }
    }
    
    return req;
}

// Anfrage abbrechen
function abbrechen() {
   this.xmlHttpRequest.abort();
   onError(getErrorMsg(3,this.lang));
}

// Fehlermeldungen
function getErrorMsg(errorId, lang) {
   
   var aErrorMsg = new Array();
   
   aErrorMsg[0] = new Object();   
   aErrorMsg[0]['de'] = "Es wurde keine URL angegeben. Der Request wird abgebrochen!";
   aErrorMsg[0]['en'] = "You didn't provide a URL. The request has been terminated!";
   aErrorMsg[0]['fr'] = "Aucun URL n'a été indiqué. L'exécution de la requête sera interrompue!";
   
   aErrorMsg[1] = new Object();   
   aErrorMsg[1]['de'] = "Es konnte kein XMLHttpRequest-Objekt erstellt werden!";
   aErrorMsg[1]['en'] = "Couldn't create an XMLHttpRequest object!";
   aErrorMsg[1]['fr'] = "Aucun objet XMLHttpRequest ne peut être créé!";

   aErrorMsg[2] = new Object();   
   aErrorMsg[2]['de'] = "Es trat ein Fehler bei der Datenuebertragung auf!";
   aErrorMsg[2]['en'] = "A data transfer error occurred!";
   aErrorMsg[2]['fr'] = "La demande dépasse le temps imparti!";

   aErrorMsg[3] = new Object();   
   aErrorMsg[3]['de'] = "Die Anfrage dauert zu lange!";
   aErrorMsg[3]['en'] = "The request has timed out!";
   aErrorMsg[3]['fr'] = "Une erreur est survenue durant le transfert de données!";
   
   return aErrorMsg[errorId][lang];
}