

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

ajax = function(attr) {
  
  
  /*
  * request
  *
  * Request als Dialog zwischen Browser und Server
  *
  * @access  private
  * @type    object
  */
  
  var request = null;
  
  
  /*
  * param
  *
  * Parameter des Requests
  *
  * @access  private
  * @type    string
  */
  
  var param = '';
  
  
  /*
  * method
  *
  * Methode des Requests
  *
  * @access  private
  * @type    object
  */
  
  var method = {
    
    
    /*
    * post
    *
    * Kennzahl für den HTTP-Request per POST
    *
    * @access  private
    * @type    integer
    */
    
    'post': 2,
    
    
    /*
    * get
    *
    * Kennzahl für den HTTP-Request per GET
    *
    * @access  private
    * @type    integer
    */
    
    'get': 0
  };
  
  
  /* Parameter ermitteln */
  if (attr.args) {
    if (typeof(attr.args) == 'object') {
      for (key in attr.args) {
        param += '&' + key + '=' + encodeURIComponent(attr.args[key]);
      }
      param = param.substr(1);
    } else {
      param = attr.args;
    }
  }
  
  /* XMLHttpRequest starten */
  if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
    if (request.overrideMimeType) {
      request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) {
    request = new ActiveXObject('Microsoft.XMLHTTP');
  }
  
  /* Default setzen */
  attr.method = attr.method || method.post;
  
  /* Request starten */
  switch (attr.method) {
    /* GET-Request */
    case method.get:
      request.open('GET', attr.url + '?' + param, true);
      param = null;
    break;
    
    /* POST-Request */
    case method.post:
      request.open('POST', attr.url, true);
    break;
    
    /* Default */
    default:
    break;
  }
  
  /* Header setzen */
  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  request.setRequestHeader('Content-length', param.length);
  request.setRequestHeader('Connection', 'close');
  
  /* Funktion als Bestätigung */
  request.onreadystatechange = function() {
                                           if (request.readyState == 4 && request.status == 200 && typeof(attr.call) != 'undefined') {
                                             try {
                                              attr.call.search(/\(.*\)/g) == -1 ? eval(attr.call)(request) : eval(attr.call);
                                             } catch(e) {}
                                           }
                                          };
  
  /* Daten senden */
  request.send(param);
};
