text: /* global APP, config, $, interfaceConfig, Moderator,
   DesktopStreaming.showDesktopSharingButton */
  
  var toolbarTimeoutObject,
      toolbarTimeout = interfaceConfig.INITIAL_TOOLBAR_TIMEOUT,
      UIUtil = require("../util/UIUtil");
  
  function showDesktopSharingButton() {
      if (APP.desktopsharing.isDesktopSharingEnabled() &&
          UIUtil.isButtonEnabled('desktop')) {
          $('#toolbar_button_desktopsharing').css({display: "inline-block"});
      } else {
          $('#toolbar_button_desktopsharing').css({display: "none"});
      }
  }
  
  /**
   * Hides the toolbar.
   */
  function hideToolbar() {
      if(config.alwaysVisibleToolbar)
          return;
  
      var header = $("#header"),
          bottomToolbar = $("#bottomToolbar");
      var isToolbarHover = false;
      header.find('*').each(function () {
          var id = $(this).attr('id');
          if ($("#" + id + ":hover").length > 0) {
              isToolbarHover = true;
          }
      });
      if ($("#bottomToolbar:hover").length > 0) {
          isToolbarHover = true;
      }
  
      clearTimeout(toolbarTimeoutObject);
      toolbarTimeoutObject = null;
  
      if (!isToolbarHover) {
          header.hide("slide", { direction: "up", duration: 300});
          $('#subject').animate({top: "-=40"}, 300);
          if ($("#remoteVideos").hasClass("hidden")) {
              bottomToolbar.hide(
                  "slide", {direction: "right", duration: 300});
          }
      }
      else {
          toolbarTimeoutObject = setTimeout(hideToolbar, toolbarTimeout);
      }
  }
  
  var ToolbarToggler = {
      /**
       * Shows the main toolbar.
       */
      showToolbar: function () {
          if (interfaceConfig.filmStripOnly)
              return;
          var header = $("#header"),
              bottomToolbar = $("#bottomToolbar");
          if (!header.is(':visible') || !bottomToolbar.is(":visible")) {
              header.show("slide", { direction: "up", duration: 300});
              $('#subject').animate({top: "+=40"}, 300);
              if (!bottomToolbar.is(":visible")) {
                  bottomToolbar.show(
                      "slide", {direction: "right", duration: 300});
              }
  
              if (toolbarTimeoutObject) {
                  clearTimeout(toolbarTimeoutObject);
                  toolbarTimeoutObject = null;
              }
              toolbarTimeoutObject = setTimeout(hideToolbar, toolbarTimeout);
              toolbarTimeout = interfaceConfig.TOOLBAR_TIMEOUT;
          }
  
          if (APP.xmpp.isModerator())
          {
  //            TODO: Enable settings functionality.
  //                  Need to uncomment the settings button in index.html.
  //            $('#settingsButton').css({visibility:"visible"});
          }
  
          // Show/hide desktop sharing button
          showDesktopSharingButton();
      },
  
      /**
       * Docks/undocks the toolbar.
       *
       * @param isDock indicates what operation to perform
       */
      dockToolbar: function (isDock) {
          if (interfaceConfig.filmStripOnly)
              return;
  
          if (isDock) {
              // First make sure the toolbar is shown.
              if (!$('#header').is(':visible')) {
                  this.showToolbar();
              }
  
              // Then clear the time out, to dock the toolbar.
              if (toolbarTimeoutObject) {
                  clearTimeout(toolbarTimeoutObject);
                  toolbarTimeoutObject = null;
              }
          }
          else {
              if (!$('#header').is(':visible')) {
                  this.showToolbar();
              }
              else {
                  toolbarTimeoutObject = setTimeout(hideToolbar, toolbarTimeout);
              }
          }
      },
  
      showDesktopSharingButton: showDesktopSharingButton
  };
  
  module.exports = ToolbarToggler;