В общем не совсем понятно зачем вам это все на чистом js-се, ну да ладно, вот вам
демка. Вроде все учел, что вам было надо, если нет то сами подправите. Сам js такой:
(function(w, d){
var childOf = function (child, parent) {
while((child=child.parentNode) && child!==parent);
return !!child;
};
var initApp = function() {
var activeTab,
menu = d.querySelector('#menu'),
firstLevel = menu.children || [],
ln = firstLevel.length;
var tabClickHandler = function (e) {
e.preventDefault();
if (!activeTab) {
activeTab = this;
} else {
activeTab.classList.remove('active');
activeTab = this;
}
this.classList.add('active');
};
var innerTabClickHandler = function (e) {
e.preventDefault();
e.stopPropagation();
if (activeTab) {
activeTab.classList.remove('active');
}
};
var closeMenuHandler = function (e) {
var target = e.target || e.srcElement;
if(!childOf(target, menu)) {
if (activeTab) {
activeTab.classList.remove('active');
}
}
};
if (!ln) return;
while(ln--) {
var tab = firstLevel[ln],
secondLevel = tab.querySelectorAll('ul > li') || [],
lnS = secondLevel.length;
tab.addEventListener('click', tabClickHandler, false);
while(lnS--) {
var innerTab = secondLevel[lnS];
innerTab.addEventListener('click', innerTabClickHandler, false);
}
}
d.addEventListener('click', closeMenuHandler, false);
};
w.addEventListener('DOMContentLoaded', initApp);
}(window, document));
Работать будет с IE9 и выше. Для анимации раскрытия используется обычный css.