(function($) {

    $.fn.squirrel = function(options) {
        var opts = $.extend({}, $.fn.squirrel.defaults, options);

        return this.each(function() {
            var $this = $(this);
            var hidden = true;
            var autoHide = null;

            $(this).mouseover(function() {
                if (hidden) {
                    hidden = false;
                    peek($this, opts.peekDistance, opts.speed);
                }

                if (autoHide != null) {
                    window.clearTimeout(autoHide);
                }
            });

            $(this).mouseout(function() {
                if (!hidden) {
                    hidden = true;
                    peek($this, -opts.peekDistance, opts.speed);
                }
            });

            window.setTimeout(function() {
                hidden = false;
                peek($this, opts.peekDistance, opts.speed);
                autoHide = window.setTimeout(function() {
                    hidden = true;
                    peek($this, -opts.peekDistance, opts.speed);
                }, opts.peekReturnDelay);
            }, opts.peekDelay);

        });
    };

    function peek(element, dist, speed) {
        return $(element).animate({ right: '+=' + dist }, speed, 'easeInOutCubic');
    }

    $.fn.squirrel.defaults = {
        peekDistance: 350,
        peekDelay: 2000,
        peekReturnDelay: 2000,
        speed: 200
    };

})(jQuery);