/* ---------------------------------------------------------------------------------
   Fenêtre de debugging, pour afficher divers informations en cours de développement
   de programmes javascript.

   Mémorise dans les cookies la position et la taille de la fenêtre, pour la faire réapparaître 
   à la même position et de la même taille que lors de sa dernière utilisation.

   DBW(string, nOptions);  permet d'écrire une chaine de caractères dans la fenêtre de debugging.
   DBBeep("");   permet d'émettre un son beep
   DBBeep("1");  permet d'émettre le son "un.mp3"
   DBBeep("2");  permet d'émettre le son "deux.mp3"
   DBBeep("3");  permet d'émettre le son "trois.mp3"
   DBBeep(strSon);  permet d'émettre le son du fichier strSon.  
                    Donc strSon doit être un string contenant le nom du fichier à jouer.

   nDBFlagsOpt peut être mis à divers valeurs pour des choix d'affichage.
     c.f. ncte...

   nDBFontSize indique la taille par défaut des caractères.  3 = normal.

   strDBjavascript  contient le nom du répertoire parent de la page web. Il peut être changé.

   Développé par Bernard Gisin :
   -------------------------------------------------------------------------------- */

// constantes de choix d'affichage.
var ncteDBBreak  = 256;  // fait un retour à la ligne
var ncteDBTime   = 512;  // affiche l'heure à la fin de la ligne
var ncteDBESC    = 1024; // n'interprète pas les balises HTML

var nDBFlagsOpt  = 511; // options d'affichage par défaut.

var nDBFontSize  = 3;  // taille pas défaut des caractères.

// par défaut, la page web se trouve dans le dossier ou un sous-dossier de "javascript".
var strDBjavascript = "javascript";

// position et taille de la fenêtre de debugging.  Sera redéfinit dans la fonction  LitWindowPos();
var strDBWindowSize = "";

var oDebugWin = null; // l'objet contenant la fenêtre de debugging.

function GetCookie (strName) {
//============================
// Lecture dans les cookies de la valeur du champ : strName
if (document.cookie.length == 0) return ""; // il n'y a pas de cookies

// récupère les informations bruts dans les cookies.
var strS = document.cookie;

// crée un tableau avec les différents cookies
//var astrData = strS.split(";");
//alert(astrData[0] + "..." + astrData[1] + "..." + astrData[2]);

var nDebut = strS.indexOf(strName + "=");
var nFin = 0;
if (nDebut == -1)  return "";

// lit la valeur du champ.
nFin = strS.indexOf(";", nDebut);
if (nFin == -1) nFin = strS.length;

return strS.substring(nDebut + strName.length+1, nFin);
} // GetCookie

function LitWindowPos () {
//========================
// Lecture dans les cookies de la taille et de la position de le debugging window

var strS = GetCookie("pixDBXPos");
if (strS != "") strDBWindowSize = "left=" + strS;
else            strDBWindowSize = "left=3";

strS =GetCookie("pixDBYPos");
if (strS != "") strDBWindowSize += ", top=" + strS;
else            strDBWindowSize += ", top=50";

strS =GetCookie("pixDBWidth");
if (strS != "") strDBWindowSize += ", width=" + strS;
else            strDBWindowSize += ", width=400";

strS =GetCookie("pixDBHeight");
if (strS != "") strDBWindowSize += ", height=" + strS;
else            strDBWindowSize += ", height=300";
} // LitWindowPos

function DebuggingWindowOpen() {
//==============================
// ouvre la debugging window, avec rien dedant.
if (!oDebugWin || !oDebugWin.document) 
   oDebugWin = window.open('','DebuggingWindow','resizable=yes,scrollbars=yes,menubar=no,' + strDBWindowSize);

oDebugWin.document.open();
oDebugWin.document.writeln("<html>");

// veux inclure le fichier javascript "DebWin.js" se trouvant dans la librairie.
var strPath = window.location.pathname;  // donne le chemin complet de cette page.
strPath = strPath.substring(0, strPath.indexOf(strDBjavascript));  // élimine la fin "javascript/..."
oDebugWin.document.writeln("<head><title>Debbuging Window</title><script langage='JavaScript' src='" + 
                            "librairie/DebWin.js'></script></head>");

// la debbuging window mémorise dans les cookies sa taille et sa position.
oDebugWin.document.writeln("<body bgcolor=white onresize='SetCookie()' onunload='SetCookie()'>");
oDebugWin.document.writeln("<font size=" + nDBFontSize + ">");

// La ligne ci-dessous doit exister pour que des sont puissent être joués 
oDebugWin.document.writeln("<DIV id='divDebWinBeep' style='position:absolute; left:1px; top:1px; width:1px; height:1px'></DIV>");

} // DebuggingWindowOpen

