// dependencies: jQuery

var 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 = 'enabled';
		HelpModeButton.innerHTML = 'Show Hints';
	}
  }
	
 }

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 = 'Hide Hints';
		  HelpModeButton.className = '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);
            });
            HelpMode.setHelpPanelsLoaded(true);
          }
      );
  }
}

$(document).ready(function () {
  HelpMode.init();
});