function ajaxRequest() {
	if(window.XMLHttpRequest){
		xmlreq=new XMLHttpRequest();
		if(xmlreq.overrideMimeType){
			xmlreq.overrideMimeType('text/xml');
		}
	} else if(window.ActiveXObject){
		try{
			xmlreq=new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try{
				xmlreq=new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e){
			}
		}
	}

	this.send =
	function(target) {
		if(window.XMLHttpRequest){
			xmlreq=new XMLHttpRequest();
			if(xmlreq.overrideMimeType){
				xmlreq.overrideMimeType('text/xml');
			}
		} else if(window.ActiveXObject){
			try{
				xmlreq=new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try{
					xmlreq=new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e){
				}
			}
		}
		
		xmlreq.onreadystatechange = 
		function() {
			if(xmlreq.readyState == 4) {
				if(xmlreq.status == 200) {
					broadcast.respondLoadPGNfile(xmlreq.responseText.match(/<pgn>([\W\w]*)<\/pgn>/)[1]);
				} else {
					alert("Unable to fetch PGN file");
				}
			}
		}
		// We are going to use timestamp in request parameters to avoid cache hits (bad for broadcasts)
		var date = new Date();
		
		xmlreq.open("GET", target + "?timestamp=" + date.getTime() + (this.query ? "&" + this.query : ""), true); 
		xmlreq.send(null);
	}
}
