jQuery(document).ready(function(){

// задаем размер порции, кол-во открытых пунктов
var	showMoreParams = {items: 3};

// при старте проверяем открытые вкладки
checkStatus(jQuery('.openedMI'));

// обработчик при клике на вкладку
jQuery('.switcher').click(function(){

	if (jQuery(this).hasClass('openedMI')) 
	{
		jQuery(this).removeClass('openedMI');
		jQuery(this).next().slideUp(200);
		jQuery(this).next().find('li > span').parent().css('display', 'block');
	}
		else
		{
			jQuery(this).parent().find('.showMore').css('display','block');
			jQuery(this).parent().find('.showAll').css('display','block');
			jQuery(this).addClass('openedMI');
			jQuery(this).next().slideDown(200);
		};

checkStatus (jQuery(this));
	});


// обработчик при клике на "показать еще"
jQuery('.showMore').click(function(){
var moreItems = jQuery(this).parents().eq(1).find('li'), i = j = 0;

for (i=0; i<moreItems.length; i++)
	{
		if (jQuery(moreItems[i]).css('display') == 'none')
		{
			while (j<showMoreParams.items)
			{
				jQuery(moreItems[i+j]).slideDown(200);
				j++;
				if ((i+j) == (moreItems.length-1)) 
				{
					jQuery(this).parent().css('display','none');
					return false;
				}
			};
		};
	};
	
	});

// обработчик при клике на "показать все"
jQuery('.showAll').click(function(){
var moreItems = jQuery(this).parents().eq(1).find('li'), i = 0;
for (i=0; i<moreItems.length; i++)
	{
				jQuery(moreItems[i]).slideDown(200);
				if (i ==(moreItems.length-1)) 
				{
					jQuery(this).parent().css('display','none');
				}
	};

	});


// проверка открытых вкладок, закрытие лишних
// в качестве параметра должна получить объект span.switcher

function checkStatus(obj){
var	openedBlock = obj, i,

	itemsCount = obj.next().find('li').length -1;

	if (itemsCount <= showMoreParams.items)
	{
		obj.parent().find('.showMore').parent().css('display','none');
	};
	
	if (openedBlock.next().css('display') == 'none') openedBlock.next().css('display','block');
	
	for (i=0; i<itemsCount; i++)
	{
		if (i<showMoreParams.items) openedBlock.next().find('li').eq(i).css('display','block')
			else openedBlock.next().find('li').eq(i).css('display','none');
		if (i == itemsCount) openedBlock.next().find('li').eq(i).css('display','none');
	};
};

});
