/***************************************************************************** *Property of www.OptimalHomeLocation.com. *Do not reproduce without permission in writing. *Copyright (c) 2008 www.OptimalHomeLocation.com. *All rights reserved *****************************************************************************/ var homeIconSrc = "http://www.optimalhomelocation.com/micons/home-button-"; var bigIconSrc = "http://www.optimalhomelocation.com/micons/brown_home-48x48.png"; var coffeeIconSrc = "http://www.optimalhomelocation.com/micons/coffee1.png"; var libraryIconSrc = "http://www.optimalhomelocation.com/micons/books4.png"; var schoolIconSrc = "http://www.optimalhomelocation.com/micons/books.png"; var shoppingIconSrc = "http://www.optimalhomelocation.com/micons/gift-box-48x48.png"; var supermarketIconSrc = "http://www.optimalhomelocation.com/micons/super-35x31.png"; var churchIconSrc = "http://www.optimalhomelocation.com/micons/church.png"; var templeIconSrc = "http://www.optimalhomelocation.com/micons/temple.png"; var doDebug = 1; var map = null; var geocoder = null; var DEFAULT_LAT = 37.063020; var DEFAULT_LNG = -95.677013; var DEFAULT_ZOOM = 4; var locationArray = new Array(6); //array of location GMarkers var weightsArray = new Array(); var mapBounds = new GLatLngBounds(); var locCenter = new GLatLng(); var activateRouteListener = 0; var routeArray = new Array(); var latestRoute = new Array(); var latestRouteLabels = new Array(); var latestPolyline; var polylineArray = new Array(); var gdir; var optLocationValid = true; var tmpPolyline = null; var labelArray = new Array (6); var aObj; var numberMarkerArray = new Array(); var searchControl; var searchLocByNameControl; var localSearch; var localSearchLocByName; var searchApp; var homeDataStrings = new Array(); var oph_address; var homeLocMarkers = new Array(); //var homeCommutes = new Array(); var homeCommuteDurations = new Array(); var lastTabSelected = 1; var optimalLocationComputed = false; var compOptRequestAttmpts = 0; var last_label; var last_index; var numCommuters = 0; var routeMarkConfusion = false; var oph_status = 0; //1 - setting address locations, 2 - center computed, 3 - defining routes, 4 - optimal has been computed, 5 - oph marker has been dragged var ophLatLng; var ophAttractions = new Array(6); var currAttractionIndex = 0; var reportWindow; var circleLine; // Small house marker icon var homeIcon = new GIcon(G_DEFAULT_ICON); homeIcon.iconSize = new GSize(35, 35); homeIcon.iconAnchor = new GPoint(17, 17); homeIcon.infoWindowAnchor = new GPoint(17, 17); // Large house marker icon var homeIconLg = new GIcon(G_DEFAULT_ICON); homeIconLg.image = bigIconSrc; homeIconLg.printImage = homeIconLg.image; homeIconLg.mozPrintImage = homeIconLg.image; homeIconLg.iconSize = new GSize(48, 48); homeIconLg.iconAnchor = new GPoint(24, 24); homeIconLg.infoWindowAnchor = new GPoint(24, 24); markerOptionsLg = { icon:homeIconLg, draggable:true }; // Coffee icon var coffeeIcon = new GIcon(G_DEFAULT_ICON); coffeeIcon.image = coffeeIconSrc; coffeeIcon.printImage = coffeeIcon.image; coffeeIcon.mozPrintImage = coffeeIcon.image; coffeeIcon.iconSize = new GSize(48, 48); coffeeIcon.iconAnchor = new GPoint(24, 24); coffeeIcon.infoWindowAnchor = new GPoint(24, 24); coffeeMarkerOptions = { icon:coffeeIcon, draggable:false }; // Library icon var libraryIcon = new GIcon(G_DEFAULT_ICON); libraryIcon.image = libraryIconSrc; libraryIcon.printImage = libraryIcon.image; libraryIcon.mozPrintImage = libraryIcon.image; libraryIcon.iconSize = new GSize(48, 48); libraryIcon.iconAnchor = new GPoint(24, 24); libraryIcon.infoWindowAnchor = new GPoint(24, 24); libraryMarkerOptions = { icon:libraryIcon, draggable:false }; // School icon var schoolIcon = new GIcon(G_DEFAULT_ICON); schoolIcon.image = schoolIconSrc; schoolIcon.printImage = schoolIcon.image; schoolIcon.mozPrintImage = schoolIcon.image; schoolIcon.iconSize = new GSize(32, 32); schoolIcon.iconAnchor = new GPoint(16, 16); schoolIcon.infoWindowAnchor = new GPoint(16, 16); schoolMarkerOptions = { icon:schoolIcon, draggable:false }; // Supermarket icon var supermarketIcon = new GIcon(G_DEFAULT_ICON); supermarketIcon.image = supermarketIconSrc; supermarketIcon.printImage = supermarketIcon.image; supermarketIcon.mozPrintImage = supermarketIcon.image; supermarketIcon.iconSize = new GSize(35, 31); supermarketIcon.iconAnchor = new GPoint(18, 16); supermarketIcon.infoWindowAnchor = new GPoint(18, 16); supermarketMarkerOptions = { icon:supermarketIcon, draggable:false }; // Shopping icon var shoppingIcon = new GIcon(G_DEFAULT_ICON); shoppingIcon.image = shoppingIconSrc; shoppingIcon.printImage = shoppingIcon.image; shoppingIcon.mozPrintImage = shoppingIcon.image; shoppingIcon.iconSize = new GSize(48, 48); shoppingIcon.iconAnchor = new GPoint(24, 24); shoppingIcon.infoWindowAnchor = new GPoint(24, 24); shoppingMarkerOptions = { icon:shoppingIcon, draggable:false }; // Church icon var churchIcon = new GIcon(G_DEFAULT_ICON); churchIcon.image = churchIconSrc; churchIcon.printImage = churchIcon.image; churchIcon.mozPrintImage = churchIcon.image; churchIcon.iconSize = new GSize(32, 32); churchIcon.iconAnchor = new GPoint(16, 16); churchIcon.infoWindowAnchor = new GPoint(16, 16); churchMarkerOptions = { icon:churchIcon, draggable:false }; // Temple icon var templeIcon = new GIcon(G_DEFAULT_ICON); templeIcon.image = templeIconSrc; templeIcon.printImage = templeIcon.image; templeIcon.mozPrintImage = templeIcon.image; templeIcon.iconSize = new GSize(32, 32); templeIcon.iconAnchor = new GPoint(16, 16); templeIcon.infoWindowAnchor = new GPoint(16, 16); templeMarkerOptions = { icon:templeIcon, draggable:false }; var routeColors = new Array("#000066", "#FF0000", "#0000FF", "#FF00FF", "#00FFFF", "#800000", "#FF6600", "#996633", "#C0C0C0", "#00FF00"); var mapControl = new GSmallMapControl(); var dragMarkerMsg = "
Drag the marker to see info for other areas.
"; // Function to allow one JavaScript file to be included by another. // Copyright (C) 2006 www.cryer.co.uk function includeJavaScript(jsFile) { document.write(''); } function createNumberMarkers(){ for(var i=0; i<10; i++) { var numberIcon = new GIcon(G_DEFAULT_ICON); numberIcon.image = "http://www.optimalhomelocation.com/micons/glass_numbers/glass_numbers_"+i+".jpg"; numberIcon.printImage = numberIcon.image; numberIcon.mozPrintImage = numberIcon.image; numberIcon.iconSize = new GSize(32, 32); numberIcon.iconAnchor = new GPoint(16, -10); var numberMarker = new GMarker(new GLatLng(0,0), {icon:numberIcon}); numberMarkerArray.push(numberMarker); } } function load() { if (GBrowserIsCompatible()) { map = new GMap2(document.getElementById("map")); map.setCenter(new GLatLng(DEFAULT_LAT, DEFAULT_LNG), DEFAULT_ZOOM); map.addControl(mapControl); geocoder = new GClientGeocoder(); searchApp = new SearchApp(); for(var i=0; i<6; i++) { locationArray[i] = null; labelArray[i] = null; } } else alert("Your browser does not support Google Maps."); } var schoolMarkerList; var libraryMarkerList; var starbucksMarkerList; var supermarketMarkerList; var shoppingMarkerList; var churchMarkerList; var templeMarkerList; var currCity = new Array (6); var currCityZillowFormatted = new Array (6); var currCitySchoolFormatted = new Array (6); var currState = new Array (6); var currStateIndex = new Array (6); var reportSearchControl; var reportSearch; function SearchApp() { schoolMarkerList = new Array(); libraryMarkerList = new Array(); starbucksMarkerList = new Array(); supermarketMarkerList = new Array(); shoppingMarkerList = new Array(); churchMarkerList = new Array(); templeMarkerList = new Array(); searchControl = new GSearchControl(); localSearch = new GlocalSearch(); var options = new GsearcherOptions(); options.setExpandMode(GSearchControl.EXPAND_MODE_CLOSE); searchControl.addSearcher(localSearch, options); searchControl.draw(document.getElementById("searchres")); searchControl.setSearchCompleteCallback(this, SearchApp.prototype.OnSearchComplete); searchControl.setSearchStartingCallback(this, SearchApp.prototype.OnSearchStarting); searchLocByNameControl = new GSearchControl(); localSearchLocByName = new GlocalSearch(); searchLocByNameControl.addSearcher(localSearchLocByName, options); searchLocByNameControl.draw(document.getElementById("searchresByName")); searchLocByNameControl.setSearchCompleteCallback(this, SearchApp.prototype.OnSearchLocByNameComplete); searchLocByNameControl.setSearchStartingCallback(this, SearchApp.prototype.OnSearchLocByNameStarting); reportSearchControl = new GSearchControl(); reportSearch = new GlocalSearch(); reportSearchControl.addSearcher(reportSearch, options); reportSearchControl.draw(document.getElementById("searchres")); reportSearchControl.setSearchCompleteCallback(this, SearchApp.prototype.OnReportSearchComplete); reportSearchControl.setSearchStartingCallback(this, SearchApp.prototype.OnReportSearchStarting); } function getLocation(jData) { if (jData != null) { homeDataStrings[0][0] = formatGN(jData); homeDataStrings[0][1] = ""; homeDataStrings[0][2] = ""; var currTownState = getTownAndState(jData); document.getElementById("real-estate-search-text").value = currTownState +" homes for sale"; currCity[0] = (currTownState.split(",")[0]).split("(")[0]; currState[0] = currTownState.split(",")[1]; if (oph_status == 4) { for (var i=0; i<3; i++) homeDataStrings[5][i] = homeDataStrings[0][i]; currCity[5] = currCity[0]; currState[5] = currState[0]; } formatAndCallDemographics(0); } //aObj.removeScriptTag(); } function formatAndCallDemographics(addressNum) { // trim white spaces if (currState[addressNum] != "" && currCity[addressNum] != "") { currCityZillowFormatted[addressNum] = currCity[addressNum].replace(" ","-"); currCityZillowFormatted[addressNum] = currCityZillowFormatted[addressNum].replace(",",""); currCitySchoolFormatted[addressNum] = currCity[addressNum].replace(" ","+"); currState[addressNum] = currState[addressNum].toUpperCase(); currState[addressNum] = currState[addressNum].replace(/^\s+/,""); currState[addressNum] = currState[addressNum].replace(/\s+$/,""); currStateIndex[addressNum] = getStateIndex(currState[addressNum]); initiateDemographicsCall(currState[addressNum], currCityZillowFormatted[addressNum], '', addressNum); } } function reverseGeocode(point) { if (aObj) aObj.removeScriptTag(); //initialize, so that even if we are not able to reverse geocode we won't have previous data displayed document.getElementById("area_info").innerHTML = ""; var request = 'http://ws.geonames.org/findNearestAddressJSON?lat=' + point.lat() + '&lng=' + point.lng() + '&callback=getLocation'; aObj = new JSONscriptRequest(request); aObj.buildScriptTag(); aObj.addScriptTag(); } function getPlacemarkProperty(placemark,propertyname){ for (var property in placemark) { if((property == propertyname)) { return String(placemark[property]); } else if (typeof(placemark[property]) == 'object') { var r = getPlacemarkProperty(placemark[property], propertyname); if (r != null) return r; } } return null; } function formatGN(jData) { var adminCode1 = getPlacemarkProperty(jData, "adminCode1"); var adminName1 = getPlacemarkProperty(jData, "adminName1"); var adminName2 = getPlacemarkProperty(jData, "adminName2"); var countryCode = getPlacemarkProperty(jData, "countryCode"); var distance = getPlacemarkProperty(jData, "distance"); var lat = getPlacemarkProperty(jData, "lat"); var lng = getPlacemarkProperty(jData, "lng"); var placename = getPlacemarkProperty(jData, "placename"); var postalcode = getPlacemarkProperty(jData, "postalcode"); var street = getPlacemarkProperty(jData, "street"); var streetNumber = getPlacemarkProperty(jData, "streetNumber"); var address = streetNumber + ' ' + street + ', ' + adminName1 + ', ' + adminCode1 + ' ' + postalcode; addressString = ""; if (street != null && street.toString() != "") { addressString += street.toString(); } if (placename != null && placename.toString() != "") { if (addressString.length > 0) addressString += ", "; addressString += placename.toString(); //debug(placename.toString()+" "+adminName1.toString()+" schools, "); //debug(placename.toString()+" "+adminName1.toString()+" real estate, "); } if (postalcode != null && (postalcode.toString()).length == 5) { if (addressString.length > 0) addressString += ", "; addressString += postalcode.toString(); } return addressString; } function getTownAndState(jData) { var adminCode1 = getPlacemarkProperty(jData, "adminCode1"); var placename = getPlacemarkProperty(jData, "placename"); addressString = ""; if (placename != null && placename.toString() != "") { if (addressString.length > 0) addressString += ", "; addressString += placename.toString(); } if (adminCode1 != null && adminCode1.toString() != "") { if (addressString.length > 0) addressString += ", "; addressString += adminCode1.toString(); } return addressString; } function getNumValidLocations(){ var numValidLocations = 0; for(var i=0; i"+myLabel+""); }; })(marker, label)); GEvent.addListener(marker, "mouseover", (function(me, myLabel) { return function() { me.openInfoWindowHtml(""+myLabel+""); }; })(marker, label)); GEvent.addListener(marker, "click", (function(pnt, label) { return function() { if (activateRouteListener == 0) return; //first polyline entry should be Central home location if (latestRoute.length == 0) { latestRoute.push(locCenter); latestRouteLabels.push("Home"); } //user clicked again on the same point - ignore if (pnt.equals(latestRoute[latestRoute.length-1])) return; latestRoute.push(pnt); if (label == "") label = "Undef"; latestRouteLabels.push(label); //create number icon (numberMarkerArray[latestRoute.length]).setLatLng(pnt); map.addOverlay(numberMarkerArray[latestRoute.length]); if (tmpPolyline) map.removeOverlay(tmpPolyline); tmpPolyline = new GPolyline(latestRoute, routeColors[(routeArray.length+1)%10], 2, 0.5); map.addOverlay(tmpPolyline); }; })(point, label)); map.addOverlay(marker); marker.openInfoWindowHtml(""+label+""); labelArray[index-1]=label; } function removeLocation(address, label, index, clearGUI){ if (locationArray[index-1]== null) return; if (clearGUI) { var addressFormObj = document.getElementById("SelectAddressForm"+(index.toString())); addressFormObj.address.value = ""; addressFormObj.label.selectedIndex = 0; } map.removeOverlay(locationArray[index-1]); locationArray[index-1]=null; labelArray[index-1]=null; var numActiveLocations = 0; mapBounds = new GLatLngBounds(); for(var i=0; i< locationArray.length; i++) if (locationArray[i] != null) { mapBounds.extend(locationArray[i].getPoint()); numActiveLocations++; } if (numActiveLocations > 0) map.panTo(mapBounds.getCenter()); } //display center of all locations function computeCenter() { if (geocoder) { if (getNumValidLocations() == 0) { alert( "Please enter addresses that you will be commuting from (work, school, day care)."); return; } locCenter = computeAverageLocation(); oph_status = 2; homeDataStrings[0] = new Array(4); for (var i=0; i<3; i++) homeDataStrings[0][i] = new String(""); homeDataStrings[0][3] = 0; homeDataStrings[5] = new Array(4); for (var i=0; i<3; i++) homeDataStrings[5][i] = new String(""); homeDataStrings[5][3] = 0; currState[0] = new String(""); currCity[0] = new String(""); reverseGeocode(locCenter); map.setCenter(mapBounds.getCenter()); map.setZoom(map.getBoundsZoomLevel(mapBounds)); if (homeLocMarkers[0]) { clearRouteDescription(); map.removeOverlay(homeLocMarkers[0]); homeLocMarkers[0] = null; } homeLocMarkers[0] = new GMarker(locCenter, markerOptionsLg); GEvent.addListener(homeLocMarkers[0], "click", (function(me) { return function() { if (!optimalLocationComputed) me.openInfoWindowHtml("Central location
"+homeDataStrings[0][0]+"
"); else { var commuteString = (homeDataStrings[0][3]>0 ? ("
commute: "+Math.round(homeDataStrings[0][3]*0.0621371192237334)/100 + " miles.") : ""); var dragMarkerString = "

