
var previous_user_id = null;

var allowed_emoticons = ['tino','hi', 'angry', 'doh', 'rofl', 'mark', 'ford', 'blush', 'talking', 'smirk', 'surprised', 'sadsmile', 'giggle', 'wink', 'smile', 'speechless', 'finger'];

var user_messages = new Object();
var user_details = new Object();
var user_fulldetails_map = new Object();
var user_id = []; // list of ids used by hash arrays, todo: remove ids of people gone
var serialized_messages = new Object(); // serialized messages for users [message, time, date]

var last_message_side = new Object(); // 'master', 'slave'

var totalChatCounter = 0;
var totalChatHiddenCounter = 0;

var flashXML = null;


function getFlashMovieObject(movieName)
{
  if (window.document[movieName])
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName];
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }
}

function loadContent()
{
	// TODO: Uncomment so that chat is working
	
	//alert('apending chat');
        if ($("#div_chat_flash").length == 0)
            return;
	document.body.appendChild($("#div_chat_flash")[0]);
	//alert('chat appended');
	

//flashXML = getFlashMovieObject("XMLClient");
}

$(document).ready(function()
{
		loadContent();
});


function pingResponse(msg)
{
	var parts = msg.split("|");
	var usersData = parts[1];
	//$("#div_chat_content")[0].innerHTML += currentSide + " ";

	/*
	if (currentSide == 'host')
	{
		refreshUsers(usersData);
	}
	else
	*/
	{
		var parts = usersData.split(";");
		if (parts.length == 0 || parts[0].length == 0)
		{
			//$a('cell_loading').innerHTML = "No counselors are currently online";
		}
		for (var i=0; i < parts.length-1; i++)
		{
			//alert(parts);
			addUserTab(parts[i], true);
		}	 
	}
	
	
}

function showMessage(msg)
{

	var parts = msg.split("|");
	var fullDetailsMessage = parts[1];
	var msg = trimString(parts[2]);
	
	window.focus();
	
	if (msg.indexOf("PENCIL_START") == 0)
	{
		/*
		$a('img_pencil').style.display = "block";
		if (currentSide == 'host')
			$a('div_offline').innerHTML = msg.substring(13);
		*/
	}
	else
	{
		// PENCIL_STOP by default if we got msg
		/*
			$a('img_pencil').style.display = "none";
			$a('div_offline').innerHTML = "";
    */
		if (msg != "PENCIL_STOP")
		{
			appendMessage(fullDetailsMessage, msg, getDate(), getTime());
			
			//
			// if we are host and chat window is hidden, show it
			if (currentSide == 'host' && $("#or20_Toolbar_WindowChat").css('display') == "none")
			{
				var split_info = fullDetailsMessage.split("#");
				var userid = split_info[1];
				jsLoadMenuToolbar('Chat', 'right');
				selectUser(userid);
			}
		}
		
	}
}

//
// Handles pencil
function pencil()
{
	var sender = $a('input_new_message');
	if (trimString(sender.value).length > 0)
	{
		flashXML.sendChat(previous_user_id, "PENCIL_START+" + $a('input_new_message').value);
	}
	else
	{
		flashXML.sendChat(previous_user_id, "PENCIL_STOP");
	}
}

/// adds user tab from cache
function addCachedUserTab(userdetails, userid)
{
	addUserTab(userdetails, false);
	user_messages[userid] = $("#div_cached_chat_" + userid).html();
	
}

function addUserTab(userdetails, isPing)
{
	// old: Mark McNasby|Admin_1791|markm@or1234.com|unc
	// new: Todd Lempicke#82606#tlempicke@nc.rr.com#cacee#user
	var details = userdetails.split("#");
	var userId = details[1];
	
	

	user_fulldetails_map[userId] = userdetails;

	
	if (user_details[userId] == null)
	{
		var side = details[4];
		addUserTabParams(details[0], details[1], details[2], details[3], "", isPing, side);

		$.ajax(
		{
			type: 'POST',
			url: adminPath + '/modules/chat/ajax.php',
			data: 
				{
					'action':'user',
					'userId': currentUserId,
					'userFullDetails' : userdetails,
					'userSide' : side,
					'adminPath' : adminPath,
					'date' : getFlatDate()
				}
		});
		appendUserId(userId);
		serializeChat();
	}
	else
	{
		//if (isPing != true)
			//addPersonTab(userId, details[0]);
	}
	return "dupa";
}

