var araSpeak = {
    
    /* Obsluga dolnego paska - komunikatow (infoboxow) czyli gadania papugi, oraz livemessages
     * czyli pokazywania guzikow chatu w pasku (ze skrolowaniem)
     * 
     * TODO: optymalizacja - przerobienie na obiekty, zeby tak nie jebalo po DOM jak teraz -_-
     */
    
    init: function () {
        this.bar = $("#araSpeakBar");
        this.infobox_template = $("#infoBoxesTemplate");
        this.pulse = setInterval('araSpeak.beat()', 1000);
        this.live_messages_wrapper = $("#liveMessagesWrapper");
        this.live_messages = $('#liveMessages');
        this.msg_slide_jump = 100;
    },
    
    beat: function () {
        /* Uruchamiana co sekunde realizuje odliczanie widocznego  komunikatu 
         * z uruchomionym odliczaniem, obsluguje tez pokazywanie kolejkowanych boksow.
         */
        var open_box = araSpeak.bar.find(".infobox.counterEnabled");
        if (open_box.length === 1) {
            araSpeak.decrement_counter(open_box);
        }
        // szukamy zakolejkowanego boksa do pokazania - chronologicznie pierwszy to ostatni poniewaz sa
        // prependowane
        var first_queued_box = araSpeak.bar.find(".infobox.queued:last");
        if (first_queued_box && first_queued_box.hasClass('open') === false) {
            first_queued_box.show().addClass('open');
            // toporne sprawdzanie czy uruchamiany licznik
            // time0 to brak odlicznia, jesli ta klasa nie wystepuje to znaczy ze jest odliczanie
            if (first_queued_box.hasClass('time0') === false) {
                first_queued_box.addClass("counterEnabled");
            }
        }
    },
    
    decrement_counter: function (box) {
        var current_limit = araSpeak.read_time_limit(box);
        if (current_limit > 0) {
            // zmniejszam limit i uaktualniam klase boxa
            current_limit--;
            araSpeak.set_time_limit(box, current_limit);
            if (current_limit === 0) {
                box.hide(300, function () {
                    $(this).remove();
                });
            } 
        }
    },
    
    read_time_limit: function (box) {
        /* Funkcja odczytuje czas wyswietlania boxa z klasy o konstrukcji t[liczba sekund] */
        var re_t = /time(\d{1,2})/.test(box.attr('class'));
        return RegExp.$1;
    },
    
    set_time_limit: function (box, new_time_limit) {
        /* Funkcja podmienia czas wyswietlania boxa w klasie o konstrukcji t[liczba sekund] */
        var re_t = /(time\d{1,2})/.test(box.attr('class'));
        var old_class = RegExp.$1;
        box.removeClass(old_class);
        box.addClass('time' + new_time_limit);
    },
    
    setup_infobox: function () {
        // wewnatrz paska powinien byc naraz tylko jeden infoBox
        araSpeak.bar.find(".infobox .countDown").click(function(){
            var box = $(this).parent();
            box.removeClass("counterEnabled"); // klasy moze nie byc
            box.hide("fast", function () {
                box.remove();
            });
        });
        return false; 
    },
    
    reset_template: function () {
        araSpeak.infobox_template.find(".infobox").attr('class', 'infobox');
        araSpeak.infobox_template.find(".title, .content").html('');
    },
    
    add_queued_infobox: function (title, the_type, timeout, msg_html, msg_name) {
        /* Dodawanie kolejkowanego (kolejkowaLnego?) infoboxa.
         * Od create_show_and_setup_infobox rozni sie tym, ze wyswietlany jest podany
         * tytul boksa, a nie brany na podstawie typu, oraz ze boksy dodawane przez ta metode
         * moga byc kolejkowane: dodawane sa z klasa 'queued', araSpeak.beat obsluguje ich 
         * kolejne wyswietlanie.
         */
        // Jesl podano nazwe wiadomosci (unikalna) upewniamy sie ze nie duplikujemy infoboxa 
        if (msg_name !== '') {
            if (araSpeak.bar.find('div[name=' + msg_name + ']').length > 0) {
                return false;
            }
        }
        araSpeak.infobox_template.find('.title').html(title);
        araSpeak.infobox_template.find(".infobox").addClass('queued').addClass(the_type).addClass('time'+timeout);
        if (msg_name !== '') {
            araSpeak.infobox_template.find(".infobox").attr('name', msg_name);
        }
        araSpeak.infobox_template.find('.content').html(msg_html);
        araSpeak.bar.prepend(araSpeak.infobox_template.html());
        araSpeak.reset_template();
        araSpeak.setup_infobox();
    },
    
    create_show_and_setup_infobox: function (msg_html, the_type, timeout) {
        /* Domyslne wyswietlanie infoboxa: tytulem jest domyslny tekst wg typu */
       araSpeak.add_queued_infobox(jsTexts[the_type], the_type, timeout, msg_html, '');
    },
    
    handle_live_messages_scrolling: function () {
        /* Obsluga scrollera guzikow chatu - wl/wyl zaleznie od potrzeby  */
        // zliczamy szerokosci
        var total_width = 0;
        araSpeak.live_messages.find('.chatButton').each(function(){
            total_width += $(this).width();
        });
        // jesli szerokosciprzekraczaja limit pokazujemy guziki skrolowania (po klasie)
        if (total_width > 620) {
            araSpeak.live_messages_wrapper.addClass('active');
            araSpeak.live_messages.css('width', total_width+240+'px');
        } else {
            araSpeak.live_messages_wrapper.removeClass('active');
            araSpeak.live_messages.css('width', 'auto');
        }
    },
    
    setup_live_messages_scrolling_buttons: function () {
        araSpeak.live_messages_wrapper.find(".prev.scrollerButton").click(function(){
            var current_margin = parseInt(araSpeak.live_messages.css('left'));
            if (current_margin <= 0) {
                var new_margin = (current_margin - araSpeak.msg_slide_jump) + 'px';
                araSpeak.live_messages.animate({left: new_margin});
            }
        });
        araSpeak.live_messages_wrapper.find(".next.scrollerButton").click(function(){
            var current_margin = parseInt(araSpeak.live_messages.css('left'));
            if (current_margin < 0) {
                var new_margin = (current_margin + araSpeak.msg_slide_jump) + 'px';
                araSpeak.live_messages.animate({left: new_margin});
            }
        });
    }
};

/* do testow
$("#papa").click(function(){
    $('#liveMessages').append('<p class="chatButton"><a href="#">sdsdss</a><span class="close" onclick="$(this).parent().remove(); handle_live_messages_scrolling();"></span></p>');
    handle_live_messages_scrolling();
});
*/

