Ciao a tutti,
vi spiego il mio problema:
io ho un menu ad albero (uno script trovato in rete) che quando si clicca su una voce carica le sottovoci con ajax.

CODICE:

file tree.js

var idOfFolderTrees = ['tree','tree2'];
var imageFolder = 'images/';// Path to images
var closedFolderImage = 'folderClosed.gif';
var openFolderImage = 'folderOpen.gif';
var subItemImage = 'books_close.gif';
var plusImage = 'plus.gif';
var minusImage = 'minus.gif';
var initExpandedNodes = ''; // Cookie - initially expanded nodes;
var useAjaxToLoadNodesDynamically = true;
var ajaxRequestFile = 'writeNodes.php';
var ajaxRequestInitFile = 'tree.php';
var contextMenuActive = false;
var ajaxObjectArray = new Array();
var ajaxObjArray = new Array();
var treeUlCounter = 0;
var nodeId = 1;

/*
These cookie functions are downloaded from
http://www.mach5.com/support/analyze...JavaScript.htm
*/
function Get_Cookie(name) {
var start = document.cookie.indexOf(name+"=");
var len = start+name.length+1;
if ((!start) && (name != document.cookie.substring(0,name.length)))
return null;
if (start == -1) return null;
var end = document.cookie.indexOf(";",len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len,end));
}
// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) {
expires = expires * 60*60*24*1000;
var today = new Date();
var expires_date = new Date( today.getTime() + (expires) );
var cookieString = name + "=" +escape(value) +
( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
( (path) ? ";path=" + path : "") +
( (domain) ? ";domain=" + domain : "") +
( (secure) ? ";secure" : "");
document.cookie = cookieString;
}

function expandAll(treeId){
var menuItems = document.getElementById(treeId).getElementsByTagNa me('LI');
for(var no=0;no<menuItems.length;no++){
var subItems = menuItems[no].getElementsByTagName('UL');
if(subItems.length>0 && subItems[0].style.display!='block'){
showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
}
}
}

function collapseAll(treeId){
var menuItems = document.getElementById(treeId).getElementsByTagNa me('LI');
for(var no=0;no<menuItems.length;no++){
var subItems = menuItems[no].getElementsByTagName('UL');
if(subItems.length>0 && subItems[0].style.display=='block'){
showHideNode(false,menuItems[no].id.replace(/[^0-9]/g,''));
}
}
}

function getNodeDataFromServer(ajaxIndex,ulId,parentId){
document.getElementById(ulId).innerHTML = ajaxObjectArray[ajaxIndex].response;
ajaxObjectArray[ajaxIndex] = false;
parseSubItems(ulId,parentId);
}

function parseSubItems(ulId,parentId){
if(initExpandedNodes){
var nodes = initExpandedNodes.split(',');
}
var branchObj = document.getElementById(ulId);//seleziona l'oggetto tree
// Get an array of all menu items
var menuItems = branchObj.getElementsByTagName('LI');
for(var no=0; no<menuItems.length; no++){
var imgs = menuItems[no].getElementsByTagName('IMG');
if(imgs.length>0)continue;
nodeId++;
var subItems = menuItems[no].getElementsByTagName('UL');
var img = document.createElement('IMG');
img.src = imageFolder + plusImage;
img.onclick = showHideNode;
if(subItems.length==0)img.style.visibility='hidden ';
else{
subItems[0].id = 'tree_ul_' + treeUlCounter;
treeUlCounter++;
}
var aTag = menuItems[no].getElementsByTagName('A')[0];
aTag.onclick = showHideNode;

menuItems[no].insertBefore(img,aTag);
menuItems[no].id = 'treeNode' + nodeId;
var folderImg = document.createElement('IMG');

if(menuItems[no].getAttribute('parentId')>0){
folderImg.src = imageFolder + closedFolderImage;
}else folderImg.src = imageFolder + subItemImage;

menuItems[no].insertBefore(folderImg,aTag);
var tmpParentId = menuItems[no].getAttribute('parentId');
if(!tmpParentId)tmpParentId = menuItems[no].tmpParentId;
if(tmpParentId && nodes[tmpParentId])showHideNode(false,nodes[no]);
}
}