//
// Adds new tab for given user
function addUserTabParams(username, userid, email, domain, extrainformation, isPing, side)
{
	
	if (username == "") return;
	
	
	
	//
	// check if its the first user
	var table = $a('table_online_people');
	
	/*
	if (table.rows[0].cells.length == 1 && 
		(table.rows[0].cells[0].innerHTML == "No representatives are currently online" || table.rows[0].cells[0].innerHTML == "Locating representatives")
	)
		table.rows[0].deleteCell(0);
	*/
	
	
	// save user details
	var details = new Object();
	details["username"] = username;
	details["userid"] = userid;
	details["email"] = email;
	details["domain"] = domain;
	details["extrainformation"] = extrainformation;
	details["STATUS"] = "CONNECTED";
	details["COUNTER"] = 0;
	user_details[userid] = details;
	
	

	//
	// Create table
	/*
	var table = document.createElement('table');
	table.id = "table_user_" + userid;
	table.cellSpacing = 0;
	table.cellPadding = 0;
	table.border=0;
	var row = table.insertRow(0);
	var cell = row.insertCell(0);
	cell.innerHTML = '<div id="div_tab_left_' + userid + '" style="background-image:url(/modules/chat/images/gray_left_cap_blue.gif);width:17px; height:30px;"></div>';
	cell = row.insertCell(1);
	cell.vAlign = "bottom";
	cell.innerHTML = '<div id="div_tab_' + userid + '" onclick="selectUser(\'' + userid + '\')" +  style="background-image:url(/modules/chat/images/gray_tile.gif);height:30px; vertical-align:bottom; cursor:pointer"><div style="padding-top:12px">' + username + '</div></div>';
	cell = row.insertCell(2);
	cell.innerHTML = '<div id="div_tab_right_' + userid + '" style="background-image:url(/modules/chat/images/gray_right_cap.gif);width:5px; height:30px;"></div>';
	*/

	


	//var div = $.create('div', {'class' : 'online_name', 'onclick' : "addPersonTab('" + userid + "', this.innerHTML)"}, [username]);
	var div = $.create('div', {'class' : 'chat_list', 'id': 'div_user' + userid, 'onclick' : "selectUser('" + userid + "')"}, 
			[username]);

	var tableTabs = $('#table_online_people_list_' + side);
	// check if we already have tab

	if ($("#li_tab_" + userid).length == 0)
	{
		$('<li class="or20_Chat_Online_User"  id="li_tab_' + userid + '"><a style="cursor:pointer" onclick="selectUser(\'' + userid + '\')"><span id="cell_user_count_' + userid + '"></span>' + username + '</a></li>').appendTo(tableTabs);
		user_messages[userid] = "";
	}
	/*
	var row = tableTabs.insertRow(tableTabs.rows.length);
	var cell = row.insertCell(0);
	cell.appendChild(div);
	cell = row.insertCell(1);
	cell.id = "cell_user_count_" + userid;
	*/

	//$("#span_counselor_count").html(tableTabs.rows.length);
	
	


	//if (isPing != true)
		//addPersonTab(userid, username);


	
}

function $a(id)
{
	return document.getElementById(id);
}

