/**
 * Plugin pro photostream
 *
 * @author Miroslav Machalek <miroslav.machalek@bluepixel.cz>
 * @version 1.0
 */

(function($) {
    $.fn.photostream = function (userOptions) {
        // nastaveni, jenz jsou spolecna pro vsechny photostreamy volanem selektoru
        var options = $.extend({}, $.fn.photostream.defaults, userOptions);

        // overeni spravnosti zadani smeru pohybu
        if (!$.inArray(options.direction, ["rtl", "ltr"])) {
            options.direction = "rtl";
        }

        // overeni spravnosti zadani rychlosti
        if (!parseInt(options.speed)) {
            options.speed = 100;
        }

        return this.each(function() {
            var __ = $(this); // hlavni blok photostreamu
            __.data("timer", null); // timer posuvu photostreamu
            var bound_number = $(options.item, __).length; // hranicni pocet prvku photostreamu, pokud pocet prvku klesne
                                                           // pod tento pocet, je vyvolan small_number_handler

            // pridani tridy bloku photostreamu
            __.addClass(options.prefix + "wrapper");

            // kazdemu prvku photostreamu nastavime pozici
            $(options.item, __).each(function () {
                $(this)
                    .css({
                        left : $(this).offset().left - $(this).parent().offset().left
                    });
            }).addClass(options.prefix + "item")
            .live("mouseenter", function (event) {
                clearTimeout(__.data("timer"));

                if ($.isFunction(options.item_over_handler)) {
                    options.item_over_handler(this, event);
                }
            })
            .live("mouseleave", function () {
                setTimer();

                if ($.isFunction(options.item_out_handler)) {
                    options.item_out_handler(this);
                }
            });

            // spustime photostream
            movePhotostream();

            // posouva photostream
            function movePhotostream() {
                // posun photostreamu
                $(options.item, __).each(function () {
                    $(this).css({
                        left : parseInt($(this).css("left")) + (1 * ((options.direction == "rtl") ? -1 : 1))
                    });

                    if (parseInt($(this).css("left")) * -1 >= $(this).width()) {
                        $(this).remove();
                    }
                });

                // zavolani handleru obsluhujiciho pokles poctu prvku photostreamu
                if ($(options.item, __).length <= bound_number && $.isFunction(options.small_number_handler)) {
                    options.small_number_handler();
                }

                // zavolame dalsi posun
                setTimer();
            }

            // nastaveni timeru
            function setTimer() {
                __.data("timer",
                    setTimeout(
                        function () {
                            movePhotostream();
                        },
                        options.speed
                    ));
            }
        });
    }

    // nastaveni, ktera lze menit
    $.fn.photostream.defaults = {
        prefix    : "photostream-",  // prefix trid
        item      : "img",           // polozka photostreamu
        direction : "rtl",           // smer pohybu
        speed     : 50,              // rychlost pohybu

        small_number_handler : null, // handler pro obsluhu maleho poctu zobrazenych obrazku photostreamu
        item_over_handler    : null, // handler pro oblushu najeti mysi nad prvek photostreamu
        item_out_handler     : null  // handler pro oblushu najeti mysi mimo prvek photostreamu
    };
})(jQuery);

