 
var zbmode = false;
var zstart = {};
var targetZoom; //kept getting lost if not global
var targetCenter;
var tntZoomBoxControl;

function ZbMouseDown(evt) {
	if(zbmode){
   		var it = document.getElementById('zoombox');
		if(it){
			it.style.display = "";
			it.style.width = "1px";
			it.style.height = "1px";
			it.style.left = (evt.clientX)+"px";
			it.style.top = (evt.clientY)+"px";
			zstart = evt;
            }
       
		map.AttachEvent("onmousemove",ZbAdjustBox);
		map.AttachEvent("onmouseup", ZbMouseUp);
    }
if (mydragreset) { clearTimeout(mydragreset); }
	return zbmode;
	}

function ZbAdjustBox(evt){
	var it = document.getElementById('zoombox');
	if(it && (it.style.display == '')){
		var w = evt.clientX - zstart.clientX -1;
		var h = evt.clientY - zstart.clientY -1;
		it.style.width = Math.abs(w) + "px"; 
		it.style.height = Math.abs(h) + "px"; 
		}
	
	return zbmode;
	}
 
function ZbMouseUp(evt) {
	var x, y;
	if(zbmode) {
		if(!evt){
			evt = window.event;
			}
		map.DetachEvent("onmouseup",ZbMouseUp);
		var it = document.getElementById('zoombox');
		var md = document.getElementById("mapDiv");
		var width;
		var height;
		if(it){
			width = it.offsetWidth; //save height and width
			height = it.offsetHeight;
			it.style.display = "none";
			} 
 
		if(typeof evt.mapX != 'undefined'){ //this works in ie and seems better than the above
			x = (evt.mapX + zstart.mapX)/2; 
			y = (evt.mapY + zstart.mapY)/2; 
			}
		else {
			y = parseInt(zstart.mapY + width/2);
			x = parseInt(zstart.mapX + height/2);
			}
		var	pixel = new VEPixel(x, y);
		var LL = map.PixelToLatLong(pixel);
		targetCenter = LL;
		map.PanToLatLong(LL);
		var zoomLevel;
		if(width > 5 || height > 5){
			var sc = md.offsetWidth/width;
			var sc2 = md.offsetHeight/height;
			if(sc2 < sc){ sc = sc2; }
			zoomLevel = map.GetZoomLevel();
	      	 	zoomLevel = zoomLevel + parseInt(Math.log(sc)/Math.log(2));
			}
		else {
			zoomLevel = map.GetZoomLevel()+1;
			}
		if(zoomLevel> maxlevelused) {
			zoomLevel = maxlevelused;
			}
		if(zoomLevel < minlevelused) {
			zoomLevel = minlevelused;
			}
		targetZoom = zoomLevel;
		map.AttachEvent("onendpan", zoomMap);
		}
    return zbmode;
	}

	var mydragreset;

	function zoomMap() {
	    map.SetZoomLevel(targetZoom);
	    map.DetachEvent("onendpan", zoomMap);
	    map.PanToLatLong(targetCenter);
	    mydragreset = setTimeout('tntZoomBoxControl.onclick();', 5000.000000);
	    }

    function AddZoomBoxControl(home, imgsrc) {
    var imgsrczoom;
    if (typeof imgsrc == "string") {
        imgsrczoom = imgsrc;
            }
    else {
        imgsrczoom = "http://www.microimages.com/webmap/images/bingzoom/";
        }
	var tntInitialView = map.GetMapView();
    var sb = document.createElement("div");
	var zb = document.createElement("div"); //container
	zb.style.position = "relative";
	zb.style.top = "148px";
	zb.style.width = "16px";
 
	if (home !== false) {
	    zb.style.height = "32px";
	    }
	 else {
	     zb.style.height = "16px";
	    }
	zb.style.backgroundColor = "#235087";
	zb.style.opacity = 0.75;
	zb.style.padding = "9px";
 	if(document.all){
		zb.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=70)";
		}
	zb.onmouseover = function(){ this.style.opacity = 0.90; this.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=90)"; };
	zb.onmouseout = function(){ this.style.opacity = 0.70; this.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=70)"; };

	var el = document.createElement("img"); 
	el.id = 'zoomboxicon';
	el.src = imgsrczoom + 'zb.gif';	
	el.style.position = "relative";
	el.style.zIndex = "1";
	el.style.top = '0px';
	el.style.left = '0px';
	el.title = "Turn Zoom Box On";

	el.onclick = function(){ 
	zbmode = (!zbmode); 
	var im = document.getElementById('zoomboxicon');
	if(zbmode){
		im.title = "Turn Zoom Box Off";
		im.src = imgsrczoom + "zboff.gif";
		map.AttachEvent("onmousedown",ZbMouseDown);
		}
	else {
		im.src = imgsrczoom + 'zb.gif';	
		im.title = "Turn Zoom Box On";
		map.DetachEvent("onmousedown",ZbMouseDown);
		map.DetachEvent("onmousemove",ZbAdjustBox);
		map.DetachEvent("onmouseup",ZbMouseUp);
		}
    };
	
	tntZoomBoxControl = el;
	zb.appendChild(el);
	if (home !== false) {
	    var el2 = document.createElement("img");
	    el2.id = 'homeicon';
	    el2.title = "Zoom To Home View";
	    el2.src = imgsrczoom + 'home.gif';
	    el2.style.position = "relative";
	    el2.style.zIndex = "1";
	    el2.style.top = '5px';
	    el2.style.left = '3px';
	    el2.onclick = function() {
	        map.SetMapView(tntInitialView);
	    };
	    zb.appendChild(el2);
	    }
	map.AddControl(zb);

	var db = document.createElement("div"); //visible display box.
	db.id = 'zoombox';
	db.style.position = "relative";
	db.style.top = "148px";
	db.style.left = "300px";
	db.style.width = "42px";
	db.style.height = "82px";
	db.style.border = "dotted red 3px";
 	db.style.display = "none";
 	db.onmouseup = ZbMouseUp;
 	map.AddControl(db);
	}

 
