// Permet de deplacer des images avec la souris en cliquant dessus
// AddImage('divNom...');  permet d'ajouter un 'div' a la liste des images deplacables
//
// Aucune autre fonction est cencee etre appelee.

var fCaptured = 0;   // indique si l'image est capturee
var fPlaceShift = 0; // indique le dernier etat de la touche Shift lors d'un deplacement de souris
var strCaptured = ''; // string contenant la  div  de l'image capturee
var astrImages = new Array(50);  // permet de stocker une liste  'div'  de 50 images
var ctenMaxImages = 50;  // nombre max d'images stockables
var nNbImages = 0;  // indique le nombre d'images stockee
var nPlaceMousePosX = 0;  // position du 'div...' relativement a la souris au clique de capture
var nPlaceMousePosY = 0;

function DisplayInfo(evt) {
//=========================
// affiche les infos en bas d'ecran
var nMouseX = 0;
var nMouseY = 0;
var strX = '';  // pour afficher la position du 'div...'

// Lecture de la position de la souris
if (evt) { nMouseX = evt.clientX; nMouseY = evt.clientY + window.pageYOffset; } // dans ns6
else if (window.event){ nMouseX = window.event.x; nMouseY = window.event.y; } // dans ie5

var oDivImage = document.getElementById(strCaptured);
oDivImage.style.left = nMouseX + nPlaceMousePosX + 'px';
oDivImage.style.top  = nMouseY + nPlaceMousePosY + 'px';

var oDivInfo = document.getElementById("divInfo");

// si  nDivCenterWidth  est defini (car bouge_image.js est appele), alors tient compte de sa valeur
if (typeof(nDivCenterWidth) =='number') strX = Math.round(nMouseX + nPlaceMousePosX - (nDivCenterWidth - nDivCenterWidthMin)/2)
else strX = oDivImage.style.left;

oDivInfo.innerHTML = "X =" + strX + " &nbsp; Y = " + oDivImage.style.top;
} // DisplayInfo

function Place_Capture(evt) {
//===========================
// action de capture de la souris.
// Change l'etat de capture de l'image
var nMouseX = 0;
var nMouseY = 0;

if (fCaptured != 0) fCaptured = 0;
else {
   fCaptured = 1;

   // Lecture de la position de la souris
   if (evt) { nMouseX = evt.clientX; nMouseY = evt.clientY + window.pageYOffset; } // dans ns6
   else if (window.event){ nMouseX = window.event.x; nMouseY = window.event.y; } // dans ie5

   nPlaceMousePosX = nMouseX;
   nPlaceMousePosY = nMouseY;
   }

if (fCaptured != 0) {
   // Test quelle est l'image la plus proche de la souris
   var nDist2Min = 999999;   //  pour voir quel est l'image la plus proche de la souris lors du clique
   var nDist2    = 0;
   var oDivImage;
   var nn = 0;

   for (nn = 1; nn <=nNbImages; nn++) {
      oDivImage = document.getElementById(astrImages[nn]);
      nDist2 = Math.pow((parseInt(oDivImage.offsetLeft) - nMouseX), 2) +
               Math.pow((parseInt(oDivImage.offsetTop ) - nMouseY), 2);

      if (nDist2 < nDist2Min) {
         strCaptured = astrImages[nn];
         nDist2Min = nDist2;
         nPlaceMousePosX = parseInt(oDivImage.style.left);
         nPlaceMousePosY = parseInt(oDivImage.style.top );
         }
      }  // for (nn = 1; ...

   // si la souris est trop loin du 'div...' capture, ne fait rien
   if (nDist2Min > 10000) {
      fCaptured = 0;
      }

   nPlaceMousePosX = nPlaceMousePosX - nMouseX;
   nPlaceMousePosY = nPlaceMousePosY - nMouseY;

   var oDivInfo2 = document.getElementById("divInfo2");
   if (oDivInfo2 != null) {
      oDivInfo2.innerHTML = "nDist2Min =" + nDist2Min 
           + "<br>divName=" + strCaptured
           + "<br>shift=" + evt.shiftKey
//           + "  button=" + evt.button
           + "<br>nDivCenterWidth=" + nDivCenterWidth;
      }
   }
} // Click_action

function Souris_suit(evt) {
//=========================
// on peut faire une capture en pressant la touche schift.
var fShiftKey = 0;  // Etat de la touche Shift

if (evt) { fShiftKey = evt.shiftKey; } // dans ns6
else if (window.event){ fShiftKey = window.event.shiftKey; } // dans ie5

if ((fShiftKey != 0) && (fPlaceShift == 0) && (fCaptured == 0)) {
   fPlaceShift = 1;
   Place_Capture(evt);
   }

if ((fShiftKey == 0) && (fPlaceShift != 0)) {
   fPlaceShift = 0;
   fCaptured = 0;
   }

if (fCaptured != 0) {
   DisplayInfo(evt);
   }
} // Souris_suit

function AddImage(strDivImage) {
//==============================
// Ajoute une image a la liste
if (nNbImages <= ctenMaxImages) {
   oDivImage = document.getElementById(strDivImage);

   // test si le 'div...' existe
   if (oDivImage != null) {
      nNbImages = nNbImages + 1;
      astrImages[nNbImages] = strDivImage;  // memorise la reference a l'image
      }
   else {
      alert(strDivImage + " n'existe pas !")
      }
   }
else {
   alert("trop d'images à traiter, seule " + ctenMaxImages + " sont prises en compte.");
   }
} // AddImage

// Initialisation au chargement
//=============================
if (document.addEventListener) { // Netscape 6+  &  Opera
  document.addEventListener('mousemove', Souris_suit, true);
//  document.addEventListener('click', Click_action, true);
//  document.addEventListener("mousedown",myRightMouseDown,false); // pour opera
  }
else { // IE
  document.onmousemove = Souris_suit;
//  document.onclick = Click_action;
  }

