$.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('#list2 > div', '#item22', {
		titles:'.mytitle',
		contents:'.mycontent',
		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
	});

});