		function createXmlHttpRequest() {
			try {
				if (typeof ActiveXObject != 'undefined') {
					return new ActiveXObject('Microsoft.XMLHTTP');
				} else if (window["XMLHttpRequest"]) {
					return new XMLHttpRequest();
				}
			} catch (e) {
				changeStatus(e);
			}
			return null;
		};

		function downloadUrl(url, callback) {
			var status = -1;
			var request = createXmlHttpRequest();
			if (!request) {
				return false;
			}

			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					try {
						status = request.status;
					} catch (e) {
					// Usually indicates request timed out in FF.
					}
					if (status == 200) {
//						callback(request.responseXML, request.status);  // XML
						callback(request.responseText, request.status);  // JSON
						request.onreadystatechange = function() {};
					}
				}
			}
			request.open('GET', url, true);
			try {
				request.send(null);
			} catch (e) {
				changeStatus(e);
			}
		};

		function downloadScript(url) {
			var script = document.createElement('script');
			script.src = url;
			document.body.appendChild(script);
		}

