var mousex = 10;
var mousey = 10;
var grabx = 0;
var graby = 0;
var orix = 0;
var oriy = 0;
var elex = 0;
var eley = 0;
var panScale = 2/3; // portion of map frame width/height to pan

var dragobj = null;

function falsefunc() { return false; } // used to block cascading events

function init() {
	document.onmousemove = update; // update(event) implied on NS, update(null) implied on IE
	update();
	}

function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
  if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)

  if (e)
  { 
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mousex = e.pageX;
      mousey = e.pageY;
      algor = '[e.pageX]';
      if (e.clientX || e.clientY) algor += ' [e.clientX] '
    }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mousex = e.clientX + document.body.scrollLeft;
      mousey = e.clientY + document.body.scrollTop;
      algor = '[e.clientX]';
      if (e.pageX || e.pageY) algor += ' [e.pageX] '
    }  
  }
}

function update(e)
{
  getMouseXY(e); // NS is passing (event), while IE is passing (null)
  document.getElementById('span_slider_mousex').innerHTML = mousex;
  document.getElementById('span_slider_grabx').innerHTML = grabx;

}

function grab(context)
	{
	document.onmousedown = falsefunc; // in NS this prevents cascading of events, thus disabling text selection
	dragobj = context;
	document.onmousemove = drag;
	document.onmouseup = drop;
	update();
	grabx = mousex;
	}

function drag(e) // parameter passing is important for NS family 
	{
	update(e);
	if (mousex-grabx>4) {
		parent.mapframe.zoomInCenterCenter();
		grabx=grabx+8;
		if (grabx>75) drop();
		}
	if (grabx-mousex>4) {
		parent.mapframe.zoomOutCenterCenter();
		grabx=grabx-8;
		if (grabx<35) drop();
		}
	return false; // in IE this prevents cascading of events, thus text selection is disabled
	}

function drop(e) {
	update(e);
	if (dragobj) {
		dragobj = null;
		}
	document.onmousemove = update;
	document.onmouseup = null;
	document.onmousedown = null;   // re-enables text selection on NS
	}

function panUp() {
	parent.mapframe.getMapSize();
	newY=Math.round(-parent.mapframe.mapHeight*panScale-parent.mapframe.eley);
	parent.mapframe.pan(-parent.mapframe.elex,newY);
	parent.mapframe.update();
	}

function panDown() {
	parent.mapframe.getMapSize();
	newY=Math.round(parent.mapframe.mapHeight*panScale-parent.mapframe.eley);
	parent.mapframe.pan(-parent.mapframe.elex,newY);
	parent.mapframe.update();
	}
	
function panRight() {
	parent.mapframe.getMapSize();
	newX=Math.round(parent.mapframe.mapWidth*panScale-parent.mapframe.elex);
	parent.mapframe.pan(newX,-parent.mapframe.eley);
	parent.mapframe.update();
	}

function panLeft() {
	parent.mapframe.getMapSize();
	newX=Math.round(-parent.mapframe.mapWidth*panScale-parent.mapframe.elex);
	parent.mapframe.pan(newX,-parent.mapframe.eley);
	parent.mapframe.update();
	}

function zoomTrackClick(e) {
	var newZoom=0;
	var x=0;
	update(e);
	//if (mousex>63) newZoom=1;
	//if (mousex<=63 && mousex>55) newZoom=2;
	if (mousex>55) newZoom=2;
	if (mousex<=55 && mousex>47) newZoom=3;
	if (mousex<=47) newZoom=4;
	var oldZoom=parent.mapframe.currentZoom;
	if (newZoom<oldZoom) {
		for (x=newZoom;x<oldZoom;x++) {parent.mapframe.zoomInCenterCenter()}
		}
	else {
		for (x=oldZoom;x<newZoom;x++) {parent.mapframe.zoomOutCenterCenter()}
		}
	}

function showLayer(layername) {
	var currentZoom=parent.mapframe.currentZoom;
	if (document.getElementById(layername).checked) {
		parent.mapframe.document.getElementById(layername+currentZoom).style.visibility="visible";
		if (document.getElementById(layername+"legend")) document.getElementById(layername+"legend").style.display="block";
		}
	else {
		parent.mapframe.document.getElementById(layername+currentZoom).style.visibility="hidden";
		if (document.getElementById(layername+"legend")) document.getElementById(layername+"legend").style.display="none";
		}
	}

