/*




*/

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:"Informatie",
          href:"javascript:dialog.showWidwInfo()",
          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:"Informatie",
          href:"javascript:dialog.showWidwInfo()",
          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();
