var Ajax = {
   
  /**
   * @ public
   */
   get : function( uri, callback )
   {
      var f = function()
      {
         try
         {
            var o = Ajax.conn( callback );
   
            o.open( 'GET', uri, true );
            o.send( null );
         }
         catch ( e )
         {
            alert( e );
         }
      };

      setTimeout( function() { f() }, 0 );
   },

  /**
   * @ public
   */
   post : function( uri, postdata, callback )
   {
      var f = function()
      {
         try
         {
            var o = Ajax.conn( callback );
   
            o.open( 'POST', uri, true );
            o.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
            o.send( postdata + '&eod=true' );
         }
         catch ( e )
         {
            alert( e );
         }
      };

      setTimeout( function() { f() }, 0 );
   },

  /**
   * @ private, gets called by Ajax.conn
   */
   requestObject : function()
   {
      try { return new XMLHttpRequest } 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.2.0') } catch ( e ) {}
      try { return new ActiveXObject('Msxml2.XMLHttp') } catch ( e ) {}
      try { return new ActiveXObject('Microsoft.XMLHTTP') } catch ( e ) {}
      try { return window.createRequest() } catch ( e ) {}

      return false;
   },

  /**
   * @ private, gets called by Ajax.get or Ajax.post
   */
   conn : function( callback )
   {
      var o = Ajax.requestObject();
      
      if ( callback )
      {
         o.onreadystatechange = function()
         {
            if ( o.readyState == 4 && o.status == 200 ) callback( o );
         };
      }

      return o;
   }
};