var damn=0;
var crgap=10;
var inited=false;
var x0=0; //image pos x
var y0=0; //image pos y
var x1=0; //sel left side
var y1=0; //sel top side
var x2=0; //sel right side
var y2=0; //sel botom side
var cx=0; //current x
var cy=0; //current y
var dx=0; //doc x?
var dy=0; //doc y?
var sw=0; //square width
var sh=0; //square height
var px=0; //previous x
var py=0; //previous y
var dragMode=false;

function loaded() {
  document.onkeydown=pgKeyDown;
  window.focus();
  uninit();
}

function init() {
  var obj=document.fMain.onemap;
  if(obj==null) return false;

  if((ctool=='zoom')||(ctool=='unzoom')) {
    sw=(obj.width/2)/((szoom/100)+1);
    sh=(obj.height/2)/((szoom/100)+1);
  }
  else if(ctool=='zoomr') {
    sw=(obj.width);
    sh=(obj.height);
  }
  else if(ctool=='pan') {
    sw=(obj.width/2);
    sh=(obj.height/2);
  }
  x0=obj.offsetLeft;
  y0=obj.offsetTop;
  isFramed=true;
  try {
    aFrame=parent.frames(0);
  }
  catch(notFramed) 
  {
  	isFramed=false;
  }
  if(isFramed) {
    dx=document.body.scrollLeft;
    dy=document.body.scrollTop;
  }
  else {
    dx=document.body.scrollLeft-document.body.leftMargin;
    dy=document.body.scrollTop-document.body.topMargin;
  }

  var nextObj=obj.offsetParent;
  if(nextObj==null) return false;
  while(nextObj != null) {
    x0=x0+nextObj.offsetLeft;
    y0=y0+nextObj.offsetTop;
    dx=dx-nextObj.offsetLeft;
    dy=dy-nextObj.offsetTop;
    nextObj=nextObj.offsetParent;
  }
  return true;
}

function uninit() {
  setTool(ctool,ccursor);
  hideCr();
  inited=false;
}

function pgKeyDown() {
  if(event.keyCode==27) {
    dragMode=false;
    uninit();
  }
}

function mapMouseMove(obj,xObj,yObj,scObj) {
  if(dragMode) return mapDrag(obj,xObj,yObj,scObj);
  if(!inited) inited=init();
  if(!inited) return false;

  var scale=scObj.value;
  cx=dx+event.x;
  cy=dy+event.y;
  xObj.value=x0World+(cx-obj.border)*scale;
  yObj.value=y0World+(obj.height-(1+cy-obj.border))*scale;

  if(document.fMain.cHideCursor.checked) {
    hideCr();
    return;
  }
  showCr();
  if((ctool=='zoom')||(ctool=='unzoom')||(ctool=='pan')) {
    document.crx1.style.top=y0+cy-sh;
    document.crx1.style.left=x0+cx-sw;
    document.crx1.height=sh*2;
    document.cry1.style.top=y0+cy-sh;
    document.cry1.style.left=x0+cx-sw;
    document.cry1.width=sw*2;
    document.crx2.style.top=y0+cy-sh;
    document.crx2.style.left=x0+cx+sw-1;
    document.crx2.height=sh*2;
    document.cry2.style.top=y0+cy+sh-1;
    document.cry2.style.left=x0+cx-sw;
    document.cry2.width=sw*2;
  }
  else {
    document.crx1.style.top=y0;
    document.crx1.style.left=x0+cx;
    document.crx1.height=cy-crgap;
    document.cry1.style.top=y0+cy;
    document.cry1.style.left=x0;
    document.cry1.width=cx-crgap;
    document.crx2.style.top=y0+cy+crgap+1;
    document.crx2.style.left=x0+cx;
    document.crx2.height=obj.height-cy-crgap-1;
    document.cry2.style.top=y0+cy;
    document.cry2.style.left=x0+cx+crgap+1;
    document.cry2.width=obj.width-cx-crgap-1;
  }
}