function appendMessage(user_full_info, message, date, time)
{
	
	addUserTab(user_full_info, false);
	message = updateEmoticons(message);
	var split_info = user_full_info.split("#");
	var userid = split_info[1];
	var header = getChatHeader(last_message_side[userid] != 'slave', false, user_details[userid]["username"], date, time);
	


	if (serialized_messages[userid] == null) serialized_messages[userid] = "";
	serialized_messages[userid] += serializeMessage(message, date, time, last_message_side[userid] != 'slave', false);

	last_message_side[userid] = 'slave';
	serializeChat();
	
	//
	// Check if we are the same user
	if (previous_user_id == userid)
	{
		
		//alert('got message: ' + user + ', ' + message);
		var messageData = header + getMessageContainer(message) + "<Br>";
		$a('div_messages').innerHTML += messageData;

		sendChatAjax(userid, messageData);
		
		$a('div_messages').scrollTop=$a('div_messages').scrollHeight;
		user_messages[previous_user_id] = $a('div_messages').innerHTML;
		if ($("#or20_Toolbar_WindowChat").css('display') == "none")
			totalChatHiddenCounter++;
	}
	else
	{
		
		var counter = user_details[userid]["COUNTER"];
		counter++;
		
		
		totalChatCounter++;
		$("#span_chat_total_count").html(totalChatCounter);
		if (currentSide == 'host')
			$("#img_host_chat").show();

		
		user_details[userid]["COUNTER"] = counter;
		$("#cell_user_count_" + userid).html("(" + counter + ")");
		var messageData = header + getMessageContainer(message)  + "<br>";
		user_messages[userid] += messageData;
		sendChatAjax(userid, messageData);
		
		//$a('div_tab_left_' + userid).style.backgroundImage = "url(" + adminPath + "/modules/chat/images/bouncing-blue-button_01.gif)";
		//$a('div_tab_' + userid).style.backgroundImage = "url(" + adminPath + "/modules/chat/images/bouncing-blue-button_03.gif)";
		//$a('div_tab_right_' + userid).style.backgroundImage = "url(" + adminPath + "/modules/chat/images/bouncing-blue-button_05.gif)";
		
	}

	//
	// Increase total counter of messages if we are on the same user, but taskbar element is hidden
	
	if (totalChatCounter + totalChatHiddenCounter > 0)
	{
		$("#span_chat_total_count").html(totalChatCounter + totalChatHiddenCounter);
		if (currentSide == 'host')
			$("#img_host_chat").show();
	}
	
	$a('input_new_message').focus();
	setTimeout("$a('input_new_message').focus()", 1);
	//window.screenX = 10;	
	//window.screenY = 10;

	serializeChat();
	return "dupa";
}

function sendChatMessage()
{
	if (previous_user_id == null)
	{
		alert('Select Counselor first');
		return;
	}
	var input = $a('input_new_message');
	var original_message = input.value;
	
	if (trimString(original_message).length == 0) return;
	
	var message = updateEmoticons(input.value);
	input.value = "";
	
	var header = getChatHeader(last_message_side[previous_user_id] != 'master', true, user);

	if (serialized_messages[previous_user_id] == null) serialized_messages[previous_user_id] = "";
	serialized_messages[previous_user_id] += serializeMessage(message, getDate(), getTime(), last_message_side[previous_user_id] != 'master', true);

	serializeChat();

	last_message_side[previous_user_id] = 'master';

	var messageData = header + getMessageContainer(message) + "<Br>";
	$a('div_messages').innerHTML += messageData;
	
	sendChatAjax(previous_user_id, messageData);

	$a('div_messages').scrollTop=$a('div_messages').scrollHeight + 100;
	user_messages[previous_user_id] = $a('div_messages').innerHTML;
	
	
	//document.LiveChatApplet.sendMessage(user_fulldetails_map[previous_user_id], trimString(original_message));	
	flashXML.sendChat(previous_user_id, trimString(original_message));	
	input.value = "";
}

function trimString(input)
{
	return input.replace(/^\s+|\s+$/g, '') ;
}

function updateEmoticons(message)
{
	/*
	for (var i=0; i < allowed_emoticons.length; i++)
	{
		message = str_replace(message, "(" + allowed_emoticons[i] + ")", "<img src='" + adminPath + "/modules/chat/images/emoticons/" + allowed_emoticons[i] + ".gif'>");
	}
	*/
	return message;
}

// keydwon handler			 
function input_message_keydown(e)
{
	var keynum
	var keychar
	var numcheck

	if(window.event) // IE
	{
	keynum = e.keyCode
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
	keynum = e.which
	}
	if (keynum == 13)
		sendChatMessage();
	else
		pencil();
}



