(function($) {
    var map = {};
    var active = null;
    var intv = null;
    var options;
    var defaults = {
        timeout: 6000,
        desc: ''
    };


    // Arguments are image paths relative to the current page.
    $.fn.roullete = function(params) {
        setOptions(params);
        map = jQuery.parseJSON(options.data);
        bindClicks($(this));
        $('#' + options.menu + ' a').first().trigger("click");
        intv = setTimeout(function() {
            clickNext();
        }, options.timeout);
        return this;
    }

    function setOptions(new_options) {
        options = $.extend({}, defaults, options, new_options);
    }

    function bindClicks(cont) {
        $(cont).find('a').click(function(event) {
            clearTimeout(intv);
            intv = setTimeout(function() {
                clickNext();
            }, options.timeout);
            event.preventDefault();
            click($(this));
        });
    }

    function clickNext() {
        //var next = (active + 1) % map.length;
         var next = (parseInt(active) < (map.length -1)) ? parseInt(active) +1 : 0;
        $('#' + options.menu + ' a').eq(next).trigger("click");
    }

    function click(el) {

        var h = $(el).context.hash.split('#')[1];
        if (map[h] !== undefined) {
            active = h;
            var d = $('#' + options.desc)
            var i = $('#' + options.img)
            if (d) {
                d.text(map[h].desc);
            }
            if (i) {
                // i.css('background-image', 'url("'+ map[h].image +'")');
                $('#bg_img1').show();
                $('#bg_img2').show();
                $("#bg_img1").css('display', 'block');
                $("#bg_img2").css('display', 'block');
                $("#bg_img1").attr("src", map[h].image);
                $('#bg_img2').fadeOut('2000', function() {
                    $("#bg_img2").attr("src", $("#bg_img1").attr("src"));
                });
            }

            $('#' + options.menu + ' li').removeClass('active');
            $(el).parent().addClass('active');
        }
    }
})(jQuery)
