//konstansok
var CHAT_INTERFACE_URL='includes/chat/chat_interface.php';
var COOKIE_VAR_STARTED='inweb_chat_started';
var COOKIE_VAR_USERNAME='inweb_chat_username';
var COOKIE_VAR_BOXTITLE='inweb_chat_boxtitle';

//globál változók
var username;
var chatHeartbeatTime = 3000;
var originalWindowTitle;
var windowFocus = true;
var chatboxFocus = false;
var lastMessageId = 0;
var newMessageCount = 0;
var periodicUpdater;

/**
 * Oldal betöltésekor lefutó kód.
 * Ilyenkor tölti be a chat ablakot, ha már elkezdődött az, csak oldal 
 * navigáció történt.
 */
$(document).ready(function(){
    originalWindowTitle = document.title;

    $([window, document]).blur(function(){
        windowFocus = false;
    }).focus(function(){
        windowFocus = true;
        document.title = originalWindowTitle;
        newMessageCount = 0;
    });
    
    if($.cookie(COOKIE_VAR_STARTED)==1) {
        continueChat();
    } 
});

/**
 * Chat folytatása: ablak létrehozása, korábbi üzenetek letöltése
 */
function continueChat() {
    username=$.cookie(COOKIE_VAR_USERNAME);
    createChatBox($.cookie(COOKIE_VAR_BOXTITLE));
    getAllPreviousMessages();
}

/**
 * Chat megkezdése, név bekérése.
 */
function startChat(boxTitle, nickNameQuestion) {
    $.cookie(COOKIE_VAR_BOXTITLE, boxTitle);
    createChatLoginBox(nickNameQuestion);
}

function createChatLoginBox(nickNameQuestion) {
    if ($("#chatbox_ask_name").length > 0) {
        if ($("#chatbox_ask_name").css('display') == 'none') {
            $("#chatbox_ask_name").css('display','block');
        }
        if ($("#chatbox_ask_name_bg").css('display') == 'none') {
            $("#chatbox_ask_name_bg").css('display','block');
        }
        $("#chatbox_ask_name .chatbox_ask_name_input").focus();
        return;
    }

    $("<div />" ).attr("id","chatbox_ask_name_bg")
        .addClass("chatbox_ask_name_bg")
        .html('<div id="chatbox_ask_name" class="chatbox_ask_name"><div class="chatboxhead"><div class="chatboxtitle">'+nickNameQuestion+'</div><div class="chatboxoptions"><a href="javascript:void(0)" onclick="javascript:cancelChat()">X</a></div><br clear="all"/></div><div class="chatboxinput"><input class="chatbox_ask_name_input" onkeydown="javascript:return checkChatNameInputKey(event,this);"></div></div>')
        .appendTo($( "body" ));
    
//    $("#chatbox_ask_name").css('bottom', '0px');
//    $("#chatbox_ask_name").css('left', '20px');
    $("#chatbox_ask_name").show();
    $("#chatbox_ask_name .chatbox_ask_name_input").focus();    
}

/**
 * A chat névbekérést bezárja.
 */
function cancelChat() {
    $("#chatbox_ask_name_bg").hide();
}

/**
 * Chat tényleges megkezdése. Menti a nevet, belép a session-be, létrehozza 
 * a chat ablakot.
 */
function startChatWithName(chatname) {
    $.cookie(COOKIE_VAR_USERNAME, chatname);
    username=chatname;
    startChatSession();
    createChatBox($.cookie(COOKIE_VAR_BOXTITLE));
    $("#chatbox_ask_name_bg").hide();
}

/**
 * Létrehozza a chat ablakot a megadott címmel.
 */
function createChatBox(boxTitle) {
    if ($("#chatbox").length > 0) {
        if ($("#chatbox").css('display') == 'none') {
            $("#chatbox").css('display','block');
        }
        $("#chatbox .chatboxtextarea").val('');
        $("#chatbox .chatboxtextarea").focus();
        return;
    }

    $("<div />" ).attr("id","chatbox")
        .addClass("chatbox")
        .html('<div class="chatboxhead"><div class="chatboxtitle">'+boxTitle+'</div><div class="chatboxoptions"><a href="javascript:void(0)" onclick="javascript:endChat()">X</a></div><br clear="all"/></div><div class="chatboxcontent"></div><div class="chatboxinput"><textarea class="chatboxtextarea" onkeydown="javascript:return checkChatBoxInputKey(event,this);"></textarea></div>')
        .appendTo($( "body" ));
			   
//    $("#chatbox").css('bottom', '0px');
//    $("#chatbox").css('left', '20px');
	
    chatboxFocus = false;

    $("#chatbox .chatboxtextarea").blur(function(){
        chatboxFocus = false;
        $("#chatbox .chatboxtextarea").removeClass('chatboxtextareaselected');
    }).focus(function(){
        chatboxFocus = true;
        newMessageCount = 0;
        $('#chatbox .chatboxhead').removeClass('chatboxblink');
        $("#chatbox .chatboxtextarea").addClass('chatboxtextareaselected');
    });

    $("#chatbox").click(function() {
        if ($('#chatbox .chatboxcontent').css('display') != 'none') {
            $("#chatbox .chatboxtextarea").focus();
        }
    });

    $("#chatbox").show();
    $("#chatbox .chatboxtextarea").focus();
}

