Autofotos = {
    $: $('.modulo-autofotos'),
    $pie: $('<p class="pie-foto"></p>'),

    /**
     * Constructor
     */
    init: function() {
        Autofotos.$carrusel = Autofotos.$.children('.carrusel');
        Autofotos.$control = Autofotos.$.find('.controles-foto').find('a');
        // Inicializa el carrusel. Necesitamos un callback para sacar el objeto carousel para jugar ;)
        Autofotos.$carrusel.children('ul').jcarousel({
            scroll:2,
            initCallback: function(carousel) {
                Autofotos.carousel = carousel;
            }
        });

        Autofotos.$carrusel.find('img').each(function() {

            (new Image).src = $(this).attr('src').replace(/width=[0-9]+/,'width=272').replace(/height=[0-9]+/, 'height=160');
        });

        Autofotos.$foto     = Autofotos.$.children('.foto');
        Autofotos.$carrusel.after(Autofotos.$pie);

        Autofotos.$control.click(Autofotos.control_click_cb);

        Autofotos.$carrusel
            .find('a').each(function() {
                this.$img = $(this).children('img');
            })
            .click(Autofotos.foto_click_cb)
            .eq(0)
            .trigger('click');


        Autofotos.play();
    },

    play: function() {
        Autofotos.timer = setInterval('Autofotos.next_foto()', 5000);
        Autofotos.$control.attr('class', 'btn-pause');
    },
    pause: function() {
        clearInterval(Autofotos.timer);
        Autofotos.$control.attr('class', 'btn-play');
    },
    next_foto: function() {
        var f = Autofotos.$carrusel.find('.marcado').next();
        if (f.length) {
            f.children('a').trigger('click', true);
        }
        else {
            f = Autofotos.$carrusel.find('a:eq(0)').trigger('click', true);
        }
    },
    /**
     * Callback para el click de las miniaturas del carrusel
     */
    foto_click_cb: function(e, nopause) {
        e.preventDefault();
        var $li = $(this).parent();

        if (nopause == true) {
            Autofotos.move_carousel.call($li);
        }
        else {
            Autofotos.pause();
        }

        if ($li.hasClass('marcado')) {
            return;
        }

        Autofotos.$carrusel.find('.marcado').removeClass('marcado');
        $li.addClass('marcado');

        var $grande = Autofotos.$foto.children('a');

        $grande.attr('href', this.href);

        var newsrc = this.$img.attr('src').replace(/width=[0-9]+/,'width=272').replace(/height=[0-9]+/, 'height=160');
        $grande.children('img').hide();
        $grande.children('img')
                .attr('src', newsrc)
                .css({ width: 'auto', height: 'auto'})
                .fadeIn('fast');

        Autofotos.$pie.html(this.$img.attr('alt'));
    },

    /**
     * Callback para el click de los controles
     */
    control_click_cb: function(e) {
        e.preventDefault();

        switch (this.className) {
            case 'btn-play':
                Autofotos.play();
                this.className = 'btn-pause';
                break;
            case 'btn-pause':
                Autofotos.pause();
                this.className = 'btn-play';
                break;
        }
    },

    /**
     * Mueve el carrusel cuando el item marcado se sale del area visible
     */
    move_carousel: function() {
        var c = this.position().left + this.parent().position().left;

        if (c >= 240) { // TODO: Hacer algo mas de ingeniería para comprobar el visible...
            Autofotos.$carrusel.find('.jcarousel-next').trigger('click');
        } else if (c < 0) {
            Autofotos.carousel.scroll(1);
        }
    }
};
