$(document).ready(function()
{
  // find elements we want to work with
  var a = $("#languageLink")
  var div = null;

  // the function to show and hide the language context menu
  var toggleMenu = function()
  {
    if(div == null)
    {
      var application = null;
      var type = null;
      var range = null;
      var rangeIndex = -1;
      var ippId = null;

      var item = findSelectedChild(page.menuRoot);
      if(item != null)
      {
        application = item.id;
        item = findSelectedChild(item);
      }
      if(item != null)
      {
        type = item.id;
        item = findSelectedChild(item);
      }
      if(item != null)
      {
        range = item.id;
        rangeIndex = item.index;
        ippId = item.ippId;
      }

      dwrService.getLanguages(page.dealerId, page.context, application, type, range, rangeIndex, ippId, DWRResultProcessor.processDWRResult)
    }
    else
    {
      div.slideUp(page.speed);
      div = null;
    }
    return false;
  }

  // map link href to javascript function
  a.click(toggleMenu);

  // register a result function to process the language updae bean
  var processLanguageUpdateBean = function(languageUpdateBean)
  {
    div = $("<div id=\"languageDiv\" class=\"metamenu\"/>");
    div.css("display", "none");
    var languages = languageUpdateBean.languages;
    for(var i = 0; i < languages.length; i++)
    {
      var language = languages[i];
      var a = $("<a/>");
      a.attr("href", language.href);
      a.text(language.label);
      div.append(a);
    }
    $("div.metanavigation_container").append(div);
    div.slideDown(page.speed);
  };

  // function get selected child of a menu item
  var findSelectedChild = function(menuItem)
  {
    var selectedItem = null;
    for(var i = 0; selectedItem == null && i < menuItem.children.length; i++)
    {
      if(menuItem.children[i].selected)
      {
        selectedItem = menuItem.children[i];
      }
    }
    return selectedItem
  }

  DWRResultProcessor.registerResultFunction("languageUpdateBean", processLanguageUpdateBean);
});

