var windowFocus = true;
var updateTitleInterval = 0;
var clearBadgesInterval = 0;

var generateMessage = function(data) {
	var currentLastMsgId = $("div.message:first[id|='msg']").attr("id").split("-")[1];
	if (typeof(data) != undefined && typeof(data['chatname']) != undefined && typeof(data['message']) != undefined && currentLastMsgId != data['id']) {
		var newMessage = $("div.emptyClone").clone(true).insertAfter($("div.emptyClone")).fadeIn(500);
		newMessage.addClass("newMessage");
		newMessage[0].id = "msg-"+data['id'];
	 
		if (data['userid'] == 0) {
			newMessage.addClass("guest");
		}
		if (data['source'] == 'sms') {
			newMessage.addClass("source-sms");
			newMessage.attr("title", "15977 KITE ...");
		}
		var newMessageArray = $("div.newMessage :contains('empty')");
		$(newMessageArray[0]).addClass("user-"+data['userid']);
		newMessageArray[1].innerHTML = data['chatname']; // set chatname
		newMessageArray[2].innerHTML = data['date']; // set date and time
		newMessageArray[3].innerHTML = data['message']; // set message content

		newMessage.fadeIn(500);
		newMessage.removeClass("emptyClone");
		newMessage.removeClass("newMessage");
	}
};


var postMessage = function() {

	// do ajax post request with json response
	$.post("/apps/chathandler.php", { chatUserName: $("#chatUserName").val(), messageContent: $("#messageContent").val() },
		function(data){
			if (data && data['error']) {
				showError(data['error']);
			} else {
				updateChat();
				lastReadToCookie();
				$("#messageContent").val("");
			}
		}, "json");
	
};

var chatSubmitHandler = function () {
	$("#submitMessage").click(function(ev) {
		$("#submitMessage").disabled = true;
		postMessage();
	});
	
	$("#chatPostForm").submit(function() {
		$("#submitMessage").disabled = true;
		postMessage();
	});
};

var updateChat = function() {
	// do ajax post request with json response
	var url = "/apps/chathandler.php";
	
	var lastPostId = 0;
	if ($("div.message:first[id|='msg']").length > 0) {
		lastPostId = $("div.message:first[id|='msg']").attr("id").split("-")[1];
	}

	var data = {'getUpdates': true, 'lastId': lastPostId};
	$.ajax({
		url: url,
		type: "GET",
		dataType: 'json',
		data: data,
		success: function(data){
			if (data) {
				$.each(data['messages'], function(){
					generateMessage(this);
				});
			}
		}
	});
};

var chatUpdateHandler = function() {
	
	if ($("#chat").length < 1 || $("#chatLog").length < 1) {
		return false;
	}
	
	setInterval(function() {
		updateChat();
	},5000);  
};

var generateProfileHtml = function(data) {
	var profileHtml = "";
	jQuery.each(data, function(i,val){
		if (i == "avatar") {
			profileHtml += "<img src=\""+val+"\" alt=\"\" class=\"avatar\" />";
		}
		if (val != "" && i != "id" && i != "avatar") {
			profileHtml += "<strong>"+ i +":</strong> "+ val +" <br />";   
		}
	});
	
	return profileHtml;
};

var viewUserProfileHandler = function() {
	$("body").append($("<div id='userProfileViewer'>"));
	$("div.message:not(.guest) div.messageInfo").click(function(){
		if (this) {
			var userId = parseInt(this.className.split(" ")[1].split("-")[1]);
		}
		if (userId != 0) {
			var src = this;
			var offset = $(src).offset();
			var w = $(src).outerWidth();
			$("#userProfileViewer").css({top: offset.top - 10, left: offset.left + w - 12});
			$("#userProfileViewer").fadeTo("300","1");
			$("#userProfileViewer").html("<img src='/i/images/ajax-loader.gif' alt='loading' class='loading' title='laeb' /><h3>hangin kama…</h3>");
			
			if (userId >= 0) {
				$.getJSON("/apps/chathandler.php?getProfile="+userId,
					function(data){
						$("#userProfileViewer").html(generateProfileHtml(data));
						$(src).bind("mouseleave", function(){
							$("#userProfileViewer").fadeTo("300","0");
							$("#userProfileViewer").queue(function () {
							  $(this).css({top: offset.top - 100000, left: offset.left + w - 100000});
							  $(this).dequeue();
							});
						});
					});
			}
		}
	});
};

var lastReadToCookie = function() {
	var currentLastMsgId = 0;
	if ($("div.message:first[id|='msg']").length > 0) {
		currentLastMsgId = $("div.message:first[id|='msg']").attr("id").split("-")[1];
	}
	setCookieValue('unitedkiters.data', 'lastChatMsg', currentLastMsgId);
	$("div.message.unRead").removeClass("unRead");
};

var markUnreadMessages = function() {
	var lastReadMsgId = getCookieValue('unitedkiters.data', 'lastChatMsg');
	
	if (!lastReadMsgId) {
		return false;
	}
	
	$("div.message[id|='msg']").each(function(){
		// if last read message is found, break the loop
		if ($(this).attr('id').split("-")[1] == lastReadMsgId) {
			return false;
		}
		$(this).addClass("unRead");
	});
	
	// remove unrRead badges and restore page title after 40 sec
	clearInterval(clearBadgesInterval);
	clearBadgesInterval = setInterval(function() {
		if (windowFocus) {
			$("div.message.unRead").removeClass("unRead");
			lastReadToCookie();
			restorePageTitle();
			clearInterval(clearBadgesInterval);
		}
	},40000);
};

var restorePageTitle = function() {
	if ($("title").data('original')) {
		$("title").html($("title").data('original'));
	}
};

var updatePageTitle = function() {
	// store original title for later usage, if its not stored yet
	if (!$("title").data('original')) {
		$("title").data('original', $("title").html());
	}
	
	var originalTitle = $("title").data('original');
	var newTitle = originalTitle.split(" - ");
	
	if (typeof newTitle[0] != "undefined") {
		titleTemplate = newTitle[0] + " (%d)";
		
		if ($("div.message.unRead").length > 0) {
			newTitle = titleTemplate.replace("%d", $("div.message.unRead").length);
			$("title").html(newTitle);
		} else {
			restorePageTitle();
		}
	}
};

var pageTitleHandler = function() {	
	clearInterval(updateTitleInterval);
	updateTitleInterval = setInterval(function() {
		
		updatePageTitle();
		
		if (windowFocus) {
			clearInterval(updateTitleInterval);
		}
		
	},15000);
};

var windowFocusHandler = function() {
	// window gets focus
	$(window).bind("focus", function(ev){
		markUnreadMessages();
		windowFocus = true;
	});
	
	// window blurred
	$(window).bind("blur", function(ev){
		lastReadToCookie();
		windowFocus = false;
		pageTitleHandler();
	});
};

var markReadHandler = function() {
	$("#chatLog").click(function(ev){
		$(ev.target).parents("div.message").removeClass("unRead");
		updatePageTitle();
	});
};


$(document).ready(function(){
	chatSubmitHandler();
	chatUpdateHandler();
	viewUserProfileHandler();
	windowFocusHandler();
	markUnreadMessages();
	markReadHandler();
});