function hideCr() {
  document.crx1.style.visibility='hidden';
  document.cry1.style.visibility='hidden';
  document.crx2.style.visibility='hidden';
  document.cry2.style.visibility='hidden';
  for(i=0; i<dots; i++) eval("document.dot"+i+".style.visibility='hidden';");
}

function showCr() {
  if(!inited) return;
  document.crx1.style.visibility='visible';
  document.cry1.style.visibility='visible';
  document.crx2.style.visibility='visible';
  document.cry2.style.visibility='visible';
}

function showText(aSpan,aText) {
  var obj=eval(aSpan);
  obj.innerHTML=aText;
}

function chZoom(obj) {
  szoom=obj.options[obj.selectedIndex].value;
  inited=init();
}

function doIt(aTask) {
  uninit();
  if(document.fMain.hMapId.value>"0") {
    document.fMain.hTask.value=aTask;
    document.fMain.submit();
  }
  else {
    if(damn==0) alert("No map has been opened.\nPlease select a map on the left of this page.");
    if(damn==1) alert("No map has been opened.\nFirst, select a map on the LEFT of this page.\n\n<--- THAT one!");
    if(damn==2) alert("No map has been opened.\nPlease select...\nOops... perhaps there is no map over there.\n\n<---\n<---   is it empty?\n<---\n\n...doh...");
    if(damn==3) alert(".\n\n\n.\n\n.\n.\nI'm bored. :-(");
    if(damn>5) damn=0; else damn++;
  }
}

function setTool(aTool,pointer) {
  var oldObj=eval("document.fMain."+ctool+";");
  var newObj=eval("document.fMain."+aTool+";");
  ctool=aTool;
  document.fMain.hTool.value=ctool;
  if(oldObj!=null) oldObj.className='imbtn';
  newObj.className='imbtnh';
  if(pointer=='') return;
  var obj=document.fMain.onemap;
  if(obj==null) return;
  obj.style.cursor=pointer;
  ccursor=pointer;

  var obj=document.fMain.onemap;
  if(obj!=null) {
    if(aTool=='identify') obj.useMap='#hotspot';
    else obj.useMap='#nospot';
  }
}

function mapClick(obj,xObj,yObj,scObj) {
  if(ctool=='identify') return;
  else if((ctool=='distance')||(ctool=='zoomr')||(ctool=='newline')) {
    if(dragMode) {
      dragMode=false;
      return mapDragEnd(obj,xObj,yObj,scObj);
    }
    else {
      dragMode=true;
      return mapDragStart(obj,xObj,yObj,scObj);
    }
  }
  else if(ctool=='newspot') addSpot();
  else doIt(ctool);
}

function doSelect() {
  document.fMain.hLayer.value='';
  document.fMain.hField.value='label';
  document.fMain.hSign.value='LIKE';
  doIt('select');
}

function noSelect() {
  document.fMain.hLayer.value='';
  document.fMain.hField.value='label';
  document.fMain.hSign.value='LIKE';
  document.fMain.tSearch.value='';
  doIt('redraw');
}

function showTable(anUrl) {
  var pop=window.open(anUrl,"_table","toolbar=no,location=no,directories=no,status=yes,"+
  "menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=640,height=300,top=200,left=25");
}

function printMap(anUrl) {
  var pop=window.open(anUrl+"&units="+document.fMain.sUnits.options[document.fMain.sUnits.selectedIndex].value,
  "_print","toolbar=no,location=no,directories=no,status=yes,"+
  "menubar=yes,scrollbars=yes,resizable=yes,copyhistory=no,width=620,height=460,top=20,left=20");
}

function mapDragStart(obj,xObj,yObj,scObj) {
  if(dragMode) return;
  if(!(ctool=='zoomr' || ctool=='newline' || ctool=='distance')) return;
  if(!inited) inited=init();
  if(!inited) return false;

  var scale=scObj.value;
  px=dx+event.x;
  py=dy+event.y;
  xObj.value=x0World+(px-obj.border)*scale;
  yObj.value=y0World+(obj.height-(1+py-obj.border))*scale;
  showText('tips','start point: ('+xObj.value+','+yObj.value+')');
  if(document.fMain.cHideCursor.checked) hideCr(); else showCr();
}

