﻿//
// bpmenu.js
//
// Copyright (c) 2008 Bryte Point Inc.  All Rights Reserved
//
//


function EventAdd(_o,_t,_f)
{
    if ( _o.addEventListener )
    { 
        _o.addEventListener(_t, function(e){ _o[_f](e);}, false);
    }
    else if ( _o.attachEvent )
    {
        _o.attachEvent('on'+_t,function(e){ _o[_f](e); });
    }
    else
    {
        var _Prev=_o["on" + _t];
        if (_Prev)
        {
            _o['on'+_t]=function(e){ _Prev(e); _o[_f](e); };
        }
        else
        {
            _o['on'+_t]=_o[_f];
        }
    }
}

var gEvt=0;

function AddEvt(_node,_fun,_evt)
{
    _node['_addEvt'+gEvt]=window[_fun];
    EventAdd(_node,_evt,'_addEvt'+gEvt);
    gEvt++;
}


function menuInit(idMenu)
{
    var eMenu = document.getElementById(idMenu);
    var eMenuItems = eMenu.childNodes;
    if( eMenuItems )
    {
        // look for top level menu items
        for( var n = 0; n < eMenuItems.length; n++ )
        {
            if( eMenuItems[n].tagName && eMenuItems[n].tagName.toLowerCase() == 'div' )
            {
                if( eMenuItems[n].className && eMenuItems[n].className.toLowerCase() == 'menuitem' )
                {
                    // look for sub menus
                    var eSubItems = eMenuItems[n].childNodes;
                    
                    if( eSubItems )
                    {
                        for( var i = 0; i < eSubItems.length; i++ )
                        {
                            if( eSubItems[i].tagName && eSubItems[i].tagName.toLowerCase() == 'div' )
                            {
                                if( eSubItems[i].className && eSubItems[i].className.toLowerCase() == 'submenu' )
                                {
                                    // found a sub menu for the current top level menu
                                    // add event handlers to the top level menu and only mouseout to the submenu
                                    
                                    // Mozilla
                                   // if( eMenuItems[n].addEventListener )
                                   // {
                                    AddEvt( eMenuItems[n], 'menuMouseOver', 'mouseover' );
                                    AddEvt( eMenuItems[n], 'menuMouseOut', 'mouseout' );
                                    AddEvt( eSubItems[i], 'menuMouseOut', 'mouseout' );
                                      //  eMenuItems[n].addEventListener( 'mouseover', menuMouseOver, false );
                                      //  eMenuItems[n].addEventListener( 'mouseout', menuMouseOut, false );
                                      //  eSubItems[i].addEventListener( 'mouseout', menuMouseOut, false );
                                  //  }
                                    // IE
                                  //  else if( eMenuItems[n].attachEvent )
                                  //  {
                                  //      eMenuItems[n].attachEvent( 'onmouseover', menuMouseOver );
                                  //      eMenuItems[n].attachEvent( 'onmouseout', menuMouseOut );
                                  //      eSubItems[i].attachEvent( 'onmouseout', menuMouseOut );
                                  //  }
                                    // other/old
                                  //  else
                                  //  {
                                  //  }
                                    
                                    // make the left side of the submenu line up with the left side of the top level menu item
                                    eSubItems[i].style['left'] = (eMenuItems[n].offsetLeft+10) + 'px';
                                    // Top of submenu must be exactly bottom of toplevel menu so MouseOut works
                                    eSubItems[i].style['top'] = (eMenuItems[n].offsetTop + eMenuItems[n].offsetHeight) + 'px';
                                }
                            }
                            
                        }
                    }
                }
            } 
        }
    }
}

function menuMouseOver(evt)
{
    // IE
    evt.cancelBubble = true;
    // Mozilla
    if( evt.stopPropagation )
        evt.stopPropagation;
        
    // look for sub menus
    var eSubItems = this.childNodes;    //eMenuItems[n].childNodes;
    
    if( eSubItems )
    {
        for( var i = 0; i < eSubItems.length; i++ )
        {
            if( eSubItems[i].tagName && eSubItems[i].tagName.toLowerCase() == 'div' )
            {
                if( eSubItems[i].className && eSubItems[i].className.toLowerCase() == 'submenu' )
                {
                    // make the left side of the submenu line up with the left side of the top level menu item
                    eSubItems[i].style['visibility'] = 'visible';
                }
            }
            
        }
    }
}

function menuMouseOut(evt)
{
    //alert('mouseout');
    // IE
//    evt.cancelBubble = true;
    // Mozilla
//    if( evt.stopPropagation )
//        evt.stopPropagation;
        
    if( !CkEventObj( evt, this ) )
        return;
           
    if( this.className && this.className.toLowerCase() == 'submenu' )
    {
        // make the left side of the submenu line up with the left side of the top level menu item
       this.style['visibility'] = 'hidden';
    }
    else
    {
                
        // look for sub menus
        var eSubItems = this.childNodes;    //eMenuItems[n].childNodes;
        
        if( eSubItems )
        {
            for( var i = 0; i < eSubItems.length; i++ )
            {
                if( eSubItems[i].tagName && eSubItems[i].tagName.toLowerCase() == 'div' )
                {
                    if( eSubItems[i].className && eSubItems[i].className.toLowerCase() == 'submenu' )
                    {
                        // make the left side of the submenu line up with the left side of the top level menu item
                        eSubItems[i].style['visibility'] = 'hidden';
                    }
                }
                
            }
        }
    }
}


function CkEventObj(_e,_obj)
{
    var _eobj;

    if (!_e)
        var _e=window.event;
        
    _e.cancelBubble=true;
    
    if (_e.stopPropagation)
        _e.stopPropagation();

// check if the next object being select, or that the mouse is moving over is the submenu
    _eobj=(_e.relatedTarget)?_eobj=_e.relatedTarget:(_e.type=='mouseout')?_e.toElement:_e.fromElement;

    if (!_eobj)
    {
        return true
    }
    
    if( _eobj.parentNode == _obj )
    {
        return false;
    }
    
    return true;
    
/*    
    while (_eobj.parentNode)
    {
        if (_eobj==_obj)
        {
            return false;
        }
        
        _eobj=_eobj.parentNode;
    }
*/    
   // return _eobj;
}