//
// Selects given user
function selectUser(id)
{
	$.cookie("chat_selecteduser", id);

	$("#div_users_container").find("li").removeClass("or20_Chat_Online_Active_User");
	$("#div_users_container").find("li").removeClass("or20_Chat_Offline_Active_User");




	$a('div_messages').innerHTML = user_messages[id];

	/*
	$("#table_online_people_list_host").find("div").attr('className', 'chat_list');
	$("#table_online_people_list_client").find("div").attr('className', 'chat_list');
	$("#table_online_people_list_user").find("div").attr('className', 'chat_list');
	$("#div_user" + id).attr('className', 'chat_list_selected');

	var counter = user_details[id]["COUNTER"];
	totalChatCounter -= counter;
	user_details[id]["COUNTER"] = 0;
	$("#span_chat_total_count").html(totalChatCounter + totalChatHiddenCounter);
	$("#img_host_chat").hide();
	$("#cell_user_count_" + id).html("");
	*/
	/*
	$a('div_username').innerHTML = user_details[id]["username"] + " (" + user_details[id]["domain"] + ")";
	$a('div_email').innerHTML = 'Email: <a href="' + user_details[id]["email"] + '">' + user_details[id]["email"] + '</a>';
	$a('div_user_image_info').innerHTML = user_details[id]["username"] + " is logged in";
	*/

	var counter = user_details[id]["COUNTER"];
	totalChatCounter -= counter;
	user_details[id]["COUNTER"] = 0;
	$("#span_chat_total_count").html(totalChatCounter + totalChatHiddenCounter);
	$("#img_host_chat").hide();
	$("#cell_user_count_" + id).html("");

	
	$a('div_messages').scrollTop=$a('div_messages').scrollHeight;
	previous_user_id = id;
	//$a('div_end_conversation').style.display = "block";
	

	if (user_details[id] != null)
	{	
		if (user_details[id]["STATUS"] == "DISCONNECTED")
		{
			//$a('img_blue_face').src = "images/grayglassy_large.png"	;
			//$a("div_user_image_info").innerHTML = "User is offline";
			$("#li_tab_" + id).addClass("or20_Chat_Offline_Active_User");
		}

		if (user_details[id]["STATUS"] == "CONNECTED")
		{
			//$a('img_blue_face').src = "images/blueglassy_large.png"	;
			//$a("div_user_image_info").innerHTML = "User is online";
			$("#li_tab_" + id).addClass("or20_Chat_Online_Active_User");
		}
	}

	
}

function getTime()
{
		var date = new Date();
		var hours = date.getHours();
		var pm = "am";
		
		if (hours > 12)
		{
			pm = "pm";
			hours -= 12;
		}
		var min = date.getMinutes();
		if (min < 10) min = "0" + min;
		var time = hours + ":" + min + pm;
		
		return time;
}

function getDate()
{
	var currentDate = new Date();
	return (currentDate.getMonth()+1) + "/" + currentDate.getDate() + "/" + currentDate.getFullYear();
}

function getFlatDate()
{
	var currentDate = new Date();
	return currentDate.getFullYear() + "_" + (currentDate.getMonth()+1) + "_" + currentDate.getDate();
}

function getChatHeader(isLarge, isMaster, user, dateText, time)
{
	if (dateText == null)
	{
		var date = new Date();
		var hours = date.getHours();
		var pm = "am";
		
		if (hours > 12)
		{
			pm = "pm";
			hours -= 12;
		}
		var min = date.getMinutes();
		if (min < 10) min = "0" + min;
		var time = hours + ":" + min + pm;
		
		var dateText = (date.getMonth()+1) + "/" + date.getDate() + "/" + date.getFullYear();
	}

	var s = "";
	//var master = (isMaster) ? "master" : "slave";
	var master = (isMaster) ? "Sender" : "Receiver";


	/*
	if (isLarge)
	{
		s	+= '<div style="background-image: url(' + adminPath + '/modules/chat/images/thread' + master + '_large.png); width: 420px; height: 24px;">';
		s += '<div style="float:right; padding-top:4px; padding-right:5px;">' + time + ' ' + dateText  + '</div>';
			s += '<div style="padding-left:10px; padding-top:4px;"><b>' + user + '</b></div>';
		s += '</div>';
	}
	else
	{		
		s += '<div style="background-image: url(' + adminPath + '/modules/chat/images/thread' + master + '_small.png); width: 420px; height: 24px;">';
			s += '<div style="float:right; padding-top:4px; padding-right:5px;">' + time + '</div>';
		s += '</div>';
	}
	*/
	s += '<div class="or20_Chat_Message or20_' + master + '_Name">';
	s += '	<span class="or20_Chat_User_Span">' + user + '</span>    <span class="or20_Chat_Time">' + time + ' ' + dateText + '</span>';
	s += '</div>';
	return s;
}


