/* START AJAX SCRIPTS*/
/* Start TwoBirds Core */
// twobirds AJAX lib V 2.4.0 Author: 2002- Frank Thuerigen / phpbuero.de
// namespace for lib, DO NOT CHANGE
var tb = function() {
 return {};
 }();
tb.timer=(function(){
 //private
 var myTimer=false;
 function d(pId){
  if ( !tb.timer.t[pId] ) return;
  clearTimeout( myTimer );
  tb.timer.t[pId]=null;
  delete tb.timer.t[pId];
  for ( var x in tb.timer.t) {
   myTimer = window.setTimeout( to, calcNext() );
   break;
   }
  }
 function a(pCb, pMs) {
  clearTimeout( myTimer );
  var myId=tb.misc.getid(),
      myT=pMs+(new Date()).getTime()
  tb.timer.t[myId]=[ pCb, myT ];
  myTimer = window.setTimeout( to, calcNext() );
  return myId;
  }
 function calcNext() {
  var myT = (new Date()).getTime();
  var myNext = 10000000 + myT;
  for ( var i in tb.timer.t ) {
   var myI = tb.timer.t[i];
   if ( myNext > myI[1] ) {
    myNext = myI[1];
    }
   }
  myNext = myNext - myT;
  return ( myNext<10 ? 10 : myNext );
  }
 function to(){
  for(var i in tb.timer.t){
   var myT=(new Date()).getTime();
   if(tb.timer.t[i][1]<=myT){
    var myE=tb.timer.t[i][0];
    d(i);
    if ( !tb.timer.stopped ) {
     tb.misc.exec( myE );
     }
    }
   }
  for ( var x in tb.timer.t) {
   myTimer = window.setTimeout( to, calcNext() );
   break;
   }
  }
 return { // public
  t: {},
  stopped: false,
  stop: function() {
   clearTimeout(myTimer);
   tb.timer.stopped = true;
   },
  start: function() {
   tb.timer.stopped = false;
   myTimer = window.setTimeout(timeout,0);
   },
  add: function(pCb, pMs){
   pCb = ( pCb ? pCb : tb.misc.nop);
   pMs = ( pMs ? pMs : 50 );
   return a(pCb, pMs);
   },
  abort:function(pId){
   pId = pId ? d(pId) : null;
   },
  debug:function(){
   tb.log.add( '<u>timer:</u>');
   for ( var i in tb.timer.t) { tb.log.add( i+': '+tb.timer.t[i]+'');};
   tb.log.show();
   }
  };
 })();
tb.interval=(function(){
 //private
 var myTimer = false;
 var myIndicator = 0;
 function d(pId){
  tb.log.add('<b>method</b> tb.interval.d');
  if ( !tb.interval.i[pId] ) return;
  tb.timer.abort( myTimer );
  if ( tb.interval.i[pId][4] === true ) {
   myIndicator--;
   if ( myIndicator < 1 ) {
    if ( document.getElementById( '_processing') ) {
     document.getElementById( '_processing' ).style.visibility = 'hidden';
     }
    }
   }
  tb.interval.i[pId] = null;
  delete tb.interval.i[pId];
  for ( var x in tb.interval.i) {
   myTimer = tb.timer.add(
    ito,
    calcNext()
    );
   break;
   }
  }
 function a(pCb, pMs, pTimeoutMs, pIn ) {
  tb.timer.abort( myTimer );
  tb.log.add('<b>method</b> tb.interval.a');
  var myId=tb.misc.getid(),
      myTime=(new Date()).getTime(),
      myT=myTime+pMs,
      myTo=( !isNaN( pTimeoutMs ) ? parseInt( pTimeoutMs / pMs ) : -1 );
  tb.interval.i[myId] = [ pCb, pMs, myT, myTo, pIn  ];
  if ( pIn === true ) {
   myIndicator++;
   document.getElementById( '_processing' ).style.visibility = 'visible';
   }
  myTimer = tb.timer.add(
   ito,
   calcNext()
   );
  return myId;
  }
 function calcNext() {
  var myT = (new Date()).getTime(),
      myNext = 10000000 + myT;
  for ( var i in tb.interval.i ) {
   if ( myNext > tb.interval.i[i][2] ) {
    myNext = tb.interval.i[i][2];
    }
   }
  myNext = myNext - myT;
  return ( myNext<50 ? 50 : myNext );
  }
 function ito() {
  for ( var i in tb.interval.i ) {
   var myI = tb.interval.i[i],
       myT=(new Date()).getTime();
   if ( myI[3] === 0 ) {
    d(i);
    }
   else if ( myI[2] < myT ) {
    tb.interval.i[i][2] = myT + myI[1];
    if ( myI[3] !== -1 ) {
     tb.interval.i[i][3] -= 1;
     }
    if ( tb.interval.stopped !== true ) {
     tb.misc.exec( myI[0] );
     }
    }
   }
  for ( var x in tb.interval.i) {
   myTimer = tb.timer.add(
    ito,
    calcNext()
    );
   break;
   }
  }
 return { //public
  i: {},
  stopped: false,
  stop: function() {
   document.getElementById( '_processing' ).style.visibility = 'hidden';
   tb.interval.stopped = true;
   },
  start: function() {
   tb.interval.stopped = false;
   if ( myIndicator > 0 ) {
    if ( document.getElementById( '_processing') ) {
     document.getElementById( '_processing' ).style.visibility = 'visible';
     }
    }
   for ( var x in tb.interval.i) {
    myTimer = tb.timer.add(
     (function(){ return function(){ ito(); }})(),
     10
     );
    break;
    }
   },
  add: function(pCb, pMs, pTimeoutMs, pIn){
   pCb = pCb || tb.misc.nop;
   pMs = pMs || 50;
   pIn = ( pIn && pIn === true ? true : false );
   return a(pCb, pMs, pTimeoutMs, pIn);
   },
  abort: function(pId){
   pId = pId ? d(pId) : null;
   },
  debug: function(){
   tb.log.add( '<u>interval:</u><br />');
   for ( var i in tb.interval.i) { tb.log.add( i+': '+tb.interval.i[i]+'<br />');};
   tb.log.show();
   }
  };
 })();
