var zoomwidth=600;  // Default Size of Zoom window view
var zoomheight=400;
var extrawidth=300;
var mapzoom = 0;
var zoomx,zoomy;
var markerx=25;    // Marker Icon offset to focus point.
var markery=25;
var lastx,lasty;
var zoominonly = new Array('zoomedin','img_up','img_down','img_left','img_right');
var zoomoutonly;
var unfocusonly = new Array('refocus');
// var coordform; // Set in parent file.
var edmarker = 0;
var loadcheck=0;
var loadwait=0;   // Waiting for new map img to load. Ignore overzealous clicking.
var loadWaitTimeout;

function MapClicked(x,y)
{
   if (mapzoom == 0)
   {
      x=zoomscale*x;
      y=zoomscale*y;
      mapzoom=1;
   }
   else
   {
      x=x+zoomx;
      y=y+zoomy;
   }
//   marker = '';  // Turn off pointer
   ZoomTo(x,y);
}

function ZoomTo(x,y,blnk)
{
   if (loadwait==1)
   {
// Stop Mad Clickers going overboard!
//      alert('Ignoring multiple clicks!');
      if (loadWaitTimeout) clearTimeout(loadWaitTimeout);
      loadWaitTimeout = setTimeout('loadwait=0;',5000);
      return false;
   }

   mapzoom=1;
   zoomx=x-zoomwidth/2;
   zoomy=y-zoomheight/2;
   if (blnk)  // Blank image first (eg; when resizing)
      ChangeMapImage('/images/general/trans.gif',zoomwidth,zoomheight);

   if (focuson)
   {
      ChangeMapImage(mapimguri+'&top='+zoomy+'&left='+zoomx+'&width='+zoomwidth+'&height='+zoomheight
         +'&focus='+focuson,
         zoomwidth,zoomheight);
   }
   else if (focuscat)
   {
      ChangeMapImage(mapimguri+'&top='+zoomy+'&left='+zoomx+'&width='+zoomwidth+'&height='+zoomheight
         +'&ptrleft='+(x-zoomx)+'&ptrtop='+(y-zoomy)+'&cat='+focuscat,
         zoomwidth,zoomheight);
   }
   else
   {
      ChangeMapImage(mapimguri+'&top='+zoomy+'&left='+zoomx+'&width='+zoomwidth+'&height='+zoomheight
         +'&ptrleft='+(x-zoomx)+'&ptrtop='+(y-zoomy)+'&marker='+marker,
         zoomwidth,zoomheight);
   }

   if (coordform)
   {
//       var mform = document.forms[coordform];
//       mform.Xpos.value=x;
//       mform.Ypos.value=y;
      EdUpdateForm(x,y);
   }

   ChangeVis(zoominonly,'visible');
   ChangeVis(zoomoutonly,'hidden');
   ChangeVis(unfocusonly,'visible');

   lastx=x;
   lasty=y;
   return true;
}


function ChangeMapImage(newuri,width,height)
{
   var mapimg = (document.getElementById && document.getElementById('mapimg'))
                  || (document.all && document.all['mapimg'])
                  || document.images['mapimg'];
   mapimg.src = newuri;

   if (mapimg.style)
   {
      mapimg.style.width = width;
      mapimg.style.height = height;
   }
   else
   {
      mapimg.width = width;
      mapimg.height = height;
   }

   if (document.forms.imgurl)
      document.forms.imgurl.url.value = mapimg.src;
   loadwait=1;
   window.status="Loading Map Image...";
//   window.status="Map Img Loading...";
}

function ZoomOffset(xof,yof)
{
   if (mapzoom==0)
      return false;
   marker = '';  // Turn off pointer
   ZoomTo(Math.round(lastx+xof*zoomwidth*2/3),Math.round(lasty+yof*zoomheight*2/3));
   return false;
}

function ZoomOut()
{
   ChangeMapImage(mapimguri+'&Zoom=1','','');
   mapzoom=0;
   ChangeVis(zoominonly,'hidden');
   ChangeVis(zoomoutonly,'visible');
   ChangeVis(unfocusonly,'visible');
//   setTimeout('alert(document.getElementById("mapimg").width);',1000);
//   PlaceMarker(lastx,lasty);
//   HideMarker();
}

