﻿var undef = 'undefined';
var ie = document.addEventListener==undefined?true:false;
var mainMenuItems = Array();

var ContextMenu = function(parent,appearDirection,parentMenuItem)
{
    ///<summary>Creates a new ContextMenu</summary>
        
    this.parent = parent;
    this.visible = false;
    this.left = 0;
    this.top = 0;
    this.items = new Array();
    this.appearDirection = appearDirection;
    this.handle = document.createElement("div");
    this.handle.className = "contextmenu";
    this.handle.style.visibility = "hidden";
    this.handle.style.display = "none";
    this.handle.style.zIndex = 105;
    this.parent.appendChild(this.handle);
    if(parentMenuItem!=null)
    {
        parentMenuItem.subContextMenu = this;
        parentMenuItem.showArrow();
    }
    else
    {
        mainMenuItems[mainMenuItems.length]=this;
    }
    this.parentMenuItem = parentMenuItem;
    var me = this;
    if(!ie)
    {
        this.parent.addEventListener("mouseover",function()
        {
            if(me.parentMenuItem!=null)
            {
                var parentItems = me.parentMenuItem.contextMenu.items;
                for(i=0;i<parentItems.length;i++)
                {
                    if(parentItems[i].subContextMenu!=null)
                    {
                        parentItems[i].subContextMenu.hide();
                    }
                }
            }
            else
            {
                for(i=0;i<mainMenuItems.length;i++)
                {
                    mainMenuItems[i].hide();
                }
            }
            var pos = getAbsolutePosition(me.parent);
            if(me.parent.offsetParent!=undefined)
            {
                var offsetParentPos = getAbsolutePosition(me.parent.offsetParent);
                pos.x -= offsetParentPos.x;
                pos.y -= offsetParentPos.y;
            }
            var size = getAbsoluteSize(me.parent);
            me.show(pos.x+
                (me.appearDirection == AppearDirection.Right?size.width:0),
                pos.y+
                (me.appearDirection == AppearDirection.Under?size.height:0));
        },false);
        document.addEventListener("mouseup",function()
        {
            me.hide();
        }, false);
        /*document.addEventListener("mouseover", function () {
            me.hide();
        }, false);*/
    }
    else
    {
        this.parent.onmouseenter = function()
        {
            if(me.parentMenuItem!=null)
            {
                var parentItems = me.parentMenuItem.contextMenu.items;
                for(i=0;i<parentItems.length;i++)
                {
                    if(parentItems[i].subContextMenu!=null)
                    {
                        parentItems[i].subContextMenu.hide();
                    }
                }
            }
            else
            {
                for(i=0;i<mainMenuItems.length;i++)
                {
                    mainMenuItems[i].hide();
                }
            }
            var pos = getAbsolutePosition(me.parent);
            var offsetParentPos = getAbsolutePosition(me.parent.offsetParent);
            pos.x -= offsetParentPos.x;
            pos.y -= offsetParentPos.y;
            var size = getAbsoluteSize(me.parent);
            me.show(pos.x+
                (me.appearDirection == AppearDirection.Right?size.width:0),
                pos.y+
                (me.appearDirection == AppearDirection.Under?size.height:0));
        }
        document.onmouseup = function()
        {
            me.hide();
        };
        /*document.onmouseover = function () {
            me.hide();
        };*/
    }
}

ContextMenu.prototype.appearDirection = null;
ContextMenu.prototype.parentMenuItem = null;
ContextMenu.prototype.addItem = function(menuItem)
{
    this.items[this.items.length] = menuItem;
    this.handle.appendChild(menuItem.handle);
    menuItem.contextMenu = this;
}

ContextMenu.prototype.removeItem = function(index)
{
    
}

ContextMenu.prototype.setStyle = function(styleObject)
{
    this.handle.style = styleObject;
}

ContextMenu.prototype.show = function(x,y)
{    
    ///<summary>Creates a new ContextMenu</summary>
    ///<param name="x">The left of the parent where this component should be</param>
    ///<param name="y">The top left corner of the parent where this component should be</param>
    this.handle.style.top = y+"px";
    this.handle.style.left = x+"px";
    this.handle.style.visibility = "visible";
    this.handle.style.display = "block";
}

ContextMenu.prototype.hide = function()
{
    this.handle.style.visibility = "hidden";
    this.handle.style.display = "none";
}

var MenuItem = function(text,onclick,icon,shortcut)
{
    ///<summary></summary>
    ///<param name=""></param>
    this.enabled = true;
    this.text = text;
    this.iconUrl = icon==null?"":icon
    this.shortcut = shortcut==null?"":shortcut;
    this.separator = false;
    this.visible = true;
    this.items = new Array();
    this.handle = document.createElement("div");
    this.onclick = onclick;
    var me = this;
    this.handle.onmouseup = function(e)
    {
        me.onclick();
        if(typeof(ActiveXObject)==undef)e.cancelBubble = true;
        else return false;
    }
    this.handle.className = "menuitem";
    
    var styleFloat = typeof(ActiveXObject)=="undefined"?"cssFloat":"styleFloat";
    
    var randId = text.substring(0,3);
    randId+= Math.random().toString().replace(".","");
    this.arrowId = randId;
    this.handle.innerHTML = text+" <div class=\"menu_arrow\" id=\""+randId+"\" ></div>";
    var me = this;
}

MenuItem.prototype.arrowId = null;
MenuItem.prototype.contextMenu = null;
MenuItem.prototype.subContextMenu = null;
MenuItem.prototype.showArrow = function()
{
    var arrow = document.getElementById(this.arrowId);
    arrow.style.visibility = "visible";
    arrow.style.display = "block";
}

  function getAbsolutePosition(element) {
    var r = { x: element.offsetLeft, y: element.offsetTop };
    if (element.offsetParent) {
      var tmp = getAbsolutePosition(element.offsetParent);
      r.x += tmp.x;
      r.y += tmp.y;
    }
    return r;
  };
  
  
 var AppearDirection = function(){}
 AppearDirection.Under = 0;
 AppearDirection.Right = 1;
  
  function getAbsoluteSize(element)
  {
    var size = {width:
        getElementWidth(element) ,
        height: 
        getElementHeight(element)};
    return size;
  }
  
  function getElementHeight(Elem) {
	return Elem.offsetHeight;
}

function getElementWidth(Elem) {
	return Elem.offsetWidth;
}

function _goto(url)
{
    document.location = url;
}