tb.wait = (function(){
 function d(pId){
  tb.log.add('<b>method</b> tb.wait.d');
  if ( !tb.wait.w[pId] ) return;
  var myW = tb.wait.w[pId],
      myI = myW[2];
  tb.wait.w[pId] = null;
  delete tb.wait.w[pId];
  }
 function a( pCd, pCb, pMs, pTimeoutMs, pIn ) {
  tb.log.add('<b>method</b> tb.wait.a');
  var myId = tb.misc.getid();
  tb.wait.w[myId] = [ pCd, pCb, '', pIn ];
  tb.wait.w[myId][2] = tb.interval.add(
   function(){ wto(myId); },
   pMs,
   pTimeoutMs,
   pIn
   );
  return myId;
  }
 function wto( pId ) {
  if ( !tb.wait.w[pId] ) return;
  tb.log.add( 'wait: '+pId );
  var myW = tb.wait.w[pId],
      myI = myW[2],
      myT = (new Date()).getTime();
  if ( tb.misc.test( myW[0] ) === true ) {
   d(pId);
   tb.interval.abort( myI );
   tb.log.add('<b>method</b> tb.wait.wto: '+myW[0]+' with id ' + pId + ' --> OK, executing this callback:<br />'+myW[1] );
   var f = myW[1];
   if ( tb.wait.stopped !== true ) {
    try {
     tb.log.add( f );
     tb.misc.exec( f );
     }
    catch (e) {
     }
    }
   }
  else {
   tb.log.add('<b>method</b> tb.wait.wto: '+myW[0]+' with id ' + pId + ' --> FAILED.' );
   }
  }
 return {
  // public
  w: {},
  stopped: false,
  stop: function() {
   tb.wait.stopped = true;
   },
  start: function() {
   tb.wait.stopped = false;
   },
  add: function( pCd, pCb, pMs, pTimeoutMs, pIn ) {
   pCd = pCd || 'true';
   pCb = pCb || tb.misc.nop;
   pMs = pMs || 50;
   pIn = ( pIn && pIn === true ? true : false );
   var r = a( pCd, pCb, pMs, pTimeoutMs, pIn );
   return r;
   },
  abort: function( pId ) {
   pId = pId ? d(pId) : null;
   },
  debug:function(){
   tb.log.add( '<u>wait:</u><br />');
   for ( var i in tb.wait.w) {
    tb.log.add( i+': *** '+(tb.wait.w[i][0]())+' ***<br />'+tb.wait.w[i][1]+'<br />');
    };
   tb.log.show();
   }
  };
 })();
