function addEvent(elm, evType, fn, useCapture)   
{   
	if (elm.addEventListener){   
	elm.addEventListener(evType, fn, useCapture);   
	return true;   
	} else if (elm.attachEvent){   
	var r = elm.attachEvent("on"+evType, fn);   
	return r;   
	} else {   
	//alert("Handler could not be removed");   
	}   
}    

//the following two functions are helper infrastructure to 
//craete a XMLHTTPRequest and register a listner callback function

function newXMLHttpRequest() {
	var xmlreq = false;
	if (window.XMLHttpRequest) {
		xmlreq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
    		// Try ActiveX
		try { 
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) { 
			// first method failed 
			try {
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				 // both methods failed 
			} 
		}
 	}
   	return xmlreq;
} 

function getReadyStateHandler(req, responseXmlHandler) {
	return function () {
	if (req.readyState == 4) {
		if (req.status == 200) {
        		responseXmlHandler(req.responseText);
        		//responseXmlHandler(req.responseXML);
		} else {
			//alert("ERROR: "+ req.status);
			//var hellomsg = document.getElementById("hellomsg");
			//hellomsg.innerHTML = "ERROR: "+ req.status;
      		}
    	}
 	}
}