function mapDrag(obj,xObj,yObj,scObj) {
  if(!(ctool=='zoomr' || ctool=='newline' || ctool=='distance')) return;
  if(!inited) inited=init();
  if(!inited) return false;

  var scale=scObj.value;
  cx=dx+event.x;
  cy=dy+event.y;
  xObj.value=x0World+(cx-obj.border)*scale;
  yObj.value=y0World+(obj.height-(1+cy-obj.border))*scale;

  if(document.fMain.cHideCursor.checked) return;
  showCr();
  if(ctool=='zoomr') {
    if(px<cx) {x1=x0+px; x2=x0+cx;} else {x1=x0+cx; x2=x0+px;}
    if(py<cy) {y1=y0+py; y2=y0+cy;} else {y1=y0+cy; y2=y0+py;}
    document.crx1.style.top=y1+(crgap/2);
    document.crx1.style.left=x1;
    document.crx1.height=y2-y1-crgap;
    document.cry1.style.top=y1;
    document.cry1.style.left=x1+(crgap/2);
    document.cry1.width=x2-x1-crgap;
    document.crx2.style.top=y1+(crgap/2);
    document.crx2.style.left=x2;
    document.crx2.height=y2-y1-crgap;
    document.cry2.style.top=y2;
    document.cry2.style.left=x1+(crgap/2);
    document.cry2.width=x2-x1-crgap;
  }
  else if((ctool=='newline')||(ctool=='distance')) {
    spcX=(cx-px)/(dots+1);
    spcY=(cy-py)/(dots+1);
    for(i=0; i<dots; i++) {
      dot=eval("document.dot"+i+";");
      dot.style.visibility='visible';
      dot.style.left=x0+px+((i+1)*spcX)-1;
      dot.style.top=y0+py+((i+1)*spcY)-1;
    }
    document.crx1.style.top=y0+py-crgap-1;
    document.crx1.style.left=x0+px;
    document.crx1.height=crgap;
    document.cry1.style.top=y0+py;
    document.cry1.style.left=x0+px-crgap-1;
    document.cry1.width=crgap;
    document.crx2.style.top=y0+py+2;
    document.crx2.style.left=x0+px;
    document.crx2.height=crgap;
    document.cry2.style.top=y0+py;
    document.cry2.style.left=x0+px+2;
    document.cry2.width=crgap;
  }
}

function mapDragEnd(obj,xObj,yObj,scObj) {
  if(!(ctool=='zoomr' || ctool=='newline' || ctool=='distance')) return;
  if(!inited) inited=init();
  if(!inited) return false;

  var scale=scObj.value;
  cx=dx+event.x;
  cy=dy+event.y;
  xObj.value=x0World+(((px+cx)/2)-obj.border)*scale;
  yObj.value=y0World+(obj.height-(1+((py+cy)/2)-obj.border))*scale;

  if(ctool=='zoomr') {
    var ratioX=scale*Math.abs(cx-px)/sw;
    var ratioY=scale*Math.abs(cy-py)/sh;
    if(ratioX>ratioY) scObj.value=ratioX; else scObj.value=ratioY;
    doIt(ctool);
  }
  else if(ctool=='newline') {
    x1=x0World+(px-obj.border)*scale;
    y1=y0World+(obj.height-(1+py-obj.border))*scale;
    x2=x0World+(cx-obj.border)*scale;
    y2=y0World+(obj.height-(1+cy-obj.border))*scale;
    addLine(x1,y1,x2,y2);
  }
  else if(ctool=='distance') {
    x1=x0World+(px-obj.border)*scale;
    y1=y0World+(obj.height-(1+py-obj.border))*scale;
    x2=x0World+(cx-obj.border)*scale;
    y2=y0World+(obj.height-(1+cy-obj.border))*scale;
    unitsObj=document.fMain.sUnits;
    var unitsVal=unitsObj.options[unitsObj.selectedIndex].value;
    var unitsTxt=unitsObj.options[unitsObj.selectedIndex].text;
    var dist=toUnits(Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2)),cunits,unitsVal);
    window.alert('Distance:\n'+dist+' '+unitsTxt);
  }
}

