/**
 * GESTION DU DEPLACEMENT ET DU REDIMENSIONNEMENT DES FENETRES (DIV)
 */

var Mouse_X; // Variable globale Position X de la Sourie
var Mouse_Y; // Variable globale Position Y de la Sourie

// position d'origine de la souris
var Mouse_X_Origin;
var Mouse_Y_Origin;

// taille d'origine de la souris
var Height_Origin;
var Width_Origin;

N = (document.all) ? 0 : 1;
//-----------------------------------------------------------------------------
// l'argument e n'est passé à la fonction que par les navigateur n'ayant pas
// implémenté event comme objet, IE posséde son propre objet bien connu event
//-----------------------------------------------------------------------------

var move = ""; // position actuelle
var lastmove = "";// ancienne position

/**
 * Gère le déplacement de la fenetre en fonction du déplacement de la souris
 */
function MooveDiv(e){
if(move != ""){
  var DocRef;    // Variable pour IE uniquement

  if( e){// tous les cas sauf IE
    Mouse_X = e.pageX;
    Mouse_Y = e.pageY;
  }
  else{// Cas IE
    Mouse_X = event.clientX;
    Mouse_Y = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

      //-- On rajoute la position liée aux ScrollBars
      Mouse_X += DocRef.scrollLeft;
      Mouse_Y += DocRef.scrollTop;
    }
    //on retire la position d'origine de la souris dans le div.
    Y=Mouse_Y-Mouse_Y_Origin;
    X=Mouse_X-Mouse_X_Origin;
    if(X<0){// cas ou la fenetre sors du cadre
      X = 0;
    }
    document.getElementById(move).style.left=X+'px';
    if(Y<0){
      Y = 0;
    }
    document.getElementById(move).style.top=Y+'px';
    if(move == "div_tab_mois"){// Cas fenetre de sélection de date dans l'agenda création d'un cookie.
      setcookie("positionCalendrier", X+"||"+Y, (new Date(2050, 12).getTime()),contextpath);
    }
  }
  return false;
}

/**
 * Initialisation de la position de la souris dans le div qui va être déplacé.
 */
function initPosDansDiv(id ,e){
  var DocRef;    // Variable pour IE uniquement
  // L'événement est passée à la fonction
  // donc tous sauf IE…
  if( e){                     // Dans ce cas on obtient directement la position dans la page
    Mouse_X_Origin = e.pageX;
    Mouse_Y_Origin = e.pageY;
  }
  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
    Mouse_X_Origin = event.clientX;
    Mouse_Y_Origin = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    //-- On rajoute la position liée aux ScrollBars
    Mouse_X_Origin += DocRef.scrollLeft;
    Mouse_Y_Origin += DocRef.scrollTop;
  }
  Mouse_X_Origin=Mouse_X_Origin-document.getElementById(id).style.left.substring(0, document.getElementById(id).style.left.indexOf('px'));
  Mouse_Y_Origin=Mouse_Y_Origin-document.getElementById(id).style.top.substring(0, document.getElementById(id).style.top.indexOf('px'));
}

// Initialisation des positions et des fonction de gestion d'évenements
function initposition(id, e){
  if(N){
    initPosDansDiv(id, e);
  }else{
    initPosDansDiv(id);
  }
  move=id;
  if(document.getElementById(lastmove)){
    document.getElementById(lastmove).style.zIndex=5;
  }
  document.getElementById(id).style.zIndex=6;
  // affectation des fonctions de gestion des évennements
  document.onmousemove = MooveDiv;
  document.onmousedown = returnFalse;
  document.onmouseup = reinitDivId;
}

function returnFalse(){
  return false;
}

function returnTrue(){
  return true;
}

/**
 * Fonction qui déplace une fenetre vers une position à 100 pixels en dessous
 * du haut du navigateur quelque soit la position du scroll vertical.
 */
function MooveDivToMouse(id, e){
  if(N){
    MooveDivToMouse2(id, e);
  }else{
    MooveDivToMouse2(id);
  }
}

function MooveDivToMouse2(id, e){
  var DocRef;

  Y=200;
  Y=100;
  X=document.getElementById(id).style.left;
  X=X.substring(0, X.indexOf("px"));
  Y = -Y-document.body.scrollTop;
  X = -X-document.body.scrollLeft;
  document.getElementById(id).style.top=-Y+'px';
  document.getElementById(id).style.left=-X+'px';
}