function appendEmoticon(emoticon)
{
 $a('input_new_message').value += "(" + emoticon + ")";
 $a('div_emoticons').style.display = "none";
}


// standart string replace functionality
function str_replace(haystack, needle, replacement) {
    var temp = haystack.split(needle);
    return temp.join(replacement);
}


function showEmoticons() 
{
	if ($a('div_emoticons').style.display == "block")
		$a('div_emoticons').style.display = "none";
	else
		$a('div_emoticons').style.display = "block";
}


function historyResponseFlash(src)
{
	showHistory(src.substring(16));
}
//
// Shows history
function showHistory(history)
{
	
	var lines = history.split("[|||]");
	$a('div_messages').innerHTML = "";
	for (var i=0; i < lines.length; i++)
	{
		var elements = lines[i].split(";");
		if (elements.length < 3) continue;
		var date = elements[0];
		var time = elements[1];
		var senderId = elements[2];
		var message = elements[3];
		
		if (user_id != senderId)
		{
			var header = getChatHeader(last_message_side[previous_user_id] != 'slave', false, user_details[previous_user_id]["username"]);
			last_message_side[previous_user_id] = 'slave';
			
			$a('div_messages').innerHTML += header;
			$a('div_messages').innerHTML += getMessageContainer(message) + "<Br>";
			window.focus();
			$a('div_messages').scrollTop=$a('div_messages').scrollHeight
			user_messages[previous_user_id] = $a('div_messages').innerHTML;
		}
		else 
		{
			var header = getChatHeader(last_message_side[previous_user_id] != 'master', true, user);
			last_message_side[previous_user_id] = 'master';
			
			$a('div_messages').innerHTML += header;
			
			$a('div_messages').innerHTML += getMessageContainer(message) + "<Br>";
			$a('div_messages').scrollTop=$a('div_messages').scrollHeight
			user_messages[previous_user_id] = $a('div_messages').innerHTML;
		
		}
		
	}
}




function getHistory(historyType)
{
	//if (side == 'user')	
	//	document.LiveChatApplet.getHistory(previous_user_id, user_id, historyType);	
	//if (side == 'admin')	
	//	document.LiveChatApplet.getHistory(user_id, previous_user_id, historyType);	
	
		//document.LiveChatApplet.getHistory(user_fulldetails_map[previous_user_id], historyType);	
		flashXML.getHistory(previous_user_id, historyType);
}

//
// ends current chat
function end_chat()
{
	if (previous_user_id != null)
	{
		
		var table = $a("table_user_" + previous_user_id);		
		table.parentNode.removeChild(table);
		$a('div_messages').innerHTML = "";
		$a('div_end_conversation').style.display = "none";
		$a('div_username').innerHTML = "Select User";
		$a('div_email').innerHTML = "";
		$a('div_user_image_info').innerHTML = "Please select user";
		
		var fullsignature = user_fulldetails_map[previous_user_id];
		user_fulldetails_map[previous_user_id] = null;
		user_details[previous_user_id] = null;
		
		previous_user_id = null;
		document.LiveChatApplet.getUsers();
	}
}


function refreshUsers(adminsText)
{
	
	var admins = adminsText.split(";");
	//if ($a('hiddenSide') == null) return;
	//if ($a('hiddenSide').value == 'admin')
	if (currentSide == 'host')
	{
		
		var table = '<table width="230px" id="table_host_list">';
		for (var i=0; i < admins.length; i++)
		{
			if (admins[i].length == 0) continue;
			var details = admins[i].split("#");
			var userId = details[1];
			var side = details[4];


			user_fulldetails_map[details[1]] = admins[i];

			table += "<tr>";			
			
			
			
			if (side == 'host')
			{
				table += "<td>" + details[0] + "</td>";
				table += "<td>ISA</td>";
			}
			else
			{
				table += "<td>" + details[0] + "<br>";
				table += "&nbsp;&nbsp;Uni: " + details[3] + "<br>";
				table += "&nbsp;&nbsp;" + details[2];
				table += "</td>";
				table += "<td>OSA</td>";
			}
			//alert(details[0] + " " + details[1] + " " +  $a('hiddenId').value);
			if (user_details[details[1]] == null)
			{
				table += "<td style='cursor:pointer'><u><a onclick='openChat(\"" + details[1] + "\",this)'>CHAT</a></u></td>";
			}
			else
			{
				table += "<td></td>";
			}
			table += "</tr>";
			
		}
		table += '</table>';
			

		$a('div_host_list').innerHTML = table;
	}
	else
	{
		if (admins.length == 0 || (admins.length == 1 && admins[0].length == 0))
		{
			$a('cell_loading').innerHTML = "No representatives are currently online";
		}
		
		for (var i=0; i < admins.length; i++)
		{
			if (admins[0].length == 0) continue;
			addUserTab(admins[i]);
		}
	}
	return 1;
}