tb.cache = (function(){
 //private
 function d( pId ) {
  tb.cache.c[pId] = null;
  delete tb.cache.c[pId];
  }
 function a( pWhat ) {
  var myId=tb.misc.getid();
  tb.cache.c[myId] = [ pWhat ];
  return myId;
  }
 // public
 return {
  c: {},
  set: function ( pId, pContent ) {
   if ( pId ) {
    tb.cache.c[pId] = pContent;
    }
   else {
    return a( pContent );
    }
   },
  get: function ( pId ) {
   return tb.cache.c[pId] || false ;
   },
  extract: function ( pId ) {
   var r = tb.cache.c[pId];
   pId = pId ? d(pId) : null;
   return r || false;
   },
  debug:function(){
   tb.log.add( '<u>cache:</u><br />');
   for ( var i in tb.cache.c) { tb.log.add( i+': '+tb.cache.c[i]+'<br />');};
   tb.log.show();
   }
  };
 })();
tb.misc = (function(){
 //private
 function cl( pObj ) {
  var myObj = {};
  for ( var i in pObj ) {
   myObj[i] = pObj[i];
   }
  return myObj;
  }
 return { // public
  // public
  nop: function() {
   },
  enumerate: function( pObj ) {
   if ( pObj && typeof pObj == 'object') {
    var myArray = [];
    for ( var i in pObj ) {
     myArray.push( [ i, pObj[i] ] );
     }
    return myArray;
    }
   },
  wait: function ( pCondition, pCallback, pFrequency ) { // compatibility function
   if ( isNaN( pFrequency ) === true ) {
    pFrequency = 100;
    }
   var myResult = ( pCondition
    ? ( typeof pCondition == 'string'
        ? eval( pCondition )
        : ( typeof pCondition == 'function'
            ? pCondition()
            : true
          )
      )
    : true
    )
   if ( myResult === false ) {
    var myToFunction = function() { tb.misc.wait( pCondition, pCallback, pFrequency ); };
    tb.timer.add( myToFunction, pFrequency );
    }
   else {
    ( pCallback
    ? ( typeof pCallback == 'string'
        ? eval( pCallback )
        : ( typeof pCallback == 'function'
            ? pCallback()
            : true
          )
      )
    : true
    )
    }
   },
  clone: function( pObj ) {
   cl( pObj );
   },
  cloneObj: function( pObj ) { // compatibility function
   cl( pObj );
   },
  getid: function() {
   var myDate = new Date();
   return '_'+myDate.getTime()+'_'+Math.random().toString().replace( /\./, '');
   },
  instance: function( pParent, pChild ) {
   var c = new Function();
   c.prototype = pChild;
   var p = new c();
   p.prototype = pParent;
   return p;
   },
  test: function( pCd ) {
   if ( typeof pCd != 'undefined' ) {
    if ( typeof pCd == 'function' ) {
     try {
      var r = pCd();
      }
     catch(e){
      //r = true;
      tb.log.add( '<u>function test error:</u><br/>'+pCd+'<br/>');
      }
     return r;
     }
    else if ( typeof pCd == 'string' && pCd.length > 0 ) {
     try{
      var r = eval( pCd );
      }
     catch (e) {
      //r = true;
      tb.log.add( '<u>eval test error:</u> ---> '+pCd+' <---');
      }
     return r;
     }
    }
   },
  exec: function( pCb ) {
   if ( typeof pCb != 'undefined' ) {
    if ( typeof pCb == 'function' ) {
     try {
      pCb();
      }
     catch(e){
      tb.log.add( '<u>function exec error:</u><br/>'+pCb+'<br/>');
      }
     return r;
     }
    else if ( typeof pCb == 'string' && pCb.length > 0 ) {
     try{
      var r = eval( '(function(){ '+pCb+' })()' );
      }
     catch (e) {
      tb.log.add( '<u>eval exec error:</u> ---> '+pCb+' <---');
      }
     return r;
     }
    }
   }
  }
 })();
