var menu_mapping = [
    ['menu-about_us', 'drop-menu-about_us', 'about_us'],
    ['menu-news', 'drop-menu-news', 'news_publications'],
    ['menu-case', 'drop-menu-case', 'science'],
    ['menu-usage', 'drop-menu-usage', 'users'],
    ['menu-beamline', 'drop-menu-beamline', 'facilities'],
    ['menu-kids', 'drop-menu-kids', 'kids']
]

function yet(d) {
    return d && d.fired == -1
}

addLoadEvent(function() {
    var d;

    $('menu-home').setAttribute('href', buildURI('/'));

    forEach (menu_mapping, function(mapping) {

        /*connect(mapping[0], 'onclick', function(event) {
            location.href = mapping[2]
            //event.src().setAttribute('href', mapping[2]);
        })*/
        $(mapping[0]).setAttribute('href', buildURI('/' + mapping[2] + '/'));
        connect(mapping[0], 'onmouseover', function(event) {
            addElementClass($(mapping[0]), 'hover')
            if (yet(d)) {
                d.addCallback(partial(removeElementClass, mapping[1], 'none'))
            } else {
                d = callLater(0, partial(removeElementClass, mapping[1], 'none'))
            }
        })
        connect(mapping[0], 'onmouseout', function(event) {
            removeElementClass($(mapping[0]), 'hover')
            if (yet(d)) {
                d.addCallback(partial(addElementClass, mapping[1], 'none'))
            } else {
                d = callLater(0.1, partial(addElementClass, mapping[1], 'none'))
            }
        })
        connect(mapping[1], 'onmouseover', function(event) {
            if (yet(d)) {
                d.cancel()
            }
        })
        connect(mapping[1], 'onmouseout', function(event) {
            //if (hasElementClass(event.relatedTarget(), 'menu_clear')) {
            if (event.relatedTarget().id != mapping[0]) {
                if (yet(d)) {
                    d.addCallback(partial(addElementClass, mapping[1], 'none'))
                } else {
                    d = callLater(0, partial(addElementClass, mapping[1], 'none'))
                }
            }
        })

    })
})


function buildURI(uri) {
    var langs = ['ja', 'en'];
    forEach(langs, function(lang) {
        var i = location.pathname.lastIndexOf('/' + lang + '/');
        if (i != -1) {
            var prefix = location.pathname.substring(0, i + lang.length + 1);
            uri = prefix + uri;
            return;
        }
    });
    return uri;
}

addLoadEvent(function() {
    var mmi = 0; // menu mapping index
    var uri = buildURI('/folderListing');
    var d = loadJSONDoc(uri);
    d.addCallback(function(result) {
        forEach(result, function(elt) {
            var div = $(menu_mapping[mmi++][1]);
            appendChildNodes(div, map(function(menu) {
                var a = A({'href': menu[0]}, menu[1]);
                connect(a, 'onmouseover', partial(addElementClass, a, 'menu-hi'));
                connect(a, 'onmouseout', partial(removeElementClass, a, 'menu-hi'));
                return a;
            }, elt));
        });
    });
    setDropMenuPosition();

    if($('keyword1').value) {
        $('keyword1').focus();
        $('keyword1').blur();
    }

    connect('SearchMagGlass', 'onclick', function(event) {
        if (hasElementClass('selectSearch', 'none')) {
            removeElementClass('selectSearch', 'none');
        } else {
            addElementClass('selectSearch', 'none');
        }
    });
    forEach(getElementsByTagAndClassName('div', 'searchEngine', 'selectSearch'), function(e) {
        connect(e, 'onmouseover', function(event) {
            addElementClass(e, 'hilight');
        });
        connect(e, 'onmouseout', function(event) {
            removeElementClass(e, 'hilight');
        });
        connect(e, 'onclick', function(event) {
            addElementClass('selectSearch', 'none');
        });
    });
    connect('searchZope', 'onclick', function(event) {
        $('cse-search-box').action = buildURI('/search');
        $('keyword1').value = $('keyword2').value = '';
        removeElementClass($('keyword2'), 'none');
        addElementClass($('keyword1'), 'none');
        if (isChildNode($('google_cse_script'), $('cse-search-box').parentNode)) {
            removeElement($('google_cse_script'));
        }
    });
    connect('searchGoogle', 'onclick', function(event) {
        $('cse-search-box').action = 'http://www.google.com/cse';
        removeElementClass($('keyword1'), 'none');
        addElementClass($('keyword2'), 'none');
        $('keyword1').value = $('keyword2').value = '';
        if (isChildNode($('google_cse_script'), $('cse-search-box').parentNode)) {
            removeElement($('google_cse_script'));
        }
        var lang = buildURI('').substring(1);
        appendChildNodes($('cse-search-box').parentNode, createDOM('script', {
            'id': 'google_cse_script',
            'type': 'text/javascript',
            'src': 'http://www.google.com/coop/cse/brand?form=cse-search-box&lang=' + lang
        }));
    });
});

function setDropMenuPosition() {
    var ua = navigator.userAgent;
    var p = 0;
    var ie6 = false;
    if (ua.indexOf('Firefox') != -1) {
        p = 1;
    }
    if (ua.indexOf('MSIE 6') != -1) {
        ie6 = true;
    }
    var test = parseInt(getStyle($('menu-home').parentNode, 'width'));
    var offset = test ? test + 20 : $('menu-home').parentNode.offsetWidth; // ie
    forEach (menu_mapping, function(mapping) {
        var width = parseInt(getStyle($(mapping[0]).parentNode, 'width'));
        width = width ? width : $(mapping[0]).parentNode.offsetWidth - 20; // ie
        $(mapping[1]).style.left = offset + 'px';
        var tabwd = width + 20 - p * 2;
        $(mapping[1]).style.minWidth = tabwd + 'px';
        if (ie6) $(mapping[1]).style.width = tabwd + 'px';
        offset += width + 20 + p;
    });
}

window.onresize = setDropMenuPosition;
