Разобрался за несколько часов. Я забыл, что вместо getChildElements существует all[]...
В общем, 15 минут назад лишь добился генерации меню работающего.
Однако, смущает следующее:
function CreateMenu(items) {
var i, s;
var mnu = new Array();
for(i = 0; i < items.length; ++ i) {
itm = items[i];
switch(itm.mode) {
case "menu":
mnu[mnu.length] = itm.caption;
i += (mnus = CreateMenu(itm.all)).length - 1; // <-- Вот тут указатель i обязательно нужно сместить, чтобы снова не читать те же элементы
for(j in mnus) // <-- А здесь необходимо искусственно сделать concat
mnu[mnu.length] = mnus[j];
break;
case "button":
mnu[mnu.length] = itm.caption + " " + itm.title + " " + itm.action + " " + " " + (itm.image ? itm.image : "");
break;
...
case "separator":
mnu[mnu.length] = "";
break;
}
}
mnu[mnu.length] = ".";
return mnu;
}
т.е. необходимо смещать указатель так, чтобы обойти дочерние элементы дочерного элемента. Как это обойти? Удалать дочерний элемент на лету вместе с его содержимым? Кривовато и не красиво