/*




*/

var ContextMenu = {
  __cm: null,
  __content:
  {

  },
  __init: function () {
    Spif.DOMEvents.attach(window, "load", ContextMenu.__doLoadWindow, ContextMenu);
    Spif.DOMEvents.attach(window, "scroll", ContextMenu.__hide, ContextMenu);
    Spif.DOMEvents.attach(document.documentElement, "mousewheel", ContextMenu.__hide, ContextMenu);
    Spif.DOMEvents.attach(window, "resize", ContextMenu.__hide, ContextMenu);
  },
  __doLoadWindow: function (evt) {
    Spif.DOMEvents.attach(document, "mousedown", ContextMenu.__doMouseDownDocument, ContextMenu);
    Spif.DOMEvents.attach(document, "click", ContextMenu.__doClickDocument, ContextMenu);

    this.__cm = document.createElement("div");
    this.__cmTab = document.createElement("div");
    this.__cmTabContent = document.createElement("div");
    this.__cmMenu = document.createElement("div");

    this.__cm.id = "contextmenu";
    this.__cm.className = "hidden";
    this.__cmTab.className = "contextmenuTab";
    this.__cmTabContent.className = "contextmenuTabcontent nowrap";
    this.__cmMenu.className = "contextmenuMenu";

    document.body.appendChild(this.__cm);
    this.__cm.appendChild(this.__cmTab);
    this.__cmTab.appendChild(this.__cmTabContent);
    this.__cm.appendChild(this.__cmMenu);
  },
  __doMouseDownDocument: function (evt) {
    var activatorEl = Spif.HtmlDomUtils.getAncestorWithClassName(evt.subject, "contextmenuActivator");
    var itemEl = Spif.HtmlDomUtils.getAncestorWithClassName(evt.subject, "contextmenuItem");

    if (!activatorEl && !itemEl)
      this.__hide();
  },
  __doClickDocument: function (evt) {
    var activatorEl = Spif.HtmlDomUtils.getAncestorWithClassName(evt.subject, "contextmenuActivator");
    var itemEl = Spif.HtmlDomUtils.getAncestorWithClassName(evt.subject, "contextmenuItem");

    if (!activatorEl && !itemEl) {
      this.__hide();
      return;
    }

    if (itemEl)
      this.__doClickContextmenuItem(itemEl);
    else {
      this.__show(activatorEl);
      evt.cancel();
    }
  },
  __doClickContextmenuItem: function (itemEl) {
    if (Spif.ClassNameAbstraction.contains(itemEl, "disabled"))
      return;

    this.__hide();
  },
  __show: function (activatorEl) {
    this.__hide();

    var labelWidth = 0;

    var labelEl = activatorEl.previousSibling;
    if (!Spif.ClassNameAbstraction.contains(labelEl, "contextmenuLabel"))
      labelEl = null;
    if (labelEl) {
      labelWidth = Spif.StyleUtils.getComputedStyleProperty(labelEl, "width");
      if (isNaN(labelWidth))
        labelWidth = labelEl.offsetWidth;
      labelWidth += 8;
      this.__cmTabContent.innerHTML = labelEl.innerHTML;
      this.__cmTabContent.style.color = "#0060C2";
      this.__cmTabContent.style.fontSize = Spif.StyleUtils.getRawComputedStyleProperty(labelEl, "fontSize");
      this.__cmTabContent.style.fontWeight = Spif.StyleUtils.getRawComputedStyleProperty(labelEl, "fontWeight");
    }
    else {
      this.__cmTabContent.innerHTML = "";
      labelEl = activatorEl;
    }


    this.__cmTabContent.style.width = labelWidth + "px";

    var box = getBoxObjectFor(labelEl);

    var menuWidth = Math.min(400, Math.max(200, labelWidth + 70));
    var leftAlign = (box.x + box.width + menuWidth < document.body.offsetWidth);

    this.__cm.style.top = box.y + "px";

    if (leftAlign) {
      this.__cm.style.left = box.x + "px";
      this.__cmTabContent.parentNode.style.left = "";
    }
    else {
      this.__cm.style.left = box.x + document.documentElement.scrollLeft - menuWidth + labelWidth + 20 + "px";
      this.__cmTabContent.parentNode.style.left = menuWidth - labelWidth - (Spif.isIE ? 26 : 28) + "px";
    }

    var a = activatorEl.className.match(/contextmenuType-(.+)\b/)[1].split("-");
    this.__cmType = a[0];
    this.__cmId = a[1];
    this.__extra = a[2];

    Spif.ClassNameAbstraction.replace(this.__cm, "hidden", "contextmenuType-" + this.__cmType);

    // MOET EIGENLIJK MET MINWIDTH EN NOG WAT...
    this.__cmMenu.style.width = menuWidth + "px";
    this.__cmMenu.innerHTML = this.__generateMenuHTML(this.__cmType);
  },
  __hide: function () {
    //alert(this.__cmType)
    if (!this.__cmType)
      return;

    Spif.ClassNameAbstraction.replace(this.__cm, "contextmenuType-" + this.__cmType, "hidden");
  },
  __generateMenuHTML: function (cmType) {
    var data = this.__getMenuFor(cmType, this.__cmId);

    var html = ['<div class="items">'];
    for (var i = 0; i < data.length; i++) {
      var item = data[i];

      if (item.target != "_blank")
        item.target = "_self";

      if (item.label)
        html.push(
          '<a href="',
          item.href.replace(/\$id/g, this.__cmId).replace(/\$type/g, this.__cmType),
          '" class="contextmenuItem ',
          (item.enabled ? 'enabled' : 'disabled'),
          ' nowrap"',
          'target="' + item.target + '">',
          item.label,
          '</a>'
        );
      else
        html.push('<div class="separator"></div>');
    }

    return html.join("");
  },

  __getMenuFor: function (cmType, param1) {
    //alert(cmType)
    switch (cmType) {
      case "image":
        return
        [
            {
              label: "Voeg toe aan mijn media, voor later gebruik",
              href: "#",
              enabled: true
            },
            {},
            {
              label: "Lokatie",
              href: "/_actions/Redirect.aspx?type=user&id=" + param1,
              enabled: false
            },
            {
              label: "Persoon",
              href: "/_actions/Redirect.aspx?type=user&id=" + param1,
              enabled: false
            },
            {
              label: "Evenement",
              href: "/bewoners/" + param1,
              enabled: false
            },
            {},
            {
              label: "Wis",
              href: "/delete/" + param1,
              enabled: true
            },
            {},
            {
              label: "Eigenschappen",
              href: "/properties/" + param1,
              enabled: true
            }
          ];
      case "user":
        return [
        {
          label: "Bekijk profiel",
          href: "/_actions/Redirect.aspx?type=user&id=" + param1,
          enabled: true
        },
        {},
        {
          label: "Stuur een bericht",
          href: "javascript:dialog.setMessageSettings(" + param1 + ")",
          enabled: true
        }
      ];
      case "portal":
        return [
        {
          label: "Aanmelden",
          href: "/_wizards/UserRegistration",
          enabled: true
        },
        {},
        {
          label: "Bugmelding doorgeven",
          href: "http://support.q42.net/default.asp?pg=pgPublicEdit&ixProject=21&sTitle=Webindewijk%20bugmelding&sEvent=-%20wat%20gebeurt%20er:%0D-%20wat%20deed%20ik:%0D-%20wat%20had%20er%20moeten%20gebeuren:%0D-%20afzender:%0D-%20wijk%20:%0D-%20emailadres%20(niet%20verplicht):",
          target: "_blank",
          enabled: true
        }
      ];
      case "portalAdmin":
        return [
        {
          label: "Aanmelden",
          href: "/_wizards/UserRegistration",
          enabled: true
        },
        {
          label: "Naar admin scherm",
          href: "/_admin",
          enabled: true
        },
        {},
        {
          label: "Bugmelding doorgeven",
          href: "http://support.q42.net/default.asp?pg=pgPublicEdit&ixProject=21&sTitle=Webindewijk%20bugmelding&sEvent=-%20wat%20gebeurt%20er:%0D-%20wat%20deed%20ik:%0D-%20wat%20had%20er%20moeten%20gebeuren:%0D-%20afzender:%0D-%20wijk%20:%0D-%20emailadres%20(niet%20verplicht):",
          target: "_blank",
          enabled: true
        }
      ];
      case "weblogentry":
        var objId = param1.split('_')[0];
        var compId = param1.split('_')[1];
        return [
        {
          label: "Verwijder dit Artikel",
          href: "javascript:cms.doRemoveItem('weblogentry'," + compId + "," + objId + ")",
          enabled: true
        }
      ];
      case "loggedinuser":
        return [
        {
          label: "Uitloggen",
          href: "javascript:userauthenticate.logout()",
          enabled: true
        },
        {
          label: "Ga naar mijn profiel",
          href: "/_actions/Redirect.aspx?type=user&id=" + param1,
          enabled: true
        }
      ];
      case "assetactions":
        var assetPos = document.getElementById("asset-" + param1).className.match(/\bposition-(\d+)\b/)[1];
        return [
        {
          label: "Bekijken",
          href: "javascript:assetmanager.doSelectAsset(" + assetPos + ", " + param1 + ")",
          enabled: true
        },
        {
          label: "Downloaden",
          href: "javascript:assetmanager.downloadAsset(" + param1 + ")",
          enabled: true
        },
        {
          label: "Hernoemen",
          href: "javascript:assetmanager.doRename(" + param1 + ")",
          enabled: true
        },
        {
          label: "Verwijderen",
          href: "javascript:assetmanager.doDelete(" + param1 + ")",
          enabled: true
        }
      ];
      case "topfolderactions":
        return [
        {
          label: "Maak subfolder",
          href: "javascript:assetmanager.doCreateFolder(" + param1 + ")",
          enabled: true
        },
        {
          label: "Verwijder alle bestanden",
          href: "javascript:assetmanager.doDeleteFolder(" + param1 + ")",
          enabled: true
        }
      ];
      case "folderactions":
        return [
        {
          label: "Maak subfolder",
          href: "javascript:assetmanager.doCreateFolder(" + param1 + ")",
          enabled: true
        },
        {
          label: "Hernoemen",
          href: "javascript:assetmanager.doRenameFolder(" + param1 + ")",
          enabled: true
        },
        {
          label: "Verwijderen",
          href: "javascript:assetmanager.doDeleteFolder(" + param1 + ")",
          enabled: true
        }
      ];
      case "singleContactActions":
        return [
        {
          label: "Verwijder contact",
          href: "javascript:contactmanager.deleteSingleContact('" + param1 + "', '" + this.__extra + "')",
          enabled: true
        }
      ];
      case "contactHeaderActions":
        return [
        {
          label: "Hernoem groep",
          href: "javascript:contactmanager.activateRenameGroup('" + param1 + "')",
          enabled: true
        },
        {
          label: "Verwijder groep",
          href: "javascript:contactmanager.deleteGroup('" + param1 + "')",
          enabled: true
        }
      ];
        /* generiek component context menu */
      case "component":
        var curComp = componentToolbar.__currentActiveComponent;
        var compId = curComp.id;
        var componentType = "unknown";
        try { componentType = curComp.className.match(/(\w+)-component /)[1]; } catch (e) { }
        var menu = [];
        switch (componentType) {
          case "weblog": menu = [
          {
            label: "Voeg nieuw Artikel toe",
            href: "javascript:cms.doCreateNewItem(" + compId + ")",
            enabled: true
          },
          {},
          {
            label: "Knip deze Component",
            href: "javascript:cms.doCutComponent(" + compId + ",'" + componentType + "')",
            enabled: true
          }];
            break;
          case "richtext": menu = [
          {
            label: "Knip deze Component",
            href: "javascript:cms.doCutComponent(" + compId + ",'" + componentType + "')",
            enabled: true
          }
        ];
            break;
          case "gastenboek": menu = [
          {
            label: "Knip deze Component",
            href: "javascript:cms.doCutComponent(" + compId + ",'" + componentType + "')",
            enabled: true
          }
        ];
            break;
          case "event": menu = [
          {
            label: "Knip deze Component",
            href: "javascript:cms.doCutComponent(" + compId + ",'" + componentType + "')",
            enabled: true
          }
        ];
            break;
          case "multimedia": menu = [
          {
            label: "Knip deze Component",
            href: "javascript:cms.doCutComponent(" + compId + ",'" + componentType + "')",
            enabled: true
          }
        ];
            break;
          case "menu": menu = [{
            label: "Voeg nieuwe Pagina toe",
            href: "/_wizards/CreatePageWizard/Default.aspx?pageId=" + CURRENT_PAGE_ID,
            enabled: true
          },
        {
          label: "Pas navigatie aan",
          href: "javascript:menu.initNavigation('" + CURRENT_PAGE_ID + "')",
          enabled: true
        },
        {}
        ];
        }

        // dit geldt voor elk component:
        menu.push(
        {
          label: "Verwijder deze Component",
          href: "javascript:cms.doRemoveComponent(" + compId + ",'" + componentType + "')",
          enabled: true
        });
        return menu;
    }
  }
};

ContextMenu.__init();

