// AJAX Wrapper Class

function AJAX()
{
  // Methoden
  this.requestURL = AJAX_RequestURL;
  this.requestURLA = AJAX_RequestURLAsynch;
  this.getElements = AJAX_GetElements;
  this.onError = AJAX_ErrorHandler;
  this.getRoot = AJAX_GetRoot;
  this.xmlhttp = null;
    
  // Variablen
  this.root = null;
  this.onSuccess = '';
}

function AJAX_RequestURL(url, data)
{

  // xmlhttp instanzieren
  if (window.XMLHttpRequest)
    xmlhttp = new XMLHttpRequest();
  else if (window.ActiveXObject)
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
  else
    this.onError('Error initializing AJAX');
    
  // Anfrage
  xmlhttp.open("POST", url, false);
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.setRequestHeader('Content-length', data.length);
  xmlhttp.send(data);
    
  // Antwort überprüfen
  this.root = xmlhttp.responseXML.documentElement;
  if (this.root != null)  
    return true;
  this.onError('Error processing search request.');
  return false;
}

function AJAX_RequestURLAsynch(url, data, successHandler)
{
  if (window.XMLHttpRequest)
    xmlhttp = new XMLHttpRequest();
  else if (window.ActiveXObject)
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
  else
    this.onError('Error initializing AJAX');   
  this.onSuccess = successHandler;
  thisobj = this;
  xmlhttp.onreadystatechange = 
   function() 
   { 
    if (xmlhttp.readyState == 4) {
     if (xmlhttp.status == 200) {
       thisobj.root = xmlhttp.responseXML.documentElement;
       if (thisobj.root != null) {
        if (typeof(successHandler)=='function')
          thisobj.onSuccess(thisobj)
        else
          eval(thisobj.onSuccess);
       } else {
        thisobj.onError('Error processing AJAX response');
       }
     } else
      thisobj.onError('Error processing AJAX response');
    }
   }
  xmlhttp.open("POST", url, true);
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.setRequestHeader('Content-length', data.length );
   xmlhttp.send(data);
}

function AJAX_GetElements(tag)
{
  if (this.root == null)
    return false;
  elements = this.root.getElementsByTagName(tag);
  if (elements.length > 0) {
    result = new Array(elements.length);
    for (i=0; i<elements.length; i++)
      result[i] = elements[i].childNodes[0].nodeValue;
    return result;
  } else
    return false;
}

function AJAX_GetRoot()
{
  return this.root;
}

function AJAX_ErrorHandler(msg)
{
  alert(msg);
}

function AJAXPostReplace(url,parameter,elementid) {
  try {
    if (typeof parameter == 'object') {
      var params = new Array();
      
      for(var i=0;i<parameter.elements.length;i++) {
        switch(parameter.elements[i].type) {
          case 'radio': 
            if (parameter.elements[i].checked) 
              params[parameter.elements[i].name]=parameter.elements[i].value; 
          break;
          case 'hidden':
            if (!params.hasOwnProperty(parameter.elements[i].name))
              params[parameter.elements[i].name]=parameter.elements[i].value;
          break;
        }
      }
      var s = '';
      for(var i in params)
        s += (s==''?'':'&') + i + '='+encodeURIComponent(params[i]);
      parameter = s;
    }
    var ajax = new AJAX();
    ajax.onerror = function(msg) {
      alert(msg);
    }
    ajax.requestURLA(url, parameter, function(ajax) {
      root = ajax.getRoot();
      msg = root.getElementsByTagName('content');
      if (elementid&&msg&&msg[0]) {
        document.getElementById(elementid).innerHTML = ( msg[0].firstChild) ? msg[0].firstChild.nodeValue : '';
      }
      
    });
  }
  catch(e) {
    alert('An error occurred while processing your request.'+e);
  }
}