"+dragMarkerMsg; me.openInfoWindowHtml(""+homeDataStrings[0][0]+commuteString+"
"+homeDataStrings[0][1]+dragMarkerString); } }; })(homeLocMarkers[0])); GEvent.addListener(homeLocMarkers[0], "click", (function(me, locCenter) { return function() { if (activateRouteListener == 0) return; var currPnt = me.getLatLng(); //user clicked again on the same point - ignore if (currPnt.equals(latestRoute[latestRoute.length-1])) return; //add new stop to the array latestRoute.push(locCenter); latestRouteLabels.push("Home"); //create number icon (numberMarkerArray[latestRoute.length]).setLatLng(currPnt); map.addOverlay(numberMarkerArray[latestRoute.length]); if (tmpPolyline) map.removeOverlay(tmpPolyline); tmpPolyline = new GPolyline(latestRoute, routeColors[(routeArray.length+1)%10], 2, 0.5); map.addOverlay(tmpPolyline); //assuming that all routes start and end at home - //finish this route if we are back home if (latestRoute.length == 1)//start new route { } else if (latestRoute.length > 1) { stopCommuteRoute(); } }; })(homeLocMarkers[0], locCenter)); GEvent.addListener(homeLocMarkers[0], "dragstart", (function(me) { return function() { me.closeInfoWindow(); if (circleLine) map.removeOverlay(circleLine); }; })(homeLocMarkers[0])); GEvent.addListener(homeLocMarkers[0], "dragend", (function(me) { return function() { oph_status = 5; var currPnt = me.getLatLng(); for(var i=0; i<3; i++) homeDataStrings[0][i] = ""; reverseGeocode(currPnt); mapBounds.extend(currPnt); map.panTo(mapBounds.getCenter()); map.setZoom(map.getBoundsZoomLevel(mapBounds)); drawCircle(currPnt, 1); computeDrivingDistGivenRoutes(currPnt, 0, false); }; })(homeLocMarkers[0])); (homeLocMarkers[0]).disableDragging(); map.addOverlay(homeLocMarkers[0]); (homeLocMarkers[0]).openInfoWindowHtml("Central location
"+homeDataStrings[0][0]+"


