var AjaxObj = {
	successFunc : null,
	failureFunc : null,
	debug : null,
	url : null,
	isWorking : false
}
/* Create a new XMLHttpRequest object to talk to the Web server */
var ajaxHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  ajaxHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    ajaxHttp = false;
  }
}
@end @*/

if (!ajaxHttp && typeof(XMLHttpRequest) != 'undefined') {
  ajaxHttp = new XMLHttpRequest();
}

function sendAjax(method, url, qs, successFunc, failureFunc, debug) {
  if (!AjaxObj.isWorking && ajaxHttp) {
  	AjaxObj.successFunc = successFunc;
  	AjaxObj.failureFunc = failureFunc;
  	AjaxObj.debug = debug ? true : false;

	url += (url.indexOf("?") > 0) ? "&" : "?";
	if (method.toLowerCase() != "post") {
		if (qs) {
			url += qs + "&";
		}
		if (window.XMLHttpRequest) {
			qs = null;
		}
		else if (window.ActiveXObject) {
			qs = "";
		}
	}
	url += "clocktime=" + new Date().getTime();
	url = encodeURI(url);
	AjaxObj.url = url;
  	ajaxHttp.open(method, url, true);
	if (method.toLowerCase() == "post") {
		ajaxHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	}
	ajaxHttp.onreadystatechange = handleAjaxResponse;
	AjaxObj.isWorking = true;


	ajaxHttp.send(qs);
  }
}

function handleAjaxResponse() {
//alert(ajaxHttp.readyState + ' = ' + AjaxObj.url);
	if (ajaxHttp.readyState == 4) {
		AjaxObj.isWorking = false;
		var ajaxResponse = ajaxHttp.responseText;
		if (ajaxHttp.status == 200) {
			if (AjaxObj.debug) {
				ajaxDebugSuccess(ajaxResponse);
			}
			else if (AjaxObj.successFunc) {
				if (typeof(AjaxObj.successFunc) == "string") {
					eval(AjaxObj.successFunc + "('" + ajaxResponse + "')");
				} else if (typeof(AjaxObj.successFunc) == "function") { 


			// - BEGIN - NEW CODE
			if (window.XMLHttpRequest) {
//				ajaxHttp.onreadystatechange = null;
				ajaxHttp.abort();
				ajaxHttp = new XMLHttpRequest();
			}
			// - END - NEW CODE


					AjaxObj.successFunc(ajaxResponse);
				}
			}
		}
		else {
			if (AjaxObj.debug) {
				ajaxDebugFailure(ajaxHttp.status, ajaxResponse);
			}
			else if (AjaxObj.failureFunc) {
				if (typeof(AjaxObj.failureFunc) == "string") {
					eval(AjaxObj.failureFunc + "(" + ajaxHttp.status + ", '" + ajaxResponse + "')");
				} else if (typeof(AjaxObj.failureFunc) == "function") {
					AjaxObj.failureFunc(ajaxHttp.status, ajaxResponse);
				}
			}
		}
//		AjaxObj.isWorking = false;
	}
}

function ajaxDebugSuccess(str) {
	var win = window.open();
	win.document.body.innerHTML = "Success with URI: " + AjaxObj.url + "<p>" + str;
	win.resizeTo(500,600);
}

function ajaxDebugFailure(errorCode, str) {
	var win = window.open();
	win.document.body.innerHTML = "Failure with URI: " + AjaxObj.url + " (error " + errorCode + ")<p>" + str;
	win.resizeTo(500,600);
}