var windowFocus = true;
var username;
var chatHeartbeatCount = 0;
var minChatHeartbeat = 6000;
var maxChatHeartbeat = 33000;
var chatHeartbeatTime = minChatHeartbeat;
var originalTitle;
var blinkOrder = 0;

var chatboxFocus = new Array();
var newMessages = new Array();
var newMessagesWin = new Array();
var chatBoxes = new Array();

$(document).ready(function()
{
	originalTitle = document.title;
	startChatSession();

	$([window, document]).blur(function()
	{
		windowFocus = false;
	}).focus(function()
	{
		windowFocus = true;
		document.title = originalTitle;
	});
});

function startChatSession()
{
	$.ajax({
	  url: "./includes/exec/chat_flash.php?action=startchatsession",
	  cache: false,
	  dataType: "json",
	  success: function(data) {

			username = data.username;

		$.each(data.items, function(i,item)
		{
			if (item)
			{
				chatboxtitle = item.f;

				chatboxname = item.d;

				if ($("#chatbox_"+chatboxtitle).length <= 0)
				{
					createChatBox(chatboxtitle,1,chatboxname);
				}

				if (item.s == 1)
				{
					item.f = username;
				}

				if (item.s == 2)
				{
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
				}
				else
				{
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.d+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
				}
			}
		});

		for (i=0;i<chatBoxes.length;i++)
		{
			chatboxtitle = chatBoxes[i];
			$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
			setTimeout('$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);', 100);
		}

		setTimeout('chatHeartbeat();',chatHeartbeatTime);

		}
	});
}