"+homeDataStrings[0][1]+homeDataStrings[0][2]); drawCircle(locCenter, 1); //initialize weights array weightsArray = []; for (var i=0; iCentral Home Location is marked on the map with the icon:  
Central location most probably is not your Optimal Home Location. Please define your commute pattern to find the Optimal Home Location, which minimizes commute for your family."); } } function addRoute() { routeMarkConfusion = false; oph_status = 3; if (optimalLocationComputed) { if (confirm("Your Optimal Home Location has already been defined. Would you like us to return house icon back to the Central location so you can add routes for additional people to your commute and then recalculate your Optimal Home Location?")) { compOptRequestAttmpts = 0; (homeLocMarkers[0]).setLatLng(locCenter); for(var i=0; i<3; i++) homeDataStrings[0][i] = ""; reverseGeocode(locCenter); computeDrivingDistGivenRoutes(locCenter, 0, false); } else return; } numCommuters++; var msg = "Define route for Commuter #"; msg += numCommuters; msg += "
Click on the map location icons in the order this person visits them.
Each route should start and end at home icon.
For example: Home -> School 1 -> Work 1 -> Home."; alert(msg); compOptRequestAttmpts = 0; activateRouteListener = 1; if (latestRoute.length >0) { stopCommuteRoute(); } } function computeOptimalHomeLocation(){ routeMarkConfusion = false; if (!geocoder) return; if (routeArray.length == 0) { alert("Press Add new route button and define daily commutes for each member of your family. Optimal home location will minimize the total combined commute."); return; } activateRouteListener = 0; if (getNumValidLocations() == 0) { alert( "Please enter addresses that you will be commuting from (work, school, day care)."); return; } //remove control temporarily to disable zoom map.removeControl(mapControl); //allocate arrays var num_locations = getNumValidLocations()+1; var url = "ComputeLocation.php?"; var params = "num_locations=" + num_locations; //call php script to compute var validI = 0; for(var i=0; i< locationArray.length; i++) if (locationArray[i] != null) { validI++; //var pel = map.fromLatLngToDivPixel(locationArray[i].getPoint()); var w_w = weightsArray[i]; params += "&w"+validI+"_x=" + locationArray[i].getPoint().lat() + "&w"+validI+"_y=" + locationArray[i].getPoint().lng() + "&w"+validI+"_w=" + w_w; } compOptRequestAttmpts++; GDownloadUrl(url, function(data, responseCode) { if(responseCode == -1) { var msg = "Your internet connection seems to be non-stable. Google Map request to draw driving routes has timed out."; if (compOptRequestAttmpts==1) msg += "We will try to repeat the request."; alert(msg); if (compOptRequestAttmpts==1) computeOptimalHomeLocation(); } else if(responseCode != 200){ alert("Request resulted in error."); return; } if (data.length > 1) { oph_status = 4; optimalLocationComputed = true; var string = data; var split_string = string.split(" "); var centerX = split_string[0]; var centerY = split_string[1]; var totalCommute = split_string[2]; var centralLocationCommute = split_string[3]; point = new GLatLng(parseFloat(centerX), parseFloat(centerY)); //add control back map.addControl(mapControl); if (!point) { alert( " Optimal location not found"); } else { for (var i=0; i<3; i++) homeDataStrings[0][i] = ""; reverseGeocode(point); map.panTo(mapBounds.getCenter()); map.setZoom(map.getBoundsZoomLevel(mapBounds)); drawCircle(point, 1); ophLatLng = point; (homeLocMarkers[0]).setLatLng(point); computeDrivingDistGivenRoutes(point, 0, true); } } }, params); }//end of function //Given routes defined by the routeArray substitute each locCenter with locOptimal and sum driving distances var routesComputed; function computeDrivingDistGivenRoutes(currHomeLoc, addressNum, isOptimal){ for(var i = 0; i < polylineArray.length; i++) { map.removeOverlay(polylineArray[i]); } polylineArray = []; routesComputed = 0; homeDataStrings[addressNum][3] = 0; homeCommuteDurations[addressNum] = 0; for(var route=0; route< routeArray.length; route++) { var query = new Array(); for (var routeStop=0; routeStop Optimal Home Location is marked with the icon:  
You can drag this icon to see commute for other possible home locations.
Proceed to Compare Commutes tab to preview and compare commutes from any real estate listings or use Area Details tab to map local attractions."); } else { var idString = "addressForm_"+addressNum; document.getElementById(idString).innerHTML = ( " " + Math.round(homeDataStrings[addressNum][3]*0.0621371192237334)/100 + " miles."); } var tmp = new String(""); if (isOptimal) { tmp = "Your optimal home location
"; ophAreaAttractions(); } else tmp = ""; var commuteString = (homeDataStrings[addressNum][3]>0 ? ("
commute: "+Math.round(homeDataStrings[addressNum][3]*0.0621371192237334)/100 + " miles.") : ""); if (addressNum == 0 && oph_status == 4) homeDataStrings[5][3] = homeDataStrings[0][3]; var dragMarkerString = ""; if(addressNum == 0)//only for optimal dragMarkerString = "

