 var isCSS, isW3C, isIE4, isNN4; function initDHTMLAPI() { if (document.images) { isCSS=(document.body && document.body.style) ? true : false; isW3C=(isCSS && document.getElementById) ? true : false; isIE4=(isCSS && document.all) ? true : false; isNN4=(document.layers) ? true : false; isIE6CSS=(document.compatMode && document.compatMode.indexOf("CSS1") >=0) ? true : false; } } function seekLayer(doc, name) { var theObj; for (var i=0; i < doc.layers.length; i++) { if (doc.layers[i].name==name) { theObj=doc.layers[i]; break; } if (doc.layers[i].document.layers.length > 0) { theObj=seekLayer(document.layers[i].document, name); } } return theObj; } function getRawObject(obj) { var theObj; if (typeof obj=="string") { if (isW3C) { theObj=document.getElementById(obj); } else if (isIE4) { theObj=document.all(obj); } else if (isNN4) { theObj=seekLayer(document, obj); } } else { theObj=obj; } return theObj; } function getObject(obj) { var theObj=getRawObject(obj); if (theObj && isCSS) { theObj=theObj.style; } return theObj; } function shiftTo(obj, x, y) { var theObj=getObject(obj); if (theObj) { if (isCSS) { var units=(typeof theObj.left=="string") ? "px" : 0; theObj.left=x + units; theObj.top=y + units; } else if (isNN4) { theObj.moveTo(x,y) } } } function shiftBy(obj, deltaX, deltaY) { var theObj=getObject(obj); if (theObj) { if (isCSS) { var units=(typeof theObj.left=="string") ? "px" : 0; theObj.left=getObjectLeft(obj) + deltaX + units; theObj.top=getObjectTop(obj) + deltaY + units; } else if (isNN4) { theObj.moveBy(deltaX, deltaY); } } } function setZIndex(obj, zOrder) { var theObj=getObject(obj); if (theObj) { theObj.zIndex=zOrder; } } function setBGColor(obj, color) { var theObj=getObject(obj); if (theObj) { if (isNN4) { theObj.bgColor=color; } else if (isCSS) { theObj.backgroundColor=color; } } } function show(obj) { var theObj=getObject(obj); if (theObj) { theObj.visibility="visible"; } } function hide(obj) { var theObj=getObject(obj); if (theObj) { theObj.visibility="hidden"; } } function getObjectLeft(obj) { var elem=getRawObject(obj); var result=0; if (document.defaultView) { var style=document.defaultView; var cssDecl=style.getComputedStyle(elem, ""); result=cssDecl.getPropertyValue("left"); } else if (elem.currentStyle) { result=elem.currentStyle.left; } else if (elem.style) { result=elem.style.left; } else if (isNN4) { result=elem.left; } return parseInt(result); } function getObjectTop(obj) { var elem=getRawObject(obj); var result=0; if (document.defaultView) { var style=document.defaultView; var cssDecl=style.getComputedStyle(elem, ""); result=cssDecl.getPropertyValue("top"); } else if (elem.currentStyle) { result=elem.currentStyle.top; } else if (elem.style) { result=elem.style.top; } else if (isNN4) { result=elem.top; } return parseInt(result); } function getObjectWidth(obj) { var elem=getRawObject(obj); var result=0; if (elem.offsetWidth) { result=elem.offsetWidth; } else if (elem.clip && elem.clip.width) { result=elem.clip.width; } else if (elem.style && elem.style.pixelWidth) { result=elem.style.pixelWidth; } return parseInt(result); } function getObjectHeight(obj) { var elem=getRawObject(obj); var result=0; if (elem.offsetHeight) { result=elem.offsetHeight; } else if (elem.clip && elem.clip.height) { result=elem.clip.height; } else if (elem.style && elem.style.pixelHeight) { result=elem.style.pixelHeight; } return parseInt(result); } function getInsideWindowWidth() { if (window.innerWidth) { return window.innerWidth; } else if (isIE6CSS) { return document.body.parentElement.clientWidth; } else if (document.body && document.body.clientWidth) { return document.body.clientWidth; } return 0; } function getInsideWindowHeight() { if (window.innerHeight) { return window.innerHeight; } else if (isIE6CSS) { return document.body.parentElement.clientHeight; } else if (document.body && document.body.clientHeight) { return document.body.clientHeight; } return 0; }  var aXmlHttp=new Array(); var aXmlResponse=new Array(); function xmlResult() { for(var i=0;i<aXmlHttp.length;i++) { if(aXmlHttp[i] && aXmlHttp[i][0] && aXmlHttp[i][0].readyState==4&&aXmlHttp[i][0].responseText) { var f=aXmlHttp[i][2]; var o=aXmlHttp[i][1]; var s=aXmlHttp[i][0].responseText; aXmlHttp[i][0]=null; aXmlHttp[i][1]=null; aXmlHttp[i]=null; f.apply(o,new Array(s)); } } } function call(u,o,f) { var method="GET"; var dat; if (arguments.length==4){ method="POST"; tmp=u.split(/\?/); u=tmp[0]; dat=tmp[1]; } var idx=aXmlHttp.length; for(var i=0; i<idx;i++) if (aXmlHttp[i]==null) { idx=i; break; } aXmlHttp[idx]=new Array(2); aXmlHttp[idx][0]=getXMLHTTP(); aXmlHttp[idx][1]=o; aXmlHttp[idx][2]=f; if(aXmlHttp[idx]) { aXmlHttp[idx][0].open(method,u,true); if(method=="POST"){ aXmlHttp[idx][0].setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); aXmlHttp[idx][0].send(dat); } aXmlHttp[idx][0].onreadystatechange=xmlResult; if(method=="GET"){ aXmlHttp[idx][0].send(null);} } } function getXMLHTTP() { var A=null; if(!A && typeof XMLHttpRequest !="undefined") { A=new XMLHttpRequest(); } if (!A) { try { A=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { A=new ActiveXObject("Microsoft.XMLHTTP"); } catch(oc) { A=null } } } return A; } var gnLastEventId=0; var KAMAP_ERROR=gnLastEventId ++; var KAMAP_WARNING=gnLastEventId ++; var KAMAP_NOTICE=gnLastEventId++; var KAMAP_INITIALIZED=gnLastEventId ++; var KAMAP_MAP_INITIALIZED=gnLastEventId ++; var KAMAP_EXTENTS_CHANGED=gnLastEventId ++; var KAMAP_SCALE_CHANGED=gnLastEventId ++; var KAMAP_LAYERS_CHANGED=gnLastEventId ++; var KAMAP_LAYER_STATUS_CHANGED=gnLastEventId ++; var KAMAP_CONTEXT_MENU=gnLastEventId ++; var KAMAP_METAEXTENTS_CHANGED=gnLastEventId++; var KAMAP_MAP_CLICKED=gnLastEventId++; function kaMap( szID ) { this.isCSS=false; this.isW3C=false; this.isIE4=false; this.isNN4=false; this.isIE6CSS=false; if (document.images) { this.isCSS=(document.body && document.body.style) ? true : false; this.isW3C=(this.isCSS && document.getElementById) ? true : false; this.isIE4=(this.isCSS && document.all) ? true : false; this.isNN4=(document.layers) ? true : false; this.isIE6CSS=(document.compatMode && document.compatMode.indexOf("CSS1") >=0) ? true : false; } this.domObj=this.getRawObject( szID ); this.domObj.style.overflow='hidden'; this.hideLayersOnMove=false; this.loadUnchecked=false; this.initializationState=0; this.bMouseDown=false; this.lastx=0; this.lasty=0; this.theInsideLayer=null; this.viewportWidth=this.getObjectWidth(this.domObj); this.viewportHeight=this.getObjectHeight(this.domObj); this.xOffset=0; this.yOffset=0; this.xOrigin=0; this.yOrigin=0; this.currentMap=''; this.nWide=0; this.nHigh=0; this.nCurrentTop=0; this.nCurrentLeft=0; this.aPixel=new Image(1,1); this.aPixel.src='images/a_pixel.gif'; this.imgErrors=new Array(); this.aMaps=new Array(); this.tileWidth=null; this.tileHeight=null; this.nBuffer=1; this.baseURL=''; this.cellSize=null; this.gImageID=0; this.eventManager=new _eventManager(); this.as=slideid=null; this.accelerationFactor=1; this.pixelsPerStep=30; this.timePerStep=25; this.server=''; this.init="init.php"; this.tileURL=null; this.aObjects=[]; this.aCanvases=[]; this.layersHidden=false; this.aTools=[]; for (var i=0; i<gnLastEventId; i++) { this.registerEventID( i ); } this.createLayers(); }; kaMap.prototype.seekLayer=function(doc, name) { var theObj; for (var i=0; i < doc.layers.length; i++) { if (doc.layers[i].name==name) { theObj=doc.layers[i]; break; } if (doc.layers[i].document.layers.length > 0) { theObj=this.seekLayer(document.layers[i].document, name); } } return theObj; }; kaMap.prototype.getRawObject=function(obj) { var theObj; if (typeof obj=="string") { if (this.isW3C) { theObj=document.getElementById(obj); } else if (this.isIE4) { theObj=document.all(obj); } else if (this.isNN4) { theObj=seekLayer(document, obj); } } else { theObj=obj; } return theObj; }; kaMap.prototype.getObject=function(obj) { var theObj=this.getRawObject(obj); if (theObj && this.isCSS) { theObj=theObj.style; } return theObj; }; kaMap.prototype.getObjectWidth=function(obj) { var elem=this.getRawObject(obj); var result=0; if (elem.offsetWidth) { result=elem.offsetWidth; } else if (elem.clip && elem.clip.width) { result=elem.clip.width; } else if (elem.style && elem.style.pixelWidth) { result=elem.style.pixelWidth; } return parseInt(result); }; kaMap.prototype.getObjectHeight=function(obj) { var elem=this.getRawObject(obj); var result=0; if (elem.offsetHeight) { result=elem.offsetHeight; } else if (elem.clip && elem.clip.height) { result=elem.clip.height; } else if (elem.style && elem.style.pixelHeight) { result=elem.style.pixelHeight; } return parseInt(result); }; kaMap.prototype.zoomTo=function( cgX, cgY ) { var oMap=this.getCurrentMap(); var inchesPerUnit=new Array(1, 12, 63360.0, 39.3701, 39370.1, 4374754); var newScale; var bScaleChanged=false; if (arguments.length==3) { newScale=arguments[2]; bScaleChanged=(newScale !=this.getCurrentScale()) } else { newScale=this.getCurrentScale(); } var bZoomTo=true; if (!bScaleChanged) { var extents=this.getGeoExtents(); if (cgX >=extents[0] && cgX <=extents[2] && cgY >=extents[1] && cgY <=extents[3]) { var cx=(extents[0]+extents[2])/2; var cy=(extents[1]+extents[3])/2; var dx=(cx - cgX)/this.cellSize; var dy=(cgY - cy)/this.cellSize; this.slideBy(dx,dy); bZoomTo=false; } } if (bZoomTo) { this.cellSize=newScale/(oMap.resolution * inchesPerUnit[oMap.units]); var nFactor=oMap.zoomToScale( newScale ); this.setMapLayers(); var cpX=cgX / this.cellSize; var cpY=cgY / this.cellSize; var vpLeft=Math.round(cpX - this.viewportWidth/2); var vpTop=Math.round(cpY + this.viewportHeight/2); var cTileX=Math.floor(cpX/this.tileWidth)*this.tileWidth; var cTileY=Math.floor(cpY/this.tileHeight)*this.tileHeight; var nTilesLeft=Math.ceil(this.viewportWidth/(2*this.tileWidth))*this.tileWidth; var nTilesUp=Math.ceil(this.viewportHeight/(2*this.tileHeight))*this.tileHeight; this.nCurrentLeft=cTileX - nTilesLeft; this.nCurrentTop=-1*(cTileY + nTilesUp); this.xOrigin=this.nCurrentLeft; this.yOrigin=this.nCurrentTop; this.theInsideLayer.style.left=-1*(vpLeft - this.xOrigin) + "px"; this.theInsideLayer.style.top=(vpTop + this.yOrigin) + "px"; var layers=oMap.getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; for(var j=0; j<this.nHigh; j++) { for( var i=0; i<this.nWide; i++) { var img=d.childNodes[(j*this.nWide)+i]; img.src=this.aPixel.src; img.style.top=(this.nCurrentTop + j*this.tileHeight - this.yOrigin) + "px"; img.style.left=(this.nCurrentLeft + i*this.tileWidth - this.xOrigin) + "px"; layers[k].setTile(img); } } } this.checkWrap( ); this.updateObjects(); } if (bScaleChanged) { this.triggerEvent( KAMAP_SCALE_CHANGED, this.getCurrentScale() ); } this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); }; kaMap.prototype.zoomToExtents=function(minx, miny, maxx, maxy) { var inchesPerUnit=new Array(1, 12, 63360.0, 39.3701, 39370.1, 4374754); var oMap=this.getCurrentMap(); var cgX=(maxx+minx)/2; var cgY=(maxy+miny)/2; var tmpCellSizeX=(maxx - minx)/this.viewportWidth; var tmpCellSizeY=(maxy - miny)/this.viewportHeight; var tmpCellSize=Math.max( tmpCellSizeX, tmpCellSizeY ); var tmpScale=tmpCellSize * oMap.resolution * inchesPerUnit[oMap.units]; var newScale=oMap.aScales[0]; for (var i=1; i<oMap.aScales.length; i++) { if (tmpScale >=oMap.aScales[i]) { break; } newScale=oMap.aScales[i]; } this.cellSize=newScale/(oMap.resolution * inchesPerUnit[oMap.units]); var nFactor=oMap.zoomToScale( newScale ); this.setMapLayers(); var cpX=cgX / this.cellSize; var cpY=cgY / this.cellSize; var vpLeft=Math.round(cpX - this.viewportWidth/2); var vpTop=Math.round(cpY + this.viewportHeight/2); var cTileX=Math.floor(cpX/this.tileWidth)*this.tileWidth; var cTileY=Math.floor(cpY/this.tileHeight)*this.tileHeight; var nTilesLeft=Math.ceil(this.viewportWidth/(2*this.tileWidth))*this.tileWidth; var nTilesUp=Math.ceil(this.viewportHeight/(2*this.tileHeight))*this.tileHeight; this.nCurrentLeft=cTileX - nTilesLeft; this.nCurrentTop=-1*(cTileY + nTilesUp); this.xOrigin=this.nCurrentLeft; this.yOrigin=this.nCurrentTop; this.theInsideLayer.style.left=-1*(vpLeft - this.xOrigin) + "px"; this.theInsideLayer.style.top=(vpTop + this.yOrigin) + "px"; var layers=oMap.getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; for(var j=0; j<this.nHigh; j++) { for( var i=0; i<this.nWide; i++) { var img=d.childNodes[(j*this.nWide)+i]; img.src=this.aPixel.src; img.style.top=(this.nCurrentTop + j*this.tileHeight - this.yOrigin) + "px"; img.style.left=(this.nCurrentLeft + i*this.tileWidth - this.xOrigin) + "px"; layers[k].setTile(img); } } } this.checkWrap( ); this.updateObjects(); this.triggerEvent( KAMAP_SCALE_CHANGED, this.getCurrentScale() ); this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); }; kaMap.prototype.createDrawingCanvas=function( idx ) { var d=document.createElement( 'div' ); d.style.position='absolute'; d.style.left='0px'; d.style.top='0px'; d.style.width='3000px'; d.style.height='3000px'; d.style.zIndex=idx; this.theInsideLayer.appendChild( d ); this.aCanvases.push( d ); d.kaMap=this; return d; }; kaMap.prototype.removeDrawingCanvas=function( canvas ) { for (var i=0; i<this.aCanvases.length;i++) { if (this.aCanvases[i]==canvas) { this.aCanvases.splice( i, 1 ); } } this.theInsideLayer.removeChild(canvas); canvas.kaMap=null; return true; }; kaMap.prototype.addObjectGeo=function( canvas, lon, lat, obj ) { obj.lon=lon; obj.lat=lat; var aPix=this.geoToPix( lon, lat ); return this.addObjectPix( canvas, aPix[0], aPix[1], obj ); }; kaMap.prototype.addObjectPix=function( canvas, x, y, obj ) { var xOffset=(obj.xOffset) ? obj.xOffset : 0; var yOffset=(obj.yOffset) ? obj.yOffset : 0; var top=(y - this.yOrigin + yOffset); var left=(x - this.xOrigin + xOffset); obj.style.position='absolute'; obj.style.top=top + "px"; obj.style.left=left + "px"; obj.canvas=canvas; canvas.appendChild( obj ); this.aObjects.push( obj ); return true; }; kaMap.prototype.shiftObject=function( x, y, obj ) { var top=safeParseInt(obj.style.top); var left=safeParseInt(obj.style.left); obj.style.top=(top + y) + "px"; obj.style.left=(left + x) + "px"; return true; }; kaMap.prototype.removeObject=function( obj ) { for (var i=0; i<this.aObjects.length; i++) { if (this.aObjects[i]==obj || obj==null) { if (!obj) { obj=this.aObjects[i]; } if (obj.canvas) { obj.canvas.removeChild( obj ); obj.canvas=null; } this.aObjects.splice(i,1); return true; } } return false; }; kaMap.prototype.centerObject=function(obj) { var vpX=-safeParseInt(this.theInsideLayer.style.left) + this.viewportWidth/2; var vpY=-safeParseInt(this.theInsideLayer.style.top) + this.viewportHeight/2; var xOffset=(obj.xOffset)?obj.xOffset:0; var yOffset=(obj.yOffset)?obj.yOffset:0; var dx=safeParseInt(obj.style.left) - xOffset- vpX; var dy=safeParseInt(obj.style.top) - yOffset - vpY; this.slideBy(-dx, -dy); return true; }; kaMap.prototype.geoToPix=function( gX, gY ) { var pX=gX / this.cellSize; var pY=-1 * gY / this.cellSize; return [Math.floor(pX), Math.floor(pY)]; }; kaMap.prototype.pixToGeo=function( pX, pY ) { var bAdjust=(arguments.length==3 && arguments[2]) ? true : false; if (bAdjust) { pX=pX + this.xOrigin; pY=pY + this.yOrigin; } var gX=-1 * pX * this.cellSize; var gY=pY * this.cellSize; return [gX, gY]; }; kaMap.prototype.initialize=function() { if (this.initializationState==2) { this.triggerEvent( KAMAP_ERROR, 'ERROR: ka-Map! is already initialized!' ); return false; } else if (this.intializationState==1) { this.triggerEvent( KAMAP_WARNING, 'WARNING: ka-Map! is currently initializing ... wait for the KAMAP_INITIALIZED event to be triggered.' ); return false; } this.initializationState=1; var szURL=this.server+this.init; var sep=(this.init.indexOf("?")==-1) ? "?" : "&"; if (arguments.length > 0 && arguments[0] !='') { szURL=szURL + sep + "map="+ arguments[0]; sep="&"; } if (arguments.length > 1 && arguments[1] !='') { szURL=szURL + sep + "extents="+ arguments[1]; sep="&"; } if (arguments.length > 2 && arguments[2] !='') { szURL=szURL + sep + "centerPoint="+ arguments[2]; sep="&"; } call(szURL, this, this.initializeCallback); return true; }; kaMap.prototype.initializeCallback=function( szInit ) { if (szInit.substr(0, 1) !="/") { this.triggerEvent( KAMAP_ERROR, 'ERROR: ka-Map! initialization '+ 'failed on the server. Message returned was:\n' + szInit); return false; } eval(szInit); this.triggerEvent( KAMAP_INITIALIZED ); this.initializationState=2; }; kaMap.prototype.setBackgroundColor=function( color ) { this.domObj.style.backgroundColor=color; return true; }; kaMap.prototype.createLayers=function() { this.theInsideLayer=document.createElement('div'); this.theInsideLayer.id='theInsideLayer'; this.theInsideLayer.style.position='absolute'; this.theInsideLayer.style.left='0px'; this.theInsideLayer.style.top='0px'; this.theInsideLayer.style.zIndex='1'; this.theInsideLayer.kaMap=this; if (this.currentTool) { this.theInsideLayer.style.cursor=this.currentTool.cursor; } this.domObj.appendChild(this.theInsideLayer); this.domObj.kaMap=this; this.theInsideLayer.onmousedown=kaMap_onmousedown; this.theInsideLayer.onmouseup=kaMap_onmouseup; this.theInsideLayer.onmousemove=kaMap_onmousemove; this.theInsideLayer.onmouseover=kaMap_onmouseover; this.domObj.onmouseout=kaMap_onmouseout; this.theInsideLayer.onkeypress=kaMap_onkeypress; this.theInsideLayer.ondblclick=kaMap_ondblclick; this.theInsideLayer.oncontextmenu=kaMap_oncontextmenu; this.theInsideLayer.onmousewheel=kaMap_onmousewheel; if (window.addEventListener && navigator.product && navigator.product=="Gecko") { this.domObj.addEventListener( "DOMMouseScroll", kaMap_onmousewheel, false ); } this.theInsideLayer.ondragstart=new Function([], 'var e=e?e:event;e.cancelBubble=true;e.returnValue=false;return false;'); }; kaMap.prototype.initializeLayers=function(nFactor) { var deltaMouseX=this.nCurrentLeft + safeParseInt(this.theInsideLayer.style.left) - this.xOrigin; var deltaMouseY=this.nCurrentTop + safeParseInt(this.theInsideLayer.style.top) - this.yOrigin; var vpTop=this.nCurrentTop - deltaMouseY; var vpLeft=this.nCurrentLeft - deltaMouseX; var vpCenterX=vpLeft + this.viewportWidth/2; var vpCenterY=vpTop + this.viewportHeight/2; var currentTileX=Math.floor(vpCenterX/this.tileWidth)*this.tileWidth; var currentTileY=Math.floor(vpCenterY/this.tileHeight)*this.tileHeight; var tileDeltaX=currentTileX - this.nCurrentLeft; var tileDeltaY=currentTileY - this.nCurrentTop; var newVpCenterX=vpCenterX * nFactor; var newVpCenterY=vpCenterY * nFactor; var newTileX=Math.floor(newVpCenterX/this.tileWidth) * this.tileWidth; var newTileY=Math.floor(newVpCenterY/this.tileHeight) * this.tileHeight; var newCurrentLeft=newTileX - tileDeltaX; var newCurrentTop=newTileY - tileDeltaY; this.nCurrentLeft=newCurrentLeft; this.nCurrentTop=newCurrentTop; var newTilLeft=-newVpCenterX + this.viewportWidth/2; var newTilTop=-newVpCenterY + this.viewportHeight/2; var xOldOrigin=this.xOrigin; var yOldOrigin=this.yOrigin; this.xOrigin=this.nCurrentLeft; this.yOrigin=this.nCurrentTop; this.theInsideLayer.style.left=(newTilLeft + this.xOrigin) + "px"; this.theInsideLayer.style.top=(newTilTop + this.yOrigin) + "px"; var layers=this.aMaps[this.currentMap].getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; for(var j=0; j<this.nHigh; j++) { for( var i=0; i<this.nWide; i++) { var img=d.childNodes[(j*this.nWide)+i]; img.src=this.aPixel.src; img.style.top=(this.nCurrentTop + j*this.tileHeight - this.yOrigin) + "px"; img.style.left=(this.nCurrentLeft + i*this.tileWidth - this.xOrigin) + "px"; layers[k].setTile(img); } } } this.checkWrap(); this.updateObjects(); }; kaMap.prototype.paintLayer=function(l) { var d=l.domObj; for(var j=0; j<this.nHigh; j++) { for( var i=0; i<this.nWide; i++) { var img=d.childNodes[(j*this.nWide)+i]; img.style.top=(this.nCurrentTop + j*this.tileHeight - this.yOrigin) + "px"; img.style.left=(this.nCurrentLeft + i*this.tileWidth - this.xOrigin) + "px"; l.setTile(img); } } this.checkWrap(); }; kaMap.prototype.updateObjects=function() { for (var i=0; i<this.aObjects.length;i++) { var obj=this.aObjects[i]; var xOffset=(obj.xOffset) ? obj.xOffset : 0; var yOffset=(obj.yOffset) ? obj.yOffset : 0; var aPix=this.geoToPix( obj.lon, obj.lat ); var top=(aPix[1] - this.yOrigin + yOffset); var left=(aPix[0] - this.xOrigin + xOffset); obj.style.top=top + "px"; obj.style.left=left + "px"; } }; kaMap.prototype.resize=function( ) { if (this.initializationState !=2) { return false; } var newViewportWidth=this.getObjectWidth(this.domObj); var newViewportHeight=this.getObjectHeight(this.domObj); if (this.viewportWidth==null) { this.theInsideLayer.style.top=(-1*this.nCurrentTop + this.yOrigin) + "px"; this.theInsideLayer.style.left=(-1*this.nCurrentLeft + this.xOrigin) + "px"; this.viewportWidth=newViewportWidth; this.viewportHeight=newViewportHeight; } var newWide=Math.ceil((newViewportWidth / this.tileWidth) + 2*this.nBuffer); var newHigh=Math.ceil((newViewportHeight / this.tileHeight) + 2*this.nBuffer); this.viewportWidth=newViewportWidth; this.viewportHeight=newViewportHeight; if (this.nHigh==0 && this.nWide==0) { this.nWide=newWide; } while (this.nHigh < newHigh) { this.appendRow(); } while (this.nHigh > newHigh && newHigh > 3) { this.removeRow(); } while (this.nWide < newWide) { this.appendColumn(); } while (this.nWide > newWide && newWide > 3) { this.removeColumn(); } var map=this.getCurrentMap(); var layers=map.getLayers(); for(i=0;i<layers.length;i++) { layers[i].setTileLayer(); } this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); }; kaMap.prototype.createImage=function( top, left, obj ) { var img=document.createElement('img'); img.src=this.aPixel.src; img.width=this.tileWidth; img.height=this.tileHeight; img.setAttribute('style', 'position:absolute; top:'+top+'px; left:'+left+'px;' ); img.style.position='absolute'; img.style.top=(top - this.yOrigin)+'px'; img.style.left=(left - this.xOrigin)+'px'; img.style.width=this.tileWidth + "px"; img.style.height=this.tileHeight + "px"; img.style.visibility='hidden'; img.galleryimg="no"; img.onerror=kaMap_imgOnError; img.onload=kaMap_imgOnLoad; img.errorCount=0; img.id="i" + this.gImageID; img.layer=obj; img.kaMap=this; this.gImageID=this.gImageID + 1; img.ie_hack=false; if (this.isIE4) { if (obj.imageformat && (obj.imageformat.toLowerCase()=="alpha")) { img.ie_hack=true; } } return img; }; kaMap.prototype.resetTile=function( id, bForce ) { var img=this.DHTMLapi.getRawObject(id); if (img.layer) { img.layer.setTile(this, bForce); } }; kaMap.prototype.reloadImage=function(id) { }; kaMap.prototype.resetImage=function(id) { }; kaMap_imgOnError=function(e) { if (this.layer) { this.layer.setTile(this, true); } }; kaMap_imgOnLoad=function(e) { if ((this.ie_hack) && (this.src !=this.kaMap.aPixel.src)) { var src=this.src; this.src=this.kaMap.aPixel.src; this.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"')"; } this.style.visibility='visible'; }; kaMap.prototype.appendRow=function(layer) { if (this.nWide==0) { return; } var layers=null; if(arguments.length==1) { layers=Array(layer); } else { layers=this.aMaps[this.currentMap].getLayers(); } for( var i=0; i<layers.length; i++) { var obj=layers[i].domObj; for (var j=0; j<this.nWide; j++) { var top=this.nCurrentTop + (this.nHigh * this.tileHeight); var left=this.nCurrentLeft + (j * this.tileWidth); var img=this.createImage( top, left, layers[i] ); if (this.isIE4) { img.style.filter="Alpha(opacity="+layers[i].opacity+")"; } obj.appendChild( img ); } } this.nHigh=this.nHigh + 1; }; kaMap.prototype.appendColumn=function(layer) { if (this.nHigh==0) { return; } var layers=null; if(arguments.length==1) { layers=Array(layer); } else { layers=this.aMaps[this.currentMap].getLayers(); } for( var i=0; i<layers.length; i++) { var obj=layers[i].domObj; for(var j=this.nHigh-1; j>=0; j--) { var top=this.nCurrentTop + (j * this.tileHeight); var left=this.nCurrentLeft + (this.nWide * this.tileWidth); var img=this.createImage( top, left, layers[i] ); if (this.isIE4) { img.style.filter="Alpha(opacity="+layers[i].opacity+")"; } if (j < this.nHigh-1) { obj.insertBefore(img, obj.childNodes[((j+1)*this.nWide)]); } else { obj.appendChild(img); } } } this.nWide=this.nWide + 1; }; kaMap.prototype.removeColumn=function(layer) { if (this.nWide < 3) { return; } var layers=null; if(arguments.length==1) { layers=Array(layer); } else { layers=this.aMaps[this.currentMap].getLayers(); } for( var i=0; i<layers.length; i++) { var d=layers[i].domObj; for(var j=this.nHigh - 1; j >=0; j--) { var img=d.childNodes[((j+1)*this.nWide)-1]; d.removeChild( img ); img.onload=null; img.onerror=null; } } this.nWide=this.nWide - 1; }; kaMap.prototype.removeRow=function(layer) { if (this.nHigh < 3) { return; } var layers=null; if(arguments.length==1) { layers=Array(layer); } else { layers=this.aMaps[this.currentMap].getLayers(); } for( var i=0; i<layers.length; i++) { var d=layers[i].domObj; for(var j=this.nWide - 1; j >=0; j--) { var img=d.childNodes[((this.nHigh-1)*this.nWide)+j]; d.removeChild( img ); img.onload=null; img.onerror=null; } } this.nHigh=this.nHigh - 1; }; kaMap.prototype.hideLayers=function() { if (!this.hideLayersOnMove) { return; } if (this.layersHidden) { return; } var layers=this.aMaps[this.currentMap].getLayers(); for( var i=0; i<layers.length; i++) { layers[i]._visible=layers[i].visible; if (layers[i].name !='__base__') { layers[i].setVisibility( false ); } } for( var i=0; i < this.aCanvases.length; i++) { this.aCanvases[i].style.visibility='hidden'; this.aCanvases[i].style.display='none'; } this.layersHidden=true; }; kaMap.prototype.showLayers=function() { if (!this.hideLayersOnMove) { return; } if (!this.layersHidden) { return; } var layers=this.aMaps[this.currentMap].getLayers(); for( var i=0; i<layers.length; i++) { layers[i].setVisibility( layers[i]._visible ); } for( var i=0; i < this.aCanvases.length; i++) { this.aCanvases[i].style.visibility='visible'; this.aCanvases[i].style.display='block'; } this.layersHidden=false; }; kaMap.prototype.moveBy=function( x, y ) { var til=this.theInsideLayer; til.style.top=(safeParseInt(til.style.top)+y) + 'px'; til.style.left=(safeParseInt(til.style.left)+x )+ 'px'; this.checkWrap(); }; kaMap.prototype.slideBy=function(x,y) { if (this.slideid!=null) { goQueueManager.dequeue( this.slideid ); } this.as=[]; var absX=Math.abs(x); var absY=Math.abs(y); var signX=x/absX; var signY=y/absY; var distance=absX>absY?absX:absY; var steps=Math.floor(distance/this.pixelsPerStep); var dx=dy=0; if (steps > 0) { dx=(x)/(steps*this.pixelsPerStep); dy=(y)/(steps*this.pixelsPerStep); } var remainderX=x - dx*steps*this.pixelsPerStep; var remainderY=y - dy*steps*this.pixelsPerStep; var px=py=0; var curspeed=this.accelerationFactor; var i=0; while(i<steps) { if (i>0) { px+=this.as[i-1][0]; py+=this.as[i-1][1]; } var cx=px+Math.round(dx*this.pixelsPerStep); var cy=py+Math.round(dy*this.pixelsPerStep); this.as[i]=new Array(cx-px,cy-py); i++; } if (remainderX !=0 || remainderY !=0) { this.as[i]=[remainderX, remainderY]; } this.hideLayers(); this.slideid=goQueueManager.enqueue(this.timePerStep,this,this.slide,[0]); }; kaMap.prototype.slide=function(pos) { if (pos>=this.as.length) { this.as=slideid=null; this.showLayers(); this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); return; } this.moveBy( this.as[pos][0], this.as[pos][1] ); pos ++; this.slideid=goQueueManager.enqueue(this.timePerStep,this,this.slide,[ pos]); }; kaMap_onkeypress=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onkeypress( e ); } }; kaMap_onmousemove=function( e ) { e=(e)?e:((event)?event:null); if (e.button==2) { this.kaMap.triggerEvent( KAMAP_CONTEXT_MENU ); } if (this.kaMap.currentTool) { this.kaMap.currentTool.onmousemove( e ); } }; kaMap_onmousedown=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmousedown( e ); } }; kaMap_onmouseup=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseup( e ); } }; kaMap_onmouseover=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseover( e ); } }; kaMap_onmouseout=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseout( e ); } }; kaMap_oncontextmenu=function( e ) { e=e?e:event; if (e.preventDefault) { e.preventDefault(); } return false; }; kaMap_ondblclick=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.ondblclick( e ); } }; kaMap_onmousewheel=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmousewheel( e ); } }; kaMap.prototype.cancelEvent=function(e) { e=(e)?e:((event)?event:null); e.returnValue=false; if (e.preventDefault) { e.preventDefault(); } return false; }; kaMap.prototype.registerTool=function( toolObj ) { this.aTools.push( toolObj ); }; kaMap.prototype.activateTool=function( toolObj ) { if (this.currentTool) { this.currentTool.deactivate(); } this.currentTool=toolObj; if (this.theInsideLayer) { this.setCursor(this.currentTool.cursor); } }; kaMap.prototype.deactivateTool=function( toolObj ) { if (this.currentTool==toolObj) { this.currentTool=null; } if (this.theInsideLayer) { this.theInsideLayer.style.cursor='auto'; } }; kaMap.prototype.setCursor=function(cursor) { if (cursor && cursor.length && typeof cursor=='object') { for (var i=0; i < cursor.length; i++) { this.theInsideLayer.style.cursor=cursor[i]; if (this.theInsideLayer.style.cursor==cursor[i]) { break; } } } else if (typeof cursor=='string') { this.theInsideLayer.style.cursor=cursor; } else { this.theInsideLayer.style.cursor='auto'; } }; kaMap.prototype.checkWrap=function() { var bWrapped=false; this.checkMaxExtents(); this.xOffset=safeParseInt(this.theInsideLayer.style.left) + this.nCurrentLeft - this.xOrigin; this.yOffset=safeParseInt(this.theInsideLayer.style.top) + this.nCurrentTop - this.yOrigin; while (this.xOffset > 0) { this.wrapR2L(); bWrapped=true; } while (this.xOffset < -(this.nBuffer*this.tileWidth)) { this.wrapL2R(); bWrapped=true; } while (this.yOffset > -(this.nBuffer*this.tileHeight)) { this.wrapB2T(); bWrapped=true; } while (this.yOffset < -(2*this.nBuffer*this.tileHeight)) { this.wrapT2B(); bWrapped=true; } var layer=this.aMaps[this.currentMap].getLayers()[0]; if (layer) { var img=layer.domObj.childNodes[0].style; this.nCurrentTop=safeParseInt(img.top) + this.yOrigin; this.nCurrentLeft=safeParseInt(img.left) + this.xOrigin; } if (bWrapped) { this.triggerEvent( KAMAP_METAEXTENTS_CHANGED, this.getMetaExtents() ); } }; kaMap.prototype.checkMaxExtents=function() { var maxExtents=this.getCurrentMap().maxExtents; if (maxExtents.length==4) { if ((maxExtents[0] >=maxExtents[2]) || (maxExtents[1] >=maxExtents[3])) { return false; } var geoExtents=this.getGeoExtents(); var hPixelAdjustment=0; var vPixelAdjustment=0; if (geoExtents[0] < maxExtents[0]) { hPixelAdjustment=Math.round((maxExtents[0] - geoExtents[0]) / this.cellSize); } if (geoExtents[2] > maxExtents[2]) { if(hPixelAdjustment !=0) { hPixelAdjustment +=Math.round((maxExtents[2] - geoExtents[2]) / this.cellSize); hPixelAdjustment /=2; } else { hPixelAdjustment +=Math.round((maxExtents[2] - geoExtents[2]) / this.cellSize); } } if(hPixelAdjustment !=0) { this.theInsideLayer.style.left=(safeParseInt(this.theInsideLayer.style.left) - hPixelAdjustment) + 'px'; } if(geoExtents[1] < maxExtents[1]) { vPixelAdjustment=Math.round((maxExtents[1] - geoExtents[1]) / this.cellSize); } if(geoExtents[3] > maxExtents[3]) { if(vPixelAdjustment !=0) { vPixelAdjustment +=Math.round((maxExtents[3] - geoExtents[3]) / this.cellSize); vPixelAdjustment /=2; } else { vPixelAdjustment=Math.round((maxExtents[3] - geoExtents[3]) / this.cellSize); } } if(vPixelAdjustment !=0) { this.theInsideLayer.style.top=(safeParseInt(this.theInsideLayer.style.top) + vPixelAdjustment) + 'px'; } } }; kaMap.prototype.wrapR2L=function() { this.xOffset=this.xOffset - (this.nBuffer * this.tileWidth); var layers=this.aMaps[this.currentMap].getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; var refLeft=safeParseInt(d.childNodes[0].style.left); for (var j=0; j<this.nHigh; j++) { var imgLast=d.childNodes[((j+1)*this.nWide)-1]; var imgNext=d.childNodes[j*this.nWide]; imgLast.style.left=(refLeft - this.tileWidth) + 'px'; imgLast.src=this.aPixel.src; d.removeChild(imgLast); d.insertBefore(imgLast, imgNext); if (layers[k].visible) { layers[k].setTile(imgLast); } } } }; kaMap.prototype.wrapL2R=function() { this.xOffset=this.xOffset + (this.nBuffer*this.tileWidth); var layers=this.aMaps[this.currentMap].getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; var refLeft=safeParseInt(d.childNodes[this.nWide-1].style.left); for (var j=0; j<this.nHigh; j++) { var imgFirst=d.childNodes[j*this.nWide]; var imgNext; if (j < this.nHigh-1) { imgNext=d.childNodes[((j+1)*this.nWide)]; } else { imgNext=null; } imgFirst.style.left=(refLeft + this.tileWidth) + 'px'; imgFirst.src=this.aPixel.src; d.removeChild(imgFirst); if (imgNext) { d.insertBefore(imgFirst, imgNext); } else { d.appendChild(imgFirst); } if (layers[k].visible) { layers[k].setTile(imgFirst); } } } }; kaMap.prototype.wrapT2B=function() { this.yOffset=this.yOffset + (this.nBuffer*this.tileHeight); var layers=this.aMaps[this.currentMap].getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; var refTop=safeParseInt(d.childNodes[(this.nHigh*this.nWide)-1].style.top); for (var i=0; i<this.nWide; i++) { var imgBottom=d.childNodes[0]; imgBottom.style.top=(refTop + this.tileHeight) + 'px'; imgBottom.src=this.aPixel.src; d.removeChild(imgBottom); d.appendChild(imgBottom); if (layers[k].visible) { layers[k].setTile(imgBottom); } } } }; kaMap.prototype.wrapB2T=function() { this.yOffset=this.yOffset - (this.nBuffer*this.tileHeight); var layers=this.aMaps[this.currentMap].getLayers(); for( var k=0; k<layers.length; k++) { var d=layers[k].domObj; var refTop=safeParseInt(d.childNodes[0].style.top); for (var i=0; i<this.nWide; i++) { var imgTop=d.childNodes[(this.nHigh*this.nWide)-1]; imgTop.style.top=(refTop - this.tileHeight) + 'px'; imgTop.src=this.aPixel.src; d.removeChild(imgTop); d.insertBefore(imgTop, d.childNodes[0]); if (layers[k].visible) { layers[k].setTile(imgTop); } } } }; kaMap.prototype.addMap=function( oMap ) { oMap.kaMap=this; this.aMaps[oMap.name]=oMap; }; kaMap.prototype.getMaps=function() { return this.aMaps; }; kaMap.prototype.getCurrentMap=function() { return this.aMaps[this.currentMap]; }; kaMap.prototype.selectMap=function( name ) { if (!this.aMaps[name]) { return false; } else { this.currentMap=name; var oMap=this.getCurrentMap(); this.setBackgroundColor(oMap.backgroundColor); this.setMapLayers(); if (arguments[1] && arguments[1].length==3) { this.zoomTo(arguments[1][0], arguments[1][1], arguments[1][2]); oMap.aZoomTo.length=0; } else if (oMap.aZoomTo.length !=0) { this.zoomTo(oMap.aZoomTo[0], oMap.aZoomTo[1], oMap.aZoomTo[2]); oMap.aZoomTo.length=0; } else if (arguments[1] && arguments[1].length==4) { this.zoomToExtents( arguments[1][0], arguments[1][1], arguments[1][2], arguments[1][3] ); } else { this.zoomToExtents( oMap.currentExtents[0], oMap.currentExtents[1], oMap.currentExtents[2], oMap.currentExtents[3] ); } this.triggerEvent( KAMAP_MAP_INITIALIZED, this.currentMap ); return true; } }; kaMap.prototype.setMapLayers=function( ) { var oMap=this.getCurrentMap(); for(var i=this.theInsideLayer.childNodes.length - 1; i>=0; i-- ) { if (this.theInsideLayer.childNodes[i].className=='mapLayer') { this.theInsideLayer.childNodes[i].appended=false; this.theInsideLayer.removeChild(this.theInsideLayer.childNodes[i]); } } layers=oMap.getLayers(); for( var i=0; i<layers.length; i++) { if(!layers[i].domObj) { var d=this.createMapLayer( layers[i].name ); this.theInsideLayer.appendChild( d ); d.appended=true; layers[i].domObj=d; layers[i].setOpacity( layers[i].opacity ); layers[i].setZIndex( layers[i].zIndex ); layers[i].setVisibility( layers[i].visible ); this.nWide=0; this.nHigh=0; this.drawGroup(layers[i]); } else if (!layers[i].domObj.appended) { this.theInsideLayer.appendChild( layers[i].domObj ); layers[i].domObj.appended=true; layers[i].setZIndex( layers[i].zIndex ); } } return true; }; kaMap.prototype.drawGroup=function(group) { var newViewportWidth=this.getObjectWidth(this.domObj); var newViewportHeight=this.getObjectHeight(this.domObj); if (this.viewportWidth==null) { this.theInsideLayer.style.top=(-1*this.nCurrentTop + this.yOrigin) + "px"; this.theInsideLayer.style.left=(-1*this.nCurrentLeft + this.xOrigin) + "px"; this.viewportWidth=newViewportWidth; this.viewportHeight=newViewportHeight; } var newWide=Math.ceil((newViewportWidth / this.tileWidth) + 2*this.nBuffer); var newHigh=Math.ceil((newViewportHeight / this.tileHeight) + 2*this.nBuffer); this.viewportWidth=newViewportWidth; this.viewportHeight=newViewportHeight; if (this.nHigh==0 && this.nWide==0) { this.nWide=newWide; } while (this.nHigh < newHigh) { this.appendRow(group); } while (this.nHigh > newHigh) { this.removeRow(group); } while (this.nWide < newWide) { this.appendColumn(group); } while (this.nWide > newWide) { this.removeColumn(group); } return true; }; kaMap.prototype.createMapLayer=function( id ) { var d=document.createElement( 'div' ); d.id=id; d.className='mapLayer'; d.style.position='absolute'; d.style.visibility='visible'; d.style.left='0px'; d.style.top='0px'; d.style.width='3000px'; d.style.height='3000px'; d.appended=false; return d; }; kaMap.prototype.addMapLayer=function( l ) { var map=this.getCurrentMap(); map.addLayer(l); this.setMapLayers(); this.paintLayer(l); this.triggerEvent( KAMAP_LAYERS_CHANGED, this.currentMap ); }; kaMap.prototype.removeMapLayer=function( id ) { var map=this.getCurrentMap(); var layer=map.getLayer(id); if (!layer) { return false; } if (map.removeLayer ( map.getLayer(id) )) { this.setMapLayers(); this.triggerEvent( KAMAP_LAYERS_CHANGED, this.currentMap ); } }; kaMap.prototype.getCenter=function() { var deltaMouseX=this.nCurrentLeft - this.xOrigin + safeParseInt(this.theInsideLayer.style.left); var deltaMouseY=this.nCurrentTop - this.yOrigin + safeParseInt(this.theInsideLayer.style.top); var vpTop=this.nCurrentTop - deltaMouseY; var vpLeft=this.nCurrentLeft - deltaMouseX; var vpCenterX=vpLeft + this.viewportWidth/2; var vpCenterY=vpTop + this.viewportHeight/2; return new Array( vpCenterX, vpCenterY ); }; kaMap.prototype.getGeoExtents=function() { var minx=-1*(safeParseInt(this.theInsideLayer.style.left) - this.xOrigin) * this.cellSize; var maxx=minx + this.viewportWidth * this.cellSize; var maxy=(safeParseInt(this.theInsideLayer.style.top) - this.yOrigin) * this.cellSize; var miny=maxy - this.viewportHeight * this.cellSize; return [minx,miny,maxx,maxy]; }; kaMap.prototype.getMetaExtents=function() { var result=this.getGeoExtents(); var oMap=this.getCurrentMap(); layers=oMap.getLayers(); for( var i=0; i<layers.length; i++) { if(layers[i].domObj) { var d=layers[i].domObj; var pl=safeParseInt(d.childNodes[0].style.left); var pt=safeParseInt(d.childNodes[0].style.top); var glt=this.pixToGeo(pl,pt,true); var left=-1*glt[0]; var top=-1*glt[1]; var right=left + this.nWide*this.tileWidth*this.cellSize; var bottom=top - this.nHigh*this.tileHeight*this.cellSize; result=[left, bottom, right, top]; break; } } return result; }; kaMap.prototype.zoomIn=function() { this.zoomByFactor(this.aMaps[this.currentMap].zoomIn()); }; kaMap.prototype.zoomOut=function() { this.zoomByFactor(this.aMaps[this.currentMap].zoomOut()); }; kaMap.prototype.zoomToScale=function( scale ) { this.zoomByFactor(this.aMaps[this.currentMap].zoomToScale(scale)); }; kaMap.prototype.zoomByFactor=function( nZoomFactor ) { if (nZoomFactor==1) { this.triggerEvent( KAMAP_NOTICE, "NOTICE: changing to current scale aborted"); return; } this.cellSize=this.cellSize/nZoomFactor; this.setMapLayers(); this.initializeLayers(nZoomFactor); this.triggerEvent( KAMAP_SCALE_CHANGED, this.getCurrentScale() ); this.triggerEvent( KAMAP_EXTENTS_CHANGED, this.getGeoExtents() ); }; kaMap.prototype.getCurrentScale=function() { return this.aMaps[this.currentMap].aScales[this.aMaps[this.currentMap].currentScale]; }; kaMap.prototype.setLayerQueryable=function( name, bQueryable ) { this.aMaps[this.currentMap].setLayerQueryable( name, bQueryable ); }; kaMap.prototype.setLayerVisibility=function( name, bVisible ) { if(!this.loadUnchecked && bVisible) { layer=this.aMaps[this.currentMap].getLayer(name); layer.visible=true; this.setMapLayers(); this.aMaps[this.currentMap].setLayerVisibility( name, bVisible ); this.paintLayer(layer); } else { this.aMaps[this.currentMap].setLayerVisibility( name, bVisible ); } }; kaMap.prototype.setLayerOpacity=function( name, opacity ) { this.aMaps[this.currentMap].setLayerOpacity( name, opacity ); }; kaMap.prototype.registerEventID=function( eventID ) { return this.eventManager.registerEventID(eventID); }; kaMap.prototype.registerForEvent=function( eventID, obj, func ) { return this.eventManager.registerForEvent(eventID, obj, func); }; kaMap.prototype.deregisterForEvent=function( eventID, obj, func ) { return this.eventManager.deregisterForEvent(eventID, obj, func); }; kaMap.prototype.triggerEvent=function( eventID ) { return this.eventManager.triggerEvent.apply( this.eventManager, arguments ); }; function safeParseInt( val ) { return Math.round(parseFloat(val)); }; function _map(o) { this.aLayers=[]; this.aZoomTo=[]; this.kaMap=null; this.name=(typeof(o.name) !='undefined') ? o.name : 'noname'; this.title=(typeof(o.title) !='undefined') ? o.title : 'no title'; this.aScales=(typeof(o.scales) !='undefined') ? o.scales : [1]; this.currentScale=(typeof(o.currentScale) !='undefined') ? parseFloat(o.currentScale) : 0; this.units=(typeof(o.units) !='undefined') ? o.units : 5; this.resolution=(typeof(o.resolution) !='undefined') ? o.resolution:72; this.defaultExtents=(typeof(o.defaultExtents) !='undefined') ? o.defaultExtents:[]; this.currentExtents=(typeof(o.currentExtents) !='undefined') ? o.currentExtents:[]; this.maxExtents=(typeof(o.maxExtents) !='undefined') ? o.maxExtents : []; this.backgroundColor=(typeof(o.backgroundColor) !='undefined') ? o.backgroundColor : '#ffffff'; this.version=(typeof(o.version) !='undefined') ? o.version : ""; }; _map.prototype.addLayer=function( layer ) { layer._map=this; layer.zIndex=this.aLayers.length; this.aLayers.push( layer ); }; _map.prototype.removeLayer=function( l ) { var alayer=Array(); for(i=0,a=0;i<this.aLayers.length;i++) { if(this.aLayers[i]!=l) { alayer[a]=this.aLayers[i]; a++; } } this.aLayers=alayer; return true; }; _map.prototype.getQueryableLayers=function() { var r=[]; var l=this.getLayers(); for( var i=0; i<l.length; i++) { if (l[i].isQueryable()) { r.push(l[i]); } } return r; }; _map.prototype.getLayers=function() { var r=[]; for( var i=0; i<this.aLayers.length; i++) { if (this.aLayers[i].isVisible() && (this.aLayers[i].visible || this.kaMap.loadUnchecked) ) { r.push(this.aLayers[i]); } } return r; }; _map.prototype.getAllQueryableLayers=function() { var r=[]; for( var i=0; i<this.aLayers.length; i++) { if (this.aLayers[i].isQueryable()) { r.push(this.aLayers[i]); } } return r; }; _map.prototype.getAllLayers=function() { return this.aLayers; }; _map.prototype.getLayer=function( name ) { for (var i=0; i<this.aLayers.length; i++) { if (this.aLayers[i].name==name) { return this.aLayers[i]; } } }; _map.prototype.getScales=function() { return this.aScales; }; _map.prototype.zoomIn=function() { var nZoomFactor=1; if (this.currentScale < this.aScales.length - 1) { nZoomFactor=this.aScales[this.currentScale]/this.aScales[this.currentScale+1]; this.currentScale=this.currentScale + 1; } return nZoomFactor; }; _map.prototype.zoomOut=function() { var nZoomFactor=1; if (this.currentScale > 0) { nZoomFactor=this.aScales[this.currentScale]/this.aScales[this.currentScale-1]; this.currentScale=this.currentScale - 1; } return nZoomFactor; }; _map.prototype.zoomToScale=function( scale ) { var nZoomFactor=1; for (var i=0; i<this.aScales.length; i++) { if (this.aScales[i]==scale) { nZoomFactor=this.aScales[this.currentScale]/scale; this.currentScale=parseInt(i); } } return nZoomFactor; }; _map.prototype.setLayerQueryable=function( name, bQueryable ) { var layer=this.getLayer( name ); if(typeof(layer) !='undefined') { layer.setQueryable( bQueryable ); } }; _map.prototype.setLayerVisibility=function( name, bVisible ) { var layer=this.getLayer( name ); if(typeof(layer) !='undefined') { layer.setVisibility( bVisible ); } }; _map.prototype.setLayerOpacity=function( name, opacity ) { var layer=this.getLayer( name ); if(typeof(layer) !='undefined') { layer.setOpacity( opacity ); } }; _map.prototype.setDefaultExtents=function( minx, miny, maxx, maxy ){ this.defaultExtents=[minx, miny, maxx, maxy]; if (this.currentExtents.length==0) this.setCurrentExtents( minx, miny, maxx, maxy ); }; _map.prototype.setCurrentExtents=function( minx, miny, maxx, maxy ) { this.currentExtents=[minx, miny, maxx, maxy]; }; _map.prototype.setMaxExtents=function( minx, miny, maxx, maxy ) { this.maxExtents=[minx, miny, maxx, maxy]; }; _map.prototype.setBackgroundColor=function( szBgColor ) { this.backgroundColor=szBgColor; }; function _layer( o ) { this.domObj=null; this._map=null; this.name=(typeof(o.name) !='undefined') ? o.name : 'unnamed'; this.visible=(typeof(o.visible) !='undefined') ? o.visible : true; this.opacity=(typeof(o.opacity) !='undefined') ? o.opacity : 100; this.imageformat=(typeof(o.imageformat) !='undefined') ? o.imageformat : null; this.queryable=(typeof(o.queryable) !='undefined') ? o.queryable : false; this.queryState=(typeof(o.queryable) !='undefined') ? o.queryable : false; this.tileSource=(typeof(o.tileSource) !='undefined') ? o.tileSource : 'auto'; this.scales=(typeof(o.scales) !='undefined') ? o.scales : new Array(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); this.toLoad=0; var ts=new Date(); this.timeStamp=Math.round(ts.getTime()/1000) + ts.getTimezoneOffset() * 60; this.redrawInterval=(typeof(o.redrawInterval) !='undefined') ? o.redrawInterval : -1; this.refreshInterval=(typeof(o.refreshInterval) !='undefined') ? o.refreshInterval : -1; if (this.refreshInterval > 0) { goQueueManager.enqueue( this.refreshInterval*1000, this, this.redraw ); } }; _layer.prototype.isQueryable=function() { return this.queryState; }; _layer.prototype.setQueryable=function( bQueryable ) { if (this.queryable) { this.queryState=bQueryable; } }; _layer.prototype.isVisible=function() { return (this.scales[this._map.currentScale]==1)? true:false; }; _layer.prototype.setOpacity=function( amount ) { this.opacity=amount; if (this.domObj) { this.domObj.style.opacity=amount/100; this.domObj.style.mozOpacity=amount/100; for(var i=0;i<this.domObj.childNodes.length;i++) { this.domObj.childNodes[i].style.filter="Alpha(opacity="+amount+")"; } } }; _layer.prototype.setTile=function(img) { var l=safeParseInt(img.style.left) + this._map.kaMap.xOrigin; var t=safeParseInt(img.style.top) + this._map.kaMap.yOrigin; var szImageformat=''; var image_format=''; if (this.imageformat && this.imageformat !='') { image_format=this.imageformat; szImageformat='&i='+image_format; } if(this.tileSource=='cache') { var metaLeft=Math.floor(l/(this._map.kaMap.tileWidth * this._map.kaMap.metaWidth)) * this._map.kaMap.tileWidth * this._map.kaMap.metaWidth; var metaTop=Math.floor(t/(this._map.kaMap.tileHeight * this._map.kaMap.metaHeight)) * this._map.kaMap.tileHeight * this._map.kaMap.metaHeight; var metaTileId='t' + metaTop + 'l' + metaLeft; var groupsDir=(this.name !='') ? this.name.replace(/\W/g, '_') : 'def'; var cacheDir=this._map.kaMap.webCache + this._map.name + '/' + this._map.aScales[this._map.currentScale] + '/' + groupsDir + '/def/' + metaTileId; var tileId="t" + t + "l" + l; var imageExtension=this.imageformat.toLowerCase().replace(/[\de]/g, ''); var src=cacheDir + "/" + tileId + "." + imageExtension; } else { var szVersion=''; if (this._map.version !='') { szVersion='&version='+this._map.version; } var szForce=''; var szLayers=''; if (arguments[1]) { szForce='&force=true'; } var szTimestamp=''; if (this.tileSource=='redraw' || this.tileSource=="refresh") { szTimestamp='&ts='+this.timeStamp; if (this.redrawInterval) { szTimestamp=szTimestamp + '&interval='+this.redrawInterval; } } var szGroup='&g='+img.layer.domObj.id; var szScale='&s='+this._map.aScales[this._map.currentScale]; var q='?'; if (this._map.kaMap.tileURL.indexOf('?') !=-1) { if (this._map.kaMap.tileURL.slice(-1) !='&') { q='&'; } else { q=''; } } if (this.tileSource=='nocache') { var src=this._map.kaMap.server + this._map.kaMap.tileURL.replace('tile.php', 'tile_nocache.php') + q + 'map=' + this._map.name + '&t=' + t + '&l=' + l + szScale + szForce + szGroup + szImageformat; if(typeof(this.replacementVariables) !='undefined') { for(var key in this.replacementVariables) { src +='&' + encodeURIComponent(key) + '=' + encodeURIComponent(this.replacementVariables[key]); } } } else { var src=this._map.kaMap.server + this._map.kaMap.tileURL + q + 'map=' + this._map.name + '&t=' + t + '&l=' + l + szScale + szForce + szGroup + szImageformat + szTimestamp + szVersion; } } if (img.src !=src) { img.style.visibility='hidden'; img.src=src; } }; _layer.prototype.setVisibility=function( bVisible ) { this.visible=bVisible; if (this.domObj) { this.domObj.style.visibility=bVisible?'visible':'hidden'; this.domObj.style.display=bVisible?'block':'none'; for( var i=0; i<this.domObj.childNodes.length; i++) { this.setTile(this.domObj.childNodes[i]); } this._map.kaMap.triggerEvent( KAMAP_LAYER_STATUS_CHANGED, this ); } }; _layer.prototype.setZIndex=function( zIndex ) { this.zIndex=zIndex; if (this.domObj) { this.domObj.style.zIndex=zIndex; } }; _layer.prototype.setTileLayer=function() { this.loaded=0; for(i=0; i < this.domObj.childNodes.length; i++) { img=this.domObj.childNodes[i]; if(arguments[0]) { this.setTile(img, arguments[0]); } else { this.setTile(img); } } }; _layer.prototype.redraw=function() { if (arguments[0]) { this.refreshInterval=arguments[0]; } if (this.visible) { var ts=new Date(); this.timeStamp=Math.round(ts.getTime()/1000) + ts.getTimezoneOffset() * 60; this.setTileLayer(); } if (this.refreshInterval > 0) { goQueueManager.enqueue( this.refreshInterval*1000, this, this.redraw ); } }; function _eventManager( ) { this.events=[]; this.lastEventID=0; } _eventManager.prototype.registerEventID=function( eventID ) { var ev=new String(eventID); if (!this.events[eventID]) { this.events[eventID]=[]; } }; _eventManager.prototype.registerForEvent=function(eventID, obj, func) { var ev=new String(eventID); this.events[eventID].push( [obj, func] ); }; _eventManager.prototype.deregisterForEvent=function( eventID, obj, func ) { var ev=new String(eventID); var bResult=false; if (!this.events[eventID]) { return false; } for (var i=0;i<this.events[eventID].length;i++) { if (this.events[eventID][i][0]==obj && this.events[eventID][i][1]==func) { this.events[eventID].splice(i,1); bResult=true; } } return bResult; }; _eventManager.prototype.triggerEvent=function( eventID ) { var ev=new String(eventID); if (!this.events[eventID]) { return false; } var args=new Array(); for(i=1; i<arguments.length; i++) { args[args.length]=arguments[i]; } for (var i=0; i<this.events[eventID].length; i++) { this.events[eventID][i][1].apply( this.events[eventID][i][0], arguments ); } return true; }; var goQueueManager=new _queueManager(); function _queueManager() { this.queue=new Array(); } _queueManager.prototype.enqueue=function( timeout, obj, func, args ) { var pos=this.queue.length; for (var i=0; i< this.queue.length; i++) { if (this.queue[i]==null) { pos=i; break; } } var id=window.setTimeout( "_queueManager_execute("+pos+")", timeout ); this.queue[pos]=new Array( id, obj, func, args ); return pos; }; _queueManager.prototype.dequeue=function( pos ) { if (this.queue[pos] !=null) { window.clearTimeout( this.queue[pos][0] ); this.queue[pos]=null; } }; function _queueManager_execute( pos) { if (goQueueManager.queue[pos] !=null) { var obj=goQueueManager.queue[pos][1]; var func=goQueueManager.queue[pos][2]; if (goQueueManager.queue[pos][3] !=null) { func.apply( obj, goQueueManager.queue[pos][3] ); } else { func.apply( obj ); } goQueueManager.queue[pos]=null; } };  function kaKeymap(oKaMap, szID ) { this.kaMap=oKaMap; this.domObj=this.kaMap.getRawObject(szID); this.domObj.kaKeymap=this; this.width=getObjectWidth(szID)+"px"; this.height=getObjectHeight(szID)+"px"; this.pxExtent=null; this.domExtents=null; this.aExtents=null; this.domImg=null; this.imgSrc=null; this.imgWidth=null; this.imgHeight=null; this.cellWidth=null; this.cellHeight=null; this.initialExtents=null; this.domObj.ondblclick=this.onclick; if ( this.domObj.captureEvents) { this.domObj.captureEvents(Event.DBLCLICK); } this.kaMap.registerForEvent( KAMAP_EXTENTS_CHANGED, this, this.update ); this.kaMap.registerForEvent( KAMAP_MAP_INITIALIZED, this, this.initialize ); }; kaKeymap.prototype.initialize=function(id) { this.pxExtent=null; this.initialExtents=this.kaMap.getGeoExtents(); call(this.kaMap.server+'/keymap.php?map='+this.kaMap.currentMap,this,this.draw); }; kaKeymap.prototype.draw=function( szResult ) { eval( szResult ); this.cellWidth=(this.aExtents[2] - this.aExtents[0]) / this.imgWidth; this.cellHeight=(this.aExtents[3] - this.aExtents[1]) / this.imgHeight; for(var i=this.domObj.childNodes.length - 1; i >=0; i--) this.domObj.removeChild (this.domObj.childNodes[i]); this.domObj.style.width=this.imgWidth + "px"; this.domObj.style.height=this.imgHeight + "px"; this.domImg=document.createElement( 'img' ); this.domImg.src=this.imgSrc + '&map='+this.kaMap.currentMap; this.domImg.width=this.imgWidth; this.domImg.height=this.imgHeight; this.domObj.appendChild( this.domImg ); this.domExtents=document.createElement( 'div' ); this.domExtents.kaKeymap=this; this.domExtents.id="keymapDomExtents"; this.domExtents.style.position='absolute'; this.domExtents.style.border='1px solid red'; this.domExtents.style.top="1px"; this.domExtents.style.left="1px"; this.domExtents.style.width="1px"; this.domExtents.style.height="1px"; this.domExtents.style.backgroundColor='transparent'; this.domExtents.style.visibility='visible'; this.domObj.appendChild(this.domExtents); this.domEvent=document.createElement( 'div' ); this.domEvent.kaKeymap=this; this.domEvent.onmousedown=this.mousedown; this.domEvent.onmouseup=this.mouseup; this.domEvent.onmousemove=this.mousemove; this.domEvent.onmouseout=this.mouseup; if (this.domEvent.captureEvents) { this.domEvent.captureEvents(Event.MOUSEDOWN); this.domEvent.captureEvents(Event.MOUSEUP); this.domEvent.captureEvents(Event.MOUSEMOVE); this.domEvent.captureEvents(Event.MOUSEOUT); } this.domEvent.style.position='absolute'; this.domEvent.id='keymapDomEvent'; this.domEvent.style.border='1px solid red'; this.domEvent.style.top="1px"; this.domEvent.style.left="1px"; this.domEvent.style.width="1px"; this.domEvent.style.height="1px"; this.domEvent.style.backgroundColor='white'; this.domEvent.style.visibility='visible'; this.domEvent.style.opacity=0.01; this.domEvent.style.mozOpacity=0.01; this.domEvent.style.filter="Alpha(opacity=0.01)"; this.domObj.appendChild(this.domEvent); var d=document.createElement( 'img' ); d.id="keymapCrossImage"; d.src=this.kaMap.server+"images/cross.png"; d.style.position='absolute'; d.style.top='0px'; d.style.left='0px'; d.style.width="19px"; d.style.height="19px"; d.style.visibility='hidden'; this.domExtents.appendChild(d); this.domCross=d; if (this.initialExtents !=null) { this.update( null, this.initialExtents); } }; kaKeymap.prototype.update=function( eventID, extents ) { if (!this.aExtents || !this.domExtents) { this.initialExtents=extents; return; } var left=(extents[0] - this.aExtents[0]) / this.cellWidth; var width=(extents[2] - extents[0]) / this.cellWidth; var top=-1 * (extents[3] - this.aExtents[3]) / this.cellHeight; var height=(extents[3] - extents[1]) / this.cellHeight; this.pxExtent=new Array(left,top,width,height); this.domExtents.style.top=parseInt(top+0.5)+"px"; this.domExtents.style.left=parseInt(left+0.5)+"px"; this.domEvent.style.top=parseInt(top+0.5)+"px"; this.domEvent.style.left=parseInt(left+0.5)+"px"; if (parseInt(width+0.5) < parseInt(this.domCross.style.width) || parseInt(height+0.5) < parseInt(this.domCross.style.height) ) { var ix=parseInt(this.domCross.style.width)/2; var iy=parseInt(this.domCross.style.height)/2; var ox=width/2; var oy=height/2; this.domExtents.style.width=this.domCross.style.width; this.domExtents.style.height=this.domCross.style.height; this.domEvent.style.width=this.domCross.style.width; this.domEvent.style.height=this.domCross.style.height; this.domExtents.style.top=(parseInt(this.domExtents.style.top) -iy + oy) + 'px'; this.domExtents.style.left=(parseInt(this.domExtents.style.left) -ix + ox) + 'px'; this.domEvent.style.top=(parseInt(this.domEvent.style.top) -iy + oy) + 'px'; this.domEvent.style.left=(parseInt(this.domEvent.style.left) -ix + ox) + 'px'; this.domCross.style.visibility='visible'; this.domExtents.style.border='1px solid white'; this.domEvent.style.border='none'; } else { this.domExtents.style.width=parseInt(width+0.5) + "px"; this.domExtents.style.height=parseInt(height+0.5) + "px"; this.domEvent.style.width=parseInt(width+0.5) + "px"; this.domEvent.style.height=parseInt(height+0.5) + "px"; this.domCross.style.visibility='hidden'; this.domExtents.style.border='1px solid red'; this.domEvent.style.border='1px solid red'; this.domEvent.style.visibility='visible'; this.domExtents.style.visibility='visible'; } }; kaKeymap.prototype.onclick=function(e) { e=(e)?e:((event)?event:null); this.kaKeymap.centerMap(e); }; kaKeymap.prototype.centerMap=function(e) { var pos=this.aPixPos( e.clientX, e.clientY ); this.kaMap.zoomTo(pos[0],pos[1]); }; kaKeymap.prototype.aPixPos=function( x, y ) { var obj=this.domObj; var offsetLeft=0; var offsetTop=0; while (obj) { offsetLeft +=parseFloat(obj.offsetLeft); offsetTop +=parseFloat(obj.offsetTop); obj=obj.offsetParent; } var pX=x - offsetLeft ; var pY=y - offsetTop ; pX=parseFloat(this.aExtents[0] + (this.cellWidth *pX)); pY=parseFloat(this.aExtents[3] - (this.cellHeight *pY)); return [pX,pY]; }; kaKeymap.prototype.mousedown=function(e) { e=(e)?e:((event)?event:null); this.kaKeymap.domEvent.style.top="0px"; this.kaKeymap.domEvent.style.left="0px"; this.kaKeymap.domEvent.style.width=this.kaKeymap.domObj.style.width; this.kaKeymap.domEvent.style.height=this.kaKeymap.domObj.style.height; this.kaKeymap.domExtents.init=1; this.kaKeymap.domExtents.oX=e.clientX; this.kaKeymap.domExtents.oY=e.clientY; var amount=50; this.kaKeymap.domExtents.style.backgroundColor='pink'; this.kaKeymap.domExtents.style.opacity=amount/100; if (this.kaKeymap.kaMap.isIE4) { this.kaKeymap.domExtents.style.filter="Alpha(opacity="+amount+")"; } e=null; }; kaKeymap.prototype.mouseup=function(e) { if(this.kaKeymap.domExtents.init) { e=(e)?e:((event)?event:null); this.kaKeymap.domExtents.style.backgroundColor='transparent'; this.kaKeymap.domExtents.style.opacity=1; if (this.kaKeymap.kaMap.isIE4) { this.kaKeymap.domExtents.style.filter="Alpha(opacity=100)"; } this.kaKeymap.domExtents.init=0; var cG=this.kaKeymap.geoCentCoord(); this.kaKeymap.kaMap.zoomTo(cG[0],cG[1]); } }; kaKeymap.prototype.mousemove=function(e) { e=(e)?e:((event)?event:null); if(this.kaKeymap.domExtents.init) { var xMov=(this.kaKeymap.domExtents.oX-e.clientX); var yMov=(this.kaKeymap.domExtents.oY-e.clientY); var oX=this.kaKeymap.pxExtent[0]; var oY=this.kaKeymap.pxExtent[1]; var nX=oX-xMov; var nY=oY-yMov; this.kaKeymap.domExtents.oX=e.clientX; this.kaKeymap.domExtents.oY=e.clientY; this.kaKeymap.pxExtent[0]=nX; this.kaKeymap.pxExtent[1]=nY; if(this.kaKeymap.domCross.style.visibility=='visible') { var ix=parseInt(this.kaKeymap.domCross.style.width)/2; var iy=parseInt(this.kaKeymap.domCross.style.height)/2; var ox=this.kaKeymap.pxExtent[2]/2; var oy=this.kaKeymap.pxExtent[3]/2; this.kaKeymap.domExtents.style.top=parseInt((nY+0.5)-iy+oy) + "px"; this.kaKeymap.domExtents.style.left=parseInt((nX+0.5)-ix+ox) + "px"; } else { this.kaKeymap.domExtents.style.top=parseInt(nY+0.5) + "px"; this.kaKeymap.domExtents.style.left=parseInt(nX+0.5) + "px"; } } }; kaKeymap.prototype.geoCentCoord=function() { var cpX=this.pxExtent[0] + this.pxExtent[2]/2; var cpY=this.pxExtent[1] + this.pxExtent[3]/2; var cX=this.aExtents[0] + (this.cellWidth *cpX); var cY=this.aExtents[3] - (this.cellHeight *cpY); return [cX,cY]; }; function kaLegend(oKaMap, szID, bStatic) { this.kaMap=oKaMap; this.domObj=this.kaMap.getRawObject(szID); this.type=(bStatic)?'static':'dynamic'; this.expanders=[]; this.queryCBs=[]; this.urlBase=this.kaMap.server; this.urlBase +=(this.urlBase!=''&&this.urlBase.substring(-1)!='/')?'':'/'; this.showQueryCBs=true; if (this.type=='static') { this.domImg=document.createElement( 'img' ); this.domImg.src=this.kaMap.aPixel.src; this.domObj.appendChild( this.domImg ); } else { this.domObj.innerHTML='&nbsp;'; } this.kaMap.registerForEvent( KAMAP_SCALE_CHANGED, this, this.update ); this.kaMap.registerForEvent( KAMAP_MAP_INITIALIZED, this, this.update ); this.kaMap.registerForEvent( KAMAP_LAYERS_CHANGED, this, this.draw ); this.kaMap.registerForEvent( KAMAP_LAYER_STATUS_CHANGED, this, this.update ); }; kaLegend.prototype.update=function(eventID) { var url=''; if (this.type=='static') { this.domImg.src='legend.php?map=' + this.kaMap.currentMap + '&scale='+this.kaMap.getCurrentScale(); } else { if (eventID==KAMAP_MAP_INITIALIZED) { while(this.domObj.childNodes.length > 0) { this.domObj.removeChild(this.domObj.childNodes[0]); } this.draw(); } else if (eventID==KAMAP_SCALE_CHANGED) { var oMap=this.kaMap.getCurrentMap(); var aLayers=oMap.getAllLayers(); var s=this.kaMap.getCurrentScale(); for (var i in aLayers) { var oLayer=aLayers[i]; var oImg=this.kaMap.getRawObject( 'legendImg_' + oLayer.name); if (oImg) { var oParent=oImg.parentNode; var tId=oImg.id; var tVisibility=oImg.visibility; oParent.removeChild(oImg); oImg=document.createElement('img'); oImg.id=tId; oImg.title=tId; oImg.visibility=tVisibility; oImg.src='legend.php?map=' + this.kaMap.currentMap + '&scale=' + s + '&g=' + oLayer.name; oParent.appendChild(oImg); expander=getRawObject('expander_'+oLayer.name); expander.expandable=oImg; expander.expanded=true; kaLegend_expander.apply( expander ); } this.setOnOffLayer(oLayer); } } else if (eventID==KAMAP_LAYER_STATUS_CHANGED) { var layer=arguments[1]; for (var i=0; i<this.queryCBs.length; i++) { if (this.queryCBs[i].oLayer==layer) { this.queryCBs[i].checked=layer.visible; } } } } }; kaLegend.prototype.draw=function() { this.urlBase=this.kaMap.server; this.urlBase +=(this.urlBase!=''&&this.urlBase.substring(-1)!='/')?'':'/'; var oMap=this.kaMap.getCurrentMap(); this.expanders=[]; this.queryCBs=[]; if (this.domObj.childNodes.length==0) { this.domObj.appendChild(this.createHeaderHTML()); } var aLayers=oMap.getAllLayers(); for (var i=(aLayers.length-1);i>=0;i--) { if (aLayers[i].kaLegendObj==null) { this.createLayerHTML( aLayers[i] ); } else { try{this.domObj.removeChild( aLayers[i].kaLegendObj );} catch(e){}; } } for (var i=(aLayers.length-1);i>=0;i--) { this.domObj.appendChild( aLayers[i].kaLegendObj ); } if (this.kaMap.isIE4) { for(var i=0; i<this.queryCBs.length; i++) { this.queryCBs[i].checked=this.queryCBs[i].oLayer.visible; } } return; }; kaLegend.prototype.createHeaderHTML=function() { var d, t, tb, tr, td, img; d=document.createElement( 'div' ); d.className='kaLegendTitle'; t=document.createElement( 'table' ); t.setAttribute('width','226px'); t.setAttribute('cellPadding', "0"); t.setAttribute('cellSpacing', "0"); t.setAttribute('border', "0"); tb=document.createElement( "tbody" ); tr=document.createElement( 'tr' ); td=document.createElement( 'td' ); td.style.width='26px'; img=document.createElement( 'img' ); img.src='images/expand.png'; img.alt='expand all'; img.title='expand all'; img.kaLegend=this; img.onclick=kaLegend_expandAll; td.appendChild( img ); img=document.createElement( 'img' ); img.src='images/collapse.png'; img.alt='collapse all'; img.title='collapse all'; img.kaLegend=this; img.onclick=kaLegend_collapseAll; td.appendChild( img ); tr.appendChild( td ); td=document.createElement( 'td' ); td.appendChild(document.createTextNode( 'Layers' )); tr.appendChild( td ); tb.appendChild(tr); t.appendChild(tb); d.appendChild(t); return d; }; kaLegend.prototype.createLayerHTML=function( oLayer ) { var d, t, tb, tr, td, expander, cb, img, name; d=document.createElement( 'div' ); d.id='group_' + oLayer.name; d.className="kaLegendLayer"; d.oLayer=oLayer; name=oLayer.name; if (name=='__base__') { name='Base'; } t=document.createElement('table'); t.setAttribute('width','226'); t.setAttribute('cellPadding', "0"); t.setAttribute('cellSpacing', "0"); t.setAttribute('border', "0"); tb=document.createElement( 'tbody' ); tr=document.createElement('tr'); td=document.createElement('td'); td.setAttribute( "width", "9"); expander=document.createElement( 'img' ); expander.src='images/collapse.png'; expander.layerName=oLayer.name; expander.id='expander_'+oLayer.name; expander.onclick=kaLegend_expander; expander.expanded=true; this.expanders.push( expander ); td.appendChild( expander ); tr.appendChild(td); td=document.createElement('td'); td.width='22'; if (oLayer.name !='__base__') { cb=document.createElement( 'input' ); cb.type='checkbox'; cb.name='layerVisCB'; cb.value=oLayer.name; cb.checked=oLayer.visible; cb.kaLegend=this; cb.oLayer=oLayer; cb.onclick=kaLegend_toggleLayerVisibility; this.queryCBs.push(cb); td.appendChild( cb ); } else { td.innerHTML='&nbsp;'; } tr.appendChild(td); var oMap=this.kaMap.getCurrentMap(); var aLayers=oMap.getAllLayers(); if (aLayers.length > 1) { td=document.createElement('td'); td.width='19'; img=document.createElement( 'img' ); img.src='images/sun_white.png'; img.width='7'; img.alt="Decrease layer opacity"; img.title="Decrease layer opacity"; img.style.cursor='crosshair'; img.kaLegend=this; img.oLayer=oLayer; img.onclick=kaLegend_opacityDown; td.appendChild( img ); img=document.createElement( 'img' ); img.src='images/sun_grey.png'; img.width='7'; img.style.marginLeft='2px'; img.alt="Increase layer opacity"; img.title="Increase layer opacity"; img.style.cursor='crosshair'; img.kaLegend=this; img.oLayer=oLayer; img.onclick=kaLegend_opacityUp; td.appendChild( img ); tr.appendChild(td); td=document.createElement('td'); td.width='10'; td.style.padding='1px'; img=document.createElement( 'img' ); img.src='images/arrow_up.png'; img.width='10'; img.height='8'; img.style.marginBottom='2px'; img.alt="Shift Layer Up"; img.title="Shift Layer Up"; img.style.cursor='crosshair'; img.kaLegend=this; img.oLayer=oLayer; img.myDiv=d; img.onclick=kaLegend_moveLayerUp; td.appendChild( img ); img=document.createElement( 'img' ); img.src='images/arrow_down.png'; img.width='10'; img.height='8'; img.alt="Shift Layer Down"; img.title="Shift Layer Down"; img.style.cursor='crosshair'; img.kaLegend=this; img.oLayer=oLayer; img.myDiv=d; img.onclick=kaLegend_moveLayerDown; td.appendChild( img ); tr.appendChild(td); } td=document.createElement('td'); td.width='14'; img=document.createElement( 'img' ); img.width='14'; img.height='14'; if (oLayer.queryable) { if (oLayer.isQueryable()) { img.src='images/icon_query_on.png'; } else { img.src='images/icon_query_off.png'; } img.onmouseover=kaLegend_queryOnMouseOver; img.onmouseout=kaLegend_queryOnMouseOut; img.onclick=kaLegend_queryOnClick; img.oLayer=oLayer; } else { img.src='images/icon_query_x.png'; } td=document.createElement( 'td' ); td.appendChild(img); td.width='16'; tr.appendChild(td); td=document.createElement( 'td' ); td.innerHTML=name; tr.appendChild(td); tb.appendChild(tr); t.appendChild( tb ); d.appendChild(t); img=document.createElement( 'img' ); img.id='legendImg_' + oLayer.name; img.src=this.urlBase + 'legend.php?map='+this.kaMap.currentMap+'&scale='+this.kaMap.getCurrentScale()+'&g='+oLayer.name; d.appendChild(img); expander.expandable=img; oLayer.kaLegendObj=d; kaLegend_expander.apply( expander ); this.setOnOffLayer(oLayer,oLayer.isVisible); }; function kaLegend_toggleLayerQueryable() { this.kaLegend.kaMap.setLayerQueryable( this.value, this.checked ); }; function kaLegend_queryOnMouseOver() { if (this.oLayer.queryable) { this.src='images/icon_query_over.png'; } }; function kaLegend_queryOnMouseOut() { if (this.oLayer.queryable) { if (this.oLayer.isQueryable()) { this.src='images/icon_query_on.png'; } else { this.src='images/icon_query_off.png'; } } }; function kaLegend_queryOnClick() { if (this.oLayer.queryable) { if (this.oLayer.isQueryable()) { this.oLayer.setQueryable( false ); this.src='images/icon_query_off.png'; } else { this.oLayer.setQueryable( true ); this.src='images/icon_query_on.png'; } } }; function kaLegend_toggleLayerVisibility() { this.kaLegend.kaMap.setLayerVisibility( this.value, this.checked ); }; function kaLegend_expander() { this.expanded=!this.expanded; this.src=(this.expanded)?'images/collapse.png':'images/expand.png'; this.expandable.style.display=(this.expanded)?'block':'none'; }; function kaLegend_expandAll() { var kaLeg=this.kaLegend; for (var i=0; i<kaLeg.expanders.length; i++) { kaLeg.expanders[i].expanded=false; kaLegend_expander.apply( kaLeg.expanders[i] ); } }; function kaLegend_collapseAll() { var kaLeg=this.kaLegend; if (kaLeg.expanders) { for (var i=0; i<kaLeg.expanders.length; i++) { kaLeg.expanders[i].expanded=true; kaLegend_expander.apply( kaLeg.expanders[i] ); } } }; function kaLegend_opacityDown() { var opc; opc=this.oLayer.opacity-10; this.kaLegend.kaMap.setLayerOpacity(this.oLayer.name, opc ); }; function kaLegend_opacityUp() { var opc; opc=this.oLayer.opacity+10; this.kaLegend.kaMap.setLayerOpacity(this.oLayer.name, opc ); }; kaLegend.prototype.setOnOffLayer=function(l) { if (l.isVisible()) { if (l.kaLegendObj) { l.kaLegendObj.style.display='block'; } } else { if(l.kaLegendObj) { l.kaLegendObj.style.display='none'; } } }; function kaLegend_moveLayerDown() { var myLayer=this.oLayer; var leg=this.myDiv.parentNode; var myDiv=this.myDiv; var lowerDiv=findLowerDiv(myDiv); if(lowerDiv && lowerDiv.className=='kaLegendLayer') { var aCheckbox=document.getElementsByTagName('input'); var checkboxStatusUp=null; var checkboxStatusDown=null; var checkboxUp=null; var checkboxDown=null; for(var i=0;i<aCheckbox.length;i++) { var inputTag=aCheckbox[i]; if(inputTag.value==myDiv.id.replace(/\bgroup_/, '')) { checkboxUp=inputTag; checkboxStatusUp=checkboxUp.checked; } if(inputTag.value==lowerDiv.id.replace(/\bgroup_/, '')) { checkboxDown=inputTag; checkboxStatusDown=inputTag.checked; } } var proxyMy=myDiv.cloneNode(true); var proxyLower=lowerDiv.cloneNode(true); myDiv.parentNode.insertBefore( proxyMy , myDiv ); myDiv.parentNode.insertBefore( proxyLower , lowerDiv ); myDiv.parentNode.replaceChild( lowerDiv , proxyMy ); myDiv.parentNode.replaceChild( myDiv , proxyLower ); if(checkboxUp)checkboxUp.checked=checkboxStatusUp; if(checkboxDown)checkboxDown.checked=checkboxStatusDown; for (i=0,n=leg.childNodes.length;i< leg.childNodes.length;i++) { var child=leg.childNodes[i]; if(child && child.className=='kaLegendLayer') { child.oLayer.zIndex=(n); n--; } } this.kaLegend.kaMap.setMapLayers(); } else { alert('this layer can\'t go farther down'); } }; function kaLegend_moveLayerUp() { var myLayer=this.oLayer; var leg=this.myDiv.parentNode; var myDiv=this.myDiv; var upperDiv=findUpperDiv(myDiv); if(upperDiv && upperDiv.className=='kaLegendLayer') { var aCheckbox=document.getElementsByTagName('input'); var checkboxStatusUp=null; var checkboxStatusDown=null; var checkboxUp=null; var checkboxDown=null; for(var i=0;i<aCheckbox.length;i++) { var inputTag=aCheckbox[i]; if(inputTag.value==upperDiv.id.replace(/\bgroup_/, '')) { checkboxUp=inputTag; checkboxStatusUp=checkboxUp.checked; } if(inputTag.value==myDiv.id.replace(/\bgroup_/, '')) { checkboxDown=inputTag; checkboxStatusDown=inputTag.checked; } } var proxyMy=myDiv.cloneNode(true); var proxyUpper=upperDiv.cloneNode(true); myDiv.parentNode.insertBefore( proxyMy , myDiv ); myDiv.parentNode.insertBefore( proxyUpper , upperDiv ); myDiv.parentNode.replaceChild( upperDiv , proxyMy ); myDiv.parentNode.replaceChild( myDiv , proxyUpper ); if(checkboxUp)checkboxUp.checked=checkboxStatusUp; if(checkboxDown)checkboxDown.checked=checkboxStatusDown; for (i=0,n=leg.childNodes.length;i< leg.childNodes.length;i++) { var child=leg.childNodes[i]; if(child && child.className=='kaLegendLayer') { child.oLayer.zIndex=(n); n--; } } this.kaLegend.kaMap.setMapLayers(); } else { alert('this layer can\'t go farther up'); } }; function findLowerDiv(div) { lDiv=div.nextSibling; if(lDiv && lDiv.className=='kaLegendLayer' && lDiv.style.display=='none') { findLowerDiv(lDiv); } return lDiv; }; function findUpperDiv(div){ uDiv=div.previousSibling; if(uDiv && uDiv.className=='kaLegendLayer' && uDiv.style.display=='none'){ findUpperDiv(uDiv); } return uDiv; } var kaCurrentTool=null; function kaTool( oKaMap ) { this.kaMap=oKaMap; this.kaMap.registerTool( this ); this.name='kaTool'; this.wheelPlus=new Array(oKaMap, oKaMap.zoomOut, null); this.wheelMinus=new Array(oKaMap, oKaMap.zoomIn, null); }; kaTool.prototype.activate=function() { this.kaMap.activateTool( this ); document.kaCurrentTool=this; }; kaTool.prototype.deactivate=function() { this.kaMap.deactivateTool( this ); document.kaCurrentTool=null; }; kaTool.prototype.onmousemove=function(e) { return false; }; kaTool.prototype.onmousedown=function(e) { return false; }; kaTool.prototype.onmouseup=function(e) { return false; }; kaTool.prototype.ondblclick=function(e) { return false; }; kaTool.prototype.setMouseWheel=function(minusSet, plusSet) { this.wheelMinus=minusSet; this.wheelPlus=plusSet; }; kaTool.prototype.onmousewheel=function(e) { e=(e)?e:((event)?event:null); var wheelDelta=e.wheelDelta ? e.wheelDelta : e.detail*-1; var wheelSet=null; if (wheelDelta > 0) wheelSet=this.wheelPlus; else wheelSet=this.wheelMinus; if (wheelSet) { obj=(wheelSet[0]) ? wheelSet[0] : null; func=(wheelSet[1]) ? wheelSet[1] : null; args=(wheelSet[2]) ? wheelSet[2] : null; if (func) { if (args) { func.apply(obj, args); } else{ func.apply(obj); } } } }; kaTool.prototype.adjustPixPosition=function( x, y ) { var obj=this.kaMap.domObj; var offsetLeft=0; var offsetTop=0; while (obj) { offsetLeft +=parseInt(obj.offsetLeft); offsetTop +=parseInt(obj.offsetTop); obj=obj.offsetParent; } var pX=parseInt(this.kaMap.theInsideLayer.style.left) + offsetLeft - this.kaMap.xOrigin - x; var pY=parseInt(this.kaMap.theInsideLayer.style.top) + offsetTop - this.kaMap.yOrigin - y; return [pX,pY]; }; function kaTool_redirect_onkeypress(e) { if (document.kaCurrentTool) { document.kaCurrentTool.onkeypress(e); } }; kaTool.prototype.onkeypress=function(e) { e=(e)?e:((event)?event:null); if (e) { var charCode=(e.charCode)?e.charCode:e.keyCode; var b=true; var nStep=16; switch(charCode) { case 38: this.kaMap.moveBy(0,nStep); this.kaMap.triggerEvent( KAMAP_EXTENTS_CHANGED, this.kaMap.getGeoExtents() ); break; case 40: this.kaMap.moveBy(0,-nStep); this.kaMap.triggerEvent( KAMAP_EXTENTS_CHANGED, this.kaMap.getGeoExtents() ); break; case 37: this.kaMap.moveBy(nStep,0); this.kaMap.triggerEvent( KAMAP_EXTENTS_CHANGED, this.kaMap.getGeoExtents() ); break; case 39: this.kaMap.moveBy(-nStep,0); this.kaMap.triggerEvent( KAMAP_EXTENTS_CHANGED, this.kaMap.getGeoExtents() ); break; case 33: this.kaMap.slideBy(0, this.kaMap.viewportHeight/2); break; case 34: this.kaMap.slideBy(0,-this.kaMap.viewportHeight/2); break; case 36: this.kaMap.slideBy(this.kaMap.viewportWidth/2,0); break; case 35: this.kaMap.slideBy(-this.kaMap.viewportWidth/2,0); break; case 43: case 61: this.kaMap.zoomIn(); break; case 45: this.kaMap.zoomOut(); break; default: b=false; } if (b) { return this.cancelEvent(e); } return true; } }; kaTool.prototype.onmouseover=function(e) { return false; }; kaTool.prototype.onmouseout=function(e) { if (this.kaMap.isIE4) { document.onkeydown=null; } document.onkeypress=null; return false; }; kaTool.prototype.cancelEvent=function(e) { e=(e)?e:((event)?event:null); e.cancelBubble=true; e.returnValue=false; if (e.stopPropogation) { e.stopPropogation(); } if (e.preventDefault) { e.preventDefault(); } return false; }; function kaNavigator( oKaMap ) { kaTool.apply( this, [oKaMap] ); this.name='kaNavigator'; this.cursorNormal=["url('images/grab.cur'),move", '-moz-grab', 'grab', 'move']; this.cursorDrag=["url('images/grabbing.cur'),move", '-moz-grabbing', 'grabbing', 'move']; this.cursor=this.cursorNormal; this.activeImage=this.kaMap.server + 'images/button_pan_3.png'; this.disabledImage=this.kaMap.server + 'images/button_pan_2.png'; this.lastx=null; this.lasty=null; this.bMouseDown=false; for (var p in kaTool.prototype) { if (!kaNavigator.prototype[p]) kaNavigator.prototype[p]=kaTool.prototype[p]; } }; kaNavigator.prototype.onmouseout=function(e) { e=(e)?e:((event)?event:null); if (!e.target) e.target=e.srcElement; if (e.target.id==this.kaMap.domObj.id) { this.bMouseDown=false; return kaTool.prototype.onmouseout.apply(this, [e]); } }; kaNavigator.prototype.onmousemove=function(e) { e=(e)?e:((event)?event:null); if (!this.bMouseDown) { return false; } if (!this.kaMap.layersHidden) { this.kaMap.hideLayers(); } var newTop=safeParseInt(this.kaMap.theInsideLayer.style.top); var newLeft=safeParseInt(this.kaMap.theInsideLayer.style.left); var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); newTop=newTop - this.lasty + y; newLeft=newLeft - this.lastx + x; this.kaMap.theInsideLayer.style.top=newTop + 'px'; this.kaMap.theInsideLayer.style.left=newLeft + 'px'; this.kaMap.checkWrap.apply(this.kaMap, []); this.lastx=x; this.lasty=y; return false; }; kaNavigator.prototype.onmousedown=function(e) { e=(e)?e:((event)?event:null); if (e.button==2) { return this.cancelEvent(e); } else { this.cursor=this.cursorDrag; this.kaMap.setCursor(this.cursorDrag); if (this.kaMap.isIE4) { document.onkeydown=kaTool_redirect_onkeypress; } document.onkeypress=kaTool_redirect_onkeypress; this.bMouseDown=true; var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); this.lastx=x; this.lasty=y; this.startx=this.lastx; this.starty=this.lasty; e.cancelBubble=true; e.returnValue=false; if (e.stopPropogation) e.stopPropogation(); if (e.preventDefault) e.preventDefault(); return false; } }; var gDblClickTimer=null; kaNavigator.prototype.onmouseup=function(e) { this.cursor=this.cursorNormal; this.kaMap.setCursor(this.cursorNormal); e=(e)?e:((event)?event:null); this.bMouseDown=false; var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); if (Math.abs(x-this.startx) < 2 && Math.abs(y-this.starty) < 2) { if (!gDblClickTimer) { gDblClickTimer=window.setTimeout(bind(this.dispatchMapClicked, this, x, y), 250); } } else { gDblClickTimer=null; this.kaMap.showLayers(); this.kaMap.triggerEvent(KAMAP_EXTENTS_CHANGED, this.kaMap.getGeoExtents()); } return false; }; kaNavigator.prototype.dispatchMapClicked=function(px,py) { var p=this.kaMap.pixToGeo( px,py ); this.kaMap.triggerEvent(KAMAP_MAP_CLICKED, p); }; kaNavigator.prototype.ondblclick=function(e) { if (gDblClickTimer) { window.clearTimeout(gDblClickTimer); gDblClickTimer=null; } e=(e)?e:((event)?event:null); var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); var a=this.adjustPixPosition( x,y ); var p=this.kaMap.pixToGeo( a[0], a[1] ); this.kaMap.zoomTo(p[0],p[1]); }; function bind(m,o) { var __method=arguments[0]; var __object=arguments[1]; var args=[]; for (var i=2; i<arguments.length; i++) { args.push(arguments[i]) } return function() { return __method.apply(__object, args); } } var KAMAP_QUERY=gnLastEventId ++; var KAMAP_POINT_QUERY=0; var KAMAP_RECT_QUERY=1; function kaQuery( oKaMap, type ) { kaTool.apply( this, [oKaMap] ); this.name='kaQuery'; this.cursor='help'; this.domObj=document.createElement( 'div' ); this.domObj.style.position='absolute'; this.domObj.style.top='0px'; this.domObj.style.left='0px'; this.domObj.style.width='1px'; this.domObj.style.height='1px'; this.domObj.style.zIndex=100; this.domObj.style.visibility='hidden'; this.domObj.style.border='1px solid red'; this.domObj.style.backgroundColor='white'; this.domObj.style.opacity=0.50; this.domObj.style.mozOpacity=0.50; this.domObj.style.filter='Alpha(opacity=50)'; this.kaMap.theInsideLayer.appendChild( this.domObj ); this.startx=null; this.starty=null; this.endx=null; this.endy=null; this.bMouseDown=false; this.type=type; for (var p in kaTool.prototype) { if (!kaQuery.prototype[p]) kaQuery.prototype[p]=kaTool.prototype[p]; } }; kaQuery.prototype.drawZoomBox=function() { if (this.startx==null || this.starty==null || this.endx==null || this.endy==null ) { this.domObj.style.visibility='hidden'; this.domObj.style.top='0px'; this.domObj.style.left='0px'; this.domObj.style.width='1px'; this.domObj.style.height='1px'; return; } this.domObj.style.visibility='visible'; if (this.endx < this.startx) { this.domObj.style.left=(this.endx - this.kaMap.xOrigin) + 'px'; this.domObj.style.width=(this.startx - this.endx) + "px"; } else { this.domObj.style.left=(this.startx - this.kaMap.xOrigin) + 'px'; this.domObj.style.width=(this.endx - this.startx) + "px"; } if (this.endy < this.starty) { this.domObj.style.top=(this.endy - this.kaMap.yOrigin) + 'px'; this.domObj.style.height=(this.starty - this.endy) + "px"; } else { this.domObj.style.top=(this.starty - this.kaMap.yOrigin) + 'px'; this.domObj.style.height=(this.endy - this.starty) + "px"; } }; kaQuery.prototype.onmouseout=function(e) { e=(e)?e:((event)?event:null); if (!e.target) e.target=e.srcElement; if (e.target.id==this.kaMap.domObj.id) { this.bMouseDown=false; this.startx=this.endx=this.starty=this.endy=null; this.drawZoomBox(); return kaTool.prototype.onmouseout.apply(this, [e]); } }; kaQuery.prototype.onmousemove=function(e) { e=(e)?e:((event)?event:null); if (!this.bMouseDown) { return false; } var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); if (this.type==KAMAP_RECT_QUERY) { var aPixPos=this.adjustPixPosition( x, y ); this.endx=-aPixPos[0]; this.endy=-aPixPos[1]; this.drawZoomBox(); } return false; } ; kaQuery.prototype.onmousedown=function(e) { e=(e)?e:((event)?event:null); if (e.button==2) { return this.cancelEvent(e); } else { if (this.kaMap.isIE4) document.onkeydown=kaTool_redirect_onkeypress; document.onkeypress=kaTool_redirect_onkeypress; this.bMouseDown=true; var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); var aPixPos=this.adjustPixPosition( x,y ); this.startx=this.endx=-aPixPos[0]; this.starty=this.endy=-aPixPos[1]; this.drawZoomBox(); e.cancelBubble=true; e.returnValue=false; if (e.stopPropogation) e.stopPropogation(); if (e.preventDefault) e.preventDefault(); return false; } }; kaQuery.prototype.onmouseup=function(e) { e=(e)?e:((event)?event:null); var type=KAMAP_POINT_QUERY; var start=this.kaMap.pixToGeo( -this.startx, -this.starty ); var coords=start; if (this.startx!=this.endx&&this.starty!=this.endy) { type=KAMAP_RECT_QUERY; coords=start.concat(this.kaMap.pixToGeo( -this.endx, -this.endy )); if(coords[2] < coords[0]) { var minx=coords[2]; var maxx=coords[0]; coords[0]=minx; coords[2]=maxx; } if(coords[1] < coords[3]){ var miny=coords[1]; var maxy=coords[3]; coords[3]=miny; coords[1]=maxy; } } this.kaMap.triggerEvent(KAMAP_QUERY, type, coords); this.startx=this.endx=this.starty=this.endy=null; this.drawZoomBox(); return false; }; var myKaMap=myKaNavigator=myKaQuery=myScalebar=null;var queryParams=null; function parseQueryString() { queryParams={}; var s=window.location.search; if (s!='') { s=s.substring( 1 ); var p=s.split('&'); for (var i=0;i<p.length;i++) { var q=p[i].split('='); queryParams[q[0]]=q[1]; } }} function getQueryParam(p) { if (!queryParams) { parseQueryString(); } if (queryParams[p]) { return queryParams[p]; } else { return ''; }} function myOnLoad() { initDHTMLAPI(); window.onresize=drawPage; myKaMap=new kaMap( 'viewport' ); var szMap=getQueryParam('map'); var szExtents=getQueryParam('extents'); var szCPS=getQueryParam('cps'); var myKaKeymap=new kaKeymap( myKaMap, 'keymap' ); myKaMap.registerForEvent( KAMAP_INITIALIZED, null, myInitialized ); myKaMap.registerForEvent( KAMAP_MAP_INITIALIZED, null, myMapInitialized ); myKaMap.registerForEvent( KAMAP_SCALE_CHANGED, null, myScaleChanged ); myKaMap.registerForEvent( KAMAP_EXTENTS_CHANGED, null, myExtentChanged ); myKaMap.registerForEvent( KAMAP_LAYERS_CHANGED, null, myLayersChanged ); myKaMap.registerForEvent( KAMAP_QUERY, null, myQuery ); myKaMap.registerForEvent( KAMAP_MAP_CLICKED, null, myMapClicked ); myKaNavigator=new kaNavigator( myKaMap ); myKaNavigator.activate(); myKaQuery=new kaQuery( myKaMap, KAMAP_RECT_QUERY ); myKaRubberZoom=new kaRubberZoom( myKaMap ); myScalebar=new ScaleBar(1); myScalebar.divisions=3; myScalebar.subdivisions=2; myScalebar.minWidth=150; myScalebar.maxWidth=250; myScalebar.place('scalebar'); drawPage(); myKaMap.initialize( szMap, szExtents, szCPS );} function myInitialized() { } function myMapInitialized( eventID, mapName ) { var aMaps=myKaMap.getMaps(); var oSelect=document.forms[0].maps; if (oSelect) { var j=0; var opt=new Option( 'select a map', '', true, true ); oSelect[j++]=opt; for(var i in aMaps) { oSelect[j++]=new Option(aMaps[i].title,aMaps[i].name,false,false); } var oSelect=document.forms[0].maps; if (oSelect.options[oSelect.selectedIndex].value !=mapName) { for(var i=0; i < oSelect.options.length; i++ ) { if (oSelect.options[i].value==mapName) { oSelect.options[i].selected=true; break; } } } } var currentMap=myKaMap.getCurrentMap(); var scales=currentMap.getScales(); var currentScale=myKaMap.getCurrentScale(); var iWidth=6; var iMaxHeight=10; var iMinHeight=20; var zoomer="<span style='width:"+(scales.length*iWidth)+"'>"; for(var i=0; i<scales.length; i++) { var zoomTo='mySetScale(' +scales[i]+')'; var iHeight=iMaxHeight - parseInt((iMaxHeight - iMinHeight) *i/scales.length); var zoomImg=''; if (scales[i]==currentScale) { zoomImg='<img src="images/pixel-red.png" width="' + iWidth + '" height="' + iHeight + 'px" border="0" onclick="'+zoomTo+'" title="Zoom to 1:'+scales[i]+'" alt="Zoom to 1:'+scales[i]+'" id="img'+scales[i]+'"/>'; } else { zoomImg='<img src="images/pixel-blue.png" width="' + iWidth + '" height="' + iHeight + 'px" border="0" onclick="'+zoomTo+'" title="Zoom to 1:'+scales[i]+'" alt="Zoom to 1:'+scales[i]+'" id="img'+scales[i]+'"/>'; } zoomer=zoomer + zoomImg ; } zoomer=zoomer+"</span>"; getRawObject('zoomer').innerHTML=zoomer; switchMode('toolPan'); var layers=getQueryParam('layers'); if (layers !='') { var map=myKaMap.getCurrentMap(); var allLayers=map.getAllLayers(); for (var i=0; i<allLayers.length; i++) { allLayers[i].setVisibility(false); } aLayers=layers.split(','); for (var i=0;i<aLayers.length; i++) { map.setLayerVisibility (unescape(aLayers[i]), true); } }} function myExtentChanged( eventID, extents ) { updateLinkToView();} function myLayersChanged(eventID, map) { updateLinkToView();} function updateLinkToView() { var url=window.location.protocol+'/'+'/'+window.location.host +':'+window.location.port+'/'+window.location.pathname+'?'; var extents=myKaMap.getGeoExtents(); var cx=(extents[2] + extents[0])/2; var cy=(extents[3] + extents[1])/2; var cpsURL='cps='+cx+','+cy+','+myKaMap.getCurrentScale(); var mapURL='map=' + myKaMap.currentMap; var theMap=myKaMap.getCurrentMap(); var aLayers=theMap.getLayers(); var layersURL='layers='; var sep=''; for (var i=0;i<aLayers.length;i++) { layersURL +=sep + aLayers[i].name; sep=','; } var link=document.getElementById('linkToView'); link.href=url + mapURL + '&' + cpsURL + '&' + layersURL;} function myScaleChanged( eventID, scale ) { var currentMap=myKaMap.getCurrentMap(); var scales=currentMap.getScales(); for(var i in scales){ var imgString='img'+scales[i]; var scaleString='img'+scale; if(getRawObject(imgString)) { if(imgString==scaleString) { getRawObject(scaleString).src='images/pixel-red.png'; } else { getRawObject(imgString).src='images/pixel-blue.png'; } } } myScalebar.update(scale); if (scale >=1000000) { scale=scale / 1000000; scale=scale + " Million"; } var outString='current scale 1:'+ scale; getRawObject('scale').innerHTML=outString;} function mySetScale( scale ) { myKaMap.zoomToScale( scale );} function mySetMap( name ) { myKaMap.selectMap( name );} function myQuery( eventID, queryType, coords ) { var szLayers=''; var layers=myKaMap.getCurrentMap().getQueryableLayers(); if(layers.length==0) { alert("No queryable layers at this scale and extent"); return; } for (var i=0;i<layers.length;i++) { szLayers=szLayers + "," + layers[i].name; } var extent=myKaMap.getGeoExtents(); var scale=myKaMap.getCurrentScale(); var cMap=myKaMap.getCurrentMap().name; var params='map='+cMap+'&q_type='+queryType+'&scale='+scale+'&groups='+szLayers+'&coords='+coords+'&extent='+extent[0]+'|'+extent[1]+'|'+extent[2]+'|'+extent[3]; WOOpenWin( 'Query', 'map_query.php?'+params, 'resizable=yes,scrollbars=yes,width=600,height=400' ); } function myMapClicked( eventID, coords ) { } function myZoomIn() { myKaMap.zoomIn();} function myZoomOut() { myKaMap.zoomOut();} function myPrint() { var szLayers=''; var layers=myKaMap.getCurrentMap().getLayers(); for (var i=0;i<layers.length;i++) { szLayers=szLayers + "," + layers[i].name; } var extent=myKaMap.getGeoExtents(); var scale=myKaMap.getCurrentScale(); var cMap=myKaMap.getCurrentMap().name; var img_width='600'; var params='map='+cMap+'&scale='+scale+'&img_width='+img_width+'&groups='+szLayers+'&extent='+extent[0]+'|'+extent[1]+'|'+extent[2]+'|'+extent[3]; WOOpenWin( 'Print', 'tools/print/print_map.php?'+params, 'resizable=yes,scrollbars=yes,width=600,height=400' ); } function toggleToolbar(obj) { if (obj.style.backgroundImage=='') { obj.isOpen=true; } if (obj.isOpen) { obj.title='show toolbar'; obj.style.backgroundImage='url(images/arrow_down.png)'; var bValue=getObjectTop(obj);; var d=getObject('toolbar'); d.display="none"; obj.isOpen=false; obj.style.top="3px"; } else { obj.title='hide toolbar'; obj.style.backgroundImage='url(images/arrow_up.png)'; var d=getObject('toolbar'); d.display="block"; obj.isOpen=true; var h=getObjectHeight('toolbar'); obj.style.top=(h + 3) + "px"; }} function toggleKeymap(obj) { if (obj.style.backgroundImage=='') { obj.isOpen=true; } if (obj.isOpen) { obj.title='show keymap'; obj.style.backgroundImage='url(images/arrow_left.png)'; var bValue=getObjectTop(obj);; var d=getObject('keymap'); d.display="none"; obj.isOpen=false; } else { obj.title='hide keymap'; obj.style.backgroundImage='url(images/arrow_right.png)'; var d=getObject('keymap'); d.display="block"; obj.isOpen=true; }} function toggleReference(obj) { if (obj.style.backgroundImage=='') { obj.isOpen=true; } if (obj.isOpen) { obj.title='show reference'; obj.style.backgroundImage='url(images/arrow_up.png)'; var d=getObject('reference'); d.display='none'; obj.isOpen=false; obj.style.bottom='3px'; } else { obj.title='hide reference'; obj.style.backgroundImage='url(images/arrow_down.png)'; var d=getObject('reference'); d.display='block'; obj.isOpen=true; obj.style.bottom=(getObjectHeight('reference') + 3) + 'px'; }} function dialogToggle( href, szObj) { var obj=getObject(szObj); if (obj.display=='none') { obj.display='block'; href.childNodes[0].src='images/dialog_shut.png'; } else { obj.display='none'; href.childNodes[0].src='images/dialog_open.png'; }} function drawPage() { var browserWidth=getInsideWindowWidth(); var browserHeight=getInsideWindowHeight(); var viewport=getRawObject('viewport'); if(myKaMap.isIE4) { viewport.style.width=(browserWidth -2) + "px"; } else { viewport.style.width=browserWidth + "px"; } if(myKaMap.isIE4) { viewport.style.height=(browserHeight -2) + "px"; } else { viewport.style.height=browserHeight + "px"; } myKaMap.resize();} function getFullExtent() { var exStr=myKaMap.getCurrentMap().defaultExtents.toString(); var ex=myKaMap.getCurrentMap().defaultExtents; myKaMap.zoomToExtents(ex[0],ex[1],ex[2],ex[3]);} function switchMode(id) { if (id=='toolQuery') { myKaQuery.activate(); getRawObject('toolQuery').style.backgroundImage='url(images/tool_query_2.png)'; getRawObject('toolPan').style.backgroundImage='url(images/tool_pan_1.png)'; getRawObject('toolZoomRubber').style.backgroundImage='url(images/tool_zoomin_rubber_1.png)'; } else if (id=='toolPan') { myKaNavigator.activate(); getRawObject('toolQuery').style.backgroundImage='url(images/tool_query_1.png)'; getRawObject('toolPan').style.backgroundImage='url(images/tool_pan_2.png)'; getRawObject('toolZoomRubber').style.backgroundImage='url(images/tool_zoomin_rubber_1.png)'; } else if (id=='toolZoomRubber') { myKaRubberZoom.activate(); getRawObject('toolQuery').style.backgroundImage='url(images/tool_query_1.png)'; getRawObject('toolPan').style.backgroundImage='url(images/tool_pan_1.png)'; getRawObject('toolZoomRubber').style.backgroundImage='url(images/tool_zoomin_rubber_2.png)'; } else { myKaNavigator.activate(); }} function applyPNGFilter(o) { var t="images/a_pixel.gif"; if( o.src !=t ) { var s=o.src; o.src=t; o.runtimeStyle.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"',sizingMethod='scale')"; }} function WOFocusWin( nn ) { eval( "if( this."+name+") this."+name+".moveTo(50,50); this."+name+".focus();" );} function WOOpenWin( name, url, ctrl ) { eval( "this."+name+"=window.open('"+url+"','"+name+"','"+ctrl+"');" ); } function WinOpener() { this.openWin=WOOpenWin; this.focusWin=WOFocusWin;} function ScaleBar(scaleDenominator) { this.scaleDenominator=(scaleDenominator==null) ? 1 : scaleDenominator; this.displaySystem='metric'; this.minWidth=100; this.maxWidth=200; this.divisions=2; this.subdivisions=2; this.showMinorMeasures=false; this.abbreviateLabel=false; this.singleLine=false; this.resolution=72; this.align='center'; this.container=document.createElement('div'); this.container.className='sbWrapper'; this.labelContainer=document.createElement('div'); this.labelContainer.className='sbUnitsContainer'; this.labelContainer.style.position='absolute'; this.graphicsContainer=document.createElement('div'); this.graphicsContainer.style.position='absolute'; this.graphicsContainer.className='sbGraphicsContainer'; this.numbersContainer=document.createElement('div'); this.numbersContainer.style.position='absolute'; this.numbersContainer.className='sbNumbersContainer'; var markerMajor=document.createElement('div'); markerMajor.className='sbMarkerMajor'; this.graphicsContainer.appendChild(markerMajor); var markerMinor=document.createElement('div'); markerMinor.className='sbMarkerMinor'; this.graphicsContainer.appendChild(markerMinor); var barPiece=document.createElement('div'); barPiece.className='sbBar'; this.graphicsContainer.appendChild(barPiece); var barPieceAlt=document.createElement('div'); barPieceAlt.className='sbBarAlt'; this.graphicsContainer.appendChild(barPieceAlt); } ScaleBar.prototype.update=function(scaleDenominator) { if(scaleDenominator !=null) { this.scaleDenominator=scaleDenominator; }; function HandsomeNumber(smallUglyNumber, bigUglyNumber, sigFigs) { var sigFigs=(sigFigs==null) ? 10 : sigFigs; var bestScore=Number.POSITIVE_INFINITY; var bestTieBreaker=Number.POSITIVE_INFINITY; var handsomeValue=smallUglyNumber; var handsomeNumDec=3; for(var halvingExp=0; halvingExp < 3; ++halvingExp) { var comelyMultiplicand=Math.pow(2, (-1 * halvingExp)); var maxTensExp=Math.floor(Math.log(bigUglyNumber / comelyMultiplicand) / Math.LN10); for(var tensExp=maxTensExp; tensExp > (maxTensExp - sigFigs + 1); --tensExp) { var numDec=Math.max(halvingExp - tensExp, 0); var testMultiplicand=comelyMultiplicand * Math.pow(10, tensExp); if((testMultiplicand * Math.floor(bigUglyNumber / testMultiplicand)) >=smallUglyNumber) { if(smallUglyNumber % testMultiplicand==0) { var testMultiplier=smallUglyNumber / testMultiplicand; } else { var testMultiplier=Math.floor(smallUglyNumber / testMultiplicand) + 1; } var testScore=testMultiplier + (2 * halvingExp); var testTieBreaker=(tensExp < 0) ? (Math.abs(tensExp) + 1) : tensExp; if((testScore < bestScore) || ((testScore==bestScore) && (testTieBreaker < bestTieBreaker))) { bestScore=testScore; bestTieBreaker=testTieBreaker; handsomeValue=(testMultiplicand * testMultiplier).toFixed(numDec); handsomeNumDec=numDec; } } } } this.value=handsomeValue; this.score=bestScore; this.tieBreaker=bestTieBreaker; this.numDec=handsomeNumDec; }; HandsomeNumber.prototype.toString=function() { return this.value.toString(); }; HandsomeNumber.prototype.valueOf=function() { return this.value; }; function styleValue(aSelector, styleKey) { var aValue=0; if(document.styleSheets) { for(var sheetIndex=document.styleSheets.length - 1; sheetIndex >=0; --sheetIndex) { var aSheet=document.styleSheets[sheetIndex]; if(!aSheet.disabled) { var allRules; if(typeof(aSheet.cssRules)=='undefined') { if(typeof(aSheet.rules)=='undefined') { return 0; } else { allRules=aSheet.rules; } } else { allRules=aSheet.cssRules; } for(var ruleIndex=0; ruleIndex < allRules.length; ++ruleIndex) { var aRule=allRules[ruleIndex]; if(aRule.selectorText && (aRule.selectorText.toLowerCase()==aSelector.toLowerCase())) { if(aRule.style[styleKey] !='') { aValue=parseInt(aRule.style[styleKey]); } } } } } } return aValue ? aValue : 0; }; function formatNumber(aNumber, numDecimals) { numDecimals=(numDecimals) ? numDecimals : 0; var formattedInteger='' + Math.round(aNumber); var thousandsPattern=/(-?[0-9]+)([0-9]{3})/; while(thousandsPattern.test(formattedInteger)) { formattedInteger=formattedInteger.replace(thousandsPattern, '$1,$2'); } if(numDecimals > 0) { var formattedDecimal=Math.floor(Math.pow(10, numDecimals) * (aNumber - Math.round(aNumber))); if(formattedDecimal==0) { return formattedInteger; } else { return formattedInteger + '.' + formattedDecimal; } } else { return formattedInteger; } }; this.container.title='scale 1:' + formatNumber(this.scaleDenominator); var measurementProperties=new Object(); measurementProperties.english={ units: ['miles', 'feet', 'inches'], abbr: ['mi', 'ft', 'in'], inches: [63360, 12, 1] }; measurementProperties.metric={ units: ['kilometers', 'meters', 'centimeters'], abbr: ['km', 'm', 'cm'], inches: [39370.07874, 39.370079, 0.393701] }; var comparisonArray=new Array(); for(var unitIndex=0; unitIndex < measurementProperties[this.displaySystem].units.length; ++unitIndex) { comparisonArray[unitIndex]=new Object(); var pixelsPerDisplayUnit=this.resolution * measurementProperties[this.displaySystem].inches[unitIndex] / this.scaleDenominator; var minSDDisplayLength=(this.minWidth / pixelsPerDisplayUnit) / (this.divisions * this.subdivisions); var maxSDDisplayLength=(this.maxWidth / pixelsPerDisplayUnit) / (this.divisions * this.subdivisions); for(var valueIndex=0; valueIndex < (this.divisions * this.subdivisions); ++valueIndex) { var minNumber=minSDDisplayLength * (valueIndex + 1); var maxNumber=maxSDDisplayLength * (valueIndex + 1); var niceNumber=new HandsomeNumber(minNumber, maxNumber); comparisonArray[unitIndex][valueIndex]={value: (niceNumber.value / (valueIndex + 1)), score: 0, tieBreaker: 0, numDec: 0, displayed: 0}; for(var valueIndex2=0; valueIndex2 < (this.divisions * this.subdivisions); ++valueIndex2) { displayedValuePosition=niceNumber.value * (valueIndex2 + 1) / (valueIndex + 1); niceNumber2=new HandsomeNumber(displayedValuePosition, displayedValuePosition); var isMajorMeasurement=((valueIndex2 + 1) % this.subdivisions==0); var isLastMeasurement=((valueIndex2 + 1)==(this.divisions * this.subdivisions)); if((this.singleLine && isLastMeasurement) || (!this.singleLine && (isMajorMeasurement || this.showMinorMeasures))) { comparisonArray[unitIndex][valueIndex].score +=niceNumber2.score; comparisonArray[unitIndex][valueIndex].tieBreaker +=niceNumber2.tieBreaker; comparisonArray[unitIndex][valueIndex].numDec=Math.max(comparisonArray[unitIndex][valueIndex].numDec, niceNumber2.numDec); comparisonArray[unitIndex][valueIndex].displayed +=1; } else { comparisonArray[unitIndex][valueIndex].score +=niceNumber2.score / this.subdivisions; comparisonArray[unitIndex][valueIndex].tieBreaker +=niceNumber2.tieBreaker / this.subdivisions; } } var scoreAdjustment=(unitIndex + 1) * comparisonArray[unitIndex][valueIndex].tieBreaker / comparisonArray[unitIndex][valueIndex].displayed; comparisonArray[unitIndex][valueIndex].score *=scoreAdjustment; } } var subdivisionDisplayLength=null; var displayUnits=null; var displayUnitsAbbr=null; var subdivisionPixelLength=null; var bestScore=Number.POSITIVE_INFINITY; var bestTieBreaker=Number.POSITIVE_INFINITY; var numDec=0; for(var unitIndex=0; unitIndex < comparisonArray.length; ++unitIndex) { for(valueIndex in comparisonArray[unitIndex]) { if((comparisonArray[unitIndex][valueIndex].score < bestScore) || ((comparisonArray[unitIndex][valueIndex].score==bestScore) && (comparisonArray[unitIndex][valueIndex].tieBreaker < bestTieBreaker))) { bestScore=comparisonArray[unitIndex][valueIndex].score; bestTieBreaker=comparisonArray[unitIndex][valueIndex].tieBreaker; subdivisionDisplayLength=comparisonArray[unitIndex][valueIndex].value; numDec=comparisonArray[unitIndex][valueIndex].numDec; displayUnits=measurementProperties[this.displaySystem].units[unitIndex]; displayUnitsAbbr=measurementProperties[this.displaySystem].abbr[unitIndex]; pixelsPerDisplayUnit=this.resolution * measurementProperties[this.displaySystem].inches[unitIndex] / this.scaleDenominator; subdivisionPixelLength=pixelsPerDisplayUnit * subdivisionDisplayLength; } } } var xOffsetMarkerMajor=(styleValue('.sbMarkerMajor', 'borderLeftWidth') + styleValue('.sbMarkerMajor', 'width') + styleValue('.sbMarkerMajor', 'borderRightWidth')) / 2; var xOffsetMarkerMinor=(styleValue('.sbMarkerMinor', 'borderLeftWidth') + styleValue('.sbMarkerMinor', 'width') + styleValue('.sbMarkerMinor', 'borderRightWidth')) / 2; var xOffsetBar=(styleValue('.sbBar', 'borderLeftWidth') + styleValue('.sbBar', 'borderRightWidth')) / 2; var xOffsetBarAlt=(styleValue('.sbBarAlt', 'borderLeftWidth') + styleValue('.sbBarAlt', 'borderRightWidth')) / 2; if(!document.styleSheets) { xOffsetMarkerMajor=0.5; xOffsetMarkerMinor=0.5; } while(this.labelContainer.hasChildNodes()) { this.labelContainer.removeChild(this.labelContainer.firstChild); } while(this.graphicsContainer.hasChildNodes()) { this.graphicsContainer.removeChild(this.graphicsContainer.firstChild); } while(this.numbersContainer.hasChildNodes()) { this.numbersContainer.removeChild(this.numbersContainer.firstChild); } var aMarker, aBarPiece, numbersBox, xOffset; var alignmentOffset={ left: 0, center: (-1 * this.divisions * this.subdivisions * subdivisionPixelLength / 2), right: (-1 * this.divisions * this.subdivisions * subdivisionPixelLength) }; var xPosition=0 + alignmentOffset[this.align]; var markerMeasure=0; for(var divisionIndex=0; divisionIndex < this.divisions; ++divisionIndex) { xPosition=divisionIndex * this.subdivisions * subdivisionPixelLength; xPosition +=alignmentOffset[this.align]; markerMeasure=(divisionIndex==0) ? 0 : ((divisionIndex * this.subdivisions) * subdivisionDisplayLength).toFixed(numDec); aMarker=document.createElement('div'); aMarker.className='sbMarkerMajor'; aMarker.style.position='absolute'; aMarker.style.overflow='hidden'; aMarker.style.left=Math.round(xPosition - xOffsetMarkerMajor) + 'px'; aMarker.appendChild(document.createTextNode(' ')); this.graphicsContainer.appendChild(aMarker); if(!this.singleLine) { numbersBox=document.createElement('div'); numbersBox.className='sbNumbersBox'; numbersBox.style.position='absolute'; numbersBox.style.overflow='hidden'; numbersBox.style.textAlign='center'; if(this.showMinorMeasures) { numbersBox.style.width=Math.round(subdivisionPixelLength * 2) + 'px'; numbersBox.style.left=Math.round(xPosition - subdivisionPixelLength) + 'px'; } else { numbersBox.style.width=Math.round(this.subdivisions * subdivisionPixelLength * 2) + 'px'; numbersBox.style.left=Math.round(xPosition - (this.subdivisions * subdivisionPixelLength)) + 'px'; } numbersBox.appendChild(document.createTextNode(markerMeasure)); this.numbersContainer.appendChild(numbersBox); } for(var subdivisionIndex=0; subdivisionIndex < this.subdivisions; ++subdivisionIndex) { aBarPiece=document.createElement('div'); aBarPiece.style.position='absolute'; aBarPiece.style.overflow='hidden'; aBarPiece.style.width=Math.round(subdivisionPixelLength) + 'px'; if((subdivisionIndex % 2)==0) { aBarPiece.className='sbBar'; aBarPiece.style.left=Math.round(xPosition - xOffsetBar) + 'px'; } else { aBarPiece.className='sbBarAlt'; aBarPiece.style.left=Math.round(xPosition - xOffsetBarAlt) + 'px'; } aBarPiece.appendChild(document.createTextNode(' ')); this.graphicsContainer.appendChild(aBarPiece); if(subdivisionIndex < (this.subdivisions - 1)) { xPosition=((divisionIndex * this.subdivisions) + (subdivisionIndex + 1)) * subdivisionPixelLength; xPosition +=alignmentOffset[this.align]; markerMeasure=(divisionIndex * this.subdivisions + subdivisionIndex + 1) * subdivisionDisplayLength; aMarker=document.createElement('div'); aMarker.className='sbMarkerMinor'; aMarker.style.position='absolute'; aMarker.style.overflow='hidden'; aMarker.style.left=Math.round(xPosition - xOffsetMarkerMinor) + 'px'; aMarker.appendChild(document.createTextNode(' ')); this.graphicsContainer.appendChild(aMarker); if(this.showMinorMeasures && !this.singleLine) { numbersBox=document.createElement('div'); numbersBox.className='sbNumbersBox'; numbersBox.style.position='absolute'; numbersBox.style.overflow='hidden'; numbersBox.style.textAlign='center'; numbersBox.style.width=Math.round(subdivisionPixelLength * 2) + 'px'; numbersBox.style.left=Math.round(xPosition - subdivisionPixelLength) + 'px'; numbersBox.appendChild(document.createTextNode(markerMeasure)); this.numbersContainer.appendChild(numbersBox); } } } } xPosition=(this.divisions * this.subdivisions) * subdivisionPixelLength; xPosition +=alignmentOffset[this.align]; markerMeasure=((this.divisions * this.subdivisions) * subdivisionDisplayLength).toFixed(numDec); aMarker=document.createElement('div'); aMarker.className='sbMarkerMajor'; aMarker.style.position='absolute'; aMarker.style.overflow='hidden'; aMarker.style.left=Math.round(xPosition - xOffsetMarkerMajor) + 'px'; aMarker.appendChild(document.createTextNode(' ')); this.graphicsContainer.appendChild(aMarker); if(!this.singleLine) { numbersBox=document.createElement('div'); numbersBox.className='sbNumbersBox'; numbersBox.style.position='absolute'; numbersBox.style.overflow='hidden'; numbersBox.style.textAlign='center'; if(this.showMinorMeasures) { numbersBox.style.width=Math.round(subdivisionPixelLength * 2) + 'px'; numbersBox.style.left=Math.round(xPosition - subdivisionPixelLength) + 'px'; } else { numbersBox.style.width=Math.round(this.subdivisions * subdivisionPixelLength * 2) + 'px'; numbersBox.style.left=Math.round(xPosition - (this.subdivisions * subdivisionPixelLength)) + 'px'; } numbersBox.appendChild(document.createTextNode(markerMeasure)); this.numbersContainer.appendChild(numbersBox); } var labelBox=document.createElement('div'); labelBox.style.position='absolute'; var labelText; if(this.singleLine) { labelText=markerMeasure; labelBox.className='sbLabelBoxSingleLine'; labelBox.style.top='-0.6em'; labelBox.style.left=(xPosition + 10) + 'px'; } else { labelText=''; labelBox.className='sbLabelBox'; labelBox.style.textAlign='center'; labelBox.style.width=Math.round(this.divisions * this.subdivisions * subdivisionPixelLength) + 'px'; labelBox.style.left=Math.round(alignmentOffset[this.align]) + 'px'; labelBox.style.overflow='hidden'; } if(this.abbreviateLabel) { labelText +=' ' + displayUnitsAbbr; } else { labelText +=' ' + displayUnits; } labelBox.appendChild(document.createTextNode(labelText)); this.labelContainer.appendChild(labelBox); if(!document.styleSheets) { var defaultStyle=document.createElement('style'); defaultStyle.type='text/css'; var styleText='.sbBar {top: 0px; background: #666666; height: 1px; border: 0;}'; styleText +='.sbBarAlt {top: 0px; background: #666666; height: 1px; border: 0;}'; styleText +='.sbMarkerMajor {height: 7px; width: 1px; background: #666666; border: 0;}'; styleText +='.sbMarkerMinor {height: 5px; width: 1px; background: #666666; border: 0;}'; styleText +='.sbLabelBox {top: -16px;}'; styleText +='.sbNumbersBox {top: 7px;}'; defaultStyle.appendChild(document.createTextNode(styleText)); document.getElementsByTagName('head').item(0).appendChild(defaultStyle); } this.container.appendChild(this.graphicsContainer); this.container.appendChild(this.labelContainer); this.container.appendChild(this.numbersContainer); }; ScaleBar.prototype.place=function(elementId) { if(elementId==null) { document.body.appendChild(this.container); } else { var anElement=document.getElementById(elementId); if(anElement !=null) { anElement.appendChild(this.container); } } this.update(); };  function kaRubberZoom( oKaMap) { kaTool.apply( this, [oKaMap] ); this.name='kaRubberZoom'; this.cursor='help'; this.domObj=document.createElement( 'div' ); this.domObj.style.position='absolute'; this.domObj.style.top='0px'; this.domObj.style.left='0px'; this.domObj.style.width='1px'; this.domObj.style.height='1px'; this.domObj.style.zIndex=100; this.domObj.style.visibility='hidden'; this.domObj.style.border='1px solid red'; this.domObj.style.backgroundColor='white'; this.domObj.style.opacity=0.50; this.domObj.style.mozOpacity=0.50; this.domObj.style.filter='Alpha(opacity=50)'; this.kaMap.theInsideLayer.appendChild( this.domObj ); this.startx=null; this.starty=null; this.endx=null; this.endy=null; this.bMouseDown=false; for (var p in kaTool.prototype) { if (!kaRubberZoom.prototype[p]) kaRubberZoom.prototype[p]=kaTool.prototype[p]; } }; kaRubberZoom.prototype.drawZoomBox=function() { if (this.startx==null || this.starty==null || this.endx==null || this.endy==null ) { this.domObj.style.visibility='hidden'; this.domObj.style.top='0px'; this.domObj.style.left='0px'; this.domObj.style.width='1px'; this.domObj.style.height='1px'; return; } this.domObj.style.visibility='visible'; if (this.endx < this.startx) { this.domObj.style.left=(this.endx - this.kaMap.xOrigin) + 'px'; this.domObj.style.width=(this.startx - this.endx) + "px"; } else { this.domObj.style.left=(this.startx - this.kaMap.xOrigin) + 'px'; this.domObj.style.width=(this.endx - this.startx) + "px"; } if (this.endy < this.starty) { this.domObj.style.top=(this.endy - this.kaMap.yOrigin) + 'px'; this.domObj.style.height=(this.starty - this.endy) + "px"; } else { this.domObj.style.top=(this.starty - this.kaMap.yOrigin) + 'px'; this.domObj.style.height=(this.endy - this.starty) + "px"; } }; kaRubberZoom.prototype.onmouseout=function(e) { e=(e)?e:((event)?event:null); if (!e.target) e.target=e.srcElement; if (e.target.id==this.kaMap.domObj.id) { this.bMouseDown=false; this.startx=this.endx=this.starty=this.endy=null; this.drawZoomBox(); return kaTool.prototype.onmouseout.apply(this, [e]); } }; kaRubberZoom.prototype.onmousemove=function(e) { e=(e)?e:((event)?event:null); if (!this.bMouseDown) { return false; } var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); var aPixPos=this.adjustPixPosition( x, y ); this.endx=-aPixPos[0]; this.endy=-aPixPos[1]; this.drawZoomBox(); return false; } ; kaRubberZoom.prototype.onmousedown=function(e) { e=(e)?e:((event)?event:null); if (e.button==2) { return this.cancelEvent(e); } else { if (this.kaMap.isIE4) document.onkeydown=kaTool_redirect_onkeypress; document.onkeypress=kaTool_redirect_onkeypress; this.bMouseDown=true; var x=e.pageX || (e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)); var y=e.pageY || (e.clientY + (document.documentElement.scrollTop || document.body.scrollTop)); var aPixPos=this.adjustPixPosition( x,y ); this.startx=this.endx=-aPixPos[0]; this.starty=this.endy=-aPixPos[1]; this.drawZoomBox(); e.cancelBubble=true; e.returnValue=false; if (e.stopPropogation) e.stopPropogation(); if (e.preventDefault) e.preventDefault(); return false; } }; kaRubberZoom.prototype.onmouseup=function(e) { e=(e)?e:((event)?event:null); var type=KAMAP_POINT_QUERY; var start=this.kaMap.pixToGeo( -this.startx, -this.starty ); var coords=start; if (this.startx!=this.endx&&this.starty!=this.endy) { type=KAMAP_RECT_QUERY; coords=start.concat(this.kaMap.pixToGeo( -this.endx, -this.endy )); if(coords[2] < coords[0]) { var minx=coords[2]; var maxx=coords[0]; coords[0]=minx; coords[2]=maxx; } if(coords[1] < coords[3]){ var miny=coords[1]; var maxy=coords[3]; coords[3]=miny; coords[1]=maxy; } } this.startx=this.endx=this.starty=this.endy=null; this.drawZoomBox(); if(coords[2] && coords[0] && coords[3] && coords[1]){ this.kaMap.zoomToExtents(coords[0],coords[1],coords[2],coords[3] ); } else if (coords[0] && coords[1]){ this.kaMap.zoomIn(); this.kaMap.zoomTo(coords[0],coords[1]); } return false; };