function userModeChangeFlash(src)
{
	
	var parts = src.split("|");
	//alert(parts);
	if (parts.length == 3)
	{
		userModeChange(parts[1], parts[2]);
	}
}

//
// Mode = "STATUS" -> CONNECTED, DISCONNECTED
function userModeChange(userFullDetails, mode)
{
	var details = userFullDetails.split("#");
	var userId = details[1];
	
	if (user_details[userId] == null) return;
	user_details[userId]["STATUS"] = mode;


	if (mode == "DISCONNECTED")
	{
		//$("#li_tab_" + userId).removeClass("or20_Chat_Online_User");
		//$("#li_tab_" + userId).addClass("or20_Chat_Offline_User");
		$("#li_tab_" + userId).attr('className',$("#li_tab_"  + userId).attr('className').replace(/Online/g, 'Offline'));
	}
	if (mode == "CONNECTED")
	{
		//$("#li_tab_" + userId).removeClass("or20_Chat_Offline_User");
		//$("#li_tab_" + userId).addClass("or20_Chat_Online_User");
		$("#li_tab_" + userId).attr('className',$("#li_tab_"  + userId).attr('className').replace(/Offline/g, 'Online'));
	}
	/*
	if (previous_user_id == userId)
	{
		if (mode == "DISCONNECTED")
		{
			$a('img_blue_face').src = "images/grayglassy_large.png"	;
			$a("div_user_image_info").innerHTML = "User is offline";
			$a("div_offline").innerHTML = user_details[userId]["username"] + " is offline. Namespace: " + user_details[userId]["domain"] + " Email: " + user_details[userId]["email"];
		}
		if (mode == "CONNECTED")
		{
			$a('img_blue_face').src = "images/blueglassy_large.png"	;
			$a("div_user_image_info").innerHTML = "User is online";
			$a("div_offline").innerHTML = "";
		}
	}
	*/
	return 1;
}

function appletAlert(text)
{
	alert(text);
	return 1;
}

function queuedMessagesFlash(src)
{
	//alert(src.substring(15));
	queuedMessages(src.substring(15));
}

function queuedMessages(messages)
{
	var lines = messages.split("[|||]");
	for (var i=0; i < lines.length; i++)
	{
		if (lines[i].length == 0) continue;
		var elements = lines[i].split(";");
		
		var userDetails = elements[2];
		
		addUserTab(userDetails);
		var message = elements[3];
		var date = elements[0];
		var time = elements[1];		
		appendMessage(userDetails,  message, date, time)		    
	}

	return 1;
}

function openChat(userId,sender)
{
	/*
	if (userId == $a('hiddenId').value) 
	{
		alert('Did you lose your mind? How can you chat with yourself? Open "notepad"');
		return;
	}
	*/
	addUserTab(user_fulldetails_map[userId]);
	selectUser(userId)
	sender.innerHTML = "";
}










//
// List of tabs being active
var chat_online_tabs = new Object();

function closeOnlinePersonTab(id)
{
	chat_online_tabs[id] = null;
	var cellIndex = $("#taskbar_online_person_section_" + id)[0].parentNode.cellIndex;
	$("#table_online_people")[0].rows[0].deleteCell(cellIndex);
}