function showIcons(layername) {
	var currentZoom=parent.mapframe.currentZoom;
	if (document.getElementById(layername).checked) {
		parent.mapframe.document.getElementById(layername+"_overlay").style.visibility="visible";
		if (document.getElementById(layername+"legend")) document.getElementById(layername+"legend").style.display="block";
		}
	else {
		parent.mapframe.document.getElementById(layername+"_overlay").style.visibility="hidden";
		if (document.getElementById(layername+"legend")) document.getElementById(layername+"legend").style.display="none";
		}
	}

function changeBackground(background) {
	var currentZoom=parent.mapframe.currentZoom;
	parent.mapframe.document.getElementById("mapimg"+currentZoom).src="layers/"+background+currentZoom+".jpg";
	for (i=parent.mapframe.maxZoomIn;i<=parent.mapframe.maxZoomOut;i++) {
		if (i!=currentZoom) {
			parent.mapframe.document.getElementById("mapimg"+i).src="layers/"+background+i+".jpg";
			}
		}
	}

function showHideDetail(detailDiv) {
	if (document.getElementById(detailDiv+"Details").style.display=="block") {
		document.getElementById(detailDiv+"Details").style.display="none";
		document.getElementById(detailDiv+"DisplayControl").src="icons/legend_open.png";
		}
	else {
		document.getElementById(detailDiv+"Details").style.display="block";
		document.getElementById(detailDiv+"DisplayControl").src="icons/legend_close.png";
		}
	}

function updateGoogleLink(theLink) {
	parent.mapframe.getMapSize();
	var currentZoom=parent.mapframe.currentZoom;
	var zoomMultiplier=Math.pow(2,currentZoom-2);
	var xCenter=Math.round((parent.mapframe.mapWidth*0.5-parent.mapframe.elex)*zoomMultiplier);
	var yCenter=Math.round((parent.mapframe.mapHeight*0.5-parent.mapframe.eley)*zoomMultiplier);
	var latitude=42.04571611-(yCenter/109080);
	var longitude=-93.66790418+(xCenter/80707);
	var gZoom=19-currentZoom;
	theLink.href="http://maps.google.com/?ll="+latitude+","+longitude+"&z="+gZoom;
	window.status=xCenter+", "+yCenter+", zoom="+currentZoom+", multiplier="+zoomMultiplier;
	}

function printMap() {
	if (!isNaN(parent.mapframe.elex)) {
		var url="printmap.asp";
		var background="map";
		var layer="";
		url=url+"?zoom="+parent.mapframe.currentZoom;
		url=url+"&xleft="+Math.round(-parent.mapframe.elex);
		url=url+"&ytop="+Math.round(-parent.mapframe.eley);
		url=url+"&width="+Math.round(parent.mapframe.mapWidth);
		url=url+"&height="+Math.round(parent.mapframe.mapHeight);
		if (document.getElementById("aerialBackground").checked) {background="aerial"}
		if (document.getElementById("buildingnames").checked) {background="mapnames"}
		url=url+"&background="+background;
		if (document.getElementById("parking").checked) {layer=layer+"parking,"}
		if (document.getElementById("bike").checked) {layer=layer+"bike,"}
		if (document.getElementById("access").checked) {layer=layer+"access,"}
		if (document.getElementById("wireless").checked) {layer=layer+"wireless,"}
		if (document.getElementById("art").checked) {layer=layer+"art,"}
		if (document.getElementById("panoramas").checked) {layer=layer+"panoramas,"}
		if (document.getElementById("memorials").checked) {layer=layer+"memorials,"}
		if (document.getElementById("phones").checked) {layer=layer+"phones,"}
		if (document.getElementById("construction").checked) {layer=layer+"construction,"}
		url=url+"&layer="+layer;
		window.open(url,"printwindow","resizable=yes,scrollbars=yes,width="+parent.mapframe.mapWidth+",height="+parent.mapframe.mapHeight);
		}
	}