// Variables déplacement
var fenetre_deplacee_difx=0;
var fenetre_deplacee_dify=0;
var fenetre_deplacee=0;
var zindex=0;

// Variables dimensionnement
var fenetre_dimension_difx=0;
var fenetre_dimension_dify=0;
var souris_posx=0;
var souris_posy=0;
var fenetre_dimension=0;
var sens = "";
var boxheight=0;
var boxwidth = 0;

var ua=navigator.userAgent.toLowerCase(), isIE=/msie/.test(ua),
isIE6=/msie 6/.test(ua),
isIE7=/msie 7/.test(ua),
isIE8=/msie 8/.test(ua),
isWebKit = /webkit/.test(ua),
isGecko = /gecko/.test(ua) && !isWebKit,
isOpera = /presto/.test(ua);

/* Fonction de mémorisation des hauteurs et largeurs de base de la boîte correspondant au dimensuons mini */
function initDim(h,w) {
   boxheight = h;
   boxwidth = w;
}

/* Fonction spécifique au TOOLBOX ********************************************************************************************/
function attachwindow(movebox,title) {
   // A attacher à la fenêtre
   var btitle = document.getElementById(title);
   var fenetre = document.getElementById(movebox);

   // Ajout de l'événement déplacement
   addEvent(btitle,"mousedown",function (event){
      commencer_deplacement(event,fenetre)
   });
   addEvent(btitle,"mouseup",arreter_deplacement);
   premier_plan(fenetre)
}


/******************************************************************************************************************************
 Déplacement de la fenêtre
******************************************************************************************************************************/
function deplacer_fenetre(ev, fenetre) {
   var souris = mouseCoords(ev);

   // Curseur déplacement
   fenetre.style.cursor = 'move';
   var fencur = getPosition(fenetre);

   // Curseur de redimensionnement
   if(Math.abs(souris.x - fencur.x) < 10) {
      fenetre.style.cursor = 'w-resize';

   }

   if(Math.abs(fencur.x + fenetre.offsetWidth - souris.x) < 10) {
      fenetre.style.cursor = 'e-resize';
   }

   if(Math.abs(fencur.y - souris.y) < 10) {
      fenetre.style.cursor = 'n-resize';
   }

   if(Math.abs(fencur.y + fenetre.offsetHeight - souris.y) < 10)
   {
      fenetre.style.cursor = 's-resize';
   }
   // Déplacement de la boîte
   var depx = 0;
   var depy = 0;
   if(fenetre_deplacee) {
      fenetre.style.left=(souris.x-fenetre_deplacee_difx+depx)+'px';
      fenetre.style.top=(souris.y-fenetre_deplacee_dify+depy)+'px';
   }

   // Dimensionnement boîte
   if(fenetre_dimension) {
      switch(sens) {
         case 'gauche':
            var dimx = fenetre_dimension_difx + souris_posx - souris.x;
            if(dimx >= boxwidth) {
               fenetre.style.width = dimx + 'px';
               fenetre.style.left = (souris.x-fenetre_deplacee_difx)+'px';
            }
            break;

         case 'droite':
            var dimx = fenetre_dimension_difx + souris.x - souris_posx;
            if(dimx >= boxwidth) {
               fenetre.style.width = dimx + 'px';
            }
            break;

         case 'haut':
            var dimy = fenetre_dimension_dify + souris_posy - souris.y;
            if(dimy >= boxheight) {
               fenetre.style.height = dimy + 'px';
               fenetre.style.top = (souris.y - fenetre_deplacee_dify) + 'px';
            }
            break;

         case'bas':
            var dimy = fenetre_dimension_dify + souris.y - souris_posy;
            if(dimy >= boxheight) {
               fenetre.style.height = dimy + 'px';
            }
            break;
      }
   }
}