/**
 * Időközönként lefutó metódus, ami ellenőrzi, hogy vannak-e új üzenetek.
 */
function chatHeartbeat(){
	
    $.ajax({
        url: CHAT_INTERFACE_URL+"?get&after="+lastMessageId,
        cache: false,
        dataType: "json",
        success: function(data) {
            if(data.messages.length>0) {
                addAllMessagesToChatBox(data.messages);
            }
                
            periodicUpdater=setTimeout('chatHeartbeat();',chatHeartbeatTime);
        }
    });
}

/**
 * Beérkező üzenet hozzáadása a chat ablakhoz.
 */
function addMessageToChatBox(from, message, timestamp) {
    $("#chatbox .chatboxcontent").append('<div class="chatboxmessage"><span class="chatboxmessagefrom">'+from+':&nbsp;&nbsp;</span><span class="chatboxmessagecontent">'+message+'</span></div>');
    $("#chatbox .chatboxcontent").scrollTop($("#chatbox .chatboxcontent")[0].scrollHeight);
    
    newMessageCount++;
    
    if(!windowFocus) {
        document.title = originalWindowTitle + " ("+newMessageCount+")";
    }
}

/**
 * Chat ablak bezárása, chat befejezése, cookie-k törlése.
 */
function endChat() {
    $('#chatbox').css('display','none');
    $("#chatbox .chatboxcontent").empty();
    clearTimeout(periodicUpdater);
    
    $.ajax({
        url: CHAT_INTERFACE_URL+"?end",
        cache: false,
        success: function(data) {
            if(data=="OK") {
                //cookie törlése
                $.cookie(COOKIE_VAR_STARTED,null);
                $.cookie(COOKIE_VAR_USERNAME,null);
                $.cookie(COOKIE_VAR_BOXTITLE,null);
            }
        }
    });
}

/**
 * A felhasználónév ablakba gépeléskor figyeli a bevitelt, enter-re belépteti
 * a felhasználót.
 */
function checkChatNameInputKey(event,chatboxinput) {
    if(event.keyCode == 13 && event.shiftKey == 0)  {
        var name = $(chatboxinput).val();
        name = name.replace(/^\s+|\s+$/g,"");

        $(chatboxinput).val('');
        startChatWithName(name);
        return false;
    }
    return true;
}

/**
 * A chat ablakba gépeléskor figyeli a bevitelt, enter-re beküldi az üzenetet.
 */
function checkChatBoxInputKey(event,chatboxtextarea) {
    if(event.keyCode == 13 && event.shiftKey == 0)  {
        var message = $(chatboxtextarea).val();
        message = message.replace(/^\s+|\s+$/g,"");

        $(chatboxtextarea).val('');
        $(chatboxtextarea).focus();
        $(chatboxtextarea).css('height','44px');
        if (message != '') {
            $.ajax({
                url: CHAT_INTERFACE_URL+"?send&message="+encodeURI(message),
                cache: false,
                success: function(data) {
                    if(data=="OK") {
                        now=new Date();
                        addMessageToChatBox(username, message, now.f("yyyy-MM-dd hh:mm:ss"));
                    }
                }
            });
        }
        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');
    }
    
    return true;
}

/**
 * Chat megkezdése, ajax hívással és cookie-ba mentéssel. Beindítja a periodikus
 * bejövő üzenetfigyelést.
 */
function startChatSession() {
    $.ajax({
        url: CHAT_INTERFACE_URL+"?start&user="+encodeURI(username),
        cache: false,
        success: function(data) {
            if(data=="OK") {
                //cookie beállítása
                $.cookie(COOKIE_VAR_STARTED,'1');
                
                //periodikus frissítés indítása
                periodicUpdater=setTimeout('chatHeartbeat();',chatHeartbeatTime);
            }
        }
    });
}

/**
 * Korábbi összes üzenet letöltése (gyakorlatilag a teljes chat tartalom)
 */
function getAllPreviousMessages() {
    $.ajax({
        url: CHAT_INTERFACE_URL+"?get&all",
        cache: false,
        dataType: "json",
        success: function(data) {
            if(data.messages.length>0) {
                addAllMessagesToChatBox(data.messages);
            }
                
            periodicUpdater=setTimeout('chatHeartbeat();',chatHeartbeatTime);
        }
    });
}

/**
 * Több üzenet egyszerre történő betöltése az ablakba
 */
function addAllMessagesToChatBox(messages) {
    $.each(messages, function(i,item){
        if (item) { // fix strange ie bug
            addMessageToChatBox(item.from, item.message, item.date_sent);
            if(parseInt(item.id)>lastMessageId) {
                lastMessageId=parseInt(item.id);
            }
        }
    });
}
