// @cvs-id $Id: ajax-obj.js,v 1.2 2007/11/13 04:10:29 nsadmin Exp $ $Name: bridge-release-2_7_0 $
// Copyright 2005-2006 Ybos Corporation
// @author Titi Ala'ilima (titi@medtouch.com)
// @author Paul Meisel (paulm@oho.com)
// @creation-date 2006-10-27

// An object-oriented AJAX library

// Used for forcing refresh, set values when needed
var refreshCookie;
var refreshHost;
 
// Store all requests
 
var xmlRequests = new Array();
 
// Generate a unique number to identify each request
 
function getXmlRequestNumber () {
  return getXmlRequestNumber.value++;
}
 
getXmlRequestNumber.value = 0;
 
// Returns a function which puts the HTML message into the innerHTML of the tag
 
function showMessage (tag, message) {
  return function () {
    tag.innerHTML = message;
  }
}
 
// Returns a function which takes in a request and puts the response text into the
// innerHTML of the tag
 
function showResponse (tag) {
  return function(request) {
    if (request.status != 200)
      window.open().document.write(request.responseText);
    else if (tag)
      tag.innerHTML = request.responseText;
    return request.status;
  }
}
 
 
// altUrl is a URL to use for non-AJAX browsers
 
function getXmlRequest(altUrl) {
  if (window.ActiveXObject)
    return new window.ActiveXObject("Msxml2.XMLHTTP");
  else if (window.XMLHttpRequest)
    return new XMLHttpRequest();
  else if (altUrl && altUrl != "")
    location.replace(altUrl);
  return;
}
 
function sendXmlRequest(url, altUrl, waitScript, endScript, forceRefresh, method, postVars, syncP) {
  var request = getXmlRequest(altUrl);
  var actions;
 
  if (!method)
    if (postVars)
      method = "POST";
    else
      method = "GET";
 
  xmlRequests[getXmlRequestNumber()] = request;
 
  if (!request) return;
 
  if (waitScript && waitScript != "") {
    waitScript();
  }
 
  if (forceRefresh)
    document.cookie = refreshCookie + "=1; domain=." + refreshHost + "; path=/"; 
  request.onreadystatechange = function () {
    var script = actions[request.readyState];
    if (script)
      return script(request);
    return;
  }
 
  actions = new Array();
 
  actions[4] = endScript;
 
  request.open(method, url, !syncP);
 
  request.send(postVars);
 
  return request;
}
 
 
function xmlGet(url, alt_url, div, message, forcerefresh, vars) {
  sendXmlRequest(url, alt_url, showMessage(message, getByID(div)),
                 showResponse(getByID(div)), forcerefresh, "GET");
}
 
function xmlPost(url, alt_url, div, message, forcerefresh, vars) {
  sendXmlRequest(url, alt_url, showMessage(message, getByID(div)),
                 showResponse(getByID(div)), forcerefresh, "POST", vars);
}
 
function is_ajax_done() {
 
        for (var i = 0; i < getXmlRequestNumber.value; i++) {
                if (!xmlRequests[i]) {
                        return false;
                }
                if (xmlRequests[i].readyState < 4) {
                return false;
                }
        //              setTimeout("throw Error('Testing: " + xmlRequests[i].readyState + "')", 0);
        }
        return true;
}
 
/* For Backwards Compatibility to ajax.js */

// xmlquick calls xmlpost in ajax.js, but ajax.js does not actually do a POST.  Here
// we use a GET because at least one place (calendar) uses the GET protocol.
function xmlquick (url, div) {
  return xmlGet(url, "", div, "", 0, "");
}

