/**
 * Dynamiczne menu
 * @author Andrzej Kupczyk
 */

;(function($){

  $.menu = {
    behavior: 1,

    // inicjuje
    init: function(behavior){
      // nadpisz domyslne zachowanie menu
      if (behavior) $.menu.behavior = behavior;
      // w zaleznosci od zachowania menu
      switch ($.menu.behavior){
        // rozwijaj dynamicznie gdy kategoria nie zawiera produktow
        case 1:
          $.menu.showSubcategories(0);
          $.menu.bindBehavior();
          break;
        // rozwijaj do ostatniego poziomu
        case 2:
          $.menu.showSubcategories(0);
          $.menu.bindBehavior();
          break;
        // pierwszy poziom menu rozwiniety
        case 3:
          $.menu.showSubcategories(1);
          $.menu.bindBehavior();
          break;
        // wszystkie poziomy rozwinięte
        case 4:
          $.menu.showSubcategories(20);
          break;
        // rozwijaj wszystkie podkategorie
        case 5:
          $.menu.showSubcategories(0);
          $.menu.bindBehavior("$('ul',categoriesGroup).show()");
          break;
      }
      // dodaj klase css wszystkim rozwinietym kategoriom
      $('ul.categories:visible').prev().addClass('expanded');
    },
  
    // ukrywa podkategorie od okreslonego poziomu w dol
    // rozwija jedynie obecnie wybrana kategorie oraz jej rodzicow i dziecko
    showSubcategories: function(level){
      for (var lev = 1; lev<=level; lev++) {
        $('ul.level-'+lev).show();
      }
      $('li.current, a.current').parents('ul').show();
      $('li.current > ul').show();
    },
    
    // binduje wybor kategorii
    bindBehavior: function(behavior){
      $('li.category a').click(function(){
        var li = $(this).parent(),
            categoriesGroup = $(this).next('ul.categories');

        // jesli kategoria nie zawiera produktow i ma jakies podkategorie
        if (($.menu.behavior==2 || $.menu.behavior == 5 || $(li).hasClass('empty')) && categoriesGroup.length){
          if (behavior){
            if ($.isFunction(behavior))
              behavior.call();
            else
              eval(behavior);
          }
          $(categoriesGroup).slideToggle('fast').prev().toggleClass('expanded');
          return false;
        }
        return true;
      });
    }
  };
})(jQuery);