"+dragMarkerMsg; (homeLocMarkers[addressNum]).openInfoWindowHtml(""+tmp+homeDataStrings[addressNum][0]+commuteString+"
"+homeDataStrings[addressNum][1]+homeDataStrings[addressNum][2]+dragMarkerString); if(addressNum == 0)//only for optimal (homeLocMarkers[addressNum]).enableDragging(); } }; })(route, gdir)); GEvent.addListener(gdir, "error", handleErrorsOpt); gdir.loadFromWaypoints(query, {preserveViewport:true, getPolyline:true}); } if (isOptimal) { document.getElementById("news").style.display = 'none'; document.getElementById("top_report_link").style.display = 'block'; var params = "city=" + currCity[5] + "&state=" + currState[5]; //document.getElementById("rotating_space").innerHTML = ''; //document.getElementById("kw").innerHTML = ''; } } function showCommuteForAddress(address, addressNum, state){ if (address == "") { alert("No address entered."); return; } if(routeArray.length == 0) { alert("You need to define locations you are visiting and your commute routes first.
Start with Your Life and Your Commute Tabs."); return; } if (state == 2)//delete this home icon and commutes { //remove marker map.removeOverlay(homeLocMarkers[addressNum]); //remove driving routes for(var i = 0; i < polylineArray.length; i++) { map.removeOverlay(polylineArray[i]); } polylineArray = []; routesComputed = 0; //clear text entry var compFormObj = document.getElementById("CompareCommutesForm"+(addressNum.toString())); compFormObj.home_address.value = ""; for(var i=0; i<3; i++) homeDataStrings[addressNum][i] = ""; homeDataStrings[addressNum][3] =0; var idString = "addressForm_"+addressNum; document.getElementById(idString).innerHTML = ""; } else { (homeLocMarkers[0]).closeInfoWindow(); if (geocoder) { geocoder.getLocations( address, function(response) { if (!response || response.Status.code != 200) { alert("Sorry, address not found. Please check your submission and try again."); } else { place = response.Placemark[0]; point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]); homeDataStrings[addressNum] = new Array(4); homeDataStrings[addressNum][0] = address; homeDataStrings[addressNum][1] = new String(""); homeDataStrings[addressNum][2] = new String(""); homeDataStrings[addressNum][3] = 0; var parsedAddressArray = address.split(" "); currCity[addressNum] = new String(""); currState[addressNum] = new String(""); for (var i=parsedAddressArray.length-1; i>=0; i--) if (parsedAddressArray[i].length > 1) { if (currState[addressNum] == "") { currState[addressNum] = parsedAddressArray[i]; continue; } if (currCity[addressNum] == "") { currCity[addressNum] = parsedAddressArray[i]; break; } } formatAndCallDemographics(addressNum); homeIcon.image = homeIconSrc+addressNum+".jpg"; homeIcon.printImage = homeIcon.image; homeIcon.mozPrintImage = homeIcon.image; var markerOptions = { icon:homeIcon, draggable:false }; if (homeLocMarkers[addressNum] != null) { map.removeOverlay(homeLocMarkers[addressNum]); homeLocMarkers[addressNum] = null; } homeLocMarkers[addressNum] = new GMarker(point, markerOptions); homeDataStrings[addressNum][1] = new String(""); GEvent.addListener(homeLocMarkers[addressNum], "click", (function(num) { return function() { var commuteString = (homeDataStrings[num][3]>0 ? ("
commute: "+Math.round(homeDataStrings[num][3]*0.0621371192237334)/100 + " miles.") : ""); (homeLocMarkers[num]).openInfoWindowHtml(""+homeDataStrings[num][0]+commuteString+"

