function XMLStream() {
	var xmlhttp, bComplete = false;
	if (window.ActiveXObject) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return false;
			}
		}
	} else if (window.XMLHttpRequest) {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			return false;
		}
		xmlhttp.overrideMimeType("text/xml");
	}
	this.test = function() {
		alert("test");
	};
	this.connect = function(sURL, sMethod, sRequest, fDone, pid) {
		bComplete = false;
		sMethod = sMethod.toUpperCase();
		try {
			if (sMethod == "GET") {
				xmlhttp.open(sMethod, sURL+"?"+sRequest, true);
				try {
					xmlhttp.setRequestHeader("Content-Type","text/xml");
					xmlhttp.setRequestHeader("Cache-Control", "no-cache");
				} catch (e) {};
				sRequest = null;
			} else {
				xmlhttp.open(sMethod, sURL, true);
				xmlhttp.setRequestHeader("Connection", "close");
				xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
				xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && !bComplete) {
					if (xmlhttp.status == 200) {
						bComplete = true;
						var xmldoc = xmlhttp.responseXML;
						if (!xmldoc.documentElement && xmlhttp.responseStream) {
							xmldoc.load(xmlhttp.responseStream);
						}
						fDone(xmldoc, pid);
					}
				}
			};
		xmlhttp.send(sRequest);
		} catch(z) {
			return false;
		}
		return true;
	};
	return this;
}

if (!document.ELEMENT_NODE) {
	document.ELEMENT_NODE = 1;
	document.ATTRIBUTE_NODE = 2;
	document.TEXT_NODE = 3;
	document.CDATA_SECTION_NODE = 4;
	document.ENTITY_REFERENCE_NODE = 5;
	document.ENTITY_NODE = 6;
	document.PROCESSING_INSTRUCTION_NODE = 7;
	document.COMMENT_NODE = 8;
	document.DOCUMENT_NODE = 9;
	document.DOCUMENT_TYPE_NODE = 10;
	document.DOCUMENT_FRAGMENT_NODE = 11;
	document.NOTATION_NODE = 12;
}

document._importNode = function(node, allChildren) {
	switch (node.nodeType) {
		case document.ELEMENT_NODE:
			var newNode = document.createElement(node.nodeName);
			if (node.attributes && node.attributes.length > 0)
				for (var i = 0, il = node.attributes.length; i < il;)
					newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i++].nodeName));
			if (allChildren && node.childNodes && node.childNodes.length > 0)
				for (var i = 0, il = node.childNodes.length; i < il;)
					newNode.appendChild(document._importNode(node.childNodes[i++], allChildren));
			return newNode;
			break;
		case document.TEXT_NODE:
		case document.CDATA_SECTION_NODE:
		case document.COMMENT_NODE:
			return document.createTextNode(node.nodeValue);
			break;
	}
};

