var generateMessage = function(data) {
	var currentLastMsgId = $("div.message")[1].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");
		}
		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['error']) {
				showError(data['error']);
			} else {
				updateChat();
				$("#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 = $("div.message")[1].id.split("-")[1];
	var data = {'getUpdates': true, 'lastId': lastPostId};
	$.ajax({
		url: url,
		type: "GET",
		dataType: 'json',
		data: data,
		success: function(data){
			$.each(data['messages'], function(){
				generateMessage(this);
			});
		}
	}); 
};

var chatUpdateHandler = function() {
	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();
							});
						});
					});
			}
		}
	});
};


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