var strLocalSon = ''; // sera défini plus loin, pour jouer un son dans localDBBeep().

function localDBBeep() {
//======================
// Routine local, à ne pas appeler.  Fait un beep

if (oDebugWin && oDebugWin.document) {
  oDebugWin.document.getElementById("divDebWinBeep").innerHTML="<embed src='" + strLocalSon + "', height=50 width=100 hidden autoplay='true'>";
  }
} // LocalDBBeep

function DBBeep(strSon) {
//=======================
// fait un beep
// Si la debugging window est ouverte, cela fonctionne, sinon
// il faut avoir mis la ligne suivante dans le code HTML :
// <DIV id="divBeep" style="position:absolute; left:1px; top:1px; width:1px; height:1px"><!--  --></DIV>

if (strSon.length <= 2) {
  if (strSon == "")  strSon = "bip.wav";
  if (strSon == "1") strSon = "un.mp3";
  if (strSon == "2") strSon = "deux.mp3";
  if (strSon == "3") strSon = "trois.mp3";

  var strPath = window.location.pathname;  // donne le chemin complet de cette page.
  strPath = strPath.substring(0, strPath.indexOf(strDBjavascript));  // élimine la fin "javascript/..."
  strSon = "sons/" + strSon;
  // alert(strSon);  // pour info
  }

// Si la fenêtre de debugging est ouverte, l'utilise pour générer le son
if (oDebugWin && oDebugWin.document) {
  oDebugWin.document.getElementById("divDebWinBeep").innerHTML="<embed src='" + strSon + "', height=50 width=100 hidden autoplay='true'>";
  return;
  }
else { // Si elle n'est pas ouverte, essaye d'utiliser la page Web
  var mydivBeep = document.getElementById("divBeep");

  // Si le DIV a été défini dans la page principale, on peut l'utiliser pour jouer le son.
  if (mydivBeep) {
    mydivBeep.innerHTML="<embed src='" + strSon + "', height=50 width=100 hidden autoplay='true'>";
    return;
    }
  else { // Sinon, ouvre la fenêtre de debugging, pour générer le son.
    // ouvre la debugging window, pour pouvoir jouer le son.
    LitWindowPos();  // pour lire la position et la taille de la debugging window
    oDebugWin = window.open('','DebuggingWindow','resizable=yes,scrollbars=yes,menubar=no,' + strDBWindowSize);
    DebuggingWindowOpen();

    // joue le son.
    // Ne fonctionne pas si on appelle directement : oDebugWin.document.getElementById...
    // Donc on utilise le timer.
    strLocalSon = strSon;
    setTimeout("localDBBeep()", 800);
    return;
    }
  }
} // DBBeep

function DebWinClear() {
//======================
// Efface le contenu de la debugging window
if (!oDebugWin || !oDebugWin.document) return;

oDebugWin.document.close();
DebuggingWindowOpen();
} // DebWinClear

function DBW(strS, nOption) {
//===========================
// Ecrit dans la fenêtre de debugging le texte désiré.
// nOption permet de ne pas écrire le strS  ou au contraire d'afficher la date à la suite.

// si on omet le second paramètre, on lui donne une valeur par défaut.
if (typeof(nOption) == "undefined") nOption = 511;

if ((nDBFlagsOpt & nOption) == 0) return;  // ne fait rien, affichage masqué.

// Crée et ouvre la fenêtre de debugging si elle n'est pas déjà ouverte.
if (!oDebugWin || !oDebugWin.document) {
  LitWindowPos();  // pour lire la position et la taille de la debugging window
  DebuggingWindowOpen();
  }

var strChaine = strS;

// Si désiré, n'interprète pas les balises HTML.
if ((nDBFlagsOpt | nOption) & ncteDBESC) {
  var x=0;
  var from = 0;
  var Resu = "";

  while ((x=strS.indexOf("<",from)) != -1) {
    Resu += strS.substring(from,x) + "&lt;";
    from = x+1;
    }

  Resu += strS.substring(from,strS.length);
  strChaine = Resu;
  } // if

// écrit la date à la suite, si demandé.
if ((nDBFlagsOpt | nOption) & ncteDBTime) {
  var Hr = new Date();
  strChaine += "  @ " + Hr.getHours() + ":" + Hr.getMinutes() + ":" + Hr.getSeconds();
  }

// Ajoute un retour de ligne en fin si demandé
if ((nDBFlagsOpt | nOption) & ncteDBBreak) strChaine += "<br>";

// écrit le texte
oDebugWin.document.write(strChaine);

// Se positionne en fin de texte.
oDebugWin.scrollTo(0,10000);
} // DBW