"+homeDataStrings[num][1]+homeDataStrings[num][2]); }; })(addressNum)); map.addOverlay(homeLocMarkers[addressNum]); mapBounds.extend(point); map.panTo(mapBounds.getCenter()); map.setZoom(map.getBoundsZoomLevel(mapBounds)); computeDrivingDistGivenRoutes(point, addressNum, false); } } ); } } } function debug(data){ //if (doDebug) document.getElementById("debug").innerHTML += data; } //function that makes DIV hidden or visible function toggleDIVVisibility(szDivID, iState) // 1 visible, 0 hidden { var obj = document.getElementById(szDivID); if (iState == 1) obj.style.display = 'block'; else obj.style.display = 'none'; /* if(document.layers) //NN4+ { document.layers[szDivID].visibility = iState ? "show" : "hide"; } else if(document.getElementById) //gecko(NN6) + IE 5+ { var obj = document.getElementById(szDivID); obj.style.visibility = iState ? "visible" : "hidden"; } else if(document.all) // IE 4 { document.all[szDivID].style.visibility = iState ? "visible" : "hidden"; }*/ } function startRouteDescription(){ if (polylineArray.length>0 || latestRoute.length >0) { alert("Attention! Clearing existing routes."); clearRouteDescription(); } activateRouteListener = 1; if (latestRoute.length >0) { latestRoute = []; latestRouteLabels = []; } } function clearLatestRoute(){ //if latest route has not been added to the array if (latestRoute && latestRoute.length > 0) { for( var i =0; i < latestRoute.length; i++) { //remove number Marker map.removeOverlay(numberMarkerArray[i+1]); numberMarkerArray[i+1].setLatLng(new GLatLng(0,0)); } if (tmpPolyline) { map.removeOverlay(tmpPolyline); tmpPolyline = null; } } else //if latest route has already been counted { if (polylineArray.length == 0) return; latestPolyline = polylineArray.pop(); latestRoute = routeArray.pop(); map.removeOverlay(latestPolyline); //remove last route description line var routeDescrMsg = document.getElementById("message").innerHTML; var lastLineBreak = routeDescrMsg.lastIndexOf("Route"); if (lastLineBreak == 0) document.getElementById("message").innerHTML = ""; else { var newRouteDescMsg = routeDescrMsg.substring(0, lastLineBreak-1); document.getElementById("message").innerHTML = newRouteDescMsg; } //update segment weights for(var i=0; i< latestRoute.length; i++) if ((latestRoute[i]).equals(locCenter)) //segment to-from home { if (i-1 >0) if (!((latestRoute[i-1]).equals(locCenter))) { reduceWeightToSegment(latestRoute[i-1]); } if (i+1 < latestRoute.length-1) if (!((latestRoute[i+1]).equals(locCenter))) { reduceWeightToSegment(latestRoute[i+1]); } } } latestRoute = []; latestRouteLabels = []; numCommuters--; activateRouteListener = 0; optimalLocationComputed = false; optLocationValid = true; centralMarkerMoveAllowed = false; for(var i=0; i<3; i++) homeDataStrings[0][i] = ""; homeDataStrings[0][3] = 0; (homeLocMarkers[0]).setLatLng(locCenter); (homeLocMarkers[0]).closeInfoWindow(); drawCircle(locCenter, 1); for (var i=1; i<5; i++) if (homeLocMarkers[i]) map.removeOverlay(homeLocMarkers[i]); } function clearRouteDescription(){ oph_status = 2; numCommuters = 0; if (latestRoute && latestRoute.length > 0) for( var i =0; i < latestRoute.length; i++) { //remove number Marker map.removeOverlay(numberMarkerArray[i+1]); numberMarkerArray[i+1].setLatLng(new GLatLng(0,0)); } if (tmpPolyline) { map.removeOverlay(tmpPolyline); tmpPolyline = null; } activateRouteListener = 0; for(var i = 0; i < polylineArray.length; i++) { map.removeOverlay(polylineArray[i]); } polylineArray = []; homeCommuteDurations[0] = 0; optLocationValid = true; centralMarkerMoveAllowed = false; routeArray = []; latestRoute = []; latestRouteLabels = []; setTab(2); (homeLocMarkers[0]).disableDragging(); (homeLocMarkers[0]).closeInfoWindow(); for(var i=0; i<3; i++) homeDataStrings[0][i] = ""; homeDataStrings[0][3] = 0; (homeLocMarkers[0]).setLatLng(locCenter); drawCircle(locCenter, 1); for (var i=1; i<5; i++) if (homeLocMarkers[i]) map.removeOverlay(homeLocMarkers[i]); document.getElementById("message").innerHTML = (""); optimalLocationComputed = false; } function stopCommuteRoute(){ var routeDescription = "Route #"+numCommuters+": "; gdir = new GDirections(); GEvent.addListener(gdir, "load", onGDirectionsLoad); GEvent.addListener(gdir, "error", handleErrorsCenter); var query = new Array(); for( var i =0; i < latestRoute.length; i++) { query.push(latestRoute[i]); routeDescription += latestRouteLabels[i]; if (i != latestRoute.length-1) routeDescription += "->"; //remove number Marker map.removeOverlay(numberMarkerArray[i+1]); numberMarkerArray[i+1].setLatLng(new GLatLng(0,0)); } gdir.loadFromWaypoints(query, {preserveViewport:true,getPolyline:true}); //add latest route to routeArray routeArray.push(latestRoute); document.getElementById("message").innerHTML += routeDescription+"
"; //update segment weights for(var i=0; i< latestRoute.length; i++) if ((latestRoute[i]).equals(locCenter)) //segment to-from home { if (i-1 >0) if (!((latestRoute[i-1]).equals(locCenter))) { addWeightToSegment(latestRoute[i-1]); } if (i+1 < latestRoute.length-1) if (!((latestRoute[i+1]).equals(locCenter))) { addWeightToSegment(latestRoute[i+1]); } } //clear latestRoute array to prepare for new route latestRoute = []; latestRouteLabels = []; routeMarkConfusion = true; setTimeout("checkConfusion()", 15000); } function onGDirectionsLoad(){ //Display the route. //remove temp polyline sketch before drawing actual route if (tmpPolyline) { map.removeOverlay(tmpPolyline); tmpPolyline = null; } latestPolyline = gdir.getPolyline(); latestPolyline.color = routeColors[routeArray.length%10]; map.addOverlay(latestPolyline); polylineArray.push(latestPolyline); homeDataStrings[0][3] += gdir.getDistance().meters; homeCommuteDurations[0] += gdir.getDuration().seconds; } function checkConfusion() { if (routeMarkConfusion) { alert("To enter additional route press Add route for new person button.
When you finished defining routes for each adult and kid in the family - press Compute Optimal Home Location button."); } } function handleErrorsOpt() { optLocationValid = false; handleErrors(); } function handleErrorsCenter() { handleErrors(); //use tmpPolyline instead if Google map polyline is not available latestPolyline = tmpPolyline; latestPolyline.color = routeColors[routeArray.length%10]; tmpPolyline = null; map.addOverlay(latestPolyline); polylineArray.push(latestPolyline); } function handleErrors(){ if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS) alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code); else if (gdir.getStatus().code == G_GEO_SERVER_ERROR) alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code); else if (gdir.getStatus().code == G_GEO_MISSING_QUERY) alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code); else if (gdir.getStatus().code == G_GEO_BAD_KEY) alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code); else if (gdir.getStatus().code == G_GEO_BAD_REQUEST) alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code); else if (gdir.getStatus().code == G_GEO_UNKNOWN_DIRECTIONS) { //alert("Google driving route information that we rely upon unfortunately is not available for this route.") } else alert("An unknown error occurred.\n Error code: " + gdir.getStatus().code); //clear latestRoute array to prepare for new route latestRoute = []; latestRouteLabels = []; } function addWeightToSegment(routePoint){ for (var i=0; i 0 && value < 11) { num_commuters = value; startRouteDescription(); alert(getNextRouteMsg(1)); } else alert ("Please enter a valid number of commuters [1-10]."); } function isNumberString (InString) { if(InString.length==0) return (false); var RefString="1234567890"; for (Count=0; Count < InString.length; Count++) { TempChar= InString.substring (Count, Count+1); if (RefString.indexOf (TempChar, 0)==-1) return (false); } return (true); } function setPrintLayout(){ document.getElementById("printDone").style.display = 'block'; document.getElementById("Controls").style.display = 'none'; document.getElementById("bottom_ad").style.display = 'none'; document.getElementById("map").style.left = '0'; } function disablePrintLayout(){ document.getElementById("printDone").style.display = 'none'; document.getElementById("Controls").style.display = 'block'; //setTab(1); document.getElementById("bottom_ad").style.display = 'block'; var initWidth = document.body.clientWidth * 3 / 5; document.getElementById("map").style.width = initWidth.toString(); document.getElementById("map").style.height = 600; } function setTab(tabNum){ //unselect last tab and mark current selected - for proper coloring if (tabNum != lastTabSelected) { var last_pic_name = "tabpic"+lastTabSelected.toString(); document.getElementById("current").id = last_pic_name; var new_pic_name = "tabpic"+tabNum.toString(); document.getElementById(new_pic_name).id = "current"; } if (tabNum == 1) { document.getElementById("Tab1").style.display = 'block'; document.getElementById("Tab2").style.display = 'none'; document.getElementById("Tab3").style.display = 'none'; document.getElementById("Tab4").style.display = 'none'; } else if (tabNum == 2) { document.getElementById("Tab1").style.display = 'none'; document.getElementById("Tab2").style.display = 'block'; document.getElementById("Tab3").style.display = 'none'; document.getElementById("Tab4").style.display = 'none'; if (homeLocMarkers.length == 0 || homeLocMarkers[0] == null) { document.getElementById("disableTab2").style.display = 'block'; document.getElementById("enableTab2").style.display = 'none'; } else { document.getElementById("disableTab2").style.display = 'none'; document.getElementById("enableTab2").style.display = 'block'; } } else if (tabNum == 3) { document.getElementById("Tab1").style.display = 'none'; document.getElementById("Tab2").style.display = 'none'; document.getElementById("Tab3").style.display = 'block'; document.getElementById("Tab4").style.display = 'none'; } else if (tabNum == 4) { document.getElementById("Tab1").style.display = 'none'; document.getElementById("Tab2").style.display = 'none'; document.getElementById("Tab3").style.display = 'none'; document.getElementById("Tab4").style.display = 'block'; } lastTabSelected = tabNum; } function verifyBothMarkersVisible(addressMarker, centerMarker) { var addressPoint = addressMarker.getLatLng(); var centerPoint = centerMarker.getLatLng(); //if optimal and central markers are too close - put central on top if (centerPoint.distanceFrom(addressPoint) < 200) { var newCenterPnt = new GLatLng(centerPoint.lat() - 0.002, centerPoint.lng()); locCenter = newCenterPnt; centerMarker.setLatLng(newCenterPnt);//a bit south } } function showHelp(){ window.open('./helpForm.html',"Help",'left=20,top=20,width=1200,height=900,toolbar=0,resizable=No,scrollbars=1,menubar=1'); } function showWhyKids(){ window.open('./WhyKidsForm.html',"Kids",'left=20,top=20,width=800,height=400,toolbar=0,resizable=No,scrollbars=1,menubar=1'); } function showAbout(){ window.open('./aboutForm.html',"About",'left=20,top=20,width=1200,height=900,toolbar=0,resizable=No,scrollbars=1,menubar=1'); } function showWhatToolDoes(){ showInfo('What Optimal Home Location Tool Does

