// stores the reference to the XMLHttpRequest object
var xmlHttp = createXmlHttpRequestObject();
var xmlHttpXSL = createXmlHttpRequestObject();
 
// the XSLT document
var stylesheetDoc;

function createMsxml2DOMDocumentObject()
{
  // will store the reference to the MSXML object
  var msxml2DOM;
  // MSXML versions that can be used for our grid
  var msxml2DOMDocumentVersions = new Array("Msxml2.DOMDocument.6.0",
                                            "Msxml2.DOMDocument.5.0",
                                            "Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0");
  // try to find a good MSXML object
  for (var i=0; i<msxml2DOMDocumentVersions.length && !msxml2DOM; i++) 
  {
    try 
    { 
      // try to create an object
      msxml2DOM = new ActiveXObject(msxml2DOMDocumentVersions[i]);
    } 
    catch (e) {}
  }
  // return the created object or display an error message
  if (!msxml2DOM)
    alert("Please upgrade your MSXML version from \n" + 
          "http://msdn.microsoft.com/XML/XMLDownloads/default.aspx");
  else 
    return msxml2DOM;
}

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() 
{
  // will store the reference to the XMLHttpRequest object
  var xmlHttp;
 
  // this should work for all browsers except IE6 and older
  try
  {
    // try to create XMLHttpRequest object
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // assume IE6 or older
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // try every prog id until one works
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // try to create XMLHttpRequest object
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  // return the created object or display an error message
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else 
    return xmlHttp;
}

// makes asynchronous request to load a new universal page and calls specified function
function loadPageFX(fcn)
{
  
  // continue only if the XMLHttpRequest object isn't busy
  if (xmlHttp && (xmlHttp.readyState == 4 || xmlHttp.readyState == 0))
  {
    
    var query = feedUrl;// + "?action=FEED_GRID_PAGE&page=" + pageNo;
    //InfoMessageAdd('loadPageFX '+query);
    xmlHttp.open(feedMethod, query, true);
    xmlHttp.onreadystatechange = fcn;
    if (feedMethod == "POST") {
        xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
        xmlHttp.setRequestHeader("Content-length", feedParams.length);
    }
    xmlHttp.send(feedParams);
    
  }  
}

// loads the stylesheet from the server using a synchronous request
function loadStylesheet(xsltFileUrl)
{
    // load the file from the server
    xmlHttpXSL.open("GET", xsltFileUrl, false);                
    xmlHttpXSL.send(null);        
    // try to load the XSLT document
    if (this.DOMParser) // browsers with native functionality
    {
        var dp = new DOMParser();
        stylesheetDoc = dp.parseFromString(xmlHttpXSL.responseText, "text/xml");
    } 
    else if (window.ActiveXObject) // Internet Explorer? 
    {
        stylesheetDoc = createMsxml2DOMDocumentObject();                 
        stylesheetDoc.async = false;                 
        stylesheetDoc.load(xmlHttpXSL.responseXML);
    }
}