function commencer_deplacement(ev,fenetre) {
   arreter_deplacement(); // RAZ toutes fonctions

   old_mouseCoords = mouseCoords(ev); // position de la souris
   old_windowCoords = getPosition(fenetre); // position de lafenêtre

   fenetre_deplacee_difx = old_mouseCoords.x - old_windowCoords.x;
   fenetre_deplacee_dify = old_mouseCoords.y - old_windowCoords.y;

   // on teste si la souris se trouve sur une bordure
   // si c'est la cas on charge une valeur indiquant le sens du redimensionnement
   var gauche = Math.abs(old_mouseCoords.x - old_windowCoords.x);
   if(gauche <= 10) sens = 'gauche';

   var haut = Math.abs(old_mouseCoords.y - old_windowCoords.y);
   if(haut <= 10) sens = 'haut';

   var droite = Math.abs(old_mouseCoords.x - (old_windowCoords.x + fenetre.offsetWidth));
   if(droite <= 10) sens = 'droite';

   var bas = Math.abs(old_mouseCoords.y - (old_windowCoords.y + fenetre.offsetHeight));
   if(bas <= 10) sens = 'bas';

   if(sens) {
      // Dimensions de la fenêtre lors du clic
      fenetre_dimension_difx = fenetre.offsetWidth;
      fenetre_dimension_dify = fenetre.offsetHeight;
      // Position de la souris lors du clic
      souris_posx = old_mouseCoords.x;
      souris_posy = old_mouseCoords.y;
      /* MPS le 17/09/2009
         * Suppression de redimenssionnement en attendant de corriger les
         * disfonctionnements*/
      fenetre_dimension = fenetre; // activation déplacement
   }
   else {
      // sinon on charge une valeur de déplacement
      fenetre_deplacee = fenetre;
   }
}

function arreter_deplacement() {
   fenetre_deplacee = 0;
   fenetre_dimension = 0;
   sens = "";
}

/******************************************************************************************************************************
 Fonctions utilitaires Déplacement / Dimensionnement
******************************************************************************************************************************/
/* Attachement d'évènement */
function addEvent(obj,event,fct){
   if(obj.attachEvent)
      obj.attachEvent('on' + event,fct); // IE
   else
      obj.addEventListener(event,fct,true); // mozilla
}

/* Détachement d'évènement */
function removeEvent(obj,event,fct){
   if(obj.detachEvent)
      obj.detachEvent('on' + event,fct);
   else
      obj.removeEventListener(event,fct,true);
}

/* Récupération des coordonnées de la souris */
function mouseCoords(ev){
   if(ev.pageX || ev.pageY){
      return {
         x:ev.pageX,
         y:ev.pageY
      };
   }
   return {
      x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
      y:ev.clientY + document.body.scrollTop  - document.body.clientTop
   };
}

/* Récupération position fenêtre */
function getPosition(e){
   var left = 0;
   var top  = 0;
   while (e.offsetParent){
      left += e.offsetLeft;
      top  += e.offsetTop;
      e = e.offsetParent;
   }
   left += e.offsetLeft;
   top  += e.offsetTop;
   return {
      x:left,
      y:top
   };
}

/* Mise au premier plan de la boite flottante */
function premier_plan(fenetre) {
   zindex++; // Incrémentation de la variable globale
   fenetre.style.zIndex=zindex; // Affectation de sa valeur au z-index de la fenêtre concernée
}



/*****************************************************************************
 *              TOOLBOX
 ****************************************************************************/

//Version allégée de la function de deplacement pour ne pas permetre le redimensionnement
//utilisée par les toolbox rechercher, filtrer et configurer
function commencer_deplacement_toolBox(ev, fenetre) {
   // RAZ toutes fonctions
   arreter_deplacement();

   // position de la souris
   old_mouseCoords = mouseCoords(ev);

   // position de lafenêtre
   old_windowCoords = getPosition(fenetre);

   fenetre_deplacee_difx = old_mouseCoords.x - old_windowCoords.x;
   fenetre_deplacee_dify = old_mouseCoords.y - old_windowCoords.y;

   fenetre_deplacee = fenetre;
}

//Version allégée de la function de deplacement pour ne pas permetre le redimensionnement
//utilisée par les toolbox rechercher, filtrer et configurer
function deplacer_toolBox(ev, fenetre) {
   var souris = mouseCoords(ev);

   // Déplacement de la boîte
   if(fenetre_deplacee) {
      fenetre.style.left = (souris.x - fenetre_deplacee_difx) + 'px';
      fenetre.style.top = (souris.y - fenetre_deplacee_dify) + 'px';
   }
}

// Affiche le container navInfo
function showNav() {
   var e = document.getElementById('navInfo'); // la container

   if (e.style.display == 'none' || e.style.display == '') {
       e.style.display='block';
       e.style.height='110px';
   } else {
       e.style.display='none';
       e.style.height='0px';
   }

}