If you would like more information, please see our About or Help Forms.
', 700); } function showReportSample(){ window.open('./reportSampleNew.html',"Report",'left=20,top=20,width=850,height=900,toolbar=0,resizable=Yes,scrollbars=1,menubar=1'); } function showInfo(data, infoWinWidth){ var scrollOffsets = getScrollXY(); var winSize = getWinSize(); document.getElementById("info").innerHTML = data; document.getElementById("infoWindow").style.width = infoWinWidth.toString() + "px"; document.getElementById("infoWindow").style.top = (scrollOffsets[1]+(winSize[1]-300) / 2).toString() + "px"; document.getElementById("infoWindow").style.left = (scrollOffsets[0]+(winSize[0] - infoWinWidth) / 2).toString() + "px"; document.getElementById("infoWindow").style.display = 'block'; } function getWinSize() { var myWidth = 0, myHeight = 0; if( typeof( window.innerWidth ) == 'number' ) { //Non-IE myWidth = window.innerWidth; myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myWidth = document.documentElement.clientWidth; myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myWidth = document.body.clientWidth; myHeight = document.body.clientHeight; } return [myWidth, myHeight]; } function getScrollXY() { var scrOfX = 0, scrOfY = 0; if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } return [ scrOfX, scrOfY ]; } function drawCircle(centerPoint, radiusMiles) { var zoom = map.getZoom(); var normalProj = G_NORMAL_MAP.getProjection(); var centerPt = normalProj.fromLatLngToPixel(centerPoint, zoom); var circlePoints = new Array(); with (Math) { var radiusPix = radiusMiles * 10 * zoom; for (var a = 0 ; a < 361 ; a+=10 ) { var aRad = a*(PI/180); var y = centerPt.y + radiusPix * sin(aRad) var x = centerPt.x + radiusPix * cos(aRad) var p = new GPoint(x,y); circlePoints.push(normalProj.fromPixelToLatLng(p, zoom)); } if (circleLine) map.removeOverlay(circleLine); circleLine = new GPolyline(circlePoints,"#b62020",10,0.5); map.addOverlay(circleLine); } } function closeInfo(data){ document.getElementById("infoWindow").style.display = 'none'; } function showInfoOld(data){ var ah = screen.availHeight - 30; var aw = screen.availWidth - 10; var w = Math.max(document.body.clientWidth / 2, 500); var h = 200; var xc = ( aw - w ) / 2; var yc = ( ah - h ) / 2; var infoWindow = window.open("","","directories=0,toolbar=0,menubar=0,location=0,titlebar=0,dependent=1,resizable=1,status=0,scrollbars=0,left="+xc+",top="+yc+",width="+w+",height="+h); infoWindow.document.write(''); infoWindow.document.write(''); infoWindow.document.write(''); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write(''); infoWindow.document.write('
'); infoWindow.document.write(data); infoWindow.document.write('
'); infoWindow.document.write('

