﻿/*!
* Widget with items that bounce up/down on hovering, and periodically on their own.
*
* Copyright 2010, David Gill
* http://gilldave.co.uk
*/

function bouncyHoverBar(params) {
    if (!('raiseBy'         in params)) { params.raiseBy = 10;          }
    if (!('lowerBy'         in params)) { params.lowerBy = 4;           }
    if (!('raiseDuration'   in params)) { params.raiseDuration = 500;   }
    if (!('fallDuration'    in params)) { params.fallDuration = 500;    }
    if (!('reboundDuration' in params)) { params.reboundDuration = 400; }
    if (!('itemWaveDelay'   in params)) { params.itemWaveDelay = 100;   }
    if (!('waveInterval'    in params)) { params.waveInterval = 60000;  }

    var hoverItem = $(params.hoverItemsSelection);

    function raise(what) {
        what.animate({ top: -params.raiseBy + 'px', paddingBottom: params.raiseBy + 'px' }, params.raiseDuration);
    }

    function sink(what) {
        what.animate({ top: params.lowerBy + 'px', paddingBottom: '0px' }, params.fallDuration, function () {
            what.animate({ top: '0px' }, params.reboundDuration);
        });
    }

    function wave() {
        hoverItem.each(function (idx) {
            $(this).delay(params.itemWaveDelay * idx);
            raise($(this));
            sink($(this));
        });
    }

    function startWaveTimer() { return setInterval(wave, params.waveInterval); }
    var waveTimer = startWaveTimer();

    hoverItem.hover(function () {
        raise($(this).stop(true));
        clearInterval(waveTimer);
    },
    function () {
        sink($(this));
        waveTimer = startWaveTimer();
    });
}
