function ajax() {
var create_request_object = function() {
var ro;
var browser = navigator.appName;
if(browser == 'Microsoft Internet Explorer') {
ro = new ActiveXObject('Microsoft.XMLHTTP');
} else {
ro = new XMLHttpRequest();
}
return ro;
}

var http = create_request_object();
var active = false;
var queue = new Array();

var send_request = function(url, query_string) {
if(!query_string) {
query_string = '';
}

active = true;
http.open('post', url, true);
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.setRequestHeader('Content-length', query_string.length);
http.setRequestHeader('Connection', 'close');
http.onreadystatechange = handle_response;
http.send(query_string);
}

var handle_response = function() {
if(http.readyState == 4) {
var response = http.responseText;
var tmp = queue.shift();
var handle = tmp['handle'];
var handle_args = tmp['handle_args'];

if(handle) {
if(handle_args) {
var arg_str = 'response';
for(var i = 0; i < handle_args.length; i++) {
arg_str += ', ' + handle_args[i];
}
eval(handle + '(' + arg_str + ');');
} else {
eval(handle + '(response);');
}
}

if(queue.length != 0) {
http = create_request_object();
send_request(queue[0]['url'], queue[0]['query_string']);
} else {
http = create_request_object();
active = false;
}
}
}

this.send = function(url, query_string, handle, handle_args) {
var tmp = new Array();
tmp['url']          = url;
tmp['query_string'] = query_string;
tmp['handle']       = handle;
tmp['handle_args']  = handle_args;

queue.push(tmp);

if(!active && queue.length) {
send_request(queue[0]['url'], queue[0]['query_string']);
}
}

this.is_active = function() {
if(active) {
return queue.length;
} else {
return false;
}
}
}
