// threadsafe asynchronous XMLHTTPRequest code
function ajaxSend(url, divid, ref, cmd){

	// we use a javascript feature here called "inner functions"
	// using these means the local variables retain their values after the outer function
	// has returned. this is useful for thread safety, so
	// reassigning the onreadystatechange function doesn't stomp over earlier requests.
		
	function ajaxBindCallback(){
		if (ajaxRequest.readyState == 4) {
			if (ajaxRequest.status == 200) {
				if (ref != null && trim(ajaxRequest.responseText) != 'Login Failed')
				{	
					document.getElementById(divid).innerHTML = ajaxRequest.responseText;
					document.location.reload(true);
				}
				else if (divid != null)
				{
					document.getElementById(divid).innerHTML = ajaxRequest.responseText;
					
					if(cmd != null)
						eval(cmd);
				}				
			}
		}
	}

	// use a local variable to hold our request and callback until the inner function is called...
	var ajaxRequest = null;
	
	if (divid != null)
		document.getElementById(divid).innerHTML = '<img src="/library/images/general/ajax-loader.gif">';
	// bind our callback then hit the server...
	if (window.XMLHttpRequest) {
		// moz et al
		ajaxRequest = new XMLHttpRequest();
		ajaxRequest.onreadystatechange = ajaxBindCallback;
		ajaxRequest.open("GET", url, true);
		ajaxRequest.send(null);
	} else if (window.ActiveXObject) {
		// ie
		ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
		if (ajaxRequest) {
			ajaxRequest.onreadystatechange = ajaxBindCallback;
			ajaxRequest.open("GET", url, true);
			ajaxRequest.send();
		}
	}
}
