﻿
function RepositionMenu(tag) {
    var parentListItem = tag.parentNode;
    var parentListItemChildren = parentListItem.childNodes;
    for (i = 0; i < parentListItemChildren.length; i++) {
        if (parentListItemChildren[i].tagName.toLowerCase() == "ul") {
            var childUL = parentListItemChildren[i]
            var scrollPos = document.body.scrollTop ? document.body.scrollTop : (window.pageYOffset ? window.pageYOffset : (document.body.parentElement ? document.body.parentElement.scrollTop : 0));
            childUL.style.marginTop = "0px";

            var viewportHeight = self.innerHeight ? self.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : ( document.body.clientHeight ? document.body.clientHeight : 0));

            var childTop = getCoord(childUL)['top'];
            
            var bottomOfList = childTop + getCoord(childUL)['height'] - scrollPos;

            if (bottomOfList > viewportHeight) {
                var marginTop = (-(bottomOfList - viewportHeight));
                if (marginTop < -(childTop - scrollPos))
                    childUL.style.marginTop = (-(childTop - scrollPos)) + "px";
                else
                    childUL.style.marginTop = marginTop + "px";
            }
        }
    }
}


function getCoord(obj, offsetLeft, offsetTop) 
{
    var orig = obj;
    var left = 0;
    var top = 0;
    if (offsetLeft) left = offsetLeft;
    if (offsetTop) top = offsetTop;
    if (obj.offsetParent) {
        left += obj.offsetLeft;
        top += obj.offsetTop;
        while (obj = obj.offsetParent) {
            left += (obj.offsetLeft - obj.scrollLeft + obj.clientLeft);
            top += (obj.offsetTop + obj.clientTop);
        }
    }
    return { left: left, top: top, width: orig.offsetWidth, height: orig.offsetHeight };
}
