// ActionMenu class
// Used for displaying drop down menu options

// Variables
ActionMenu.activeId = null;
ActionMenu.activeDiv = null;
ActionMenu.activeClass = null;
ActionMenu.activeText = null;
ActionMenu.menuOpen = false;

ActionMenu.menuWidth = "200px";
ActionMenu.menuHeight = "200px";

ActionMenu.menuDiv = document.createElement("div");
ActionMenu.menuDiv.setAttribute("id", "actionMenu");
ActionMenu.menuDiv.style.width = ActionMenu.menuWidth;
ActionMenu.menuDiv.style.height = ActionMenu.menuHeight;

// Constructor
function ActionMenu() {

}

// Static method to close the action menu
ActionMenu.closeNew = function() {
  try {
    ActionMenu.menuDiv.style.display = 'none';

    ActionMenu.activeDiv.innerHTML = ActionMenu.activeText;
    ActionMenu.activeDiv.className = ActionMenu.activeClass;

    ActionMenu.activeDiv = null;
    ActionMenu.activeId = null;

  } catch(e) { }
}


// Static method to close the action menu
ActionMenu.close = function() {
  try {
    var divId = "actions" + ActionMenu.activeId;
    $(divId).innerHTML = ActionMenu.activeText;
    $setCls(divId, ActionMenu.activeClass);
    ActionMenu.menuDiv.style.display = 'none';
    ActionMenu.activeId = null;
  } catch(e) { }
}

ActionMenu.open = function(vars) {
  var cls;
  var obj;
  var id = "";
  if (vars.cls != undefined) {
    cls = vars.cls;
  } else {
    var id = vars.actionObjID;
    var actionObj = ActionObj.htObj.get(id);
    cls = actionObj.cls;
    obj = actionObj.obj;
  }

  if (id == ActionMenu.activeId) {
    return;
  } else {
    ActionMenu.closeNew();
  }

  // If the class has its own settings for menu width/height use those
  if (cls.DEFAULT_MENU_WIDTH != undefined) {
    ActionMenu.menuDiv.style.width = cls.DEFAULT_MENU_WIDTH;
  }
  if (cls.DEFAULT_MENU_HEIGHT != undefined) {
    ActionMenu.menuDiv.style.height = cls.DEFAULT_MENU_HEIGHT;
  }

  // If menu text is passed in vars
  if (vars.menuText) {
    menuItemsText = vars.menuText;

  // If there is a special method to display div content then use that
  } else if (obj.getActionMenuDivContent) {
    menuItemsText += obj.getActionMenuDivContent();

  // Else use ActionObj method
  } else {
    var menuItems = ActionObj.getObjActions(actionObj);
    var numMenuItems = menuItems.length;
    var menuItemsText = "";
    for(var i=0; i<numMenuItems; i++) {
      var ht = menuItems[i];
      var func = ht.func;
      var disp = ht.disp;
      menuItemsText += '<a href="javascript:ActionMenu.closeNew();' + func + '">' + disp + "</a>";
    }
  }

  // Code for displaying the div

  // If the div is passed
  if (vars.div != undefined) {
    var theDiv = vars.div;
  // If the div id is passed
  } else if (vars.divId != undefined) {
    var theDiv = $(divId);
  }

  if (theDiv == undefined) {
    alert("ERROR: No source div element found for action menu!");
    return;
  }

  ActionMenu.activeDiv = theDiv;
  ActionMenu.activeId = id;

  try {
    var oldStuff = theDiv.innerHTML;
    ActionMenu.activeText = oldStuff;
    oldStuff += ' <a href="javascript:ActionMenu.closeNew()"><font color=red>[X]</font></a>';
    theDiv.innerHTML = oldStuff;
  } catch (e) {
  }

  ActionMenu.activeClass = theDiv.className;
  theDiv.className = 'wgClk';

  var menuActionText = '&nbsp;';

  ActionMenu.menuDiv.innerHTML = menuItemsText;

  var coords = $findPos(theDiv);

  ActionMenu.menuDiv.style.left = (coords.x + 2) + "px";
  ActionMenu.menuDiv.style.top = (coords.y + coords.h + 1) + "px";
  ActionMenu.menuDiv.style.display = 'block';

  document.body.appendChild(ActionMenu.menuDiv);
}

// Static method to show the action menu
ActionMenu.show = function(cls, id) {
  var obj = cls.htObj.get(id);

  if (obj == null || obj == undefined) {
    alert("Undefined object for class: " + cls.CLASS_NAME + ", id: " + id);
    return;
  }

  if (id == ActionMenu.activeId) {
    return;
  } else {
    ActionMenu.close();
  }

  // If the class has its own settings for menu width/height use those
  if (cls.DEFAULT_MENU_WIDTH != undefined) {
    ActionMenu.menuDiv.style.width = cls.DEFAULT_MENU_WIDTH;
  }
  if (cls.DEFAULT_MENU_HEIGHT != undefined) {
    ActionMenu.menuDiv.style.height = cls.DEFAULT_MENU_HEIGHT;
  }

  // If there is a method to display menu items use that
  if (obj.getActionMenuItems) {
    var menuItems = obj.getActionMenuItems();
    var numMenuItems = menuItems.length;
    var menuItemsText = "";
    for(var i=0; i<numMenuItems; i++) {
      var ht = menuItems[i];
      var func = ht.func;
      var disp = ht.disp;
      menuItemsText += '<a href="javascript:ActionMenu.close();' + func + '">' + disp + "</a>";
   }

  // If there is a special method to display div content then use that
  } else if (obj.getActionMenuDivContent) {
    menuItemsText += obj.getActionMenuDivContent();
  }

  ActionMenu.activeId = id;
  var divId = "actions" + id;

  try {
    var oldStuff = $(divId).innerHTML;
    ActionMenu.activeText = oldStuff;
    oldStuff += ' <span style="float:right;"><a href="javascript:ActionMenu.close()"><font color=red>[X]</font></a></span>';
    $(divId).innerHTML = oldStuff;

  } catch (e) {
  }

  var div = $(divId);
  ActionMenu.activeClass = $getCls(divId);
  $setCls(divId, 'wGClk');

  var coords = $findPos(divId);

  var menuActionText = '&nbsp;';

  ActionMenu.menuDiv.innerHTML = menuItemsText;

  ActionMenu.menuDiv.style.left = (coords.x + 2) + "px";
  ActionMenu.menuDiv.style.top = (coords.y + coords.h + 1) + "px";
  ActionMenu.menuDiv.style.display = 'block';

  document.body.appendChild(ActionMenu.menuDiv);
}

ActionMenu.closeActionMenu = function() {

  try {
    $('actionMenuErase').style.display = 'none';
    $('actionMenu').style.display = 'none';
    var bodyRef = document.getElementsByTagName("body").item(0);
    bodyRef.appendChild($('actionMenu'));

    $setCls(activeId, activeClass);

    var lnk = '<a href="' + activeUrl + '">' + activeText + '</a>';
    $(activeId).innerHTML = lnk;
  } catch (e) { 
//    alert("exception: " + e); 
  }
}
