
// ========================================== //
// AJAX FUNCTION LIBRARY											//
// (c) 2007 Oude Veldhuis Automatisering VOF	//
// ========================================== //

// Variables
var sNoAjaxSupport = "<br><font color='#C00000'><b>Uw browser ondersteunt geen XML HTTP requests, upgrade naar de nieuwste versie.</b></font>";
var sRequestFailed = "<br><font color='#C00000'><b>Het verzoek kon niet uitgevoerd worden.</b></font>";
var ajaxTarget;
var http_request;

// Hoofdfunctie: verzend een formulier via een AJAX request
function ajaxForm(formID, targetID, url, asynchronous)
{
    // Voeg het target object als eerste toe aan de lijst met te posten parameters
  var params = "ajaxTarget=" + targetID;

  // Form = this, id of "id"
  var frm;
  if (typeof formID == "string")
    frm = document.getElementById(formID);
  else
    frm = formID;

  // Loop alle elementen van de form langs
  for (var x = 0; x < frm.elements.length; x++)
  {
    var item = false;

    // Haal naam of ID van element op
    item = frm.elements[x].id ? frm.elements[x].id : frm.elements[x].name;

    // Voeg de parameter toe aan de lijst
    if (((frm.elements[x].type == 'radio') || (frm.elements[x].type == 'checkbox')) &&
         (frm.elements[x].checked == false))
    {
      continue;
    }

//  MOV 110829 De escape () gaf problemen met UTF-8
//  if (item) params += "&" + item + "=" + escape(frm.elements.item(x).value);
    if (item) params += "&" + item + "=" + frm.elements.item(x).value;
  }

  // Post via een AJAX request
  ajaxPost(targetID, url, params, asynchronous);

  // Zorg dat de form niet verder gepost wordt
  return false;
}

// Hoofdfunctie: doe een asynchrone GET
function ajaxGet(object, url, asynchronous)
{
  ajaxInitialize();
  ajaxSetTarget(object);
  if (http_request)
  {
    // Say what to do when changing state and send request
    http_request.onreadystatechange = ajaxHandleRequest;
    http_request.open("GET", url, asynchronous);
    http_request.send(null);

    if ((window.XMLHttpRequest) && (asynchronous == false))
    { // FireFox 1.5/2.0 roept de onreadystatechange functie (hier: ajaxHandleRequest) niet aan bij
      // synchrone communicatie. Die moet hier dus nog worden aangeroepen... (bug firefox... ??)
      ajaxHandleRequest();
    }
  }
  else
  {
    ajaxTarget.innerHTML = sNoAjaxSupport;
  }
}

// Hoofdfunctie: zet tekst in een div of span object
function ajaxSet(object, tekst)
{
  ajaxInitialize();
  ajaxSetTarget(object);
	ajaxTarget.innerHTML = tekst;
}

// Hoofdfunctie: doe een asynchrone POST
function ajaxPost(object, url, params, asynchronous)
{
  ajaxInitialize();
  ajaxSetTarget(object);
  if (http_request)
  {
    http_request.onreadystatechange = ajaxHandleRequest;
    http_request.open("POST", url, asynchronous);
    http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    http_request.send(params);

    if ((window.XMLHttpRequest) && (asynchronous == false))
    { // FireFox 1.5/2.0 roept de onreadystatechange functie (hier: ajaxHandleRequest) niet aan bij
      // synchrone communicatie. Die moet hier dus nog worden aangeroepen... (bug firefox... ??)
      ajaxHandleRequest();
    }
  }
  else ajaxTarget.innerHTML = sNoAjaxSupport;
}

// Hulpfunctie: initialiseer het xmlHttpRequest object
function ajaxInitialize()
{
  // Initialize
  http_request = false;

  if (window.XMLHttpRequest)
  { // Mozilla, Safari, Opera, ...
    http_request = new XMLHttpRequest();
  }
  else
  if (window.ActiveXObject)
  { // Internet Explorer
    try
    {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) { }
    }
  }
}

// Hulpfunctie: zet ID-string zonodig om naar object
function ajaxSetTarget(object)
{
  if (typeof object == "string")
    ajaxTarget = document.getElementById(object);
  else
    ajaxTarget = object;
}

// Hulpfunctie: handel asynchrone requests af
function ajaxHandleRequest()
{
  // ReadyStates:
  //  0: uninitialized
  //  1: loading
  //  2: loaded
  //  3: interactive
  //  4: complete

  // Ready?
  if (http_request.readyState == 4)
  {
    showLoadingBox(false, "");

    // Status OK?
    if (http_request.status == 200)
    {
	    ajaxTarget.innerHTML = unescape(http_request.responseText);
    }
    else
    {
      ajaxTarget.innerHTML = sRequestFailed;
    }
  }
  else if (http_request.readyState >= 1 && http_request.readyState <= 3)
  {
    showLoadingBox(true, "Even geduld svp ...");
  }
}

// Hulpfunctie: toon of verberg infobox
function showLoadingBox(doShow, boxText)
{
  var box = document.getElementById('AJAX_LOADING_BOX');
  if (box)
  {
    box.style.display = doShow ? '' : 'none';
  }
  else if (doShow)
  {
    box                       = document.createElement('div');
    box.id                    = 'AJAX_LOADING_BOX';
    box.innerHTML             = boxText;
    box.style.color           = '#fff';
    box.style.position        = 'absolute';
    box.style.top             = 3;
    box.style.right           = 2;
    box.style.backgroundColor = '#00F';
    box.style.borderRight     = '1px solid #666';
    box.style.borderBottom    = '1px solid #444';
    box.style.padding         = '3px';
    box.style.fontFamily      = 'Tahoma, Arial, Helvetica, sans';
    box.style.fontSize        = '10px';
    box.style.fontWeight      = 'bold';
    
    document.body.insertBefore(box, document.body.firstChild);
  }
}

