
  function Ajax( upd_obj, aserver, p1, p2, p3 )
  {
    var sreq = aserver;
    if(p1) sreq += '?' + p1;
    if(p2) sreq += '&' + p2;
    if(p3) sreq += '&' + p3;
    ajx = new ajax_req( upd_obj, sreq );
  }

  function ajax_req( id, url )
  {
    var aobj = {
      objid: document.getElementById(id),
      httpreq: ajax_create()
    }
    if( aobj.objid ) aobj.objid.innerHTML='<br>loading page... ';

    if( aobj.httpreq )
    {
      try {
        aobj.httpreq.onreadystatechange = ajax_response;
        aobj.httpreq.open('GET', url, true);
        aobj.httpreq.send(null);
      } catch(e) {
        aobj.objid.innerHTML+='<br><em>This page is only available online.</em>';
      }
    }

    function ajax_response()
    {
      if( aobj.httpreq.readyState==4 )
      {
        if( aobj.httpreq.status==200 )
        {
          if(aobj.objid) aobj.objid.innerHTML=aobj.httpreq.responseText;
        }
        else
          if( aobj.objid ) aobj.objid.innerHTML+='the server is not responding.';
      }
    }

    function ajax_create() {
      try { return new ActiveXObject("Msxml2.XMLHTTP");    } catch(e) {}
      try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
      try { return new XMLHttpRequest();                   } catch(e) {}
      return null;
    }
  }

/*---------------------------------------------------------------------------
    xmlhttp_create
---------------------------------------------------------------------------*/
  function xmlhttp_create()
  {
    if( typeof XMLHttpRequest != "undefined" ) {
      try { return new XMLHttpRequest(); } catch(e) {}
    } else if( window.ActiveXObject ) {
      try { return new ActiveXObject("MSXML2.XMLHttp.5.0"); } catch(e) {}
      try { return new ActiveXObject("MSXML2.XMLHttp.4.0"); } catch(e) {}
      try { return new ActiveXObject("MSXML2.XMLHttp.3.0"); } catch(e) {}
      try { return new ActiveXObject("MSXML2.XMLHttp");     } catch(e) {}
      try { return new ActiveXObject("Microsoft.XMLHttp");  } catch(e) {}
    }
    throw new Error("Failed to create XMLHttp object.");
  }

/*---------------------------------------------------------------------------
  AjaxCallback
    request data, and use callback function for further processing
---------------------------------------------------------------------------*/
  function AjaxCallback( url, upd_func, p1, p2, p3 )
  {
    if(p1) url += '?' + p1;
    if(p2) url += '&' + p2;
    if(p3) url += '&' + p3;

    var oXmlHttp = xmlhttp_create();
    try
    {
      oXmlHttp.open("get", url, true);
      oXmlHttp.onreadystatechange =
        function ()
        {
          if (oXmlHttp.readyState == 4)
          {
            if( oXmlHttp.status == 200 ) {
              upd_func( oXmlHttp.responseText );
            }
          }
        };

      oXmlHttp.send(null);
    }
    catch(e) { /*alert('server offline!');*/ }
    return false;
  }

