 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.tileIDX=0; this.aObjects=[]; this.aCanvases=[]; this.layersHidden=false; this.aTools=[]; this.aInfoTools=[]; 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 ) { if (obj==null) { for (var i=0; i<this.aObjects.length; i++) { obj=this.aObjects[i]; if (obj.canvas) { obj.canvas.removeChild(obj); } } this.aObjects=[]; return true; } else { for (var i=0; i<this.aObjects.length; i++) { if (this.aObjects[i]==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.removeAllObjects=function(canvas) { for (var i=0; i<this.aObjects.length; i++) { obj=this.aObjects[i]; if (obj.canvas && obj.canvas==canvas) { obj.canvas.removeChild( obj ); obj.canvas=null; this.aObjects.splice(i--,1); } } return true;}; 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.theInsideLayer.style.top=(safeParseInt(this.theInsideLayer.style.top) + (newViewportHeight - viewportHeight)/2)+"px"; this.theInsideLayer.style.left=(safeParseInt(this.theInsideLayer.style.top) + (newViewportWidth - viewportWidth)/2)+"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 ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].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 ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].onmousemove(e); } }}; kaMap_onmousedown=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmousedown( e ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].onmousedown(e); } }}; kaMap_onmouseup=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseup( e ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].onmouseup(e); } }}; kaMap_onmouseover=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseover( e ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].onmouseover(e); } }}; kaMap_onmouseout=function( e ) { if (this.kaMap.currentTool) { this.kaMap.currentTool.onmouseout( e ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].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 ); } if (this.kaMap.aInfoTools.length > 0) { for (var i=0; i<this.kaMap.aInfoTools.length; i++) { this.kaMap.aInfoTools[i].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 (toolObj.isInfoTool()) { this.aInfoTools.push(toolObj); } else { if (this.currentTool) { this.currentTool.deactivate(); } this.currentTool=toolObj; if (this.theInsideLayer) { this.setCursor(this.currentTool.cursor); } }}; kaMap.prototype.deactivateTool=function( toolObj ) { if (toolObj.isInfoTool()) { for (var i=0; i<this.aInfoTools.length; i++) { if (this.aInfoTools[i]==toolObj) { this.aInfoTools.splice(i,1); break; } } } else { 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 src; 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, ''); 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='?'; var idx=this._map.kaMap.tileIDX; if (this._map.kaMap.tileURL[idx].indexOf('?') !=-1) { if (this._map.kaMap.tileURL[idx].slice(-1) !='&') { q='&'; } else { q=''; } } else { var src=this._map.kaMap.tileURL[idx] + 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; } idx++; if(idx==this._map.kaMap.tileURL.length) this._map.kaMap.tileIDX=0; else this._map.kaMap.tileIDX=idx; }}; _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; }}; var kaCurrentTool=null; function kaTool( oKaMap ) { this.kaMap=oKaMap; this.name='kaTool'; this.bInfoTool=false; this.wheelPlus=new Array(oKaMap, oKaMap.zoomOut, null); this.wheelMinus=new Array(oKaMap, oKaMap.zoomIn, null); this.kaMap.registerTool( this ); }; kaTool.prototype.isInfoTool=function() { return this.bInfoTool; }; 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.wheelMinus; else wheelSet=this.wheelPlus; 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 a=this.adjustPixPosition( px,py ); var p=this.kaMap.pixToGeo( a[0],a[1] ); gDblClickTimer=null; 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; var KAMAP_MOUSE_STOPPED=2; function kaQuery( oKaMap, type ) { kaTool.apply( this, [oKaMap] ); this.type=type; if(this.type==KAMAP_MOUSE_STOPPED){ this.bInfoTool=true; if(arguments.length==3){ this.delay=arguments[2]; } else { alert("Incorrect nb of arguments for instance kaQuery. Delay will be set by default to 500ms"); this.delay=500; } } this.name='kaQuery'; this.cursor='help'; this.startx=null; this.starty=null; this.endx=null; this.endy=null; this.bMouseDown=false; this.coords=new Array(); this.mouseStopped=false; this.chrono=null; 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=50; 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 ); 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.onmousemove=function(e) { e=(e)?e:((event)?event:null); if(this.type !=KAMAP_MOUSE_STOPPED){ 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 adjCoords=this.adjustPixPosition( x, y ); if(this.type==KAMAP_MOUSE_STOPPED){ var p=this.kaMap.pixToGeo(adjCoords[0], adjCoords[1]); this.coords[0]=p[0]; this.coords[1]=p[1]; if(this.chrono !=null) clearTimeout(this.chrono); var t=this; if(this.mouseStopped==false){ this.chrono=setTimeout(function(){t.onmousestop()}, this.delay); } } if (this.type==KAMAP_RECT_QUERY) { this.endx=-adjCoords[0]; this.endy=-adjCoords[1]; this.drawZoomBox(); } return false;}; kaQuery.prototype.onmousestop=function(){ clearTimeout(this.chrono); this.mouseStopped=true; this.kaMap.triggerEvent(KAMAP_MOUSE_STOPPED, this.type, this.coords); this.mouseStopped=false; return;}; kaQuery.prototype.onmouseout=function(e) { e=(e)?e:((event)?event:null); clearTimeout(this.chrono); 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.onmousedown=function(e) { e=(e)?e:((event)?event:null); if(this.type !=KAMAP_MOUSE_STOPPED){ 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.stopPropagation) e.stopPropagation(); if (e.preventDefault) e.preventDefault(); return false; } } }; kaQuery.prototype.onmouseup=function(e) { e=(e)?e:((event)?event:null); if(this.type !=KAMAP_MOUSE_STOPPED){ 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(); winResizer(530); } return false; }; 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 blue'; 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;}; function kaToolTip( oKaMap ){ this.kaMap=oKaMap; this.image=null; this.domObj=null; this.viewport=this.kaMap.domObj; this.visible=false; this.init(); }; kaToolTip.prototype.init=function(){ this.domObj=document.createElement('div'); this.domObj.setAttribute('id', 'toolTip'); this.minZindex=1; this.coordX=null; this.coordY=null; this.viewport.appendChild(this.domObj); this.domObj.style.position='absolute'; this.move(); this.domObj.toolTip=this; this.domObj.style.zIndex=this.minZindex; this.setText('Wait a moment please!'); this.kaMap.registerForEvent( KAMAP_MAP_CLICKED, this, this.onclick ); this.kaMap.registerForEvent( KAMAP_EXTENTS_CHANGED, this, this.extentChanged ); }; kaToolTip.prototype.onclick=function(e){ e=(e)?e:((event)?event:null);this.move(); }; kaToolTip.prototype.setText=function(text){ this.domObj.innerHTML=text; }; kaToolTip.prototype.setTipImage=function(url,offsetX,offsetY){ offsetX=(offsetX)?offsetX:0; offsetY=(offsetX)?offsetY:0; image=document.createElement('img'); image.src=url; image.setAttribute('id', 'toolTipImage'); image.style.position='absolute'; image.style.zIndex=this.minZindex++; image.style.top='-200px'; image.style.left='-200px'; image.offsetX=offsetX; image.offsetY=offsetY; this.image=image; this.viewport.appendChild(image); }; kaToolTip.prototype.moveGeo=function(){ var x=parseInt(arguments[0]); var	y=parseInt(arguments[1]); var pixPos=this.kaMap.geoToPix(x,y); var nPixPos=this.kaMap.currentTool.adjustPixPosition( pixPos[0]*(-1), pixPos[1]*(-1) ); var newX=nPixPos[0]; var newY=nPixPos[1]; this.move(newX,newY);}; kaToolTip.prototype.move=function(){ var x=0; var y=0; var aPixPos=0; var geoPix=0; var noRecenter=false; if(arguments.length<2){ this.visible=false; this.domObj.style.top='-10000px'; this.domObj.style.left='-10000px'; aPixPos=this.kaMap.currentTool.adjustPixPosition( parseInt(x) , parseInt(y) ); var geoCoords=this.kaMap.pixToGeo( aPixPos[0],aPixPos[1]); this.coordX=geoCoords[0]; this.coordY=geoCoords[1]; if(this.image)this.image.style.top='-100000px'; if(this.image)this.image.style.left='-100000px'; } else { x=parseInt(arguments[0]); y=parseInt(arguments[1]); this.visible=true; aPixPos=this.kaMap.currentTool.adjustPixPosition( parseInt(x) , parseInt(y) ); var geoCoords=this.kaMap.pixToGeo( aPixPos[0],aPixPos[1]); this.coordX=geoCoords[0]; this.coordY=geoCoords[1]; this.domObj.style.top=y-10+'px'; this.domObj.style.left=x-(getObjectWidth(this.domObj)/2)+'px'; if(this.image)this.image.style.top=(y+this.image.offsetY)+'px'; if(this.image)this.image.style.left=(x+this.image.offsetX)+'px'; if((arguments[2])&&arguments[2]==true)noRecenter=true; if(!noRecenter)this.recenter(this.domObj); } }; kaToolTip.prototype.adjustPosition=function(x,y){ var ny=parseInt(this.domObj.style.top)+y;var nx=parseInt(this.domObj.style.left)+x; this.domObj.style.top=ny+'px'; this.domObj.style.left=nx+'px'; if(this.image)this.image.style.top=(parseInt(this.image.style.top)+y)+'px'; if(this.image)this.image.style.left=(parseInt(this.image.style.left)+x)+'px'; }; kaToolTip.prototype.recenter=function(tip){ var tipWidth=getObjectWidth(tip); var tipHeight=getObjectHeight(tip); var tipTop=parseInt(tip.style.top); var tipLeft=parseInt(tip.style.left); var viewportWheight=tip.toolTip.kaMap.viewportHeight; var viewportWidth=tip.toolTip.kaMap.viewportWidth; var topSlide=1; var leftSlide=1; if((tipTop+tipHeight)>viewportWheight) topSlide=(tipTop+tipHeight)-viewportWheight; if((tipLeft+tipWidth)>viewportWidth) leftSlide=(tipLeft+tipWidth)-viewportWidth; if(tipLeft<0) leftSlide=tipLeft-20; if(tipTop<0) topSlide=tipTop-20; if(topSlide!=1 || leftSlide!=1){ tip.toolTip.kaMap.slideBy(-(leftSlide+10), -(topSlide+10)); tip.toolTip.adjustPosition(-(leftSlide+10), -(topSlide+10)); } }; kaToolTip.prototype.extentChanged=function(){ var pixPos=this.kaMap.geoToPix(this.coordX,this.coordY); var nPixPos=this.kaMap.currentTool.adjustPixPosition( pixPos[0]*(-1), pixPos[1]*(-1) ); var newX=nPixPos[0]; var newY=nPixPos[1]; if(this.visible)this.move(newX,newY,true);}; function encodeMyHtml(string) { encodedHtml=escape(string); encodedHtml=encodedHtml.replace("/","%2F"); encodedHtml=encodedHtml.replace(/\?/g,"%3F"); encodedHtml=encodedHtml.replace(/=/g,"%3D"); encodedHtml=encodedHtml.replace(/&/g,"%26"); encodedHtml=encodedHtml.replace(/@/g,"%40"); return encodedHtml;}; function urlDecode(sz){ return unescape(sz).replace(/\+/g," ");}; function kaSearch( oKaMap ){ this.kaMap=oKaMap; this.image=null; this.domObj=null; this.tooltip=new kaToolTip(oKaMap); this.init(); }; kaSearch.prototype.init=function(){ this.tooltip.setTipImage('images/tip-yellow.png',-6,-19); }; kaSearch.prototype.search=function(search_query){ if (search_query.length <=0){ alert("Input search string!"); } if (search_query.length > 0) { var agt=navigator.userAgent.toLowerCase(); var is_ie=(agt.indexOf('msie') !=-1); var is_ie5=(agt.indexOf('msie 5') !=-1); element=document.getElementById ('searchres'); element.className="visible"; function handle_do_search () { if (xmlhttp.readyState==4) { if (xmlhttp.status==200) { element.innerHTML=xmlhttp.responseText; winResizer(530); } else { alert ('No server answer!'); } } } var xmlhttp=null; if (is_ie) { var control=(is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP"; try { xmlhttp=new ActiveXObject(control); xmlhttp.onreadystatechange=handle_do_search; } catch(e) { alert("You need to enable active scripting and activeX controls"); } } else { xmlhttp=new XMLHttpRequest(); xmlhttp.onload=handle_do_search; xmlhttp.onerror=handle_do_search; } searchstring=encodeURIComponent(search_query); xmlhttp.open('GET', "tools/search/kaSearch.php?xmlRequest=true&map="+this.kaMap.getCurrentMap().name+"&searchstring="+searchstring, true); xmlhttp.send(null); } };﻿ var prev; function clearBlackboard() { bbinner=document.getElementById ('blackboard'); bbinner.innerHTML=''; winResizer(200); } function backbutton(){ bbinner=document.getElementById ('blackboard'); bbinner.innerHTML=prev; } function presenteScholar($val, $prev) { prev=$prev.innerHTML; bbinner=document.getElementById('blackboard'); bbinner.innerHTML="<span class=\"notes\">eArchives Preview (click image to go there):</span><br/><a href=\"http:\/\/e-archives.lib.purdue.edu\/cdm4\/document.php?CISOROOT=%2FTippeSoil&CISOPTR=167&REC=2&CISOBOX=%22" + $val + "%22\" target=\"_blank\">" + "<img src=\"http:\/\/e-archives.lib.purdue.edu\/cgi-bin\/getimage.exe?CISOROOT=\/TippeSoil&CISOPTR=131&DMWIDTH=750&DMHEIGHT=1185.3748463744&DMX=0&DMY=0&DMTEXT=%22" + $val + "%22&REC=1&DMTHUMB=0&DMROTATE=0&DMSCALE=12\" /></a><br><input type='button' value='back' onclick=backbutton()>"; winResizer(550); } function presentSearch() { element=document.getElementById ('blackboard'); element.innerHTML="<div id=\"wrapper\"><form id=\"searchform\" name=\"searchform\" action=\"javascript:myKaSearch.search(document.forms['searchform'].elements['searchstring'].value);\"><fieldset><label for=\"searchstring\">Search</label><input type=\"text\" name=\"searchstring\" id=\"searchstring\" value=\"\" /><input type=\"submit\" name=\"submitquery\" id=\"submitquery\" value=\"Go\" /> </fieldset></form></div><div id=\"searchres\"> </div>"; applesearch.init(); } function downloadFile(){ element=document.getElementById ('blackboard'); element.innerHTML="<form action='download.php' method='get'><input type='hidden' name='filename' value='C:/data/USDA/Soil_Survey/18157_1906.tif' /><input type='submit' value=download> Soil Survey Map Scan </form> <form action='download.php' method='get'><input type='hidden' name='vector' value='s18157_1906' /><input type='submit' value=download> 1906 Soil Polygons </form><form action='download.php' method='get'><input type='hidden' name='filename' value='C:/ms4w/apps/Soil/htdocs/soilData/railwaymap.tif' /><input type='submit' value=download> Railway Map 1897 </form><form action='download.php' method='get'><input type='hidden' name='filename' value='C:/ms4w/apps/Soil/htdocs/soilData/Fig_2_rec.jpg' /><input type='submit' value=download> Bogus Soils </form><form action='download.php' method='get'><input type='hidden' name='filename' value='C:/ms4w/apps/Soil/htdocs/soilData/rectify_Tippecanoe_1852.tif' /><input type='submit' value=download> Tippecanoe 1852 </form><form action='download.php' method='get'><input type='hidden' name='filename' value='C:/ms4w/apps/Soil/htdocs/soilData/Lafayette_Clip.tif' /><input type='submit' value=download> Lafayette 1852 </form>"; } function winResizer(newH) { element=document.getElementById ('myBlackboard'); bbinner=document.getElementById ('blackboard'); var thisWindow=element; var thisHeader=element.firstChild; var thisBody=thisHeader.nextSibling; var thisFooter=thisBody.nextSibling; bbinner.style.height=newH+'px'; thisBody.style.height=newH+'px'; var newFooterTop=(newH+22); thisFooter.style.top=newFooterTop+'px'; } 