/**
 * Fonction qui déplace une fenetre à la position du curseur
 */
function MooveDivToMouseXY(id, e){
  if(N){
    MooveDivToMouseXY2(id, e);
  }else{
    MooveDivToMouseXY2(id);
  }
}
function MooveDivToMouseXY2(id, e){
  var DocRef;
  if( e){                     // Dans ce cas on obtient directement la position dans la page
    MouseX = e.pageX;
    MouseY = e.pageY;
  }
  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
    MouseX = event.clientX;
    MouseY = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    //-- On rajoute la position liée aux ScrollBars
    MouseX += DocRef.scrollLeft;
    MouseY += DocRef.scrollTop;
  }
  w=document.getElementById(id).style.width;
  w = w.substring(0, w.indexOf("px"));
  Y=MouseY;
  X=MouseX-w;
  document.getElementById(id).style.top=Y+'px';
  document.getElementById(id).style.left=X+'px';
}

/**
 * Réinitialisation des variables globales et des fonctions de gestion des
 * évenements.
 */
function reinitDivId(){
  lastmove = move;
  move = "";
  document.onmousemove = returnTrue;
  document.onmouseup = returnTrue;
  document.onmousedown = returnTrue;
}

/**
 * rends une fenetre visible
 */
function montreFenetre(id){
  activeWindow(id);
  document.getElementById(id).style.display="block";
}

/**
 * Initialisation des variables globales utilisées pour
 * la gestion du redimensionnement des fenêtres
 */
function initSize(id, e){
  Height_Origin=document.getElementById(id).height;
  Width_Origin=document.getElementById(id).width;
  document.onmousemove = ChangeSize;
  document.onmousedown = returnFalse;
  document.onmouseup = reinitDivId;
  move=id;
  if(document.getElementById(lastmove)){
    document.getElementById(lastmove).style.zIndex=5;
  }
  document.getElementById(id).style.zIndex=6;
  if(N){
    initPos(id, e);
  }else{
    initPos(id);
  }
}

/**
 * Initialisation des positions d'origine de la souris.
 */
function initPos(id ,e){
  var DocRef;    // Variable pour IE uniquement

  // L'événement est passée à la fonction
  // donc tous sauf IE…
  if( e){                     // Dans ce cas on obtient directement la position dans la page
    Mouse_X_Origin = e.pageX;
    Mouse_Y_Origin = e.pageY;
  }
  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
    Mouse_X_Origin = event.clientX;
    Mouse_Y_Origin = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    //-- On rajoute la position liée aux ScrollBars
    Mouse_X_Origin += DocRef.scrollLeft;
    Mouse_Y_Origin += DocRef.scrollTop;
  }
}

/**
 * Fonction appelée lors du redimensionnement de la fenêtre.
 * Elle change les propriétées width et height du style de la fenêtre.
 * Cette fonction est appelée sur le onmousemouve.
 */
function ChangeSize(e){
  if(move != ""){
  var DocRef;    // Variable pour IE uniquement

  // L'événement est passée à la fonction
  // donc tous sauf IE…
  if( e){                     // Dans ce cas on obtient directement la position dans la page
    MouseX = e.pageX;
    MouseY = e.pageY;
  }
  else{                      // Dans ce cas on obtient la position relative à la fenêtre d'affichage
    MouseX = event.clientX;
    MouseY = event.clientY;

    //-- Il faut traiter le CAS des DOCTYPE sous IE
    if( document.documentElement && document.documentElement.clientWidth) // Donc DOCTYPE
      DocRef = document.documentElement;   // Dans ce cas c'est documentElement qui est réfèrence
    else
      DocRef = document.body;                    // Dans ce cas c'est body qui est réfèrence

    //-- On rajoute la position liée aux ScrollBars
    MouseX += DocRef.scrollLeft;
    MouseY += DocRef.scrollTop;
  }
  Y=MouseY-Mouse_Y_Origin;
  X=MouseX-Mouse_X_Origin;

  Mouse_Y_Origin = MouseY;
  Mouse_X_Origin = MouseX;

  X2 = 0 - document.getElementById(move).style.width.substring(0, document.getElementById(move).style.width.indexOf("px"));
  Y2 = 0 - document.getElementById(move).style.height.substring(0, document.getElementById(move).style.height.indexOf("px"));
  X = X - X2;
  Y = Y - Y2;
  
  if(X > 40){
    document.getElementById(move).style.width=X+'px';
    if(N){
      X = X-4;
    }
    document.getElementById(move+"contenu").style.width=X+'px';
  }
  if(Y > 20){
    document.getElementById(move).style.height=Y+'px';
    Y = Y-36;
    if(N){
      Y = Y-4;
    }
    document.getElementById(move+"contenu").style.height=Y+'px';
   }
  }
  return false;
}

