// Pad a number with leading zeroes
function pad(number, length)
{
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }

    return str;
}


(function ($)
{
    /**
    ** A JS function for dumping JS objects data, similar to PHP's print_r
    **/
    function e(arr, return_text, level, objs_dumped)
    {
        var dumped_text, level_padding, j, k, item, value, already_dumped;
        
        if (return_text === undefined) {
            return_text = false;
        }
        dumped_text = "";
        if (!level) {
            level = 0;
        }
        if (objs_dumped === undefined) {
            objs_dumped = [];
        }
        
        //The padding given at the beginning of the line.
        level_padding = "";
        for (j = 0; j < level + 1;) {
            level_padding += "    ";
            j += 1;
        }
        
        if (typeof(arr) === 'object') { //Array/Hashes/Objects 
            for (item in arr) {
                // if (arr.hasOwnProperty(item)) {
                    try {
                        value = arr[item];
                        if (value === null) {
                            dumped_text += level_padding + "'" + item + "' => null\n";
                        }
                        else {
                            if (typeof(value) === 'object') { //If it is an array,
                                dumped_text += level_padding + "'" + item + "' ...\n";
                                // Recursion protection
                                already_dumped = false;
                                for (k = 0; k < objs_dumped.length;) {
                                    if (value === objs_dumped[k]) {
                                        already_dumped = true;
                                        dumped_text += 'recursion! (already dumped somewhere above)\n';
                                        break;
                                    }
                                    k += 1;
                                }
                                if (already_dumped === false) {
                                    objs_dumped[objs_dumped.length] = value;
                                    dumped_text += e(value, true, level + 1, objs_dumped);
                                }
                            
                            } else {
                                dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
                            }
                        }
                    } catch (err) {}
                // }
            }
        } else { //Stings/Chars/Numbers etc.
            dumped_text = "===>" + arr + "<===(" + typeof(arr) + ")";
        }
        
        if (return_text) {
            return dumped_text;
        }
        else {
            alert(dumped_text);
        }
    }
    
    function urlChangeParam(param, value, url)
    {
        var i, url, uri, paramsSegments, params, paramsStr, paramsArr;
        
        if (url === undefined) {
            url = document.location.href;
        }
        uri = url.substr($.liveHelp.base_url.length);
        
        // If there is an anchor in this url - we must move it to the back
        anchorStr = '';
        anchorStrPos = uri.indexOf('/#');
        if (anchorStrPos >= 0)
        {
            anchorStr = uri.slice(anchorStrPos);
            uri = uri.slice(0, anchorStrPos);
        }
        
        paramsStr = uri.substr($.liveHelp.current_uri.length);
        paramsStr = paramsStr.replace(/^\//, '').replace(/\/$/, '');
        
        paramsSegments = paramsStr.split('/');
        params  = {};
        if (paramsSegments.length > 1) {
            for (i = 0; i < paramsSegments.length;)
            {
                params[paramsSegments[i]] = paramsSegments[i + 1];
                i += 2;
            }
        }
        
        if (value !== false)
            params[param]   = value;
        else
            delete params[param];
        
        paramsArr       = [];
        $.each(params, function (key, value)
        {
            paramsArr.push(key + '/' + value);
        });
        paramsStr = paramsArr.join('/');
        
        return $.liveHelp.base_url + $.liveHelp.current_uri + (paramsStr ? '/' + paramsStr : '') + anchorStr;
    }
    
    
    String.prototype.trim = function()
    {
        return this.replace(/^\s+|\s+$/g,"");
    }
    function trim(str)
    {
        return str.trim();
    }

    String.prototype.ltrim = function()
    {
        return this.replace(/^\s+/g,"");
    }
    function ltrim(str)
    {
        return str.ltrim();
    }

    String.prototype.rtrim = function()
    {
        return this.replace(/\s+$/g,"");
    }
    function rtrim(str)
    {
        return str.rtrim();
    }
    
    // Simple JavaScript Templating
    // John Resig - http://ejohn.org/ - MIT Licensed
    (function(){
      var cache = {};
     
      this.tmpl = function tmpl(str, data){
        // Figure out if we're getting a template, or if we need to
        // load the template - and be sure to cache the result.
        var fn = !/\W/.test(str) ?
          cache[str] = cache[str] ||
            tmpl(document.getElementById(str).innerHTML) :
         
          // Generate a reusable function that will serve as a template
          // generator (and which will be cached).
          new Function("obj",
            "var p=[],print=function(){p.push.apply(p,arguments);};" +
           
            // Introduce the data as local variables using with(){}
            "with(obj){p.push('" +
           
            // Convert the template into pure JavaScript
            str
                .replace(/[\r]/g, "\\r")
                .replace(/[\t]/g, "\\t")
                .replace(/[\n]/g, "\\n")
                .replace(/'(?=[^%]*%>)/g,"(((VARNAME)))")
                .split("'").join("\\'")
                .split("(((VARNAME)))").join("'")
                .replace(/<%=(.+?)%>/g, "'); try { p.push($1); } catch (err) { console.log(err.message); }; p.push('")
                .split("<%").join("');")
                .split("%>").join("p.push('")
            + "');}return p.join('');");
       
        // Provide some basic currying to the user
        return data ? fn( data ) : fn;
      };
    })();
    
    $(function ()
    {
        var TYPE_MESSAGE = 1;
        var TYPE_SHOW_PHONE = 2;
        var TYPE_HIDE_PHONE = 3;
        var TYPE_END_SESSION = 4;
        var TYPE_PAUSE_SESSION = 5;
        var TYPE_RESUME_SESSION = 6;
        var TYPE_STARTED_TYPING = 7;
        var TYPE_STOPPED_TYPING = 8;
        
        
        var isTypingStatus = false; // Is our user currently set as typing
        
        
        function appendMessages(container, messages)
        {
            for (var i = 0; i < messages.length; i++)
            {
                var dateTime = messages[i].created.split(' ');
                var time = dateTime[1].split(':');
                messages[i].timeString = time[0] + ':' + time[1];
                
                // www.* -> http://www.*
                messages[i].item.text = messages[i].item.text.replace(/(http:\/\/)?www.(.*)/g, function($0, $1, $2)
                {
                    return $1 ? $0 : 'http://www.' + $2;
                });
                
                // Activate links
                messages[i].item.text = messages[i].item.text.replace(/http:\/\/(.*?)(\s|$)/g, '<a href="http://$1" target=\"_blank\">http://$1</a>$2');
            }
            $(container).append(tmpl("live_help_chat_messages", {
                messages : messages
            }));
        }
        
        $(".live_help").each(function ()
        {
            var live_help = $(this);
            
            
            function styleTable1()
            {
                // $(".table1", live_help).each(function ()
                // {
                    // var table = $(this);
                    
                    // $("tr th", table).css("border-bottom", "2px solid #FFFFFF");
                    // $("tr td:not(:last)", table).css("border-right", "1px solid #FFFFFF");
                // });
            }
            // styleTable1();
            
            // Blinks a given page title, until user moves his mouse within this window
            function blinkTitle(title)
            {
                if (blinkTitle.title === undefined)
                {
                    blinkTitle.title = title;
                    
                    var oldTitle = document.title;
                    var timeoutId = setInterval(function() {
                        document.title = document.title == blinkTitle.title ? oldTitle : blinkTitle.title;
                    }, 1000);
                    
                    window.onmousemove = function()
                    {
                        clearInterval(timeoutId);
                        document.title = oldTitle;
                        window.onmousemove = null;
                        blinkTitle.title = undefined;
                    };
                    $(window).keypress(function()
                    {
                        clearInterval(timeoutId);
                        document.title = oldTitle;
                        $(window).unbind('keypress', arguments.callee);
                        blinkTitle.title = undefined;
                    });
                }
            }
            
            // Paging
            $(".live_help_paging", live_help).each(function ()
            {
                var paging = $(this);
                
                $(".limit select", paging).change(function ()
                {
                    var uriParam = $(this).attr("name");
                    document.location = urlChangeParam(uriParam, $(this).val());
                });
            });

            
            // ------------------------------- LOGIN PAGE & WAIT PAGE - SHOW QUEUE INFO -------------------------------
            
            $(".login_page, .wait_page", live_help).each(function ()
            {
                var page = $(this);
                
                var sessionsQueue = [];
                var updateQueueInterval = 10; // Update queue position every updateQueueInterval seconds
                function updateQueue()
                {
                    var types = [];
                    if ($(page).hasClass("login_page"))
                        $(".choose_format .format .radio input", page).each(function ()
                        {
                            types.push($(this).val());
                        });
                    else if ($(page).hasClass("wait_page"))
                        types.push($.liveHelp.session.type);
                    
                    var query = {
                        "fn": 'seminarsGetSessionsQueueLength'
                      , "sessionType" : types
                    };
                    if ($.liveHelp.session && $.liveHelp.session.id)
                        query.sessionId = $.liveHelp.session.id;
                    
                    $.post($.liveHelp.base_url + 'external/ajax/', query, function (text)
                    {
                        try
                        {
                            var response = $.parseJSON(text);
                            if (response && response.success && response.list)
                            {
                                sessionsQueue = response.list;
                                showQueueInfo();
                            }
                        } catch (err) {};
                    },
                    'text');
                    
                    // Update queue position every updateQueueInterval seconds
                    setTimeout(updateQueue, updateQueueInterval * 1000);
                }
                updateQueue();
                
                function showQueueInfo()
                {
                    var type;
                    if ($(page).hasClass("login_page"))
                        type = $(".choose_format .format .radio input:checked", page).val();
                    else if ($(page).hasClass("wait_page"))
                        type = $.liveHelp.session.type;
                    
                    if (sessionsQueue[type])
                    {
                        $(".queue .length", page).html(sessionsQueue[type].queueLength);
                        
                        // Wait time forecast (in minutes)
                        var waitMinutes = Math.round(((sessionsQueue[type].queueLength - ($(page).hasClass("wait_page") ? 1 : 0)) * sessionsQueue[type].averageSessionTime) / 60);
                        if (waitMinutes < 1)
                            waitMinutes = 1;
                        $(".queue .wait", page).html(waitMinutes + 'min');
                    
                        $(".queue_in", page).show();
                        
                        if ($(page).hasClass("wait_page"))
                        {
                            // Render queue list
                            $(".queue_list", page).html(tmpl("queue_list", {
                                queueUsers : sessionsQueue[type].queueUsers
                            }));
                            styleTable1();
                        }
                    }
                    
                    // For wait page - check if the consultant has started the session
                    if ($(page).hasClass("wait_page"))
                    {
                        for (var i = 0; i < sessionsQueue[type].queueUsers.length; i++)
                            if (sessionsQueue[type].queueUsers[i].thisSession && sessionsQueue[type].queueUsers[i].active)
                            {
                                document.location.href = $.liveHelp.base_url + $.liveHelp.index + 'session/' + $.liveHelp.session.id;
                            }
                    }
                }
                
                // For login page - recalculate queue info, when changing session type
                if ($(page).hasClass("login_page"))
                {
                    $(".choose_format .format", page).css("cursor", "pointer");
                    $(".choose_format .format", page).click(function ()
                    {
                        $(".radio input", this).attr("checked", true);
                        showQueueInfo();
                    });
                }
            });
            
            // ------------------------------- HELP SESSION PAGE -------------------------------
            
            $(".session_page", live_help).each(function ()
            {
                var session_page = $(this);
                
                
                $(".new_message .btn2", session_page).click(function ()
                {
                    return false;
                });
                
                if ($.liveHelp.session && $.liveHelp.session.id)
                {
                    // ------------------------------- HELP SESSION PAGE - EVENTS -------------------------------
                    
                    var updateEventsInterval = 2; // Update events every updateInterval seconds
                    var lastEventId = false;
                    var updateEventsTimeout;
                    var sessionStatus = 1;
                    
                    
                    // First - show session started message
                    $(".chat .chat_messages", session_page).append(tmpl("live_help_chat_special_message", {
                        text : $.liveHelp.appConfig.session.startText
                    }));
                    if (! session_page.hasClass("admin_page"))
                        blinkTitle('Konsultacija prasidėjo');
                    
                    // When video flash will be loaded - set it's status
                    $.liveHelp.setVideo = function (ref)
                    {
                        $.liveHelp.video = ref;
                        updateVideoStatus();
                    };
                    function updateVideoStatus()
                    {
                        if (! $.liveHelp.video || ! $.liveHelp.video.setStatus)
                        {
                            setTimeout(arguments.callee, 100);
                            return;
                        }
                        
                        $.liveHelp.video.setStatus(sessionStatus == 1 ? true : false);
                    }
                    
                    function updateEvents(firstCall)
                    {
                        if (updateEvents.running === undefined)
                            updateEvents.running = false;
                        
                        // Do not do blinks for fetched events on first call (page open)
                        if (firstCall === undefined)
                            firstCall = false;
                        
                        
                        function updateEventsBlinkTitle(title)
                        {
                            if (! firstCall || ! session_page.hasClass("admin_page"))
                                blinkTitle(title);
                        }
                        
                        if (updateEvents.running === false)
                        {
                            updateEvents.running = true;
                            
                            $.post($.liveHelp.base_url + 'external/ajax/', {
                                'fn': 'seminarsGetNewEvents',
                                'sessionId' : $.liveHelp.session.id,
                                'sessionKey' : $.liveHelp.session.key,
                                'lastEventId' : lastEventId
                            },  function (text)
                                {
                                    try
                                    {
                                        var response = $.parseJSON(text);
                                        if (response && response.success)
                                        {
                                            var events = response.list;
                                            
                                            if (events.length > 0)
                                            {
                                                // Do specific actions for specific event types
                                                
                                                var eventsByType = {};
                                                var statusEvents = [];
                                                var userTypingEvents = [];
                                                
                                                
                                                for (var i = 0; i < events.length; i++)
                                                {
                                                    if (eventsByType[events[i].type] === undefined)
                                                        eventsByType[events[i].type] = [];
                                                    
                                                    eventsByType[events[i].type].push(events[i]);
                                                    // if (events[i].type == TYPE_PAUSE_SESSION || events[i].type == TYPE_RESUME_SESSION)
                                                        // statusEvents.push(events[i]);
                                                }
                                                
                                                // Chat messages
                                                if (eventsByType[TYPE_MESSAGE])
                                                {
                                                    for (var i = 0; i < eventsByType[TYPE_MESSAGE].length; i++)
                                                    {
                                                        if (eventsByType[TYPE_MESSAGE][i].custom.user.id != $.liveHelp.session.user.id)
                                                            updateEventsBlinkTitle('Nauja žinutė!');
                                                    }
                                                    appendMessages($(".chat .chat_messages", session_page), eventsByType[TYPE_MESSAGE]);
                                                }
                                                
                                                // Other user typing
                                                if (eventsByType[TYPE_STARTED_TYPING] || eventsByType[TYPE_STOPPED_TYPING] || eventsByType[TYPE_MESSAGE])
                                                {
                                                    // Find out current other user typing status
                                                    var sessionUsers = {};
                                                    var eventsByUser = {};
                                                    
                                                    function getSessionUsers(types)
                                                    {
                                                        $.each(types, function (typeIndex, type)
                                                        {
                                                            if (eventsByType[type])
                                                                $.each(eventsByType[type], function ()
                                                                { 
                                                                    if (! sessionUsers[this.custom.user.id])
                                                                        sessionUsers[this.custom.user.id] = this.custom.user;
                                                                });
                                                        });
                                                    }
                                                    
                                                    function fillEventsByUser(types)
                                                    {
                                                        $.each(types, function (typeIndex, type)
                                                        {
                                                            $.each(sessionUsers, function (userIndex, user)
                                                            {
                                                                if (! eventsByUser[user.id])
                                                                    eventsByUser[user.id] = {};
                                                                if (! eventsByUser[user.id][type])
                                                                    eventsByUser[user.id][type] = [];
                                                            });

                                                            if (eventsByType[type])
                                                                $.each(eventsByType[type], function ()
                                                                {
                                                                    eventsByUser[this.custom.user.id][type].push(this);
                                                                });
                                                        });
                                                    }
                                                    getSessionUsers([TYPE_STARTED_TYPING, TYPE_STOPPED_TYPING, TYPE_MESSAGE]);
                                                    fillEventsByUser([TYPE_STARTED_TYPING, TYPE_STOPPED_TYPING, TYPE_MESSAGE]);

                                                    var allUsersLastStartedTyping = 0;
                                                    var allUsersLastStoppedTyping = 0;
                                                    var allUsersLastMessageSent = 0;
                                                    $.each(sessionUsers, function (userIndex, user)
                                                    {
                                                        var lastStartedTyping   = eventsByUser[user.id][TYPE_STARTED_TYPING].length > 0 ? eventsByUser[user.id][TYPE_STARTED_TYPING][eventsByUser[user.id][TYPE_STARTED_TYPING].length - 1].id : 0;
                                                        var lastStoppedTyping   = eventsByUser[user.id][TYPE_STOPPED_TYPING].length > 0 ? eventsByUser[user.id][TYPE_STOPPED_TYPING][eventsByUser[user.id][TYPE_STOPPED_TYPING].length - 1].id : 0;
                                                        var lastMessageSent     = eventsByUser[user.id][TYPE_MESSAGE].length > 0 ? eventsByUser[user.id][TYPE_MESSAGE][eventsByUser[user.id][TYPE_MESSAGE].length - 1].id : 0;
                                                        
                                                        allUsersLastStartedTyping   = Math.max(allUsersLastStartedTyping, lastStartedTyping);
                                                        allUsersLastStoppedTyping   = Math.max(allUsersLastStoppedTyping, lastStoppedTyping);
                                                        allUsersLastMessageSent     = Math.max(allUsersLastMessageSent, lastMessageSent);
                                                        
                                                        if (user.id != $.liveHelp.session.user.id)
                                                        {
                                                            var isTyping = lastStartedTyping > lastStoppedTyping && lastStartedTyping > lastMessageSent ? true : false;
                                                        
                                                            $(".chat .chat_messages .is_typing.is_typing_" + user.id, session_page).remove();
                                                            if (isTyping)
                                                                $(".chat .chat_messages", session_page).append('<div class="is_typing is_typing_'+user.id+'">' + user.custom.employeeName + ' rašo žinutę...</div>');
                                                        }
                                                    });
                                                    
                                                    // If last event of these types is message sent - remove all typing info
                                                    if (allUsersLastMessageSent > allUsersLastStartedTyping)
                                                    {
                                                        $(".chat .chat_messages .is_typing", session_page).remove();
                                                        isTypingStatus = false;
                                                    }
                                                }
                                                
                                                // if (eventsByType[TYPE_END_SESSION] && eventsByType[TYPE_END_SESSION].length > 0)
                                                // {
                                                    // $(".chat .chat_messages", session_page).append(tmpl("live_help_chat_special_message", {
                                                        // text : eventsByType[TYPE_END_SESSION][0].custom.user.user_name + ' užbaigė konsultaciją'
                                                    // }));
                                                    
                                                    // if (eventsByType[TYPE_END_SESSION][0].custom.user.id != $.liveHelp.session.user.id)
                                                        // updateEventsBlinkTitle('Konsultacija baigta');
                                                    
                                                    // $.liveHelp.session.end_time = eventsByType[TYPE_END_SESSION][0].created;
                                                    
                                                    // // If we are in client zone - redirect to feedback page after a few seconds
                                                    // if ($.liveHelp.session.user.type == 1)
                                                        // (function (sessionId)
                                                        // {
                                                            // setTimeout(function ()
                                                            // {
                                                                // document.location.href = $.liveHelp.base_url + $.liveHelp.index + 'feedback/' + sessionId;
                                                            // }, 3000);
                                                        // })($.liveHelp.session.id);
                                                    
                                                    // // Remove session id variable (necessary for admin to be able to create new sessions,
                                                    // // without refreshing the page)
                                                    // if ($.liveHelp.session.id)
                                                        // delete $.liveHelp.session.id;
                                                // }
                                                
                                                // // Pause/resume session events
                                                // if (statusEvents.length > 0)
                                                // {
                                                    // if (statusEvents[statusEvents.length - 1].type == TYPE_RESUME_SESSION)
                                                    // {
                                                        // if (sessionStatus == 0)
                                                        // {
                                                            // updateEventsBlinkTitle('Konsultacija pratęsta');
                                                            // $(".chat .chat_messages", session_page).append(tmpl("live_help_chat_special_message", {
                                                                // text : 'Konsultacija pratęsta'
                                                            // }));
                                                            // sessionStatus = 1;
                                                            // updateVideoStatus();
                                                        // }
                                                    // }
                                                    // else
                                                    // {
                                                        // if (sessionStatus == 1)
                                                        // {
                                                            // updateEventsBlinkTitle('Konsultacija laikinai sustabdyta');
                                                            // $(".chat .chat_messages", session_page).append(tmpl("live_help_chat_special_message", {
                                                                // text : 'Konsultacija laikinai sustabdyta'
                                                            // }));
                                                            // sessionStatus = 0;
                                                            // updateVideoStatus();
                                                        // }
                                                    // }
                                                // }
                                                
                                                // // Phone chooser (admin)
                                                // $(".chat_info .phone_chooser", session_page).each(function ()
                                                // {
                                                    // var phone_chooser = $(this);
                                                    
                                                    // function setContainerData(container, event)
                                                    // {
                                                        // if (! event)
                                                            // $(container).removeData('liveHelpEvent');
                                                        // else
                                                            // $(container).data('liveHelpEvent', event);
                                                        
                                                        // if (event)
                                                        // {
                                                            // $(container).addClass("active");
                                                            // $("input[name='phone_url']", container).val(event.item.url);
                                                            // $("input[name='phone_url']", container).attr('readonly', true);
                                                            // $(".btn4", container).addClass("btn5").removeClass("btn4");
                                                            // $(".btn5 .btn_c a", container).html("Trinti")
                                                        // }
                                                        // else
                                                        // {
                                                            // $(container).removeClass("active");
                                                            // $("input[name='phone_url']", container).val('');
                                                            // $("input[name='phone_url']", container).attr('readonly', false);
                                                            // $(".btn5", container).addClass("btn4").removeClass("btn5");
                                                            // $(".btn4 .btn_c a", container).html("Siųsti")
                                                        // }
                                                    // }
                                                    
                                                    // for (var i = 0; i < events.length; i++)
                                                        // if (events[i].type == TYPE_SHOW_PHONE)
                                                        // {
                                                            // // Find first empty container and put this phone in it
                                                            // var containers = $(".phone_input_row", phone_chooser);
                                                            // for (var j = 0; j < containers.length; j++)
                                                                // if ($(containers[j]).data('liveHelpEvent') === undefined)
                                                                // {
                                                                    // setContainerData(containers[j], events[i]);
                                                                    
                                                                    // break;
                                                                // }
                                                        // }
                                                        // else if (events[i].type == TYPE_HIDE_PHONE)
                                                        // {
                                                            // // Find the container which contains this phone and remove the phone from it
                                                            // var containers = $(".phone_input_row", phone_chooser);
                                                            // for (var j = 0; j < containers.length; j++)
                                                            // {
                                                                // var event = $(containers[j]).data('liveHelpEvent');
                                                                // if (event && event.item && event.item.id && events[i].item && events[i].item.id
                                                                 // && event.item.id == events[i].item.id)
                                                                // {
                                                                    // setContainerData(containers[j], null);
                                                                    
                                                                    // // Also, move other containers up, to fill the empty spots
                                                                    // for (var k = j; k < containers.length; k++)
                                                                        // if (k + 1 < containers.length)
                                                                            // setContainerData(containers[k], $(containers[k + 1]).data('liveHelpEvent'));
                                                                        // else
                                                                            // setContainerData(containers[k], null);
                                                                    
                                                                    // break;
                                                                // }
                                                            // }
                                                        // }
                                                // });
                                                
                                                // // Phone display (client)
                                                // $(".chat_info .show_phones", session_page).each(function ()
                                                // {
                                                    // var show_phones = $(this);
                                                    
                                                    // function setContainerData(container, event)
                                                    // {
                                                        // if (! event)
                                                            // $(container).removeData('liveHelpEvent');
                                                        // else
                                                            // $(container).data('liveHelpEvent', event);
                                                        
                                                        // if (event)
                                                        // {
                                                            // $(".title", container).html(event.item.name);
                                                            
                                                            // $(".image", container).html('');
                                                            // var img = $("<img />");
                                                            // $(img).attr('src', event.item.img);
                                                            // $(img).attr('title', event.item.name);
                                                            // $(img).css('cursor', 'pointer');
                                                            // $(img).unbind('click');
                                                            // $(".image", container).append(img);
                                                            
                                                            // $("table", container).show();
                                                            // $(img).click(function ()
                                                            // {
                                                                // window.open(event.item.url, '_blank');
                                                            // });
                                                        // }
                                                        // else
                                                        // {
                                                            // $(".title td", container).html('&nbsp;');
                                                            // $(".image", container).html('');
                                                            // $("table", container).hide();
                                                        // }
                                                    // }
                                                    
                                                    // for (var i = 0; i < events.length; i++)
                                                        // if (events[i].type == TYPE_SHOW_PHONE)
                                                        // {
                                                            // // Find first empty container and put this phone in it
                                                            // var containers = $(".phone", show_phones);
                                                            // for (var j = 0; j < containers.length; j++)
                                                                // if ($(containers[j]).data('liveHelpEvent') === undefined)
                                                                // {
                                                                    // setContainerData(containers[j], events[i]);
                                                                    
                                                                    // break;
                                                                // }
                                                            
                                                            // if (events[i].custom.user.id != $.liveHelp.session.user.id)
                                                                // blinkTitle('Naujas pasiūlymas!');
                                                        // }
                                                        // else if (events[i].type == TYPE_HIDE_PHONE)
                                                        // {
                                                            // // Find the container which contains this phone and remove the phone from it
                                                            // var containers = $(".phone", show_phones);
                                                            // for (var j = 0; j < containers.length; j++)
                                                            // {
                                                                // var event = $(containers[j]).data('liveHelpEvent');
                                                                // if (event && event.item && event.item.id && events[i].item && events[i].item.id
                                                                 // && event.item.id == events[i].item.id)
                                                                // {
                                                                    // setContainerData(containers[j], null);
                                                                    
                                                                    // // Also, move other containers up, to fill the empty spots
                                                                    // for (var k = j; k < containers.length; k++)
                                                                        // if (k + 1 < containers.length)
                                                                            // setContainerData(containers[k], $(containers[k + 1]).data('liveHelpEvent'));
                                                                        // else
                                                                            // setContainerData(containers[k], null);
                                                                    
                                                                    // break;
                                                                // }
                                                            // }
                                                        // }
                                                    
                                                    // // Align container images
                                                    // $("> div", show_phones).each(function ()
                                                    // {
                                                        // var div = $(this);
                                                        
                                                        // // Try to minimize height of title divs
                                                        // $(".phone .title td", div).each(function ()
                                                        // {
                                                            // $(this).css('height', null);
                                                        // });
                                                        
                                                        // // Get max height of title divs
                                                        // var titleMaxHeight = 0;
                                                        // $(".phone .title td", div).each(function ()
                                                        // {
                                                            // if ($(this).height() > titleMaxHeight)
                                                                // titleMaxHeight = $(this).height();
                                                        // });
                                                        
                                                        // // Make sure it is the same across this row
                                                        // $(".phone .title td", div).each(function ()
                                                        // {
                                                            // if ($(this).height() < titleMaxHeight)
                                                                // $(this).css('height', titleMaxHeight);
                                                        // });
                                                    // });
                                                // });
                                                
                                                // Scroll to bottom
                                                $(".chat .chat_messages_cnt2").scrollTop($(".chat .chat_messages").height() - $(".chat .chat_messages").parent().height());
                                            }
                                        }
                                    // } catch (err) {};
                                    } catch (err) { e(err); };
                                    
                                    if (events && events.length > 0 && events[events.length - 1])
                                        lastEventId = events[events.length - 1].id;
                                    
                                    updateEvents.running = false;
                                    
                                    // Update messages every updateInterval seconds
                                    clearTimeout(updateEventsTimeout);
                                    updateEventsTimeout = setTimeout(updateEvents, updateEventsInterval * 1000);
                                },
                                'text');
                        }
                    }
                    
                    // Run the updater
                    updateEvents(true);
                    
                    // ------------------------------- HELP SESSION PAGE - MESSAGES -------------------------------
                    
                    $(".new_message", session_page).each(function ()
                    {
                        var new_message = $(this);
                        
                        var defaultInputValue = "Rašykite klausimą čia";
                        
                        var previousMessages = [];
                        var messageIndex = -1;
                        var currentMessage = '';
                        
                        
                        $(".input input", new_message).each(function ()
                        {
                            var input = $(this);
                            
                            $(input).keyup(function (e)
                            {
                                switch (e.keyCode)
                                {
                                    case 13: // ENTER - send message
                                        sendMessage({
                                            setInputValue : ''
                                        });
                                        break;
                                    
                                    
                                    // Up & Down buttons - scroll through your message history
                                    
                                    case 38: // KB_UP
                                        if (previousMessages.length > 0)
                                        {
                                            if (messageIndex < 0)
                                            {
                                                messageIndex = previousMessages.length - 1;
                                                currentMessage = $(input).val();
                                                $(input).val(previousMessages[messageIndex]);
                                            }
                                            else
                                            {
                                                if (messageIndex > 0)
                                                {
                                                    messageIndex--;
                                                    $(input).val(previousMessages[messageIndex]);
                                                }
                                            }
                                        }
                                        break;
                                    
                                    case 40: // KB_DOWN
                                        if (previousMessages.length > 0)
                                        {
                                            if (messageIndex >= 0)
                                            {
                                                messageIndex++;
                                                if (messageIndex < previousMessages.length)
                                                {
                                                    $(input).val(previousMessages[messageIndex]);
                                                }
                                                else
                                                {
                                                    messageIndex = -1;
                                                    $(input).val(currentMessage);
                                                }
                                            }
                                        }
                                        break;
                                    
                                    default: // General key - send TYPE_STARTED_TYPING or TYPE_STOPPED_TYPING event
                                        if ($(input).val().trim() != '')
                                        {
                                            if (! isTypingStatus)
                                            {
                                                $.post($.liveHelp.base_url + 'external/ajax/', {
                                                    "fn": 'seminarsStartedTyping'
                                                  , "sessionId" : $.liveHelp.session.id
                                                  , "sessionKey" : $.liveHelp.session.key
                                                  , "sessionUser" : $.liveHelp.session.user.id
                                                }, function (json)
                                                {
                                                    if (json.success)
                                                        isTypingStatus = true;
                                                }, 'json');
                                            }
                                        }
                                        else
                                        {
                                            if (isTypingStatus)
                                            {
                                                $.post($.liveHelp.base_url + 'external/ajax/', {
                                                    "fn": 'seminarsStoppedTyping'
                                                  , "sessionId" : $.liveHelp.session.id
                                                  , "sessionKey" : $.liveHelp.session.key
                                                  , "sessionUser" : $.liveHelp.session.user.id
                                                }, function (json)
                                                {
                                                    if (json.success)
                                                        isTypingStatus = false;
                                                }, 'json');
                                            }
                                        }
                                        
                                        break;
                                }
                            });
                            
                            $(input).focus(function ()
                            {
                                if ($(input).val() == defaultInputValue)
                                {
                                    $(input).val('');
                                }
                            });
                            $(input).blur(function ()
                            {
                                if ($(input).val() == '')
                                {
                                    $(input).val(defaultInputValue);
                                }
                            });
                        });
                        
                        function sendMessage(opt)
                        {
                            var text = trim($(".input input", new_message).val());
                            if (text != defaultInputValue && text != '')
                            {
                                $.post($.liveHelp.base_url + 'external/ajax/', {
                                    'fn': 'seminarsSaveMessage',
                                    'sessionId' : $.liveHelp.session.id,
                                    'sessionKey' : $.liveHelp.session.key,
                                    'sessionUser' : $.liveHelp.session.user.id,
                                    'text' : text
                                }, function (response)
                                {
                                    if (response.success)
                                    {
                                        previousMessages.push(text);
                                        messageIndex = -1;
                                        isTypingStatus = false;
                                        
                                        $(".input input", new_message).val( opt && opt.setInputValue !== undefined ?
                                                                            opt.setInputValue : 
                                                                            defaultInputValue);
                                        
                                        // Get this event
                                        updateEvents();
                                    }
                                },
                                'json');
                            }
                        }
                        
                        $(".btn1", new_message).click(function ()
                        {
                            sendMessage();
                            return false;
                        });
                    });
                    
                    // ------------------------------- HELP SESSION PAGE - PHONE CHOOSER (ADMIN) -------------------------------
                    
                    $(".phone_chooser", session_page).each(function ()
                    {
                        var phone_chooser = $(this);
                        
                        $("table tr:has(.btn4), table tr:has(.btn5)", phone_chooser).each(function ()
                        {
                            var tr = $(this);
                            var index = $("table tr:has(.btn4), table tr:has(.btn5)", phone_chooser).index(tr);
                            
                            $(".btn4, .btn5", tr).click(function ()
                            {
                                if ($(tr).hasClass("active"))
                                {
                                    var liveHelpEvent = $(tr).data('liveHelpEvent');
                                    if (liveHelpEvent && liveHelpEvent.item && liveHelpEvent.item.id)
                                    {
                                        // Remove phone
                                        $.post($.liveHelp.base_url + 'external/ajax/', {
                                            'fn': 'seminarsHidePhone',
                                            'sessionId' : $.liveHelp.session.id,
                                            'sessionKey' : $.liveHelp.session.key,
                                            'sessionUser' : $.liveHelp.session.user.id,
                                            'itemId' : liveHelpEvent.item.id
                                        }, function (text)
                                        {
                                            try
                                            {
                                                response = $.parseJSON(text);
                                                if (response.success)
                                                {
                                                    // Get this event
                                                    updateEvents();
                                                }
                                            } catch (err) {};
                                        },
                                        'text');
                                    }
                                    else 
                                    {
                                        // If for some reason, row was set to contain an already added phone,
                                        // but no such phone found - clear row (should never happen)
                                        
                                        $("input[name='phone_url']", tr).val('');
                                        $(tr).removeClass("active");
                                        $(".btn5", container).addClass("btn4").removeClass("btn5");
                                        $(".btn4 .btn_c a", container).html("Siųsti")
                                    }
                                }
                                else
                                {
                                    // Add phone
                                    var phoneUrl = trim($("input[name='phone_url']", tr).val());
                                    
                                    if (phoneUrl != '')
                                        $.post($.liveHelp.base_url + 'external/ajax/', {
                                            'fn': 'seminarsShowPhone',
                                            'sessionId' : $.liveHelp.session.id,
                                            'sessionKey' : $.liveHelp.session.key,
                                            'sessionUser' : $.liveHelp.session.user.id,
                                            'phoneUrl' : phoneUrl
                                        }, function (text)
                                        {
                                            try
                                            {
                                                response = $.parseJSON(text);
                                                if (response.success)
                                                {
                                                    $("input[name='phone_url']", tr).val('');
                                                    
                                                    // Get this event
                                                    updateEvents();
                                                }
                                            } catch (err) {};
                                        },
                                        'text');
                                }
                                
                                return false;
                            });
                            
                        });
                    });
                    
                    // // ------------------------------- HELP SESSION PAGE - PHONE DISPLAY (CLIENT) -------------------------------
                
                    // $(".chat_info .show_phones .phone a", session_page).click(function ()
                    // {
                        // return false;
                    // });
                    
                    
                    $(".end_live_help", session_page).click(function ()
                    {
                        var end_live_help = $(this);
                        
                        if (confirm('Ar tikrai norite baigti konsultaciją?'))
                        {
                            $.post($.liveHelp.base_url + 'external/ajax/', {
                                'fn': 'seminarsEndSession',
                                'sessionId' : $.liveHelp.session.id,
                                'sessionKey' : $.liveHelp.session.key,
                                'sessionUser' : $.liveHelp.session.user.id
                            }, function (response)
                            {
                                if (response.success)
                                {
                                    // document.location.href = $(end_live_help).attr('href');
                                }
                            },
                            'json');
                        }
                        
                        return false;
                    });
                }
            });
        });
    });
}(jQuery))