function createChatBox(chatboxtitle,minimizeChatBox,chatboxname)
{
	if ($("#chatbox_"+chatboxtitle).length > 0)
	{
		if ($("#chatbox_"+chatboxtitle).css('display') == 'none')
		{
			$("#chatbox_"+chatboxtitle).css('display','block');
			restructureChatBoxes();
		}
		$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
		return;
	}

	$(" <div />" ).attr("id","chatbox_"+chatboxtitle)
	.addClass("chatbox")
	.html('<div class="chatboxhead"><div class="chatboxtitle">'+chatboxname+'</div><div class="chatboxoptions"><a href="javascript:void(0)" onclick="javascript:toggleChatBoxGrowth(\''+chatboxtitle+'\')">-</a> <a href="javascript:void(0)" onclick="javascript:closeChatBox(\''+chatboxtitle+'\')">X</a></div><br clear="all"/></div><div class="chatboxcontent"></div><div class="chatboxinput"><textarea class="chatboxtextarea" onkeydown="javascript:return checkChatBoxInputKey(event,this,\''+chatboxtitle+'\');"></textarea></div>')
	.appendTo($( "body" ));

	$("#chatbox_"+chatboxtitle).css('bottom', '0px');

	chatBoxeslength = 0;

	for (x in chatBoxes)
	{
		if ($("#chatbox_"+chatBoxes[x]).css('display') != 'none')
		{
			chatBoxeslength++;
		}
	}

	if (chatBoxeslength == 0)
	{
		$("#chatbox_"+chatboxtitle).css('right', '20px');
	}
	else
	{
		width = (chatBoxeslength)*(225+7)+20;
		$("#chatbox_"+chatboxtitle).css('right', width+'px');
	}

	chatBoxes.push(chatboxtitle);

	if (minimizeChatBox == 1)
	{
		minimizedChatBoxes = new Array();

		if ($.cookie('chatbox_minimized'))
		{
			minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
		}
		minimize = 0;
		for (j=0;j<minimizedChatBoxes.length;j++)
		{
			if (minimizedChatBoxes[j] == chatboxtitle)
			{
				minimize = 1;
			}
		}

		if (minimize == 1)
		{
			$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','none');
			$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','none');
		}
	}

	chatboxFocus[chatboxtitle] = false;

	$("#chatbox_"+chatboxtitle+" .chatboxtextarea").blur(function()
	{
		chatboxFocus[chatboxtitle] = false;
		$("#chatbox_"+chatboxtitle+" .chatboxtextarea").removeClass('chatboxtextareaselected');
	}).focus(function()
	{
		chatboxFocus[chatboxtitle] = true;
		newMessages[chatboxtitle] = false;
		$('#chatbox_'+chatboxtitle+' .chatboxhead').removeClass('chatboxblink');
		$("#chatbox_"+chatboxtitle+" .chatboxtextarea").addClass('chatboxtextareaselected');
	});

	$("#chatbox_"+chatboxtitle).click(function()
	{
		if ($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') != 'none')
		{
			$("#chatbox_"+chatboxtitle+" .chatboxtextarea").focus();
		}
	});

	$("#chatbox_"+chatboxtitle).show();
}

function restructureChatBoxes()
{
	align = 0;
	for (x in chatBoxes)
	{
		chatboxtitle = chatBoxes[x];

		if ($("#chatbox_"+chatboxtitle).css('display') != 'none')
		{
			if (align == 0)
			{
				$("#chatbox_"+chatboxtitle).css('right', '20px');
			}
			else
			{
				width = (align)*(225+7)+20;
				$("#chatbox_"+chatboxtitle).css('right', width+'px');
			}
			align++;
		}
	}
}

function closeChatBox(chatboxtitle)
{
	$('#chatbox_'+chatboxtitle).css('display','none');
	restructureChatBoxes();

	$.post("./includes/exec/chat_flash.php?action=closechat", { chatbox: chatboxtitle} , function(data){
	});
}

function chatWith(chatuser,destname)
{
	createChatBox(chatuser,0,destname);
	$("#chatbox_"+chatuser+" .chatboxtextarea").focus();
}

function toggleChatBoxGrowth(chatboxtitle)
{
	if ($('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display') == 'none')
	{
		var minimizedChatBoxes = new Array();
		if ($.cookie('chatbox_minimized'))
		{
			minimizedChatBoxes = $.cookie('chatbox_minimized').split(/\|/);
		}
		var newCookie = '';
		for (i=0;i<minimizedChatBoxes.length;i++)
		{
			if (minimizedChatBoxes[i] != chatboxtitle)
			{
				newCookie += chatboxtitle+'|';
			}
		}
		newCookie = newCookie.slice(0, -1)
		$.cookie('chatbox_minimized', newCookie);
		$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','block');
		$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','block');
		$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
	}
	else
	{
		var newCookie = chatboxtitle;
		if ($.cookie('chatbox_minimized'))
		{
			newCookie += '|'+$.cookie('chatbox_minimized');
		}
		$.cookie('chatbox_minimized',newCookie);
		$('#chatbox_'+chatboxtitle+' .chatboxcontent').css('display','none');
		$('#chatbox_'+chatboxtitle+' .chatboxinput').css('display','none');
	}
}

function checkChatBoxInputKey(event,chatboxtextarea,chatboxtitle)
{
	if(event.keyCode == 13 && event.shiftKey == 0)
	{
		message = $(chatboxtextarea).val();
		message = message.replace(/^\s+|\s+$/g,"");

		$(chatboxtextarea).val('');
		$(chatboxtextarea).focus();
		$(chatboxtextarea).css('height','44px');
		if (message != '')
		{
			$.post("./includes/exec/chat_flash.php?action=sendchat", {to: chatboxtitle, message: message} , function(data)
			{
				message = message.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\"/g,"&quot;");
				displayname = data;
				$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+displayname+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+message+'</span></div>');
				$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
			});
		}
		chatHeartbeatTime = minChatHeartbeat;
		chatHeartbeatCount = 1;

		return false;
	}

	var adjustedHeight = chatboxtextarea.clientHeight;
	var maxHeight = 94;

	if (maxHeight > adjustedHeight)
	{
		adjustedHeight = Math.max(chatboxtextarea.scrollHeight, adjustedHeight);
		if (maxHeight)
			adjustedHeight = Math.min(maxHeight, adjustedHeight);
		if (adjustedHeight > chatboxtextarea.clientHeight)
			$(chatboxtextarea).css('height',adjustedHeight+8 +'px');
	}
	else
	{
		$(chatboxtextarea).css('overflow','auto');
	}
}

