$.fn.accordion = function(options) {
    // options
    var SLIDE_DOWN_SPEED = 'slow';
    var SLIDE_UP_SPEED = 'fast';
    var startClosed = options && options.start && options.start == 'closed';
    var on = options && options.on && (typeof options.on == 'number' && options.on > 0) ? options.on - 1 : 0;
    return this.each(function() {
        $(this).find('dd').hide();
        $(this).find('dt').css({cursor: 'pointer'}).click(function() {
            $(this.parentNode).find('dd:visible').slideUp(SLIDE_UP_SPEED);
            var next = $(this).find('+dd');
            if (next.is(':visible')) {
                next.slideUp(SLIDE_UP_SPEED, function() {
                    next.css({height: 'auto'}); // needed in jQuery 1.0 to make slideDown work in any case
                });
            } else {
                next.slideDown(SLIDE_DOWN_SPEED);
            }
        });
        if (!startClosed) {
            $(this).find('dd:eq(' + on + ')').slideDown(SLIDE_DOWN_SPEED);
        }
    });
};
