// Node definitionfunction treeNode(info, level, label, children, url, image) {    this.info = info;    this.level = level;    this.label = label;    this.image = image;    this.children = children;    this.url = url;}// Variablesvar catalogTreeArray = [null, null];var catalogTree;                var selectedNodeArray = [null, null];var maxLabelChars = [31, 31, 31, 31];var cookieNameArray = ["treeCoopSalute0","treeCoopSalute1"];iconOpen = new Image();iconOpen.src = "/portalWeb/resources/images/coopVoce/openBranch.gif";iconClosed = new Image();iconClosed.src = "/portalWeb/resources/images/coopVoce/closedBranch.gif";// Tree functionsfunction cutLabel(label, maxLabelChars){    if (label.indexOf("grave;") != -1)        var lungh = label.length - 7;    else        var lungh = label.length;    if (lungh <= maxLabelChars)        return label;    else        return label.substr(0, maxLabelChars) + "..." ;}function replaceAll(str, from, to){    var idx = str.indexOf(from);    while (idx > -1)    {        str = str.replace(from, to);         idx = str.indexOf(from);    }    return str;}function HTMLescape(label){    label = replaceAll(label, "<", "&lt;");    label = replaceAll(label, ">", "&gt;");    label = replaceAll(label, "\"", "&quot;");    //label = label.replace("\"/g", "quote");    return label;}function getNodeByIndexes(indexes, maxLevel , indice){    // First 0 is catalogTree, must remove it    //alert("getnodeIndex prima: "+indexes)    indexes = indexes.substr(3);    // 29/10/2007    //alert("getNodeByIndexes dopo :"  + indexes);    if (typeof(indice) != "undefined")    {        //alert("cisono");        catalogTree = catalogTreeArray[indice]    }    return getNodeByIndexes2(catalogTree, indexes, maxLevel);}function getNodeByIndexes2(tree, indexes, maxLevel){    if (indexes == "")        return tree;        if (maxLevel > -1)    {        if (tree.level >= maxLevel)            return tree;    }    var index = "";    //alert("getnode2 index :"+indexes);    if (indexes.indexOf("-") >= 0)    {        index = indexes.substr(0, indexes.indexOf("-"));        var remainingIndexes = indexes.substr(indexes.indexOf("-") + 1);        return getNodeByIndexes2(tree.children[index], remainingIndexes, maxLevel);    }        else    {        index = indexes;                return tree.children[index];    }}function cutIndexesByLevel(indexes, maxLevel){    //alert("CUTINDEXESBYLEVEL");    var index = "";    var remainingIndexes = "";        var i = indexes.indexOf("-");        if (i >= 0)    {        index = indexes.substr(0, i);        remainingIndexes = indexes.substr(i + 1);    }    else        index = indexes;        //alert("indexes= " + indexes + ", index: " + index + ", remainingIndexes: " + remainingIndexes + ", maxLevel= " + maxLevel);    if (maxLevel == 0 || remainingIndexes == "")        return index;    else        return index + "-" + cutIndexesByLevel(remainingIndexes, maxLevel - 1);}function getLevelByIndexes(indexes){    //alert("GETLEVELBYINDEXES, indexes: " + indexes);    if (indexes.indexOf("-") >= 0)    {        var remainingIndexes = indexes.substr(indexes.indexOf("-") + 1);        //alert("getLevelByIndexes, remainingIndexes: " + remainingIndexes);        return 1 + getLevelByIndexes(remainingIndexes);    }    else        return 0;}function getGroupLevelByIndexes(indexes){    if (indexes.lastIndexOf("-") >= 0)    {        var remainingIndexes = indexes.substr(0, indexes.lastIndexOf("-"));                return remainingIndexes + "-0";    }    else        return "0"; }function commonIndexes(index1, index2){    // If one is longer, cut the longest to have the same length    if (index1.length > index2.length)        index1 = index1.substr(0, index2.length);        if (index2.length > index1.length)        index2 = index2.substr(0, index1.length);    // Try all possible lengths starting from the original value till empty string    while (index1.length > 0)    {        if (index1.indexOf(index2) == 0)            break;                index1 = index1.substr(0, index1.length - 1);        index2 = index2.substr(0, index2.length - 1);    }    return index1;}function doShowDocument(indexes){    var node;        var categoryPath = "";        for (var i = 1; i <= 2 ; i++)    {        if (categoryPath != "")            categoryPath += " > ";                node = getNodeByIndexes(indexes, i);        categoryPath += node.label;    }    //CR 22/06/2009 change for coop-stop-world-poverty    var regExp = new RegExp(".*world-poverty", "i")    var currentLocation = window.location.href;    //alert('URL ' + node.url);    if (currentLocation.match(regExp) != null)    {    	//var str = node.url.replace('/portalWeb/portlets/coopSalute/coopSalute.portal', '/portalWeb/appmanager/coop/coop-stop-world-poverty');    	//alert("new " + str);    	node.url = replaceAll(node.url, '/portalWeb/portlets/coopSalute/coopSalute.portal', '/portalWeb/appmanager/coop/coop-stop-world-poverty');    }    //alert(node.url);    document.location.href = node.url;}function doShowArticles(indexes){    var node;        var categoryPath = "";    for (var i = 1; i <= 3 ; i++)    {        if (categoryPath != "")            categoryPath += " > ";                node = getNodeByIndexes(indexes, i);        categoryPath += node.label;    }    node = getNodeByIndexes(indexes, -1);    var showArticlesLink = "/portalWeb/portlets/workArea/viewChildren.do?SELECTED_LEVEL_ID="    showArticlesLink += node.info;    //09-03-2005 FIX FOR accented characters    //showArticlesLink +="&categoryPath=" + escape(categoryPath);    showArticlesLink +="&categoryPath=" + encodeURIComponent(categoryPath);    showArticlesLink +="&jpfScopeID=frame_right"    try    {       //03-02-2005 FIX EXPLORER ERROR REMOVING SCRIPT TAG       var html =             '<html>\n<head>\n<title>Ricerca in corso ...</title>\n</head>\n\n' +             '<body style="background-color: #FFFFFF;">\n' +             '<div style="margin-top: 100px; width: 520px; text-align: center; ' +             'font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;">' +             '<span style="text-decoration: blink; font-weight: bold;">Ricerca in corso ...</span>' +             '<br><br>Attendere prego</div>\n\n' +            '</body>\n</html>';                parent.frame_right.document.write(html);        }    catch(e)    {    }    parent.frame_right.location.href = showArticlesLink;}function applyActionToSingleNodeAndSubLevel(indexes, level, itemStatus,  subLevelStatus, indice){    // Input    // itemStatus: "on", "off"    // subLevelStatus: "show", "hide", "invert"        // STEO 2007-10-30    indice = indexes.substr(0,1);        // Item    var indexesLevel = getLevelByIndexes(indexes);    var itemIndexes;    if (indexesLevel > level)        itemIndexes = cutIndexesByLevel(indexes, level);    else         if (indexesLevel < level)        for (var i = 0; i < level ; i++)            itemLevel += "-0";        else            itemIndexes = indexes;        //GIBI 2007-10-30    //alert("applyActionToSingleNodeAndSubLevel: "+(document.getElementById("item" + itemIndexes).className));    var oldClassName = document.getElementById("item" + itemIndexes).className;        // STEO 2007-10-30h    // Subtree and icon    var node = getNodeByIndexes(itemIndexes, -1 , indice);    if (node.url != null && subLevelStatus == "show")        document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-' + itemStatus;        if (node.url != null && subLevelStatus == "hide")        document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-' + itemStatus;                            if (node.children != null)    {        //alert("applyActionToSingleNodeAndSubLevel: sono nel if "+subLevelStatus);        var groupIndexes = "group" + itemIndexes + '-0';                if (subLevelStatus == "invert")        {                   var currentStatus = document.getElementById(groupIndexes).style.display;                                if (oldClassName.substr(oldClassName.indexOf("-")+1, oldClassName.length) == "on")                {                    //alert(document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-off');                    document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-off';                }                else                {                    //alert(document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-on');                    document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-on';                }                                document.getElementById(groupIndexes).style.display =                     (currentStatus == 'block' ? 'none' : 'block');                        }        else            if (subLevelStatus == "show")            {                document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-' + itemStatus;                        document.getElementById(groupIndexes).style.display = 'block';                //document.images["icon" + itemIndexes].src = iconOpen.src;            }            else            {                document.getElementById("item" + itemIndexes).className = 'item_' + indice + '_' + level + '-' + itemStatus;                        document.getElementById(groupIndexes).style.display = 'none';                //document.images["icon" + itemIndexes].src = iconClosed.src;            }    }}function doAction(indexes, execute, indice){        catalogTree = catalogTreeArray[indice];    //alert("DOACTION indexes" + indexes);        var oldSelectedNodeIndexes = selectedNodeArray[indice];    var oldLevel = getLevelByIndexes(oldSelectedNodeIndexes);    //alert("oldSelectedNodeIndexes: " + oldSelectedNodeIndexes);    //alert("oldLevel: " + oldLevel);    var newSelectedNodeIndexes = indexes;    var newLevel = getLevelByIndexes(newSelectedNodeIndexes);    //alert("newSelectedNodeIndexes: " + newSelectedNodeIndexes);    //alert("newLevel: " + newLevel);        var node = getNodeByIndexes(indexes, -1);    // Root: it's not allowed to select it => no action    if (newLevel == 0)        return;                        // Same node, do something only is it's a leaf    if (oldSelectedNodeIndexes == newSelectedNodeIndexes)    {            //alert("Same node");        if ((newLevel == 2 || newLevel == 1) && execute && node.url != null)        {                    doShowDocument(newSelectedNodeIndexes);        }        else        {            // Close if opened and viceversa            // Hide / show sub level                        applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "invert", indice);                        //Cancello cookie per nn aprire l'albero al ricaricamento della pagina            setCookie(cookieNameArray[indice], "0", null, "/portalWeb", null, null);                        return;        }    }        if (oldLevel == 2)    {        if (newLevel == 2)        {            // Can't be the same            // Level 2: switch off old item            applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "off",  "", indice);            // Level 2: switch on new item            applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "", indice);            // Show articles            if (execute && node.url != null)                doShowDocument(newSelectedNodeIndexes);        }                       if (newLevel == 1)        {            if (oldSelectedNodeIndexes.indexOf(newSelectedNodeIndexes) == 0)            {                // Level 2: switch off old item                applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "off",  "", indice);                // Level 2: hide level containing the old item                // Level 1: switch on new item                applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "hide", indice);                                /* Show articles                if (execute && node.url != null)                    doShowDocument(newSelectedNodeIndexes);                */                            }            else            {                // Level 2: switch off old item                applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "off",  "", indice);                // Level 2: hide level containing the old item                // Level 1: switch off old item                applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, newLevel, "off",  "hide", indice);                // Level 1: switch on new item                // Level 1: show sub level of the new item                 applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "show", indice);            }        }    }    else if (oldLevel == 1)    {        if (newLevel == 2)        {            // Level 1: switch on old item            applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "on",  "show", indice);            // Level 2: switch off on item            applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "", indice);            // Show articles            if (execute && node.url != null)                doShowDocument(newSelectedNodeIndexes);        }                if (newLevel == 1)        {            if (oldSelectedNodeIndexes.indexOf(newSelectedNodeIndexes) == 0)            {                // Level 1: switch off old item                applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "off",  "");                // Level 1: hide level containing the old item                // Level 0: switch on new item                applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "hide");                setCookie(cookieNameArray[indice], "0", null, "/portalWeb", null, null);                return;            }            else            {                // Can't be the same                // Level 2: hide sub level of the old item                // Level 1: switch off old item                applyActionToSingleNodeAndSubLevel(oldSelectedNodeIndexes, oldLevel, "off",  "hide", indice);                // Level 1: switch on new item                // Level 2: show sub level of the new item                applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "show", indice);                // Show articles                if (execute && node.url != null)                    doShowDocument(newSelectedNodeIndexes);            }        }    }    else if (oldLevel == 0)    {        // New level can be only 1        if (newLevel == 1)        {            // Level 1: switch on new item            // Level 2: show sub level of new item            applyActionToSingleNodeAndSubLevel(newSelectedNodeIndexes, newLevel, "on",  "show", indice);            //alert("dentro");            if (execute && node.url != null)                doShowDocument(newSelectedNodeIndexes);        }            }    // Finally store new selected node    selectedNodeArray[indice] = indexes;    setCookie(cookieNameArray[indice], selectedNodeArray[indice], null, "/portalWeb", null, null);}function expandePath(indexes, indice){        //alert("EXPANDEPATH: indexes= " + indexes);        var maxLevel = getLevelByIndexes(indexes);        for (i = 1; i <= maxLevel; i++)    {        var partialIndexes = cutIndexesByLevel(indexes, i);                        doAction(partialIndexes, false, indice);    }}function renderNode(tree, indexes, order, indice){    //alert("indice in RENDERNODE "+indice);    var html = "";    if (tree == null)        return html;        var spaces = "";    for (var i = 0; i < tree.level ; i++)        spaces += "&nbsp;&nbsp;";        var url = "";        if (tree.level > 0)    {        url = "<a href=\"javascript:void(false);\" " +             "onClick=\"javascript:doAction(" +            "'" + indexes + "', true, '"+ indice +"');return false;\"";        //alert("url: "+url) ;                if (tree.image != null)        {            url += "> <img src=\""+ tree.image + "\" border=\"0\" >";        }        else        {            url += " title=\"" + tree.label + "\">";            url += "&nbsp;" + cutLabel(tree.label, maxLabelChars[tree.level]);        }                        /*if (tree.level > 1){            url += "<img src=\""+ iconClosed.src + "\" border=\"0\" id=\"icon" + indexes + "\">";        }*/        url += "</a>";        //alert("url: "+url) ;    }    else        url = cutLabel(tree.label, maxLabelChars[tree.level]);        html + "\n";    html += "<div";    html += " id=\"item" + indexes + "\"";    html += " class=\"item_" + indice + "_" + tree.level + "-off\"";    html += ">";    //alert(html);    html += spaces + url;    html += "</div>";    html += "\n";    //alert(html);    if (tree.children != null && tree.children.length > 0)    {        var clss = "class=\"level_" + indice + "_" + (tree.level + 1) + "\"";        //alert(clss);            html += "\n";        html += "<div id=\"group"+ indexes + (indexes == "" ? "" : "-") + "0" + "\" " + clss + ">";        //alert(html);        for (var i = 0; i < tree.children.length ; i++)            html += renderNode(tree.children[i], indexes + (indexes == "" ? "" : "-") + i, i, indice)        html += "</div>";        html += "\n";    }    return html;    }function renderTree(targetDiv,indice){    //alert("RENDERTREE");    var html = "\n" + "<div id=\"group" + indice + "0\" class=\"level_" + indice + "_0\">";        //Setto l'albero da renderizzare    catalogTree = catalogTreeArray[indice];        html += renderNode(catalogTree, indice+"0", 0, indice);        html += "</div><br>"/* + "\n"*/;    if (targetDiv != null && targetDiv != "")        document.getElementById(targetDiv).innerHTML = html;    else        document.write(html);            selectedNodeArray[indice] = "0";        var selectedNodeCookie = getCookie(cookieNameArray[indice]);    //alert("selectedNodeCookie in RENDERTREE= " + selectedNodeCookie + " " + selectedNodeArray[indice] + " TREE " + indice);        if (selectedNodeCookie != null && selectedNodeCookie != "" && selectedNodeCookie != "0")    {        expandePath(selectedNodeCookie, indice);    }    else        setCookie(cookieNameArray[indice], selectedNodeArray[indice], null, "/portalWeb", null, null);    //alert("selectedNode= " + selectedNode);}function expandBranch(indexes){    var tree = getNodeByIndexes(indexes, -1);        //alert("Tree in ESPANDBRACH: "+tree);    if (tree.children != null)    {        //alert("indexes in EXPANDBRANCH: "+indexes);            var groupIndexes = "group" + indexes + '-0';        //alert("Group in EXPANDBRANCH: "+groupIndexes);        document.getElementById(groupIndexes).style.display = "block";        for (var i = 0; i < tree.children.length; i++)            expandBranch(indexes + "-" + i);    }}function collapseBranch(indexes){    var tree = getNodeByIndexes(indexes, -1);        if (tree.children != null)    {        //alert(indexes);                for (var i = 0; i < tree.children.length; i++)            collapseBranch(indexes + "-" + i);            var groupIndexes = "group" + indexes + '-0';                    document.getElementById(groupIndexes).style.display = "none";    }}