/**
 * Copyright 2007, Yakabod, Inc.
 *
 * $Revision: 1.5 $
 * $Date: 2008/12/04 14:30:30 $
 *
 * Last edited by: $Author: jauldrid $
 */

/**
 * This javascript class should be called statically.
 * 
 * Examples:
 * 
 *    xmlhttp = XHR.getStaticXHRObject();
 *      Returns static (reusable) XHR object on success, null on failure.
 *
 *    xmlhttp = XHR.getXHRObject();
 *      Returns new XHR object on success, null on failure.
 */
var XHR = ( function()
{
  var oStaticXMLHttp = null;
  
  return {
    getStaticXHRObject: function()
    {
      if( oStaticXMLHttp === null )
      {
        oStaticXMLHttp = XHR.getXHRObject();
      }
      return oStaticXMLHttp;
    },

    getXHRObject: function()
    {
      var oXMLHttp = null;
      try
      {
        oXMLHttp = new XMLHttpRequest;
        XHR.getXHRObject = function()
        {
          return new XMLHttpRequest;
        };
      }
      catch( e )
      {
        var aMSxml = ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
        for( var nI = 0; nI < aMSxml.length; nI++ )
        {
          try
          {
            oXMLHttp = new ActiveXObject( aMSxml[nI] );
            XHR.getXHRObject = function()
            {
              return new ActiveXObject( aMSxml[nI] );
            };
            break;
          }
          catch( e )
          {
            oXMLHttp = null;
          }
        }
      }
      return oXMLHttp;
    }
  }
} )();

