// dependencies: jQuery

(function() {
  // exit early if HelpMode defined already
  if ( typeof( HelpMode ) != "undefined" )
  {
    return;
  }

  window.HelpMode = {
    helpElSelector: "div[id^='help_']"
    , helpModeEnabled: false
    , helpPanelsLoaded: false
    , helpPanelEls: null
    , userURN: null
  };

  HelpMode.init = function()
  {
    this.getHelpPanelEls().css('display', 'none');
    
    if (constant.defined('HELPMODE_ENABLED'))
    {
      var helpModeSettings = JSON.parse(constant.value('HELPMODE_ENABLED'));
      HelpMode.setUserURN(helpModeSettings.userURN);
      if (helpModeSettings.helpModeEnabled == true)
      {
        HelpMode.enable();
      }
      else
      {
        HelpMode.disable();
      }
    }
    else
    {
      HelpMode.disable();
    }
  }

  HelpMode.setUserURN = function(urn)
  {
    this.userURN = urn;
  }

  HelpMode.getHelpPanelEls = function()
  {
    if(null == this.helpPanelEls)
    {
      this.helpPanelEls = $(this.helpElSelector);
    }

    return this.helpPanelEls;
  }

  HelpMode.disable = function()
  {
    this.getHelpPanelEls().css('display', 'none');
    this.helpModeEnabled = false;
    
    var HelpModeButton = document.getElementById( 'HelpModeButton' );
    
    if (HelpMode.helpPanelEls.length == 0 && typeof(HelpModeButton) != 'undefined' &&  HelpModeButton != null )
    {
        HelpModeButton.style.display = 'none';
    }
    else
    {
    if (typeof(HelpModeButton) != 'undefined' &&  HelpModeButton != null )
    {
      HelpModeButton.style.width = 'auto';
      HelpModeButton.style.visibility = 'visible';
      HelpModeButton.style.width = 'auto';
      HelpModeButton.setAttribute( 'title', 'Click here to show hints' );
      HelpModeButton.className = 'ui-button ui-button-text-only enabled';
      HelpModeButton.innerHTML = '<span class="ui-button-text">Show Hints</span>';
    }
    }
    
   }

  HelpMode.enable = function()
  {
    if(!this.helpPanelsLoaded)
    {
      this.loadPanels();
    }

    this.getHelpPanelEls().css('display', 'block');
    this.helpModeEnabled = true;
    
    var HelpModeButton = document.getElementById( 'HelpModeButton' );
    
    if (HelpMode.helpPanelEls.length == 0 && typeof(HelpModeButton) != 'undefined' &&  HelpModeButton != null  )
     {
       HelpModeButton.style.visibility = 'hidden';
       HelpModeButton.style.width = '1px';
    }
    else
    {  
      if (typeof(HelpModeButton) != 'undefined' &&  HelpModeButton != null)
      {
        HelpModeButton.style.width = 'auto';
        HelpModeButton.style.visibility = 'visible';
        HelpModeButton.setAttribute( 'title', 'Click here to hide hints' );
        HelpModeButton.innerHTML = '<span class="ui-button-text">Hide Hints</span>';
        HelpModeButton.className = 'ui-button ui-button-text-only enabled';
      }
    }
  }

  HelpMode.toggle = function()
  {
    if(this.helpModeEnabled)
    {
      this.disable();
      $.getJSON(
          "/fieldUpdater.html"
          , {
              urn: this.userURN
              , fieldName: "HELP_MODE"
              , fieldValue: "N"
            }
          , function (data) {
            }
        );
    }
    else
    {
      this.enable();
      $.getJSON(
          "/fieldUpdater.html"
          , {
              urn: this.userURN
              , fieldName: "HELP_MODE"
              , fieldValue: "Y"
            }
          , function (data) {
            }
        );
    }
  }

  HelpMode.setHelpPanelsLoaded = function(loaded)
  {
    this.helpPanelsLoaded = loaded;
  }

  HelpMode.loadPanels = function()
  {
    var helpElIds = [];
    var helpEls = [];

    this.getHelpPanelEls().each(function () {
      helpElIds.push(this.id);
      helpEls.push(this);
    });

    if(0 < helpElIds.length)
    {
      $.getJSON(
          "/help/getHelpPanels.html"
          , {ids: helpElIds.join(',')}
          , function(data) {
              $.each(data, function(i, item) {
                $(helpEls[i]).html(item);
              });
              $LAB.executeQueue();
              HelpMode.setHelpPanelsLoaded(true);
            }
        );
    }
  }

  HelpMode.init();
}());

