//Vielen Dank für diese beiden Funktion und die telefonische Unterstützung bei einigen XML-Frickeleien geht an Frankie
//siehe dazu http://www.phpbuero.de/

var tbRequest = { // new object
 add: function ( pResponseXmlHandler, pMethod, pUrl, pParms, pIsAsync ) {
  var myParms = '';
  var myIndex = tbMisc.getid();
  var myDate = new Date();
  var myTime = myDate.getTime();
  var myUid = 'tb'+myTime+'_'+myIndex;
  var myXmlreq = false;
  var msg = '';

  // proxy disable
  if ( pParms == null || pParms == '') {
   myParms = 'tbUid='+myUid;
  }
  else {
   myParms = pParms+'&tbUid='+myUid;
   }
  pParms = myParms;

  // make request
  if (window.XMLHttpRequest) {
   myXmlreq = new XMLHttpRequest();
   }
  else if (window.ActiveXObject) {
   try { myXmlreq = new ActiveXObject("Msxml2.XMLHTTP"); }
   catch (e1) {
    try { myXmlreq = new ActiveXObject("Microsoft.XMLHTTP"); }
    catch (e2) {}
    }
  }
  // process request
  if ( myXmlreq ) {
   myXmlreq.onreadystatechange=tbRequest.handler(myXmlreq, pResponseXmlHandler, myIndex);
   if ( pMethod == 'POST' ) {
    myXmlreq.open('POST', pUrl, pIsAsync);
    }
   else {
    if ( pParms != null ) {
     pUrl = pUrl + '?' + pParms;
     }
    myXmlreq.open('GET', pUrl, pIsAsync);
    }
   if ( pMethod == 'POST' ) {
    if (pParms) {
     myXmlreq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     myXmlreq.send(pParms);
     }
    else {
     myXmlreq.send(null);
     }
    }
   else {
    myXmlreq.send(null);
    }
   if ( pIsAsync == false ) { // not asynchronous --> handle response directly !!!
    if ( myXmlreq.status == 200 ) {
     pResponseXmlHandler( myXmlreq.responseXML, myXmlreq.responseText);
     }
    else {
     msg=myXmlreq.status+': '+myXmlreq.statusText;
     }
    }
   if ( pMethod == 'POST' ) {
    return myXmlreq; // async req ptr
    }
   else {
    return null; // no req ptr avail
    }
   }
  else {
   return false;
   }
  },

 handler: function (pReq, pResponseXmlHandler, pIndex) {
  return function () {
   var msg='';
   if (pReq.readyState == 4) {
    try {
     if (pReq.status == 200) {
      if (pReq.responseXML) {
       pResponseXmlHandler( pReq.responseXML, pReq.responseText);
       }
      else if (pReq.responseText) {
       pResponseXmlHandler( null, pReq.responseText);
       }
      }
     }
    catch (e) {}
    }
   }
  }
}



var tbMisc = {
 idCounter:0, // unique counter

 nop: function() {
  },

 wait: function ( pCondition, pCallback, pFrequency ) {
  if ( isNaN( pFrequency ) == true ) {
   pFrequency = 100;
   }
  myResult = eval( pCondition );
  if ( myResult == false ) {
   myToFunction = 'tbMisc.wait("'+pCondition+'","'+pCallback+'",'+pFrequency+')';
   tbTimer.add( myToFunction, pFrequency );
   }
  else { // pCondition = true
   eval( pCallback ); // do it now
   }
  },

 getid: function() {
  this.idCounter+=1;
  return this.idCounter;
  }

 }


