//www.brainjar.com (Mike Hall)

//run time vars
var activeMenu  = null;
var IsIE        = (navigator.userAgent.indexOf('MSIE')  > 0);
var IsGecko     = (navigator.userAgent.indexOf('Gecko') > 0);
var IsOpera     = (navigator.userAgent.indexOf('Opera') > 0);

//menus config
var ie = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;
if (ie == true) var MenusOffsetTop = -2; else var MenusOffsetTop = 0;
var MenusOffsetLeft      = -2;
var MenusPopupOffsetLeft = 1;
var MenusPopupOffsetTop  = 0;
var MenusFirstOffsetTop  = -1;
var MenusArrowOffsetLeft = -13;

/*
function MenuOnOver(event, id) {
    if (activeMenu == null) return MenuOnClick(event, id);
    alert('Please check this line of code');
    var button = IsIE ? window.event.srcElement : event.currentTarget;
    if (activeMenu != null && activeMenu != button) MenuOnClick(event, id);
}
*/
function MenuOnOver(event, id) {
    var button = IsIE ? window.event.srcElement : event.currentTarget;
    button.blur();
    if ((button.menu == null) && id) {
        button.menu = document.getElementById(id);
        if (button.menu.started == null) MenuStart(button.menu);
    }
    if (button.onmouseout == null) button.onmouseout = MenuOnOut;
    if (button == activeMenu) return false;
    if (activeMenu != null) MenuHide(activeMenu);
    if (button != activeMenu) {
        MenuOpen(button);
        activeMenu = button;
    } else {
        activeMenu = null;
    }
    return false;
}
function MenuOpen(button) {
    button.className += ' active';
    if (button.onmouseout == null) button.onmouseout = MenuOnOut;
    if (button.menu.onmouseout == null) button.menu.onmouseout = MenuOnOut;
    var x = GetPageOffsetLeft(button);
    var y = GetPageOffsetTop(button) + button.offsetHeight;
    if (IsIE) {
        x += button.offsetParent.clientLeft + MenusOffsetLeft;
        y += button.offsetParent.clientTop + MenusOffsetTop;
    }
    x += -1;
    //y += 0;
    button.menu.style.left = x + 'px';
    button.menu.style.top  = y + 'px';
    button.menu.style.visibility = 'visible';
}
function MenuHide(button) {
    RemoveClass(button, 'active');
    if (button.menu != null) {
        MenuClose(button.menu);
        button.menu.style.visibility = 'hidden';
    }
}
function MenuOnPopOver(event) {
    var menu = IsIE ? GetContainerWith(window.event.srcElement, 'DIV', 'popup') : event.currentTarget;
    if (menu.activeItem != null) MenuClose(menu);
}
function MenuOnItemOver(event, id) {
    var item = IsIE ? GetContainerWith(window.event.srcElement, 'A', 'MenuItem') : event.currentTarget;
    var menu = GetContainerWith(item, 'DIV', 'popup');
    if (menu.activeItem != null) MenuClose(menu);
    menu.activeItem = item;
    item.className += ' active';
    if (item.subMenu == null) {
        item.subMenu = document.getElementById(id);
        if (item.subMenu.started == null) MenuStart(item.subMenu);
    }
    if (item.subMenu.onmouseout == null) item.subMenu.onmouseout = MenuOnOut;
    var x = GetPageOffsetLeft(item) + item.offsetWidth + MenusPopupOffsetLeft;
    var y = GetPageOffsetTop(item) + MenusPopupOffsetTop;
    var maxX, maxY;
    if (IsIE) {
        maxX = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) + (document.documentElement.clientWidth  != 0 ? document.documentElement.clientWidth  : document.body.clientWidth);
        maxY = Math.max(document.documentElement.scrollTop, document.body.scrollTop)   + (document.documentElement.clientHeight != 0 ? document.documentElement.clientHeight : document.body.clientHeight);
    } else if (IsOpera) {
        maxX = document.documentElement.scrollLeft + window.innerWidth;
        maxY = document.documentElement.scrollTop  + window.innerHeight;
    } else {
        maxX = window.scrollX + window.innerWidth;
        maxY = window.scrollY + window.innerHeight;
    }
    maxX -= item.subMenu.offsetWidth;
    maxY -= item.subMenu.offsetHeight;
    if (x > maxX) x = Math.max(0, x - item.offsetWidth - item.subMenu.offsetWidth + (menu.offsetWidth - item.offsetWidth));
    y = Math.max(0, Math.min(y, maxY));

    item.subMenu.style.left       = x + 'px';
    item.subMenu.style.top        = y + 'px';
    item.subMenu.style.visibility = 'visible';
    if (IsIE) {
        window.event.cancelBubble = true;
    } else {
        event.stopPropagation();
    }
}
function MenuClose(menu) {
    if (menu == null || menu.activeItem == null) return;
    if (menu.activeItem.subMenu != null) {
        MenuClose(menu.activeItem.subMenu);
        menu.activeItem.subMenu.style.visibility = 'hidden';
        menu.activeItem.subMenu = null;
    }
    RemoveClass(menu.activeItem, 'active');
    menu.activeItem = null;
}
function MenuOnOut(event) {
    if (activeMenu == null) return;
    if (IsIE) {
        var e = window.event.toElement;
    } else if (event.relatedTarget != null) {
        var e = (event.relatedTarget.tagName ? event.relatedTarget : event.relatedTarget.parentNode);
    }
    if (GetContainerWith(e, 'DIV', 'popup') == null) {
        MenuHide(activeMenu);
        activeMenu = null;
    }
}
function MenuStart(menu) {
    var list = menu.getElementsByTagName('A');
    if (list.length == 0) return;
    var w = list[0].offsetWidth;
    for (var i = 0; i < list.length; i++) {
        list[i].style.backgroundPosition = (w + MenusArrowOffsetLeft) + 'px center';
    }
    if (IsIE) {
        list[0].style.width = w + 'px';
        list[0].style.width = (2 * w - list[0].offsetWidth) + 'px';
    }
    menu.started = true;
}
function GetContainerWith(node, tagName, className) {
    while (node != null) {
        if (node.tagName != null && node.tagName == tagName && HasClass(node, className)) return node;
        //if (node.tagName != null && node.tagName == tagName) return node;
        node = node.parentNode;
    }
    return node;
}
function GetPageOffsetLeft(e) {
    var x = e.offsetLeft;
    if (e.offsetParent != null) x += GetPageOffsetLeft(e.offsetParent);
    return x;
}
function GetPageOffsetTop(e) {
    var y = e.offsetTop;
    if (e.offsetParent != null) y += GetPageOffsetTop(e.offsetParent);
    return y;
}
function HasClass(e, name) {
    var i, list;
    list = e.className.split(' ');
    for (i = 0; i < list.length; i++) {
        if (list[i] == name) return true;
    }
    return false;
}
function RemoveClass(e, name) {
    var i, curList, newList;
    if (e.className == null) return;
    newList = new Array();
    curList = e.className.split(' ');
    for (i = 0; i < curList.length; i++) {
        if (curList[i] != name) newList.push(curList[i]);
    }
    e.className = newList.join(' ');
}

