//    (gH)   -_-  exemple3.js  ;  TimeStamp (unix) : 16 Octobre 2009 vers 15:13

// ###############################################################

function sousArbreDom(currentElement, depth,attr) {

// ###############################################################

  tdd  = typeof(depth) ;   if (tdd=="undefined") { depth = 1 }
  if (typeof(attr)=="undefined") { attr = 1 }

  rt = ""  // initialisation de la chaine à renvoyer

  // ceci constitue le critère d'arret

  if (currentElement) {

    var tagName=currentElement.tagName;

    // on écrit la balise comme <a>, <img>, etc
    if (tagName) {
       if (depth>=1) {
          rt += "<"+currentElement.tagName.toLowerCase()
          // il faut maintenant récupérer les attributs non nuls de la balise
          if (attr==1) {
             attrs = ""
             nbac  = currentElement.attributes.length
             if (nbac>0) {
             for (ida=0; ida<currentElement.attributes.length;ida++ ) {
                  curn = currentElement.attributes[ida].name
                  curv = currentElement.attributes[ida].value
                  ok   = 1
                  if (typeof(curv)=='undefined')   {  ok = 0 }
                  if (curv=='null')   {  ok = 0 }
                  if (!curv)          {  ok = 0 }
                  if (curv==null)     {  ok = 0 }
                  if (curv==0)        {  ok = 0 }
                  if (curv=='')       {  ok = 0 }
                  if (ok==1) {
                  attrs += " " + curn + "='" + curv + "'";
                 } // fin si
             } // fin pour
             } // fin si
             rt += attrs
          } // fin si
       } // fin si
    } else {
      cv = currentElement.nodeValue
      rt += cv
    } // fin de si

    if (tagName) {
       if (depth>=1) {
          rt += ">"
       } // fin si

    // traversée récursive de l'arbre

    var indc=0;
    var enfant=0;
    var currentElementChild=currentElement.childNodes[indc];
    while (currentElementChild)     {
      // traversée récursive du sous-arbre du noeud enfant
      rt += sousArbreDom(currentElementChild, depth+1,attr);
      indc++;
      currentElementChild=currentElement.childNodes[indc];
    } // fin de tant que

    // fermeture éventuelle de la balise

    if (tagName) {
       if (depth>=1) {
          rt += "</"+tagName.toLowerCase()+">";
       } // fin si
    } // fin si
  } // fin si

  } // fin de si currentElement

  return( rt )

} // fin de fonction sousArbreDom

// ###############################################################

function sousArbreDomGraphique(currentElement, depth,attr) {

// ###############################################################

  tdd = typeof(depth)
  if (tdd=="undefined") { depth = 1 }

  tda = typeof(attr)
  if (tda=="undefined") { attr = 1 }

  if (currentElement)   {

    // -------------------------------------------------------------

    var j;
    var tagName=currentElement.tagName;

    if (tagName) {

      ecrit_infos_sansrc("<"+currentElement.tagName.toLowerCase());
      if (attr==1) {
          // il faut maintenant récupérer les attributs non nuls de la balise
          attrs = ""
          nbac  = currentElement.attributes.length
          if (nbac>0) {
             for (ida=0; ida<currentElement.attributes.length;ida++ ) {
                  curn = currentElement.attributes[ida].name
                  curv = currentElement.attributes[ida].value
                  ok   = 1
                  if (typeof(curv)=='undefined')   {  ok = 0 }
                  if (curv=='null')   {  ok = 0 }
                  if (!curv)          {  ok = 0 }
                  if (curv==null)     {  ok = 0 }
                  if (curv==0)        {  ok = 0 }
                  if (curv=='')      {  ok = 0 }
                  if (ok==1) {
                  attrs += " " + curn + "='" + curv + "'";
                 } // fin si
             } // fin pour
             ecrit_infos_sansrc(attrs);
          } // fin si
      } // fin si
      ecrit_infos_sansrc(">");

    } else {
      // ==> ecrit_infos_sansrc("[unknown tag]")
      nv = currentElement.nodeValue;
      // ne pas afficher retour-charriot (code 10 mais [rc])
      if (nv.charCodeAt(0)==10) {
        ecrit_infos_sansrc("[rc]")
      } else {
        ecrit_infos_sansrc(nv)
      } // fin si
    } ; // fin si

    // ---------------- partie récursive -----------------------

    var i=0;
    var currentElementChild=currentElement.childNodes[i];
    while (currentElementChild) {
      ecrit_infos_sansrc("\n");
      for (j=0; j<depth; j++)       {
        ecrit_infos_sansrc("  |");
      } // fin pour
      if (tagName) {
        ecrit_infos_sansrc("--");
      } // fin si
      sousArbreDomGraphique(currentElementChild, depth+1,attr);
      i++;
      currentElementChild=currentElement.childNodes[i];
    } // fintant que

    // -------------------------------------------------------------

    if (tagName) {
       if (depth>=1) {
           ecrit_infos_sansrc("\n");

           for (j=0; j<depth-1; j++)     {
                ecrit_infos_sansrc("  |");
           } // fin pour
           if (depth>1) { ecrit_infos_sansrc("  "); }
       } // fin si
      ecrit_infos_sansrc("</"+tagName.toLowerCase()+">");
    } // fin si

    currentElement=0;

  } // fin si

} // fin de fonction sousArbreDomGraphique

// ###############################################################