'); infoWindow.document.write('

'); infoWindow.document.write('
'); infoWindow.document.write(''); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write('
'); infoWindow.document.write(' '); infoWindow.document.write(''); infoWindow.document.close(); if (window.focus) {infoWindow.focus()} } function showRealEstateForm(){ window.open('./RealEstateForm.html',"For_Real_Estate_Agents",'left=20,top=20,width=750,height=750,toolbar=1,resizable=No, scrollbars=1,menubar=1'); } function showSellRentForm(){ window.open('./SellRentForm.html',"Sell_Rent_Advice",'left=20,top=20,width=650,height=500,toolbar=1,resizable=No, scrollbars=1,menubar=1'); } function showAdvertiseForm(){ window.open('./AdvertiseForm.html',"Advertise_Form",'left=20,top=20,width=650,height=700,toolbar=1,resizable=No, scrollbars=1,menubar=1'); } function searchAttraction(what, doShow){ if (homeLocMarkers[0] == null) { alert("Please fill Your Life & Your Commute tabs first to find your Optimal Home Location"); return; } if (doShow) { localSearch.setCenterPoint((homeLocMarkers[0]).getLatLng()); searchControl.execute(what); } else { removeSearchMarkers(what); } } var lastQuery; SearchApp.prototype.OnSearchStarting = function(sc, searcher, query) { lastQuery = query; removeSearchMarkers(query); } function removeSearchMarkers(query){ if (query == "Schools") { for (var i=0; i < schoolMarkerList.length; i++) { var markerObject = schoolMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } schoolMarkerList = new Array(); } else if (query == "Libraries") { for (var i=0; i < libraryMarkerList.length; i++) { var markerObject = libraryMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } libraryMarkerList = new Array(); } else if (query == "Starbucks") { for (var i=0; i < starbucksMarkerList.length; i++) { var markerObject = starbucksMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } starbucksMarkerList = new Array(); } else if (query == "Supermarkets") { for (var i=0; i < supermarketMarkerList.length; i++) { var markerObject = supermarketMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } supermarketMarkerList = new Array(); } else if (query == "Shopping centers") { for (var i=0; i < shoppingMarkerList.length; i++) { var markerObject = shoppingMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } shoppingMarkerList = new Array(); } else if (query == "Churches") { for (var i=0; i < churchMarkerList.length; i++) { var markerObject = churchMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } churchMarkerList = new Array(); } else if (query == "Temples") { for (var i=0; i < templeMarkerList.length; i++) { var markerObject = templeMarkerList[i]; map.removeOverlay(markerObject.marker); removeFromArray(labelArray, markerObject.label); removeFromArray(locationArray, markerObject.marker); } templeMarkerList = new Array(); } } SearchApp.prototype.OnSearchComplete = function(sc, searcher) { var options; if (lastQuery == "Schools") options = schoolMarkerOptions; else if (lastQuery == "Libraries") options = libraryMarkerOptions; else if (lastQuery == "Starbucks") options = coffeeMarkerOptions; else if (lastQuery == "Supermarkets") options = supermarketMarkerOptions; else if (lastQuery == "Shopping centers") options = shoppingMarkerOptions; else if (lastQuery == "Churches") options = churchMarkerOptions; else if (lastQuery == "Temples") options = templeMarkerOptions; // if we have local search results, put them on the map if ( searcher.results && searcher.results.length > 0) { for (var i = 0; i < searcher.results.length; i++) { var result = searcher.results[i]; // if this is a local search result, then proceed... if (result.GsearchResultClass == GlocalSearch.RESULT_CLASS ) { var point = new GLatLng(parseFloat(result.lat), parseFloat(result.lng)); var markerObject = new Object(); markerObject.label = result.titleNoFormatting; markerObject.marker = new GMarker(point, options); GEvent.addListener(markerObject.marker, "click", (function(me, myLabel) { return function() { me.openInfoWindowHtml(""+myLabel+""); }; })(markerObject.marker, markerObject.label)); //turn this attractions into route locations GEvent.addListener(markerObject.marker, "click", (function(pnt, label) { return function() { if (activateRouteListener == 0) return; //first polyline entry should be Central home location if (latestRoute.length == 0) { latestRoute.push(locCenter); latestRouteLabels.push("Home"); } //user clicked again on the same point - ignore if (pnt.equals(latestRoute[latestRoute.length-1])) return; latestRoute.push(pnt); latestRouteLabels.push(label); //create number icon (numberMarkerArray[latestRoute.length]).setLatLng(pnt); map.addOverlay(numberMarkerArray[latestRoute.length]); if (tmpPolyline) map.removeOverlay(tmpPolyline); tmpPolyline = new GPolyline(latestRoute, routeColors[(routeArray.length+1)%10], 2, 0.5); map.addOverlay(tmpPolyline); }; })(point, lastQuery)); map.addOverlay(markerObject.marker, options); if (lastQuery == "Schools") schoolMarkerList.push(markerObject); else if (lastQuery == "Libraries") libraryMarkerList.push(markerObject); else if (lastQuery == "Starbucks") starbucksMarkerList.push(markerObject); else if (lastQuery == "Supermarkets") supermarketMarkerList.push(markerObject); else if (lastQuery == "Shopping centers") shoppingMarkerList.push(markerObject); else if (lastQuery == "Churches") churchMarkerList.push(markerObject); else if (lastQuery == "Temples") templeMarkerList.push(markerObject); locationArray.push(markerObject.marker); labelArray.push(markerObject.label); } } } } function initiateDemographicsCall(state, city, neighborhood, index) { if (state == "" || city == "") return; var url = "FetchXML.php?"; var params = "zws-id=" + zillowKey; if (state != "") params += "&state=" + state; if (city != "") params += "&city=" + city; if (neighborhood != "") params += "&neighborhood=" + neighborhood; homeDataStrings[index][1] = ""; homeDataStrings[index][2] = ""; //call php to load xml file var xmlDoc; GDownloadUrl(url, function(data, responseCode) { if(responseCode == -1) { } else if(responseCode != 200){ return; } if (data.length > 1) { var schoolLink = ""; //add school link if working with SchoolDigger var schoolLink = "


