/*############################################
sendAjax(method, url, qs, successFunc, failureFunc, debug)
sendAjax('GET', '/?val=2&soandso=5', 'otherval=3', whatToDoWhenSuccess, whatToDoWhenFailure, false)
sendAjax('POST', '/', 'val=2&soandso=5&otherval=3', null, null, true)
############################################*/

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 = window.location.href.substr(0, window.location.href.indexOf('/', 8)) + url;
//		url = encodeURI(url);
		AjaxObj.url = url;
		ajaxHttp.open(method, url, true);
		if (method.toLowerCase() == "post") {
			ajaxHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
		}
		ajaxHttp.onreadystatechange = handleAjaxResponse;
		AjaxObj.isWorking = true;

		try {
			ajaxHttp.send(qs);
			return true;
		}
		catch (err) {
			return false;
		}
	}
	else {
		return false;
  }
}

function handleAjaxResponse() {
	if (ajaxHttp.readyState == 4) {
		var ajaxResponse = ajaxHttp.responseText;
		var status = ajaxHttp.status;
		var debug = AjaxObj.debug;
		var successFunc = AjaxObj.successFunc;
		var failureFunc = AjaxObj.failureFunc;
		AjaxObj.isWorking = false;

		if (status == 200) {
			if (debug) {
				ajaxDebugSuccess(ajaxResponse);
			}
			else if (successFunc) {
				// - BEGIN - NEW CODE
				if (window.XMLHttpRequest) {
					//ajaxHttp.onreadystatechange = null;
					ajaxHttp.abort();
					ajaxHttp = new XMLHttpRequest();
				}
				// - END - NEW CODE
				if (typeof(successFunc) == "string") {
					eval(successFunc + "('" + ajaxResponse + "')");
				}
				else if (typeof(successFunc) == "function") { 

					successFunc(ajaxResponse);
				}
			}
		}
		else {
			if (debug) {
				ajaxDebugFailure(status, ajaxResponse);
			}
			else if (failureFunc) {
				if (typeof(failureFunc) == "string") {
					eval(failureFunc + "(" + status + ", '" + ajaxResponse + "')");
				}
				else if (typeof(failureFunc) == "function") {
					failureFunc(status, ajaxResponse);
				}
			}
		}
	}
}

function ajaxDebugSuccess(str) {
	var win = window.open();
	win.document.body.innerHTML = "Success with URI: " + AjaxObj.url + "<p>" + str;
}

function ajaxDebugFailure(errorCode, str) {
	var win = window.open();
	win.document.body.innerHTML = "Failure with URI: " + AjaxObj.url + " (error " + errorCode + ")<p>" + str;
}
