// ajax.js

function makeRequest(siteurl, sitepage, elementidtoset, mimetype) {
  var httpRequest;

  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    try {
      httpRequest = new XMLHttpRequest();
      } catch (ex) { alert("Couldn't create new XMLHttpRequest because:\n" + ex); }
    }
  else
  if (window.ActiveXObject) { // IE
    try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e) {
      try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch (ex) { alert("Couldn't create new XMLHttpRequest because:\n" + ex); }
      }
    }

  if (!httpRequest) {
    alert("Giving up :(\nCannot create an XMLHTTP instance");
    return false;
    }

  // Try this
  if (mimetype == "") { mimetype = "text/html"; }
  try { httpRequest.overrideMimeType(mimetype); }
  catch (ex) { 
    // alert("Couldn't change MIME Type to '" + mimetype + "' because:\n" + ex); 
    }

  httpRequest.onreadystatechange = function() { alertContents(httpRequest, elementidtoset, siteurl); };
  httpRequest.open('GET', siteurl + '/' + sitepage + '?siteurl=' + siteurl + '&sitepage=' + sitepage + '&elementidtoset=' + elementidtoset + '&mimetype=' + mimetype, true);
  httpRequest.send('');
  } // function makeRequest


function alertContents(httpRequest, elementidtoset, siteurl) {
  // Make sure that the transaction has finished. The XMLHttpRequest object 
  // has a property called readyState with several states:
  // 0: Uninitialised
  // 1: Loading
  // 2: Loaded
  // 3: Interactive
  // 4: Finished

  var vStatus = -1;

  if (httpRequest.readyState == 4) {
    try {
      vStatus = httpRequest.status;
      } catch (ex) {
//      alert("SJT - Couldn't get the httpRequest.status because:\n" + ex);
      } // try / catch

    if (vStatus > -1) {
      if (vStatus == 200) {
        setElement(httpRequest.responseText, elementidtoset);
//      alert(httpRequest.responseText);
        } else {
        alert('There was a problem with the request.  Code ' + vStatus);
        }
      } // if vStatus > -1
    } // if readyState = 4
  } // function alertContents


// For the main element to be set
function setElement( ip_text, elementidtoset ) {

  // Run a procedure to deal with the Ajax result, if it exists.  self refers to window
  if (elementidtoset == '') {
    if (self.f_ProcessAjaxResult != null) {
      f_ProcessAjaxResult( ip_text );  // a procedure local to the page
      } // if function exists
    } // if element to set is null
  else {
    // Test the innerHTML attribute to see if it's defined.  If not (if NULL), write to value instead.
    // This won't deal with selects as yet, in future it might.
    vInnerHTML = document.getElementById(elementidtoset).innerHTML;
    if (vInnerHTML == null) {
      document.getElementById(elementidtoset).value = ip_text;
      }
    else {
      document.getElementById(elementidtoset).innerHTML = ip_text;
      }
    } // else for Function
  } // function setElement