function addPersonTab(id, userName)
{
	if (!(chat_online_tabs[id] == undefined)) return;

	selectUser(id);
	chat_online_tabs[id] = true;

	//
	// Get table row
	var row = $("#table_online_people")[0].rows[0];
	var cell = row.insertCell(0);

	var rootElement = $.create('div', {'id':'taskbar_online_person_section_' + id, 'class':'taskbar_alerts_section'}, []);
	// Append element
  $(cell).append($(rootElement));

	var innerElement = $.create('div', {'id':'taskbar_online_person_close_' + id, 'style' : "background-image:url(" + adminPath + "/modules/chat/images/taskbar/close_tab.gif); float:right; width:15px; height:15px;background-position:right 3px;", 'onclick' : "closeOnlinePersonTab('" + id + "');" }, []);
	$(rootElement).append($(innerElement));

	var innerElement = $.create('div', {'id':'taskbar_online_person_tab_' + id, 'class':'taskbar_alerts_button','style' : "width:auto;white-space:nowrap; padding-right:15px", 'onclick' : "return tabOnlinePersonHandleClick('" + id + "',this);" }, [userName]);
	$(rootElement).append($(innerElement));

	selectUser(id);
	$("#chat_online").show();
	$("#h2_chat_header").html(userName);

	// create popup
	/*
	var element = $.create('div', {'id':'taskbar_online_person_' + id, 'class':'taskbar_menu_opts_wrapper','style' : "display:block"}, []);
	$(rootElement).append($(element));

	var innerElementOpts = $.create('div', {'class':'taskbar_menu_opts'}, []);

	$(element).append($(innerElementOpts));
	var innerElement = $.create('div', {'class':'taskbar_menu_opts_header'}, []);
	$(innerElementOpts).append($(innerElement));
	$(innerElement).append($($.create('div', {'class':'corner'}, [])));

	var innerElement = $.create('h2', {'onclick':'return closeTabs();'}, []);
	$(innerElement).append( $.create('span', {}, [div.innerHTML]) );
	$(innerElementOpts).append($(innerElement));

	// Create chat div
	var chat = $.create('div', {'id':'div_chat_' + id, 'style':'height:100px; overflow:auto; border:1px solid black;'}, ['Test']);
	$(innerElementOpts).append($(chat));

	var sendMessage = $.create('input', {'id':'input_chat_send_' + id, 'style':'border:1px solid black;'}, []);
	$(innerElementOpts).append($(sendMessage));
	*/

	$("#taskbar_online").hide();
}

function tabOnlinePersonHandleClick(id, sender)
{
	selectUser(id);
	//$("#taskbar_online_person_" + id).show();
	$("#chat_online").show();
	$("#h2_chat_header").html($(sender).html());
}



function showChat()
{
	$.cookie("chat_visible", 1);
	totalChatHiddenCounter = 0;
	$("#span_chat_total_count").html(totalChatCounter + totalChatHiddenCounter);
	$("#img_host_chat").hide();
	$a('div_messages').scrollTop=$a('div_messages').scrollHeight;
}

function  hideChat()
{
	$.cookie("chat_visible", 0);
}


//
// Serializes the chat and stores in cookie
function serializeChat()
{

	return;
	//$.cookie("chat_content", $("#table_chat_main").html(), { path: '/', expires: 10 });
	var options = { path: '/', expires: 10 };

	var users = "";
	var messages = "";
	
	// store users details and messages
	for (var i=0; i < user_id.length; i++)
	{
		var id = user_id[i];
		users += user_fulldetails_map[id] + "$";
		var msg = serialized_messages[id];
		if (msg == null) msg = "";
		if (msg != "")
			messages += id + "[[[[$]]]]" + msg + "[[[[[$]]]]]";
	}

	var escaped_messages = escape(messages);
	if (escaped_messages.length > 3500)
		messages = compressMessages(messages);


	$.cookie("chat_users", users, options);
	$.cookie("chatmsgs", messages, options);

	
}

// decreases amount of messages stored in cookie (removes the most oldest messages)
function compressMessages(messages)
{
	
}

