// position and display context menu
function showContextMenu(evt) {
    // hide any existing menu just in case
    hideContextMenus();
    clearContextDiv();
    evt = (evt) ? evt : ((event) ? event : null);
    if (evt) {
        var elem = (evt.target) ? evt.target : evt.srcElement;
        //current work being done
        var strs;
        
        if (elem != null && elem.href != null)
        {
            ProleWeb.WebServices.ContextMenuService.GetMenu(elem.href, successFunction);
        }
        
        if (elem.nodeType == 3) {
            elem = elem.parentNode;
        }
        if (elem.className.contains('contextEntry')){
            var menu = document.getElementById("contextMenu1");
            // turn on IE mouse capture
            if (menu.setCapture) {
                menu.setCapture();
            }
            // position menu at mouse event location
            var left, top;
            if (evt.clientX) {
                left = evt.clientX;
                top = evt.clientY;
            } else if (evt.offsetX || evt.offsetY) {
                left = evt.offsetX;
                top = evt.offsetY;
            } else if (evt.pageX) {
                left = evt.pageX;
                top = evt.pageY;
                            }
            menu.style.left = left + "px";
            menu.style.top = top + "px";
            menu.style.visibility = "visible";
            cancelEvent(evt);
            evt.returnValue = false;
        }
    }
}

function clearContextDiv() {
    var contextMenu = document.getElementById("contextMenu1");
    while (contextMenu.childNodes.length > 0) {
        contextMenu.removeChild(contextMenu.firstChild);
    }
}

function getContextDiv()
{
    var mytable = document.createElement("table");
    for (var i = 0; i < cMenu.length; i++) 
    {
        tr = mytable.insertRow(mytable.rows.length);
        td = tr.insertCell(tr.cells.length);
        td.className = "menuItem";
        td.setAttribute("class", "menuItem");
        td.setAttribute("href", cMenu[i].Url);
        td.innerHTML = cMenu[i].Title;
    }
    document.getElementById("contextMenu1").appendChild(mytable);
}


// retrieve URL from cMenu object related to chosen item
function getHref(tdElem) {
    var index = tdElem.parentNode.rowIndex;
    return cMenu[index].href + cMenu.guid;    
}

// navigate to chosen menu item
function execMenu(evt) {
    evt = (evt) ? evt : ((event) ? event : null);
    if (evt) {
        var elem = (evt.target) ? evt.target : evt.srcElement;
        if (elem.nodeType == 3) {
            elem = elem.parentNode;
        }
        if (elem.className == "menuItemOn") {
            location.href = elem.getAttribute("href"); //getHref(elem);
        }
        hideContextMenus();
    }
}

// hide all context menus
function hideContextMenus() {
    if (document.releaseCapture) {
        // turn off IE mouse event capture
        document.releaseCapture();
    }
        var div = document.getElementById("contextMenu1")
        div.style.visibility = "hidden";
}

// rollover highlights of context menu items
function toggleHighlight(evt) {
    evt = (evt) ? evt : ((event) ? event : null);
    if (evt) {
        var elem = (evt.target) ? evt.target : evt.srcElement;
        if (elem.nodeType == 3) {
            elem = elem.parentNode;
        }
        if (elem.className.indexOf("menuItem") != -1) {
            elem.className = (evt.type == "mouseover") ? "menuItemOn" : "menuItem";
        }
    }
}

// set tooltips for menu-capable and lesser browsers
function setContextTitles() {
    var cMenuReady = (document.body.addEventListener || typeof document.body.oncontextmenu != "undefined")
    var spans = document.body.getElementsByTagName("a");
    for (var i = 0; i < spans.length; i++) {
        if (spans[i].className.contains('contextEntry')) {
            if (spans[i].className.contains('Admin')) { var title = 'Record Administration. Authorization Required. \n'; }
            else { var title = ''; }
            if (cMenuReady) {
                var menuAction = (navigator.userAgent.indexOf("Mac") != -1) ? "Click and hold " : "Right click ";
                spans[i].title = title + menuAction + 'for more options.';
            } else {
                spans[i].title = "Relevant links available with other browsers (IE5+/Windows, Netscape 6+)."
                spans[i].style.cursor = "default";
            }
        }
    }
}

function successFunction(results)
{
    cMenu = results;
    getContextDiv();
}

function cancelEvent(e) {
    if (!e) e = window.event;
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        e.returnValue = false;
    }
}
function stopEvent(e) {
    if (!e) e = window.event;
    if (e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble = true;
    }
}

// bind events and initialize tooltips
function initContextMenus(fetchMethod) {
    if (document.addEventListener) {
        // W3C DOM event model
        document.addEventListener("contextmenu", showContextMenu, true);
        document.addEventListener("click", hideContextMenus, true);
    }
     else {
        // IE event model
        document.body.oncontextmenu = showContextMenu;
    }
    // set intelligent tooltips
    setContextTitles();
}

String.prototype.contains = function(t) { return this.indexOf(t) >= 0 ? true : false }