jQuery.fn.accordion = function(options) {
  var SLIDE_DOWN_SPEED = 'fast';
  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() {
    var object_id = this.id;
    jQuery(this).find('li ul').hide(); //в случае, если это не сделано в css

    jQuery('#' + object_id + ' > li em').click(function() {
        var current = jQuery(this.parentNode.parentNode).find('ul:visible');
        var next = jQuery(this.parentNode).find('ul');
        if(!next[0]) // !next[0] || next[0] == current[0] если не нужно сворачивать текущее меню
          return;

        if (current[0] != next[0]) {
            current.slideUp(SLIDE_UP_SPEED);
            current.parent('li').removeClass('current');
        }
        if (next.is(':visible')) {
            next.slideUp(SLIDE_UP_SPEED);
            jQuery(this.parentNode).removeClass('current');
        } else {
            next.slideDown(SLIDE_DOWN_SPEED);
            jQuery(this.parentNode).addClass('current');
        }
    });

    if (!startClosed) {
        var elem = jQuery(this).find("li.current ul");
        if(elem.get())
        {
          elem.show();
        }
        else
        {
          jQuery(this).find('li:first').addClass('current');
          jQuery(this).find('li:first ul').show();
        }
    }
  });
};

function initCurrentMenu(menu)
{
  var url = window.location.toString();
  var max = 0;
  var link = null;
  jQuery(menu + " > li > a").each(function()
  {
    if(url.indexOf(this.href) >= 0 && this.href.length > max)//finding the longest href
    {
      link = this;
      max = this.href.length;
    }
  });

  if(link)
  {
    jQuery(link).parent().attr('class', 'current');
    jQuery(link).parent().find('ul').show();
  }
}

jQuery(document).ready(function(){
  initCurrentMenu('#main_menu');//navigation current item highlight

  jQuery('#main_menu').accordion();
});