function deserializeChat()
{
	// get list of users and add tabs
	var chat_users = $.cookie("chat_users");

	if (chat_users == null)
		return;
	chat_users = chat_users.split("$");
	var messages = $.cookie("chatmsgs");

	
	for (var i=0; i < chat_users.length; i++)
	{
		var details = chat_users[i];
		//alert("adding tab:" + details);
		addUserTab(details, false);
	}

	if (messages != null)
		messages = messages.split("[[[[[$]]]]]");
	else
		return;
	//
	// deserialize msgs
	//alert("Deserializing msgs: " + messages);
	for (var i=0; i < messages.length; i++)
	{
		var msg = messages[i];
		var parts = msg.split("[[[[$]]]]");
		var userid = parts[0];
		msg = parts[1];
		serialized_messages[userid] = msg;

		if (msg == null) continue;
		// split messages for given user
		var output = "";
		parts = msg.split("[[#]]");
		
		for (var k=0; k < parts.length - 1; k++)
		{
			var part = parts[k];
			var msgParts = part.split("[[$]]");
			
			var msgData = msgParts[0];
			//var msgDate = msgParts[1];
			var msgDate = getDate();
			var msgTimeLargeMaster = msgParts[1].split("|");
			var msgTime = msgTimeLargeMaster[0];
			var msgLarge = (msgTimeLargeMaster[1] == 1);
			var msgMaster = (msgTimeLargeMaster[2] == 1);

			var userName = (msgMaster) ? user : (user_details[userid] != null) ? user_details[userid]["username"] : "Unknown";
			var header = getChatHeader(msgLarge, msgMaster, userName, msgDate, msgTime);
			msgData = header + getMessageContainer(msgData) + "<br>";

			if (user_messages[userid] == null)
				user_messages[userid] = "";

			user_messages[userid] += msgData;
			//
			// build message and append to array for user
		//	if (msgData != "")
			//	alert(msgData);
		}
		$a('div_messages').innerHTML = user_messages[userid];

	}




	// select user if any was preselected
	var selectedUser = $.cookie("chat_selecteduser");
	if (selectedUser != null)
		selectUser(selectedUser);

	serializeChat();
}

// serialized message: msg[[$]]date[[$]]time[[#]]msg[[$]]date[[$]]time[[#]] - todo : more sophisticated escaping
function serializeMessage(message, date, time, isLarge, isMaster)
{
	return message;
	var isLargeInt = (isLarge) ? 1 : 0;
	var isMasterInt = (isMaster) ? 1 : 0;

	// Removed date, we are assuming that cookie is only showing todays date
	//return message + "[[$]]" + date + "[[$]]" + time + "|" + isLargeInt + "|" + isMasterInt + "[[#]]";
	return message + "[[$]]" + time + "|" + isLargeInt + "|" + isMasterInt + "[[#]]";

}

//
// adds unique userId to the list of all userids
function appendUserId(userId)
{
	
	var found = false;
	for (var i=0; i < user_id.length; i++)
	{
		if (user_id[i] == userId)
		{
			found = true;
			break;
		}
	}
	if (!found)
		user_id.push(userId);
}


function getMessageContainer(message)
{
	return '<div class="or20_Chat_Message">' + message + '</div>';
}


function sendChatAjax(otherUserId, data)
{
	$.ajax(
		{
			type: 'POST',
			url: adminPath + '/modules/chat/ajax.php',
			data:
				{
					'action':'chat',
					'userId': currentUserId,
					'date' : getFlatDate(),
					'otherUserId' : otherUserId,
					'data' : data,
					'adminPath' : adminPath
				}
		});
}


function loginToChat()
{
	$("#a_login_to_chat").html("Conecting to Chat ...");
	flashXML.connect();
}


function connectionSuccessful()
{
	$("#li_Toolbar_ChatLogin").hide();
	$("#li_Toolbar_Chat").show();
}

function initXML()
{

	if(navigator.appName.indexOf("Microsoft") != -1) {
			flashXML = window.XMLClient;
		}else {
			flashXML = window.document.XMLClient;
		}
	
	$("#li_Toolbar_ChatLogin").show();

	var visible = $.cookie("chat_visible");

	if (visible == 1)
	{
		$("#li_Toolbar_ChatLogin").hide();
		loginToChat();
		
	}

}

function logoutFromChat()
{
	flashXML.logout();
	jsCloseMenuToolbar('Chat');
	hideChat();
	$("#li_Toolbar_ChatLogin").show();
	$("#li_Toolbar_Chat").hide();
	$("#a_login_to_chat").html("Login To Chat");
}							