/*
 * LesMiserables menu
 * 
 * Copyright (c) 2008 Antistatique.net
 * 
 * Require: Jquery.Dimensions 1.2 plugin
 *
 * $Date:$
 * $Rev:$
 */
 
 jQuery(function($){
        
    if(!($.browser.msie && $.browser.version < 6))
    {
       // don't play menu on IE5.5
       $("#menu").removeClass('css_menu').addClass('js_menu');
       $("#menu ul.levelone").menuBottomUp({offsetY: -23});
    }
    else
    {
       // do specific stuff for IE < 6
       $("#menu ul.leveltwo li").show().filter('.current').hide();
    }
    
 });
 

(function($){
   
   $.fn.menuBottomUp = function(options) {
      // Settings par defaut
      var settings = $.extend({
         offsetX: 0,
         offsetY: 0,
         easing: 'easeOutBack',
         duration: 400,
         durationOut: 900
      }, options||{});
   
      return $(this).each(function() {
         
         // Calcul global de la taille d'un element de menu
         var itemHeight = $("li.submenu ul li:first", this).height();
                  
         $("li.submenu", this)
            
            /* positionne initialement tous les sous-menus au offsetY */
            .find('ul').css('position', 'absolute').css('top', settings.offsetY+'px').end()
            
            /* binding des événements souris pour le menu */
            .hover(function(event)
            {
               // Mise en queue pour éviter tous problème...
               $("ul:first", this).stop().queue(function(){
                  var nbItems    = $(this).children().size();
                  var height     = parseInt(itemHeight) * nbItems; 
                  var posY       = -height;
                  
                  $(this)
                     /* repositionnement du sous-menu pour apparaitre en dessus */
                     .css('top', 0)
                     /* reaffichage de tous les li du sous-menu */
                     .height(0).children().show().end()
                     /* ouverture du menu en animation */
                     .animate(
                        {
                           height: height,
                           top: posY
                        },
                        {
                           duration: settings.duration,
                           queue: false,
                           easing: settings.easing,
                           complete: function() {
                              $(this).dequeue();
                           }
                        })
               })
            },
            function(event)
            {
               $("ul:first", this).stop().queue(function(){
                  // Calcul de la hauteur (si il y a un element sélectionné dans le menu à animer pour l'afficher)
                  var nbItems    = $(this).children('.current').size();
                  var height     = parseInt(itemHeight) * nbItems; 
                  var top        = settings.offsetY; // on replace le menu à l'offsetY
                  
                  // start animation
                  $(this).animate(
                     {
                        height: 0,
                        top: 0
                     },
                     {
                        duration: 800,
                        queue: false,
                        complete: function() {
                           // Restore initial height and position
                           $(this).height(height);
                           $(this).css('top', top);
                           $(this).children().not('.current').hide();
                           $(this).dequeue();
                        }
                     });
               })
            })
      });
    }
   
})(jQuery);