tb.request = (function(){
 // private
 var count=0,
     interval=30,
     msoft=[ 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ];
 function addhandler( pId, pCb ) {
  tb.cache.set( pId, pCb );
  }
 function getConnection( pId ) {
  var myObj = {};
  var myHttp;
  try {
   myHttp = new XMLHttpRequest();
   myObj = { connection:myHttp, identifier:pId };
   }
  catch(e) {
   for(var i=0; i<msoft.length; ++i){
    try {
     myHttp = new ActiveXObject( msoft[i] );
     myObj = { connection:myHttp, identifier:pId };
     }
    catch(e){
     }
    }
   }
  finally {
   return myObj;
   }
  }
 function handlereadystate( pReq, pCallback ) {
  var myConnection = this;
  var myReq = pReq;
  var myPoll = tb.interval.add(
  //var myPoll = window.setInterval(
   /*function(){ return*/
   function(){
    if( myReq.connection.readyState==4 ){
     handleTransactionResponse( pReq, pCallback );
     //clearInterval( myPoll );
     tb.interval.abort( myPoll );
     }
    }/*})()*/,
   tb.request.interval
   );
  }
 function handleTransactionResponse( pReq, pCallback ) {
  try{
   var httpStatus = pReq.connection.status;
   }
  catch(e){
   var httpStatus = 13030;
   }
  if( httpStatus >= 200 && httpStatus < 300 ){
   var responseObject = createResponseObject( pReq, pCallback.argument);
   try {
    pCallback.apply(pCallback, [responseObject.responseXml, responseObject.responseText, responseObject]);
    }
   catch (e) {
    }
   }
  release(pReq);
  }
 function createResponseObject(pObj, pCallbackArg) {
  var myObj = {};
  myObj.tId = pObj.identifier;
  myObj.status = pObj.connection.status;
  myObj.statusText = pObj.connection.statusText;
  myObj.allResponseHeaders = pObj.connection.getAllResponseHeaders();
  myObj.responseText = pObj.connection.responseText;
  myObj.responseXML = pObj.connection.responseXML;
  if(pCallbackArg){
   myObj.argument = pCallbackArg;
   }
  return myObj;
  }
 function release( pReq ) {
  tb.request.dec();
  pReq.connection = null;
  delete pReq.connection;
  pReq = null;
  delete pReq;
  }
 return { // public
  inc: function(){
   count += 1;
   if ( document.getElementById( '_loading') ) {
    document.getElementById( '_loading' ).style.visibility = 'visible';
    }
   },
  dec: function(){
   count -= 1;
   if ( count < 1) {
    if ( document.getElementById( '_loading' ) ) {
     document.getElementById( '_loading' ).style.visibility = 'hidden';
     }
    }
   },
  add: function ( pResponseXmlHandler, pMethod, pUrl, pParms, pIsAsync ) {
   var myIndex = tb.misc.getid(),
       myUid = 'tb'+myIndex,
       myXmlreq = false,
       msg = '';
   pResponseXmlHandler = ( pResponseXmlHandler ? pResponseXmlHandler : tb.misc.nop );
   tb.request.inc();
   // proxy disable
   if ( pUrl.indexOf( '/?/' ) > -1 ) { // its a CakePHP service, POST only.
    pMethod = 'POST';
    if ( pParms === null || pParms === '') {
     pParms = 'tbUid='+myUid;          // twobirds specific
     }
    else { // parms given
     pParms = pParms+'&tbUid='+myUid;  // twobirds specific
     }
    }
   else {
    pUrl += ( pUrl.indexOf('?') < 0 ? '?' : '&' ) +'tbUid='+myUid;
    }
   myXmlreq = getConnection( myUid );
   if ( myXmlreq ) {
    if ( pMethod == 'GET' && pParms !== null ) {
     pUrl = pUrl + '&' + pParms;
     }
    if ( pMethod == 'POST' ) {
     myXmlreq.connection.open('POST', pUrl, pIsAsync);
     }
    else {
     myXmlreq.connection.open('GET', pUrl, pIsAsync);
     }
    if ( pIsAsync === true ) {
     handlereadystate( myXmlreq, pResponseXmlHandler, pUrl);
     /*
     tb.timer.add(
      (function(){return function(){try{tb.request.abort( myXmlReq );}catch(e){}}})(),
      10000
      );
      */
     }
    if ( pMethod == 'POST' ) {
     if ( pParms !== null ) {
      myXmlreq.connection.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
      myXmlreq.connection.send(pParms);
      }
     else {
      myXmlreq.connection.send(null);
      }
     }
    else {
     myXmlreq.connection.send(null);
     }
    if ( pIsAsync === false ) {
     if ( myXmlreq.connection.status >= 200 && myXmlreq.connection.status < 300 ) {
      tb.request.dec();
      pResponseXmlHandler( myXmlreq.connection.responseXML, myXmlreq.connection.responseText);
      }
     else {
      msg=myXmlreq.connection.status+': '+myXmlreq.connection.statusText;
      }
     }
    if ( pMethod == 'POST' ) {
     return myXmlreq;
     }
    else {
     return null;
     }
    }
   else {
    return false;
    }
   },
  abort: function( pReq ) {
   release( pReq );
   }
  };
 })();
/* End TwoBirds Core */
/* Start Request Functions */
var resultDiv;
var makeRequest = {
    sendRequest: function(url,params,div) {
        resultDiv = div;
        tb.request.add( makeRequest.setContent, 'GET', url, params, false );
      },
    setContent: function(pXml, pText) {
        if (document.getElementById(resultDiv)) {
            document.getElementById(resultDiv).innerHTML = pText;
        }
      }
}
/* End Request Functions */