function handleXmlReply(http_request, replyHandler) {
	if (http_request.readyState == 4) {
		clearTimeout(http_request.requestTimer);
		replyHandler(http_request);
	}
}

function sendXmlMessage(target, parms, replyHandler) {
	var http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType("text/xml;charset=utf-8");
		}
	} 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, replyHandler);
	};
	http_request.open("POST", "http://" + document.location.host + target, true);
	http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   http_request.requestTimer = setTimeout(function() {
       http_request.abort();
		 sendXmlMessage(target, parms, replyHandler)
     }, 20000);	//20 seconds max before retry
	http_request.send(parms);
}

function heartbeat() {
	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 () {
		returned(http_request);
	};
	http_request.open("POST", "http://" + document.location.host + "/kids/heartbeat.jsp", true);
	http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http_request.send("heartbeat=true");
}

function returned(http_request) {
	if (http_request.readyState == 4) {
		window.setTimeout("heartbeat()", 600000);
	}
}

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.focus) {
			win.focus();
		}
		return win;
	} else {
		var win;
		if (url.charAt(0) == '/') {
			win = window.open("http://" + document.location.host + url, name, "width=" + width + ",height=" + height + ",left=" + x + ",screenX=" + x + ",top=" + y + ",screenY=" + y + ",scrollbars=yes,resizable=yes");
		}
		else {
			win = window.open("http://" + document.location.host + "/pulse/" + 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);
	}
}


