var sendReq = getXmlHttpRequestObject();
var receiveReq = getXmlHttpRequestObject();
var lastMessage = 0;
var mTimer;

//Function for initializating the page.
function startChat() {
	//Set the focus to the Message Box.
	document.getElementById('txt_message').focus();
	//Start Recieving Messages.
	getChatText();
}		

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		document.getElementById('p_status').innerHTML = 'Status: Cound not create XmlHttpRequest Object.  Consider upgrading your browser.';
	}
}
			
//Gets the current messages from the server
function getChatText() {
	if (receiveReq.readyState == 4 || receiveReq.readyState == 0) {
		receiveReq.open("GET", 'include/getmessage.php?chat=' + document.getElementById('txt_room').value + '&uid=' + document.getElementById('txt_username_id').value + '&last=' + lastMessage, true);
		receiveReq.onreadystatechange = handleReceiveChat; 
		receiveReq.send(null);
	}			
}
			
//Add a message to the chat server.
function sendChatText() {

	if (sendReq.readyState == 4 || sendReq.readyState == 0) {
		
		if(document.getElementById('txt_message').value == '') {
			alert("You have not entered a message");
			return;
		}
		
		var textMessage;
		textMessage = document.getElementById('txt_message').value;
		for (i = 0; i < textMessage.length; i++){ 
			textMessage = textMessage.replace("&","*am*");
		}
		//alert(textMessage);
		
		sendReq.open("POST", 'include/getmessage.php?chat=' + document.getElementById('txt_room').value + '&uid=' + document.getElementById('txt_username_id').value + '&last=' + lastMessage, true);
		sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		sendReq.onreadystatechange = handleSendChat; 
		var param = 'message=' + textMessage;
		param += '&name=' + document.getElementById('txt_username').value;
		param += '&uid=' + document.getElementById('txt_username_id').value;
		param += '&chat=' + document.getElementById('txt_room').value;
		sendReq.send(param);
		document.getElementById('txt_message').value = '';
	}							
}

//When our message has been sent, update our page.
function handleSendChat() {
	//Clear out the existing timer so we don't have 
	//multiple timer instances running.
	clearInterval(mTimer);
	getChatText();
}

//Function for handling the return of chat text
function handleReceiveChat() {
	if (receiveReq.readyState == 4) {
		var chat_div = document.getElementById('div_chat');
		var xmldoc = receiveReq.responseXML;
		var message_nodes = xmldoc.getElementsByTagName("message"); 
		var n_messages = message_nodes.length
		for (i = 0; i < n_messages; i++) {
			var user_node = message_nodes[i].getElementsByTagName("user");
			var text_node = message_nodes[i].getElementsByTagName("text");
			var time_node = message_nodes[i].getElementsByTagName("time");
			if (i % 2 == 0){
				chat_div.innerHTML += '<p class="other_row"><strong>' + user_node[0].firstChild.nodeValue + ' says</strong><br />' + text_node[0].firstChild.nodeValue + '</p>';
			} else {
				chat_div.innerHTML += '<p><strong>' + user_node[0].firstChild.nodeValue + ' says</strong><br />' + text_node[0].firstChild.nodeValue + '</p>';
			}
			//chat_div.innerHTML += '<em>' + time_node[0].firstChild.nodeValue + '</em>) :';
			//chat_div.innerHTML += text_node[0].firstChild.nodeValue + '</p>';
			chat_div.scrollTop = chat_div.scrollHeight;
			lastMessage = (message_nodes[i].getAttribute('id'));
		}
		mTimer = setTimeout('getChatText();',10000); //Refresh our chat in 2 seconds
	}
}

//This functions handles when the user presses enter.  Instead of submitting the form, we
//send a new message to the server and return false.
function blockSubmit() {
	sendChatText();
	return false;
}

//This cleans out the database so we can start a new chat session.
			function resetChat() {
				if (sendReq.readyState == 4 || sendReq.readyState == 0) {
					sendReq.open("POST", 'include/getmessage.php?chat=1&last=' + lastMessage, true);
					sendReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					sendReq.onreadystatechange = handleResetChat; 
					var param = 'action=reset';
					sendReq.send(param);
					document.getElementById('txt_message').value = '';
				}							
			}
			//This function handles the response after the page has been refreshed.
			function handleResetChat() {
				document.getElementById('div_chat').innerHTML = '';
				getChatText();
			}	


function addLoadEvent(func){
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

addLoadEvent(startChat);