"; homeDataStrings[index][1] = data; homeDataStrings[index][2] = zillowLink; if (index==0) { document.getElementById("area_info").innerHTML = data; document.getElementById("area_info").innerHTML += zillowLink; document.getElementById("area_info").innerHTML += schoolLink; if (oph_status == 4) { homeDataStrings[5][1] = homeDataStrings[0][1]; homeDataStrings[5][2] = homeDataStrings[0][2]; } } var commuteString = (homeDataStrings[index][3]>0 ? ("
commute: "+Math.round(homeDataStrings[index][3]*0.0621371192237334)/100 + " miles.") : ""); var dragMarker = ""; if (optimalLocationComputed && index==0) dragMarker = "

"+dragMarkerMsg; (homeLocMarkers[index]).openInfoWindowHtml(""+homeDataStrings[index][0]+commuteString+"

"+homeDataStrings[index][1]+homeDataStrings[index][2]+dragMarker); } } }, params); } SearchApp.prototype.OnSearchLocByNameComplete = function(sc, searcher) { if ( searcher.results && searcher.results.length > 0) { //we use only first match for (var i = 0; i < 1; i++) { var result = searcher.results[i]; // if this is a local search result, then proceed... if (result.GsearchResultClass == GlocalSearch.RESULT_CLASS ) { var point = new GLatLng(parseFloat(result.lat), parseFloat(result.lng)); addLocationMarker(point, last_label, last_index); } } } else alert("Sorry, address or location name not found. Please check your submission and try again."); } SearchApp.prototype.OnSearchLocByNameStarting = function(sc, searcher, query) { } SearchApp.prototype.OnReportSearchComplete = function(sc, searcher) { // if we have local search results, put them on the map if ( searcher.results && searcher.results.length > 0) { for (var i = 0; i < searcher.results.length; i++) { var result = searcher.results[i]; // if this is a local search result, then proceed... if (result.GsearchResultClass == GlocalSearch.RESULT_CLASS ) { ophAttractions[currAttractionIndex][1][i] = result.titleNoFormatting; } } } currAttractionIndex++; if (currAttractionIndex < 6) reportSearchControl.execute(ophAttractions[currAttractionIndex][0]); } var lastReportQuery; SearchApp.prototype.OnReportSearchStarting = function(sc, searcher, query) { lastReportQuery = query; } function getStateIndex(state){ switch(state) { case "AL": return 01; case "AK": return 02; case "AZ": return 04; case "AR": return 05; case "CA": return 06; case "CO": return 08; case "CT": return 09; case "DE": return 10; case "DC": return 11; case "FL": return 12; case "GA": return 13; case "HI": return 15; case "ID": return 16; case "IL": return 17; case "IN": return 18; case "IA": return 19; case "KS": return 20; case "KY": return 21; case "LA": return 22; case "ME": return 23; case "MD": return 24; case "MA": return 25; case "MI": return 26; case "MN": return 27; case "MS": return 28; case "MO": return 29; case "MT": return 30; case "NE": return 31; case "NV": return 32; case "NH": return 33; case "NJ": return 34; case "NM": return 35; case "NY": return 36; case "NC": return 37; case "ND": return 38; case "OH": return 39; case "OK": return 40; case "OR": return 41; case "PA": return 42; case "RI": return 44; case "SC": return 45; case "SD": return 46; case "TN": return 47; case "TX": return 48; case "UT": return 49; case "VT": return 50; case "VA": return 51; case "WA": return 53; case "WV": return 54; case "WI": return 55; case "WY": return 56; default: return 01; }; }; window.alert = function(txt) { showInfo(txt, 500); } function ophAreaAttractions(){ ophAttractions = new Array(6); for(var i=0; i<6; i++) { ophAttractions[i] = new Array(2); ophAttractions[i][1] = new Array(); } ophAttractions[0][0]="Schools"; ophAttractions[1][0]="Libraries"; ophAttractions[2][0]="Supermarkets"; ophAttractions[3][0]="Shopping centers"; ophAttractions[4][0]="Churches"; ophAttractions[5][0]="Temples"; currAttractionIndex = 0; reportSearch.setCenterPoint(ophLatLng); reportSearchControl.execute(ophAttractions[0][0]); }; function getPropertyValue(descrString, property){ var valStart = descrString.indexOf(property); if (valStart > descrString.length) return ""; var s1 = descrString.slice(valStart); valStart = s1.indexOf(":") + 1; var valEnd = s1.indexOf("
"); return s1.substring(valStart, valEnd); } function showCommuteQuotes(){ window.open('./CommuteQuotesForm.html','ShortCommute','left=20,top=20,width=850,height=700,toolbar=1,resizable=No, scrollbars=1,menubar=1'); } function createReport(){ if (oph_status < 4) { showInfo("Please enter addresses and define your family commute. Report can be generated only after your Optimal Home Location is computed. To view sample of a Report click: "+'
'+"Report Sample"+''+"", 500); return; } var params = "OPH=" + homeDataStrings[5][0]; params += "&city=" + currCity[5] + "&state=" + currState[5]; var numAltLocs = 0; var altLocString = new String(""); for (var col=0; col <=4; col++) if (homeDataStrings[col] != null && homeDataStrings[col][0] != null && homeDataStrings[col][0] != "") { numAltLocs ++; altLocString += "&Loc"+numAltLocs+"="+homeDataStrings[col][0]; } params += "&NAL=" + numAltLocs + altLocString; reportWindow = window.open("./reportTemplate.php?"+params,"","directories=1,toolbar=1,menubar=1,location=1,titlebar=1,dependent=1,resizable=1,status=1,scrollbars=1"); }