/*  -----------------------------------------------------------------------  //
//  Projekt:   eBiene AJAX Request Class 0.2                                 //
//  Download:  http://lab.eBiene.de                                          //
//  Autor:     Sergej Mueller                                                //
//  Kontakt:   smueller AT eBiene DOT de                                     //
//                                                                           //
//  Dateiname: ajax.class.js                                                 //
//  AEnderung: 25. Oktober 2006                                              //
//  ------------------------------------------------------------------------ */


/*
* AJAX
*
* Verwaltet AJAX-Anfrage
*
* @package  ajax.class.js
* @author   Sergej Mueller
* @since    18.09.2006
* @change   25.10.2006
* @access   public
* @param    object  obj  Object mit Attributen des Requests
*/

function AJAX(obj) {
  
  
  /*
  * request
  *
  * Request als Dialog zwischen Browser und Server
  *
  * @access  private
  * @type    object
  */
  
  var request = null;
  
  
  /*
  * types
  *
  * Request-Type als Kennzahl
  *
  * @access  private
  * @type    object
  */
  
  var types = {
    
    
    /*
    * get
    *
    * Kennzahl für den HTTP-Request per GET
    *
    * @access  private
    * @type    integer
    */
    
    'get':  0,
    
    
    /*
    * post
    *
    * Kennzahl für den HTTP-Request per POST
    *
    * @access  private
    * @type    integer
    */
    
    'post': 2
  };
  
  
  /*
  * url
  *
  * URL der Schnittstelle
  *
  * @access  private
  * @type    string
  */
  
  var url = obj.url;
  
  
  /*
  * args
  *
  * Argumente des Requests
  *
  * @access  private
  * @type    object
  */
  
  var args = obj.args;
  
  
  /*
  * type
  *
  * Typ des Requests
  *
  * @access  private
  * @type    integer
  */
  
  var type = obj.type || types.post;
  
  
  /*
  * call
  *
  * Funktion nach dem Request
  *
  * @access  private
  * @type    string
  */
  
  var call = obj.call || null;
  
  
  /*
  * send
  *
  * Sendet einen Request an den Server
  *
  * @package  ajax.class.js
  * @author   Sergej Mueller
  * @since    18.09.2006
  * @change   25.10.2006
  * @access   public
  */
  
  this.send = function() {
    /* Werte initialisieren */
    var str = '';
    var length = 0;
    
    /* Keine URL? */
    if (!url) {
      return;
    }
    
    /* Array in String umwandeln */
    if (typeof(args) == 'object') {
      for (key in args) {
        var pair = key + '=' + encodeURIComponent(args[key]);
        str = (!str) ? pair : str + '&' + pair;
      }
    } else {
      str = args;
    }
    
    /* Länge ermitteln */
    length = str.length;
    
    /* HTTP-Objekt starten */
    if (window.XMLHttpRequest) {
      request = new window.XMLHttpRequest();
      if (request.overrideMimeType) {
      	// ausblenden, damit in der js konsole keine fehler auftauchen // TODO: mit xml rückgabewerten arbeiten
        request.overrideMimeType('text/xml');
      }
    } else if (window.ActiveXObject) {
      try {
        request = new ActiveXObject('Msxml2.XMLHTTP');
      } catch(e) {
        try {
          request = new ActiveXObject('Microsoft.XMLHTTP');
        } catch(e2) {
          try {
            request = new ActiveXObject("Msxml2.XMLHTTP.4.0");
          } catch(e3) {
            request = false;
          }
        }
      }
    }
    
    /* Request öffnen */
    switch (type) {
      /* GET-Request */
      case types.get:
        request.open('GET', url + '?' + str, true);
        str = null;
      break;
      
      /* POST-Request */
      case types.post:
        request.open('POST', url, true);
      break;
      
      /* Default */
      default:
      break;
    }
    
    /* Header setzen */
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.setRequestHeader('Content-length', length);
    request.setRequestHeader('Connection', 'close');
    
    /* Funktion als Bestätigung */
    request.onreadystatechange = function() {
                                             if (request.readyState == 4 && request.status == 200 && call) {
                                               try {
                                                 eval(eval(call)(request));
                                               } catch(e) {}
                                             }
                                            };
    
    /* Daten senden */
    request.send(str);
  };
}

/* AJAX initialisieren */
var ajax = {};