/*  -----------------------------------------------------------------------  //
//  Projekt:   eBiene AJAX Request Class 0.1                                 //
//  Download:  http://lab.eBiene.de                                          //
//  Autor:     Sergej Mueller                                                //
//  Kontakt:   smueller AT eBiene DOT de                                     //
//                                                                           //
//  Dateiname: ajax.class.js                                                 //
//  AEnderung: 15. August 2006                                               //
//  ------------------------------------------------------------------------ */

/* AJAX Class */
function AJAX() {
  
  /*
  * http_request
  *
  * XML_http_request als Dialog zwischen Browser und Server
  */
  
  var http_request = false;
  
  
  /*
  * get_request
  *
  * Kennzahl für den HTTP-Request per GET
  */
  
  this.get_request = 0;
  
  
  /*
  * post_request
  *
  * Kennzahl für den HTTP-Request per POST
  */
  
  this.post_request = 2;
  
  
  /*
  * send_request
  *
  * Sendet einen Request an den Server und stellt einen Dialog her
  *
  * @package  ajax.js
  * @author   Sergej Mueller
  * @since    14.08.2006
  * @change   15.08.2006
  * @param    string   source_link      Link zur Datei
  * @param    array    arguments_array  Argumente zum Request [optional]
  * @param    integer  request_type     Request-Typ [optional]
  * @param    string   response_call    Benutzerdefinierte Funktion [optional]
  * @param    integer  request_id       Request-ID [optional]
  */
  
  this.send_request = function(source_link, arguments_array, request_type, response_call, request_id) {
  	
  	if( document.getElementById("indicator") )
  		document.getElementById("indicator").src = "/asys-gmbh/images/indicator.gif";
    /* Keine Adresse? */
    if (!source_link) {
      return;
    }
    
    /* GET als Default */
    if (isNaN(request_type) == true) {
      request_type = this.get_request;
    }
    
    /* Keine Funktion? */
    if (!response_call) {
      response_call = '';
    }
    
    arguments_string = '';
    
    /* Array in String umwandeln */
    if (typeof(arguments_array) == 'object') {
      for (key in arguments_array) {
        arguments_pair = arguments_array[key][0] + '=' + encodeURIComponent(arguments_array[key][1]);
        arguments_string = (typeof(arguments_string) == 'undefined') ? arguments_pair : arguments_string + '&' + arguments_pair;
      }
    } else {
      arguments_string = '';
    }
    
    /* HTTP-Objekt starten */
    this.start_dialog();
    
    switch (request_type) {
      /* GET-Request */
      case this.get_request:
        this.http_request.open('GET', source_link + '?' + arguments_string, true);
        arguments_string = null;
      break;
      
      /* POST-Request */
      case this.post_request:
        this.http_request.open('POST', source_link, true);
        this.http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        this.http_request.setRequestHeader('Content-length', arguments_string.length);
      break;
    }
    
    /* Funktion als Bestätigung */
    this.http_request.onreadystatechange = new Function('', 'ajax_class.process_response("' + response_call + '", ' + request_id + ')');
    
    /* Daten senden */
    this.http_request.send(arguments_string);
  };
  
  
  /*
  * start_dialog
  *
  * Startet einen "Dialog" zwischen Browser und dem Server
  *
  * @package  ajax.js
  * @author   Sergej Mueller
  * @since    14.08.2006
  * @change   14.08.2006
  */
  
  this.start_dialog = function() {
    /* Dialog vorerst beenden */
    if (this.http_request && this.http_request.readyState) {
      this.http_request.abort();
      this.http_request = false;
    }
    
    /* Dialog initialisieren */
    if (window.XMLHttpRequest) {
      this.http_request = new window.XMLHttpRequest();
      if (http_request.overrideMimeType) {
        http_request.overrideMimeType('text/xml');
      }
    } else if (window.ActiveXObject) {
      try {
        this.http_request = new ActiveXObject('Msxml2.XMLHTTP');
      } catch(e) {
        try {
          this.http_request = new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e2) {
          try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP.4.0");
          } catch(e3) {
            this.http_request = false;
          }
        }
      }
    }
  };
  
  
  /*
  * process_response
  *
  * Funktion, die nach dem "Dialog" angesprochen wird
  *
  * @package  ajax.js
  * @author   Sergej Mueller
  * @since    14.08.2006
  * @change   14.08.2006
  * @param    string   response_call  Benutzerdefinierte Funktion
  * @param    integer  request_id     Request-ID zum Initialisieren
  */
  
  this.process_response = function(response_call, request_id) {  	
    if (!response_call) {
      return;
    }
    
    if (this.http_request.readyState == 4) {
      if (this.http_request.status == 200) {
      	if( document.getElementById("indicator") )
      		document.getElementById("indicator").src = "/asys-gmbh/images/blank.gif";
        eval(eval(response_call)(this.http_request));
      } else {
        //alert(http_request.status+"  "+this.http_request.statusText);
      }
    }
  };
}


/* AJAX Class initialisieren */
var ajax_class = new AJAX();