function showHideNode(e,inputId){
if(inputId){
if(!document.getElementById('treeNode'+inputId))re turn;
thisNode = document.getElementById('treeNode'+inputId).getEle mentsByTagName('IMG')[0];
}else {
thisNode = this;
if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];
}
if(thisNode.style.visibility=='hidden')return;
var parentNode = thisNode.parentNode;
inputId = parentNode.id.replace(/[^0-9]/g,'');
if(thisNode.src.indexOf(plusImage)>=0){
thisNode.src = thisNode.src.replace(plusImage,minusImage);

var ul = parentNode.getElementsByTagName('UL')[0];
ul.style.display='block';
if(!initExpandedNodes)initExpandedNodes = ',';
if(initExpandedNodes.indexOf(',' + inputId + ',')<0)
initExpandedNodes = initExpandedNodes + inputId + ',';
// Using AJAX/XMLHTTP to get data from the server
if(useAjaxToLoadNodesDynamically){
var firstLi = ul.getElementsByTagName('LI')[0];
var parentId = firstLi.getAttribute('parentId');
if(!parentId)parentId = firstLi.parentId;
if(parentId){
ajaxObjectArray[ajaxObjectArray.length] = new sack();
var ajaxIndex = ajaxObjectArray.length-1;
ajaxObjectArray[ajaxIndex].requestFile = ajaxRequestFile + '?parentId=' + parentId;
ajaxObjectArray[ajaxIndex].onCompletion = function() {
getNodeDataFromServer(ajaxIndex,ul.id,parentId);
};// Specify function that will be executed after file has been found
ajaxObjectArray[ajaxIndex].runAJAX(); // Execute AJAX function
}
}
}else{
thisNode.src = thisNode.src.replace(minusImage,plusImage);
parentNode.getElementsByTagName('UL')[0].style.display='none';
initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
}
Set_Cookie('expandedNodes',initExpandedNodes,500);
return;
}

function changeImg(node, prev, next){
node.src = node.scr.replace(prev, next);
}

function initTree(){
//loadInitialTree();
for(var treeCounter=0;treeCounter<idOfFolderTrees.length;t reeCounter++){
var tree = document.getElementById(idOfFolderTrees[treeCounter]);

// Get an array of all menu items
var menuItems = tree.getElementsByTagName('LI');
for(var no=0;no<menuItems.length;no++){
nodeId++;
var subItems = menuItems[no].getElementsByTagName('UL');
var img = document.createElement('IMG');
img.src = imageFolder + plusImage;
img.onclick = showHideNode;
if(subItems.length==0)img.style.visibility='hidden ';else{
subItems[0].id = 'tree_ul_' + treeUlCounter;
treeUlCounter++;
}
var aTag = menuItems[no].getElementsByTagName('A')[0];
aTag.onclick = showHideNode;
menuItems[no].insertBefore(img,aTag);
if(!menuItems[no].id)
menuItems[no].id = 'treeNode' + nodeId;
var folderImg = document.createElement('IMG');

folderImg.src = imageFolder + closedFolderImage;

menuItems[no].insertBefore(folderImg,aTag);
}
}
initExpandedNodes = Get_Cookie('expandedNodes');
if(initExpandedNodes){
var nodes = initExpandedNodes.split(',');
for(var no=0;no<nodes.length;no++){
if(nodes[no])showHideNode(false,nodes[no]);
}
}
}
window.onload = initTree;

file tree.php

<?php
$conn = oci_connect('system', 'admin', 'XE');
if (!$conn) {
$e = oci_error();
print htmlentities($e['message']);
exit;
}

$query = "select * from categoria where parentId='0'";

$stid = oci_parse($conn, $query);

$r = oci_execute($stid, OCI_DEFAULT);

while($inf = oci_fetch_array($stid)){

echo "[*]<a href=\"#\" id=".$inf["ID"].">".$inf["NOME"]."</a>";

$resSub = oci_parse($conn, "select ID from categoria where parentId='".$inf["ID"]."'");
oci_execute($resSub, OCI_DEFAULT);
if($infSub = oci_fetch_array($resSub)){
echo "<ul><li parentId=\"".$inf["ID"]."\"><a href=\"#\">Loading...</a>[/list]";
}
echo "";
}
oci_close($conn);
?>

parte del file index.php

<div id="leftColumn">
<!--Menù di navigazione ad albero dove i nodi sono caricati
dinamicamente grazie all'uso di Ajax-->
<ul id="tree" class="tree">
QUI VANNO INSERITE LE VOCI PRINCIPALI DEL MENU [/list]
</div>


Il mio prof vuole però che anche le voci principali, che adesso sono scritte direttamente in html sulla homepage o caricate tramite codice php, vengano prese con ajax. Come si crea una funzione javascript che prima che mi inizializzi il menu ad albero con la funzione initTree() mi carichi sulla pagina index.php le voci a livello 0.

AIUTO!