var xmlReplyHandlers = new Array();

function registerXmlReplyHandler(name, replyHandler) {
	var obj = new Object();
	obj.name = name;
	obj.replyHandler = replyHandler;
	xmlReplyHandlers[xmlReplyHandlers.length] = obj;
}

function unregisterXmlReplyHandler(name) {
	var i;
	for (i=0;i<xmlReplyHandlers.length;i++) {
		if (xmlReplyHandlers[i].name == name) {
			xmlReplyHandlers.splice(i,1);
		}
	}
}

function handleXmlReply(http_request) {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xmldoc = http_request.responseXML.documentElement;
			var tag = xmldoc.tagName;
			var i;
			for (i=0;i<xmlReplyHandlers.length;i++) {
				if (xmlReplyHandlers[i].name == tag) {
					xmlReplyHandlers[i].replyHandler(http_request);
					return;
				}
			}
			alert("No handler found for "+tag);
		}
		else {//if (http_request.status == 408) {
			if (window.console && window.console.log)
				window.console.log("handleXmlReply is retrying request due to timeout or error");
			sendXmlMessage(http_request.theTarget, http_request.theParms);
		}
	}
}

function sendXmlMessage(target, parms) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType("text/xml");
		}
	} else {
		if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {
				}
			}
		}
	}
	if (!http_request) {
		return false;
	}
	http_request.onreadystatechange = function () {
		handleXmlReply(http_request);
	};
	http_request.theTarget = target;
	http_request.theParms = parms;
	http_request.open("POST", "http://" + document.location.host + target, true);
	http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http_request.send(parms);
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft, curtop];
}

function windowopen(url, name, width, height) {
	var x = (screen.width - width) / 2;
	var y = (screen.height - height) / 2;
	if (url.indexOf("http") == 0) {
		var win = window.open(url, name, "width=" + width + ",height=" + height + ",left=" + x + ",screenX=" + x + ",top=" + y + ",screenY=" + y + ",scrollbars=yes,resizable=yes");
		if (window.focux) {
			win.focus();
		}
		return win;
	} else {
		var win = window.open("http://" + document.location.host + "/ncl/" + url, name, "width=" + width + ",height=" + height + ",left=" + x + ",screenX=" + x + ",top=" + y + ",screenY=" + y + ",scrollbars=yes,resizable=yes");
		if (window.focus) {
			win.focus();
		}
		return win;
	}
}

function addDynamicContent(elementid, content) {
	if (document.all) {
		alert("Can't do it");
		return;
	}
	if (document.getElementById) {
		rng = document.createRange();
		el = document.getElementById(elementid);
		rng.setStartBefore(el);
		htmlFrag = rng.createContextualFragment(content);
		while (el.hasChildNodes()) {
			el.removeChild(el.lastChild);
		}
		el.appendChild(htmlFrag);
	}
}

