function initAdmin() {
  createAdminStatusDiv();
  cmsAssetPick.init();
}

cmsAssetPick = {
  enabled : false,
  div : null,
  'init' : function() {
    shortcut.add("Ctrl+Alt+O", function() {
      cmsAssetPick.toggle();
    });
  },
  'documentOnClick' : function(e) {
    e = e || window.event;
    target = e.target || e.srcElement;
    cmsAssetPick.show(e, target);
    return false;
  },
  'toggle' : function() {
    if (!cmsAssetPick.enabled) {
      cmsAssetPick.enable();
    } else {
      cmsAssetPick.disable();
    }
  },
  'enable' : function() {
    cmsAssetPick.enabled = true;
    document.onclick = cmsAssetPick.documentOnClick;
    setAdminStatus("Asset selection enabled.");
  },
  'disable' : function() {
    cmsAssetPick.enabled = false;
    document.onclick = null;
    setAdminStatus();
  },
  'show' : function(e, target) {
    document.onclick = emptyOnClick;
    div = document.createElement("div");
    div.className = "assetPickDiv";

    var pos = getMousePosition(e);
    div.style.top = pos.top + "px";
    div.style.left = pos.left + "px";

    var node = target;
    var contentEmpty = true;
    while (node) {
      if (node.nodeType == Node.COMMENT_NODE) {
        try {
          assetData = eval('(' + node.nodeValue + ')').cmsAsset;
          if (assetData) {
            if (assetData.canExecute == 'false') {
              span = document.createElement("span");
              span.innerHTML = assetData.template + " - " + assetData.name + " [" + assetData.status + "] " + " (access denied)";
              div.appendChild(span);
            } else {
            link = createLink(div, assetData.template + " - " + assetData.name + " [" + assetData.status + "] ", function(e) {
              e = e || window.event;
              t = e.target || e.srcElement;
              if (adminMode == 'DIRECT') {
                window.opener.displayAssetPage(t.assetData);
                return;
              } else {
                window.open(cmsAdminURL + "?assetId=" + t.assetData.id, "cmsAssetPick");
              }
            });
            link.assetData = assetData;
            }
            div.appendChild(document.createElement("br"));
            contentEmpty = false;
          }
        } catch (e) {
        //                    alert(e);
        }
      }
      node = node.previousSibling || node.parentNode;
    }
    if (contentEmpty) {
      var s = document.createElement("span");
      s.innerHTML = "(no asset found)";
      div.appendChild(s);
    }
    div.appendChild(document.createElement("hr"));

    createLink(div, "close", function(e) {
      cmsAssetPick.hide();
      e = e || window.event;
      e.cancelBubble = true;
      return false;
    });

    document.body.appendChild(div);
    cmsAssetPick.div = div;

    shortcut.add("esc", function() {
      cmsAssetPick.hide();
    });
  },
  'hide' : function() {
    document.body.removeChild(cmsAssetPick.div);
    document.onclick = cmsAssetPick.documentOnClick;
    shortcut.remove("esc");
  }
};

function emptyOnClick(e) {
  e = e || window.event;
  e.cancelBubble = true;
  return false
}

function createLink(parent, actionName, action) {
  var link = document.createElement("a");
  with (link) {
    onclick = action;
    innerHTML = actionName;
    href = "javascritp:void(0);";
    }
  parent.appendChild(link);
  return link;
}

var adminStatusDiv;

function updateAdminStatusDivPosition() {
  adminStatusDiv.style.top = getScrollY() + "px";
}

function createAdminStatusDiv() {
  adminStatusDiv = document.createElement("div");
  adminStatusDiv.className = "adminStatusDiv";

  updateAdminStatusDivPosition();
  setAdminStatus();

  document.body.appendChild(adminStatusDiv);
  setInterval(updateAdminStatusDivPosition, 10);
}

function setAdminStatus(status) {
  if (!status) {
    adminStatusDiv.innerHTML = "Admin mode enabled";
  } else {
    adminStatusDiv.innerHTML = status;
  }
}