/**
 * positionne la fenêtre active au deuxième plan et met la nouvelle
 * fenêtre au premier plan.
 */
function activeWindow(id){
 if(document.getElementById(lastmove)){
    document.getElementById(lastmove).style.zIndex=5;
  }
  lastmove = id;
  if(document.getElementById(id)){
    document.getElementById(id).style.zIndex=6;
  }
}

/**
 * Fonction qui permet de faire glisser une fenêtre horizontalement de manière
 * automatique et de façon atténuée.
 * Cette fonction est récursive et glisse sur une distance définie par le paramètre
 * width. Pour atténuer le mouvement ou déplace la fenêtre du dixième de la longueur
 * width puis on affecte à width les neuf dixièmes de sa valeur.
 * Le cas d'arrêt : width/10 < ou = à 1.
 */

function glissediv(id, width){
  document.getElementById(id).style.left="-"+width+"px";
  document.getElementById(id).style.display="block";
  leftpos=width;
  if(leftpos/10>1){
    leftpos=leftpos-(leftpos/10);
  }else{
    leftpos=0;
    activeWindow(id);
  }
  document.getElementById(id).style.left="-"+leftpos+"px";
  if(leftpos>0){
    setTimeout("glissediv('"+id+"', "+leftpos+")", 1);
  }
}

/** Partie sélection dans une liste de mots clé**/
var lettres = "";
var date=new Date();
var idcontenu ="";
var idscroll="";
var idselected="";
var boolTrouve = true;

/**
 * Fonction appelée pour trouver une ligne dans une liste de mot clé.
 * à partir des valeurs saisies au clavier. Si moins d'une seconde s'écoule
 * entre deux frappes de touches du clavier, les touches s'additionnent.
 * Sinon la valeur cherchée commence par la dernière valeur saisie.
 */
function trouveLigne(e){
  if(boolTrouve == true){
	if(document.getElementById(idscroll)){
      if(idscroll != "" && document.getElementById(idscroll).style.display == "block"){
        var tmpdate = new Date().getTime();
        key = getkey(e);
        keychar = String.fromCharCode(key);
        if(tmpdate-date<1000){
          lettres = lettres + keychar;
        }else{
          lettres = keychar;
        }
          date = tmpdate;
	   findline();
      }
	}
  }else{
    boolTrouve = true;
  }
}

/**
 * Fonction appelée à l'ouverture de la liste de mots clé
 * pour sélectionner la valeur du champ.
 */
function findline(){
  if(idselected != ""){
    document.getElementById(idselected).style.background="#EAEBFD";
  }
  var noeud = document.getElementById(idcontenu).firstChild;
  nb=0;
  while(noeud != null){
    val = noeud.innerHTML;
    if(noeud.nodeName == "P" || noeud.nodeName == "p"){
      nb = nb+1;
      if(val.toLowerCase().indexOf(lettres.toLowerCase()) == 0){
        pos = (nb-1)*13;
        document.getElementById(idcontenu).scrollTop=pos;
        idselected = noeud.getAttribute('id');
        document.getElementById(idselected).style.background="#999DF3";
        break;
      }
    }
    noeud = noeud.nextSibling;
  }
  return true;
}

/**
 * Fonction appelée lorsque l'utilisateur appuie sur la flèche du bas
 * Elle sélectionne la valeur suivante.
 */
function findNext(){
  if(idselected == ""){
    var noeud = document.getElementById(idcontenu).firstChild;
    while(noeud.nodeName != "P" && noeud != null){
      noeud = noeud.nextSibling;
    }
    idselected = noeud.getAttribute("id");
    document.getElementById(idselected).style.background="#999DF3";
    document.getElementById(idcontenu).scrollTop=0;
  }else{
    document.getElementById(idselected).style.background="#EAEBFD";
    noeud = document.getElementById(idselected).nextSibling;
    while(noeud != null && noeud.nodeName != "P" && noeud.nodeName != "p"){
      noeud = noeud.nextSibling;
    }
    if(noeud){
    }else{
      noeud = document.getElementById(idselected);
    }
    document.getElementById(idcontenu).scrollTop=document.getElementById(idcontenu).scrollTop+13;
    idselected = noeud.getAttribute("id");
    document.getElementById(idselected).style.background="#999DF3";
  }
}

