var ie = (document.all ? true : false);
var sStatus="Up"; //status des boutons de la souris
var boxStart; //point de depart absolu de la box
var xOff=0; //offset x du point de depart
var yOff=0; //offset y du point de depart
var boxDivName = "DragDiv"; //calque qui sera utilisé
var borderWidth = "2px"; //largeur du trait
var activeImgId = "Carte";

function addEvent() {
  registerEventHandler(document.getElementById(activeImgId), 'mousedown', MouseDownProcessor);
  registerEventHandler(document.getElementById(activeImgId), 'mouseup', MouseUpProcessor);
  registerEventHandler(document.getElementById(activeImgId), 'mousemove', MouseMoveProcessor);
  registerEventHandler(document.getElementById(boxDivName), 'mousedown', MouseDownProcessor);
  registerEventHandler(document.getElementById(boxDivName), 'mouseup', MouseUpProcessor);
  registerEventHandler(document.getElementById(boxDivName), 'mousemove', MouseMoveProcessor);
}

//associe les event souris aux actions
function registerEventHandler(obj, eventName, handler) {
    if (ie) obj.attachEvent('on'+eventName, handler);
    else    obj.addEventListener(eventName, handler, false);
}

//souris presse
function MouseDownProcessor(e) {
  sStatus = "Down";
  boxStart = getAbs(e);
  var p = getRel(e);
  xOff = boxStart.x-p.x;
  yOff = boxStart.y-p.y;
	return false;
}

//souris bouge
function MouseMoveProcessor(e) {
  if (document.TOOL.outil.value==1) {
    if (sStatus == "Down") {
      var p = getAbs(e);
  	  drawBox(boxStart, p);
  	}
	}
  return false;
}

//souris lache
function MouseUpProcessor(e) {
 	sStatus = "Up";
  var end = getAbs(e);
  if (boxStart==null) boxStart = end;
  var x = Math.floor((boxStart.x+end.x)/2)-xOff;
  var y = Math.floor((boxStart.y+end.y)/2)-yOff;
  var h = boxStart.y<end.y ? end.y-boxStart.y : boxStart.y-end.y;
  var w = boxStart.x<end.x ? end.x-boxStart.x : boxStart.x-end.x;
  var c = w>h ? Math.floor(w/2) : Math.floor(h/2);
  //alert(e.clientX + "," + e.clientY + " : " + e.layerX + "," + e.layerY + ":" + e.offsetX + "," + e.offsetY+";"+e.pageX+","+e.pageY+"?"+x+","+y);
  document.TOOL.ABSC.value = x;
  document.TOOL.ORDO.value = y;
  document.TOOL.COTE.value = c;
  document.TOOL.submit();
  return true;
}

//objet point
function Point(_x,_y) {
  this.x = _x;
  this.y = _y;
}

//position relative
function getRel(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (ie) {
		posx = e.offsetX;
		posy = e.offsetY;
	}
	else {
		posx = e.layerX;
		posy = e.layerY;
	}
  return new Point(posx,posy);
}

//position absolue
function getAbs(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (ie) {
		posx = e.clientX;
		posy = e.clientY;
	}
	else {
		posx = e.pageX;
		posy = e.pageY;
	}
  return new Point(posx,posy);
}

//dessine la boite
function drawBox(start,end) {
	var minx,miny,maxx,maxy;
  if (start.x <= end.x) {
    minx = start.x;
    maxx = end.x;
  }
  else {
    minx = end.x;
    maxx = start.x;
  }
  if (start.y <= end.y) {
    miny = start.y;
    maxy = end.y;
  }
  else {
    miny = end.y;
    maxy = start.y;
  }
  var bbox = document.getElementById(boxDivName);
  bbox.style.borderWidth=borderWidth;
  bbox.style.borderStyle="solid";
  bbox.style.left=minx;
  bbox.style.top=miny;
  bbox.style.width=maxx - minx;
  bbox.style.height=maxy - miny;
  bbox.style.visibility = "visible";
  bbox.style.position = "absolute";
}
