    // interactive map javascript copyright alsic 2010
	var imgUpOn = new Image();
	var imgUpLeftOn = new Image();
	var imgUpRightOn = new Image();
	var imgLeftOn = new Image();
	var imgDownOn = new Image();
	var imgDownLeftOn = new Image();
	var imgDownRightOn = new Image();
	var imgRightOn = new Image();
	// normal
	var imgUpOff = new Image();
	var imgUpLeftOff = new Image();
	var imgUpRightOff = new Image();
	var imgLeftOff = new Image();
	var imgDownOff = new Image();
	var imgDownLeftOff = new Image();
	var imgDownRightOff = new Image();
	var imgRightOff = new Image();
	// disabled
	var imgUpDisabled = new Image();
	var imgUpLeftDisabled = new Image();
	var imgUpRightDisabled = new Image();
	var imgLeftDisabled = new Image();
	var imgDownDisabled = new Image();
	var imgDownLeftDisabled = new Image();
	var imgDownRightDisabled = new Image();
	var imgRightDisabled = new Image();
	// zoommode images
	var imgModeZoomOff = new Image();
	var imgModeZoomOn = new Image();
	var imgModeSelectOff = new Image();
	var imgModeSelectOn= new Image();
	// map preloading
	var imgPreloadedMap = new Image();
    // popup
    var popupUrl;  //obsolete?
	var popupX;
	var popupY;
	var popupWidth = 350;
	var popupHeight = 220;	//add the height of the titlebar	
    // map interface controls
	var sliderHeight = 176;
	var isDraggingSlider = false;
	var zoomSliderObj;
	var zoomSliderBarObj;
	var minYSlider, maxYSlider;
	var flgWarningShown = false;	//only show this once
	var hoverObj;
	var loading;	//true when the mapimage is loading (between UI click and display of the map)
    var imageMapRequest;
    var imageMapOnlyRequest;

    // DYNAMIC DIV EFFECTS
	function changeOpac(opacity, id) { 
		//dbg('changeOpac(' + opacity + ')');
		var object = document.getElementById(id).style; 
		object.opacity = (opacity / 100); 
		object.MozOpacity = (opacity / 100); 
		object.KhtmlOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
		if (opacity == 0) { object.visibility = 'hidden'; }
	}
	function initiateFade(id, opacStart, opacEnd, millisec) { 
		var speed = Math.round(millisec / 100); 
		var timer = 0;
		var fadeStep = 1;
		if(opacStart > opacEnd) { 
			for(i = opacStart; i >= opacEnd; i=i-fadeStep) {
				setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
				timer++; 
			} 
		} else if(opacStart < opacEnd) {
			for(i = opacStart; i <= opacEnd; i=i+fadeStep)
				{
				//dbg(timer * speed);
				setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
				timer++;
			}
		} 
	}
	function hideDiv(id) {
		var targetDiv = document.getElementById(id);
		if (targetDiv != null) {
			targetDiv.style.visibility = 'hidden';
		}
	}
	function fadeInDiv(id) {
		var fadingInDiv = document.getElementById(id);
		if (fadingInDiv != null) {
			changeOpac(0, id);
			//fadingInDiv.style.display = 'block';
			fadingInDiv.style.visibility = 'visible';
			initiateFade(id, 1, 100, 500);
		}
		//dbg("fadingInDiv finished");
	}
	function fadeOutDiv(id) {
		var fadingOutDiv = document.getElementById(id);
		if (fadingOutDiv != null) {
			//initiateFade(id, 100, 0, 1500);
			//fadingOutDiv.style.display = 'none';
			fadingOutDiv.style.visibility = 'hidden';
		}
	}
	function moveDiv(id, x, y) {
		var targetDiv = document.getElementById(id);
		if (targetDiv != null) {
			targetDiv.style.left = x;
			targetDiv.style.top = y;
		}
	}
    // WARNING
	function showWarning(id) {
		var warning = document.getElementById(id);
		if ((warning != null) && (flgWarningShown == false)) {
			flgWarningShown = true;
			warning.style.visibility = 'visible';
			setTimeout("initiateFade('" + id + "', 50, 0, 1000)", 3000);
		}
	}
    // TOOLTIP
	function hideTooltip() {
		var tooltipDiv = document.getElementById("tooltipDiv");
		tooltipDiv.style.visibility = 'hidden';
		hoverObj.onmouseleave = null;
	}
	function showTooltip(tooltiptext, left, top, id) {
		//alert("showTooltip");
		var tooltipDiv = document.getElementById("tooltipDiv");
		tooltipDiv.innerHTML = tooltiptext;
		tooltipDiv.style.left = left + 'px';
		tooltipDiv.style.top = top + 'px';
		tooltipDiv.style.visibility = 'visible';
		hoverObj = document.getElementById(id);
		hoverObj.onmouseleave = hideTooltip;
	}
	// NAVIGATION HELPERS
	function imgOn(imgName) {
		if (document.images && !loading) {
			document.images[imgName].src = eval(imgName + "On.src");
		}
	}
	function imgOff(imgName) {
		if (document.images && !loading) {
			document.images[imgName].src = eval(imgName + "Off.src");
		}
	}
	function imgDisabled(imgName) {
		if (document.images) {
			document.images[imgName].src = eval(imgName + "Disabled.src");
		}
	}
	// NAVIGATION MAIN FUNCTIONS
	function disableNav() {
		imgDisabled('imgUp');
		imgDisabled('imgUpLeft');
		imgDisabled('imgUpRight');
		imgDisabled('imgLeft');
		imgDisabled('imgRight');
		imgDisabled('imgDown');
		imgDisabled('imgDownLeft');
		imgDisabled('imgDownRight');
	}
	function EnableNav() {
		imgOff('imgUp');
		imgOff('imgUpLeft');
		imgOff('imgUpRight');
		imgOff('imgLeft');
		imgOff('imgRight');
		imgOff('imgDown');
		imgOff('imgDownLeft');
		imgOff('imgDownRight');
	}
	function reload() {
        // display loading image and issue fetchMap command
		loading = true;
		var div = document.getElementById('loadingImg');
		div.style.visibility = 'visible';
		fetchMap();
	}
	function panMap(direction) {
		// direction: 1-8, 1=topleft, 2=top, 3=topright, 4=left, etc...
		disableNav();
		// move left:
		if ((direction == 1) || (direction == 4) || (direction == 6)) {
			longitude = longitude - (lonOffset * range);
		}
		// move up:
		if ((direction == 1) || (direction == 2) || (direction == 3)) {
			latitude = latitude + (latOffset * range);
		}	
		// move right:
		if ((direction == 3) || (direction == 5) || (direction == 8)) {
			longitude = longitude + (lonOffset * range);				
		}	
		// move down:
		if ((direction == 6) || (direction == 7) || (direction == 8)) {
			latitude = latitude - (latOffset * range);				
		}
		reload();
	}
	function setRange(newrange) {
		disableNav();
		range = newrange;
		reload();
	}
	// LOAD MAP AND TARGETDATA FUNCTIONS
	function LoadDone() {
		var div = document.getElementById('loadingImg'); 
		div.style.visibility = 'hidden';
		loading = false;
		EnableNav();
		showWarning('warningDiv');
	}
	function fetchMap() {
		// currentTime added to fix cache bug in Firefox
        if (latitude.toFixed) {
			imgPreloadedMap.src = "Geopresentation.ashx?wi=" + width + "&he=" + height + "&la=" + latitude.toFixed(3) + "&lo=" + longitude.toFixed(3) + "&ra=" + range.toFixed(1) + "&nocache=" + getCurrentTime();
		} else {
			imgPreloadedMap.src = "Geopresentation.ashx?wi=" + width + "&he=" + height + "&la=" + latitude + "&lo=" + longitude + "&ra=" + range + "&nocache=" + getCurrentTime();
		}
	}
	function reloadSilent() {
		if (!loading)
		{
			//dbg("ra=" + range.toFixed(1) + " lo=" + longitude.toFixed(3) + " la=" + latitude.toFixed(3));
			fetchMap();
		}
		if (refreshInterval < 5000) { refreshInterval = 5000; }
		setTimeout("reloadSilent()",refreshInterval);
	}
	// AJAX REQUEST OBJECT
	function getXMLHTTP() {
        var XMLHTTP = null;
        if (window.ActiveXObject) {
            try {
                XMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (ex1) {
                try {
                    XMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (ex2) {
                }
            }   
        } else if (window.XMLHttpRequest) {
            try {
                XMLHTTP = new XMLHttpRequest();
            } catch(ex3) {
            }
        }
        return XMLHTTP;
    }
    function receivedImageMap() {
        if (imageMapRequest.readyState == 4 && imageMapRequest.status == 200) {
	        dbg("receivedImageMap");
            var imgMap = document.getElementById("imagemapContainer");
            //window.alert(imageMapRequest.responseText);
            imgMap.innerHTML = imageMapRequest.responseText;
    		// moved here from swapMap
            //alert('src waarde=' + imgPreloadedMap.src);
            dbg("receivedImageMap.Replacing map with preloadedmap");
            document.images["imgChart"].src = imgPreloadedMap.src;
        }
    }
    function fetchImageMap() {
	    dbg("fetchImageMap");
        imageMapRequest = getXMLHTTP();
        if (imageMapRequest != null) {
            imageMapRequest.open("GET", "Geopresentation.ashx?map=1");
            imageMapRequest.onreadystatechange = receivedImageMap;
            imageMapRequest.send(null);
        }
    }
    function receivedImageMapOnly() {
        if (imageMapOnlyRequest.readyState == 4 && imageMapOnlyRequest.status == 200) {
	        dbg("receivedImageMapOnly");
            var imgMap = document.getElementById("imagemapContainer");
            imgMap.innerHTML = imageMapOnlyRequest.responseText;
        }
    }
    function fetchImageMapOnly() {
	    dbg("fetchImageMapOnly");
        imageMapOnlyRequest = getXMLHTTP();
        if (imageMapOnlyRequest != null) {
            imageMapOnlyRequest.open("GET", "Geopresentation.ashx?map=1");
            imageMapOnlyRequest.onreadystatechange = receivedImageMapOnly;
            imageMapOnlyRequest.send(null);
        }
    }
	function swapMap() {
	    dbg("swapmap");
		fetchImageMap();
	}
	function getCurrentTime() {
		var now = new Date();
		return now.toString();
	}
	function ShowTarget(event) {
	    return;
	}
    function getBrowserVersion() {
        var version = 999;
        if (navigator.appVersion.indexOf("MSIE") != -1) version = parseFloat(navigator.appVersion.split("MSIE")[1]);
        return version;
    }
    /* showtargetdata */
	function targetAIS(mmsi) {
        var targetdataContainer = document.getElementById('targetdataContainer');
        if (targetdataContainer != null) {
            var targetdataUrl = "ShowTargetData.aspx?mmsi=" + mmsi + "&nocache=" + getCurrentTime();
            var iframeTag = "<iframe id='targetdataIFrame' src='" + targetdataUrl + "' width='100%' height='100%' scrolling='no' ></iframe>";

            if (getBrowserVersion() < 7) {
                //alert('browser versie < 7'); 
                document.all.targetdataIFrame.src = targetdataUrl;
            }  else {
                targetdataContainer.innerHTML = iframeTag;
            }  
        }
	}
	/* popup functies */
    function ShowPopup(e, contentUrl) {
        // detect x/y mouse coordinates
	    if (!e) { e = window.event; }
        var absoluteX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
        var absoluteY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
        // make sure the popup is closed
        hideDiv("popupContainer");
		// fetch new content inside the popupContainer
        var popupContainerContent = document.getElementById('popupContainerContent');
        if (popupContainerContent != null) {
            var iframeTag = "<iframe id='popupContentIFrame' src='" + contentUrl + "' width='100%' height='100%'></iframe>";
            //alert(iframeTag);
            popupContainerContent.innerHTML = iframeTag;
        }
        // move the popup to the mouse coordinates
        moveDiv("popupContainer", absoluteX, absoluteY);
        // display the popup
        fadeInDiv("popupContainer");
    }
	function targetSignalStatus(e, signalStatusId) {
        var signalStatusUrl = "Geopres/popup/ShowSignalStatusInfo.aspx?signalStatusId=" + signalStatusId + "&nocache=" + getCurrentTime();
        ShowPopup(e, signalStatusUrl);
	}
	function ShowATONInfo(e, AtonId) {
        var AtonUrl = "Geopres/popup/ShowATONInfo.aspx?AtonId=" + AtonId + "&nocache=" + getCurrentTime();
        ShowPopup(e, AtonUrl);
	}
	function targetRISObject(e, isrsId) {
        var risPopupUrl = "Geopres/popup/ShowRISObject.aspx?isrsid=" + isrsId + "&nocache=" + getCurrentTime();
        ShowPopup(e, risPopupUrl);
	}
	function targetIMapSymbol(e, symbolId) {
        var iMapSymbolPopupUrl = "modules/wsk0061/iMap/IMapSymbolPopup.aspx?id=" + symbolId + "&nocache=" + getCurrentTime();
        ShowPopup(e, iMapSymbolPopupUrl);
	}
	function targetEMMAWarning(e, emmaId) {
        var itemUrl = "Geopres/popup/ShowEmmaWarningInfo.aspx?id=" + emmaId + "&nocache=" + getCurrentTime();
        ShowPopup(e, itemUrl);
	}
	function targetBasestationReport(e, mmsi) {
        var itemUrl = "Geopres/popup/ShowBasestationInfo.aspx?mmsi=" + mmsi + "&nocache=" + getCurrentTime();
        ShowPopup(e, itemUrl);
    }
	function ShowDetails() {
		fadeOutDiv("popupInPageDiv");
		var _iframeRef = document.getElementById("popupInline");
		if (_iframeRef != null) {
			var _popupDiv = document.getElementById("popupInPageDiv");
			if (_popupDiv != null) {
				if (popupX > (width + 40 - popupWidth)) {
					popupX = width + 40 - popupWidth;
				}
				else if (popupX < 40) {
					popupX = 40;
				}
				if (popupY > (height + 55 - popupHeight)) {
					popupY = height + 55 - popupHeight;
				}
				else if (popupY < 55) {
					popupY = 55;
				}
				_popupDiv.style.left = popupX;
				_popupDiv.style.top = popupY;
			}
			//alert(popupUrl);
			_iframeRef.src = popupUrl;
		}
	}
	function handlePopupLoad() {
		fadeInDiv("popupInPageDiv");
	}
	function findPosX(obj) {
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
	function findPosY(obj) {
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}
    // RANGE SLIDER
	function getZoomSliderRange(evt) {
		//also sets the sliderbar
		var xb_offsetY;
		if (evt.offsetY == null) { xb_offsetY = evt.layerY; }
		else { xb_offsetY = evt.offsetY; }
		var _top = parseInt(document.getElementById("zoomSlide").style.top) + xb_offsetY;
		document.getElementById("zoomSlideBar").style.top = _top + 'px';
		return (xb_offsetY * (minRange - maxRange) / sliderHeight) + maxRange;
	}
	function setZoomSliderRange() {
		var _offset = (range - maxRange) * sliderHeight / (minRange - maxRange);
		var _top = parseInt(document.getElementById("zoomSlide").style.top) + _offset;
		document.getElementById("zoomSlideBar").style.top = _top + 'px';
	}
	function zoomSlide(evt) {
		setRange(getZoomSliderRange(evt));
	}
	function getZoomBarRange() {
		var _offsetY = parseInt(zoomSliderBarObj.style.top) - parseInt(zoomSliderObj.style.top);
		return (_offsetY * (minRange - maxRange) / sliderHeight) + maxRange;
	}
	function startZoomBarDrag() {
		try {
			//dbg("startZoomDrag");
			isDraggingSlider = true;
			zoomSliderObj = document.getElementById("zoomSlide");
			zoomSliderBarObj = document.getElementById("zoomSlideBar");
			minYSlider = parseInt(zoomSliderObj.style.top);
			maxYSlider = parseInt(zoomSliderObj.style.top) + parseInt(zoomSliderObj.style.height) - parseInt(zoomSliderBarObj.style.height);
			zoomSliderBarObj.onmousemove = moveZoomBar;
			zoomSliderBarObj.onmouseup = stopZoomBarDrag;
			//zoomSliderBarObj.onmouseleave = mleaveSlide;
			zoomSliderObj.onmousemove = moveZoomBar;
			zoomSliderObj.onmouseup = stopZoomBarDrag;
			//zoomSliderObj.onmouseleave = mleaveSlide;
		}
		catch(e) {
			//dbg(e.message);
		}
	}
	function mleaveSlide() {
		try {
			//dbg("mleaveSlide()");
			if (!evt) { evt = window.event; }
			//dbgi(evt.srcElement.id);
			if ((isDraggingSlider == true) && (evt.srcElement.id != 'zoomSlideBar')) {
				stopZoomBarDrag();
			}
		} catch(e) {
			//dbg(e.message);
		}
	}
	function moveZoomBar(evt) {
		try {
			if (!evt) { evt = window.event; }
			if (isDraggingSlider == true) {
				//dbg("mmoveSlide");
				var _pos = (evt.clientY + document.body.scrollTop + document.documentElement.scrollTop -5);
				if (_pos < minYSlider) { _pos = minYSlider; }
				else if (_pos > maxYSlider)  { _pos = maxYSlider; }
				zoomSliderBarObj.style.top = _pos + 'px';
			}
		}
		catch(e) {
			//dbg(e.message);		
		}
		return false;
	}
	function stopZoomBarDrag() {
		//dbg("stopSlideDrag()");
		isDraggingSlider = false;
		if (zoomSliderBarObj != null) {
			zoomSliderBarObj.onmousemove = null;
			zoomSliderBarObj.onmouseup = null;
			//zoomSliderBarObj.onmouseleave = null;
			zoomSliderObj.onmousemove = null;
			zoomSliderObj.onmouseup = null;
			//zoomSliderObj.onmouseleave = null;
		}
		setRange(getZoomBarRange());
	}
    // REFRESH THE MAP AT INTERVAL
	function InitMapRefresh() {
		// TODO: check if the refresh isn't running 2 threads
		setTimeout("reloadSilent()",refreshInterval);
	}
	
	// ZOOMBOX of RUBBERBAND
	var startX, startY, curX, curY, stopX, stopY;    // zoombox coords
	var dragDiv, canvasDiv;
	var flgDragging = false;
	var bf = 2;				//ie fix to correct coordinates returned by .clientX/Y
	var flgProp = false;
	var zoommode;
	var isRightClick = false;
	function getMapClickMode(mode) {
		//dbg(mode);
		zoommode = (mode == 'zoom')? true:false;
		ZoomModeComm = new Image();
		ZoomModeComm.src = listenerUrl + "?ZoomMode=" + mode + "&nocache=" + getCurrentTime();
		if (zoommode == false) {
			document.getElementById("canvas").style.visibility = "hidden";
			imgOff('imgModeZoom');
			imgOn('imgModeSelect');
		} else {
			document.getElementById("canvas").style.visibility = "visible";
			imgOn('imgModeZoom');
			imgOff('imgModeSelect');
		}
	}
	function startDrag(evt) {
	    /*
	        evt.clientY = absolute coords from the top of the BROWSER VIEWABLE AREA (all scrolled height is excluded!)
	        evt.clientY + document.body.scrollTop + document.documentElement.scrollTop = absolute coords from  the top of the PAGE (scrolled height is included!)
	    */ 
		if (zoommode == true) {
			isRightClick = (evt.button==2)? isRightClick = true : isRightClick = false;
			flgDragging = true;
            if (!evt) { evt = window.event; }
			startX = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - bf;
			startY = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop - bf;
			//dbg("startDrag: " + startY);
			dragDiv = document.getElementById("drag");
			canvasDiv = document.getElementById("canvas");
			dragDiv.style.display = "block";
			dragDiv.style.left = startX + 'px';
			dragDiv.style.top = startY + 'px';
			dragDiv.style.width = '1px';
			dragDiv.style.height = '20px';
			canvasDiv.onmouseleave = leaveDrag;
		}
	}
	function leaveDrag(evt) {
		if (flgDragging == true) {
			var _curX, _curY;
			if (!evt) { evt = window.event; }
			_curX = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - bf;
			_curY = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop - bf;
			if ( (_curX <= 40) || (_curX >= (width+40)) || (_curY <= 55) || (_curY >= (height+55)) ) {
				//dbg("exiting");
				cancelDrag();
			}
		}
	}
	function leaveDragOld(evt) {
        if (!evt) { evt = window.event; }
		if (evt.toElement) {
			if ((evt.toElement.id != "drag") && (flgDragging == true)) {
				stopDrag();
			}
		}
	}
	function cancelDrag() {
		if (flgDragging == true) {
			flgDragging = false;
			dragDiv.style.display = "none";
			dragDiv = null;
			canvasDiv = null;
			//window.document.body.onmouseleave = null;
		}			
	}
	function stopDrag() {
		var flgCenter = false;
		if (flgDragging == false) return;
		if (dragDiv && flgDragging==true) {
			flgDragging = false;
			startX = parseInt(dragDiv.style.left) - parseInt(canvasDiv.style.left);
			startY = parseInt(dragDiv.style.top) - parseInt(canvasDiv.style.top);
			stopX = parseInt(dragDiv.style.left) + parseInt(dragDiv.style.width) - parseInt(canvasDiv.style.left);
			stopY = parseInt(dragDiv.style.top) + parseInt(dragDiv.style.height) - parseInt(canvasDiv.style.top);
			if ((parseInt(dragDiv.style.width) < 5) && (parseInt(dragDiv.style.height) < 21)) flgCenter = true;
			dragDiv.style.display = "none";
			dragDiv = null;
			canvasDiv = null;
			zoomDrag(flgCenter);
		}
	}
	function moveDrag(evt) {
            if (!flgDragging) return;
			if (!evt) { evt = window.event; }
			curX = evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - bf;
			curY = evt.clientY + document.body.scrollTop + document.documentElement.scrollTop - bf;
			//dbg("moveDrag: " + curY);
			resizeRubberBand(curX, curY);
			return false;
	}
	function resizeRubberBand(x,y)
	{
		//dbg("resizeRubberBand startY: " + startY);
		if (flgDragging == true) {
			if (x > startX) {
				_width = x - startX;
				dragDiv.style.left = startX;
			} else {
				_width = startX - x;
				dragDiv.style.left = x + 'px';
			}
			if (curY > startY) {
				if (flgProp == true) { _height = _width * height/width; }
				else { _height = y - startY; }
				dragDiv.style.top = startY;
			} else {
				if (y < (startY - 20)) {
					if (flgProp == true) { _height = _width * height/width; }
					else { _height = startY - y; }
					dragDiv.style.top = y + 'px';
				} else {
					_height = 20;
				}
			}
			dragDiv.style.width = _width + 'px';
			dragDiv.style.height = _height + 'px';
		}
	}
	function zoomDrag(center) {
        dbg("zoomDrag");
		disableNav();
		//tlon is wrong -> calculate it with correct range!!
		var _tlon = range * lonUnit;		 
		//var _tlon = (range * width / height) * lonUnit; //total degrees for current width
		var _tlat = range * latUnit;					//total degrees for current height
		var _cx, _cy;
		if (center == false) {
			_cx = (stopX-startX)/2 + startX; //centerpoint X zoombox
			_cy	= (stopY-startY)/2 + startY; //centerpoint Y zoombox
		} else {
			_cx = startX; //clicked X point
			_cy	= startY; //clicked Y point
		}
		//dbg(stopX + " " + startX + " " + _cx);
		longitude = longitude - (_tlon/2) + (_tlon / width * _cx);
		//dbg(longitude + " " + _tlon + " " + (_tlon / width * _cx));
		latitude = latitude  + (_tlat/2) - (_tlat/height*_cy);

		if (center == false) {
			var _prevRange = ((stopY - startY)/2) / (height /2) * range;
			//var _prevRange = ((stopX - startX)/2) / (width /2) * range;
			(_prevRange < minRange) ? range = minRange : range = _prevRange;
			setZoomSliderRange();
		} else {
			if (isRightClick == true) {
				var _nextRange = range * 2;
				(_nextRange > maxRange) ? range = maxRange : range = _nextRange;
				setZoomSliderRange();
			}
		}
		reload();
	}
/*
	ClientSide menu processing
*/
	function menuOnClientClicked(item) {
		if (item == "ScaleMinNM")
		{
			setRange(minRange);
		}
		else if (item == "Scale2")
		{ 
			setRange(minRange + (maxRange-minRange)*1/3);
		}			
		else if (item == "Scale3")
		{
			setRange(minRange + (maxRange-minRange)*2/3);
		}			
		else if (item == "ScaleMaxNM")
		{
			setRange(maxRange);
		}
		setZoomSliderRange();
	}
/*
	debugging
*/
	//var debugDiv; // holds reference to the debug pane
    var visibleDbgLines = 0;
	function dbg(str) {
		debugDiv = document.getElementById("msgs");
		if (debugDiv != null) {
            if (visibleDbgLines > 100) {
                debugDiv.innerHTML = str + "<br />"
                visibleDbgLines = 1; 
            }
            else {
                debugDiv.innerHTML = str + "<br />" + debugDiv.innerHTML
                visibleDbgLines += 1;
            }
		}
	}
	function dbgi(str) {
		debugDiv = document.getElementById("msgs");
		if (debugDiv != null) debugDiv.innerHTML = debugDiv.innerHTML + str;
	}
	function toggleDebugger() {
		debugDiv = document.getElementById("msgs");
        if (debugDiv != null) {
            if (debugDiv.style.visibility == 'visible') {
                debugDiv.style.visibility = 'hidden';
            }  else {
                debugDiv.style.visibility = 'visible';
            }  
        } 
	}
/*
    settings
*/
	function toggleSettings() {
		var settingsDiv = document.getElementById("settingsDiv");
        if (settingsDiv != null) {
            if (settingsDiv.style.visibility == 'visible') {
                settingsDiv.style.visibility = 'hidden';
            }  else {
                settingsDiv.style.visibility = 'visible';
                settingsDiv.innerHTML = '<iframe id="settingsFrame" src="default.aspx?path=System/iMapUserSettingsPanel" width="100%" height="100%"></iframe>' 
            }  
        } 
	}
/*
	initialize and highlight/show/disable the navigation ui
*/
	function InitNav() {
		if (document.images) {
			// mouse over
			imgUpOn.src = "images/map/arrUp2R.gif"; 
			imgUpLeftOn.src = "images/map/arrUp_LeftR.gif"; 
			imgUpRightOn.src = "images/map/arrUp_RightR.gif"; 
			imgLeftOn.src = "images/map/arrLeft2R.gif"; 
			imgDownOn.src = "images/map/arrDown2R.gif"; 
			imgDownLeftOn.src = "images/map/arrDown_LeftR.gif"; 
			imgDownRightOn.src = "images/map/arrDown_RightR.gif"; 
			imgRightOn.src = "images/map/arrRight2R.gif";
			// normal
			imgUpOff.src = "images/map/arrUp2B.gif";
			imgUpLeftOff.src = "images/map/arrUp_LeftD.gif";
			imgUpRightOff.src = "images/map/arrUp_RightD.gif"; 
			imgLeftOff.src = "images/map/arrLeft2B.gif"; 
			imgDownOff.src = "images/map/arrDown2B.gif"; 
			imgDownLeftOff.src = "images/map/arrDown_LeftD.gif"; 
			imgDownRightOff.src = "images/map/arrDown_RightD.gif"; 
			imgRightOff.src = "images/map/arrRight2B.gif"; 
			// disabled
			imgUpDisabled.src = "images/map/arrUp2G.gif"; 
			imgUpLeftDisabled.src = "images/map/arrUp_Left.gif"; 
			imgUpRightDisabled.src = "images/map/arrUp_Right.gif"; 
			imgLeftDisabled.src = "images/map/arrLeft2G.gif"; 
			imgDownDisabled.src = "images/map/arrDown2G.gif"; 
			imgDownLeftDisabled.src = "images/map/arrDown_Left.gif"; 
			imgDownRightDisabled.src = "images/map/arrDown_Right.gif"; 
			imgRightDisabled.src = "images/map/arrRight2G.gif";
			// zoommode images
			imgModeZoomOff.src = "images/map/modeZoom.gif";
			imgModeZoomOn.src = "images/map/modeZoomS.gif";
			imgModeSelectOff.src = "images/map/modeSelect.gif";
			imgModeSelectOn.src = "images/map/modeSelectS.gif";
			// map preloading
			imgPreloadedMap.onload = swapMap;
			// prevent all selections when dragging
			window.document.body.onselectstart = function () {return false;};
		}
	}

