jQuery effects & animation

HTML

<div>
     <h2>Visibility</h2>

    <div class="target">Now you see me</div>
    <button class="show">Show</button>
    <button class="hide">Hide</button>
</div>
<div>
     <h2>Visibility - Speed</h2>

    <div class="target">Now you see me</div>
    <button class="show slow">Show slow</button>
    <button class="hide fast">Hide fast</button>
</div>
<div>
     <h2>Visibility - Toggle</h2>

    <div class="target">Now you see me</div>
    <button class="toggle">Toggle visibility</button>
    <button class="toggle fast">Toggle visibility fast</button>
    <button class="toggle slow">Toggle visibility slow</button>
</div>
<div>
     <h2>Fade</h2>

    <div class="target">Now you see me</div>
    <button class="show fade">Show</button>
    <button class="hide fade">Hide</button>
</div>
<div>
     <h2>Fade - Speed</h2>

    <div class="target">Now you see me</div>
    <button class="show fade slow">Show slow</button>
    <button class="hide fade fast">Hide fast</button>
</div>
<div>
     <h2>Fade - Toggle</h2>

    <div class="target">Now you see me</div>
    <button class="toggle fade">Toggle fade</button>
    <button class="toggle fade slow">Toggle fade slow</button>
    <button class="toggle fade fast">Toggle fade fast</button>
</div>
<div>
     <h2>Slide</h2>

    <div class="target">Now you see me</div>
    <button class="show slide">Show</button>
    <button class="hide slide">Hide</button>
</div>
<div>
     <h2>Slide - Speed</h2>

    <div class="target">Now you see me</div>
    <button class="show slide slow">Show slow</button>
    <button class="hide slide fast">Hide fast</button>
</div>
<div>
     <h2>Slide - Toggle</h2>

    <div class="target">Now you see me</div>
    <button class="toggle slide">Toggle slide</button>
    <button class="toggle slide slow">Toggle slide slow</button>
    <button class="toggle slide fast">Toggle slide fast</button>
</div>
<div>
     <h2>Animation</h2>

    <button class="animate pulsate">Pulsate start</button>
    <button...

CSS

div.target {
    border: 1px dotted red;
    padding: 10px;
}
button {
    margin-top: 2em;
}
button.animate {
    margin: 0 0 2em;
}

JavaScript

$(function () {

    var getSpeed = function ($el) {
        return $el.hasClass('slow') ? 'slow' : ($el.hasClass('fast') ? 'fast' : null);
    };

    var getEffect = function ($el) {
        return $el.hasClass('fade') ? 'fade' : ($el.hasClass('slide') ? 'slide' : null);
    };

    var pulsate = function ($el, to, from, duration) {
        $el.animate(to, duration, function () {
            pulsate($el, from, to, duration)
        });
    };

    $('button.show').click(function () {

        var $this = $(this),
            $target = $this.siblings('.target'),
            speed = getSpeed($this),
            effect = getEffect($this);

        switch (effect) {
            case 'fade':
                $target.fadeIn(speed);
                break;
            case 'slide':
                $target.slideDown(speed);
                break;
            default:
                $target.show(speed);
                break;
        }

    });

    $('button.hide').click(function () {

        var $this = $(this),
            $target = $this.siblings('.target'),
            speed = getSpeed($this),
            effect = getEffect($this);

        switch (effect) {
            case 'fade':
                $target.fadeOut(speed);
                break;
            case 'slide':
                $target.slideUp(speed);
                break;
            default:
                $target.hide(speed);
                break;
        }

    });

    $('button.toggle').click(function () {

        var $this = $(this),
            $target = $this.siblings('.target'),
            speed = getSpeed($this),
            effect = getEffect($this)
            delay = $this.hasClass('delay'),
            fn = effect ? effect + 'Toggle' : 'toggle';

        switch (effect) {
            case 'fade':
                $target.fadeToggle(speed);
                break;
            case 'slide':
                $target.fadeToggle(speed);
                break;
            default:
               ...