// JavaScript Document

var chatID = -1;
var lastPostID = -1;
var invitationsSent = new Array();
var checkChat = true;
var memberStatuses = new Array();
var chatType = null;

function getChatPosts(id, lastPost, type)
{
	if (lastPostID == -1)
		lastPostID = lastPost;
	if (chatID == -1)
		chatID = id;
	if (typeof type != 'undefined')
		chatType = type;

	getAJAX("/ajax/get_chatposts?id=" + id + "&lastPost=" + lastPost, null, null, "reactChatPost");
}

function doChatPost(formID, id)
{
	text = "text=" + $(formID).value;
	$(formID).value = "";
	getAJAX("/ajax/do_chatposts?chatID=" + id, null, text);
	reactChatPost(null, null);
}

function reactChatPost(obj, xmlhttp)
{
	var updatePostID = true;


			
	if (xmlhttp.responseText)
	{
		var response = $H(xmlhttp.responseText.evalJSON(true));

		// update the list of people currently chatting
		if (typeof response.get('Statuses') != 'undefined')
		{
			var statuses = response.get('Statuses');
			
			if (chatType == 'Private')
			{
				var status = $H(statuses[0]);

				if (status.get('Status') == 'Rejected')
					$('ChatStatus').innerHTML = status.get('MemberName') + " has declined your invitation to chat.";
				else if (status.get('Status') == 'Pending')
					$('ChatStatus').innerHTML = "Waiting for " + status.get('MemberName') + " to join the chat.";
				else if (status.get('Status') == 'Offline')
					$('ChatStatus').innerHTML = status.get('MemberName') + " has left the chat.";
				else
					$('ChatStatus').innerHTML = "";
			}

			var chatters = $('Chatters');
			var row;
			
			for (var i = 0; i < statuses.length; i++)
			{
				var status = $H(statuses[i]);
				var memberName = status.get('MemberName');
				memberStatuses[memberName] = status.get('Status');
				var foundMember = false;
				for (var j = 0; j < chatters.rows.length; j++)
				{
					if (chatters.rows[j].cells[0].innerHTML.search(memberName) != -1)
					{
						row = chatters.rows[j];
						foundMember = true;
						if (row.cells.length == 0)
							row.insertCell(-1);
					}
				}
				
				if (!foundMember && status.get('Status') == 'Online')
				{
					row = chatters.insertRow(-1);
					row.insertCell(-1);
				}
					
				if (row != null)
				{
					var statusText = (status.get('Status') == 'Offline') ? ' is Offline' : '';
					
					row.cells[0].innerHTML = status.get('MemberName') + statusText;
					if (status.get('Status') == 'Offline')
						setTimeout('removeChatter(\'' + memberName + '\')', 10000);
				}
			}
		}
		
		if (typeof response.get('Posts') != 'undefined')
		{
			var posts = $H(response.get('Posts'));
	
			if (posts.keys().length > 0)
			{
				var postIDs = posts.keys().sort(function(a,b) {return a - b});		
				
				chatID = $H(posts.get(postIDs[0])).get('ChatID');
				var table = $('ChatTable');
				
				for (var i = 0; i < postIDs.length; i++)
				{
					var post = $H(posts.get(postIDs[i]));
					var time = post.get('DatePosted').split(' ');
					var newRow = $('ChatTable').insertRow($('ChatTable').rows.length);
					var timeCell = newRow.insertCell(0);
					var nameCell = newRow.insertCell(1);
					var messageCell = newRow.insertCell(2);
					
					nameCell.className = "chat_poster";
					messageCell.className = "chat_message";
					
					timeCell.innerHTML = time[1];
					nameCell.innerHTML = post.get('MemberName') + " says: ";
					messageCell.innerHTML = post.get('Post');
				
					scroll(0, 15000);
				}
	
				lastPostID = postIDs.last();
			}
		}
	}

	//alert('hi');
	window.setTimeout('getChatPosts('+ chatID +', ' + lastPostID + ')', 500);
}

function removeChatter(chatterName)
{
	var chatters = $('Chatters');
	for (var j = 0; j < chatters.rows.length; j++)
	{
		if (memberStatuses[chatterName] == 'Offline' && chatters.rows[j].cells[0].innerHTML.search(chatterName) != -1)
		{
			chatters.deleteRow(j);
			return;
		}
	}
}

function checkPrivate()
{
	if (checkChat)
	{
		var ignore = "";
		if (invitationsSent.length > 0)
			ignore = "?ignore=" + invitationsSent.join();
			
		getAJAX("/ajax/get_chat_invites" + ignore, null, null, 'alertChat');	
	}
}

function alertChat(obj, xmlhttp)
{
	if (xmlhttp.responseText)
	{
		var chats = $H(xmlhttp.responseText.evalJSON(true));
		var IDs = chats.keys();
		
		for (var i = 1; i <= IDs.length; i++)
		{	
			var chat = $H(chats.get(i));
			var chatID = chat.get('ChatID');
			
			invitationsSent.push(chatID);
			
			win = openWindow("/student/chat?id=" + chatID, 400, 600);
			if (win == null)
			{
				var memberName = chat.get('MemberName');
				var link = '<a target="_blank" href="/student/chat?id=' + chatID + '" onclick="removeChatAlert(this.parentNode);">' + memberName + '</a>';
				var ignoreLink = '<a href="javascript:;" onclick="getAJAX(\'/ajax/join_chat?action=reject&id=' +  chatID + '\', \'ChatAlertDiv\', null, \'removeChatAlert\');">[X]</a>';
				
				var chatAlert = document.createElement('div');
				chatAlert.id = 'ChatAlertDiv';
				chatAlert.className = 'chat_alert';
				chatAlert.innerHTML = link + ' wants to chat with you! ' + ignoreLink;
				
				document.body.appendChild(chatAlert);
			}
		}
	}

	window.setTimeout('checkPrivate()', 5000); 
}

function resizeChatWindow() 
{ 
	document.getElementById('chatpost').style.width = 0.75 *
		Math.min(document.getElementById('MainPageTable').width, (typeof( window.innerWidth ) == 'number' ?  window.innerWidth : document.body.clientWidth)); 
}
			
function removeChatAlert(obj, xmlhttp)
{
	document.body.removeChild(obj);	
}