var http_request = false;
var dataCount = 0;
var dataList = new Array();
var responseCount = 0;
var response = new Array()
var callbackFunction = '';
var debugAjax = false;
var xmldoc;

function replace(s,r,subject){
  var l = subject.indexOf(s);
  while (l > -1) {
    subject = subject.substring(0,l) + r + subject.substring(l+s.length,l.length);
    l = subject.indexOf(s);
  }
  return subject;
}

function dataItem(name,value){
  this.name = name;
  this.value = value;
}

function clearDataList(){
  dataCount = 0;
}

function addDataItem(name,value){
  dataList[dataCount] = new dataItem(name,value);
  dataCount++;
}

function ajaxData(name){
  var i;
  var index = -1;
  for (i = 0; i < responseCount; i++){
    if (response[i].name == name) { index = i; }
  }
  return response[index].value;
}

function ajaxRequest(url,callback) {
  var i;
  var query = '';
  callbackFunction = callback;
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Error : XMLHTTP instantiation failed');
    return false;
  }
  http_request.onreadystatechange = parseResponse;
  http_request.open('POST', url, true);
  http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  for (i = 0; i < dataCount; i++){
    query += dataList[i].name + '=' + escape(dataList[i].value);
    if (i != dataCount-1) { query += '&'; }
  };
  http_request.send(query);
  clearDataList();
}

function directAjaxRequest(url,callback) {
  var i;
  var query = '';
  callbackFunction = callback;
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Error : XMLHTTP instantiation failed');
    return false;
  }
  http_request.onreadystatechange = parseResponse;
  http_request.open('GET', url, true);
  http_request.send(null);
}

function parseResponse() {
  var i;
  responseCount = 0;
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      xmldoc = http_request.responseXML;
      if (debugAjax) {
        alert(http_request.responseText);
      }
      var dataBlock = xmldoc.getElementsByTagName('data');
      for (i = 0; i < dataBlock.length; i++){
        dataName = dataBlock[i].getAttribute("name");
        dataValue = dataBlock[i].getAttribute("value");
        response[responseCount] = new dataItem(dataName,dataValue);
        responseCount++;
      }
      eval(callbackFunction);
    } else {
      if (http_request.status != 0) {alert('Data request failed\n\nreadyState: '+http_request.readyState+', Status: '+http_request.status);}
    }
  }
}


function alertContents() {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {
      var xmldoc = http_request.responseXML;
      var root_node = xmldoc.getElementsByTagName('root').item(0);
      alert(root_node.firstChild.data);
    } else {
      alert('Error: Data request failed (alertContents)');
    }
  }
}
