var generateMessage = function(data) {
	var currentLastMsgId = $("div.message")[1].id.split("-")[1];
    if (data != undefined && data['chatname'] != undefined && 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");
		}
		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(data);
				$("#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
	$.getJSON("/apps/chathandler.php?getUpdates=true&lastId="+$("div.message")[1].id.split("-")[1], // that shiet after that + is last message id :)
	    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='loading' /><h3>fetching stuff…</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();
});