Index: XIOS/trunk/html/generate_compile.py
===================================================================
--- XIOS/trunk/html/generate_compile.py	(revision 1790)
+++ XIOS/trunk/html/generate_compile.py	(revision 1790)
@@ -0,0 +1,116 @@
+import glob
+import sys
+import subprocess
+import os
+import copy
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+	# 	print(runthis+" OK")
+
+def Sort(sub_li): 
+    l = len(sub_li) 
+    for i in range(0, l): 
+        for j in range(0, l-i-1): 
+            if (sub_li[j][0] < sub_li[j+1][0]): 
+                tempo = sub_li[j] 
+                sub_li[j]= sub_li[j+1] 
+                sub_li[j+1]= tempo
+            if (sub_li[j][0] == sub_li[j+1][0]):
+                if (sub_li[j][3] < sub_li[j+1][3]): 
+                    tempo = sub_li[j] 
+                    sub_li[j]= sub_li[j+1] 
+                    sub_li[j+1]= tempo 
+                if (sub_li[j][3] == sub_li[j+1][3]): 
+                    if (sub_li[j][2] < sub_li[j+1][2]): 
+                        tempo = sub_li[j] 
+                        sub_li[j]= sub_li[j+1] 
+                        sub_li[j+1]= tempo 
+    return sub_li 
+
+def subgenerate(maindir):
+
+    compile_list = glob.glob(maindir+"/build_*.txt")
+    if len(compile_list) == 0 :
+        return
+
+    machine = maindir.replace("build_","")
+    revision_list=[]
+    machine_list=[]
+    arch_list=[]
+    mode_list=[]
+
+    bg_color = ["#84c5ff", "#96cdff", "#a1d3ff", "#b3dafd", "#c2e1fd"]
+
+
+    myBuild=["", "", "", "", ""] #revision, machine, arch, mode, status
+    myBuildList=[]
+    
+    for compile_log in compile_list:
+        revision = compile_log[6:10]
+        
+        f=open(compile_log, "r")
+        for line in f:
+            if line.startswith("revision"):
+                myText = line.replace("revision ", "").replace("\n", "")
+                if not myText in revision_list:
+                    revision_list.append(myText)
+                myBuild[0] = myText
+                
+
+            elif line.startswith("machine"):
+                myText = line.replace("machine ", "").replace("\n", "")
+                if not myText in machine_list:
+                    machine_list.append(myText)
+                myBuild[1] = myText
+
+            elif line.startswith("arch"):
+                myText = line.replace("arch ", "").replace("\n", "")
+                if not myText in arch_list:
+                    arch_list.append(myText)
+                myBuild[2] = myText
+
+            elif line.startswith("mode"):
+                myText = line.replace("mode ", "").replace("\n", "")
+                if not myText in mode_list:
+                    mode_list.append(myText)
+                myBuild[3] = myText
+
+            elif line.startswith("Build command"):
+                myTexts = line.replace("Build command ", "").replace("\n", "").split(" ")
+                if myTexts[0] == "finished" :
+                    myBuild[4] = "&#9989;" 
+                else :
+                    myBuild[4] = "&#10060;"
+        myBuildList.append([myBuild[0], myBuild[1], myBuild[2], myBuild[3], myBuild[4]])
+        f.close()
+
+    print(Sort(myBuildList)) # first by revision number, then by mode, then by arch. all in descendant order
+    print(len(myBuildList))
+    
+    revision_list = sorted(revision_list, reverse = True)
+    print(arch_list) # row
+    print(mode_list) # col
+    print(machine_list) # col
+    print(revision_list) # col
+
+
+    f=open("compile_"+machine+"_info.js", "w")
+    f.write("var "+machine+"_compile_info_list = "+repr(myBuildList)+"\n\n")
+    f.write("var "+machine+"_revision_list = "+repr(revision_list)+"\n\n")
+    f.close()
+
+
+def main() :
+    subgenerate("build_jeanzay")
+    subgenerate("build_irene")
+
+if __name__== "__main__":
+  main()
Index: XIOS/trunk/html/generate_compile_table.js
===================================================================
--- XIOS/trunk/html/generate_compile_table.js	(revision 1790)
+++ XIOS/trunk/html/generate_compile_table.js	(revision 1790)
@@ -0,0 +1,194 @@
+function generateCompileTable()
+{
+  var machine_list=[];
+  var machine_revision_list=[];
+  var machine_full_name_list=[];
+  var machine_info_list=[];
+
+  if(typeof jeanzay_revision_list != 'undefined') 
+  {
+    machine_list.push("jeanzay");
+    machine_revision_list.push("jeanzay_revision_list")
+    machine_full_name_list.push("Jean-Zay")
+    machine_info_list.push("jeanzay_compile_info_list")
+  }
+  
+  if (typeof irene_revision_list != 'undefined') 
+  {
+    machine_list.push("irene");
+    machine_revision_list.push("irene_revision_list")
+    machine_full_name_list.push("Irene")
+    machine_info_list.push("irene_compile_info_list")
+  }
+  
+  if (typeof other_revision_list != 'undefined') 
+  {
+    machine_list.push("other");
+    machine_revision_list.push("other_revision_list")
+    machine_full_name_list.push("Other")
+    machine_info_list.push("other_compile_info_list")
+  }
+
+  var revision_list=[]
+
+  for (var i=0; i<machine_list.length; i++)
+  {
+    tmp_list = eval(machine_revision_list[i])
+
+    for (var j=0; j<tmp_list.length; j++)
+    {
+      if (revision_list.includes(tmp_list[j]) == false)
+      {
+        revision_list.push(tmp_list[j])
+      }
+    }
+  }
+
+  revision_list.sort(function(a, b){return b-a});
+  
+  
+  // Generate select list for compile table
+
+  var sel = document.getElementById("compile_revision");
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var opt = document.createElement('option');
+    opt.appendChild( document.createTextNode(revision_list[i]) );
+    opt.value = revision_list[i]; 
+    sel.appendChild(opt); 
+  }
+  
+  // Generate content of compile table
+  
+  
+  var table = document.getElementById("compile_table")
+  table.style.backgroundColor = "#84c5ff";
+  table.setAttribute("class", "compile_table")
+  table.setAttribute("id", "compile_table")
+
+  var titelRow = document.getElementById("compile_table_row0")
+  var myCell = document.createElement("TD");
+  myCell.style.maxWidth="100px"
+  myCell.innerHTML = ("Revision");
+  titelRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.style.minWidth="500px"
+    myCell.innerHTML = (machine_full_name_list[machine_index]);
+    titelRow.appendChild(myCell)
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+
+    var myRow = document.createElement("TR");
+    myRow.setAttribute("id", "compile_table_"+revision);
+    myRow.setAttribute("class", "compile_table_row");
+    
+    var myCell = document.createElement("TD");
+    myCell.innerHTML = (revision);
+    myCell.style.fontWeight = "bold";
+    myRow.appendChild(myCell)
+    
+    for( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var myCell = document.createElement("TD");
+      myCell.setAttribute("id", "compile_table_"+revision+"_"+machine);
+      myRow.appendChild(myCell)
+    }        
+    table.appendChild(myRow)
+
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+    for ( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      fillSubCompileTable(revision, machine, machine_info_list[j], machine_revision_list[j])
+    }
+  }
+
+}
+
+
+
+function fillSubCompileTable(revision, machine, machine_compile_info, machine_revision)
+{
+  var compile_info = eval(machine_compile_info)
+  var revision_list = eval(machine_revision)
+
+  var myTD = document.getElementById("compile_table_"+revision+"_"+machine);
+  if (!revision_list.includes(revision))
+  {
+    myTD.innerHTML="No Compile Information"
+    myTD.style.color="white"
+  }
+  else
+  {
+    var part_compile_info = []
+    var tmp_mode_list = []
+    var tmp_arch_list = []
+    for(var i=0; i<compile_info.length; i++)
+    {
+      if (revision == compile_info[i][0])
+      {
+        part_compile_info.push(compile_info[i])
+        if (!tmp_mode_list.includes(compile_info[i][3]))
+        {
+          tmp_mode_list.push(compile_info[i][3])
+        }
+        if (!tmp_arch_list.includes(compile_info[i][2]))
+        {
+          tmp_arch_list.push(compile_info[i][2])
+        }
+      }
+    }
+
+    mySubTable = document.createElement("table")
+    myTD.appendChild(mySubTable)
+
+    myRow = document.createElement("tr")
+    mySubTable.appendChild(myRow)
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+    for (var j=0; j<tmp_mode_list.length; j++)
+    {
+      myCell = document.createElement("td")
+      myCell.innerHTML=(tmp_mode_list[j])
+      myRow.appendChild(myCell)
+    }
+
+    for (var j=0; j<tmp_arch_list.length; j++)
+    {
+      myRow = document.createElement("tr")
+      mySubTable.appendChild(myRow)
+
+      myCell = document.createElement("td")
+      myCell.innerHTML = (tmp_arch_list[j])
+      myRow.appendChild(myCell)
+
+      
+      for(var i=0; i<tmp_mode_list.length; i++)
+      {
+        myCell = document.createElement("td")
+        for (var k=0; k<part_compile_info.length; k++)
+        {
+          if(part_compile_info[k][2] == tmp_arch_list[j] && part_compile_info[k][3] == tmp_mode_list[i])
+          {
+            myCell.innerHTML = (part_compile_info[k][4])
+            break
+          }
+        }        
+        myRow.appendChild(myCell)
+      }
+    }
+  }
+
+  
+}
Index: XIOS/trunk/html/generate_test.py
===================================================================
--- XIOS/trunk/html/generate_test.py	(revision 1790)
+++ XIOS/trunk/html/generate_test.py	(revision 1790)
@@ -0,0 +1,178 @@
+import glob
+import sys
+import subprocess
+import os
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+	# 	print(runthis+" OK")
+
+def Sort(sub_li): 
+    l = len(sub_li) 
+    for i in range(0, l): 
+        for j in range(0, l-i-1): 
+            if (sub_li[j][0] < sub_li[j+1][0]): 
+                tempo = sub_li[j] 
+                sub_li[j]= sub_li[j+1] 
+                sub_li[j+1]= tempo
+            if (sub_li[j][0] == sub_li[j+1][0]):
+                if (sub_li[j][2] < sub_li[j+1][2]): 
+                    tempo = sub_li[j] 
+                    sub_li[j]= sub_li[j+1] 
+                    sub_li[j+1]= tempo 
+                if (sub_li[j][1] == sub_li[j+1][1]): 
+                    if (sub_li[j][2] < sub_li[j+1][2]): 
+                        tempo = sub_li[j] 
+                        sub_li[j]= sub_li[j+1] 
+                        sub_li[j+1]= tempo 
+    return sub_li 
+
+def subgenerate(machine_choice):
+    
+    machine_name_dict={"jeanzay":"Jean-Zay",
+                       "irene" : "Irene", 
+                       "other": "Other"}
+    
+    test_list = glob.glob(machine_choice+"/test_*.txt")
+    if len(test_list) == 0 :
+        return
+    
+    revision_list=[]
+    relurl_list=[]
+    machine_list=[]
+    build_dir_list=[]
+    arch_list=[]
+    mode_list=[]
+    
+    myTestList=[]    
+        
+    for test_log in test_list :
+        f=open(test_log, "r")
+        for line in f :
+            if line.startswith("#revision") :
+                revision = line.replace("\n","").split(" ")[1]
+                if not revision in revision_list :
+                    revision_list.append(revision)
+            elif line.startswith("#relurl") :
+                relurl = line.replace("\n","").split(" ")[1]
+                tmp_url = relurl.split("/")
+                branch = tmp_url[len(tmp_url)-1]
+                if not relurl in relurl_list :
+                    relurl_list.append(relurl)
+            elif line.startswith("#machine") :
+                machine = line.replace("\n","").split(" ")[1]
+                machine_name = machine_name_dict[machine]
+                if not machine in machine_list :
+                    machine_list.append(machine)
+            elif line.startswith("#build_dir") :
+                build_dir = line.replace("\n","").split(" ")[1]
+                tmp_list = build_dir.split("/")
+                short_dir = tmp_list[len(tmp_list)-1]
+                if not build_dir in build_dir_list :
+                    build_dir_list.append(short_dir)
+            elif line.startswith("#arch") :
+                arch = line.replace("\n","").split(" ")[1]
+                if not arch in arch_list :
+                    arch_list.append(arch)
+            elif line.startswith("#mode") :
+                mode = line.replace("\n","").split(" ")[1]
+                if not mode in mode_list :
+                    mode_list.append(mode)
+        
+        myTestList.append([revision, machine, short_dir, branch, machine_name, arch, mode, build_dir])
+        f.close()
+        
+    revision_list = sorted(revision_list, reverse=True)
+    print(revision_list)
+    
+    Sort(myTestList)
+    print(myTestList)
+    
+    
+    machine = machine_choice.replace("test_","") 
+    f=open("test_"+machine+"_info.js", "w")
+    f.write("var test_"+machine+"_revision_list = "+repr(revision_list)+"\n\n")
+    f.write("var test_"+machine+"_info_list = [\n")
+    for i in range(len(myTestList)) :
+        if i<len(myTestList)-1 :
+            f.write("        "+repr(myTestList[i])+",\n")
+        else :
+            f.write("        "+repr(myTestList[i])+"]\n\n")
+            
+    myReportDict=dict()
+    for i in range(len(myTestList)) :
+        myReportList=[] # algo, config, file, status
+        print(myTestList[i])
+        file_to_open = machine_choice+"/test_"+myTestList[i][0]+"_"+myTestList[i][1]+"_"+myTestList[i][2].replace("build_","")+".txt"
+        g=open(file_to_open, "r")
+        for line in g :
+            if not line.startswith("#") :
+                line = line.replace("\n","").split(" ")
+                algo = line[0]
+                config = line[1].split("@")[1]
+                file = line[2].split("@")[2]
+                status = line[3]
+                myReportList.append([algo, config, file, status])
+        g.close()
+        print(len(myReportList))
+        myReportDict.update({myTestList[i][0]+"_"+myTestList[i][2].replace("build_","") : myReportList})
+    
+    for i in range(len(myReportDict)) :
+        key = list(myReportDict.keys())[i]
+        f.write("var test_"+machine+"_"+key+" = [\n")
+        for j in range(len(myReportDict[key])) :
+            if j<len(myReportDict[key])-1 : 
+                f.write("        [\'"+myReportDict[key][j][0]+"\', \'"+myReportDict[key][j][1]+"\', \'"+myReportDict[key][j][2]+"\', "+myReportDict[key][j][3]+"],\n")
+            else :
+                f.write("        [\'"+myReportDict[key][j][0]+"\', \'"+myReportDict[key][j][1]+"\', \'"+myReportDict[key][j][2]+"\', "+myReportDict[key][j][3]+"]]\n")
+        f.write("\n\n")
+
+    for revision in revision_list :
+        algo_list = glob.glob("def_files/"+revision+"/test_*")
+    
+        for l in algo_list :
+            tmp_algo = l.split("/")
+            f.write("var test_"+machine+"_"+revision+"_"+tmp_algo[len(tmp_algo)-1]+"_user_params = [\n")
+            g=open(l+"/user_params.def","r")
+            for line in g:
+                if not line=="\n" and not line.startswith("#"):
+                    f.write("        \'"+line.replace("\n","").replace("'","\\\'")+"\',\n")
+            g.close()
+            f.write("        ]\n\n")
+
+    for revision in revision_list :
+        algo_list = glob.glob("def_files/"+revision+"/test_*")
+    
+        for algo in algo_list :
+            config_list = glob.glob(algo+"/config_*")
+            tmp_algo = algo.split("/") 
+            algo_name = tmp_algo[len(tmp_algo)-1]
+            for config in config_list :
+                tmp_config = config.split("/")
+                config_name = tmp_config[len(tmp_config)-1]
+                config_name_bis = config_name.replace("=","_")
+                f.write("var test_"+machine+"_"+revision+"_"+algo_name+"_"+config_name_bis+"_all_params = [\n")
+                g=open(config+"/all_param.def","r")
+                for line in g:
+                    line = line.replace("&", "& ")
+                    if not line=="\n" :
+                        f.write("        \'"+line.replace("\n","").replace("'","\\\'")+"\',\n")
+                g.close()
+                f.write("        ]\n\n")
+
+    f.close()
+
+    
+def main():
+    subgenerate("test_jeanzay")
+    subgenerate("test_irene")
+
+if __name__== "__main__":
+  main()
Index: XIOS/trunk/html/generate_test_table.js
===================================================================
--- XIOS/trunk/html/generate_test_table.js	(revision 1790)
+++ XIOS/trunk/html/generate_test_table.js	(revision 1790)
@@ -0,0 +1,491 @@
+var dict = {"-1": "&#10060;", "0": "&#10062;", "1": "&#9989;"}
+
+// var bg_color = ["#84c5ff", "#96cdff", "#a1d3ff", "#b3dafd", "#c2e1fd"]
+
+function generateTestTable()
+{
+  var machine_list=[];
+  var machine_revision_list=[];
+  var machine_full_name_list=[];
+  var machine_info_list=[];
+
+  if(typeof test_jeanzay_revision_list != 'undefined') 
+  {
+    machine_list.push("jeanzay");
+    machine_revision_list.push("test_jeanzay_revision_list")
+    machine_full_name_list.push("Jean-Zay")
+    machine_info_list.push("test_jeanzay_info_list")
+  }
+  
+  if (typeof test_irene_revision_list != 'undefined') 
+  {
+    machine_list.push("irene");
+    machine_revision_list.push("test_irene_revision_list")
+    machine_full_name_list.push("Irene")
+    machine_info_list.push("test_irene_info_list")
+  }
+  
+  if (typeof test_other_revision_list != 'undefined') 
+  {
+    machine_list.push("other");
+    machine_revision_list.push("test_other_revision_list")
+    machine_full_name_list.push("Other")
+    machine_info_list.push("test_other_info_list")
+  }
+
+  var revision_list=[]
+
+  for (var i=0; i<machine_list.length; i++)
+  {
+    tmp_list = eval(machine_revision_list[i])
+
+    for (var j=0; j<tmp_list.length; j++)
+    {
+      if (revision_list.includes(tmp_list[j]) == false)
+      {
+        revision_list.push(tmp_list[j])
+      }
+    }
+  }
+
+  revision_list.sort(function(a, b){return b-a});
+  
+  
+  // Generate select list for compile table
+
+  var sel = document.getElementById("test_revision");
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var opt = document.createElement('option');
+    opt.appendChild( document.createTextNode(revision_list[i]) );
+    opt.value = revision_list[i]; 
+    sel.appendChild(opt); 
+  }
+  
+  // Generate content of compile table
+  
+  var table = document.getElementById("test_table")
+  table.style.backgroundColor = "#84c5ff";
+  table.setAttribute("class", "test_table")
+  table.setAttribute("id", "test_table")
+
+  var titelRow = document.getElementById("test_table_row0")
+  var myCell = document.createElement("TD");
+  myCell.style.minWidth="150px"
+  myCell.style.maxWidth="150px"
+  myCell.innerHTML = ("Revision");
+  titelRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.style.minWidth="50px"
+    myCell.innerHTML = (machine_full_name_list[machine_index]);
+    titelRow.appendChild(myCell)
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+
+    var myRow = document.createElement("TR");
+    myRow.setAttribute("id", "test_table_"+revision);
+    myRow.setAttribute("class", "test_table_row");
+    
+    var myCell = document.createElement("TD");
+    myCell.innerHTML = (revision);
+    myCell.style.fontWeight = "bold";
+    myRow.appendChild(myCell)
+    
+    for( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var myCell = document.createElement("TD");
+      myCell.setAttribute("id", "test_table_"+revision+"_"+machine);
+      myRow.appendChild(myCell)
+      myRow.appendChild(myCell)
+    }        
+    table.appendChild(myRow)
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+    for (var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var has_test_info=false
+      tmp_info = eval(machine_info_list[j])
+      for (var k=0; k<eval(machine_info_list[j]).length; k++)
+      {
+        target_info = tmp_info[k]
+        if (target_info[0] == revision && target_info[1] == machine)
+        {
+          fillSubTestTable(revision, machine, target_info[2], target_info[3], target_info[4], target_info[5], target_info[6], target_info[7])
+          has_test_info = true
+        }
+      }
+      if (!has_test_info)
+      {
+        console.log("revision ",revision, "machine ",machine," has no test information")
+        var myTD = document.getElementById("test_table_"+revision+"_"+machine);
+        myTD.innerHTML = "No Test Information"
+        myTD.style.color = "white"
+      }
+    }
+  }
+  update_status()
+}
+
+function fillSubTestTable(revision, machine, build_dir, branch_name, machine_name, arch_name, mode_name, full_dir)
+{
+  var info_list = eval("test_"+machine+"_"+revision+"_"+build_dir.replace("build_",""))
+
+  var myTD = document.getElementById("test_table_"+revision+"_"+machine);
+  var mySubTable = document.createElement("table")
+  myTD.appendChild(mySubTable)
+  mySubTable.style.minWidth="200px"
+  mySubTable.setAttribute("class", "test_sub_table")
+  mySubTable.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+
+  myRow = document.createElement("tr")
+  myRow.setAttribute("id","test_sub_table_row_"+revision+"_"+machine+"_"+build_dir)
+  myRow.setAttribute("class","test_sub_table_row_"+revision+"_"+machine)
+  myRow.classList.add("build_level")
+  myCell = document.createElement("td")
+  myCell.innerHTML = build_dir.replace("build_","")
+  myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir)}
+  myRow.appendChild(myCell)
+  mySubTable.append(myRow)
+
+  myCell = document.createElement("td")
+  myCell_1 = document.createElement("div")
+  myCell_1.setAttribute("class", "dropdown")
+  myCell_2 = document.createElement("button")
+  myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")}
+  myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")}
+  myCell_2.innerHTML=("&#128270;")
+  myCell_3 = document.createElement("div")
+  myCell_3.setAttribute("class", "dropdown-content")
+  myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")
+  myCell_4 = document.createElement("a")
+  myCell_4.innerHTML = ("show plein report")
+  myCell_4.onclick = function() {show_plein_report(machine, revision, build_dir)}
+  myCell_5 = document.createElement("a")
+  myCell_5.innerHTML = ("show xios info")
+  myCell_5.onclick = function() {show_text("<table><tr><td>Branch</td><td><em>"+branch_name+"</em></td></tr><tr><td>Revision</td><td><em>"+revision+"</em></td></tr><tr><td>Machine</td><td><em>"+machine_name+"</em></td></tr><tr><td>Architecture</td><td><em>"+arch_name+"</em></td></tr><tr><td>Compile mode</td><td><em>"+mode_name+"</em></td></tr><tr><td>Full build directory</td><td><em>"+full_dir+"</em></td></tr><tr><td>Short build directory</td><td><em>"+build_dir+"</em></td></tr></table>")}
+  myCell_2.appendChild(myCell_3)
+  myCell_3.appendChild(myCell_4)
+  myCell_3.appendChild(myCell_5)
+  myCell_1.appendChild(myCell_2)
+  myCell.appendChild(myCell_1)
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<2; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.setAttribute("class", "cell_to_update")
+  myCell.setAttribute("id","test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_status")
+  myCell.innerHTML = 1
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  var previous_status=["","","",""]
+  var current_status=info_list[0]
+  for(var i=0; i<info_list.length; i++)
+  {
+    current_status = info_list[i]
+    if (current_status[0] != previous_status[0])
+    {
+      create_rows(3, revision, machine, build_dir, current_status, full_dir)
+    }
+    else if (current_status[1] != previous_status[1])
+    {
+      create_rows(2, revision, machine, build_dir, current_status, full_dir)
+    }
+    else if (current_status[2] != previous_status[2])
+    {
+      create_rows(1, revision, machine, build_dir, current_status, full_dir)
+    }
+    previous_status = current_status
+  }
+
+
+}
+
+
+function create_rows(nb, revision, machine, build_dir, status, full_dir)
+{
+  tt = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+  if(nb==3)
+  {
+    // algo level
+
+    myRow = document.createElement("tr")
+    myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+    myRow.classList.add('algo_level');
+    myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])
+    myRow.style.display = "none";
+    tt.appendChild(myRow)
+    
+    
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = status[0]
+    myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])}
+    myRow.appendChild(myCell)
+
+    myCell = document.createElement("td")
+    myCell_1 = document.createElement("div")
+    myCell_1.setAttribute("class", "dropdown")
+    myCell_2 = document.createElement("button")
+    myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")}
+    myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")}
+    myCell_2.innerHTML=("&#128270;")
+    myCell_3 = document.createElement("div")
+    myCell_3.setAttribute("class", "dropdown-content")
+    myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")
+    myCell_4 = document.createElement("a")
+    myCell_4.innerHTML = ("show user_params.def")
+    myCell_4.onclick = function() {show_user_params(machine, revision, build_dir, status[0])}
+    myCell_5 = document.createElement("a")
+    myCell_5.innerHTML = ("show location")
+    myCell_5.onclick = function() {show_text(full_dir.replace(build_dir, "GENERIC_TESTCASE/")+status[0])}
+    myCell_2.appendChild(myCell_3)
+    myCell_3.appendChild(myCell_4)
+    myCell_3.appendChild(myCell_5)
+    myCell_1.appendChild(myCell_2)
+    myCell.appendChild(myCell_1)
+    myRow.appendChild(myCell)
+
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = 1
+    myCell.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_status")
+    myCell.setAttribute("class", "cell_to_update")
+    myRow.appendChild(myCell)
+    
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+  }
+
+  if(nb>=2)
+  {
+    // config level
+
+    myRow = document.createElement("tr")
+    myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])
+    myRow.classList.add("config_level")
+    myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])
+    myRow.style.display = "none";
+    tt.appendChild(myRow)
+    
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = status[1]
+    myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])}
+    myRow.appendChild(myCell)
+
+    myCell = document.createElement("td")
+    myCell_1 = document.createElement("div")
+    myCell_1.setAttribute("class", "dropdown")
+    myCell_2 = document.createElement("button")
+    myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")}
+    myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")}
+    myCell_2.innerHTML=("&#128270;")
+    myCell_3 = document.createElement("div")
+    myCell_3.setAttribute("class", "dropdown-content")
+    myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")
+    myCell_4 = document.createElement("a")
+    myCell_4.innerHTML = ("show all_param.def")
+    myCell_4.onclick = function() {show_all_params(machine, revision, build_dir, status[0], status[1])}
+    myCell_5 = document.createElement("a")
+    myCell_5.innerHTML = ("show location")
+    myCell_5.onclick = function() {show_text(full_dir.replace(build_dir, "GENERIC_TESTCASE/")+status[0]+"/"+status[1])}
+    myCell_2.appendChild(myCell_3)
+    myCell_3.appendChild(myCell_4)
+    myCell_3.appendChild(myCell_5)
+    myCell_1.appendChild(myCell_2)
+    myCell.appendChild(myCell_1)
+    myRow.appendChild(myCell)
+
+
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = 1
+    myCell.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_status")   
+    myCell.setAttribute("class", "cell_to_update")
+    myRow.appendChild(myCell)
+    
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  // file level
+
+  myRow = document.createElement("tr")
+  myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])
+  myRow.classList.add("file_level")
+  myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_"+status[2])
+  myRow.style.display = "none";
+  tt.appendChild(myRow)
+    
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.innerHTML = status[2]
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.setAttribute("class", "cell_to_update")
+  myCell.innerHTML = status[3]
+  myRow.appendChild(myCell)
+
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+    
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+
+}
+
+function update_status()
+{
+  var cells = document.getElementsByClassName("cell_to_update")
+  for (var i=0; i<cells.length; i++)
+  {
+    cells[i].innerHTML = dict[cells[i].innerHTML]
+  }
+}
+
+function mytoggle(classname)
+{
+  var myCells = document.getElementsByClassName(classname)
+  for (var i=0; i<myCells.length; i++)
+  {
+    var mySubCells = document.getElementsByClassName(myCells[i].id)
+    if (myCells[i].style.display=="table-row")
+    {
+      myCells[i].style.display="none" 
+      for(var j=0; j<mySubCells.length; j++)
+      {
+        mySubCells[j].style.display="none"
+        var mySubSubCells = document.getElementsByClassName(mySubCells[j].id)
+        for(var k=0; k<mySubSubCells.length; k++)
+        {
+          mySubSubCells[k].style.display="none"
+        }
+      }
+    }
+    else
+    {
+      myCells[i].style.display="table-row"
+    }
+  }
+}
+
+// function build_level_toggle(classname)
+// {
+//   var myCells = document.getElementsByClassName(classname)
+//   for (var i=0; i<myCells.length; i++)
+//   {
+//     var mySubCells = document.getElementsByClassName(myCells[i].id)
+//     if (myCells[i].style.display=="table-row")
+//     {
+//       myCells[i].style.display="none" 
+//       for(var j=0; j<mySubCells.length; j++)
+//       {
+//         mySubCells[j].style.display="none"
+//         var mySubSubCells = document.getElementsByClassName(mySubCells[j].id)
+//         for(var k=0; k<mySubSubCells.length; k++)
+//         {
+//           mySubSubCells[k].style.display="none"
+//         }
+//       }
+//     }
+//     else
+//     {
+//       myCells[i].style.display="table-row"
+//     }
+//   }
+// }
+
+// function algo_level_toggle(classname)
+// {
+//   var myCells = document.getElementsByClassName(classname)
+//   for (var i=0; i<myCells.length; i++)
+//   {
+//     var mySubCells = document.getElementsByClassName(myCells[i].id)
+//     if (myCells[i].style.display=="table-row")
+//     {
+//       myCells[i].style.display="none" 
+//       for(var j=0; j<mySubCells.length; j++)
+//       {
+//         mySubCells[j].style.display="none"
+//       }
+//     }
+//     else
+//     {
+//       myCells[i].style.display="table-row"
+//     }
+//   }
+// }
+
+// function config_level_toggle(classname)
+// {
+//   var myCells = document.getElementsByClassName(classname)
+//   for (var i=0; i<myCells.length; i++)
+//   {
+//     if (myCells[i].style.display=="table-row")
+//     {
+//       myCells[i].style.display="none" 
+//     }
+//     else
+//     {
+//       myCells[i].style.display="table-row"
+//     }
+//   }
+// }
Index: XIOS/trunk/html/graph.html
===================================================================
--- XIOS/trunk/html/graph.html	(revision 1790)
+++ XIOS/trunk/html/graph.html	(revision 1790)
@@ -0,0 +1,1165 @@
+<html>
+
+<!--
+ ##########################################################################
+ Author: Patrick.Brockmann@cea.fr
+ ##########################################################################
+-->
+
+<head>
+
+    <meta charset="utf-8">
+
+    <style type="text/css">
+        body {
+            font-family: arial;
+            font-size: 12px;
+        }
+
+        .row {
+            margin-top: 10px;
+            margin-bottom: 20px;
+        }
+
+        #mynetwork {
+            width: 1000px;
+            height: 1000px;
+            border: 1px solid lightgray;
+        }
+
+        #mynetwork1 {
+            width: 200px;
+            height: 200px;
+            border: 1px solid lightgray;
+        }
+
+        input {
+            padding: 10px;
+        }
+
+        ul li {
+            display: inline;
+            border: 1px solid gray;
+            padding: 4px;
+            margin: 2px;
+            border-radius: 4px;
+        }
+
+        .btn {
+            margin-top: 5px;
+        }
+
+        /* /!\ Use border-top-color not border-color for firefox compatibility */
+    </style>
+
+</head>
+
+<body>
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+
+    <script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>
+    <link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet" type="text/css" />
+
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
+    <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" />
+
+    <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
+    <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
+
+    <script type="text/javascript">
+
+        //######################################################################################################
+        $(document).ready(function() {
+
+            var container = $('#mynetwork')[0];
+            var container1 = $('#mynetwork1')[0];
+
+            //===========================================================
+            $('#file').on('change', function() {
+                var file = $("#file").prop('files')[0];
+                handleFileSelect(file);
+            });
+
+            //===========================================================
+            $('#lastTemporal').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                if (node.class == 5) //temporal filter
+                {
+                    // disable all parents
+                    node.hidden = true;
+                    console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                    nodes.update(node);
+
+                    var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                    for (j = 0; j < connectedEdgeArray.length; j++) {
+                        var edge = connectedEdgeArray[j];
+                        if (edge.to == node.id) {
+                            edge.hidden = true;
+                        }
+
+                    }
+                    edges.update(connectedEdgeArray);
+
+                    var allNode = nodes.get(allParentsNode);
+                    for (i = 0; i < allNode.length; i++) {
+                        var node = allNode[i];
+                        node.hidden = true;
+                    }
+                    nodes.update(allNode);
+
+                    for (i = 0; i < allNode.length; i++) {
+                        var node = allNode[i];
+
+                        var cNodes = nodes.get(network.getConnectedNodes(node.id, 'to'));
+                        for (j = 0; j < cNodes.length; j++) {
+                            var cnode = cNodes[j];
+
+                            if (cnode.hidden != true) {
+                                node.hidden = false;
+                                nodes.update(node);
+                                break;
+                            }
+                        }
+                    }
+                    nodes.update(allNode);
+
+                    node = nodes.get(nodeSelected);
+                    node.hidden = false;
+                    console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                    nodes.update(node);
+
+                    allNode = nodes.get();
+                    nodes.update(allNode);
+
+
+
+                    // enable last input
+                    var inputnodes = network.getConnectedNodes(node.id, 'from');
+                    var repere = 0;
+                    for (i = 0; i < inputnodes.length; i++) {
+                        repere = Math.max(repere, nodes.get(inputnodes[i]).id);
+                    }
+                    var inputnode = nodes.get(repere);
+                    console.log("last inputnode id = ", inputnode.id);
+
+                    inputnode.hidden = false;
+                    nodes.update(inputnode);
+
+                    var edges_ofinputnode = edges.get(network.getConnectedEdges(inputnode.id));
+                    for (i = 0; i < edges_ofinputnode.length; i++) {
+                        var edge = edges_ofinputnode[i];
+                        if (edge.from == inputnode.id) {
+                            edge.hidden = false;
+                        }
+                    }
+                    edges.update(edges_ofinputnode);
+
+                    var allNode = nodes.get();
+                    nodes.update(allNode);
+
+                }
+
+
+            });
+
+
+            //===========================================================
+            $('#showGraph').on('click', function() {
+                //===== hide all except selected
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != true) {
+                        node.hidden = true;
+                    }
+                }
+
+                nodes.update(allNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = false;
+                nodes.update(node);
+
+                //===== enable all parents
+                console.log("showAllParents: allParentsNode = ", allParentsNode);
+                allNode = nodes.get(allParentsNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+                //===== enable all children
+                allNode = nodes.get(allChildNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+
+                network1 = new vis.Network(container1, data);
+
+
+            });
+
+
+
+            //===========================================================
+            $('#disableAll').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != true) {
+                        node.hidden = true;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#enableAll').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != false) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+
+                var allEdge = edges.get();
+                for (i = 0; i < allEdge.length; i++) {
+                    var edge = allEdge[i];
+
+                    if (edge.hidden != false) {
+                        edge.hidden = false;
+                    }
+                }
+                edges.update(allEdge);
+
+            });
+
+
+
+            //===========================================================
+            $('#enableInput').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.class == 1) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+
+            //===========================================================
+            $('#enableOutput').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.class >= 6 || node.filled == 1) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#hideNode').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                node.color = {
+                    background: transparentNode.background,
+                    border: transparentNode.border,
+                    highlight: {
+                        background: transparentNode.border,
+                        border: 'blue'
+                    }
+                }
+                node.font = {
+                    color: transparentNode.background
+                }
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (i = 0; i < connectedEdgeArray.length; i++) {
+                    var edge = connectedEdgeArray[i];
+
+                    edge.color = {
+                        color: transparentEdge.color,
+                        highlight: transparentEdge.color,
+                        hover: transparentEdge.color,
+                    }
+                    edge.font = {
+                        size: 0
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+            });
+
+
+            //===========================================================
+            $('#showNode').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                node.font = {
+                    color: 'black'
+                }
+                if (node.filled == 1) {
+                    node.color = {
+                        background: redNode.background,
+                        border: redNode.border,
+                        hover: redNode.background,
+                        highlight: {
+                            background: redNode.background,
+                            border: 'blue'
+                        }
+                    }
+                } else {
+                    node.color = {
+                        background: styleArr[node.class].background,
+                        border: styleArr[node.class].border,
+                        highlight: {
+                            background: styleArr[node.class].background,
+                            border: 'blue'
+                        }
+                    }
+                }
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (i = 0; i < connectedEdgeArray.length; i++) {
+
+                    var edge = connectedEdgeArray[i];
+
+                    edge.color = {
+                        color: 'black',
+                        highlight: 'black',
+                        hover: 'black',
+                    }
+                    edge.font = {
+                        size: 14,
+                    }
+                }
+                edges.update(connectedEdgeArray);
+            });
+
+
+            //===========================================================
+            $('#enableParents').on('click', function() {
+                console.log("enableParents: ", allParentsNode);
+
+                var node = nodes.get(nodeSelected);
+
+                var connectedParents = nodes.get(network.getConnectedNodes(node.id, "from"));
+                console.log("connectedParents = ", connectedParents);
+
+                for (i = 0; i < connectedParents.length; i++) {
+                    var node = connectedParents[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+                nodes.update(connectedParents);
+            });
+
+
+
+            //===========================================================
+            $('#enableAllParents').on('click', function() {
+                console.log("showAllParents: allParentsNode = ", allParentsNode);
+                var allNode = nodes.get(allParentsNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                var node = nodes.get(nodeSelected);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+            });
+
+
+
+
+            //===========================================================
+            $('#disableAllParents').on('click', function() {
+                console.log("disableAllParents: ", allParentsNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = true;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = true;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var allNode = nodes.get(allParentsNode);
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.hidden = true;
+                }
+                nodes.update(allNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    var cNodes = nodes.get(network.getConnectedNodes(node.id, 'to'));
+                    for (j = 0; j < cNodes.length; j++) {
+                        var cnode = cNodes[j];
+
+                        if (cnode.hidden != true) {
+                            node.hidden = false;
+                            nodes.update(node);
+                            break;
+                        }
+                    }
+                }
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#enableChild').on('click', function() {
+                console.log("enableChild: ", allChildNode);
+                var node = nodes.get(nodeSelected);
+
+                var connectedChild = nodes.get(network.getConnectedNodes(node.id, "to"));
+                console.log("connectedChild = ", connectedChild);
+
+                for (i = 0; i < connectedChild.length; i++) {
+                    var node = connectedChild[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+                nodes.update(connectedChild);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+            });
+
+
+
+            //===========================================================
+            $('#enableAllChild').on('click', function() {
+                console.log("enableAllChild: ", allChildNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var edgesforupdate = [];
+                var count=0;
+
+
+                var allNode = nodes.get(allChildNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                    var decendentEdges = edges.get(network.getConnectedEdges(node.id)); 
+                    for (j = 0; j < decendentEdges.length; j++) {
+                        if (decendentEdges[j].from == node.id) {
+                            edgesforupdate[count] = decendentEdges[j];
+
+                            edgesforupdate[count].hidden = false;
+                            count++;
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+                edges.update(edgesforupdate);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+                
+
+            });
+
+            //===========================================================
+            $('#disableAllChild').on('click', function() {
+                console.log("disableAllChind: ", allChildNode);
+                var node = nodes.get(nodeSelected);
+                node.hidden = true;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = true;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var edgesforupdate = [];
+                var count=0;
+
+                var allNode = nodes.get(allChildNode);
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.hidden = true;
+                }
+                nodes.update(allNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    var pNodes = nodes.get(network.getConnectedNodes(node.id, 'from'));
+                    for (j = 0; j < pNodes.length; j++) {
+                        var pnode = pNodes[j];
+
+                        if (pnode.hidden != true) {
+                            node.hidden = false;
+                            nodes.update(node);
+                            break;
+                        }
+                    }
+                    var decendentEdges = edges.get(network.getConnectedEdges(node.id)); 
+                    for (j = 0; j < decendentEdges.length; j++) {
+                        if (decendentEdges[j].from == node.id) {
+                            edgesforupdate[count] = decendentEdges[j];
+
+                            edgesforupdate[count].hidden = true;
+                            count++;
+                        }
+                    }
+                }
+                nodes.update(allNode);
+                edges.update(edgesforupdate);
+
+                node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+            });
+
+            //===========================================================
+            var shapeArr = [
+                'box',
+                'ellipse',
+                'ellipse',
+                'ellipse',
+                'box',
+                'ellipse'
+            ];
+
+            var styleArr = {
+                1: {
+                    background: 'LightSlateGray',
+                    border: 'SlateGray',
+                    shape: 'box'
+                },
+                2: {
+                    background: 'Khaki',
+                    border: 'DarkKhaki',
+                    shape: 'ellipse'
+                },
+                3: {
+                    background: 'Orchid',
+                    border: 'DarkOrchid',
+                    shape: 'ellipse'
+                },
+                4: {
+                    background: 'Orange',
+                    border: 'DarkOrange',
+                    shape: 'ellipse'
+                },
+                5: {
+                    background: 'YellowGreen',
+                    border: 'OliveDrab',
+                    shape: 'box'
+                },
+                6: {
+                    background: 'LightGray',
+                    border: 'Gray',
+                    shape: 'ellipse'
+                },
+                7: {
+                    background: 'LightBlue',
+                    border: 'Gray',
+                    shape: 'ellipse'
+                }
+            }
+
+            var transparentNode = {
+                background: 'white',
+                border: 'LightGray'
+            }
+
+            var redNode = {
+                background: 'Red',
+                border: 'DarkRed'
+            }
+
+            var transparentEdge = {
+                color: '#00000000',
+                font: 0
+            }
+
+            var nbClass = shapeArr.length;
+
+            //===========================================================
+            var node;
+            var nodes;
+            var edges;
+            var network;
+
+
+            //==================================================
+            var allParentsNode = [];
+            var allChildNode = [];
+
+            var allParentsEdge = [];
+            var allChildEdge = [];
+
+            //===========================================================
+            function handleFileSelect(file) {
+
+                if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
+                    alert('The File APIs are not fully supported in this browser.');
+                    return;
+                }
+
+
+                var reader = new FileReader();
+                var json;
+
+                reader.onload = (function(file) {
+                    return function(e) {
+                        //console.log('e readAsText = ', e);
+                        //console.log('e readAsText target = ', e.target);
+                        try {
+                            //==================================================
+                            json = JSON.parse(e.target.result);
+                            //alert('json global var has been set to parsed json of this file here it is unevaled = \n' + JSON.stringify(json));
+
+                            //==================================================
+                            json.nodes.forEach(function(node, index) {
+                                var classVal = node.class;
+                                var typeVal = node.type;
+                                var entryVal = node.entry;
+                                var attrVal = node.attributes;
+                                var inputsVal = node.inputs;
+                                var labelVal = node.label;
+                                var cidVal = node.cid;
+                                var distVal = node.distance;
+                                var nbinVal = node.nbin;
+                                var nboutVal = node.nbout;
+
+                                node.color = {
+                                    background: styleArr[classVal].background,
+                                    border: styleArr[classVal].border,
+                                    hover: styleArr[classVal].background,
+                                    highlight: {
+                                        background: styleArr[classVal].background,
+                                        border: 'blue'
+                                    }
+                                }
+
+                                node.shape = styleArr[classVal].shape;
+
+                                if (node.class == 1 || node.class >= 6)
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>field attributes : </br>" + attrVal + "</br>filter entry nb = " + entryVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+                                else if (node.class == 5)
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>filter type = " + typeVal + "</br> entry nb = " + entryVal + "</br> inputs_complete = " + inputsVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+                                else
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>filter entry nb = " + entryVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+
+                                if (node.filled == 1) {
+                                    node.title += "</br></br> filter has no child!!!</br>" + "</br>field attributes : </br>" + attrVal + "</br> entry nb = " + entryVal;
+                                    node.color = {
+                                        background: 'Red',
+                                        border: 'DarkRed',
+                                        hover: 'Red',
+                                        highlight: {
+                                            background: 'Red',
+                                            border: 'blue'
+                                        }
+                                    }
+                                }
+
+                                node.level = distVal;
+
+                                if (node.class >= 6 || node.filled == 1) node.hidden = true;
+                                else node.hidden = true;
+
+                            });
+
+                            //==================================================
+                            json.edges.forEach(function(node, index) {
+                                var dateVal = node.date;
+                                var fidVal = node.fid;
+                                var fnameVal = node.fname;
+                                var gidVal = node.gid;
+                                var attVal = node.attributes;
+                                var idVal = node.id
+
+                                node.title = "id = " + idVal + "</br>field attributes : </br>" + attVal + "</br> date = " + dateVal;
+
+                            });
+
+                            //==================================================
+                            nodes = new vis.DataSet();
+                            nodes.add(json.nodes);
+
+                            edges = new vis.DataSet();
+                            edges.add(json.edges);
+
+                            //==================================================
+                            var data = {
+                                nodes: nodes,
+                                edges: edges
+                            };
+
+                            //==================================================
+                            var options = {
+                                edges: {
+                                    smooth: false,
+                                    arrows: 'to',
+                                    font: {
+                                        align: 'middle',
+                                        size: 14,
+                                    },
+                                    color: {
+                                        color: 'black',
+                                        highlight: 'black',
+                                        hover: 'black',
+                                    }
+                                },
+                                physics: {
+                                    enabled: false
+                                },
+                                nodes: {
+                                    borderWidth: 2
+                                },
+                                interaction: {
+                                    hover: true
+                                },
+                                layout: {
+                                    hierarchical: {
+                                        enabled: true,
+                                        direction: "LR",
+                                        sortMethod: "directed",
+                                        levelSeparation: 300,
+                                        nodeSpacing: 80,
+                                        treeSpacing: 100,
+                                        blockShifting: true,
+                                        edgeMinimization: true
+                                    }
+                                },
+
+
+                            };
+
+                            //==================================================
+                            network = new vis.Network(container, data, options);
+                            //network1 = new vis.Network(container1, data, options);
+                            
+
+
+
+                            //==================================================
+                            Array.prototype.unique = function() {
+                                var a = this.concat();
+                                for (var i = 0; i < a.length; ++i) {
+                                    for (var j = i + 1; j < a.length; ++j) {
+                                        if (a[i] === a[j])
+                                            a.splice(j--, 1);
+                                    }
+                                }
+                                return a;
+                            };
+
+                            //==================================================
+                            function findAllParents(nodesArray) {
+                                if (nodesArray.length == 0) {
+                                    return 1;
+                                }
+                                var parentsArray = network.getConnectedNodes(nodesArray[0], 'from');
+                                //console.log('node ', nodesArray[0], 'has ', parentsArray);
+                                nodesArray = nodesArray.concat(parentsArray).unique();
+                                //console.log('---> ', nodesArray);
+                                allParentsNode = allParentsNode.concat(nodesArray[0]).unique();
+
+
+                                nodesArray.splice(0, 1);
+                                return findAllParents(nodesArray);
+                            }
+
+                            //==================================================
+                            function findAllChild(nodesArray) {
+                                if (nodesArray.length == 0) {
+                                    return 1;
+                                }
+                                var childArray = network.getConnectedNodes(nodesArray[0], 'to');
+                                //console.log('node ', nodesArray[0], 'has ', childArray);
+                                nodesArray = nodesArray.concat(childArray).unique();
+                                //console.log('---> ', nodesArray);
+                                allChildNode = allChildNode.concat(nodesArray[0]).unique();
+                                nodesArray.splice(0, 1);
+                                return findAllChild(nodesArray);
+                            }
+
+                            //==================================================
+                            function getEdgeConnections(node) {
+                                var connectedEdgeArray = network.getConnectedEdges(node);
+                            }
+
+                            //==================================================
+                            network.on("click", function(params) {
+                                params.event = "[original event]";
+                                console.log('__________________________');
+                                nodeSelected = this.getNodeAt(params.pointer.DOM);
+                                if (nodeSelected === undefined) return 0;
+
+                                var node = nodes.get(nodeSelected);
+
+                                var connectedChild = nodes.get(network.getConnectedNodes(node.id, "to"));
+                                console.log('------->', connectedChild.length);
+                                if (connectedChild.length == 0) {
+                                    $('#enableAllChild').attr("disabled", true);
+                                } else {
+                                    $('#enableAllChild').attr("disabled", false);
+                                }
+
+                                var connectedEdgeArray = getEdgeConnections(nodeSelected);
+
+                                //--------------------------
+                                var parentsArray = network.getConnectedNodes(nodeSelected, 'from');
+
+
+                                allParentsNode = [nodeSelected];
+                                findAllParents(parentsArray);
+                                // remove selected node
+                                var index = allParentsNode.indexOf(nodeSelected);
+                                if (index !== -1) allParentsNode.splice(index, 1);
+                                console.log('Final parents: ', allParentsNode);
+
+
+                                //--------------------------
+                                var node = this.getNodeAt(params.pointer.DOM);
+                                var childArray = network.getConnectedNodes(nodeSelected, 'to');
+
+
+                                allChildNode = [nodeSelected];
+                                findAllChild(childArray);
+                                // remove selected node
+                                var index = allChildNode.indexOf(nodeSelected);
+                                if (index !== -1) allChildNode.splice(index, 1);
+                                console.log('Final child: ', allChildNode);
+
+
+                                //--------------------------
+                            });
+
+                        } catch (ex) {
+                            alert('ex when trying to parse json = ' + ex);
+                        }
+                    }
+                })(file);
+
+                reader.readAsText(file);
+
+            }
+
+            //######################################################################################################
+        });
+    </script>
+
+    <div class="container">
+
+        <div class="row">
+            <label class="btn btn-primary" for="file">
+                <input type="file" id="file" style="display:none" onchange="$('#upload-file-info').html(this.files[0].name)">
+                Load a JSON XIOS file
+            </label>
+            <button type="button" class="btn btn-default disabled" id="upload-file-info">...</button>
+        </div>
+
+        <div class="row">
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="showNode">Show node</button>
+                <button type="button" class="btn btn-success" id="hideNode">Hide node</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAll">Enable all</button>
+                <button type="button" class="btn btn-success" id="disableAll">Disable all</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableParents">Enable parents</button>
+                <button type="button" class="btn btn-success" id="enableChild">Enable children</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAllParents">Enable all parents</button>
+                <button type="button" class="btn btn-success" id="disableAllParents">Disable all parents</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAllChild">Enable all children</button>
+                <button type="button" class="btn btn-success" id="disableAllChild">Disable all children</button>
+            </div>
+
+            <button type="button" class="btn btn-success" id="enableInput">Enable input</button>
+            <button type="button" class="btn btn-success" id="enableOutput">Enable output</button>
+
+            <button type="button" class="btn btn-success" id="lastTemporal">Enable last temporal input</button>
+            <button type="button" class="btn btn-success" id="showGraph">Show subgraph (and hide other)</button>            
+
+
+        </div>
+
+        <div class="row">
+            <div id="mynetwork"></div>
+            <div id="mynetwork1"></div>
+        </div>
+
+</body>
+
+</html>
Index: XIOS/trunk/html/xios-style.css
===================================================================
--- XIOS/trunk/html/xios-style.css	(revision 1790)
+++ XIOS/trunk/html/xios-style.css	(revision 1790)
@@ -0,0 +1,256 @@
+body
+{
+    font-family: Helvetica, sans-serif;
+}
+
+nav
+{
+    width:300px;
+    vertical-align: top;
+}
+
+section
+{
+    clear: both;
+    border:2px solid blue;
+    margin-top:50px;
+    vertical-align: top;
+}
+
+a
+{
+    display:block;
+}
+
+strong
+{
+    background-color:red;/* Fond rouge */
+    color:yellow;/* Texte de couleur jaune */
+}
+
+
+em
+{
+    font-weight: bold;
+    font-size: 1.2em;
+    text-align: right;
+}
+
+
+
+footer
+{
+    background-color: rgb(189, 184, 184);
+    border-width: medium;
+    border-style: dashed;
+    border-radius: 10px;
+    position: fixed;
+    bottom: 10px;
+    right: 10px;
+}
+
+
+td
+{
+    border: solid 1px white;
+}
+
+h1, h2
+{
+    text-align: center;
+}
+
+.dropbtn {
+    background-color:transparent;
+    border: none; 
+}
+
+.dropdown {
+    position: relative;
+    display: inline-block;
+}
+  
+.dropdown-content {
+    display: none;
+    position: absolute;
+    background-color: white;
+    min-width: 320px;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+    z-index: 1;
+    font-size: 1em;
+}
+  
+.dropdown-content a {
+    color: black;
+    padding: 5px 5px;
+    text-decoration: none;
+    display: block;
+}
+  
+.dropdown-content a:hover 
+{
+    background-color: #2e86c1;
+}
+    
+.dropdown:hover .dropbtn 
+{
+    background-color:#2e86c1;
+}
+
+.showit 
+{
+    display: block;
+}
+  
+
+.compile_table
+{
+    margin-left: 60px;
+    margin-bottom: 30px;
+    margin-top: 30px;
+}
+
+.compile_table td
+{
+    margin-left: 20px;
+    margin-bottom: 10px;
+    border: solid 1px white;
+    min-width: 150px;
+    text-align: center;
+}
+
+.test_table
+{
+    margin-left: 60px;
+    margin-bottom: 30px;
+    margin-top: 30px;
+}
+
+.test_table td
+{
+    margin-left: 20px;
+    margin-bottom: 10px;
+    border: solid 2px white;
+    /* min-width: 150px; */
+    text-align: center;
+}
+
+.test_sub_table
+{
+    /* margin-left: 10px; */
+    margin-bottom: 10px;
+    margin-top: 10px;
+}
+
+.test_sub_table td
+{
+    /* margin-left: 20px;
+    margin-bottom: 10px; */
+    border: solid 1px white;
+    /* min-width: 150px; */
+    text-align: left;
+}
+
+.test_sub_table .build_level
+{
+    background-color: #96cdff;
+}
+
+
+.test_sub_table .algo_level
+{
+    background-color: #a1d3ff;
+}
+
+.test_sub_table .config_level
+{
+    background-color: #b3dafd;
+}
+
+.test_sub_table .file_level
+{
+    background-color: #c2e1fd;
+}
+
+
+.split 
+{
+    height: 100%;
+    width: 50%;
+    position: absolute;
+}
+  
+/* Control the left side */
+.left 
+{
+    left: 0;
+}
+  
+/* Control the right side */
+.right 
+{
+    right: 0;
+}
+  
+.compile_table_row.hide
+{
+    display: none;
+}
+
+.compile_table_row.show
+{
+    display: "";
+}
+
+.test_table_row.hide
+{
+    display: none;
+}
+
+.test_table_row.show
+{
+    display: "";
+}
+  
+.table_jz
+{
+    border: solid 0.2px black;
+    margin: 20px;
+}
+
+.table_jz.hide
+{
+    display: none;
+}
+
+.table_jz.show
+{
+    display: "";
+}
+  
+
+.table_jz td
+{
+    border: solid 0.1px white;
+}
+
+.table_irene
+{
+    border: solid 0.2px black;
+    margin: 20px;
+}
+  
+.table_irene.hide
+{
+    display: none;
+}
+
+.table_irene.show
+{
+    display: "";
+}
+
+.table_irene td
+{
+    border: solid 0.1px white;
+}
Index: XIOS/trunk/html/xios_report.html
===================================================================
--- XIOS/trunk/html/xios_report.html	(revision 1790)
+++ XIOS/trunk/html/xios_report.html	(revision 1790)
@@ -0,0 +1,364 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <metacharset="utf-8"/>
+        <link rel="stylesheet" href="xios-style.css"/>
+        <title>XIOS Unit Tests Report - Le Site Web</title>
+        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
+        
+        <script src="compile_jeanzay_info.js" type="text/javascript"></script>
+        <script src="compile_irene_info.js" type="text/javascript"></script>
+        <script src="generate_compile_table.js" type="text/javascript"></script>
+
+        <script src="test_jeanzay_info.js" type="text/javascript"></script>
+        <script src="test_irene_info.js" type="text/javascript"></script>
+        <script src="generate_test_table.js" type="text/javascript"></script>
+    </head>
+
+    <body onload="generateCompileTable(); generateTestTable(); ">
+        
+        <header>
+            <h1>XIOS Unit Tests Report Web Page</h1>
+            <h2>(still under construction ... ...)</h2>
+        </header>
+
+        <nav>
+            <div id="navborder">
+                <p id="xiosinfo">Some useful links:</p>
+                <ul>
+                    <li><a href="https://forge.ipsl.jussieu.fr/ioserver/wiki" target="_blank">XIOS wiki page</a></li>
+                    <li><a href="graph.html" target="_blank">Workflow Graph</a></li>
+                </ul> 
+            </div>        
+        </nav> 
+
+    
+
+        <section>
+
+            <h2>Results of unit tests</h2>
+
+            <form method="post" style="margin-left: 25px;">
+
+                <p><label for="Build revision">Choose a revision number to show compile information : </label>
+                    <select name="revision" id="compile_revision">
+                        <option value="0" selected>All available revisions ...</option>
+                    </select>
+                </p>
+
+                <p><label for="Test revision">Choose a revision number to show test results : </label>
+                    <select name="test_revision" id="test_revision">
+                        <option value="0" selected>All available revisions ...</option>
+                    </select>
+                </p>
+
+                
+            </form>
+
+
+            <ul><li>&#10060; : compile failed / test failed</li><li>&#10062; : test result initialized</li><li>&#9989; : compile passed / test passed</li></ul>
+
+        </section>
+
+        <section>
+
+
+            <div>
+                <table id="compile_table" style="margin: 50px; border:solid 0.2px; ">
+                    <tr style="font-weight: bold;" id="compile_table_row0"></tr>
+                </table>
+            </div>    
+
+
+            <div>
+                <table id="test_table" style="margin: 50px; border:solid 0.2px; ">
+                    <tr style="font-weight: bold;" id="test_table_row0"></tr>
+                </table>
+            </div>
+
+
+            <!-- <div class="split left">
+                <div class="centered" id="div_table_jz">
+                </div>
+            </div>
+                  
+            <div class="split right">
+                <div class="centered" id="div_table_irene">
+                </div>
+            </div>  -->
+
+        </section>
+
+
+        <footer>
+            <p>Copyright XIOS - Tous droits rÃ©servÃ©s
+                <a href="mailto:xios-dev@forge.ipsl.jussieu.fr">Nous contacter !</a>
+            </p>
+        </footer>
+    </body>
+</html>
+ 
+<script>
+    // global variables for machine, def file location, and plein report prefix 
+    var machine_list=['Jean-Zay', 'Irene', 'Other'];
+    var location_list=["../Jean-Zay/", "../Irene/", "../Other"];
+    var plein_report_prefix_list=["jz_plein_report_", "irene_plein_report_", "other_plein_report_"];
+
+    var params = "scrollbars=yes,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=600,height=300,left=100,top=100";
+
+    function show_text(the_text) 
+    {
+        window.open("about:blank", "", params).document.write(the_text);  
+    }
+
+    function show_user_params(machine, revision, build_dir, algo)
+    {
+        var user_params = eval("test_"+machine+"_"+revision+"_"+algo+"_user_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">user_params.def for "+algo+"</p><p>"
+        for (var i=0; i<user_params.length; i++)
+        {
+            myText += user_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText);
+    }
+
+    function show_all_params(machine, revision, build_dir, algo, config)
+    {
+        var config_name = config.replace(/=/g,"_")
+        var all_params = eval("test_"+machine+"_"+revision+"_"+algo+"_"+config_name+"_all_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">all_param.def for "+algo+"/"+config+"</p><p>"
+        for (var i=0; i<all_params.length; i++)
+        {
+            myText += all_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText); 
+    }
+
+
+    function show_plein_report(machine, revision, build_dir)
+    {
+        var info_list = eval("test_"+machine+"_"+revision+"_"+build_dir.replace("build_",""))
+        var myText = "<p style=\"color:blue;\">Revision = "+revision+"</br>Machine = "+machine+"<br>Build_dir ="+build_dir+"</p>"
+        for (var i=0; i<info_list.length; i++)
+        {
+            myText+="<P>"
+            for (var j=0; j<4; j++)
+            {
+                myText+=info_list[i][j]+" "
+            }
+            myText+="</p>"
+        }
+        window.open("about:blank", "", params).document.write(myText);
+    }
+    
+    function show_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.add("showit")
+        }
+    }
+
+    function hide_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.remove("showit")
+        }
+    }
+    
+    
+</script>
+
+
+<script>
+
+$("#compile_revision").change(function() {
+
+    if(this.value == 0)
+    {
+        var ans = document.getElementsByClassName('compile_table_row')
+        for (var i = 0; i < ans.length; i++)
+        {
+            cell = ans[i]
+            cell.classList.remove('hide')
+            cell.classList.add('show')
+        }
+    }
+    
+    else
+    {
+        var ans = document.getElementsByClassName('compile_table_row')
+        for (var i = 0; i < ans.length; i++)
+        {
+            cell = ans[i]
+            cell.classList.remove('show')
+            cell.classList.add('hide')
+        }
+
+        var ans = document.getElementById('compile_table_'+this.value)
+        if(ans)
+        {
+            ans.classList.remove('hide')
+            ans.classList.add('show')
+        }  
+    }
+});
+ 
+</script>
+
+
+<script>
+
+    $("#test_revision").change(function() {
+    
+        if(this.value == 0)
+        {
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('hide')
+                cell.classList.add('show')
+            }
+        }
+        
+        else
+        {
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('show')
+                cell.classList.add('hide')
+            }
+    
+            var ans = document.getElementById('test_table_'+this.value)
+            if(ans)
+            {
+                ans.classList.remove('hide')
+                ans.classList.add('show')
+            }  
+        }
+    });
+     
+    </script>
+
+<script>
+    function level0_toggle(machine, my_revision) {
+        var level1_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_build_level")
+        for (var i = 0; i < level1_ans.length; i++) 
+        {
+            var cell = level1_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+
+            buildType = cell.getAttribute("data-build-type");
+            var level2_ans = document.getElementsByClassName(buildType+"_algo_level")
+            for (var j = 0; j < level2_ans.length; j++)
+            {
+                var cell = level2_ans[j]
+                cell.style.display = 'none'
+                algoType = cell.getAttribute("data-algo-type");
+                var level3_ans =  document.getElementsByClassName(algoType+"_config_level")
+                for (var k = 0; k < level3_ans.length; k++)
+                {
+                    var cell = level3_ans[k]
+                    cell.style.display = 'none'
+                    configType = cell.getAttribute("data-config-type")
+                    var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                    for (var h = 0; h<level4_ans.length; h++) 
+                    {
+                        level4_ans[h].style.display = "none"
+                    }
+                }
+            }    
+        }
+    }
+
+
+
+    function level1_toggle(machine, my_revision, build_dir) {
+        var level2_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_algo_level")
+        for (var i = 0; i < level2_ans.length; i++) 
+        {
+            var cell = level2_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            algoType = cell.getAttribute("data-algo-type")
+            var level3_ans = document.getElementsByClassName(algoType+"_config_level")
+            for (var j = 0; j < level3_ans.length; j++)
+            {
+                var cell = level3_ans[j]
+                cell.style.display = 'none'
+                configType = cell.getAttribute("data-config-type")
+                var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                for (var k = 0; k<level4_ans.length; k++) 
+                {
+                    level4_ans[k].style.display = "none"
+                }
+            }
+        }
+    }
+
+
+
+    function level2_toggle(machine, my_revision, build_dir, algo_name) {
+        var level3_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_config_level")
+        for (var i = 0; i < level3_ans.length; i++) 
+        {
+            var cell = level3_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'   
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            configType = cell.getAttribute("data-config-type")
+            var level4_ans = document.getElementsByClassName(configType+"_file_level")
+            for (var j = 0; j<level4_ans.length; j++) 
+            {
+                level4_ans[j].style.display = "none"
+            }
+        }
+    }
+
+
+    function level3_toggle(machine, my_revision, build_dir, algo_name, config_name) {
+        var level4_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_"+config_name+"_file_level")
+        for (var i = 0; i < level4_ans.length; i++) 
+        {
+            var cell = level4_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+        }
+    }
+
+    
+
+</script>
+