/**
 * Fonction qui change la couleur de la valeur sélectionnée
 */
function setSelected(val){
  if(idselected != ""){
    if(document.getElementById(idselected)){
      document.getElementById(idselected).style.background="#EAEBFD";
    }
  }
  idselected=val;
  document.getElementById(val).style.background="#999DF3";
}


/**
 * Fonction appelée lorsque l'utilisateur appuie sur la flèche du haut
 * Elle sélectionne la valeur précédente.
 */
function findPrevious(){
  if(idselected == ""){
    var noeud = document.getElementById(idcontenu).firstChild;
    while(noeud.nodeName != "P" && noeud != null){
      noeud = noeud.nextSibling;
    }
    idselected = noeud.getAttribute("id");
    document.getElementById(idselected).style.background="#999DF3";
    document.getElementById(idcontenu).scrollTop=0;
  }else{
    document.getElementById(idselected).style.background="#EAEBFD";
    noeud = document.getElementById(idselected).previousSibling;
    while(noeud != null && noeud.nodeName != "P" && noeud.nodeName != "p"){
      noeud = noeud.previousSibling;
    }
    if(noeud != null){
    }else{
      noeud = document.getElementById(idselected);
    }
    document.getElementById(idcontenu).scrollTop=document.getElementById(idcontenu).scrollTop-13;
    idselected = noeud.getAttribute("id");
    document.getElementById(idselected).style.background="#999DF3";
  }
}

/**
 * Fonction de gestion des flèches haut et bas du clavier ainsi que de la touche
 * entrée. Redirige vers les fonctions ci-dessus
 */
function gestionFleche(e){
  if(idscroll != "" && document.getElementById(idscroll).style.display == "block"){
    key = getkey(e);
    if(key == 40){
      findNext();
      boolTrouve = false;
      return false;
    }
    else if(key == 38){
      findPrevious();
      boolTrouve = false;
      return false;
    }
    else if(key == 13){
      document.getElementById(idselected+'b').click();
      boolTrouve = false;
      return false;
    }
  }
}


/**
 * récupère le code de la touche clavier courante.
 */
function  getkey(e){
  if (window.event)
    return window.event.keyCode;
  else if (e)
    return e.which;
  else
    return null;
}

/**
 * Détermine si une liste de mot clé doit s'ouvrir vers le bas ou vers le haut
 * en fonction du bord inférieur de la fenêtre.
 */
function verifPositionSelect(idvisu, idcontenu, e){
  var DocRef;
  Mouse_Y = 0;
  if(N){
    Mouse_Y = e.pageY;
  }
  else{
    Mouse_Y = event.clientY;
    if( document.documentElement && document.documentElement.clientWidth)
      DocRef = document.documentElement;
    else
      DocRef = document.body;
    Mouse_Y += DocRef.scrollTop;
  }
  taille = document.getElementById(idcontenu).style.height;
  taille = taille.substring(0, taille.indexOf("px"));
  if(Mouse_Y >((document.body.clientHeight+document.body.scrollTop)-taille)){
    if(N){
      document.getElementById(idcontenu).style.margin="-"+(taille-16)+"px 0px 0px 0px";
    }else{
       // document.getElementById(idcontenu).style.margin="-"+(taille-20)+"px 0px 0px 0px";
    }
    document.getElementById(idvisu).style.position="absolute";
  }else{
    document.getElementById(idcontenu).style.margin="0px";
    document.getElementById(idvisu).style.position="relative";
  }
}


/**
 * Fonction utilisée lorsque l'on fait un click de souris partout dans le logiciel
 * pour cacher une éventuelle liste de mots clé ou un arbre utilisateur.
 */
function cacheListe(){
  if(enlevelistevisu == 1){
  if(idlistevisu){
    if(document.getElementById(idlistevisu)){
      document.getElementById(idlistevisu).style.display="none";
      if(document.getElementById('minus'+idlistevisu)){
        document.getElementById('minus'+idlistevisu).style.display='none';
      }
      if(document.getElementById('plus'+idlistevisu)){
        document.getElementById('plus'+idlistevisu).style.display='block';
      }
    }
  }
  idlistevisu = "";
  enlevelistevisu = 0;
  }else{
    enlevelistevisu = 1;
  }
}

