var austinmap = null; var mapdiv = null; var newimgdiv = null; // HTML Element to receive new images var topOff = 10; var leftOff = 10; var clipTop = 0; var time,xamount,yamount,theTime,theHeight,DHTML; var counter1 = 0; //number of ms to wait until event clear calls eventClearTime = 1000; var dummyimg = null; var text = null; // browser warning vars var warningHeight = 40; var showWarning = false; var warning = null; // event handler vars var ie55up = false; var ie55down = false; var ie = false; var isSafari = false; //document.write('
'); //document.write('

Click on a + to load a picture, or click elsewhere on the map to zoom in. This version of the map is still under development. If you like, you can still use the old Java applet version.

'); document.write(''); document.write('
'); document.write('
'); document.write('
'); document.write('
'); document.write('
'); document.write('
'); /* public AustinMap AustinMap() Initializes a new AustinMap. */ function AustinMap(minzl, maxzl) { this.X_LEFT = -180.0; this.X_RIGHT = 180.0; this.Y_TOP = 180.0; this.Y_BOTTOM = -180.0; this.TILE_SIDE_LL = 360.0; this.TILE_SIZE = 256; this.ZF = 2; this.dZF = 2.0; this.backIndex = new Array(); this.bounds_tl = new Point(this.X_LEFT, this.Y_TOP); this.bounds_br = new Point(this.X_RIGHT, this.Y_BOTTOM); this.inMakeMapMode = false; this.lastmapid = -1; this.map = mapdiv; /* maybe i should have this create the div object instead of requiring that it already exist and be properly named */ this.maps = new Array(); this.mapcurrentidx = -1; this.mapsidx = 0; this.minarrowzl = 13; this.minzl = minzl; this.maxzl = maxzl; this.allzls = this.maxzl + 1; this.minsize = 200; this.mode = ''; this.numzls = this.maxzl - this.minzl + 1; this.offsetX = 0; this.offsetY = 0; this.sqx = 0; this.sqy = 0; this.sqxcapacity = 0; this.sqycapacity = 0; this.pics = new Array(); this.picsidx = 0; this.pixelSide = this.TILE_SIZE * this.sqx; this.plusmap = new PlusMap(); this.tilediv = new getObj('tilediv'); this.tilediv.style.visibility = 'visible'; this.tilediv.style.position = 'absolute'; this.tilediv.style.top = showWarning ? (topOff + warningHeight) : topOff; this.tilediv.style.width = 486; this.tilediv.style.height = showWarning ? (486 - warningHeight) : 486; this.tilediv.style.overflow = 'hidden'; this.tileimgs = new Array(); this.plusimgs = new Array(); /* pre-calculate 2^zl for each zl */ this.pows = new Array(this.allzls); for (var z = 0; z <= this.maxzl; ++z) this.pows[z] = 1 << z; /* edit vars */ this.edit_point = new Point(0, 0); this.edit_degrees = 0; this.edit_range = 20000; this.vis = new Array(false, false); /* event handler vars */ this.events = new Queue(); this.dcdelay = 150; this.isDragging = false; this.isDown = false; this.isHandling = false; this.mouseclick = new Point(0, 0); this.timeoutid = 0; this.lastQueueLength = 0; this.queueTime = null; this.toggle_arrows = true; this.zl = 0; this.width = null; this.height = null; if (window.innerHeight) { this.width = limit(window.innerWidth - 3*leftOff, this.minsize, this.pixelSide); this.height = limit(window.innerHeight - 3*topOff , this.minsize, this.pixelSide); } else if (document.body) { this.width = limit(document.body.clientWidth - 3*leftOff, this.minsize, this.pixelSide); this.height = limit(document.body.clientHeight - 3*topOff , this.minsize, this.pixelSide); } /* stores the x/y coords of the top-left corner */ this.corner = new Array(this.allzls); for (var i = 0; i < this.corner.length; ++i) this.corner[i] = new Point(0, 0); this.centerll = new Point(0, 0); /* number of pixels wide/high for each zoom level */ this.side = new Array(this.allzls); this.side[0] = this.TILE_SIZE; for (var i = 1; i < this.maxzl; ++i) this.side[i] = this.side[i - 1] * 2; this.addMap = AustinMap_addMap; this.addPic = AustinMap_addPic; this.centerOn = AustinMap_centerOn; this.clearEventQueue = AustinMap_clearEventQueue; this.contributeCancel = AustinMap_contributeCancel; this.contributeMode = AustinMap_contributeMode; this.doneAddingPictures = AustinMap_doneAddingPictures; this.drawEdit = AustinMap_drawEdit; this.drawNav = AustinMap_drawNav; this.drawTiles = AustinMap_drawTiles; this.enforceBounds = AustinMap_enforceBounds; this.event_handleEdit = AustinMap_event_handleEdit; this.event_loadThumb = AustinMap_event_loadThumb; this.event_resizer = AustinMap_event_resizer; this.event_scrollNavBar = AustinMap_event_scrollNavBar; this.event_scrollNavPanel = AustinMap_event_scrollNavPanel; this.event_zoomInOut = AustinMap_event_zoomInOut; this.eventHandler = AustinMap_eventHandler; this.getCurrentMap = AustinMap_getCurrentMap; this.getWhichPic = AustinMap_getWhichPic; this.highlightPicture = AustinMap_highlightPicture; this.inEditMode = AustinMap_inEditMode; this.initMapMenu = AustinMap_initMapMenu; this.initNavBar = AustinMap_initNavBar; this.loadBackArray = AustinMap_loadBackArray; this.loadRadii = AustinMap_loadRadii; this.makeMapMode = AustinMap_makeMapMode; this.makeMapModeCancel = AustinMap_makeMapModeCancel; this.movePic = AustinMap_movePic; this.paint = AustinMap_paint; this.pixelsToX = AustinMap_pixelsToX; this.pixelsToY = AustinMap_pixelsToY; this.refresh = AustinMap_refresh; this.refreshOffsets = AustinMap_refreshOffsets; this.reset = AustinMap_reset; this.scroll = AustinMap_scroll; this.scrollCenterTo = AustinMap_scrollCenterTo; this.scrollCool = AustinMap_scrollCool; this.scrollProg = AustinMap_scrollProg; this.setCornerFromLL = AustinMap_setCornerFromLL; this.setBounds = AustinMap_setBounds; this.setLocation = AustinMap_setLocation; this.setMapCapacity = AustinMap_setMapCapacity; this.setPicCapacity = AustinMap_setPicCapacity; this.switchMap = AustinMap_switchMap; this.toggleArrows = AustinMap_toggleArrows; this.trigger = AustinMap_trigger; this.triggerEvent = AustinMap_triggerEvent; this.triggerNext = AustinMap_triggerNext; this.xToPixels = AustinMap_xToPixels; this.yToPixels = AustinMap_yToPixels; this.zoom = AustinMap_zoom; this.zoomIn = AustinMap_zoomIn; this.zoomInClick = AustinMap_zoomInClick; this.zoomOut = AustinMap_zoomOut; this.zoomOutClick = AustinMap_zoomOutClick; this.zoomToPoint = AustinMap_zoomToPoint; this.event_resizer(false); this.initNavBar(); this.initMapMenu(); this.clearEventQueue(); this.loadRadii(); } /* public void AustinMap.addMap(Map theMap) Adds map to this AustinMap's maps array. */ function AustinMap_addMap(theMap) { if (this.mapcurrentidx == -1) this.mapcurrentidx = this.mapsidx; this.maps[this.mapsidx] = theMap; var aOption = document.createElement('option'); if (ie) aOption.innerText = theMap.title; else aOption.text = theMap.title; aOption.value = this.mapsidx; this.mapselect.obj.appendChild(aOption); ++this.mapsidx; } /* public void AustinMap.addPic(Picture pic) Adds pic to this AustinMap's pics array. */ function AustinMap_addPic(pic) { pic.index = this.picsidx; this.pics[this.picsidx++] = pic; } /* public void AustinMap.centerOn(int picidx) Re-centers the map on the Picture with object ID picidx. */ function AustinMap_centerOn(picidx) { this.contributeCancel(); this.triggerEvent('highlightpic', null); if (this.zl < 14) this.zoom(14); this.loadBackArray(); var point = this.pics[this.backIndex[picidx]].getPoint(this.zl); this.scrollCenterTo(point.x, point.y); this.triggerEvent('highlightpic', this.backIndex[picidx]); } /* private void AustinMap.clearEventQueue() Clears the event queue. */ function AustinMap_clearEventQueue() { if (this.isHandling && this.events.length == this.lastQueueLength) { this.events.clear(); this.isHandling = false; this.lastQueueLength = 0; } else this.lastQueueLength = this.events.length; this.queueTime = setTimeout('austinmap.clearEventQueue()', eventClearTime); } /* public void AustinMap.contributeCancel() Cancels contribute mode. Does nothing if not in contribute mode. */ function AustinMap_contributeCancel() { if (!this.inEditMode()) return; this.mode = ''; this.arrowtoggle.hot(false); this.button_cancel.hot(false); this.button_submit.hot(false); this.toggleArrows(true); this.readyForSubmit = false; this.edit_degrees = 0; this.edit_range = 20000; this.edit_point = new Point(0, 0); this.edit_plus.hot(false); this.edit_arrow.hot(false); this.vis[0] = false; this.vis[1] = false; } /* public void contributeMode() Puts the map into contribute mode. Does nothing if already in contribute mode. */ function AustinMap_contributeMode() { if (this.mode == 'contribute') return; this.mode = 'contribute'; this.arrowtoggle.hot(true); this.button_cancel.hot(true); this.button_submit.hot(true); if (!ie55down) this.button_submit.imag.style.cursor = 'default'; this.toggleArrows(false); } /* private void AustinMap.doneAddingPictures() Initializes the whichPic array, which determines which Picture resides at each point on the map. Stores the values based on the Picture's index in the stored array, not the Picture's Object ID. */ function AustinMap_doneAddingPictures() { /* give the plus map the proper bounds */ this.plusmap.xLeft = this.pics[0].center.x; this.plusmap.xRight = this.pics[0].center.x; this.plusmap.yTop = this.pics[0].center.y; this.plusmap.yBottom = this.pics[0].center.y; for (var i = 1; i < this.pics.length; ++i) { if (this.pics[i].center.x < this.plusmap.xLeft) this.plusmap.xLeft = this.pics[i].center.x; if (this.pics[i].center.x > this.plusmap.xRight) this.plusmap.xRight = this.pics[i].center.x; if (this.pics[i].center.y > this.plusmap.yTop) this.plusmap.yTop = this.pics[i].center.y; if (this.pics[i].center.y < this.plusmap.yBottom) this.plusmap.yBottom = this.pics[i].center.y; } this.plusmap.setBounds(); this.picsXSorted = new Array(this.pics.length); for (var i = 0; i < this.pics.length; ++i) this.picsXSorted[i] = this.pics[i]; this.picsXSorted.sort(AustinMap_sortByX); } /* public void AustinMap.drawEdit() Draws the edit/submit arrow on the map. */ function AustinMap_drawEdit() { if (!this.vis[0]) return; var xco = (this.zl == this.maxzl) ? this.edit_point.x : Math.round(this.edit_point.x / this.pows[this.maxzl - this.zl]); var yco = (this.zl == this.maxzl) ? this.edit_point.y : Math.round(this.edit_point.y / this.pows[this.maxzl - this.zl]); this.edit_plus.left(xco - this.corner[this.zl].x - 7); this.edit_plus.top (yco - this.corner[this.zl].y - 7); if (!this.vis[1]) return; var arrowLength = this.arrowRadius[this.zl][this.edit_range][0]; var arrowTip = this.arrowRadius[this.zl][this.edit_range][1]; var arrowsize = (arrowLength * 2) + 3; this.edit_arrow.width (arrowsize); this.edit_arrow.height(arrowsize); this.edit_arrow.left(xco - this.corner[this.zl].x - arrowLength - 1); this.edit_arrow.top (yco - this.corner[this.zl].y - arrowLength - 1); this.edit_arrow.pngSrc('images/arrows/' + arrowLength + '_' + arrowTip + '/arrow_' + this.edit_degrees + '.png'); } /* function void AustinMap.drawNav() Draws the navigation panel in the top-left corner. */ function AustinMap_drawNav() { this.navslider.top(116 + 12 * (this.zl - this.minzl)); } /* protected void AustinMap.drawTiles() Draws the tiles for this map. */ function AustinMap_drawTiles() { var currentMap = this.getCurrentMap(); var mapChanged = (this.lastmapid != currentMap.id); this.lastmapid = currentMap.id; /* store x/y of top left corner */ var cx = this.corner[this.zl].x; var cy = this.corner[this.zl].y; /* set map at center if smaller than window */ cx += this.offsetX; cy += this.offsetY; /* calculate tile position of topleft tile */ var xpos = Math.floor(cx / this.TILE_SIZE); var ypos = Math.floor(cy / this.TILE_SIZE); var xtil = xpos; var xmod = xpos % this.sqx; if (xmod != 0) xtil += (this.sqx - xmod); var ytil = ypos; var ymod = ypos % this.sqy; if (ymod != 0) ytil += (this.sqy - ymod); var xtilmax = xpos + this.sqx; var ytilmax = ypos + this.sqy; /* this keeps track of (xtil and ytil) + 1, because of inconsistent initial tile conventions and because ari is cute */ var xtil1 = xtil + 1; var ytil1 = ytil + 1; /* only calculate the xtil's once */ var xtilarr = new Array(this.sqx); var xtil1arr = new Array(this.sqx); var xlefts = new Array(this.sqx); xtilarr[0] = xtil; xtil1arr[0] = xtil + 1; xlefts[0] = xtilarr[0] * this.TILE_SIZE - cx; for (var i = 1; i < this.sqx; ++i) { xtilarr[i] = xtilarr[i - 1] + 1; xlefts[i] = xlefts[i - 1] + this.TILE_SIZE; if (xtilarr[i] >= xtilmax) { xlefts[i] -= this.TILE_SIZE * this.sqx; xtilarr[i] -= this.sqx; } xtil1arr[i] = xtilarr[i] + 1; } for (var y = 0; y < this.sqy; ++y) // y { if (ytil >= ytilmax) { ytil -= this.sqy; ytil1 -= this.sqy; } var ytop = ytil * this.TILE_SIZE - cy; for (var x = 0; x < this.sqx; ++x) // x { xtil = xtilarr[x]; xtil1 = xtil1arr[x]; var xleft = xlefts[x]; /* store image to be drawn */ var imag = this.tileimgs[x][y]; var imag2 = this.plusimgs[x][y]; /* only change the source if this tile has changed or the map has changed */ if ( mapChanged || ((imag.zoom != this.zl) || (imag.j2 != ytil1) || (imag.i2 != xtil1)) ) { imag.src('images/black.gif'); imag.src(currentMap.getTile(this.zl, xtil1, ytil1)); if (!ie) imag2.pngSrc('images/blank.png'); imag2.pngSrc(this.plusmap.getTile(this.zl, xtil1, ytil1)); } /* set the current data for this tile, so it won't have its source changed if not needed */ imag.zoom = this.zl; imag.j2 = ytil1; imag.i2 = xtil1; /* set the tile's position */ imag.top (ytop); imag.left (xleft); imag2.top (ytop); imag2.left(xleft); } ++ytil; ++ytil1; } } /* private void AustinMap.enforceBounds() Re-centers the map if it is out of bounds. */ function AustinMap_enforceBounds() { var boundsXLeft = this.xToPixels(this.bounds_tl.x); var boundsXRight = this.xToPixels(this.bounds_br.x); var boundsYTop = this.yToPixels(this.bounds_tl.y); var boundsYBottom = this.yToPixels(this.bounds_br.y); var xSpan = boundsXRight - boundsXLeft; var ySpan = boundsYBottom - boundsYTop; var xDiff = 0; var yDiff = 0; /* case 1: current view span is less than map span; just need to check if any edge is too far */ if (this.width < xSpan) { var leftDiff = boundsXLeft - this.corner[this.zl].x; if (leftDiff > 0) xDiff = leftDiff; else { var rightDiff = boundsXRight - (this.corner[this.zl].x + this.width); if (rightDiff < 0) xDiff = rightDiff; } } else /* case 2: one side or the other will be out of bounds; just move back to the center */ { xDiff = Math.round( ((boundsXRight + boundsXLeft) / 2) - (this.corner[this.zl].x + (this.width / 2)) ); if (Math.abs(xDiff) < 3) xDiff = 0; } if (this.height < ySpan) { var topDiff = boundsYTop - this.corner[this.zl].y; if (topDiff > 0) yDiff = topDiff; else { var bottomDiff = boundsYBottom - (this.corner[this.zl].y + this.height); if (bottomDiff < 0) yDiff = bottomDiff; } } else { yDiff = Math.round( ((boundsYTop + boundsYBottom) / 2) - (this.corner[this.zl].y + (this.height / 2)) ); if (Math.abs(yDiff) < 3) yDiff = 0; } if (xDiff != 0 || yDiff != 0) this.scrollCool(xDiff, yDiff); else this.triggerNext(); } /* public void AustinMap.eventHandle(Event e) Handles events. */ function AustinMap_eventHandler(e) { if (window.event) e = window.event; if (e.type == 'resize') { this.event_resizer(); return; } var x = null; var y = null; if (window.event) { x = e.clientX - leftOff; y = e.clientY - topOff; } else { x = e.pageX - leftOff; y = e.pageY - topOff; } if (showWarning) y -= warningHeight; if (!ie55down && !ie55up) x += 2; var pt = new Point(x, y); if (this.inMakeMapMode && e.type == 'dblclick' && this.zl == this.maxzl) { var mapInternalX = prompt ("What is the map image's internal x coordinate?"); var mapInternalY = prompt ("What is the map image's internal y coordinate?"); if (!mapInternalX && !mapInternalY) return; parent.left.addAlignmentPoint( mapInternalX, mapInternalY, this.corner[this.zl].x + pt.x, this.corner[this.zl].y + pt.y, this.zl); return; } /* top-left nav panel */ if (e.type == 'click') { if (this.event_scrollNavPanel(pt)) return; if (this.event_scrollNavBar(e, pt)) return; if (this.event_zoomInOut(e, pt)) return; if (this.arrowtoggle.contains(pt)) { if (e.type == 'click') this.toggleArrows(); return; } } if (this.inEditMode() && e.type == 'click') { if (this.event_handleEdit(pt)) return; } /* contribute/move */ if (this.inEditMode() && e.type == 'click' && this.zl == this.maxzl) { if (this.isDragging) this.isDragging = false; else { if (!this.vis[0]) { this.vis[0] = true; this.edit_plus.hot(true); if (!ie55down) this.edit_plus.imag.style.cursor = 'default'; } this.edit_point.x = this.corner[this.zl].x + pt.x; this.edit_point.y = this.corner[this.zl].y + pt.y; this.paint(); return; } } var picId = this.event_loadThumb(pt); /* check for icon click and load corresponding picture */ if (e.type == 'click' && this.toggle_arrows) { if (picId) { open('showpic.php?p=' + picId, 'left'); return; } } // if (e.type == 'dblclick') if (e.type == 'mousedown') { this.isDown = true; this.mouseclick.x = x; this.mouseclick.y = y; } else if (e.type == 'mousemove') { if (this.isDown) { this.isDragging = true; if (this.inEditMode() && this.zl == this.maxzl && this.vis[0]) { if (!this.vis[1]) { this.vis[1] = true; this.edit_arrow.hot(true); if (!ie55down) this.edit_arrow.imag.style.cursor = 'default'; this.readyForSubmit = true; this.button_submit.src('images/button_submit.gif'); if (!ie55down) this.button_submit.imag.style.cursor = 'pointer'; this.drawNav(); } var plus = new Point(this.edit_point.x - this.corner[this.zl].x, this.edit_point.y - this.corner[this.zl].y); if (x == plus.x && y == plus.y) return; var deg = 1.54; deg = ( (y - plus.y) <= 0) ? (Math.acos((x - plus.x) / Math.sqrt (Math.pow((x - plus.x), 2) + Math.pow((y - plus.y), 2)))) : (2*Math.PI - (Math.acos((x - plus.x) / Math.sqrt (Math.pow((x - plus.x), 2) + Math.pow((y - plus.y), 2))))); this.edit_degrees = Math.round(toDegrees(deg)); this.drawEdit(); return; } else this.scroll(this.mouseclick.x - x, this.mouseclick.y - y); this.mouseclick.x = x; this.mouseclick.y = y; } } else if (e.type == 'mouseup') { this.isDown = false; } else if (e.type == 'mouseout') { this.isDown = false; } else if (e.type == 'click') { if (this.isDragging) { this.isDragging = false; this.enforceBounds(); } else if (this.zl < this.maxzl) this.triggerEvent('zoominclick', x, y); } } /* public boolean AustinMap.event_handleEdit(Point pt) Handles the edit modes. Returns true if anything was handled. */ function AustinMap_event_handleEdit(pt) { if (this.button_cancel.contains(pt)) { if (this.inEditMode()) this.contributeCancel(); return true; } if (this.button_submit.contains(pt)) { if (!this.readyForSubmit) { alert("You must indicate a position and direction before you can submit.\n" + "(You may skip this step if you don't know the location, by clicking 'skip this step' provided in the left frame.)"); return false; } else if (this.mode == 'contribute') { if (this.edit_point.x < 5 && this.edit_point.y < 5) { alert("Please give your picture a valid location on the map. Even if you're not sure where you took it, just give it your best guess " + "and you or an administrator can relocate it later.\n" + "If you believe you have reached this message in error, please contact admin@austinmap.org ."); } else { parent.left.location = "contribute.php?xpos=" + this.pixelsToX(this.edit_point.x) + "&ypos=" + this.pixelsToY(this.edit_point.y) + "&d=" + this.edit_degrees; this.contributeCancel(); } } else if (this.mode == 'move') { if (this.edit_point.x <= 0 || this.edit_point.y <= 0) { alert("Please give your picture a valid location on the map.\n" + "If you believe you have reached this message in error, please contact admin@austinmap.org ."); } else { parent.left.location = "editpic.php?picid=" + this.editPicID + "&xpos=" + this.pixelsToX(this.edit_point.x) + "&ypos=" + this.pixelsToY(this.edit_point.y) + "&d=" + this.edit_degrees; this.contributeCancel(); } } else if (this.mode == 'setlocation') { if (this.edit_point.x <= 0 || this.edit_point.y <= 0) { alert("Please give your picture a valid location on the map.\n" + "If you believe you have reached this message in error, please contact admin@austinmap.org ."); } else { parent.left.location = "editpic.php?mode=setlocation&picid=" + this.editPicID + "&xpos=" + this.pixelsToX(this.edit_point.x) + "&ypos=" + this.pixelsToY(this.edit_point.y) + "&d=" + this.edit_degrees; this.contributeCancel(); this.reset(); } } return true; } return false; } /* public int AustinMap.event_loadThumb(Point pt) Updates the top-right thumbnail. Returns the picId of the current icon in selection. */ function AustinMap_event_loadThumb(pt) { var xidx = pt.x + this.corner[this.zl].x + this.offsetX; var yidx = pt.y + this.corner[this.zl].y + this.offsetY; var picIdx = this.getWhichPic(xidx, yidx); return this.highlightPicture(picIdx); } /* public void AustinMap.event_resizer([boolean override]) Resizes the Austin Map when the window is resized. If override is present and false, the map is not painted at the end of the method (invoked during map initialization). */ function AustinMap_event_resizer() { newimgdiv = this.tilediv.obj; if (window.innerHeight) { this.width = cup(window.innerWidth - 3*leftOff, this.minsize); if (showWarning) this.height = cup(window.innerHeight - 3*topOff - warningHeight, this.minsize); else this.height = cup(window.innerHeight - 3*topOff, this.minsize); } else if (document.body) { this.width = cup(document.body.clientWidth - 3*leftOff, this.minSize); if (showWarning) this.height = cup(document.body.clientHeight - 3*topOff - warningHeight, this.minsize); else this.height = cup(document.body.clientHeight - 3*topOff, this.minsize); } this.refreshOffsets(); this.map.style.width = this.width; this.map.style.height = this.height; this.tilediv.style.width = this.width; this.tilediv.style.height = this.height; this.scrollamt = Math.round(min(this.width, this.height) / 2); var prevsqx = this.sqx; var prevsqy = this.sqy; this.sqx = cup(Math.ceil(this.width / this.TILE_SIZE) + 1, 2); this.sqy = cup(Math.ceil(this.height / this.TILE_SIZE) + 1, 2); if (isSafari) { ++this.sqx; ++this.sqy; } /* if bigger than capacity, need to add tiles */ if (this.sqy > this.sqycapacity) { for (var i = 0; i < this.sqxcapacity; ++i) { this.tileimgs[i].length = this.sqy; this.plusimgs[i].length = this.sqy; for (var j = this.sqycapacity; j < this.sqy; ++j) { this.tileimgs[i][j] = new RegImage(); this.tileimgs[i][j].width (this.TILE_SIZE); this.tileimgs[i][j].height(this.TILE_SIZE); this.plusimgs[i][j] = new RegImage(); this.plusimgs[i][j].width (this.TILE_SIZE); this.plusimgs[i][j].height(this.TILE_SIZE); } } this.sqycapacity = this.sqy; } if (this.sqx > this.sqxcapacity) { this.tileimgs.length = this.sqx; this.plusimgs.length = this.sqx; for (var i = this.sqxcapacity; i < this.sqx; ++i) { this.tileimgs[i] = new Array(this.sqycapacity); this.plusimgs[i] = new Array(this.sqycapacity); for (var j = 0; j < this.sqycapacity; ++j) { this.tileimgs[i][j] = new RegImage(); this.tileimgs[i][j].width (this.TILE_SIZE); this.tileimgs[i][j].height(this.TILE_SIZE); this.plusimgs[i][j] = new RegImage(); this.plusimgs[i][j].width (this.TILE_SIZE); this.plusimgs[i][j].height(this.TILE_SIZE); } } this.sqxcapacity = this.sqx; } /* if bigger than before, need to turn on tiles */ if (this.sqy > prevsqy) { for (var i = 0; i < this.sqx; ++i) { for (var j = prevsqy; j < this.sqy; ++j) { this.tileimgs[i][j].vis(true); this.plusimgs[i][j].vis(true); if (ie) { this.plusimgs[i][j].imag.onclick = eventHandler; this.plusimgs[i][j].imag.ondblclick = eventHandler; this.plusimgs[i][j].imag.onmousedown = eventHandler; this.plusimgs[i][j].imag.onmousemove = eventHandler; this.plusimgs[i][j].imag.onmouseout = eventHandler; this.plusimgs[i][j].imag.onmouseup = eventHandler; } } } } if (this.sqx > prevsqx) { for (var i = prevsqx; i < this.sqx; ++i) { for (var j = 0; j < this.sqy; ++j) { this.tileimgs[i][j].vis(true); this.plusimgs[i][j].vis(true); if (ie) { this.plusimgs[i][j].imag.onclick = eventHandler; this.plusimgs[i][j].imag.ondblclick = eventHandler; this.plusimgs[i][j].imag.onmousedown = eventHandler; this.plusimgs[i][j].imag.onmousemove = eventHandler; this.plusimgs[i][j].imag.onmouseout = eventHandler; this.plusimgs[i][j].imag.onmouseup = eventHandler; } } } } // var msg = "turning off tiles... (over, down)\n"; /* if smaller than before, need to turn off tiles */ if (this.sqy < prevsqy) { for (var i = 0; i < this.sqx; ++i) { for (var j = this.sqy; j < prevsqy; ++j) { // msg += '(' + i + ', ' + j + ")\n"; this.tileimgs[i][j].vis(false); this.plusimgs[i][j].vis(false); } } } if (this.sqx < prevsqx) { for (var i = this.sqx; i < prevsqx; ++i) { for (var j = 0; j < this.sqycapacity; ++j) { // msg += '(' + i + ', ' + j + ")\n"; this.tileimgs[i][j].vis(false); this.plusimgs[i][j].vis(false); } } } // if (msg != "turning off tiles... (over, down)\n") // alert (msg); if (!(arguments.length > 0 && arguments[0] == false)) { this.lastmapid = 'poop'; this.paint(); } } /* public boolean AustinMap.event_scrollNavBar(Event e, Point pt) Checks if the event is occurring on the nav bar; returns true if so, and zooms if the event is a click. */ function AustinMap_event_scrollNavBar(e, pt) { for (var i = 0; i < this.navbars.length; ++i) { if (this.navbars[i].contains(pt)) { if (e.type == 'click') this.triggerEvent('zoom', i + this.minzl); return true; } } return false; } /* public boolean AustinMap.event_scrollPanel(Point pt) Checks if the point is in any of the scroll panel buttons; scrolls appropriately if so, and returns true upon scrolling, false if not. */ function AustinMap_event_scrollNavPanel(pt) { if (this.navimgs[0].contains(pt)) this.triggerEvent('scroll', this.scrollamt * -1, 0); else if (this.navimgs[1].contains(pt)) this.triggerEvent('scroll', 0, this.scrollamt * -1); else if (this.navimgs[2].contains(pt)) this.triggerEvent('scroll', this.scrollamt, 0); else if (this.navimgs[3].contains(pt)) this.triggerEvent('scroll', 0, this.scrollamt); else return false; return true; } /* public boolean AustinMap.event_zoomInOut(Event e, Point pt) Checks if the point is on the zoom in our out buttons and returns true if so; zooms in or out if the event is a click. */ function AustinMap_event_zoomInOut(e, pt) { if (this.zin.contains(pt)) { if (e.type == 'click') this.triggerEvent('zoomin'); return true; } if (this.zout.contains(pt)) { if (e.type == 'click') this.triggerEvent('zoomout'); return true; } return false; } /* public Map AustinMap.getCurrentMap() Returns the Map that is currently in focus for this AustinMap. */ function AustinMap_getCurrentMap() { return this.maps[this.mapcurrentidx]; } /* public int AustinMap.getWhichPic(int x, int y) Returns the index of the picture at this point and the current zoom level, or null if there is none. */ function AustinMap_getWhichPic(x, y) { var xpos = this.pixelsToX(x); /* determine the index of the pic with the closest x position to xpos */ var b = 0; var e = this.pics.length; var str = ''; while (b < e) { var mid = Math.floor((b + e) / 2); var xcurr = this.picsXSorted[mid].center.x; if (xpos < xcurr) e = mid; else if (xpos > xcurr) b = mid + 1; else { b = mid; break; } } if (b < 0) b = 0; if (b >= this.pics.length) b = this.pics.length - 1; var rad = max(this.plusRadius[this.zl], this.arrowRadius[this.zl][20000][0]); /* determine list of indeces of pics within range */ var possibles1 = new Array(); /* stores indeces of relevant pictures with respect to this.pics */ var xmin = x - rad; var xmax = x + rad; var index1 = b; while (index1 >= 0 && index1 < this.pics.length) { var currxpos = this.xToPixels(this.picsXSorted[index1].center.x); if (currxpos >= xmin) { possibles1.push(this.picsXSorted[index1].index); --index1; } else break; } var index2 = b + 1; while (index2 >= 0 && index2 < this.pics.length) { var currxpos = this.xToPixels(this.picsXSorted[index2].center.x); if (currxpos <= xmax) { possibles1.push(this.picsXSorted[index2].index); ++index2; } else break; } if (possibles1.length == 0) return null; /* eliminate pictures whose region do not contain the click */ var possibles2 = new Array(); /* stores indeces of relevant pictures with respect to this.pics */ for (var i = 0; i < possibles1.length; ++i) { if (this.pics[possibles1[i]].inArrow(this, x, y)) possibles2.push(possibles1[i]); } if (possibles2.length == 0) return null; if (possibles2.length == 1) return possibles2[0]; /* if this point is reached, now determine which picture is closest */ var minDist = rad * 100; var minIndex = -1; for (var i = 0; i < possibles2.length; ++i) { var index = possibles2[i]; var dist = this.pics[index].distanceFrom(this, x, y); if (dist < minDist || (dist == minDist && Math.random() < 0.5) ) { minDist = dist; minIndex = index; } } return minIndex; } /* private void AustinMap.highlightPicture(int picIdx) Highlight the picture with index in the picture array of picIdx. */ function AustinMap_highlightPicture(picIdx) { var picId = (picIdx || picIdx == 0) ? this.pics[picIdx].id : null; if (picId && this.toggle_arrows && this.thumbpic != picId) { var pic = this.pics[picIdx]; var tw = pic.twidth; var tw2 = Math.round(tw / 2); var th = pic.theight; var th2 = Math.round(th / 2); this.thumbback.left(this.width - 80 - tw2 - this.offsetX) this.thumbback.top(60 - th2 + this.offsetY); this.thumbback.height(th + 20); this.thumbback.width(tw + 20); this.thumbback.vis(true); this.thumbborder[0].left(this.width - 81 - tw2 - this.offsetX); this.thumbborder[0].top(59 - th2 + this.offsetY); this.thumbborder[0].width(tw + 22); this.thumbborder[1].left(this.width - 81 - tw2 - this.offsetX); this.thumbborder[1].top(80 - th2 + th + this.offsetY); this.thumbborder[1].width(tw + 22); this.thumbborder[2].left(this.width - 81 - tw2 - this.offsetX); this.thumbborder[2].top(59 - th2 + this.offsetY); this.thumbborder[2].height(th + 22); this.thumbborder[3].left(this.width - 60 - tw2 + tw - this.offsetX); this.thumbborder[3].top(59 - th2 + this.offsetY); this.thumbborder[3].height(th + 22); for (var i = 0; i < this.thumbborder.length; ++i) this.thumbborder[i].vis(true); // figure out how to turn off the pointer cursor on the thumb this.thumb.left(this.width - 70 - tw2 - this.offsetX); this.thumb.top(70 - th2 + this.offsetY); this.thumb.width(tw); this.thumb.height(th); this.thumb.src('pictures_thumb/' + pic.filename); this.thumb.vis(true); var xcoord = pic.getPoint(this.zl).x - this.corner[this.zl].x - this.offsetX; var ycoord = pic.getPoint(this.zl).y - this.corner[this.zl].y - this.offsetY; if (pic.range >= this.minArrow[this.zl]) /* arrows */ { this.halo.vis(false); this.halo5.vis(true); this.halo5.pngSrc('images/blank.png'); var arrowLength = this.arrowRadius[this.zl][pic.range][0]; var arrowTip = this.arrowRadius[this.zl][pic.range][1]; var halosize = arrowLength * 2 + 3; this.halo5.width (halosize); this.halo5.height(halosize); this.halo5.pngSrc('images/arrows/' + arrowLength + '_' + arrowTip + '/halo_' + pic.degrees + '.png'); this.halo5.top (ycoord - arrowLength - 1); this.halo5.left(xcoord - arrowLength - 1); } else /* pluses */ { this.halo5.vis(false); this.halo.src('images/plusy_' + this.plusDiameter[this.zl] + '.gif'); this.halo.top (ycoord - this.plusRadius[this.zl] - 1); this.halo.left(xcoord - this.plusRadius[this.zl] - 1); this.halo.width (this.plusDiameter[this.zl] + 2); this.halo.height(this.plusDiameter[this.zl] + 2); this.halo.vis(true); } this.thumbpic = picId; } else if (!picId && this.thumbpic != -1) { for (var i = 0; i < this.thumbborder.length; ++i) this.thumbborder[i].vis(false); this.thumbback.vis(false); this.thumb.vis(false); this.halo.vis(false); this.halo5.vis(false); this.thumbpic = -1; } return picId; } /* public boolean AustinMap.inEditMode() Returns true if the map is in any of the edit modes--contribute, edit, etc. */ function AustinMap_inEditMode() { return this.mode != ''; } /* private void AustinMap.initMapMenu() Initializes the map drop-down menu. */ function AustinMap_initMapMenu() { this.mapmenudiv = new getObj('mapmenudiv'); this.mapmenudiv.style.position = 'absolute'; this.mapmenudiv.style.left = 0; this.mapmenudiv.style.top = 0; var aform = document.createElement('form'); aform.id = 'mapmenu'; this.mapmenudiv.obj.appendChild(aform); this.mapmenu = new getObj('mapmenu'); var theselect = document.createElement('select'); theselect.id = 'mapselect'; theselect.onchange = AustinMapSwitchMap; this.mapmenu.obj.appendChild(theselect); this.mapselect = new getObj('mapselect'); this.mapmenu.style.position = 'absolute'; this.mapmenu.style.left = 95; this.mapmenu.style.top = 20; } /* private void AustinMap.initNavBar() Initializes the navigation bar for this AustinMap. */ function AustinMap_initNavBar() { newimgdiv = mapdiv.obj; this.edit_plus = new HotImage(0, 0, 15, 15, 'images/arrow_15.gif', false); this.edit_arrow = new HotImage(0, 0, 33, 33, 'images/clear.gif', false); this.navimgs = new Array(4); for (var i = 0; i < this.navimgs.length; ++i) { var xoff = (i == 3) ? 1 : i; var yoff = (i == 0) ? 1 : i - 1; var which = null; switch(i) { case 0: which = 'l'; break; case 1: which = 'u'; break; case 2: which = 'r'; break; case 3: which = 'd'; break; } this.navimgs[i] = new HotImage(10 + 20 * xoff, 10 + 20 * yoff, 17, 17, 'images/arrow_' + which + '.gif'); } this.halo = new RegImage(0, 0, 1, 1, 'images/clear.gif', false); this.halo5 = new RegImage(); this.halo5.src('images/clear.gif'); this.halo5.width(33); this.halo5.height(33); this.navbar = new HotImage(31, 113, 15, 12 * this.numzls, 'images/navbar_' + this.numzls + '.gif'); this.navbars = new Array(this.numzls); for (var i = 0; i < this.navbars.length; ++i) this.navbars[i] = new HotImage(31, 116 + i * 12, 15, 6, 'images/clear.gif'); this.zin = new HotImage(30, 118 + 12 * this.numzls, 17, 17, 'images/zoomin.gif'); this.zout = new HotImage(30, 91, 17, 17, 'images/zoomout.gif'); this.navslider = new HotImage(29, 116, 19, 8, 'images/navslider.gif'); this.arrowtoggle = new HotImage(30, 150 + 12 * this.numzls, 17, 17, 'images/arrow_toggle.jpg', false); this.arrowtoggle.imag.title = 'Show arrows'; this.button_cancel = new HotImage(16, 176 + 12 * this.numzls, 44, 16, 'images/button_cancel.gif', false); this.button_submit = new HotImage(16, 200 + 12 * this.numzls, 44, 16, 'images/button_submit_g.gif', false); this.thumbback = new RegImage(this.width - 130, 10, 120, 120, 'images/clear.gif', false); this.thumbback.pngSrc('images/thumbback.png'); this.thumbborder = new Array(4); for (var i = 0; i < this.thumbborder.length; ++i) { this.thumbborder[i] = new RegImage(0, 0, 1, 1, 'images/clear.gif', false); this.thumbborder[i].pngSrc('images/gray.png'); } this.thumb = new RegImage((this.width - 20), 0, 10, 10, 'images/clear.gif'); this.dummyimg = new RegImage(-1, -1, 1, 1, 'images/clear.gif'); } /* private void AustinMap.loadBackArray() Loads the array that has as its indeces the picture object IDs, and as its values their location in the picture array, if this array is not already loaded. */ function AustinMap_loadBackArray() { if (this.backIndex.length != this.pics.length) { this.backIndex = new Array(this.pics.length); for(var i = 0; i < this.pics.length; ++i) this.backIndex[this.pics[i].id] = i; } } /* private void AustinMap.loadRadii() Load arrow radii information. */ function AustinMap_loadRadii() { this.arrowRadius = new Array(); this.plusRadius = new Array(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3); this.minArrow = new Array(30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 30000, 20000, 10000, 2500, 500, 250, 30); this.arrowRadius[0] = new Array(); this.arrowRadius[0][20000] = new Array(1, 1); this.arrowRadius[1] = new Array(); this.arrowRadius[1][20000] = new Array(1, 1); this.arrowRadius[2] = new Array(); this.arrowRadius[2][20000] = new Array(1, 1); this.arrowRadius[3] = new Array(); this.arrowRadius[3][20000] = new Array(1, 1); this.arrowRadius[4] = new Array(); this.arrowRadius[4][20000] = new Array(1, 1); this.arrowRadius[5] = new Array(); this.arrowRadius[5][20000] = new Array(1, 1); this.arrowRadius[6] = new Array(); this.arrowRadius[6][20000] = new Array(1, 1); this.arrowRadius[7] = new Array(); this.arrowRadius[7][20000] = new Array(1, 1); this.arrowRadius[8] = new Array(); this.arrowRadius[8][20000] = new Array(1, 1); this.arrowRadius[9] = new Array(); this.arrowRadius[9][20000] = new Array(1, 1); this.arrowRadius[10] = new Array(); this.arrowRadius[10][20000] = new Array(1, 1); this.arrowRadius[11] = new Array(); this.arrowRadius[11][20000] = new Array(1, 1); this.arrowRadius[12] = new Array(); this.arrowRadius[12][20000] = new Array(8, 3); this.arrowRadius[13] = new Array(); this.arrowRadius[13][20000] = new Array(10, 4); this.arrowRadius[13][10000] = new Array(8, 3); this.arrowRadius[14] = new Array(); this.arrowRadius[14][20000] = new Array(12, 5); this.arrowRadius[14][10000] = new Array(10, 4); this.arrowRadius[14][2500] = new Array(8, 3); this.arrowRadius[15] = new Array(); this.arrowRadius[15][20000] = new Array(15, 6); this.arrowRadius[15][10000] = new Array(12, 5); this.arrowRadius[15][2500] = new Array(10, 4); this.arrowRadius[15][500] = new Array(8, 3); this.arrowRadius[16] = new Array(); this.arrowRadius[16][20000] = new Array(16, 6); this.arrowRadius[16][10000] = new Array(15, 6); this.arrowRadius[16][2500] = new Array(12, 5); this.arrowRadius[16][500] = new Array(10, 4); this.arrowRadius[16][250] = new Array(8, 3); this.arrowRadius[17] = new Array(); this.arrowRadius[17][20000] = new Array(18, 7); this.arrowRadius[17][10000] = new Array(16, 6); this.arrowRadius[17][2500] = new Array(15, 6); this.arrowRadius[17][500] = new Array(12, 5); this.arrowRadius[17][250] = new Array(10, 4); this.arrowRadius[17][30] = new Array(8, 3); this.plusDiameter = new Array(); for (var i = 0; i < this.plusRadius.length; ++i) this.plusDiameter[i] = (this.plusRadius[i] * 2) + 1; } /* public void AustinMap.makeMapMode() Puts the map into the helper mode for adding alignment points to a new Map. */ function AustinMap_makeMapMode() { this.inMakeMapMode = true; } /* public void AustinMap.makeMapModeCancel() Cancels the make map mode. */ function AustinMap_makeMapModeCancel() { this.inMakeMapMode = false; } /* public void AustinMap.movePic(int picid) Puts the Map into move picture mode, in order to move the Picture with Object ID picid. */ function AustinMap_movePic(picid) { this.contributeCancel(); this.mode = 'move'; /* center and zoom */ this.zoom(this.maxzl); this.editPicID = picid; this.loadBackArray(); this.editPicIndex = this.backIndex[picid]; var pic = this.pics[this.editPicIndex]; this.scrollCenterTo( this.xToPixels(pic.center.x), this.yToPixels(pic.center.y) ); this.arrowtoggle.hot(true); this.button_cancel.hot(true); this.button_submit.hot(true); this.edit_plus.hot(true); this.edit_arrow.hot(true); this.button_submit.src('images/button_submit.gif'); if (!ie55down) { this.edit_plus.imag.style.cursor = 'default'; this.edit_arrow.imag.style.cursor = 'default'; this.button_submit.imag.style.cursor = 'pointer'; } this.toggleArrows(false); this.readyForSubmit = true; this.vis[0] = true; this.vis[1] = true; this.edit_point = pic.getPoint(this.maxzl); this.edit_degrees = pic.degrees; this.edit_range = pic.range; this.paint(); } /* public void AustinMap.paint() Draws this map. */ function AustinMap_paint() { /* still need to figure out if this.corner or this.cornerll is the "master" alignment reference; the other will then be aligned to it */ this.drawTiles(); this.drawNav(); if (this.inEditMode()) this.drawEdit(); } /* public double AustinMap.pixelsToX(int pixel, [int zoom]) Converts the internal pixel coordinate x to the mercator X coordinate. Uses current zl if zoom not specified. */ function AustinMap_pixelsToX(pixel) { var zoom = (arguments.length == 2) ? arguments[1] : this.zl; pixel *= this.TILE_SIDE_LL; pixel /= this.TILE_SIZE; pixel /= this.pows[zoom]; return pixel + this.X_LEFT; } /* public double AustinMap.pixelsToY(int pixel, [int zoom]) Converts the internal pixel coordinate y to the mercator Y coordinate. Uses current zl if zoom not specified. */ function AustinMap_pixelsToY(pixel) { var zoom = (arguments.length == 2) ? arguments[1] : this.zl; pixel *= this.TILE_SIDE_LL; pixel /= this.TILE_SIZE; pixel /= this.pows[zoom]; return this.Y_TOP - pixel; } //placeholder function AustinMap_refresh() { } /* private void AustinMap.refreshOffsets() Updates the offset values (after zoom or window resize.) */ function AustinMap_refreshOffsets() { return; this.offsetX = (this.side[this.zl] < this.width ) ? Math.round((this.width - this.side[this.zl]) / 2) : 0; this.offsetY = (this.side[this.zl] < this.height) ? Math.round((this.height - this.side[this.zl]) / 2) : 0; } /* public void AustinMap.reset() Resets the map to zoom level 0. */ function AustinMap_reset() { this.corner[0] = new Point(0, 0); this.zl = 0; this.paint(); } /* public void scroll(int xco, int yco) Scrolls the map left and down by (xco, yco). */ function AustinMap_scroll(xco, yco) { this.corner[this.zl].x += xco; this.corner[this.zl].y += yco; this.paint(); } /* public void scrollCenterTo(int xco, int yco) Scrolls the map smoothly to center on (xco, yco). */ function AustinMap_scrollCenterTo(xco, yco) { var xdiff = xco - Math.round(this.width / 2) - this.corner[this.zl].x; var ydiff = yco - Math.round(this.height / 2) - this.corner[this.zl].y; this.scrollCool(xdiff, ydiff); } /* public void AustinMap.scrollCool(int xco, int yco) Scrolls the map smoothly by (xco, yco). */ function AustinMap_scrollCool(xco, yco) { this.scrollProg( this.corner[this.zl].x, this.corner[this.zl].y, limit(this.corner[this.zl].x + xco, 0, this.side[this.zl] - this.width ), limit(this.corner[this.zl].y + yco, 0, this.side[this.zl] - this.height), 0); } /* private void AustinMap.scrollProg(int xstart, int ystart, int xnew, int ynew, int pass) Helper method for scrollCool; scrolls the map incrementally, then calls itself. */ function AustinMap_scrollProg(xstart, ystart, xnew, ynew, pass) { var totalpasses = 12; this.isHandling = true; if (pass == totalpasses) { this.corner[this.zl].x = xnew; this.corner[this.zl].y = ynew; this.isHandling = false; clearTimeout(time); this.paint(); this.enforceBounds(); return; } if ( (xnew == this.corner[this.zl].x) && (ynew == this.corner[this.zl].y) ) { clearTimeout(time); this.isHandling = false; this.triggerNext(); return; } var xamt = xnew - xstart; var yamt = ynew - ystart; var frac = Math.pow(Math.sin((pass / totalpasses) * Math.PI / 2), 2); this.corner[this.zl].x = xstart + roundBig(xamt * frac); this.corner[this.zl].y = ystart + roundBig(yamt * frac); this.paint(); ++pass; time = setTimeout('austinmap.scrollProg('+xstart+','+ystart+','+xnew+','+ynew+','+pass+')', 20); } /* public void AustinMap.setBounds(Point topleft, Point bottomright) Sets the bounds of this AustinMap, with the Point objects using LATITUDE/LONGITUDE coordinates, not pixel or Mercator project x/y. */ function AustinMap_setBounds(topleft, bottomright) { /* convert to mercator projection and store */ this.bounds_tl = new Point(topleft.x, latToY(topleft.y)); this.bounds_br = new Point(bottomright.x, latToY(bottomright.y)); } /* public void AustinMap.setCornerFromLL() Sets the corner for the current ZL based on the current value of the lat/long center point. */ function AustinMap_setCornerFromLL() { this.corner[this.zl].x = this.xToPixels(this.centerll.x) - Math.round(this.width / 2); this.corner[this.zl].y = this.yToPixels(this.centerll.y) - Math.round(this.height / 2); } /* public void AustinMap.setLocation(int picid) Puts the map into set location mode, with the Picture with Object ID picid being edited. */ function AustinMap_setLocation(picid) { this.mode = 'setlocation'; this.arrowtoggle.hot(true); this.button_cancel.hot(true); this.button_submit.hot(true); if (!ie55down) this.button_submit.imag.style.cursor = 'default'; this.toggleArrows(false); this.editPicID = picid; } /* public void AustinMap.setMapCapacity(int val) Sets the array size for the maps for this AustinMap. */ function AustinMap_setMapCapacity(val) { if (val > this.maps.length) this.maps.length = val; } /* public void AustinMap.setPicCapacity(int val) Sets the array size for the pics for this AustinMap. */ function AustinMap_setPicCapacity(val) { if (val > this.pics.length) this.pics.length = val; } /* private static double AustinMap_sortByX(Picture pic1, Picture 2) A helper function called by javascript's sort method; used to sort an array of pictures by their x-coordinate. */ function AustinMap_sortByX(pic1, pic2) { return (pic1.center.x - pic2.center.x); } /* public void AustinMap.switchMap() Switches the current map to be whatever is selected in the map menu, and repaints. */ function AustinMap_switchMap() { var mapid = this.mapselect.obj.value; this.mapcurrentidx = mapid; var theMap = this.maps[mapid]; var frame = new Square( this.corner[this.zl].y, this.corner[this.zl].x + this.width, this.corner[this.zl].y + this.height, this.corner[this.zl].x ); this.paint(); if (!theMap.inSquare(frame)) /* move focus if the map is not within the current view frame */ { var xCenter = (theMap.xLeft + theMap.xRight) / 2; var yCenter = (theMap.yTop + theMap.yBottom) / 2; setTimeout('aMap().scrollCenterTo(aMap().xToPixels(' + xCenter + '), aMap().yToPixels(' + yCenter + '))', 600); } } function tileInspect() { var amap = aMap(); if (!amap) { alert('no amap detected'); return; } var msg1 = ''; var msg2 = ''; var xl = Math.max(amap.sqx, amap.sqxcapacity); var yl = Math.max(amap.sqy, amap.sqycapacity); for (var i = 0; i < xl; ++i) { for (var j = 0; j < yl; ++j) { msg1 += amap.tileimgs[i][j].toString() + "\n"; msg2 += amap.plusimgs[i][j].toString() + "\n"; } } alert ('map (width, height): (' + amap.width + ', ' + amap.height + ")\n" + 'sqx, sqy: ' + amap.sqx + ', ' + amap.sqy + "\n" + 'sqxcapacity, sqycapacity: ' + amap.sqxcapacity + ', ' + amap.sqycapacity + "\n" + msg1 + msg2); } /* public void AustinMap.toggleArrows([boolean val]) Toggles the arrows layer on and off. val specifies on or off, if passed. */ function AustinMap_toggleArrows() { this.toggle_arrows = !this.toggle_arrows; if (arguments.length == 1) this.toggle_arrows = arguments[0]; if (this.toggle_arrows) { for (var i = 0; i < this.sqx; ++i) { for (var j = 0; j < this.sqy; ++j) this.plusimgs[i][j].vis(true); } this.arrowtoggle.imag.title = 'Hide arrows'; } else if (!this.toggle_arrows) { this.arrowtoggle.imag.title = 'Show arrows'; for (var i = 0; i < this.sqx; ++i) { for (var j = 0; j < this.sqy; ++j) this.plusimgs[i][j].vis(false); } } } /* private void AustinMap.trigger([Object val]) Triggers the next event in the Queue. If any val is passed, the isHandling check is overridden. */ function AustinMap_trigger() { if (this.isHandling && (arguments.length == 0)) return; this.isHandling = true; if (!this.events.hasNext()) { this.isHandling = false; return; } var nextEvent = this.events.dequeue(); var evtype = nextEvent[0]; if (evtype == 'scroll') { this.scrollCool(nextEvent[1], nextEvent[2]); return; } else if (evtype == 'highlightpic') { this.highlightPicture(nextEvent[1]); return; } else if (evtype == 'zoom') this.zoom(nextEvent[1]); else if (evtype == 'zoomin') this.zoomIn(); else if (evtype == 'zoominclick') this.zoomInClick(nextEvent[1], nextEvent[2]); else if (evtype == 'zoomout') this.zoomOut(); this.enforceBounds(); } /* public void AustinMap.triggerEvent([vals]) Adds an event specified by the passed arguments to the Queue. */ function AustinMap_triggerEvent() { if (this.isHandling && arguments[0] != 'highlightpic') return; var pass = new Array(arguments.length); for (var i = 0; i < arguments.length; ++i) pass[i] = arguments[i]; this.events.enqueue(pass); this.trigger(); } /* private void AustinMap.triggerNext() Triggers the next event from the Queue. */ function AustinMap_triggerNext() { this.isHandling = false; //this.events.clear(); this.trigger(); } /* public int AustinMap.xToPixels(double x, [int zoom]) Converts the x coordinate to this AustinMap's pixel coordinates. Uses current zl if zoom not specified. */ function AustinMap_xToPixels(x) { var zoom = (arguments.length == 2) ? arguments[1] : this.zl; var longOffset = x - this.X_LEFT; var zeroTilePosition = longOffset / this.TILE_SIDE_LL; var xPixelPos = zeroTilePosition * this.TILE_SIZE * this.pows[zoom]; return Math.round(xPixelPos); } /* public int AustinMap.yToPixels(double mercatorY, [int zoom]) Converts the y coordinate to this AustinMap's pixel coordinates. Uses current zl if zoom not specified. */ function AustinMap_yToPixels(mercatorY) { var zoom = (arguments.length == 2) ? arguments[1] : this.zl; var latOffset = this.Y_TOP - mercatorY; var zeroTilePosition = latOffset / this.TILE_SIDE_LL; if (!(zeroTilePosition >= 0 && zeroTilePosition <= 1)) alert ('poop'); var yPixelPos = zeroTilePosition * this.TILE_SIZE * this.pows[zoom]; return Math.round(yPixelPos); } /* public void AustinMap.zoom(int toLevel) Zooms the map in to toLevel. */ function AustinMap_zoom(toLevel) { this.zoomToPoint(Math.round(this.width / 2), Math.round(this.height / 2), toLevel); } /* public void AustinMap.zoomIn() Zooms the map in by one level. */ function AustinMap_zoomIn() { this.zoom(this.zl + 1); } /* public void AustinMap.zoomInClick(int x, int y) Zooms the map in, centered on the specified click. */ function AustinMap_zoomInClick(x, y) { this.zoomToPoint(x, y, this.zl + 1); } /* public void AustinMap.zoomOut() Zooms the map out by one level. */ function AustinMap_zoomOut() { this.zoom(this.zl - 1); } /* public void AustinMap.zoomOutClick(int x, int y) Zooms the map out, centered on the specified click. */ function AustinMap_zoomOutClick(x, y) { this.zoomToPoint(x, y, this.zl - 1); } /* public void AustinMap.zoomToPoint(int x, int y, int toLevel) Zooms the map centered on the specified point, to toLevel. */ function AustinMap_zoomToPoint(x, y, toLevel) { toLevel = limit(toLevel, this.minzl, this.maxzl); if (toLevel == this.zl) return; if (toLevel > this.zl) { for (var i = this.zl; i < toLevel; ++i) { this.corner[this.zl + 1].x = 2 * this.corner[this.zl].x + x; this.corner[this.zl + 1].y = 2 * this.corner[this.zl].y + y; ++this.zl; this.refreshOffsets(); this.corner[this.zl].x += this.offsetX; this.corner[this.zl].y += this.offsetY; } } else if (toLevel < this.zl) { for (var i = this.zl; i > toLevel; --i) { this.corner[this.zl - 1].x = Math.round((this.corner[this.zl].x - x) / 2); this.corner[this.zl - 1].y = Math.round((this.corner[this.zl].y - y) / 2); --this.zl; } } this.paint(); this.triggerNext(); } function AustinMapSwitchMap() { aMap().switchMap(); } function inspect(elm) { var str = ''; if (elm.getAttribute) { for (var i in elm) { if (elm.getAttribute(i) != null) str += i + ': ' + elm.getAttribute(i) + "; "; } } else { for (var i in elm) { str += i + ', '; } } alert(str); } /* function void init() Initializes the map program. */ function init() { var initsuccess = init_determineEnvironment() && init_displayBrowserWarnings() && init_setEventHandler() && init_setMapDivStyle(); if (!initsuccess) return; austinmap = new AustinMap(10, 17); austinmap.zl = 11; austinmap.setBounds(new Point(-98.1, 30.6), new Point(-97.5, 30.0)); austinmap.setPicCapacity(); austinmap.addPic(new Picture(1, -97.854707780714, 32.026253608813, 321, 30, "061.jpg", 66, 100)); austinmap.addPic(new Picture(2, -97.77233808945, 31.914156652966, 130, 30, "50.jpg", 66, 100)); austinmap.addPic(new Picture(3, -97.778848219102, 31.981592581806, 324, 2500, "183.jpg", 100, 66)); austinmap.addPic(new Picture(4, -97.819122749994, 32.000951248363, 6, 250, "14.jpg", 66, 100)); austinmap.addPic(new Picture(5, -97.874762290275, 31.942042020575, 162, 20000, "IMG_0527.JPG", 75, 100)); austinmap.addPic(new Picture(7, -97.777027589623, 31.97445459428, 168, 10000, "IMG_0142.jpg", 75, 100)); austinmap.addPic(new Picture(8, -97.774158718929, 31.844832073731, 172, 10000, "DSCF0084.JPG", 100, 75)); austinmap.addPic(new Picture(9, -97.814488420412, 32.005422905918, 125, 250, "IMG_0672.JPG", 100, 75)); austinmap.addPic(new Picture(10, -97.788503072398, 31.941069921107, 190, 250, "IMG_0702.JPG", 75, 100)); austinmap.addPic(new Picture(11, -97.774296645405, 31.911101483208, 265, 250, "IMG_0792.JPG", 100, 75)); austinmap.addPic(new Picture(12, -97.774848351307, 31.89588118296, 190, 0, "IMG_1117.JPG", 75, 100)); austinmap.addPic(new Picture(13, -97.68439616857, 31.930737892471, 235, 250, "IMG_1802.JPG", 75, 100)); austinmap.addPic(new Picture(14, -97.737690958765, 31.807781196848, 140, 30, "IMG_2178.JPG", 75, 100)); austinmap.addPic(new Picture(15, -97.735484135154, 31.799476689961, 305, 250, "IMG_2360.JPG", 100, 75)); austinmap.addPic(new Picture(16, -97.798488949235, 32.001978896372, 120, 0, "ladder.jpg", 100, 67)); austinmap.addPic(new Picture(17, -97.814460835117, 31.996257396644, 165, 2500, "P1010006.JPG", 75, 100)); austinmap.addPic(new Picture(18, -97.796695905052, 31.879105523561, 235, 500, "P1010017.JPG", 100, 75)); austinmap.addPic(new Picture(19, -97.741442558903, 31.80630916051, 349, 30, "P1010048.JPG", 100, 75)); austinmap.addPic(new Picture(20, -97.740173635327, 31.80364283054, 80, 250, "P1010093.JPG", 75, 100)); austinmap.addPic(new Picture(21, -97.741773582444, 31.81475253875, 70, 0, "P1010142.JPG", 100, 75)); austinmap.addPic(new Picture(22, -97.814184982165, 31.975982179159, 12, 30, "P1100012.JPG", 100, 75)); austinmap.addPic(new Picture(23, -97.736063426352, 31.989147183389, 200, 500, "P3252822.JPG", 100, 75)); austinmap.addPic(new Picture(24, -97.79846136394, 32.001951122102, 70, 2500, "westwood2.jpg", 100, 75)); austinmap.addPic(new Picture(25, -97.686189212754, 31.927682722713, 151, 250, "IMG_1836.JPG", 75, 100)); austinmap.addPic(new Picture(26, -97.774489742471, 31.9096016726, 190, 20000, "panoramic2.jpg", 100, 21)); austinmap.addPic(new Picture(27, -97.774489742471, 31.9096016726, 112, 20000, "panoramic3.jpg", 100, 42)); austinmap.addPic(new Picture(28, -97.774489742471, 31.9096016726, 129, 2500, "panoramic1.jpg", 100, 37)); austinmap.addPic(new Picture(29, -97.74191150892, 31.802670731071, 243, 30, "18.jpg", 100, 66)); austinmap.addPic(new Picture(30, -97.828556920929, 31.873161829669, 317, 2500, "21.jpg", 66, 100)); austinmap.addPic(new Picture(31, -97.813633276263, 31.996840656325, 102, 250, "P1010052.JPG", 100, 75)); austinmap.addPic(new Picture(32, -97.81319191154, 31.996312945185, 186, 250, "fire_truck.jpg", 100, 68)); austinmap.addPic(new Picture(33, -97.742435629528, 31.788255884668, 163, 250, "UTandmore_008.jpg", 100, 75)); austinmap.addPic(new Picture(34, -97.741001194181, 31.788117013315, 77, 2500, "UTandmore_007.jpg", 100, 75)); austinmap.addPic(new Picture(35, -97.796557978576, 31.879272169184, 268, 2500, "AustinEaster_018.jpg", 100, 75)); austinmap.addPic(new Picture(36, -97.745194159041, 31.775090880438, 72, 10000, "AustinEaster_009.jpg", 100, 75)); austinmap.addPic(new Picture(37, -97.740228805917, 31.806253611969, 83, 250, "P3230026.JPG", 100, 75)); austinmap.addPic(new Picture(38, -97.738408176438, 31.796560391555, 161, 30, "UTandmore_005.jpg", 75, 100)); austinmap.addPic(new Picture(39, -97.874514022618, 31.942319763281, 217, 250, "MarySchubert_004.jpg", 100, 75)); austinmap.addPic(new Picture(40, -97.743621797218, 31.780006926321, 53, 2500, "AustinEaster_003.jpg", 66, 100)); austinmap.addPic(new Picture(41, -97.733884188037, 31.801170920463, 152, 30, "UTandmore_015.jpg", 100, 75)); austinmap.addPic(new Picture(42, -97.740615000049, 31.782145545152, 155, 250, "Image_1.JPG", 100, 75)); austinmap.addPic(new Picture(43, -97.74078051182, 31.782173319422, 180, 250, "foto_2004-05-16__14.JPG", 82, 100)); austinmap.addPic(new Picture(44, -97.773800110092, 31.781256768495, 352, 30, "traillights1.jpg", 74, 100)); austinmap.addPic(new Picture(45, -97.73256009387, 31.786061717296, 217, 10000, "CorpusChristi0405_004.jpg", 100, 75)); austinmap.addPic(new Picture(46, -97.723622458248, 31.806392483322, 203, 20000, "CorpusChristi0405_002.jpg", 100, 75)); austinmap.addPic(new Picture(47, -97.871065860727, 31.686740925892, 314, 30, "wildflowercenter_013.jpg", 100, 75)); austinmap.addPic(new Picture(48, -97.740063294146, 31.804559381467, 31, 0, "P3230027.jpg", 100, 73)); austinmap.addPic(new Picture(49, -97.738959882341, 31.794532869807, 255, 2500, "UTandmore_003.jpg", 100, 75)); austinmap.addPic(new Picture(50, -97.739566758834, 31.800837629216, 90, 2500, "P3230025.jpg", 100, 61)); austinmap.addPic(new Picture(51, -97.739539173539, 31.800893177757, 264, 10000, "P3230024.jpg", 100, 66)); austinmap.addPic(new Picture(52, -97.900885564764, 31.950374301733, 244, 30, "foto_2004-09-30__11.jpg", 100, 75)); austinmap.addPic(new Picture(53, -97.8187894821167, 31.9785726070404, 353, 2500, "foto_2004-10-02__14.jpg", 100, 75)); austinmap.addPic(new Picture(54, -97.739318491178, 31.803503959187, 342, 10000, "fromtower.jpg", 100, 75)); austinmap.addPic(new Picture(55, -97.739290905883, 31.803531733458, 254, 20000, "fromtower2.jpg", 100, 75)); austinmap.addPic(new Picture(56, -97.739980538261, 31.804642704279, 53, 30, "turtlepond.jpg", 75, 100)); austinmap.addPic(new Picture(57, -97.739621929424, 31.805420383853, 175, 250, "on24th.jpg", 75, 100)); austinmap.addPic(new Picture(58, -97.741359803018, 31.807531228413, 264, 0, "creamvintage.jpg", 100, 75)); austinmap.addPic(new Picture(59, -97.740863267705, 31.788311433209, 240, 30, "capitoltree.jpg", 75, 100)); austinmap.addPic(new Picture(60, -97.746187229666, 31.776007431365, 50, 10000, "fromtownlake.jpg", 100, 75)); austinmap.addPic(new Picture(61, -97.743704553104, 31.774618717839, 157, 2500, "fromtownlake2.jpg", 100, 75)); austinmap.addPic(new Picture(62, -97.772503601221, 31.785117392098, 243, 30, "tanaguchi.jpg", 100, 75)); austinmap.addPic(new Picture(63, -97.766103812751, 31.777618339056, 241, 250, "umlauf.jpg", 75, 100)); austinmap.addPic(new Picture(64, -97.766324495112, 31.776868433752, 241, 0, "umlauf2.jpg", 100, 75)); austinmap.addPic(new Picture(65, -97.774186304224, 31.844804299461, 180, 10000, "mtbonnell14.jpg", 100, 75)); austinmap.addPic(new Picture(66, -97.796640734461, 31.879244394914, 262, 500, "360bridge05.jpg", 100, 75)); austinmap.addPic(new Picture(67, -97.7810454368591, 31.933286190033, 335, 250, "oldspicewood01.jpg", 100, 75)); austinmap.addPic(new Picture(68, -97.874762290275, 31.942014246305, 146, 20000, "fromoasis.jpg", 100, 75)); austinmap.addPic(new Picture(69, -97.794544252031, 32.006339456845, 86, 250, "starbucks.jpg", 100, 75)); austinmap.addPic(new Picture(70, -97.790240945991, 31.992313450229, 193, 250, "andersonmilllight.jpg", 100, 75)); austinmap.addPic(new Picture(71, -97.800833699321, 32.021476434282, 177, 250, "barnesnoble.jpg", 100, 75)); austinmap.addPic(new Picture(72, -97.8178131580353, 31.9787871837616, 200, 500, "sky.jpg", 100, 75)); austinmap.addPic(new Picture(74, -97.81727453522, 31.974926756879, 76, 2500, "snow.jpg", 100, 75)); austinmap.addPic(new Picture(75, -97.900885564764, 31.949846590593, 214, 10000, "windypoint.jpg", 100, 75)); austinmap.addPic(new Picture(76, -97.819977894143, 31.981342613371, 25, 30, "waterfall.jpg", 75, 100)); austinmap.addPic(new Picture(77, -97.751428435741, 31.774479846486, 236, 0, "citywindows.jpg", 100, 75)); austinmap.addPic(new Picture(78, -97.832998153445, 31.986675273312, 245, 30, "foto_2004-01-15__01.jpg", 100, 75)); austinmap.addPic(new Picture(79, -97.8188538551331, 31.9784331321716, 196, 0, "foto_2003-08-27__73.jpg", 75, 100)); austinmap.addPic(new Picture(80, -97.74185633833, 31.785450683345, 75, 2500, "Capitol1.jpg", 100, 52)); austinmap.addPic(new Picture(81, -97.741139120656, 31.787700399257, 69, 2500, "Capitol2.jpg", 73, 100)); austinmap.addPic(new Picture(82, -97.874651949094, 31.942236440469, 149, 20000, "foto_2003-08-04__25.jpg", 100, 75)); austinmap.addPic(new Picture(83, -97.767676174573, 31.781034574331, 16, 250, "traillights5.jpg", 100, 67)); austinmap.addPic(new Picture(84, -97.773882865978, 31.781312317036, 0, 30, "traillights3.jpg", 100, 75)); austinmap.addPic(new Picture(85, -97.8189074993134, 31.9786584377289, 279, 0, "foto_2004-07-15__04.jpg", 100, 70)); austinmap.addPic(new Picture(86, -97.8188753128052, 31.9784009456635, 0, 0, "foto_2004-02-13__28.jpg", 75, 100)); austinmap.addPic(new Picture(87, -97.820584770636, 31.978315217883, 262, 250, "snow03.jpg", 100, 75)); austinmap.addPic(new Picture(88, -97.8188538551331, 31.9786369800568, 0, 0, "Tobi_004.jpg", 100, 75)); austinmap.addPic(new Picture(89, -97.820115820619, 31.973538043353, 292, 10000, "IMG_3220.jpg", 100, 75)); austinmap.addPic(new Picture(90, -97.743842479579, 31.827028766323, 198, 500, "IMG_2760.jpg", 100, 75)); austinmap.addPic(new Picture(91, -97.752311165185, 31.940875501213, 357, 500, "sunrise.jpg", 100, 75)); austinmap.addPic(new Picture(92, -97.740973608886, 31.788228110397, 73, 500, "capitol3.jpg", 75, 100)); austinmap.addPic(new Picture(93, -97.772972551238, 31.785089617828, 312, 30, "ponte.jpg", 100, 75)); austinmap.addPic(new Picture(94, -97.770269192316, 31.777757210409, 101, 500, "IMG_3250.jpg", 100, 75)); austinmap.addPic(new Picture(95, -97.8026543288, 31.960123070688, 350, 2500, "IMG_2719.jpg", 100, 75)); austinmap.addPic(new Picture(97, -97.901657953028, 31.950929787144, 177, 2500, "F-ANWzlsxaNGrgwmQLVq_-bg.jpg", 100, 66)); austinmap.addPic(new Picture(98, -97.901464855962, 31.949902139134, 222, 10000, "F-ANWzlsxaNGrgw6QLVq_-cg.jpg", 100, 66)); austinmap.addPic(new Picture(99, -97.901602782438, 31.950540947357, 191, 0, "F-ANWzlsxaNGrgxUQLVq_-eg.jpg", 100, 66)); austinmap.addPic(new Picture(101, -97.740146050032, 31.790672246204, 252, 30, "PC140213.jpg", 100, 75)); austinmap.addPic(new Picture(102, -97.769579559937, 31.782339965046, 265, 30, "12.jpg", 100, 74)); austinmap.addPic(new Picture(103, -97.740063294146, 31.790338954957, 193, 250, "PC140211.jpg", 75, 100)); austinmap.addPic(new Picture(104, -97.784282522242, 31.81580796103, 130, 500, "PC140203.jpg", 100, 75)); austinmap.addPic(new Picture(105, -97.775869007227, 31.89696437951, 325, 10000, "132473165HXiCNQ_ph.jpg", 100, 75)); austinmap.addPic(new Picture(106, -97.764476280338, 31.781673382553, 177, 30, "7.jpg", 100, 74)); austinmap.addPic(new Picture(107, -97.74502864727, 31.946208161154, 93, 2500, "IMG_3357.jpg", 100, 75)); austinmap.addPic(new Picture(108, -97.753111138744, 31.966288958745, 151, 500, "IMG_3358.jpg", 100, 75)); austinmap.addPic(new Picture(109, -97.761524653759, 31.971038359005, 150, 2500, "IMG_3362.jpg", 100, 75)); austinmap.addPic(new Picture(110, -97.770158851135, 31.975982179159, 152, 500, "IMG_3365.jpg", 100, 75)); austinmap.addPic(new Picture(111, -97.795316640295, 32.015449417578, 177, 500, "IMG_3390.jpg", 100, 75)); austinmap.addPic(new Picture(112, -97.7964200521, 32.01503280352, 146, 250, "IMG_3392.jpg", 100, 75)); austinmap.addPic(new Picture(113, -97.736173767533, 31.914239975778, 76, 500, "IMG_3416.jpg", 100, 75)); austinmap.addPic(new Picture(115, -97.770351948201, 31.77781275895, 184, 250, "IMG_3249.jpg", 100, 75)); austinmap.addPic(new Picture(116, -97.792696037258, 31.897908704708, 293, 250, "IMG_3238.jpg", 100, 75)); austinmap.addPic(new Picture(117, -97.792696037258, 31.897908704708, 12, 20000, "panoramic.jpg", 100, 27)); austinmap.addPic(new Picture(118, -97.793413254931, 31.900019549268, 218, 20000, "IMG_3234.jpg", 100, 75)); austinmap.addPic(new Picture(119, -97.793330499046, 31.899908452186, 172, 20000, "IMG_3231.jpg", 100, 75)); austinmap.addPic(new Picture(120, -97.793413254931, 31.899964000727, 150, 20000, "IMG_3232.jpg", 100, 75)); austinmap.addPic(new Picture(121, -97.794958031458, 31.900019549268, 157, 20000, "IMG_3228.jpg", 100, 75)); austinmap.addPic(new Picture(122, -97.79835102276, 31.917933953758, 42, 10000, "IMG_3240.jpg", 100, 75)); austinmap.addPic(new Picture(123, -97.798378608055, 31.917906179487, 266, 250, "IMG_3242.jpg", 100, 75)); austinmap.addPic(new Picture(124, -97.757717883031, 31.922072320066, 1, 2500, "IMG_3243_2.jpg", 100, 75)); austinmap.addPic(new Picture(125, -97.824777735496, 31.828473028391, 357, 20000, "P7200033.jpg", 100, 40)); austinmap.addPic(new Picture(126, -97.874403681438, 31.945069416063, 210, 10000, "IMG_3403.jpg", 100, 75)); austinmap.addPic(new Picture(127, -97.704064483999, 31.924738650037, 155, 250, "IMG_3424.jpg", 100, 75)); austinmap.addPic(new Picture(128, -97.70944361655, 31.930960086635, 225, 250, "IMG_3474.jpg", 100, 75)); austinmap.addPic(new Picture(129, -97.708533301811, 31.931959960374, 66, 250, "IMG_3477.jpg", 100, 75)); austinmap.addPic(new Picture(130, -97.749497465081, 31.877577938682, 248, 500, "IMG_3522.jpg", 100, 75)); austinmap.addPic(new Picture(131, -97.741497729493, 31.78097902579, 146, 2500, "prom_-_frost_bank.jpg", 66, 100)); austinmap.addPic(new Picture(132, -97.771676042367, 31.783506484408, 149, 0, "071805.jpg", 100, 66)); austinmap.addPic(new Picture(133, -97.724532772987, 31.838860605568, 39, 500, "053005.jpg", 100, 66)); austinmap.addPic(new Picture(134, -97.735015185137, 31.778534889983, 162, 10000, "110104.jpg", 100, 66)); austinmap.addPic(new Picture(135, -97.737497861699, 31.835333273211, 63, 2500, "102604.jpg", 66, 100)); austinmap.addPic(new Picture(138, -97.754076624073, 31.783589807219, 148, 30, "3rd1-01.jpg", 100, 66)); austinmap.addPic(new Picture(139, -97.756504130045, 31.785339586262, 153, 30, "tips-urban_austin-01.jpg", 100, 66)); austinmap.addPic(new Picture(140, -97.804888737706, 31.836999729442, 180, 500, "IMG_0061.jpg", 100, 75)); austinmap.addPic(new Picture(141, -97.793109816685, 31.95759561207, 225, 250, "oldspicewood12.jpg", 75, 100)); austinmap.addPic(new Picture(142, -97.741663241264, 31.809836492867, 174, 30, "kerbey.jpg", 75, 100)); austinmap.addPic(new Picture(143, -97.739290905883, 31.802920699506, 90, 250, "utmainbuildinggoodview.jpg", 100, 81)); austinmap.addPic(new Picture(144, -97.735180696908, 31.802976248047, 327, 2500, "ATM_2004_65.jpg", 100, 74)); austinmap.addPic(new Picture(145, -97.740118464737, 31.809558750162, 173, 10000, "Sunset_in_Austin_(1).jpg", 100, 75)); austinmap.addPic(new Picture(146, -97.767731345163, 31.783589807219, 129, 2500, "ACL_Day_1_panoramic.jpg", 100, 8)); austinmap.addPic(new Picture(147, -97.974179693929, 31.96076187891, 185, 250, "PA020061.jpg", 100, 75)); austinmap.addPic(new Picture(148, -97.97440037629, 31.956956803848, 79, 500, "PA020057.jpg", 100, 75)); austinmap.addPic(new Picture(149, -97.796475222691, 31.879105523561, 262, 10000, "360.jpg", 100, 65)); austinmap.addPic(new Picture(150, -97.908554276811, 31.963039369094, 151, 10000, "IMG_3019.jpg", 100, 75)); austinmap.addPic(new Picture(151, -97.742187361871, 31.805170415419, 0, 2500, "Sophomore_year_008.jpg", 100, 75)); austinmap.addPic(new Picture(152, -97.741359803018, 31.778757084148, 128, 2500, "austin_skyline.jpg", 100, 75)); austinmap.addPic(new Picture(153, -97.737966811716, 31.802920699506, 268, 2500, "P9140001.jpg", 100, 75)); austinmap.addPic(new Picture(154, -97.746766520863, 31.782673256292, 201, 0, "IMG_2693.jpg", 100, 75)); austinmap.addPic(new Picture(155, -97.737084082272, 31.821529460759, 157, 250, "IMG_3974.jpg", 100, 75)); austinmap.addPic(new Picture(156, -97.701250783896, 31.77622962553, 198, 30, "IMG_0489.jpg", 100, 75)); austinmap.addPic(new Picture(157, -97.742077020691, 31.796782585719, 145, 30, "greengarage.jpg", 100, 75)); austinmap.addPic(new Picture(158, -97.744421770777, 31.7894501783, 265, 2500, "IMG_4069.jpg", 75, 100)); austinmap.addPic(new Picture(159, -97.745828620829, 31.785117392098, 336, 500, "IMG_4075.jpg", 75, 100)); austinmap.addPic(new Picture(160, -97.745718279648, 31.785311811992, 163, 250, "IMG_4078.jpg", 100, 75)); austinmap.addPic(new Picture(161, -97.747952688554, 31.776701788129, 170, 2500, "IMG_4079.jpg", 100, 75)); austinmap.addPic(new Picture(163, -97.740946023591, 31.788255884668, 79, 2500, "capitol.jpg", 75, 100)); austinmap.addPic(new Picture(164, -97.737828885241, 31.797365845401, 204, 250, "Bob_bullock.jpg", 100, 64)); austinmap.addPic(new Picture(165, -97.739677100014, 31.78414529263, 217, 2500, "frost_bank_tower.jpg", 61, 100)); austinmap.addPic(new Picture(166, -97.739677100014, 31.801198694733, 85, 500, "UT.jpg", 75, 100)); austinmap.addPic(new Picture(167, -97.745332085516, 31.777118402186, 55, 500, "One_congress_plaza.jpg", 75, 100)); austinmap.addPic(new Picture(169, -97.911147294553, 31.942847474421, 56, 10000, "39.jpg", 100, 75)); austinmap.addPic(new Picture(170, -97.911864512227, 31.942541957445, 349, 10000, "30.jpg", 100, 75)); austinmap.addPic(new Picture(171, -97.735373793974, 31.803587281999, 189, 0, "102905_142506.jpg", 100, 75)); austinmap.addPic(new Picture(172, -97.737332349928, 31.803226216482, 178, 0, "102905_143438.jpg", 100, 75)); austinmap.addPic(new Picture(173, -97.740642585344, 31.810030912761, 213, 0, "080405_162444.jpg", 100, 75)); austinmap.addPic(new Picture(174, -97.739456417653, 31.806392483322, 88, 0, "070105_232430.jpg", 75, 100)); austinmap.addPic(new Picture(175, -97.838928991898, 31.745344636704, 190, 2500, "070605_194544.jpg", 100, 75)); austinmap.addPic(new Picture(176, -97.750683632772, 31.925044167013, 214, 30, "111405_200512.jpg", 100, 75)); austinmap.addPic(new Picture(177, -97.735235867498, 31.802254117013, 325, 0, "111904252_G.jpg", 100, 75)); austinmap.addPic(new Picture(178, -97.738932297046, 31.781701156823, 325, 0, "110505_234516.jpg", 100, 75)); austinmap.addPic(new Picture(179, -97.740063294146, 31.80419831595, 263, 30, "18996549_NewFolderAus1005.jpg", 100, 66)); austinmap.addPic(new Picture(180, -97.740421902983, 31.804781575631, 72, 30, "18996605_NewFolderAus1062.jpg", 66, 100)); austinmap.addPic(new Picture(181, -97.741608070674, 31.804392735844, 262, 30, "27475312_Ausday020.jpg", 65, 100)); austinmap.addPic(new Picture(182, -97.750462950411, 31.759537288943, 158, 30, "36512160_Aus111004DSC_0087.jpg", 100, 65)); austinmap.addPic(new Picture(183, -97.750049170984, 31.760676034035, 160, 30, "36512172_Aus111004DSC_0099.jpg", 100, 65)); austinmap.addPic(new Picture(184, -97.728918834913, 31.802420762636, 117, 250, "LBJ_library.jpg", 100, 71)); austinmap.addPic(new Picture(185, -97.74615964437, 31.774202103781, 0, 30, "bat_sculpture.jpg", 100, 68)); austinmap.addPic(new Picture(186, -97.744532111958, 31.777340596351, 66, 500, "CRW_2296.jpg", 100, 80)); austinmap.addPic(new Picture(187, -97.745001061975, 31.776590691046, 260, 500, "Congress_St__Bridge.jpg", 100, 68)); austinmap.addPic(new Picture(188, -97.745442426697, 31.774396523675, 72, 0, "CRW_2280.jpg", 100, 80)); austinmap.addPic(new Picture(189, -97.744587282548, 31.768702798217, 315, 30, "CRW_2272.jpg", 100, 80)); austinmap.addPic(new Picture(191, -97.856280142536, 32.022892922079, 177, 500, "93.jpg", 100, 66)); austinmap.addPic(new Picture(192, -97.854762951304, 32.025364832156, 192, 500, "01.jpg", 100, 66)); austinmap.addPic(new Picture(193, -97.774627668946, 31.909684995411, 318, 30, "40.jpg", 66, 100)); austinmap.addPic(new Picture(194, -97.774738010127, 31.851664544281, 266, 30, "bonnellcar.jpg", 100, 74)); austinmap.addPic(new Picture(195, -97.817991752893, 31.993646615214, 39, 250, "street.jpg", 100, 75)); austinmap.addPic(new Picture(196, -97.797137269774, 32.001367862421, 203, 250, "P1080004.jpg", 75, 100)); austinmap.addPic(new Picture(197, -97.735042770432, 31.995618588422, 202, 500, "27320576_P3252819.jpg", 100, 75)); austinmap.addPic(new Picture(198, -97.730767049687, 31.802392988366, 170, 2500, "hookem50.jpg", 82, 100)); austinmap.addPic(new Picture(199, -97.740201220622, 31.803031796588, 181, 500, "Copy_of_DSC03583.jpg", 100, 75)); austinmap.addPic(new Picture(200, -97.734573820415, 31.802559633989, 113, 30, "Copy_of_DSC03523.jpg", 100, 75)); austinmap.addPic(new Picture(201, -97.734242796874, 31.802531859719, 220, 0, "Copy_of_DSC03534.jpg", 100, 75)); austinmap.addPic(new Picture(202, -97.73766337347, 31.804226090221, 262, 250, "Copy_of_DSC03604.jpg", 100, 75)); austinmap.addPic(new Picture(203, -97.733442823315, 31.80258740826, 163, 500, "DSC05429.jpg", 100, 75)); austinmap.addPic(new Picture(204, -97.733304896839, 31.80258740826, 166, 500, "DSC05439.jpg", 100, 75)); austinmap.addPic(new Picture(205, -97.733608335085, 31.802642956801, 31, 250, "DSC05485.jpg", 100, 75)); austinmap.addPic(new Picture(206, -97.734932429252, 31.797032554154, 246, 0, "DSC05526.jpg", 100, 75)); austinmap.addPic(new Picture(207, -97.732532508575, 31.795782711981, 98, 0, "DSC05567.jpg", 100, 75)); austinmap.addPic(new Picture(208, -97.79738553743, 31.880022074489, 300, 30, "Austin15.jpg", 100, 66)); austinmap.addPic(new Picture(209, -97.730215343784, 31.796921457072, 141, 0, "DSC05591.jpg", 100, 75)); austinmap.addPic(new Picture(210, -97.738242664668, 31.800254369535, 201, 30, "Copy_of_DSC03423.jpg", 100, 75)); austinmap.addPic(new Picture(211, -97.74293216484, 31.783478710137, 335, 30, "CongressAve12.jpg", 100, 80)); austinmap.addPic(new Picture(212, -97.735484135154, 31.802976248047, 338, 30, "Copy_of_DSC02653.jpg", 100, 75)); austinmap.addPic(new Picture(213, -97.742408044233, 31.782089996611, 156, 2500, "CongressAve33.jpg", 100, 80)); austinmap.addPic(new Picture(214, -97.742518385413, 31.789394629759, 27, 2500, "19949822_tx_capitol0009.jpg", 100, 75)); austinmap.addPic(new Picture(215, -97.74078051182, 31.790033437981, 36, 500, "19950357_texas_capitol4.jpg", 75, 100)); austinmap.addPic(new Picture(216, -97.705002384034, 31.936681586364, 45, 250, "20347632_storm0009.jpg", 100, 75)); austinmap.addPic(new Picture(217, -97.703347266326, 31.929793567273, 157, 250, "41601319_trellis1.jpg", 100, 59)); austinmap.addPic(new Picture(218, -97.700754248584, 31.929571373109, 167, 250, "26856326_107_0735.jpg", 100, 75)); austinmap.addPic(new Picture(219, -97.696699210199, 31.929210307592, 333, 500, "26856331_107_0751.jpg", 100, 75)); austinmap.addPic(new Picture(220, -97.699678422073, 31.938320268325, 174, 500, "st_ablert.jpg", 100, 75)); austinmap.addPic(new Picture(221, -97.739677100014, 31.791644345672, 242, 500, "capital_at_night_web.jpg", 69, 100)); austinmap.addPic(new Picture(222, -97.734408308644, 31.802392988366, 215, 30, "Copy_of_DSC03530.jpg", 100, 75)); austinmap.addPic(new Picture(223, -97.742187361871, 31.802392988366, 70, 30, "frog.jpg", 100, 75)); austinmap.addPic(new Picture(224, -97.739566758834, 31.803365087834, 146, 0, "hex-rally-3.jpg", 100, 54)); austinmap.addPic(new Picture(225, -97.742628726594, 31.804226090221, 0, 500, "PB280031.jpg", 100, 75)); austinmap.addPic(new Picture(226, -97.740890853, 31.789894566629, 37, 500, "TX_state_capitol.jpg", 100, 71)); austinmap.addPic(new Picture(227, -97.740615000049, 31.789366855489, 72, 500, "TX_state_capitol_star.jpg", 66, 100)); austinmap.addPic(new Picture(228, -97.740311561802, 31.790283406416, 90, 250, "inside_the_dome.jpg", 100, 99)); austinmap.addPic(new Picture(229, -97.74814578562, 31.775590817307, 23, 10000, "a_skyline_001.jpg", 100, 75)); austinmap.addPic(new Picture(230, -97.750435365116, 31.776868433752, 13, 10000, "a_skyline_004.jpg", 100, 75)); austinmap.addPic(new Picture(231, -97.751400850445, 31.777423919162, 11, 10000, "b_srv_001.jpg", 75, 100)); austinmap.addPic(new Picture(232, -97.745138988451, 31.773702166912, 90, 10000, "e_waiting_002.jpg", 100, 75)); austinmap.addPic(new Picture(233, -97.745194159041, 31.773729941182, 93, 10000, "f_bats_001.jpg", 100, 75)); austinmap.addPic(new Picture(234, -97.74191150892, 31.785006295016, 252, 500, "PC030016.jpg", 100, 75)); austinmap.addPic(new Picture(235, -97.751069826904, 31.77728504781, 27, 2500, "AustinCityscape.jpg", 100, 67)); austinmap.addPic(new Picture(236, -97.751290509265, 31.776035205636, 315, 30, "AustinPeoplePainting.jpg", 100, 65)); austinmap.addPic(new Picture(237, -97.742049435396, 31.766147565328, 100, 10000, "AustinNov05_905.jpg", 100, 39)); austinmap.addPic(new Picture(238, -97.734297967464, 31.805003769795, 250, 10000, "DSCN7154a.jpg", 100, 71)); austinmap.addPic(new Picture(239, -97.797082099184, 31.910379352175, 281, 20000, "DSCN6668.jpg", 100, 75)); austinmap.addPic(new Picture(240, -97.765331424487, 31.781478962659, 38, 2500, "IM007657.jpg", 100, 75)); austinmap.addPic(new Picture(241, -97.766765859834, 31.782395513587, 224, 250, "IM007661.jpg", 100, 75)); austinmap.addPic(new Picture(242, -97.738628858799, 31.796615940096, 158, 30, "Sept_13_2003_030.jpg", 100, 75)); austinmap.addPic(new Picture(243, -97.740587414754, 31.790227857875, 289, 30, "Pict0044.jpg", 100, 75)); austinmap.addPic(new Picture(244, -97.738435761734, 31.781340091307, 202, 500, "Pict0695.jpg", 100, 75)); austinmap.addPic(new Picture(245, -97.740311561802, 31.790311180687, 69, 30, "Austin_00134_RJ2web.jpg", 100, 66)); austinmap.addPic(new Picture(246, -97.958759513951, 31.655467097279, 273, 30, "Austin_00135_RJ2web.jpg", 100, 62)); austinmap.addPic(new Picture(247, -97.739263320587, 31.803948347515, 264, 10000, "AcidicVersionPanoWeb.jpg", 100, 33)); austinmap.addPic(new Picture(248, -97.739401247063, 31.803976121786, 254, 2500, "AustinChurch.jpg", 100, 89)); austinmap.addPic(new Picture(249, -97.739373661768, 31.804087218868, 355, 2500, "IMG_0470_22web.jpg", 100, 66)); austinmap.addPic(new Picture(250, -97.740339147098, 31.790283406416, 29, 250, "Austin_1_00159_RJ2web.jpg", 66, 100)); austinmap.addPic(new Picture(251, -97.755428303535, 31.779729183616, 25, 10000, "IMG_1406.jpg", 100, 75)); austinmap.addPic(new Picture(252, -97.748669906227, 31.784728552311, 152, 250, "Austin2.jpg", 100, 72)); austinmap.addPic(new Picture(253, -97.740697755934, 31.782089996611, 142, 500, "Austin3.jpg", 100, 67)); austinmap.addPic(new Picture(254, -97.651597252659, 31.704794201734, 127, 2500, "IRRaerial.jpg", 100, 33)); austinmap.addPic(new Picture(255, -97.774186304224, 31.845220913518, 140, 10000, "Mount_Bonnel.jpg", 100, 66)); austinmap.addPic(new Picture(257, -97.87478987557, 31.942097569116, 147, 20000, "sunset_from_oasis_1.jpg", 100, 66)); austinmap.addPic(new Picture(258, -97.745332085516, 31.77414655524, 74, 10000, "October2005_017.jpg", 100, 75)); austinmap.addPic(new Picture(259, -97.751124997494, 31.777257273539, 151, 250, "October2005_020.jpg", 100, 75)); austinmap.addPic(new Picture(260, -97.755373132944, 31.780534637461, 0, 2500, "October2005_010.jpg", 100, 75)); austinmap.addPic(new Picture(261, -97.745773450239, 31.78733933374, 207, 30, "ahca_xmas_2005_012.jpg", 75, 100)); austinmap.addPic(new Picture(262, -97.772724283582, 31.785172940639, 281, 30, "DSC00652.jpg", 100, 74)); austinmap.addPic(new Picture(263, -97.738049567602, 31.781590059741, 201, 500, "PC300131.jpg", 100, 74)); austinmap.addPic(new Picture(264, -97.750766388657, 31.828389705579, 167, 30, "PC140054.jpg", 100, 75)); austinmap.addPic(new Picture(265, -97.76911060992, 31.836999729442, 230, 2500, "PC140057.jpg", 100, 75)); austinmap.addPic(new Picture(266, -97.769276121691, 31.838805057027, 152, 250, "PC120051.jpg", 100, 75)); austinmap.addPic(new Picture(267, -97.737994397011, 31.804587155738, 158, 500, "23-UT_Tower.jpg", 66, 100)); austinmap.addPic(new Picture(268, -97.824915661971, 31.828834093908, 345, 20000, "3-Austin_Skyline.jpg", 100, 43)); austinmap.addPic(new Picture(269, -97.740146050032, 31.802504085448, 65, 500, "01_1.jpg", 75, 100)); austinmap.addPic(new Picture(270, -97.739070223522, 31.805559255206, 90, 500, "02.jpg", 75, 100)); austinmap.addPic(new Picture(271, -97.741387388313, 31.789700146735, 21, 500, "04.jpg", 75, 100)); austinmap.addPic(new Picture(272, -97.741580485379, 31.789755695276, 24, 500, "05.jpg", 75, 100)); austinmap.addPic(new Picture(273, -97.740532244164, 31.79047782631, 135, 30, "07.jpg", 100, 75)); austinmap.addPic(new Picture(274, -97.740559829459, 31.790533374851, 270, 30, "10.jpg", 75, 100)); austinmap.addPic(new Picture(275, -97.740256391212, 31.790394503498, 180, 250, "14_1.jpg", 100, 76)); austinmap.addPic(new Picture(276, -97.740339147098, 31.790311180687, 90, 250, "16.jpg", 75, 100)); austinmap.addPic(new Picture(277, -97.740449488278, 31.790450052039, 274, 250, "17.jpg", 100, 75)); austinmap.addPic(new Picture(278, -97.740311561802, 31.790144535064, 79, 250, "18_1.jpg", 100, 75)); austinmap.addPic(new Picture(279, -97.740504658868, 31.790394503498, 259, 10000, "11.jpg", 75, 100)); austinmap.addPic(new Picture(280, -97.744890720794, 31.773952135346, 139, 250, "35.jpg", 75, 100)); austinmap.addPic(new Picture(281, -97.74497347668, 31.77411878097, 153, 30, "39_1.jpg", 100, 75)); austinmap.addPic(new Picture(282, -97.742380458937, 31.805003769795, 183, 20000, "P1190042.jpg", 100, 75)); austinmap.addPic(new Picture(283, -97.642494105265, 32.005284034565, 193, 2500, "IMG_0574.jpg", 100, 66)); austinmap.addPic(new Picture(284, -97.822405400115, 31.826167763937, 151, 250, "IMG_4668.jpg", 100, 75)); austinmap.addPic(new Picture(285, -97.819702041192, 31.829028513801, 152, 250, "IMG_4657.jpg", 75, 100)); austinmap.addPic(new Picture(286, -97.822929520722, 31.831111584091, 44, 10000, "wildbasinpanorama.jpg", 100, 20)); austinmap.addPic(new Picture(287, -97.815288393971, 31.827750897357, 125, 250, "wildbasinclouds.jpg", 100, 75)); austinmap.addPic(new Picture(288, -97.796585563871, 31.879272169184, 227, 10000, "360panoramic.jpg", 100, 16)); austinmap.addPic(new Picture(289, -97.806295587758, 31.882299564672, 320, 10000, "IMG_4578.jpg", 100, 75)); austinmap.addPic(new Picture(290, -97.806681781889, 31.882132919049, 243, 10000, "IMG_4583.jpg", 100, 75)); austinmap.addPic(new Picture(291, -97.809605823173, 31.883188341329, 222, 500, "IMG_4590.jpg", 100, 75)); austinmap.addPic(new Picture(292, -97.8116762638092, 31.8802535533905, 236, 30, "IMG_4606.jpg", 75, 100)); austinmap.addPic(new Picture(293, -97.8118371963501, 31.8802964687347, 128, 0, "IMG_4601.jpg", 100, 75)); austinmap.addPic(new Picture(294, -97.8121161460876, 31.8801033496857, 25, 0, "IMG_4619_1.jpg", 94, 100)); austinmap.addPic(new Picture(295, -97.810102358486, 31.882577307377, 338, 10000, "IMG_4626.jpg", 100, 75)); austinmap.addPic(new Picture(296, -97.797026928593, 31.877827907117, 150, 2500, "IMG_4643.jpg", 100, 75)); austinmap.addPic(new Picture(297, -97.74718030029, 31.983675652095, 307, 500, "011606_185902.jpg", 100, 75)); austinmap.addPic(new Picture(298, -97.740173635327, 31.819363067658, 140, 0, "020906_212940.jpg", 100, 75)); austinmap.addPic(new Picture(299, -97.70111285742, 31.811197432123, 319, 30, "120305_183458.jpg", 75, 100)); austinmap.addPic(new Picture(300, -97.7000922015, 31.807114614356, 69, 0, "120405_163746.jpg", 75, 100)); austinmap.addPic(new Picture(301, -97.69998186032, 31.806086966346, 285, 0, "120405_170038.jpg", 100, 75)); austinmap.addPic(new Picture(302, -97.700395639747, 31.809586524432, 325, 0, "120405_164420.jpg", 100, 75)); austinmap.addPic(new Picture(303, -97.767455492212, 31.781145671413, 13, 30, "122005_221128.jpg", 100, 75)); austinmap.addPic(new Picture(304, -97.769607145232, 31.782451062128, 270, 0, "122005_223846.jpg", 100, 75)); austinmap.addPic(new Picture(305, -97.700147372091, 31.807253485708, 139, 0, "120305_180514.jpg", 100, 75)); austinmap.addPic(new Picture(306, -97.823067447198, 31.854997456744, 139, 2500, "PanoFromDock.jpg", 100, 23)); austinmap.addPic(new Picture(307, -97.748642320932, 31.923960970462, 180, 0, "Heron6091.jpg", 66, 100)); austinmap.addPic(new Picture(308, -97.748752662113, 31.924016519003, 90, 0, "DuckBread.jpg", 100, 66)); austinmap.addPic(new Picture(309, -97.815757343988, 31.860441213767, 90, 0, "Hawk6526.jpg", 66, 100)); austinmap.addPic(new Picture(310, -97.796640734461, 31.879355491996, 277, 10000, "merged-wallpaper.jpg", 100, 55)); austinmap.addPic(new Picture(311, -97.734435893939, 31.807920068201, 67, 0, "P2190056.jpg", 100, 75)); austinmap.addPic(new Picture(312, -97.761883262596, 31.77622962553, 148, 30, "IMG_4759.jpg", 75, 100)); austinmap.addPic(new Picture(313, -97.761993603776, 31.7762573998, 301, 30, "IMG_4761.jpg", 100, 75)); austinmap.addPic(new Picture(314, -97.734463479235, 31.762981298488, 294, 500, "PhotoPull_03_31_06_024.jpg", 100, 65)); austinmap.addPic(new Picture(315, -97.771124336465, 31.825640052797, 90, 250, "Glass-RPKLN.jpg", 100, 66)); austinmap.addPic(new Picture(316, -97.741883923625, 31.814891410103, 333, 0, "P4080043.jpg", 100, 75)); austinmap.addPic(new Picture(317, -97.742132191281, 31.814835861562, 157, 0, "P4080040.jpg", 100, 75)); austinmap.addPic(new Picture(318, -97.7506291866302, 31.7741990089417, 27, 10000, "July05_029.jpg", 100, 75)); austinmap.addPic(new Picture(319, -97.8017735481262, 31.8798351287842, 162, 250, "my_house_013.jpg", 100, 75)); austinmap.addPic(new Picture(320, -97.7630746364594, 31.7012000083923, 176, 250, "all_camera_039.jpg", 75, 100)); austinmap.addPic(new Picture(321, -97.7965271472931, 31.7563784122467, 120, 30, "all_camera_083.jpg", 100, 75)); austinmap.addPic(new Picture(322, -97.7441811561584, 31.7750251293182, 222, 250, "GoodApril_extra.jpg", 100, 75)); austinmap.addPic(new Picture(323, -97.7512836456299, 31.7717099189758, 153, 30, "Sandy's.jpg", 75, 100)); austinmap.addPic(new Picture(325, -97.8444957733154, 31.569836139679, 155, 250, "Buda_HS_Postcard.jpg", 100, 61)); austinmap.addPic(new Picture(326, -97.8444635868073, 31.5698683261871, 167, 250, "Buda_School_-2003.jpg", 100, 75)); austinmap.addPic(new Picture(327, -98.0943381786346, 31.6946661472321, 60, 250, "Sorrell_house_in_snow.jpg", 100, 66)); austinmap.addPic(new Picture(328, -98.0941450595856, 31.6949236392975, 90, 0, "Lois&Loyd_cr.jpg", 78, 100)); austinmap.addPic(new Picture(329, -98.0941343307495, 31.6951167583466, 90, 30, "Showerhouse.jpg", 100, 68)); austinmap.addPic(new Picture(330, -97.7958190441132, 32.0152544975281, 201, 500, "P4220061.jpg", 75, 100)); austinmap.addPic(new Picture(331, -97.7960765361786, 32.0152008533478, 174, 500, "P4220074.jpg", 100, 75)); austinmap.addPic(new Picture(332, -97.7959799766541, 32.0152115821838, 194, 250, "P4220070.jpg", 75, 100)); austinmap.addPic(new Picture(333, -97.6187717914581, 31.7167246341705, 111, 500, "TX130-DGG01.jpg", 100, 75)); austinmap.addPic(new Picture(334, -97.5922286510468, 31.8661665916443, 90, 2500, "TX130-DGG10.jpg", 100, 75)); austinmap.addPic(new Picture(335, -97.6186966896057, 31.7167139053345, 295, 500, "TX130-DGG06.jpg", 100, 75)); austinmap.addPic(new Picture(336, -97.7645981311798, 31.7912685871124, 322, 20000, "morningsky2.jpg", 100, 66)); austinmap.addPic(new Picture(337, -97.7483224868774, 31.7759156227112, 63, 250, "under_the_bridge.jpg", 100, 66)); austinmap.addPic(new Picture(338, -97.7536654472351, 31.7810332775116, 12, 250, "austin_power_plant.jpg", 100, 66)); austinmap.addPic(new Picture(339, -97.7562618255615, 31.7810547351837, 250, 250, "59512369-O.jpg", 100, 57)); austinmap.addPic(new Picture(340, -97.752742767334, 31.7797565460205, 204, 30, "59810224-O.jpg", 66, 100)); austinmap.addPic(new Picture(341, -97.7506184577942, 31.777149438858, 15, 2500, "55038475-O.jpg", 63, 100)); austinmap.addPic(new Picture(342, -97.7506613731384, 31.7772138118744, 22, 10000, "55034130-O.jpg", 100, 66)); austinmap.addPic(new Picture(343, -97.7669370174408, 31.7815482616425, 164, 250, "65783194-O.jpg", 100, 66)); austinmap.addPic(new Picture(344, -97.7671837806702, 31.7815911769867, 9, 0, "65978507-O.jpg", 100, 66)); austinmap.addPic(new Picture(345, -97.7742218971252, 31.84485912323, 176, 10000, "49946504-O.jpg", 65, 100)); austinmap.addPic(new Picture(346, -97.7742218971252, 31.8450522422791, 185, 10000, "50058743-O.jpg", 100, 66)); austinmap.addPic(new Picture(347, -97.7579462528229, 31.9272029399872, 189, 10000, "48344087-O.jpg", 100, 66)); austinmap.addPic(new Picture(348, -97.7409946918488, 31.7894017696381, 328, 0, "47780041-O.jpg", 66, 100)); austinmap.addPic(new Picture(349, -97.7554249763489, 31.7804861068726, 93, 30, "59808088-O.jpg", 100, 66)); austinmap.addPic(new Picture(350, -97.740318775177, 31.8046367168427, 322, 500, "Tower.jpg", 100, 75)); austinmap.addPic(new Picture(351, -97.7420890331268, 31.7854428291321, 169, 30, "downtown_church.jpg", 100, 66)); austinmap.addPic(new Picture(352, -97.7273261547089, 31.7985320091248, 90, 500, "big_sky.jpg", 100, 30)); austinmap.addPic(new Picture(353, -97.7717220783234, 31.8336045742035, 198, 30, "P4290014.jpg", 75, 100)); austinmap.addPic(new Picture(354, -97.7715933322906, 31.8335509300232, 207, 30, "P4290020.jpg", 75, 100)); austinmap.addPic(new Picture(355, -97.7710354328156, 31.8327355384827, 180, 30, "P4290026.jpg", 75, 100)); austinmap.addPic(new Picture(356, -97.7721297740936, 31.8342912197113, 157, 30, "P4290001.jpg", 100, 75)); austinmap.addPic(new Picture(357, -97.7708315849304, 31.8335723876953, 264, 30, "P4290011.jpg", 75, 100)); austinmap.addPic(new Picture(358, -97.7713680267334, 31.8345487117767, 335, 30, "P4290029.jpg", 100, 75)); austinmap.addPic(new Picture(359, -97.7778053283691, 31.8652009963989, 210, 30, "P4290033.jpg", 75, 100)); austinmap.addPic(new Picture(360, -97.7471315860748, 31.8085849285126, 270, 30, "P4290040.jpg", 100, 75)); austinmap.addPic(new Picture(361, -97.7475607395172, 31.8086385726929, 292, 250, "P4290037.jpg", 75, 100)); austinmap.addPic(new Picture(362, -97.8068804740906, 31.8826675415039, 147, 30, "IMG_5047.jpg", 100, 75)); austinmap.addPic(new Picture(363, -97.8069341182709, 31.8826568126678, 62, 0, "IMG_5043.jpg", 75, 100)); austinmap.addPic(new Picture(364, -97.8067946434021, 31.8826353549957, 331, 0, "IMG_5048.jpg", 100, 75)); austinmap.addPic(new Picture(365, -97.8068590164185, 31.8827533721924, 88, 0, "IMG_5050.jpg", 75, 100)); austinmap.addPic(new Picture(366, -97.8073632717133, 31.8830323219299, 132, 0, "IMG_5053.jpg", 100, 75)); austinmap.addPic(new Picture(367, -97.8085005283356, 31.8836331367493, 172, 30, "IMG_5058.jpg", 100, 75)); austinmap.addPic(new Picture(368, -97.8084897994995, 31.8834829330444, 42, 0, "IMG_5062.jpg", 75, 100)); austinmap.addPic(new Picture(369, -97.8085112571716, 31.8834292888641, 167, 250, "IMG_5065.jpg", 100, 75)); austinmap.addPic(new Picture(370, -97.8083395957947, 31.8832790851593, 322, 10000, "IMG_5066.jpg", 100, 75)); austinmap.addPic(new Picture(371, -97.8084790706635, 31.8834936618805, 9, 0, "IMG_5068.jpg", 75, 100)); austinmap.addPic(new Picture(372, -97.8085219860077, 31.8833756446838, 177, 0, "IMG_5071.jpg", 75, 100)); austinmap.addPic(new Picture(373, -97.8086829185486, 31.8837189674377, 166, 0, "IMG_5073.jpg", 100, 75)); austinmap.addPic(new Picture(374, -97.8088974952698, 31.8838906288147, 271, 10000, "IMG_5079.jpg", 100, 75)); austinmap.addPic(new Picture(375, -97.8093481063843, 31.8833756446838, 315, 20000, "IMG_5087.jpg", 100, 75)); austinmap.addPic(new Picture(376, -97.8093481063843, 31.8833434581757, 170, 250, "IMG_5089.jpg", 75, 100)); austinmap.addPic(new Picture(377, -97.8102385997772, 31.8817126750946, 333, 0, "IMG_5091.jpg", 75, 100)); austinmap.addPic(new Picture(378, -97.8116118907928, 31.8804359436035, 203, 500, "IMG_5101.jpg", 100, 75)); austinmap.addPic(new Picture(379, -97.8116977214813, 31.880339384079, 255, 30, "IMG_5102.jpg", 75, 100)); austinmap.addPic(new Picture(380, -97.8116118907928, 31.8819487094879, 139, 30, "IMG_5106.jpg", 100, 75)); austinmap.addPic(new Picture(381, -97.8115904331207, 31.8818736076355, 176, 10000, "IMG_5109.jpg", 100, 75)); austinmap.addPic(new Picture(382, -97.8114724159241, 31.8816375732422, 229, 500, "IMG_5107.jpg", 100, 75)); austinmap.addPic(new Picture(384, -97.7264785766602, 31.8692994117737, 233, 500, "arroyoseco_1.jpg", 100, 66)); austinmap.addPic(new Picture(385, -97.7301156520844, 31.8682265281677, 202, 500, "parksunset.jpg", 100, 66)); austinmap.addPic(new Picture(386, -97.7261245250702, 31.8702220916748, 44, 30, "customhome.jpg", 100, 70)); austinmap.addPic(new Picture(387, -97.7251589298248, 31.8728077411652, 259, 250, "woodrow.jpg", 100, 66)); austinmap.addPic(new Picture(388, -97.7393639087677, 31.8620896339417, 127, 0, "plants.jpg", 66, 100)); austinmap.addPic(new Picture(389, -97.7391064167023, 31.862154006958, 0, 30, "asahiimports.jpg", 100, 66)); austinmap.addPic(new Picture(390, -97.7490198612213, 31.8798780441284, 90, 500, "mopac.jpg", 100, 66)); austinmap.addPic(new Picture(391, -97.7485048770905, 31.8797707557678, 68, 2500, "farwest.jpg", 100, 66)); austinmap.addPic(new Picture(392, -97.7407371997833, 31.8294095993042, 135, 250, "ezs.jpg", 100, 38)); austinmap.addPic(new Picture(393, -97.7406942844391, 31.8269205093384, 180, 500, "offices.jpg", 100, 71)); austinmap.addPic(new Picture(394, -97.7366924285889, 31.8208694458008, 59, 30, "37th-05_DSC1856.jpg", 100, 66)); austinmap.addPic(new Picture(395, -97.7373361587524, 31.8215882778168, 144, 250, "DSC_4906.jpg", 100, 66)); austinmap.addPic(new Picture(396, -97.7401900291443, 31.8267917633057, 279, 20000, "2307.jpg", 100, 32)); austinmap.addPic(new Picture(397, -97.7411341667175, 31.8298172950745, 68, 0, "2273.jpg", 100, 66)); austinmap.addPic(new Picture(398, -97.7154171466827, 31.8920123577118, 0, 250, "1-29-05DSC_0242.jpg", 100, 47)); austinmap.addPic(new Picture(399, -97.7555751800537, 31.7796921730042, 261, 500, "DSC_2425-2.jpg", 100, 66)); austinmap.addPic(new Picture(400, -97.7553927898407, 31.7798960208893, 321, 2500, "Nk1098385703.jpg", 100, 66)); austinmap.addPic(new Picture(401, -97.7680420875549, 31.7786514759064, 196, 30, "DSC_8276small.jpg", 100, 66)); austinmap.addPic(new Picture(402, -97.7625811100006, 31.7839515209198, 270, 30, "DSC_7878-2.jpg", 100, 66)); austinmap.addPic(new Picture(403, -97.7234423160553, 31.8748998641968, 90, 250, "churchtree.jpg", 66, 100)); austinmap.addPic(new Picture(404, -97.72536277771, 31.8702006340027, 135, 0, "Cokeisit.jpg", 100, 78)); austinmap.addPic(new Picture(405, -97.7501571178436, 31.7755722999573, 90, 500, "tl1.jpg", 100, 66)); austinmap.addPic(new Picture(406, -97.7560365200043, 31.7808508872986, 196, 250, "lamarbridge.jpg", 100, 66)); austinmap.addPic(new Picture(407, -97.7716469764709, 31.7893695831299, 0, 10000, "from_mpac.jpg", 100, 66)); austinmap.addPic(new Picture(408, -97.7479898929596, 31.7769134044647, 117, 250, "ripples.jpg", 100, 62)); austinmap.addPic(new Picture(409, -97.7480113506317, 31.7769134044647, 90, 250, "evening_row.jpg", 100, 66)); austinmap.addPic(new Picture(410, -97.7714323997498, 31.789573431015, 135, 30, "waterpollo.jpg", 100, 85)); austinmap.addPic(new Picture(411, -97.7404797077179, 31.8271028995514, 135, 2500, "landing.jpg", 100, 76)); austinmap.addPic(new Picture(412, -97.7240216732025, 31.8749105930328, 0, 250, "6-12-06_CrestviewDSC_1868.jpg", 100, 66)); austinmap.addPic(new Picture(413, -97.7250838279724, 31.8728399276733, 261, 250, "6-12-06_CrestviewDSC_1864.jpg", 100, 66)); austinmap.addPic(new Picture(414, -97.72500872612, 31.8730115890503, 351, 30, "6-12-06_CrestviewDSC_1867.jpg", 100, 66)); austinmap.addPic(new Picture(415, -97.7305233478546, 31.8681514263153, 297, 250, "Brentwood_Pano_1.jpg", 100, 37)); austinmap.addPic(new Picture(416, -97.725191116333, 31.870082616806, 180, 30, "6-12-06_CrestviewDSC_1907.jpg", 100, 41)); austinmap.addPic(new Picture(417, -97.7243006229401, 31.8693315982819, 171, 250, "6-12-06_CrestviewDSC_1910.jpg", 100, 66)); austinmap.addPic(new Picture(418, -97.754909992218, 31.7855823040009, 335, 500, "Golden_Light_on_Buildings_--_P.jpg", 100, 51)); austinmap.addPic(new Picture(419, -97.7506613731384, 31.7737376689911, 68, 10000, "From_the_Parking_Lot_--_P10100.jpg", 100, 84)); austinmap.addPic(new Picture(420, -97.7337849140167, 31.9238233566284, 78, 500, "P1010001_--_cropped.jpg", 100, 47)); austinmap.addPic(new Picture(421, -97.6684892177582, 31.7766988277435, 171, 250, "P1010046.jpg", 75, 100)); austinmap.addPic(new Picture(422, -97.7312636375427, 31.9048225879669, 4, 250, "Icestorm_2-2003_--_Playland_Ri.jpg", 100, 75)); austinmap.addPic(new Picture(423, -97.7177882194519, 31.9520616531372, 149, 250, "P1010012.jpg", 100, 75)); austinmap.addPic(new Picture(424, -97.7336883544922, 31.9006383419037, 290, 30, "P1010024.jpg", 100, 75)); austinmap.addPic(new Picture(426, -97.7356088161469, 31.7891442775726, 86, 250, "Waller-Ck-24.jpg", 100, 72)); austinmap.addPic(new Picture(427, -97.7402651309967, 31.7821490764618, 139, 250, "Austin-Wall-Art-13.jpg", 100, 72)); austinmap.addPic(new Picture(428, -97.7369928359985, 31.7811834812164, 201, 30, "03-Ester's-on-Sixth-St.jpg", 100, 72)); austinmap.addPic(new Picture(429, -97.7557039260864, 31.7793381214142, 349, null, "Railroad_Bridgesmall.jpg", 100, 44)); austinmap.addPic(new Picture(430, -97.7503180503845, 31.776967048645, 22, 250, "Austin_at_Night_0581.jpg", 100, 66)); austinmap.addPic(new Picture(432, -97.7528393268585, 31.7821705341339, 286, 250, "79603428-L_1.jpg", 100, 66)); austinmap.addPic(new Picture(433, -97.7560794353485, 31.7795848846436, 7, 0, "79612955-O.jpg", 100, 66)); austinmap.addPic(new Picture(434, -97.7559721469879, 31.7797350883484, 4, 500, "79699668-O.jpg", 100, 66)); austinmap.addPic(new Picture(435, -97.6662254333496, 31.6694533824921, 321, 500, "Moores-Crossing-30.jpg", 100, 33)); austinmap.addPic(new Picture(436, -97.6757419109344, 31.7813336849213, 170, 10000, "Burnt_Orange_0989.jpg", 100, 66)); austinmap.addPic(new Picture(437, -97.7389132976532, 31.7949914932251, 252, 2500, "Austin_Capitol_1132.jpg", 66, 100)); austinmap.addPic(new Picture(438, -97.7377116680145, 31.8002915382385, 90, 0, "UT_006.jpg", 75, 100)); austinmap.addPic(new Picture(439, -97.732207775116, 31.8019008636475, 243, 250, "10_22_05_UT_vs_Tech_008.jpg", 100, 75)); austinmap.addPic(new Picture(440, -97.6608395576477, 31.9649469852448, 2, 250, "Pond_1622.jpg", 100, 66)); austinmap.addPic(new Picture(441, -97.8105819225311, 31.7558312416077, 156, 250, "Greenbelt_1639.jpg", 100, 66)); austinmap.addPic(new Picture(442, -97.7965378761292, 31.8791592121124, 166, 20000, "Sun_sets_over_Lake_Austin_2890.jpg", 66, 100)); austinmap.addPic(new Picture(443, -97.6804304122925, 31.8470478057861, 116, 0, "Muffler_Angel_3123.jpg", 66, 100)); austinmap.addPic(new Picture(444, -97.7493417263031, 31.7848312854767, 70, 30, "Katz'_Deli_3346.jpg", 100, 66)); austinmap.addPic(new Picture(445, -97.7384841442108, 31.7778897285461, 150, 30, "Train_in_Austin_4764.jpg", 66, 100)); austinmap.addPic(new Picture(446, -97.8008186817169, 31.8875062465668, 314, 10000, "Lake_Austin_and_the_Skyline_56.jpg", 100, 66)); austinmap.addPic(new Picture(447, -97.7501142024994, 31.7599296569824, 73, 10000, "Congress_Ave_5854.jpg", 66, 100)); austinmap.addPic(new Picture(448, -97.7558755874634, 31.7799603939056, 143, 250, "Town_Lake_at_Night_7190.jpg", 100, 69)); austinmap.addPic(new Picture(449, -97.7531397342682, 31.9218385219574, 26, 2500, "Buildings_on_360_7969.jpg", 100, 53)); austinmap.addPic(new Picture(450, -97.6562905311584, 31.9006490707397, 265, 30, "Pioneer_Farms_4618.jpg", 100, 66)); austinmap.addPic(new Picture(451, -97.6606678962708, 31.8663918972015, 123, 30, "Shack_7842.jpg", 100, 66)); austinmap.addPic(new Picture(452, -97.7171230316162, 31.7970836162567, 111, 30, "IMG_5743.jpg", 75, 100)); austinmap.addPic(new Picture(453, -97.7170693874359, 31.7969763278961, 123, 250, "IMG_5748=.jpg", 100, 75)); austinmap.addPic(new Picture(454, -97.717262506485, 31.79802775383, 189, 250, "IMG_5749=.jpg", 100, 75)); austinmap.addPic(new Picture(455, -97.7244937419891, 31.7700576782227, 153, 30, "IMG_5793+.jpg", 75, 100)); austinmap.addPic(new Picture(456, -97.7243864536285, 31.770111322403, 162, 250, "IMG_5797+.jpg", 75, 100)); austinmap.addPic(new Picture(457, -97.7180886268616, 31.8014717102051, 101, 250, "IMG_5739+.jpg", 100, 75)); austinmap.addPic(new Picture(458, -97.7170372009277, 31.7970299720764, 197, 0, "IMG_5790=.jpg", 75, 100)); austinmap.addPic(new Picture(459, -97.7355873584747, 31.7745852470398, 157, 250, "IMG_5800=.jpg", 100, 75)); austinmap.addPic(new Picture(460, -97.7379047870636, 31.8079090118408, 225, 0, "IMG_5802.jpg", 100, 75)); austinmap.addPic(new Picture(461, -97.7414774894714, 31.7884254455566, 61, 500, "Statue_and_Capitol_8360.jpg", 100, 66)); austinmap.addPic(new Picture(462, -97.7489984035492, 31.7630624771118, 107, 250, "IMG_8908.jpg", 100, 75)); austinmap.addPic(new Picture(463, -97.7852296829224, 31.8970334529877, 243, 250, "Bull_Creek_9485.jpg", 100, 66)); austinmap.addPic(new Picture(464, -97.7853584289551, 31.8968403339386, 307, 0, "Bull_Creek_Falls_9481.jpg", 100, 66)); austinmap.addPic(new Picture(465, -97.7381944656372, 31.7776215076447, 90, 250, "Stairs_9523.jpg", 100, 80)); austinmap.addPic(new Picture(466, -97.7712070941925, 31.8341624736786, 353, 0, "Mayfield005.jpg", 100, 66)); austinmap.addPic(new Picture(467, -97.7703702449799, 31.8345165252686, 37, 0, "Mayfield015.jpg", 66, 100)); austinmap.addPic(new Picture(468, -97.7702522277832, 31.8347525596619, 90, 0, "Mayfield027.jpg", 100, 66)); austinmap.addPic(new Picture(470, -97.7642226219177, 31.8036282062531, 167, 20000, "Sunset_off_of_Mopac_9578.jpg", 100, 66)); austinmap.addPic(new Picture(471, -97.796516418457, 31.8794059753418, 291, 0, "360JPG.jpg", 100, 75)); austinmap.addPic(new Picture(472, -97.7651989459991, 31.781108379364, 45, 0, "DowntownAustin2.jpg", 100, 75)); austinmap.addPic(new Picture(473, -97.7480864524841, 31.7850458621979, 259, 500, "Intel_Implosion_11426.jpg", 100, 66)); austinmap.addPic(new Picture(474, -97.748054265976, 31.7849493026733, 252, 500, "Intel_Implosion_11427.jpg", 100, 66)); austinmap.addPic(new Picture(475, -97.7480757236481, 31.784895658493, 261, 500, "Intel_Implosion_11428.jpg", 100, 66)); austinmap.addPic(new Picture(476, -97.7480220794678, 31.7849707603455, 259, 500, "Intel_Implosion_11464.jpg", 100, 66)); austinmap.addPic(new Picture(477, -97.7714323997498, 31.8333578109741, 236, 250, "Boat_House_13392.jpg", 100, 66)); austinmap.addPic(new Picture(478, -97.771121263504, 31.8344414234161, 56, 0, "Peacock_13472.jpg", 50, 100)); austinmap.addPic(new Picture(479, -97.7438056468964, 31.7776429653168, 41, 250, "Looking_up_14200.jpg", 66, 100)); austinmap.addPic(new Picture(480, -97.7743291854858, 31.844494342804, 180, 20000, "mtbonnellsunsetpencilcropped.jpg", 100, 70)); austinmap.addPic(new Picture(481, -97.760124206543, 31.9202506542206, 119, 0, "hail1.jpg", 100, 75)); austinmap.addPic(new Picture(483, -97.7548670768738, 31.7786300182343, 4, 0, "greenmonday.jpg", 100, 75)); austinmap.addPic(new Picture(484, -97.7549314498901, 31.778404712677, 3, 0, "fflybluetuesday.jpg", 100, 75)); austinmap.addPic(new Picture(485, -97.7857446670532, 31.7778360843658, 358, 0, "downtownmoonandstars.jpg", 100, 75)); austinmap.addPic(new Picture(486, -97.7550065517426, 31.7783617973328, 0, 0, "P1000785fdfklajsdlkffj.jpg", 100, 75)); austinmap.addPic(new Picture(487, -97.7771294116974, 31.9169354438782, 332, 0, "rockstackin.jpg", 100, 68)); austinmap.addPic(new Picture(488, -97.7767860889435, 31.9171607494354, 321, 0, "rockstackin3.jpg", 100, 78)); austinmap.addPic(new Picture(489, -97.7769362926483, 31.9172143936157, 315, 0, "stackinrocks2.jpg", 75, 100)); austinmap.addPic(new Picture(490, -97.7766144275665, 31.9169247150421, 317, 0, "steppinstones.jpg", 100, 81)); austinmap.addPic(new Picture(491, -98.0923962593079, 31.8356323242188, 135, 250, "Hamilton_Pool_14844.jpg", 66, 100)); austinmap.addPic(new Picture(492, -98.0923640727997, 31.835685968399, 129, 250, "Hamilton_Pool_14773.jpg", 100, 66)); austinmap.addPic(new Picture(494, -97.8232741355896, 31.8262124061584, 220, 30, "Wild_Basin_Falls_16173.jpg", 100, 66)); austinmap.addPic(new Picture(495, -97.8228986263275, 31.825944185257, 54, 30, "Wild_Basin_Falls_16195.jpg", 100, 66)); austinmap.addPic(new Picture(496, -97.8036189079285, 31.7713022232056, 35, 10000, "skyline-pani.jpg", 100, 16)); austinmap.addPic(new Picture(497, 0, 0, 0, 10000, "eclipse.jpg", 100, 66)); austinmap.addPic(new Picture(498, -97.7721190452576, 31.7854750156403, 315, 250, "Falls_15962.jpg", 100, 66)); austinmap.addPic(new Picture(499, -97.7850258350372, 31.9019794464111, 90, 30, "falls_at_lakewood.jpg", 100, 65)); austinmap.addPic(new Picture(500, -97.7887916564941, 31.8955957889557, 117, 30, "bull_creek_rock_stack.jpg", 100, 62)); austinmap.addPic(new Picture(501, -97.7879333496094, 31.8966364860535, 90, 250, "bull_creek_falls.jpg", 100, 75)); austinmap.addPic(new Picture(502, -97.7863883972168, 31.8967223167419, 330, 0, "monoliths.jpg", 100, 62)); austinmap.addPic(new Picture(503, -97.6105856895447, 31.9758582115173, 233, 250, "Immanuel_Rd_16789.jpg", 100, 66)); austinmap.addPic(new Picture(504, -97.7834486961365, 31.881251335144, 90, 0, "dragonfly.jpg", 100, 63)); austinmap.addPic(new Picture(506, -97.7720975875854, 31.7900347709656, 301, 0, "IMG_3109.jpg", 66, 100)); austinmap.addPic(new Picture(507, -97.7712714672089, 31.789036989212, 215, 30, "IMG_31301.jpg", 100, 66)); austinmap.addPic(new Picture(508, -97.7859807014465, 31.8055057525635, 225, 0, "townlake.jpg", 78, 100)); austinmap.addPic(new Picture(509, -97.7412843704224, 31.7827928066254, 225, 250, "IMG_4372.jpg", 66, 100)); austinmap.addPic(new Picture(510, -97.7266609668732, 31.8256652355194, 0, 30, "DSC_4488.jpg", 66, 100)); austinmap.addPic(new Picture(511, -97.7265214920044, 31.8245387077332, 124, 30, "DSC_4503.jpg", 100, 66)); austinmap.addPic(new Picture(512, -97.7266609668732, 31.8250858783722, 198, 0, "DSC_4498.jpg", 66, 100)); austinmap.addPic(new Picture(513, -97.7270042896271, 31.8237662315369, 240, 0, "DSC_4505.jpg", 66, 100)); austinmap.addPic(new Picture(514, -97.7281415462494, 31.8213415145874, 0, 0, "DSC_4519.jpg", 66, 100)); austinmap.addPic(new Picture(515, -97.7261781692505, 31.8250215053558, 135, 30, "DSC_4472.jpg", 100, 66)); austinmap.addPic(new Picture(516, -97.7864098548889, 31.8102264404297, 99, 250, "P1030802.jpg", 100, 56)); austinmap.addPic(new Picture(517, -97.7448356151581, 31.7871057987213, 90, 250, "909_Colorado_17714.jpg", 66, 100)); austinmap.addPic(new Picture(518, -97.7602207660675, 31.7356395721436, 90, 250, "Water_Tower_1276.jpg", 100, 69)); austinmap.addPic(new Picture(519, -97.7904331684113, 31.830278635025, 243, 500, "P1030973.jpg", 100, 81)); austinmap.addPic(new Picture(520, -97.7904546260834, 31.8302142620087, 270, 500, "P1030969.jpg", 100, 49)); austinmap.addPic(new Picture(521, -97.7904653549194, 31.8302464485168, 149, 20000, "P1030946.jpg", 100, 53)); austinmap.addPic(new Picture(522, -97.7904117107391, 31.8302893638611, 326, 10000, "P1030991.jpg", 77, 100)); austinmap.addPic(new Picture(523, -97.7415204048157, 31.7898845672607, 39, 0, "P1030886.jpg", 73, 100)); austinmap.addPic(new Picture(524, -97.7537083625793, 31.7836618423462, 270, 0, "P1030901.jpg", 89, 100)); austinmap.addPic(new Picture(525, -97.7415633201599, 31.7926740646362, 59, 30, "Fountian_17796.jpg", 100, 66)); austinmap.addPic(new Picture(526, -97.7446854114532, 31.7766773700714, 270, 0, "P1040104.jpg", 75, 100)); austinmap.addPic(new Picture(527, -97.7457368373871, 31.7776429653168, 180, 0, "P1040063.jpg", 77, 100)); austinmap.addPic(new Picture(528, -97.7492558956146, 31.778404712677, 225, 0, "P1040033.jpg", 100, 66)); austinmap.addPic(new Picture(529, -97.7494382858276, 31.7787158489227, 270, 0, "P1040050.jpg", 76, 100)); austinmap.addPic(new Picture(530, -97.7482903003693, 31.7785441875458, 0, 0, "P1040040.jpg", 100, 75)); austinmap.addPic(new Picture(531, -97.7446639537811, 31.7770421504974, 90, 0, "P1040086.jpg", 75, 100)); austinmap.addPic(new Picture(532, -97.7477967739105, 31.7774069309235, 180, 0, "P1040109.jpg", 100, 63)); austinmap.addPic(new Picture(533, -97.7736210823059, 31.8377029895782, 146, 250, "Mt_Bonnell_Br_18185.jpg", 100, 66)); austinmap.addPic(new Picture(534, -97.7802300453186, 31.8233370780945, 180, 2500, "Lake_Austin_18081.jpg", 100, 66)); austinmap.addPic(new Picture(535, -97.7802300453186, 31.8233370780945, 78, 2500, "Lake_Austin_18085.jpg", 100, 66)); austinmap.addPic(new Picture(536, -97.7776765823364, 31.8260407447815, 225, 250, "Ivy_Wall_18105.jpg", 100, 66)); austinmap.addPic(new Picture(537, 0, 0, 0, 0, "DSCN0761.jpg", 100, 74)); austinmap.addPic(new Picture(538, -97.7708959579468, 31.83478474617, 0, 30, "Mayfeild_Park_18133.jpg", 66, 100)); austinmap.addPic(new Picture(539, -97.7712821960449, 31.8329286575317, 211, 250, "Broken_Boat_House_18158.jpg", 100, 66)); austinmap.addPic(new Picture(540, -97.773449420929, 31.8445265293121, 63, 250, "Mt_Bonnell_Stairs_18228.jpg", 100, 66)); austinmap.addPic(new Picture(541, -98.0928039550781, 32.0308113098145, 180, 250, "P104043vv5.jpg", 100, 56)); austinmap.addPic(new Picture(542, -97.7489876747131, 31.783264875412, 238, 500, "upload3.jpg", 72, 100)); austinmap.addPic(new Picture(543, -97.7493846416473, 31.78147315979, 135, 500, "upload2.jpg", 75, 100)); austinmap.addPic(new Picture(544, -97.7490413188934, 31.7830395698547, 270, 500, "upload4.jpg", 75, 100)); austinmap.addPic(new Picture(545, -97.7489876747131, 31.7824602127075, 180, 500, "upload1.jpg", 100, 56)); austinmap.addPic(new Picture(546, -97.7856266498566, 31.7771172523499, 351, 10000, "upload5.jpg", 100, 41)); austinmap.addPic(new Picture(547, -97.7856373786926, 31.9008421897888, 45, 0, "FallColorsTree.jpg", 66, 100)); austinmap.addPic(new Picture(548, -97.7699089050293, 31.77894115448, 180, 0, "IMG_4474.jpg", 100, 66)); austinmap.addPic(new Picture(549, -97.7493953704834, 31.7624187469482, 225, 30, "Docs.jpg", 100, 80)); austinmap.addPic(new Picture(550, -97.7310705184937, 31.9324922561646, 288, 0, "IMG_7223.jpg", 100, 66)); austinmap.addPic(new Picture(551, -97.7376365661621, 31.7794132232666, 153, 250, "GarbageBuildings.jpg", 66, 100)); austinmap.addPic(new Picture(552, -97.7479362487793, 31.7755508422852, 72, 250, "DuckyBoats.jpg", 100, 66)); austinmap.addPic(new Picture(553, -97.7858734130859, 31.7707872390747, 54, 250, "WideFingerLakes.jpg", 100, 66)); austinmap.addPic(new Picture(554, -97.76930809021, 31.7789196968079, 21, 30, "100675797-L.jpg", 100, 66)); austinmap.addPic(new Picture(555, -97.7492344379425, 31.783629655838, 182, 0, "P1040931.jpg", 75, 100)); austinmap.addPic(new Picture(556, -97.7425611019135, 31.7838335037231, 68, 0, "1093a.jpg", 100, 64)); austinmap.addPic(new Picture(557, -97.7508008480072, 31.8253755569458, 15, 0, "DSC_0001_(2).jpg", 100, 66)); austinmap.doneAddingPictures(); austinmap.addMap(new Map(1, "TxDOT", "txdot", 15, -98.0000547007628, -97.5710481908742, 32.0520836804029, 31.6201382251683)); austinmap.addMap(new Map(2, "Topographic (1988)", "topo88", 17, -97.7501527549436, -97.696207594693, 31.8516688158683, 31.7627482220486)); austinmap.addMap(new Map(3, "Zilker Park Area", "park_zilker", 17, -97.7823705508038, -97.7565806161725, 31.7921099716015, 31.7675219646828)); austinmap.addMap(new Map(4, "St. Edward's Park", "park_steds", 17, -97.8025170700482, -97.7780236339507, 31.9545546380469, 31.9312337600605)); austinmap.addMap(new Map(5, "Johnson Creek Greenbelt", "park_johnson", 17, -97.7778126841638, -97.7597070413585, 31.8051150115367, 31.787850932474)); austinmap.addMap(new GoogleMap()); austinmap.addMap(new GoogleSatelliteMap()); austinmap.centerll = new Point(-97.75, latToY(30.3)); austinmap.setCornerFromLL(); austinmap.paint(); } /* function void init_determineEnvironment() Sets global variables which have information about what type of environment the script is operating in. */ function init_determineEnvironment() { DHTML = (document.getElementById || document.all || document.layers); if (!DHTML) { document.write('

You are using a nonstandard browser. An administrator has been alerted and we will try to add support for your browser as soon as possible. In the meantime, please consider upgrading to a more friendly browser such as Mozilla\'s Firefox. You can also try using the old Java version of the map applet. Check back soon.

'); return; } var agt = navigator.userAgent.toLowerCase(); var IE = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1)); ie = IE; var IE3 = (IE && (parseInt(navigator.appVersion) < 4)); var IE4 = (IE && (parseInt(navigator.appVersion) == 4) && (agt.indexOf("msie4")!=-1)); var IE5 = (IE && (parseInt(navigator.appVersion) == 4) && (agt.indexOf("msie 5.0")!=-1) ); ie55up = (IE && !(IE3) && !(IE4) && !(IE5)); ie55down = (IE && !ie55up); isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1; return true; } /* function void init_displayBrowserWarnings() Displays warnings about the browser being outdated, if necessary. */ function init_displayBrowserWarnings() { warning = new getObj('browserwarning'); warning.style.position = 'absolute'; warning.style.overflow = 'hidden'; if (ie55down) { showWarning = true; parent.left.location = "browsers.php"; } else { warning.style.height = 0; if (warning.style.display) warning.style.display = "none"; } return true; } /* function void init_setEventHandler() Registers the event handler function. */ function init_setEventHandler() { mapdiv = new getObj('map'); if (document.getElementById || document.all) // mozilla & IE start here { if (window.captureEvents) window.captureEvents(Event.Click | Event.DblClick | Event.MouseDown | Event.MouseMove | Event.MouseOut | Event.MouseUp | Event.Resize); mapdiv.obj.onclick = eventHandler; mapdiv.obj.ondblclick = eventHandler; mapdiv.obj.onmousedown = eventHandler; mapdiv.obj.onmousemove = eventHandler; mapdiv.obj.onmouseout = eventHandler; mapdiv.obj.onmouseup = eventHandler; window.onresize = eventHandler; } return true; } /* function void init_setMapDivStyle() Sets the style values for the map div. */ function init_setMapDivStyle() { mapdiv.style.visibility = 'visible'; mapdiv.style.position = 'absolute'; mapdiv.style.top = showWarning ? (topOff + warningHeight) : topOff; mapdiv.style.width = 486; mapdiv.style.height = showWarning ? (486 - warningHeight) : 486; mapdiv.style.overflow = 'hidden'; return true; } /* function void addImage() Adds an image to the mapdiv. */ function addImage() { newimgdiv.appendChild(document.createElement('img')); //mapdiv.obj.appendChild(document.createElement('img')); } /* function void addObjectToMap(String elem) Adds a new HTML element to the mapdiv object. */ function addObjectToMap(elem) { mapdiv.obj.appendChild(document.createElement(elem)); } /* function number cap(number val, number maxval) Caps the value of val at maxval; i.e. returns the lesser of val and maxval. */ function cap(val, maxval) { if (val > maxval) return maxval; return val; } function centerOn(val) { aMap().centerOn(val); } function contributeMode() { aMap().contributeMode(); } /* function number cup(number val, number minval) Cups the value of val at minval; i.e. returns the greater of val and minval; */ function cup(val, minval) { if (val < minval) return minval; return val; } //! DEPRECATED: object-orient into AustinMap /* function void eventHandler(Event e) Handles events. */ function eventHandler(e) { aMap().eventHandler(e); } /* public Object getObj(String name) Returns an HTML element, with the object stored in this.obj and its style element stored in this.style. */ function getObj(name) { if (document.getElementById) { /* mozilla uses this one */ //if (!document.getElementById(name)) alert('Object not found: ' + name); this.obj = document.getElementById(name); this.style = document.getElementById(name).style; } else if (document.all) { this.obj = document.all[name]; this.style = document.all[name].style; } else if (document.layers) { this.obj = document.layers[name]; this.style = document.layers[name]; } } /* function void hideWarning() Hides the outdated browser warning message. */ function hideWarning() { showWarning = false; warning.style.height = 0; if (warning.style.display) warning.style.display = "none"; map.style.top = topOff; austinmap.paint(); } /* public HotImage HotImage([int left, int top, int width, int height, String src, [boolean hot]]) Initializes a HotImage. */ var docimgsidx = 0; function HotImage() { addImage(); this.imag = document.images[docimgsidx]; ++docimgsidx; this.imag.style.position = 'absolute'; if (!ie55down) this.imag.style.cursor = 'pointer'; this.imag.style.overflow = 'hidden'; this.arean = new Square(0, 0, 0, 0); this.contains = HotImage_contains; this.height = HotImage_height; this.hot = HotImage_hot; this.i2 = null this.idx = null; this.j2 = null this.left = HotImage_left; // toggle hotimage active this.on = true; this.ispng = false; // stores whether this hotImage is a png this.pngSrc = HotImage_pngSrc; this.shift = HotImage_shift; this.src = HotImage_src; this.top = HotImage_top; this.width = HotImage_width; this.zoom = null; if (arguments.length > 0) { this.left(arguments[0]); this.top(arguments[1]); this.width(arguments[2]); this.height(arguments[3]); this.src(arguments[4]); if (arguments.length == 6) this.hot(arguments[5]); } } /* public boolean HotImage.contains(Point pt) Returns true if pt is in this HotImage. */ function HotImage_contains(pt) { return this.arean.contains(pt); } /* public void HotImage.height(int val) Moves this HotImage's height to val. */ function HotImage_height(val) { this.imag.height = val; if (this.ispng && ie55up) this.imag.style.height = val; this.arean.bottom = this.arean.top + val; } /* public void HotImage.val(boolean val) Toggles this HotImage on or off. Does nothing if new setting matches current setting. */ function HotImage_hot(val) { if (this.on == val) return; if (val == false) { this.imag.src_old = this.imag.src; this.imag.src = 'images/clear.gif'; if (!ie55down) this.imag.style.cursor = 'default'; this.imag.style.visibility = 'hidden'; this.on = false; } else if (val == true) { this.imag.src = this.imag.src_old; if (!ie55down) this.imag.style.cursor = 'pointer'; this.imag.style.visibility = 'visible'; this.on = true; } } /* public void HotImage.left(int val) Moves this HotImage's left edge to val. */ function HotImage_left(val) { this.imag.style.left = val; this.arean.left = val; this.arean.right = this.arean.left + parseInt(this.imag.width); } /* public void HotImage.shift(int x, int y) Moves this HotImage right by x, down by y. */ function HotImage_shift(x, y) { this.left(this.arean.left + x); this.top(this.arean.top + y); } /* public void HotImage.pngSrc(String val) Changes this HotImage's source to the png file val. */ function HotImage_pngSrc(val) { this.src('images/clear.gif'); this.ispng = true; if (ie55up) { this.imag.src = 'images/blank.png'; this.imag.style.width = this.arean.right - this.arean.left; this.imag.style.height = this.arean.bottom - this.arean.top; var filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader"; filter += "(src=\'" + val + "\', sizingMethod='scale')"; this.imag.style.filter = filter; } else this.imag.src = val; } /* public void HotImage.src(String val) Changes this HotImage's source to the non-png file val. */ function HotImage_src(val) { if (this.ispng) { if (ie55up) { // in this case, be sure to call src after resizing image... this.imag.style.width = this.arean.right - this.arean.left; this.imag.style.height = this.arean.bottom - this.arean.top; this.imag.style.filter = ''; } this.ispng = false; } this.imag.src = 'images/clear.gif'; this.imag.src = val; } /* public void HotImage.top(String val) Changes this HotImage's top edge to val. */ function HotImage_top(val) { this.imag.style.top = val; this.arean.top = val; this.arean.bottom = this.arean.top + parseInt(this.imag.height); } /* public void HotImage.width(int val) Changes this HotImage's width to val. */ function HotImage_width(val) { this.imag.width = val; if (this.ispng && ie55up) this.imag.style.width = val; this.arean.right = this.arean.left + val; } /* function double latToY(float lat) Changes latitude to Mercator Projection Y. */ function latToY(lat) { lat = toRadians(lat); return toDegrees ( Math.log ( Math.tan (lat) + (1 / Math.cos (lat)) ) ); } /* function number limit (number val, number minval, number maxval) Returns val, restricting it to the range minval <= val <= maxval. */ function limit(val, minval, maxval) { if (val < minval) return minval; if (val > maxval) return maxval; return val; } function makeMapMode() { austinmap.makeMapMode(); } function makeMapModeCancel() { austinmap.makeMapModeCancel(); } function aMap() { return austinmap; } /* Employee.prototype = new Person(); Employee.prototype.constructor = Employee; Employee.superclass = Person.prototype; */ function GoogleMap() { this.id = -2; this.title = 'Google'; this.maxzl = 17; this.getTile = GoogleMap_getTile; this.inSquare = GoogleMap_inSquare; } function GoogleMap_getTile(zl, x, y) { return 'http://mt0.google.com/mt?v=w2.88&hl=en&x=' + (x - 1) + '&y=' + (y - 1) + '&z=' + zl; } function GoogleMap_inSquare() { return true; } function GoogleSatelliteMap() { this.id = -1; this.title = 'Google Satellite'; this.maxzl = 17; this.getTile = GoogleSatelliteMap_getTile; this.getTileFromLatLong = GoogleSatelliteMap_getTileFromLatLong; this.inSquare = GoogleSatelliteMap_inSquare; } function GoogleSatelliteMap_getTile(zl, x, y) { var ext = 't'; var numtil = Math.pow(2, zl); --x; --y; while (zl > 0) { numtil /= 2; var xmod = Math.floor(x / numtil); var ymod = Math.floor(y / numtil); x %= numtil; y %= numtil; if (xmod == 0 && ymod == 0) ext += 'q'; else if (xmod == 1 && ymod == 0) ext += 'r'; else if (xmod == 1 && ymod == 1) ext += 's'; else if (xmod == 0 && ymod == 1) ext += 't'; --zl; } return 'http://kh.google.com/kh?v=3&t=' + ext; } // zoom is my zoom, with world = 0 function GoogleSatelliteMap_getTileFromLatLong(zoom, lat, lng) { var ext = 't'; while (zoom > 0) { if (lat > 0 && lng < 0) ext += 'q'; else if (lat > 0 && lng > 0) ext += 'r'; else if (lat < 0 && lng > 0) ext += 's'; else if (lat < 0 && lng < 0) ext += 't'; if (lat > 0) lat = 2 * lat - 180; else lat = 2 * lat + 180; if (lng > 0) lng = 2 * lng - 180; else lng = 2 * lng + 180; --zoom; } return 'http://kh.google.com/kh?v=3&t=' + ext; } function GoogleSatelliteMap_inSquare() { return true; } function PlusMap() { this.id = -3; this.title = 'Pluses'; this.maxzl = 17; this.xLeft = -180.0; this.xRight = 180.0; this.yTop = 180.0; this.yBottom = -180.0; this.getTile = PlusMap_getTile; this.inSquare = PlusMap_inSquare; this.setBounds = PlusMap_setBounds; var numzls = this.maxzl + 1; this.bottomTile = new Array(numzls); this.leftTile = new Array(numzls); this.rightTile = new Array(numzls); this.topTile = new Array(numzls); } function PlusMap_getTile(zl, x, y) { if (x < this.leftTile[zl] || x > this.rightTile[zl] || y < this.topTile[zl] || y > this.bottomTile[zl]) return 'images/blank.png'; return 'tiles/tiles_plus/plus_' + zl + '_' + (y - 1) + '_' + (x - 1) + '.png'; } function PlusMap_inSquare(s) { var box = new Square( austinmap.yToPixels(this.yTop), austinmap.xToPixels(this.xRight), austinmap.yToPixels(this.yBottom), austinmap.xToPixels(this.xLeft) ); return box.inSquare(s); } function PlusMap_setBounds() { for (var zl = 0; zl <= this.maxzl; ++zl) { var latOffset = austinmap.Y_TOP - this.yBottom; var zeroTilePosition = latOffset / austinmap.TILE_SIDE_LL; this.bottomTile[zl] = Math.ceil (zeroTilePosition * Math.pow (austinmap.ZF, zl)); var longOffset = this.xLeft - austinmap.X_LEFT; zeroTilePosition = longOffset / austinmap.TILE_SIDE_LL; this.leftTile[zl] = Math.floor (zeroTilePosition * Math.pow (austinmap.ZF, zl)) + 1; longOffset = this.xRight - austinmap.X_LEFT; zeroTilePosition = longOffset / austinmap.TILE_SIDE_LL; this.rightTile[zl] = Math.ceil (zeroTilePosition * Math.pow (austinmap.ZF, zl)); latOffset = austinmap.Y_TOP - this.yTop; zeroTilePosition = latOffset / austinmap.TILE_SIDE_LL; this.topTile[zl] = Math.floor (zeroTilePosition * Math.pow (austinmap.ZF, zl)) + 1; } } /* public Map Map(int id, String title, String ext, int maxzl, double xleft, double xright, double ytop, double ybottom) Initializes a new Map. */ function Map(id, title, ext, maxzl, xleft, xright, ytop, ybottom) { this.id = id; this.title = title; this.tileext = ext; this.base = 'tiles/tiles_' + this.tileext + '/' + this.tileext + '_'; this.maxzl = maxzl; this.xLeft = xleft; this.xRight = xright; this.yTop = ytop; this.yBottom = ybottom; this.xSpan = this.xRight - this.xLeft; this.ySpan = this.yTop - this.yBottom; this.getTile = Map_getTile; this.inSquare = Map_inSquare; var numzls = this.maxzl + 1; this.bottomTile = new Array(numzls); this.leftTile = new Array(numzls); this.rightTile = new Array(numzls); this.topTile = new Array(numzls); for (var zl = 0; zl <= this.maxzl; ++zl) { var latOffset = austinmap.Y_TOP - this.yBottom; var zeroTilePosition = latOffset / austinmap.TILE_SIDE_LL; this.bottomTile[zl] = Math.ceil (zeroTilePosition * Math.pow (austinmap.ZF, zl)); var longOffset = this.xLeft - austinmap.X_LEFT; zeroTilePosition = longOffset / austinmap.TILE_SIDE_LL; this.leftTile[zl] = Math.floor (zeroTilePosition * Math.pow (austinmap.ZF, zl)) + 1; longOffset = this.xRight - austinmap.X_LEFT; zeroTilePosition = longOffset / austinmap.TILE_SIDE_LL; this.rightTile[zl] = Math.ceil (zeroTilePosition * Math.pow (austinmap.ZF, zl)); latOffset = austinmap.Y_TOP - this.yTop; zeroTilePosition = latOffset / austinmap.TILE_SIDE_LL; this.topTile[zl] = Math.floor (zeroTilePosition * Math.pow (austinmap.ZF, zl)) + 1; } } /* public String Map.getTile(int zl, int x, int y) Gets the filename for the tile of this Map at the specified zoom level, and x and y coordinate. */ function Map_getTile(zl, x, y) { if (zl > this.maxzl) return 'images/nomap.gif'; if (x < this.leftTile[zl] || x > this.rightTile[zl] || y < this.topTile[zl] || y > this.bottomTile[zl]) return 'images/dragons_dark.jpg'; return this.base + zl + '_' + y + '_' + x + '.jpg'; } /* public boolean Map.inSquare(Square s) Returns true if any portion of this Map is in the Square s. The Square s is already in AustinMap coordinates for the zoom level zl. */ function Map_inSquare(s) { var box = new Square( austinmap.yToPixels(this.yTop), austinmap.xToPixels(this.xRight), austinmap.yToPixels(this.yBottom), austinmap.xToPixels(this.xLeft) ); return box.inSquare(s); } /* function number max (number[] val) Returns the maximum value in the passed array. */ function max() { if (arguments.length == 0) return null; var result = arguments[0]; for (var i = 1; i < arguments.length; ++i) { if (arguments[i] > result) result = arguments[i]; } return result; } /* function number min (number[] val) Returns the minimum value in the passed array. */ function min() { if (arguments.length == 0) return null; var result = arguments[0]; for (var i = 1; i < arguments.length; ++i) { if (arguments[i] < result) result = arguments[i]; } return result; } function movePic(picid) { austinmap.movePic(picid); } /* public Node Node(Object val) Initializes a Node object with val as its value. */ function Node(val) { this.value = val; this.next = null; } /* public Picture Picture([int id, double xco, double yco, int degrees, int range, String filename, int thumbwidth, int thumbheight]) Initializes a Picture object. */ function Picture() { this.center = new Point(0, 0); this.degrees = 0; this.id = 0; this.filename = null; this.twidth = 0; this.theight = 0; this.distanceFrom = Picture_distanceFrom; this.getPoint = Picture_getPoint; this.inArrow = Picture_inArrow; this.setPoint = Picture_setPoint; if (arguments.length > 0) { this.id = arguments[0]; this.setPoint(new Point(arguments[1], arguments[2])); this.degrees = arguments[3]; this.range = arguments[4]; if (this.range == null) this.range = 0; this.filename = arguments[5]; this.twidth = arguments[6]; this.theight = arguments[7]; } } /* public double Picture.distanceFrom(amap, xpixel, ypixel) Returns the distance from the click at (xpixel, ypixel) (which already has corner.x and corner.y added) to this Picture's center. Returns the actual distance squared for points, and the distance to the projected line for arrows. */ function Picture_distanceFrom(amap, xpixel, ypixel) { if (this.range < amap.minArrow[amap.zl]) /* pluses */ { var click = new Point(xpixel, ypixel); return click.distanceSq( new Point( amap.xToPixels(this.center.x), amap.yToPixels(this.center.y) )); } else /* arrows */ { var x1 = amap.xToPixels(this.center.x); var y1 = amap.yToPixels(this.center.y); var radix = amap.arrowRadius[amap.zl][this.range][0]; var rad = toRadians(this.degrees); var x2 = x1 + Math.round(radix * Math.cos(rad)); var y2 = y1 - Math.round(radix * Math.sin(rad)); return ptSegDist(x1, y1, x2, y2, xpixel, ypixel); } } /* public Point Picture.getPoint(int level) Returns the point at which a picture resides in the zoomlevel level. */ function Picture_getPoint(level) { return new Point(austinmap.xToPixels(this.center.x, level), austinmap.yToPixels(this.center.y, level)); } /* public boolean Picture.inArrow(AustinMap amap, int xpixel, int ypixel) Returns whether the click at (xpixel, ypixel) (which already has corner.x and corner.y added) is located in this picture's region. */ function Picture_inArrow(amap, xpixel, ypixel) { if (this.range < amap.minArrow[amap.zl]) /* pluses */ { var xpos = amap.xToPixels(this.center.x); var ypos = amap.yToPixels(this.center.y); var rad = amap.plusRadius[amap.zl]; var abox = new Square( ypos - rad, xpos + rad, ypos + rad, xpos - rad); return abox.contains(new Point(xpixel, ypixel)); } else /* arrows */ { var xpos = amap.xToPixels(this.center.x); var ypos = amap.yToPixels(this.center.y); var rad = amap.arrowRadius[amap.zl][this.range][0]; var tip = amap.arrowRadius[amap.zl][this.range][1]; var radians = toRadians(this.degrees); var cosT = Math.cos(radians); var sinT = Math.sin(radians); var acosT = tip * cosT; var asinT = tip * sinT; var bcosT = rad * cosT; var bsinT = rad * sinT; var arrow = new Triangle( new Point(xpos, ypos), new Point(xpos + bcosT + asinT, ypos - bsinT + acosT), new Point(xpos + bcosT - asinT, ypos - bsinT - acosT) ); return arrow.boundingContains(new Point(xpixel, ypixel)); } } /* public void Picture.setPoint(Point pt) Sets this Picture's point at pt, and sets the values for other zoom levels. */ function Picture_setPoint(pt) { this.center = new Point(pt.x, pt.y); } /* public Point Point(int xcoord, int ycoord) Initializes a Point object with center (xcoord, ycoord). */ function Point(xcoord, ycoord) { this.x = new Number(xcoord); this.y = new Number(ycoord); this.distance = Point_distance; this.distanceSq = Point_distanceSq; } /* public double Point_distance(Point pt2) Returns the distance from this point to pt2. */ function Point_distance(pt2) { return Math.sqrt(this.distanceSq(pt2)); } /* public double Point_distanceSq(Point pt2) Returns the distance squared from this point to pt2. */ function Point_distanceSq(pt2) { return Math.pow(pt2.x - this.x, 2) + Math.pow(pt2.y - this.y, 2); } /* function double ptSegDist(int x1, int y1, int x2, int y2, int px, int py) Returns the shortest distance from the point (px, py) to the line segment with ends (x1, y1) and (x2, y2). */ function ptSegDist(x1, y1, x2, y2, px, py) { /* algorithm taken from Java's Line2D.ptSegDist method code from: http://developer.classpath.org/doc/java/awt/geom/Line2D-source.html */ var pd2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); var x; var y; if (pd2 == 0) { x = x1; y = y2; } else { var u = ((px - x1) * (x2 - x1) + (py - y1) * (y2 - y1)) / pd2; if (u < 0) { // "Off the end" x = x1; y = y1; } else if (u > 1.0) { x = x2; y = y2; } else { x = x1 + u * (x2 - x1); y = y1 + u * (y2 - y1); } } return Math.sqrt( (x - px) * (x - px) + (y - py) * (y - py) ); } /* public Queue Queue() Initializes a new Queue. */ function Queue() { this.head = null; this.length = 0; this.clear = Queue_clear; this.dequeue = Queue_dequeue; this.enqueue = Queue_enqueue; this.hasNext = Queue_hasNext; } /* public void Queue.clear() Clears this Queue. */ function Queue_clear() { this.head = null; this.length = 0; } /* public Object Queue.dequeue() Pops the next object on the Queue and returns it. */ function Queue_dequeue() { if (this.length == 0) return; var result = this.head.value; this.head = this.head.next; --this.length; return result; } /* public void Queue.enqueue(Object val) Adds the object val to the end of this Queue. */ function Queue_enqueue(val) { ++this.length; if (this.head == null) this.head = new Node(val); else { var current = this.head; while (current.next != null) current = current.next; current.next = new Node(val); } } /* public boolean Queue.hasNext() Returns true if this Queue has another Object left. */ function Queue_hasNext() { return (this.length != 0); } /* public RegImage RegImage([int left, int top, int width, int height, String src, [boolean vis]]) Initializes a new RegImage. */ function RegImage() { addImage(); this.imag = document.images[docimgsidx]; ++docimgsidx; this.imag.style.position = 'absolute'; this.imag.style.overflow = 'hidden'; this.arean = new Square(0, 0, 0, 0); this.curs = 'default'; this.i2 = null; this.idx = null; this.j2 = null; // toggle regimage visible this.on = true; this.ispng = false; this.srcpng = null; this.zoom = null; this.cursor = RegImage_cursor; this.height = RegImage_height; this.left = RegImage_left; this.pngSrc = RegImage_pngSrc; this.src = RegImage_src; this.top = RegImage_top; this.toString = RegImage_toString; this.vis = RegImage_vis; this.width = RegImage_width; if (arguments.length > 0) { this.left(arguments[0]); this.top(arguments[1]); this.width(arguments[2]); this.height(arguments[3]); this.src(arguments[4]); if (arguments.length == 6) this.vis(arguments[5]); else this.vis(true); } else { this.left(0); this.top(0); this.width(1); this.height(1); this.src('images/clear.gif'); this.vis(true); } } /* public void RegImage.cursor(String val) Changes this RegImage's cursor to val. */ function RegImage_cursor(val) { this.curs = val; if (this.on || arguments.length > 1) //! what is the second argument for? this.imag.style.cursor = val; } /* public void RegImage.height(int val) Changes this RegImage's height to val. */ function RegImage_height(val) { this.imag.height = val; this.imag.style.height = val; this.arean.bottom = this.arean.top + val; } /* public void RegImage.left(int val) Changes the position of this RegImage's left side to val. */ function RegImage_left(val) { this.imag.style.left = val; var theWidth = this.arean.right - this.arean.left; this.arean.left = val; this.arean.right = this.arean.left + theWidth; } /* public void RegImage.pngSrc(String val) Changes this RegImage's source to the png file val. */ function RegImage_pngSrc(val) { if (!val) return; this.src('images/clear.gif'); this.ispng = true; this.srcpng = val; if (ie55up) { this.imag.style.width = this.arean.right - this.arean.left; this.imag.style.height = this.arean.bottom - this.arean.top; var filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader"; filter += "(src='" + val + "', sizingMethod='scale');"; this.imag.style.filter = filter; } else this.src(val); } /* public void RegImage.src(String val) Changes this RegImage's source to the non-png file val. */ function RegImage_src(val) { if (this.ispng) { if (ie55up) { // in this case, be sure to call src after resizing image... this.imag.style.filter = ''; } this.ispng = false; } this.imag.src = 'images/clear.gif'; this.imag.src = val; } /* public void RegImage.top(String val) Changes the position of this RegImage's top edge to val. */ function RegImage_top(val) { this.imag.style.top = val; var theHeight = this.arean.bottom - this.arean.top; this.arean.top = val; this.arean.bottom = this.arean.top + theHeight; } /* public string RegImage.toString() Returns a string describing this RegImage. */ function RegImage_toString() { var result = ''; // result += 'RegImage;'; // result += ' position: ' + this.imag.style.position + ';'; // result += ' overflow: ' + this.imag.style.overflow + ';'; result += ' vis: ' + this.imag.style.visibility + ';'; result += ' (t,r,b,l): (' + this.arean.top + ', ' + this.arean.right + ', ' + this.arean.bottom + ', ' + this.arean.left + ');'; // result += ' cursor: ' + this.curs + ';'; result += ' i2: ' + this.i2 + ';'; result += ' j2: ' + this.j2 + ';'; // result += ' idx: ' + this.idx + ';'; result += ' on: ' + this.on + ';'; result += ' ispng: ' + this.ispng + ';'; result += ' src: ' + this.imag.src + ';'; result += ' srcpng: ' + this.srcpng + ';'; result += ' zoom: ' + this.zoom + ';'; return result; } /* public void RegImage.vis(boolean val) Toggles this RegImage on or off (visible/invisible). */ function RegImage_vis(val) { if (this.on == val) return; if (val == false) { if (!ie55down) this.imag.style.cursor = 'default'; if (this.ispng) { if (ie55up) this.imag.style.filter = ''; } else this.imag.style.visibility = 'hidden'; } else if (val == true) { if (!ie55down) this.imag.style.cursor = this.curs; if (this.ispng) this.pngSrc(this.srcpng); this.imag.style.visibility = 'visible'; } this.on = val; } /* public void RegImage.width(int val) Sets this RegImage's width to val. */ function RegImage_width(val) { this.imag.width = val; this.imag.style.width = val; this.arean.right = this.arean.left + val; } /* function int roundBig(double val) Rounds val up absolutely (away from zero). */ function roundBig(val) { if (Math.round(val) == val) return val; if (val > 0) return Math.ceil(val); return -1 * Math.ceil(-1 * val); } /* function void setContent(HTMLObject element, Object newcontent) Sets the content of element to newcontent. Tested only with cells; may work with other elements. */ function setContent(element, newcontent) { if (element == null) return; if (element.innerHTML || element.innerHTML == '') element.innerHTML = newcontent; else if (document.createRange()) { range = document.createRange(); // remove old content //while (element.hasChildNodes()) // element.removeChild(element.lastChild); range.setStartAfter(element); docFrag = range.createContextualFragment(newcontent); element.appendChild(docFrag); } } /* public Square Square(int top, int right, int bottom, int left) Initializes a Square object. (Image coordinates, with left->x->right, top->y->bottom) */ function Square(top, right, bottom, left) { this.top = top; this.right = right; this.bottom = bottom; this.left = left; this.contains = Square_contains; this.inSquare = Square_inSquare; } /* public boolean Square.contains(Point pt) Returns true if the Point pt is in this Square. */ function Square_contains(pt) { return ( (pt.x >= this.left) && (pt.x <= this.right) && (pt.y >= this.top) && (pt.y <= this.bottom) ); } /* public boolean Square.inSquare(Square s) Returns true if any portion of the Square s is in this Square. */ function Square_inSquare(s) { return ( s.right > this.left && s.bottom > this.top && s.left < this.right && s.top < this.bottom ); } /* function double toDegrees(double rad) Returns the conversion of rad from radians to degrees. */ function toDegrees(rad) { return (180 * rad / Math.PI); } /* function double toRadians(double deg) Returns the conversion of deg from degrees to radians. */ function toRadians(deg) { return (Math.PI * deg / 180); } /* public Triangle Triangle(Point p1, Point p2, Point p3) Initializes a new Triangle with corners p1, p2, p3. (Image coordinates, with left->x->right, top->y->bottom) */ function Triangle(p1, p2, p3) { this.p1 = p1; this.p2 = p2; this.p3 = p3; this.boundingContains = Triangle_boundingContains; } /* public boolean Triangle.boundingContains(Point p) Returns true if the bounding box for this triangle contains the Point p. */ function Triangle_boundingContains(p) { var box = new Square( min(this.p1.y, this.p2.y, this.p3.y), max(this.p1.x, this.p2.x, this.p3.x), max(this.p1.y, this.p2.y, this.p3.y), min(this.p1.x, this.p2.x, this.p3.x) ); return box.contains(p); }