/*!
 * Front script
 */
jQuery.noConflict();
(function($) {

  // Run when DOM is ready
  $(document).ready(function() {
    initDropDownMenu();
    initVisuHome();
  });
  
  // Create global "LDE" namespace if needed
  if (typeof window.LDE == "undefined") {
    window.LDE = {};
  }
  
  // Export public objects to "LDE" namespace
  LDE.initDropDownMenu = initDropDownMenu;

  // Init drop down menu
  function initDropDownMenu() {
    var
      $root     = $("#menu ul.level-1"),
      $menus    = $("ul",$root),
      $items    = $("li",$root),
      $links    = $("a",$root),
      $nodes    = $items.filter(":has(ul)").addClass("node"), // Add class to nodes
      timeout   = null;

    function onMouseOverMenuItem(){
      window.clearTimeout(timeout);

      var $currentItem = $(this), $currentMenu = $currentItem.children("ul");

      // Reset hover class
      $items.add($links).removeClass("hover");
      $currentItem.add($currentItem.parents("li")).children("a").andSelf().addClass("hover");

      // Reset menus visibility
      $menus.not($currentMenu).not($currentItem.parents("ul")).hide();
      $currentMenu.show();
    }

    function onMouseOutMenuItem() {
      window.clearTimeout(timeout);

      // Set timeout which should be cleared by roll-over events on the menu
      // -> If timeout was not cleared, it means that user's mouse has gone out of a menu and is not over another
      timeout = window.setTimeout(closeAllMenus, 500);
    }

    function closeAllMenus() {
      $menus.hide();
      $items.add($links).removeClass("hover");
    }

    // Close all menus when user clicks anywhere on the page
    $(document).click(closeAllMenus);

    // Setup "roll-over" events on menu items
    $items.hover(onMouseOverMenuItem, onMouseOutMenuItem);

  }
	
  /*
   * Init home animated illustrations
   */
  var visuTimeout, visuDuration = 6000, visuFirstDuration = 3000;
  function initVisuHome() {
    // Exit if #visu-home is not in the current page
    if ($("#visu-home").length == 0) return;
		
    $("#visu-home .visu-tab")
    .hover(function(){
      $(this).toggleClass("hover");
    })
    .click(function(){
      displayVisuHome($("#visu-" + this.id.split("-")[2]));
    });
		
    visuTimeout = window.setTimeout(function() {
      displayVisuHome($("#visu-02"));
    }, visuFirstDuration);
  }

  /*
   * Make given element visble with a transition animation
   * It also make disappear all its sibblings
   * @element should match "#visu-home .visu" selector
   */
  function displayVisuHome(element) {
    var
    $element 		= $(element),
    $text				= $(".text", $element),
    $current 		= $("#visu-home .visu.current"),
    $animated		= $("#visu-home .visu.animated");
		
    // Exit if element is already the current visu element
    // or if an element is already animated
    if ($element.hasClass("current") || $animated.length) return;
		
    // Switch tab status
    $("#visu-home-tabs")
    .removeClass($current.attr("id"))
    .addClass($element.attr("id"))
    .find(".current").removeClass("current");
			
    $("#visu-tab-" + $element.attr("id").split("-")[1]).addClass("current");
		
    // Animate visu element
    var width = $text.width() + 50, left = $text.position().left;
    $text.hide();
		
    $element
    .hide()
    .addClass("animated")
    .fadeIn("fast", function(){
      $current.removeClass("current");
      $text
      .css("left", left + width + "px")
      .show()
      .animate({
        "left": "-=" + width
      },{
        duration: "slow",
        easing: "easeOutBack",
        complete: function(){
          $element.addClass("current").removeClass("animated");
          if (visuTimeout) window.clearTimeout(visuTimeout);
          var $next = $element.is(":last-child") ? $("#visu-01") : $element.next(".visu");
          visuTimeout = window.setTimeout(function() {
            displayVisuHome($next);
          }, visuDuration);
        }
      });
    });
		
		
  }
	
  
})(jQuery);
