menuDown(overlay, event, index, parents) {
        let options = overlay.options
        let items   = options.items
        let icon    = query(event.delegate).find('.w2ui-icon')
        let menu    = query(event.target).closest('.w2ui-menu:not(.w2ui-sub-menu)')
        if (typeof parents == 'string' && parents !== '') {
            let ids = parents.split('-')
            ids.forEach(id => {
                items = items[id].items
            })
        }
        if (typeof items == 'function') {
            items = items({ overlay, index, parents, event })
        }
        let item = items[index]
        if (item == null || item.disabled) {
            return
        }
        let uncheck = (items, parent) => {
            items.forEach((other, ind) => {
                if (other.id == item.id) return
                if (other.group === item.group && other.checked) {
                    menu
                        .find(`.w2ui-menu-item[index="${(parent ? parent + '-' : '') + ind}"] .w2ui-icon`)
                        .removeClass('w2ui-icon-check')
                        .addClass('w2ui-icon-empty')
                    items[ind].checked = false
                }
                if (Array.isArray(other.items)) {
                    uncheck(other.items, ind)
                }
            })
        }
        if ((options.type === 'check' || options.type === 'radio') && item.group !== false
                    && !query(event.target).hasClass('menu-remove')
                    && !query(event.target).hasClass('menu-help')
                    && !query(event.target).closest('.w2ui-menu-item').hasClass('has-sub-menu')) {
            item.checked = options.type == 'radio' ? true : !item.checked
            if (item.checked) {
                if (options.type === 'radio') {
                    query(event.target).closest('.w2ui-menu').find('.w2ui-icon')
                        .removeClass('w2ui-icon-check')
                        .addClass('w2ui-icon-empty')
                }
                if (options.type === 'check' && item.group != null) {
                    uncheck(options.items)
                }
                icon.removeClass('w2ui-icon-empty').addClass('w2ui-icon-check')
            } else if (options.type === 'check') {
                icon.removeClass('w2ui-icon-check').addClass('w2ui-icon-empty')
            }
        }
        // highlight record
        if (!query(event.target).hasClass('menu-remove') && !query(event.target).hasClass('menu-help')) {
            menu.find('.w2ui-menu-item').removeClass('w2ui-selected')
            // click on the item that has submenu will not select the item
            if (!query(event.delegate).hasClass('has-sub-menu')) {
                query(event.delegate).addClass('w2ui-selected')
            }
        }
    }
Builds an array of item ids that sequencial order for navigation with up/down keys. Skips hidden and disabled items
and goes into nested structures. It will remember last active chain in 'overlay.tmp.activeChain'