function Refocus()
{
   var ok=true;
   if (focusx!='')
   {
      ok=ZoomTo(focusx,focusy);
   }

   if (ok) ChangeVis(unfocusonly,'hidden');
}

function ChangeVis(ids,vis)
{
   if (!ids)
      return;
   for (var i=0;i<ids.length;i++)
   {
      var ob = (document.getElementById && document.getElementById(ids[i]))
                  || (document.all && document.all[ids[i]])
                  || (document.layers && document.layers[ids[i]]);
      if (ob) ob.style.visibility=vis;
   }
}

function ChangeMarker(mkr)
{
   marker=mkr;
   if (mapzoom == 1)
   {
      ZoomTo(lastx,lasty);
   }
}

// A dose of Uber-DHTML stuff for switching between markers for the editor multi-marker bit...
function EdSwitchMarker(msfield)
{
   var markid = msfield.value;
   edmarker = markid;
   var chunk = document.getElementById('Marker_'+markid);
   if (chunk)
   {
      var bits = chunk.getElementsByTagName('*');
      var newinfo = new Object();
      for (var i=0; i<bits.length; i++)
      {
         if (bits[i].getAttribute('name'))
         {
            newinfo[bits[i].getAttribute('name')] = bits[i].value;
         }
      }

//      alert(newinfo.MarkerID+'/'+newinfo.Xpos+'/'+newinfo.Ypos);
      marker = newinfo.MarkerID;
      if (newinfo.Xpos && newinfo.Ypos)
         ZoomTo(newinfo.Xpos,newinfo.Ypos)
      else
         ZoomTo(lastx,lasty);

   }
}

function EdUpdateForm(x,y)
{
   var chunk = document.getElementById('Marker_'+edmarker);
   if (chunk)
   {
      var bits = chunk.getElementsByTagName('input');
      for (var i=0; i<bits.length; i++)
      {
         if (bits[i].getAttribute('name')=='Xpos')
            bits[i].value = x;
         if (bits[i].getAttribute('name')=='Ypos')
            bits[i].value = y;
      }
   }
}


function TotalOffset(elmnt,prop)
{
   var val = elmnt[prop];
   while (elmnt.offsetParent)
   {
      elmnt=elmnt.offsetParent;
      val+=elmnt[prop] || 0;
   }
   return val;
}

function dumpProps(obj, parent) {
   for (var i in obj) {
      if (parent) { msg = parent + "." + i + "\n" + obj[i]; } else { var msg = i + "\n" + obj[i]; }
      if (!confirm(msg)) { return; }
      if (typeof obj[i] == "object") {
         if (parent) { dumpProps(obj[i], parent + "." + i); } else { dumpProps(obj[i], i); }
      }
   }
}

var ScaleMapTimeout;

function CheckScaleMap()
{
   if (ScaleMapTimeout)
      clearTimeout(ScaleMapTimeout);
   ScaleMapTimeout = setTimeout('CheckScaleMap2();',200);
}

function CheckScaleMap2()
{
   var rs = GetScaleMap();
   if (rs && mapzoom == 1)
   {
      ZoomTo(lastx,lasty,1);
   }
//      alert("Setting width: "+zoomwidth);
}

function GetScaleMap()
{
   var smo;
   if (document && document.getElementById)
      smo = document.getElementById('map_div');
   var rs = 0;
//   alert("Width: "+smo+' / '+smo.width);
//   dumpProps(smo);
//alert('Width: '+window.innerWidth+'/'+window.outerWidth+'/'+document.body.clientWidth+'/'+document.body.scrollWidth);
//   if (smo && smo.offsetWidth && (smo.offsetWidth-100)!=zoomwidth)
   if (document.body && document.body.clientWidth)
   {
      var nw = Math.floor(document.body.clientWidth/40)*40 - extrawidth;
//      var nw = smo.offsetWidth - 100;
//      lastx+=(zoomwidth-nw)/2;
      if (nw!=zoomwidth)
         rs = 1;
      zoomwidth = nw;
//      alert("Rescale Width: "+nw);
   }
   return rs;
}

MapJSLoaded();
