$.accordian = function(items, first, options) {

var active = first;
var running = 0;

var titles = options && options.titles || '.title';
var contents = options && options.contents || '.content';
var onClick = options && options.onClick || function(){};
var onShow = options && options.onShow || function(){};
var onHide = options && options.onHide || function(){};
var showSpeed = options && options.showSpeed || 'slow';
var hideSpeed = options && options.hideSpeed || 'fast';

$(items).not(active).children(contents).hide();
$(items).not(active).each(onHide);
$(active).each(onShow);

$(items).children(titles).click(function(e){

var p = $(contents, this.parentNode);
$(this.parentNode).each(onClick);

if (running || !p.is(":hidden")) return false;
running = 2;

$(active).children(contents).not(':hidden').slideUp(hideSpeed, function(){--running;});
p.slideDown(showSpeed, function(){--running;});

$(active).each(onHide);
active = '#' + $(this.parentNode)[0].id;
$(active).each(onShow);

return false;
});

};

function simpleLog(message) {
$('<div>' + message + '</div>').appendTo('#log');
}

$(function(){

$.accordian('#list1 > div', '#item11');

$.accordian('#the-steps > div', '#step-1', {
titles:'.heading',
contents:'.step',
onClick:function(){simpleLog(this.id + ' clicked')},
onShow:function(){simpleLog(this.id + ' shown'); $(this).removeClass('off').addClass('on');},
onHide:function(){simpleLog(this.id + ' hidden'); $(this).removeClass('on').addClass('off');},
showSpeed:250,
hideSpeed:550
});

});