function grl_initTool() {
 if(!grl_ie && grl_la) {
  window.captureEvents(Event.MOUSEDOWN);
  window.captureEvents(Event.MOUSEMOVE);
  window.onmousedown=grl_mouseDown;
  window.onmousemove=grl_mouseMove;
 }
}

//this function must be called AFTER resizing and drawing all in the init.
function grl_initResize() {
 if(!grl_ie)
  window.captureEvents(Event.RESIZE);
 window.onresize=grl_window_resize;
}

var grl_last_called=0;
var grl_timer=0;
function grl_window_resize() {
 grl_last_called=new Date();
 grl_timer=setTimeout(move_objs,300);
}

function move_objs() {
 now=new Date();
 if(now - grl_last_called<200) return;
 grl_drawAll();
}




function grl_toolDown(m,x0,y0) {
 if(m.tool=="zoomin" || m.tool=="info" || m.tool=="dist") {
  if(m.sele) { m.sele.show(); m.sele.position(y0,y0,x0,x0); }
 }
}

function grl_toolMove(m,x0,y0,x1,y1) {
 if(m.sele) {
  if(m.tool=="zoomin" || m.tool=="info") m.sele.position(y0,y1-3,x0,x1-3);
  if(m.tool=="dist") m.sele.track(y1,y0,x1,x0);
 }
 if(m.tool=="pan") {
  var t=y0-y1; var l=x0-x1;
  var b=m.H+t; var r=m.W+l;
  grl_move(m.id, m.Y+y1-y0, m.X+x1-x0);
  grl_clip(m.id,l,t,r,b);
 }
}

function grl_toolUp(m,x0,y0,x1,y1) {
 x0-=m.X; y0-=m.Y; y0=m.H-y0;
 x1-=m.X; y1-=m.Y; y1=m.H-y1;
 var d=Math.abs(x1 - x0) + Math.abs(y1 - y0);
 var ew=m.region.e - m.region.w;
 var ns=m.region.n - m.region.s;
 if(m.tool=="pan") {
  if(d<5) m.region.center(x0, y0);
  else m.region.pan(x0-x1, y1-y0);
 } else if(m.tool=="zoomout") {
  if(d >= 10) return;
   m.region.center(x0, y0);
   m.region.zoom(1.5);
 } else if(m.tool=="zoomin") {
  if ((x1>0 && x1<m.W && y1>0 && y1<m.H) || (grl_ie)) {
   if(d<5) {
    m.region.center(x0,y0);
    m.region.zoom(0.8);
   } else {
    m.region.setRegion(m.region.toN(Math.max(y0,y1)),
		       m.region.toN(Math.min(y0,y1)),
		       m.region.toE(Math.max(x0,x1)),
		       m.region.toE(Math.min(x0,x1)));
    m.region.zoom(1);
   } 
  }
 } else if(m.tool=="dist") {
  if(d>2) {
   dx=(x0 - x1) * ew / m.W;
   dy=(y1 - y0) * ns / m.H;
   var distance=Math.sqrt(dx*dx + dy*dy);
   alert("Distanza: " + Math.round(distance) + " m");
  }
  return;
 } else if(m.tool=="info") {
  if(d<8) {
   DN=m.region.toN(y0); DE=m.region.toE(x0);
   DR=ew / m.region.cols;
   m.getInfo(DE,DN,DR);
  } else {
   DN=m.region.toN(Math.max(y0,y1));
   DE=m.region.toE(Math.max(x0,x1));
   DS=m.region.toN(Math.min(y0,y1));
   DW=m.region.toE(Math.min(x0,x1));
   DR=ew / m.region.cols;
   m.getInfo(DE, DN, DR, DW, DS)
  }
 }
 if(m.tool=="pan" || m.tool=="zoomin"||m.tool=="zoomout") {
   m.draw();
   grl_history.store();
   grl_drawAll(0);	
 }
}

var grl_mdown=0;
var grl_capture=null;
var grl_x0,grl_y0,grl_x1,grl_y1,grl_Sx,grl_Sy;

function grl_mouseDown(e) {

 for(i in grl_maps)
   if(grl_maps[i].sele) grl_maps[i].sele.hide();
 if(grl_ie) { grl_x0=window.event.x + document.body.scrollLeft;
              grl_y0=window.event.y + document.body.scrollTop;
 } else {
  if(e.which != 1) return;
  grl_x0=e.pageX; grl_y0=e.pageY;
 }
 var m=grl_getMap(grl_x0,grl_y0);
 if(!m) return;
 if(grl_ie) {
 if(m.tool == 'info')
    event.srcElement.style.cursor = "default";
  else
    event.srcElement.style.cursor = "crosshair";
 }
 if(!grl_ie && grl_la) {
    window.releaseEvents(Event.MOUSEDOWN);
    window.captureEvents(Event.MOUSEUP);
    window.onmouseup = grl_mouseUp;
 }
 grl_toolDown(m,grl_x0,grl_y0);
 grl_mdown=1;
 return false;
}

function grl_mouseMove(e) {

//  if (event.srcElement.id.indexOf("DRAG") != -1) {
   if(grl_ie)
    event.srcElement.style.cursor = "crosshair";
//  }
 /*if(!grl_mdown) {
  for(var i in grl_maps)
   if(grl_maps[i].sele) grl_maps[i].sele.hide();
 }*/
 if(grl_ie) { grl_x1=window.event.x + document.body.scrollLeft;
              grl_y1=window.event.y + document.body.scrollTop; }
 else { grl_x1=e.pageX; grl_y1=e.pageY; }
 var m=grl_getMap(grl_x1,grl_y1);
 if(!m) return;
 if(grl_ie) {
 if(m.tool == 'info')
    event.srcElement.style.cursor = "default";
 if(m.tool == 'pan')
   event.srcElement.style.cursor = "move";
  else
    event.srcElement.style.cursor = "crosshair";
  }

 if(grl_mdown==1) grl_toolMove(m,grl_x0,grl_y0,grl_x1,grl_y1);
 var a=grl_x1 - m.X;
 var b=grl_y1 - m.Y;
 DN=Math.round(m.region.n - (m.region.n - m.region.s) * b / m.region.rows);
 DE=Math.round(m.region.w + (m.region.e - m.region.w) * a / m.region.cols);
 if (a>0 && b >0) 
  status='Scala 1:' + m.region.scale + ' E: ' + DE + ' N: ' + DN;

}

function grl_mouseUp(e) {
 for(i in grl_maps)
   if(grl_maps[i].sele) grl_maps[i].sele.hide();
 if(grl_mdown != 1) return;

 var m=grl_getMap(grl_x0,grl_y0);

 if(grl_ie) { grl_x1=window.event.x + document.body.scrollLeft;
              grl_y1=window.event.y + document.body.scrollTop; }
 else {
   if(!grl_ie && grl_la) {
    window.captureEvents(Event.MOUSEDOWN);
    window.releaseEvents(Event.MOUSEUP);
    window.onmousedown = grl_mouseDown;
    window.onmouseup=null;
   }
   grl_x1=e.pageX; grl_y1=e.pageY;
 }
 grl_mdown=0;
 if(!m) return;
 grl_toolUp(m,grl_x0,grl_y0,grl_x1,grl_y1);
}

