<!-- Begin JavaScript
//Set our mssage refresh `heartbeat`...Every 10 seconds should work.
var pRBeat = setInterval("chatrecv()", 10000);

//Chat flags used to set the state of various controls on the form...
var CHATSTATE = new Object();
	CHATSTATE["CONN"] = 0;
	CHATSTATE["SMSG"] = 1;
	CHATSTATE["RMSG"] = 2;
	CHATSTATE["RUSR"] = 3;
	CHATSTATE["SERR"] = 4;
	CHATSTATE["CERR"] = 5;

function initChat() {
	//Grab a reference to the send button...
	var elem = document.getElementById("squawksend");
	//Capture the mouse click events...
	addEventListener(elem, "click", function(e) {
		squawksend_click(e);
	});
	//Grab a reference to the refresh button...
	var elem = document.getElementById("squawkrefresh");
	//Capture the mouse click events...
	addEventListener(elem, "click", function(e) {
		chatrecv();
	});
	//Get a reference to the chat form...
	elem = document.getElementById("jaxchat");
	addEventListener(elem, "submit", function(e) {
		//Make sure the standard form submission is disabled...
		cancelEvent(e);
		stopEvent(e);
		//Redirect to ajax submission...
		squawksend_click(e);
	});
	//Get a reference to the chat display...
	elem = document.getElementById("jaxsquawk");
	addEventListener(elem, "mouseover", function(e) {
		//Make sure the standard form submission is disabled...
		clearInterval(pRBeat);
		elem.style.overflow = "auto";
	});
	elem.style.overflow = "hidden";
	
	addEventListener(elem, "mouseout", function(e) {
		//Make sure the standard form submission is disabled...
		pRBeat = setInterval("chatrecv()", 10000);
		elem.style.overflow = "hidden";
	});
	//Get initial batch of messages...
	chatrecv();
}

function setChatState(chatState, isOn) {
	switch (chatState) {
		case CHATSTATE.CONN:
			tog_chat_connecting(isOn);
			break;
		case CHATSTATE.RMSG:
			tog_chat_rmsg(isOn);
			break;
		case CHATSTATE.RUSR:
			tog_chat_rusr(isOn);
			break;
		case CHATSTATE.SERR:
		case CHATSTATE.CERR:		
			tog_chat_error(isOn);
			break;
		case CHATSTATE.SMSG:
			tog_chat_smsg(isOn);
			break;
		default : break;
	}
}

function squawksend_click(e) {
	var elem = document.getElementById("squawkmsg");
	var elem2 = document.getElementById("squawkstatus");
	
	if(elem.value.trim() !== "") {
		clearInterval(pRBeat);
		var postData = "message=" + encodex(elem.value.trim()); //encodeURI()
		var httpReq = null;
		setChatState(CHATSTATE.SMSG, true);
		httpReq = createXMLHttpRequest();
		httpReq.open("POST", "postmsg.php", true);
		httpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		httpReq.setRequestHeader("Content-length", postData.length);
		httpReq.setRequestHeader("Connection", "close");
		httpReq.onreadystatechange = function() {
			if(httpReq.readyState == 4) {
				if(httpReq.status == 200) {
					if(first_child(httpReq.responseXML.documentElement.getElementsByTagName("message")[0].getElementsByTagName("type")[0]).nodeValue == "success") {
						elem.value = "";
						elem2.innerHTML = "Message sent...Initiating receive.";
						chatrecv();
					}
					else {
						//Change to a popup notification div. ='P
					}
				}
				else {
					elem2.innerHTML = "HTTP Request Error " + httpReq.status + ": " + httpReq.statusText;
				}
				setChatState(CHATSTATE.SMSG, false);
			}
		}
		httpReq.send(postData);
		pRBeat = setInterval("chatrecv()", 10000);
	}
}

function chatrecv() {
	clearInterval(pRBeat);
	var elem = document.getElementById("squawkmsg");
	var elem2 = document.getElementById("squawkstatus");
	var httpReq = null;
	setChatState(CHATSTATE.RMSG, true);
	httpReq = createXMLHttpRequest();
	httpReq.open("GET", "getmsg.php", true);
	httpReq.onreadystatechange = function() {
		if(httpReq.readyState == 4) {
			if(httpReq.status == 200) {
				writeMessages(httpReq.responseXML.documentElement);
				elem2.innerHTML = "&nbsp;";
			}
			else {
				elem2.innerHTML = "HTTP Request Error " + httpReq.status + ": " + httpReq.statusText + ".";
			}
			scroljaxsquawk(document.getElementById("jaxsquawk"), true);
			setChatState(CHATSTATE.RMSG, false);
		}
	}
	httpReq.send(null);
	pRBeat = setInterval("chatrecv()", 10000);
}

function tog_chat_smsg(isOn) {
	var csend = document.getElementById("squawksend");
	var crefresh = document.getElementById("squawkrefresh");
	var	ctext = document.getElementById("squawkmsg");
	tog_chat_rmsg(isOn);
	if(!isOn) {
		csend.disabled = false;
		crefresh.disabled = false;
		var fadein = new Transition(LinearCurve, 1000, function(percentage) {
			setOpacity(ctext, Math.round(5 + ((percentage * 10)*.5)));
		});
		fadein.run();
		ctext.disabled = false;
		ctext.focus();
	}
	else {
		csend.disabled = true;
		crefresh.disabled = true;
		var fadeout = new Transition(LinearCurve, 1000, function(percentage) {
			setOpacity(ctext, Math.round(10 - ((percentage * 10)*.5)));
		});
		fadeout.run();
		ctext.disabled = true;
	}
}

//Change
function tog_chat_rmsg(isOn) {
	var crcvwait = document.getElementById("squawkbluff");
	if(!isOn) {
		crcvwait.style.display = "none";
	}
	else {
		crcvwait.style.display = "block";
	}
}

function writeMessages(xmldoc) {
	var theFragment = document.createDocumentFragment();
	var rootList = document.getElementById("messages");
	clearChildren(rootList);
	var messageParts = xmldoc.getElementsByTagName("message");
	for (var x = 0; x < messageParts.length; x++) {
		
		var posted = messageParts[x].getElementsByTagName("time")[0].childNodes[0].nodeValue;
		var poster = messageParts[x].getElementsByTagName("user")[0].childNodes[0].nodeValue;
		var mtext = messageParts[x].getElementsByTagName("msgtxt")[0].childNodes[0].nodeValue;
		var nowrapspan = document.createElement("span");
		var leadina = document.createElement("a");
		var leadin = document.createTextNode(poster  + ":");

		leadina.title = posted;
		leadina.href="/goto?dest=/the/profile/for-user/" + poster;
		leadina.appendChild(leadin);

		//var spantext = document.createTextNode(leadin);
		var newMsg = document.createElement("li");
		var randid = Math.floor(Math.random()*(50000+1));
		//nowrapspan.appendChild(leadina);
		//nowrapspan.style.whiteSpace = "nowrap";
		//nowrapspan.style.fontWeight = "bold";
		newMsg.appendChild(leadina);
		newMsg.innerHTML = newMsg.innerHTML + " " + mtext;
		//Prolly not needed since we're directly modifying the innerHTML of the element...
		newMsg.normalize();
		theFragment.appendChild(newMsg);
	}
	rootList.appendChild(theFragment);
	theFragment = null;
}

function scroljaxsquawk(elem, force) {
	if(force) {
		elem.scrollTop = elem.scrollHeight;
	}
}
// End JavaScript -->