function chatHeartbeat()
{
	var itemsfound = 0;
	if (windowFocus == false)
	{
		var blinkNumber = 0;
		var titleChanged = 0;
		for (x in newMessagesWin)
		{
			if (newMessagesWin[x] == true)
			{
				++blinkNumber;
				if (blinkNumber >= blinkOrder)
				{
				  $.post("./includes/exec/chat_flash.php?action=chattoptitle", {from: x} , function(data)
				  {
				    document.title = data;
				  });
				titleChanged = 1;
				break;
				}
			}
		}

		if (titleChanged == 0)
		{
			document.title = originalTitle;
			blinkOrder = 0;
		}
		else
		{
			++blinkOrder;
		}

	}
	else
	{
		for (x in newMessagesWin)
		{
			newMessagesWin[x] = false;
		}
	}

	for (x in newMessages)
	{
		if (newMessages[x] == true)
		{
			if (chatboxFocus[x] == false)
			{
				$('#chatbox_'+x+' .chatboxhead').toggleClass('chatboxblink');
			}
		}
	}

	$.ajax({
	  url: "./includes/exec/chat_flash.php?action=chatheartbeat",
	  cache: false,
	  dataType: "json",
	  success: function(data)
	  {
		$.each(data.items, function(i,item)
		{
			if (item)
			{
				chatboxtitle = item.f;
				chatdisplayname = item.d;

				if ($("#chatbox_"+chatboxtitle).length <= 0)
				{
					createChatBox(chatboxtitle,0,chatdisplayname);
				}
				if ($("#chatbox_"+chatboxtitle).css('display') == 'none')
				{
					$("#chatbox_"+chatboxtitle).css('display','block');
					restructureChatBoxes();
				}

				if (item.s == 1)
				{
					item.f = username;
				}

				if (item.s == 2)
				{
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxinfo">'+item.m+'</span></div>');
				}
				else
				{
					newMessages[chatboxtitle] = true;
					newMessagesWin[chatboxtitle] = true;
					$("#chatbox_"+chatboxtitle+" .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+item.d+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+item.m+'</span></div>');
				}

				$("#chatbox_"+chatboxtitle+" .chatboxcontent").scrollTop($("#chatbox_"+chatboxtitle+" .chatboxcontent")[0].scrollHeight);
				itemsfound += 1;
			}
		});

		chatHeartbeatCount++;

		if (itemsfound > 0)
		{
			chatHeartbeatTime = minChatHeartbeat;
			chatHeartbeatCount = 1;
		}
		else if (chatHeartbeatCount >= 10)
		{
			chatHeartbeatTime *= 2;
			chatHeartbeatCount = 1;
			if (chatHeartbeatTime > maxChatHeartbeat)
			{
				chatHeartbeatTime = maxChatHeartbeat;
			}
		}
		setTimeout('chatHeartbeat();',chatHeartbeatTime);
		}
	});
}

jQuery.cookie = function(name, value, options)
{
	if (typeof value != 'undefined')
	{
		options = options || {};
		if (value === null)
		{
			value = '';
			options.expires = -1;
		}
		var expires = '';
		if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString))
		{
			var date;
			if (typeof options.expires == 'number')
			{
				date = new Date();
				date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
			}
			else
			{
				date = options.expires;
			}
			expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
		}
		var path = options.path ? '; path=' + (options.path) : '';
		var domain = options.domain ? '; domain=' + (options.domain) : '';
		var secure = options.secure ? '; secure' : '';
		document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
	}
	else
	{
		var cookieValue = null;
		if (document.cookie && document.cookie != '')
		{
			var cookies = document.cookie.split(';');
			for (var i = 0; i < cookies.length; i++)
			{
				var cookie = jQuery.trim(cookies[i]);
				if (cookie.substring(0, name.length + 1) == (name + '='))
				{
					cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
					break;
				}
			}
		}
		return cookieValue;
	}
};
