if (GBrowserIsCompatible()) { var map; var mapX1 = 0; var mapY1 = 0; var mapX2 = 0; var mapY2 = 0; var mapXoff = 0; var mapYoff = 0; var mapDrag = 0; var mapDragType = 'rect'; var mapSelectOverlay; var markers = new Array(); var hmarkers = new Array(); var cmarker = 0; var mapzoommin = 5; var mapzoommax = 17; var mapzoomdef = 5; var mapRegionOverlay = new Array(); var mapResetBounds = new GBounds(0,0,0,0); var sliderUpdate = 0; var clickcapInterval = 0; var searchdata; var icon_red = new GIcon(); icon_red.image = "http://198.173.80.15/map/gfx/icon_red.png"; icon_red.shadow = "http://198.173.80.15/map/gfx/icon_shadow.png"; icon_red.iconSize = new GSize(11,12); icon_red.shadowSize = new GSize(14,15); icon_red.iconAnchor = new GPoint(5,6); icon_red.infoWindowAnchor = new GPoint(13,0); var icon_blue = new GIcon(); icon_blue.image = "http://198.173.80.15/map/gfx/icon_blue.png"; icon_blue.shadow = "http://198.173.80.15/map/gfx/icon_shadow.png"; icon_blue.iconSize = new GSize(11,12); icon_blue.shadowSize = new GSize(14,15); icon_blue.iconAnchor = new GPoint(5,6); icon_blue.infoWindowAnchor = new GPoint(13,0); var icon_multred = new GIcon(); icon_multred.image = "http://198.173.80.15/map/gfx/icon_multred.png"; icon_multred.shadow = "http://198.173.80.15/map/gfx/icon_multshadow.png"; icon_multred.iconSize = new GSize(15,12); icon_multred.shadowSize = new GSize(18,15); icon_multred.iconAnchor = new GPoint(7,6); icon_multred.infoWindowAnchor = new GPoint(16,0); var icon_multblue = new GIcon(); icon_multblue.image = "http://198.173.80.15/map/gfx/icon_multblue.png"; icon_multblue.shadow = "http://198.173.80.15/map/gfx/icon_multshadow.png"; icon_multblue.iconSize = new GSize(15,12); icon_multblue.shadowSize = new GSize(18,15); icon_multblue.iconAnchor = new GPoint(7,6); icon_multblue.infoWindowAnchor = new GPoint(16,0); var icon_clickcap = new GIcon(); icon_clickcap.image = "http://198.173.80.15/map/gfx/icon_clickcap.png"; icon_clickcap.shadowSize = new GSize(0,0); icon_clickcap.iconAnchor = new GPoint(0,0); } function initMap(mapdiv,xmldata) { if (GBrowserIsCompatible()) { map = new GMap2(mapdiv); mapReset(); if (!document.all) map.disableDragging(); icon_clickcap.iconSize = new GSize(getWidth(mapdiv),getHeight(mapdiv)); cmarker = new GMarker(map.fromDivPixelToLatLng(new GPoint(0,0)),{icon:icon_clickcap,draggable:true,dragCrossMove:true}); GEvent.addListener(cmarker, 'mousedown', mapMouseDown); cmarker.enableDragging(); map.addOverlay(cmarker); if (xmldata && xmldata.length > 0) { searchdata = dat2array(xmldata); addPoints(); } } } function mapResetClickcap() { if (clickcapInterval) clearInterval(clickcapInterval); if (cmarker) { var bounds = map.getBounds(); var nw = new GLatLng(bounds.getNorthEast().lat(),bounds.getSouthWest().lng()); cmarker.setPoint(nw); } } function mapReset() { if (mapSelectOverlay) map.removeOverlay(mapSelectOverlay); map.setCenter(new GLatLng(45.7, -122.5)); map.setZoom(0); if (mapResetBounds.minX != 0) mapZoomToBounds( mapResetBounds ); else mapZoomTo(mapzoomdef); } var IE = document.all?true:false; var mx = 0; var my = 0; function trackmouse(e) { var tmx = 0; var tmy = 0; if (e) { tmx = e.x; tmy = e.y; } if (IE) { tmx = window.event.clientX + document.body.scrollLeft; tmy = window.event.clientY + document.body.scrollTop; } else { tmx = e.layerX - 2; tmy = e.layerY - 2; } // catch possible negative values in NS4 if (tmx > -1 && tmy > -1) { mx = tmx; my = tmy; } return true; } if (!IE) document.captureEvents(Event.MOUSEMOVE) document.onmousemove = trackmouse; function mapMouseDown() { var bounds = map.getBounds(); var se = new GLatLng(bounds.getSouthWest().lat()*2,bounds.getNorthEast().lng()*2); cmarker.setPoint(se); var point = new GPoint(mx,my); getObject('mapmousediv').style.visibility = 'visible'; map.disableDragging(); mapX1 = point.x;// - mapXoff; mapY1 = point.y;// - mapYoff; mapX2 = mapX1; mapY2 = mapY1; mapDrag = 1; var dragnote = getObject("dragselectnote"); if (mapDragType=='rect') { dragnote.style.visibility = "hidden"; if (mapSelectOverlay) map.removeOverlay(mapSelectOverlay); } else if (mapDragType=='line' || mapDragType=='radius') { var mapdiv = getObject('mapdiv'); var bounds = map.getBounds(); var widthLatLng = bounds.getNorthEast().lng() - bounds.getSouthWest().lng(); var heightLatLng = bounds.getNorthEast().lat() - bounds.getSouthWest().lat(); var widthXY = getWidth(mapdiv); var heightXY = getHeight(mapdiv); var mapX1LL = mapX1 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY1LL = bounds.getNorthEast().lat() - mapY1 / heightXY * heightLatLng; var mapX2LL = mapX2 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY2LL = bounds.getNorthEast().lat() - mapY2 / heightXY * heightLatLng; var noterefX, noterefY; if (mapDragType=='line') { noterefX = mapX2 + getLeft(mapdiv); noterefY = mapY2 + getTop(mapdiv); } else { if (mapSelectOverlay) map.removeOverlay(mapSelectOverlay); noterefX = mapX2 + getLeft(mapdiv); noterefY = mapY2 + getTop(mapdiv); } dragnote.style.visibility = "hidden"; setLeft(dragnote, noterefX + 5); setTop(dragnote, noterefY + 5); dragnote.innerHTML = mapDistanceMiles( new GPoint(mapX1LL,mapY1LL), new GPoint(mapX2LL,mapY2LL) )+" miles"; if (document.getBoxObjectFor) { var rect = document.getBoxObjectFor(dragnote); if (rect.x + rect.width + 5 - mapXoff > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.width)); if (rect.y + rect.height + 5 - mapYoff > getHeight(mapdiv)) setTop(dragnote, noterefY - 5 - (rect.height)); } else { var rect = dragnote.getBoundingClientRect(); if (rect.right + 5 - mapXoff > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.right-rect.left)); if (rect.bottom + 5 - mapYoff > getHeight(mapdiv)) setTop(dragnote, noterefY - 5 - (rect.bottom-rect.top)); } } } function mapMouseDrag() { var point = new GPoint(mx,my); if (mapDrag > 0) { mapDrag = 2; if (mapSelectOverlay) map.removeOverlay(mapSelectOverlay); mapX2 = point.x; mapY2 = point.y; var mapdiv = getObject("mapdiv"); var dragnote = getObject("dragselectnote"); var bounds = map.getBounds(); var widthLatLng = bounds.getNorthEast().lng() - bounds.getSouthWest().lng(); var heightLatLng = bounds.getNorthEast().lat() - bounds.getSouthWest().lat(); var widthXY = getWidth(mapdiv); var heightXY = getHeight(mapdiv); var mapX1LL = mapX1 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY1LL = bounds.getNorthEast().lat() - mapY1 / heightXY * heightLatLng; var mapX2LL = mapX2 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY2LL = bounds.getNorthEast().lat() - mapY2 / heightXY * heightLatLng; if (mapDragType=='rect') { var points = []; points.push( new GPoint(mapX1LL,mapY1LL) ); points.push( new GPoint(mapX2LL,mapY1LL) ); points.push( new GPoint(mapX2LL,mapY2LL) ); points.push( new GPoint(mapX1LL,mapY2LL) ); points.push( new GPoint(mapX1LL,mapY1LL) ); mapSelectOverlay = new GPolyline(points,"#000055",2); map.addOverlay(mapSelectOverlay); } else if (mapDragType=='line') { var points = []; points.push( new GPoint(mapX1LL,mapY1LL) ); points.push( new GPoint(mapX2LL,mapY2LL) ); mapSelectOverlay = new GPolyline(points,"#000055",2); map.addOverlay(mapSelectOverlay); var noterefX = mapX2 + getLeft(mapdiv); var noterefY = mapY2 + getTop(mapdiv); dragnote.style.visibility = "visible"; dragnote.innerHTML = mapDistanceMiles( new GPoint(mapX1LL,mapY1LL), new GPoint(mapX2LL,mapY2LL) )+" miles"; if (document.getBoxObjectFor) { var rect = document.getBoxObjectFor(dragnote); setTop(dragnote, noterefY - 5 - (rect.height)); if (noterefX + (rect.width) + 5 > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.width)); else setLeft(dragnote, noterefX + 8); if (getTop(dragnote) - 5 < 0) setTop(dragnote, noterefY + 5); } else { var rect = dragnote.getBoundingClientRect(); setTop(dragnote, noterefY - 5 - (rect.bottom-rect.top)); if (noterefX + (rect.right-rect.left) + 5 > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.right-rect.left)); else setLeft(dragnote, noterefX + 8); if (getTop(dragnote) - 5 < 0) setTop(dragnote, noterefY + 5); } } else // radius { var points = []; var radius = mapDistanceKilometers( new GPoint(mapX1LL,mapY1LL), new GPoint(mapX2LL,mapY2LL) ) * 1000; var complexity = 15; var radians = Math.PI / 180; var longitudeOffset = radius / (Math.cos(mapY1LL * radians) * 111325); var latitudeOffset = radius / 111325; for (var i = 0; i < 360; i += complexity) { var point = new GPoint(mapX1LL + (longitudeOffset * Math.cos(i * radians)), mapY1LL + (latitudeOffset * Math.sin(i * radians))); points.push(point); } points.push(points[0]); // close the circle points.push( new GPoint(mapX1LL,mapY1LL) ); mapSelectOverlay = new GPolyline(points,'#000055',2); map.addOverlay(mapSelectOverlay); var noterefX = mapX1; var noterefY = mapY1; dragnote.style.visibility = "visible"; setLeft(dragnote, noterefX + 5); setTop(dragnote, noterefY + 5); dragnote.innerHTML = mapDistanceMiles( new GPoint(mapX1LL,mapY1LL), new GPoint(mapX2LL,mapY2LL) )+" miles"; if (document.getBoxObjectFor) { var rect = document.getBoxObjectFor(dragnote); if (rect.x + rect.width + 5 - mapXoff > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.width)); if (rect.y + rect.height + 5 - mapYoff > getHeight(mapdiv)) setTop(dragnote, noterefY - 5 - (rect.height)); } else { var rect = dragnote.getBoundingClientRect(); if (rect.right + 5 - mapXoff > getWidth(mapdiv)) setLeft(dragnote, noterefX - 5 - (rect.right-rect.left)); if (rect.bottom + 5 - mapYoff > getHeight(mapdiv)) setTop(dragnote, noterefY - 5 - (rect.bottom-rect.top)); } } } else { mapDrag = 0; } } function mapMouseUp() { var point = new GPoint(mx,my); if (mapDrag == 2) { mapDrag = 0; mapX2 = point.x; mapY2 = point.y; var mapdiv = getObject("mapdiv"); var points = []; var bounds = map.getBounds(); var widthLatLng = bounds.getNorthEast().lng() - bounds.getSouthWest().lng(); var heightLatLng = bounds.getNorthEast().lat() - bounds.getSouthWest().lat(); var widthXY = getWidth(mapdiv); var heightXY = getHeight(mapdiv); var mapX1LL = mapX1 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY1LL = bounds.getNorthEast().lat() - mapY1 / heightXY * heightLatLng; var mapX2LL = mapX2 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY2LL = bounds.getNorthEast().lat() - mapY2 / heightXY * heightLatLng; if (mapDragType=='rect') { var newbounds = new GBounds(bounds); newbounds.minX = Math.min(mapX1LL,mapX2LL); newbounds.minY = Math.min(mapY1LL,mapY2LL); newbounds.maxX = Math.max(mapX1LL,mapX2LL); newbounds.maxY = Math.max(mapY1LL,mapY2LL); mapZoomToBounds(newbounds); } else if (mapDragType=='line') { if (mapSelectOverlay) map.removeOverlay(mapSelectOverlay); } else if (mapDragType=='radius') { var newbounds = new GBounds(); newbounds.minX = Math.min(mapX1,mapX2) / widthXY * widthLatLng + bounds.getSouthWest().lng(); newbounds.minY = bounds.getNorthEast().lat() - (Math.min(mapY1,mapY2) / heightXY * heightLatLng); newbounds.maxX = Math.max(mapX1,mapX2) / widthXY * widthLatLng + bounds.getSouthWest().lng(); newbounds.maxY = bounds.getNorthEast().lat() - (Math.max(mapY1,mapY2) / heightXY * heightLatLng); var mapX1LL = mapX1 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY1LL = bounds.getNorthEast().lat() - mapY1 / heightXY * heightLatLng; var mapX2LL = mapX2 / widthXY * widthLatLng + bounds.getSouthWest().lng(); var mapY2LL = bounds.getNorthEast().lat() - mapY2 / heightXY * heightLatLng; var radius = mapDistanceKilometers( new GPoint(mapX1LL,mapY1LL), new GPoint(mapX2LL,mapY2LL) ) * 1000; var complexity = 90; var radians = Math.PI / 180; var longitudeOffset = radius / (Math.cos(mapY1LL * radians) * 111325); var latitudeOffset = radius / 111325; for (var i = 0; i < 360; i += complexity) { var x = mapX1LL + (longitudeOffset * Math.cos(i * radians)); var y = mapY1LL + (latitudeOffset * Math.sin(i * radians)); if ( x < newbounds.minX ) newbounds.minX = x; if ( x > newbounds.maxX ) newbounds.maxX = x; if ( y < newbounds.minY ) newbounds.minY = y; if ( y > newbounds.maxY ) newbounds.maxY = y; } mapZoomToBounds(newbounds); } } getObject("mapmousediv").style.visibility = "hidden"; getObject("dragselectnote").style.visibility = "hidden"; mapResetClickcap(); } function mapMouseOut() { mapDrag = 0; } function markerPopup(point,html) { var offsetX = 20; var offsetY = 0; var bounds = map.getBounds(); var width = bounds.getNorthEast().lng() - bounds.getSouthWest().lng(); var height = bounds.getNorthEast().lat() - bounds.getSouthWest().lat(); var boxsize = map.getSize(); var boxwidth = boxsize.width; var boxheight = boxsize.height; var pixelpoint = new GPoint(); pixelpoint.x = ((point.x - bounds.getSouthWest().lng())/width) * boxwidth; pixelpoint.y = boxheight - (((point.y - bounds.getSouthWest().lat())/height) * boxheight); var popup = getObject("markerpopup"); popup.innerHTML = html; var popwidth = getWidth(popup); var popheight = getHeight(popup); if ( (popwidth+offsetX+10) > boxwidth-pixelpoint.x ) offsetX = -1 * (popwidth+offsetX); if ( (popheight+10) > boxheight-pixelpoint.y ) offsetY = popheight-(boxheight-pixelpoint.y)+15; var newleft = pixelpoint.x + offsetX; var newtop = pixelpoint.y - offsetY; popup.style.position = "absolute"; setLeft(popup, newleft); setTop(popup, newtop); popup.style.visibility = "visible"; } function createMarker(point, number, icon) { var marker = new GMarker(point,icon); var html = basicInfo(searchdata[number]); GEvent.addListener(marker, 'mouseover', function() { markerPopup(point,html); var icondetail = getObject('detail'+number); icondetail.style.backgroundColor = "#CFD1FF"; scrollDetail(number); }); GEvent.addListener(marker, 'mouseout', function() { var popup = getObject("markerpopup"); popup.style.visibility="hidden"; var icondetail = getObject('detail'+number); icondetail.style.backgroundColor = "#FFFFFF"; }); GEvent.addListener(marker, 'click', function() { window.open(detailLink(searchdata[number]),"rprodetail"+number); }); marker.point = point; return marker; } function addPoints() { if (GBrowserIsCompatible()) { // center is GLatLng(45.7, -122.5) var bounds = new GBounds(-150,0,0,100); var detail = ''; for (var i = 0; i < searchdata.length; i++) { if (searchdata[i][10] != 0 && searchdata[i][11] != 0) { if (searchdata[i][10] < bounds.minX) bounds.minX = searchdata[i][10]; if (searchdata[i][10] > bounds.maxX) bounds.maxX = searchdata[i][10]; if (searchdata[i][11] < bounds.minY) bounds.minY = searchdata[i][11]; if (searchdata[i][11] > bounds.maxY) bounds.maxY = searchdata[i][11]; var point = new GPoint( searchdata[i][10], searchdata[i][11] ); markers[i] = createMarker(point,i,icon_blue); map.addOverlay(markers[i]); hmarkers[i] = createMarker(point,i,icon_red); detail += "
"+detailedInfo(searchdata[i])+"
"; } else { detail += "
"+detailedInfo(searchdata[i])+"
"; } } var detailbox = getObject("detail"); detailbox.innerHTML = detail; mapResetBounds.minX = bounds.minX; mapResetBounds.maxX = bounds.maxX; mapResetBounds.minY = bounds.minY; mapResetBounds.maxY = bounds.maxY; mapZoomToBounds( bounds ); sliderUpdate = setInterval("mapUpdateSlider()",300); } } function markerHighlight(id) { var icondetail = getObject('detail'+id); if (icondetail.style.backgroundColor != "#CFD1FF") { icondetail.style.backgroundColor = "#CFD1FF"; map.removeOverlay(markers[id]); map.addOverlay(hmarkers[id]); } } function markerUnhighlight(id) { var icondetail = getObject('detail'+id); if (icondetail.style.backgroundColor != "#FFFFFF") { icondetail.style.backgroundColor = "#FFFFFF"; map.addOverlay(markers[id]); map.removeOverlay(hmarkers[id]); } } function mapLoadRegionBounds(geturl,type) { var num = -1; if (type=='city' || type=='county' || type=='zip') { var request = getXmlHttp(); request.open('GET', geturl, true); if (type=='city') { request.onreadystatechange = function() { if (request.readyState == 4) { mapUpdateRegionOverlay(0,request,'#CC0000'); } } } else if (type=='county') { request.onreadystatechange = function() { if (request.readyState == 4) { mapUpdateRegionOverlay(1,request,'#005500'); } } } else if (type=='zip') { request.onreadystatechange = function() { if (request.readyState == 4) { mapUpdateRegionOverlay(2,request,'#0000CC'); } } } request.send(null); } } function mapUpdateRegionOverlay(num,request,color) { if (mapRegionOverlay[num]) map.removeOverlay(mapRegionOverlay[num]); var points = mapParsePoints(GXml.parse(request.responseText)); if (points[0]) { mapRegionOverlay[num] = new GPolyline(points,color,2); map.addOverlay(mapRegionOverlay[num]); var minlng = points[0].x; var maxlng = points[0].x; var minlat = points[0].y; var maxlat = points[0].y; for (var i = 1; i < points.length; i++) { if (points[i].x < minlng) minlng = points[i].x; if (points[i].x > maxlng) maxlng = points[i].x; if (points[i].y < minlat) minlat = points[i].y; if (points[i].y > maxlat) maxlat = points[i].y; } var bounds = new GBounds(minlng,minlat,maxlng,maxlat); mapResetBounds.minX = bounds.minX; mapResetBounds.maxX = bounds.maxX; mapResetBounds.minY = bounds.minY; mapResetBounds.maxY = bounds.maxY; mapZoomToBounds(new GBounds(minlng,minlat,maxlng,maxlat)); } } function mapClearRegionBounds() { for (var i = 0; i < 3; i++) { if (mapRegionOverlay[i]) map.removeOverlay(mapRegionOverlay[i]); mapRegionOverlay[i] = 0; } } function mapGetBounds() { return map.getBounds(); } function mapGetZoom() { return map.getZoom() - mapzoommin; } function mapZoom(direction) { if (direction == "in") map.zoomIn(); else if (map.getZoom() > mapzoommin) map.zoomOut(); mapResetClickcap(); setSliderPosition(mapGetZoom()/(mapzoommax-mapzoommin)); } function mapZoomTo(level) { if (level > (mapzoommax-mapzoommin) || level < 0 || map.getZoom() == (level+mapzoommin)) return; map.setZoom(level+mapzoommin); mapResetClickcap(); setSliderPosition(level/(mapzoommax-mapzoommin)); } function mapZoomToBounds(bounds) { var size = new GSize(bounds.maxX - bounds.minX, bounds.maxY - bounds.minY); var center = new GLatLng(bounds.minY + size.height / 2.0,bounds.minX + size.width / 2.0); var llbounds = new GLatLngBounds( new GLatLng(bounds.minY,bounds.minX), new GLatLng(bounds.maxY,bounds.maxX) ); map.setCenter(center, map.getBoundsZoomLevel(llbounds)); mapResetClickcap(); setSliderPosition(mapGetZoom()/(mapzoommax-mapzoommin)); } function mapZoomToPoint(lng,lat,zoom) { map.setCenter(new GLatLng(lat, lng), zoom+mapzoommin); mapResetClickcap(); setSliderPosition(zoom/(mapzoommax-mapzoommin)); } function mapZoomToSlider() { var slider = getObject('slider'); map.setZoom(mapzoommax-(slider.value)); mapResetClickcap(); } function mapUpdateSlider() { if (sliderUpdate) clearInterval(sliderUpdate) setSliderPosition(mapGetZoom()/(mapzoommax-mapzoommin)); } function panMap(direction) { switch( direction ) { case "ul": map.panDirection(1,1); break; case "u": map.panDirection(0,1); break; case "ur": map.panDirection(-1,1); break; case "l": map.panDirection(1,0); break; case "r": map.panDirection(-1,0); break; case "dl": map.panDirection(1,-1); break; case "d": map.panDirection(0,-1); break; case "dr": map.panDirection(-1,-1); break; } clickcapInterval = setInterval('mapResetClickcap()',300); } rad = function(x) { return x*Math.PI/180;} function distVincenty(p1,p2) { var a = 6378137, b = 6356752.3142, f = 1/298.257223563; var L = rad(p2.x - p1.x); var U1 = Math.atan((1-f) * Math.tan(rad(p1.y))); var U2 = Math.atan((1-f) * Math.tan(rad(p2.y))); var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); var lambda = L, lambdaP = 2*Math.PI; var iterLimit = 20; while (Math.abs(lambda-lambdaP) > 1e-12 && --iterLimit>0) { var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); var sinSigma = Math.sqrt((cosU2*sinLambda)*(cosU2*sinLambda)+ (cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda)); if (sinSigma==0) return 0; //co-incident points var cosSigma = sinU1*sinU2+cosU1*cosU2*cosLambda; var sigma = Math.atan2(sinSigma,cosSigma); var alpha = Math.asin(cosU1*cosU2*sinLambda/sinSigma); var cosSqAlpha = Math.cos(alpha)*Math.cos(alpha); var cos2SigmaM = cosSigma-2*sinU1*sinU2/cosSqAlpha; var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); lambdaP = lambda; lambda = L+(1-C)*f*Math.sin(alpha)*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))); } if (iterLimit==0) return NaN // formula failed to converge var uSq = cosSqAlpha*(a*a-b*b)/(b*b); var A = 1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); var B = uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq))); var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))); var s = b*A*(sigma-deltaSigma); var d = s.toFixed(3)/1000; //round to 1mm precision return d; } function mapDistanceKilometers( point1, point2 ) { return (distVincenty(point1, point2)).toFixed(3); } function mapDistanceMiles( point1, point2 ) { return (distVincenty(point1,point2) / 1.6093).toFixed(3); } function mapDistanceMiles2Feet(dist) { return (dist / 0.000189394).toFixed(0); } function mapParsePoints(xml) { var points = []; if (xml && xml.documentElement) { var data = xml.documentElement.getElementsByTagName("point"); for (var i = 0; i < data.length; i++) { var lng = parseFloat(data[i].getAttribute("lng")); var lat = parseFloat(data[i].getAttribute("lat")); var point = new GPoint(lng,lat); points.push(point); } points.push(points[1]); // close the polyline } return points; } function dat2array(dat) { var entries = dat.split("@"); var len = entries.length-1; var data = new Array(len); for (var i = 0; i < len; i++ ) { var bits = entries[i].split("|"); data[i] = new Array(10); data[i][0] = bits[0]; data[i][1] = bits[1]; data[i][2] = parseInt(bits[2]); if (data[i][0]=="res" || data[i][0]=="cnd" || data[i][0]=="mfg") { data[i][3] = parseInt(bits[3]); data[i][4] = parseFloat(bits[4]); data[i][5] = parseInt(bits[5]); } else if (data[i][0]=="com" || data[i][0]=="bus") { data[i][3] = bits[3]; data[i][5] = parseInt(bits[5]); } else if (data[i][0]=="lnd") { data[i][3] = bits[3]; } else if (data[i][0]=="mlt") { data[i][3] = bits[3]; data[i][5] = parseInt(bits[5]); } else if (data[i][0]=="frm") { data[i][4] = parseFloat(bits[4]); } data[i][6] = bits[6]; data[i][7] = bits[7]; data[i][8] = bits[8]; data[i][9] = bits[9]; data[i][10] = parseFloat(bits[10]); data[i][11] = parseFloat(bits[11]); data[i][12] = parseInt(bits[12]); data[i][13] = bits[13]; } return data; } function attachEventListener(obj,evt,func) { if (obj.addEventListener) obj.addEventListener(evt, func, false); else if (obj.attachEvent) obj.attachEvent("on"+evt, func); } function noBubble(evt) { if (window.event) window.event.cancelBubble = true; else if (evt.eventPhase != 1) ev.stopPropagation(); } function doBubble(evt) { if (window.event) window.event.cancelBubble = false; else if (evt.eventPhase != 1) evt.stopPropagation(false); } var photo_on = 0; var current_tool = 'rect'; var toolSlides = new Array('reset','photo','rect','radius','line'); function toolSlideShow(toolid) { if (getObject('btntool_'+toolid).className=='toolbtn') { var obj = getObject('slide_'+toolid); if (window.slideInterval) clearInterval(window.slideInterval); obj.slide='show'; window.slideInterval = setInterval("toolSlideWork()", 10); } } function toolSlideHide(toolid) { if (getObject('btntool_'+toolid).className=='toolbtn') { var obj = getObject('slide_'+toolid); if (window.slideInterval) clearInterval(window.slideInterval); obj.slide='hide'; window.slideInterval = setInterval("toolSlideWork()", 10); } } function toolSlideWork() { var done = 0; for (var i=0; i < toolSlides.length; i++) { var slide = getObject('slide_'+toolSlides[i]); if (slide.slide=='show') { if (getLeft(slide) > 0) { setLeft(slide, getLeft(slide)-40); if (getLeft(slide) < 0) setLeft(slide, 0); } else { slide.slide = 'done'; done++; } } else if (slide.slide=='hide') { if (getLeft(slide) < getWidth(slide.parentNode)) setLeft(slide, getLeft(slide) + 40); else { slide.slide = 'done'; done++; } } else done++; } if (done==toolSlides.length) { clearInterval(window.slideInterval); } } function toolMouseOver(toolid) { var img = getObject('btnimg_'+toolid); var newimg = getObject('btnimg_'+toolid+'_over'); img.src = newimg.src; toolSlideShow(toolid); } function toolMouseDown(toolid) { var img = getObject('btnimg_'+toolid); var newimg = getObject('btnimg_'+toolid+'_down'); img.src = newimg.src; if (toolid=='reset') { photo_on = 0; img = getObject('btnimg_photo'); newimg = getObject('btnimg_photo_norm'); img.src = newimg.src; map.setMapType(G_NORMAL_MAP); mapReset(); } else if (toolid=='photo') { if (photo_on==0) { photo_on = 1; map.setMapType(G_HYBRID_MAP); } else { photo_on = 0; map.setMapType(G_NORMAL_MAP); } } else if (toolid=='zoomin') { mapZoom('in'); } else if (toolid=='zoomout') { mapZoom('out'); } else if (toolid=='rect' || toolid=='radius' || toolid=='line') { var tools = new Array('rect','radius','line'); for ( var i = 0; i < tools.length; i++ ) { if (tools[i]!=toolid) { img = getObject('btnimg_'+tools[i]); newimg = getObject('btnimg_'+tools[i]+'_norm'); img.src = newimg.src; } } current_tool = toolid; mapDragType = toolid; } } function toolMouseOut(toolid) { var img, newimg; if (toolid=='rect' || toolid=='radius' || toolid=='line') { var tools = new Array('rect','radius','line'); for ( var i = 0; i < tools.length; i++ ) { if (tools[i]!=current_tool) { img = getObject('btnimg_'+tools[i]); newimg = getObject('btnimg_'+tools[i]+'_norm'); img.src = newimg.src; } else { img = getObject('btnimg_'+tools[i]); newimg = getObject('btnimg_'+tools[i]+'_down'); img.src = newimg.src; } } } else if (toolid=='photo') { img = getObject('btnimg_'+toolid); if (photo_on==1) newimg = getObject('btnimg_'+toolid+'_down'); else newimg = getObject('btnimg_'+toolid+'_norm'); img.src = newimg.src; } else { img = getObject('btnimg_'+toolid); newimg = getObject('btnimg_'+toolid+'_norm'); img.src = newimg.src; } toolSlideHide(toolid); } function scrollDetail(id) { var detailbox = getObject("detail"); var icondetail = getObject('detail'+id); if (detailbox && icondetail) { if (document.getBoxObjectFor) { var scrollrect = document.getBoxObjectFor(detailbox); var detailrect = document.getBoxObjectFor(icondetail); var detaildiv = getObject("detaildiv"); detaildiv.setAttribute('scrollTarget', detailrect.y - scrollrect.y); } else { var scrollrect = detailbox.getBoundingClientRect(); var detailrect = icondetail.getBoundingClientRect(); var detaildiv = getObject("detaildiv"); detaildiv.setAttribute('scrollTarget', detailrect.top - scrollrect.top); } if (detaildiv.getAttribute('scrolltimer')) clearInterval(detaildiv.getAttribute('scrolltimer')); detaildiv.setAttribute('scrolltimer', setInterval("scrollDetailWork()", 20)); } } function scrollDetailWork() { var detaildiv = getObject("detaildiv"); var diff = detaildiv.getAttribute('scrollTarget') - detaildiv.scrollTop; detaildiv.scrollTop += (diff/2); if (detaildiv.scrollTop == detaildiv.getAttribute('scrollTarget') || (detaildiv.getAttribute('scrollTarget') - detaildiv.scrollTop)==diff) clearInterval(detaildiv.getAttribute('scrolltimer')); } function setSliderPosition(val) { var slider = getObject('slider'); for (var i = 0; i < fdSliderController.sliders.length; i++) { fdSliderController.sliders[i].setNewPosition(12-(val*12)); } } function basicInfo(propdata) { var mls = propdata[13]=='2'?'nw':'r'; var html = ""+ "
Click for property detail"; if (propdata[9]==1) html += "
"; else html += "
Realty Pro, Inc."; return html; } function detailLink(propdata) { var mls = propdata[13]=='2'?'nw':'r'; return "/search/"+mls+"/detail.php?t="+propdata[0]+"&id="+propdata[1]; } function detailedInfo(propdata) { var mls = propdata[13]=='2'?'nw':'r'; var html = ""+ "
"; if (propdata[9]==0) html += "Featured Property
"; if (propdata[0]=="res" || propdata[0]=="cnd" || propdata[0]=="mfg") { html += "$"+propdata[2]+ "
"+propdata[3]+" Bed, "+propdata[4]+" Bath"+ "
"+propdata[5]+" Sq. Ft."; } else if (propdata[0]=="com" || propdata[0]=="bus") { html += "$"+propdata[2]+ "
"+propdata[5]+" Sq. Ft."+ "
"+propdata[3]; //lot size } else if (propdata[0]=="lnd") { html += "$"+propdata[2]+ "
"+propdata[3]; //lot size } else if (propdata[0]=="mlt") { html += "$"+propdata[2]+ "
"+propdata[5]+" Units"+ "
"+propdata[3]; // lot size } else if (propdata[0]=="frm") { html += "$"+propdata[2]+ "
"+propdata[4]+" Acres"; } var mls = propdata[13]=='2'?'nw':'r'; html += "
"+propdata[7]+", "+propdata[8]+ "
More Info"; if (propdata[10] != 0 && propdata[11] != 0) { html += "
Zoom Map
"; } html += "
"; return html; }