﻿// JScript File

function iwMenuItem(name, url)
{
    this.name = name;
    this.url = url;
}

function iwMenu(element, menuItems)
{
    this.element = element;
    this.menuItems = menuItems;
    this.closeReq = 0;
    element.attachedMenu = this;    
    iwAssignEventHandler(element, "mouseover", iwMenuMouseOver);
    iwAssignEventHandler(element, "mouseout", iwMenuMouseOut);
}

function iwMenuMouseOver(ev)
{
    var targ;
    if (!ev) var ev = window.event;
    if (ev.target) targ = ev.target;
	else if (ev.srcElement) targ = ev.srcElement;	
	
	//debug("mmover" + targ.innerHTML);
	
	var menu = targ.attachedMenu;
	/*if (!menu)
    {
        targ = targ.parentNode;
        menu = targ.attachedMenu;
    }*/
    
    if (!menu)
	{
	    while (targ)
	    {
            targ = targ.parentNode;
            if (targ)
            {
                menu = targ.attachedMenu;
                if (menu != null)
                {                    
                    menu.closeReq = 0;
                    return;
                }
            }
        }
	    return;
	}
	    
	if (menu.div != null)
	    return;    
	    
	menu.pdiv = targ;	
	menu.closeReq = 0;
	
	if (menu.div == null)
	{
        var mpos = iwGetMousePosition(ev);
        //iwDisplayMenu(iwGetPositionX(targ), iwGetPositionY(targ), targ.attachedMenu);
        var x = iwGetPositionX(targ) + targ.offsetWidth;
        iwDisplayMenu(x, mpos[1] - 5, targ.attachedMenu);
    }
}

function iwMenuMouseOut(ev)
{
    var targ;
    if (!ev) var ev = window.event;
    if (ev.target) targ = ev.target;
	else if (ev.srcElement) targ = ev.srcElement;
	
	if (!targ.attachedMenu)
	    return;
	
	if (targ.attachedMenu.div)
	{
	    debug("mmout" + targ.innerHTML);
	    targ.attachedMenu.closeReq = 1;
	    window.setTimeout(function() { iwUndisplayMenu(targ.attachedMenu); }, 100);
	}
}

function iwMenuItemMouseOver(ev)
{
    var targ;
    if (!ev) var ev = window.event;
    if (ev.target) targ = ev.target;
	else if (ev.srcElement) targ = ev.srcElement;
	
	debug("mimover" + targ.innerHTML);
	
	if (!targ.parentNode.attachedMenu)
	    targ = targ.parentNode;
	    
	if (!targ.parentNode.attachedMenu)
	    targ = targ.parentNode;	
	
	if (targ.parentNode.attachedMenu)
	{
    	targ.parentNode.attachedMenu.closeReq = 0;
	}
}

function iwMenuItemMouseOut(ev)
{
    var targ;
    if (!ev) var ev = window.event;
    if (ev.target) targ = ev.target;
	else if (ev.srcElement) targ = ev.srcElement;
	
	if (!targ.parentNode.attachedMenu)
	    targ = targ.parentNode;
	    
	if (!targ.parentNode.attachedMenu)
	    targ = targ.parentNode;
	
	if (targ.parentNode.attachedMenu)
	{   
	    debug("mimout" + targ.innerHTML);
	    var menu = targ.parentNode.attachedMenu;
	    menu.closeReq = 1;
	    window.setTimeout(function() { iwUndisplayMenu(menu); }, 100);
	}
}

function iwDisplayMenu(x, y, menu)
{
    var div = document.createElement("div");
    iwAssignEventHandler(div, "mouseover", iwMenuItemMouseOver);
    iwAssignEventHandler(div, "mouseout", iwMenuItemMouseOut);
    div.className = "iwmenu";
    div.style.position = "absolute";
    div.style.display = "inline";
    div.style.zIndex = 10;    
    div.style.left = x;
    div.style.top = y;
    menu.div = div;
    
    menu.pdiv.appendChild(div);
    
    for (i = 0; i < menu.menuItems.length; i++)
    {
        var mi = menu.menuItems[i];
        
        var mdiv = document.createElement("div");
        mdiv.className = "iwmenuitem";
        div.appendChild(mdiv);
        
        var mdiva = document.createElement("a");
        mdiva.href = mi.url;
        mdiva.innerHTML = mi.name.replace(" ", "&nbsp;");
        mdiv.appendChild(mdiva);        
    }
}

function iwUndisplayMenu(menu)
{
    if (menu)
    {
        if (menu.closeReq == 1)
        {
            /*try
            {*/
            var mdiv = menu.div;
            if (mdiv != null)
            {
                //mdiv.style.display = "none";
                if (mdiv.parentNode != null)
                    mdiv.parentNode.removeChild(mdiv);
            }
            menu.div = null;
            /*}
            catch (err)
            { }*/
        }
    }
}

// help
function iwAssignEventHandler(element, kind, handler)
{
    if (element.addEventListener)
    {
        element.addEventListener(kind, handler, false);
    }
    
    if (element.attachEvent)
    {
        element.attachEvent("on" + kind, handler);
    }
}

function iwGetPositionX(element)
{
    var obj = element;
    var x = 0;
	if (obj.offsetParent) {
		x = obj.offsetLeft;
		while (obj = obj.offsetParent) {
			x += obj.offsetLeft;
		}
	}
	return x;
}

function iwGetPositionY(element, kind, handler)
{
    var obj = element;
    var y = 0;
	if (obj.offsetParent) {
		y = obj.offsetTop;
		while (obj = obj.offsetParent) {
			y += obj.offsetTop;
		}
	}
	return y;
}

function iwGetMousePosition(e) 
{
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	
	var mcoord = new Array(2);
	mcoord[0] = posx;
	mcoord[1] = posy;
	
	return mcoord;
}

var dbgtext = "";
function debug(str)
{
    //dbgtext += "<br>" + str;
}
