(function ($) {
    $.fn.lavaLamp = function (o) {
        o = $.extend({
            fx: "linear",
            speed: 500,
            click: function () {}
        }, o || {});
        return this.each(function () {
            var b = $(this),
                noop = function () {},
                $back = $('<li class="back"><div class="left"></div></li>').appendTo(b),
                $li = $("li", this),
                curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];
            $li.not(".back").hover(function () {
                move(this)
            }, noop);
            $(this).hover(noop, function () {
				
                move(curr)
            });
            $li.click(function (e) {
                setCurr(this);
                return o.click.apply(this, [e, this])
            });
            setCurr(curr);

            function setCurr(a) {				
                $back.css({
                    "left": a.offsetLeft + "px",
                    "width": a.offsetWidth + "px"
                });
				
				$(a).find('a').addClass('current');
                curr = a
            };

            function move(a) {
                $back.each(function () {
                    $.dequeue(this, "fx")
                }).animate({
                    width: a.offsetWidth,
                    left: a.offsetLeft
                }, o.speed, o.fx)
				$(b).find('a').each(function() {
					$(this).removeClass('current');
				});
				$(a).find('a').addClass('current');
            }
        })
    }
})(jQuery);
