$(document).ready(function() {
   $('#submenu ul li.parent h3, #submenu ul li.menuparent h3, #submenu ul li.menuparent a.menuparent, #submenu ul li.parent a.parent').click(function () {
      // if we're not selecting an open element...
      if($(this).parent().attr('class').indexOf('open') < 0 || $(this).parent().find('ul:first').css('display') != 'block') {
         // show children
         $(this).parent().find('ul:first').slideDown('fast');
         // search for all elements of class openparent -> change class to open
         $('#submenu ul li.openparent').each(function(i,elm) {
            $(elm).removeClass('openparent');
            $(elm).addClass('open');
         });
         // search for parents of class open -> change class to openparent
         $(this).parent().parents('li').each(function(i,elm) {
            $(elm).removeClass('open');
            $(elm).addClass('openparent');
         });
         // search for elements of class open -> hide children -> change class to closed
         $('#submenu ul li.open').each(function(i,elm) {
            $(elm).find('ul:first').slideUp('fast');
            $(elm).removeClass('open');
            $(elm).addClass('closed');
         });
         // change class to open
         $(this).parent().removeClass('openparent');
         $(this).parent().removeClass('closed');
         $(this).parent().addClass('open');
      }
      else {
         // if we're selecting an open element -> just close it an change class to closed
         $(this).parent().find('ul:first').slideUp('fast');
         $(this).parent().removeClass('open');
         $(this).parent().removeClass('openparent');
         $(this).parent().addClass('closed');
      }
      return false;
   });
});

