var geocoder; var markers = null; var currinfowindow = null; var currpartsoverlay = null; var currclustericon = null; var currzoom = null; var map = null; var markerClusterer = null; var markerClustererOptions = null; var storesCircle = null; var directionsDisplay = null; var blueIcon = new google.maps.MarkerImage( '/includes/js/images/map/pinBlue.gif', new google.maps.Size(26, 34), new google.maps.Point(0, 0), new google.maps.Point(12, 34) ); var blueStarIcon = new google.maps.MarkerImage( '/includes/js/images/map/pinBlueStar.gif', new google.maps.Size(27, 34), new google.maps.Point(0, 0), new google.maps.Point(12, 34) ); var tHover = null; var tMarker = null; var tDartHover = null; var tDartMarker = null; function map_init() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(36.0000, -95.0000); var mapTypeIds = [ google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.TERRAIN ]; var mapTypeOptions = { mapTypeIds: mapTypeIds, position: google.maps.ControlPosition.TOP_RIGHT, style: google.maps.MapTypeControlStyle.DEFAULT /* HORIZONTAL_BAR | DROPDOWN_MENU | DEFAULT */ }; var panOptions = { position: google.maps.ControlPosition.RIGHT_TOP }; var zoomOptions = { position: google.maps.ControlPosition.RIGHT_TOP, style: google.maps.ZoomControlStyle.DEFAULT /* SMALL | LARGE | DEFAULT */ }; var scaleOptions = { position: google.maps.ControlPosition.BOTTOM_LEFT, style: google.maps.ScaleControlStyle.DEFAULT /* DEFAULT */ }; var streetViewOptions = { position: google.maps.ControlPosition.RIGHT_TOP }; var overviewMapOptions = { opened: false }; var mapOptions = { zoom: 4, minZoom: 1, maxZoom: 18, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP, mapTypeControlOptions: mapTypeOptions, panControl: true, panControlOptions: panOptions, zoomControl: true, zoomControlOptions: zoomOptions, scaleControl: true, scaleControlOptions: scaleOptions, streetViewControl: false, streetViewControlOptions: streetViewOptions, overviewMapControl: false, overviewMapControlOptions: overviewMapOptions, disableDefaultUI: false }; map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); var mcStyles = [{ url: '/includes/js/images/map/pinCluster.gif', height: 36, width: 36, opt_anchor: [32, 0], opt_textColor: '#FFFFFF', opt_textSize: 10 }]; markerClustererOptions = { gridSize: 40, minimumClusterSize: 2, zoomOnClick: true, averageCenter: false, styles: mcStyles }; registerMapEvents(); } function loadMarkers() { var url = 'http://local.acdelco.com/includes/services/byDMA.cfm?type=&dma=&zip='; var markerBounds = new google.maps.LatLngBounds(); downloadUrl(url, function(data) { var markerdata = data.documentElement.getElementsByTagName("marker"); if (markerdata.length == 0) { return; } markers = []; for (var i = 0; i < markerdata.length; i++) { var id = markerdata[i].getAttribute("id"); var itemnum = i + 1; var markerLabel = itemnum.toString(); var lat = parseFloat(markerdata[i].getAttribute("lat")); var lng = parseFloat(markerdata[i].getAttribute("lng")); var accountNo = getChildNodeData(markerdata[i].getElementsByTagName("accountNo")[0]); var businessName = getChildNodeData(markerdata[i].getElementsByTagName("businessName")[0]); var address = getChildNodeData(markerdata[i].getElementsByTagName("address")[0]); var city = getChildNodeData(markerdata[i].getElementsByTagName("city")[0]); var state = getChildNodeData(markerdata[i].getElementsByTagName("state")[0]); var postalCode = getChildNodeData(markerdata[i].getElementsByTagName("postalCode")[0]); var fullAddress = address + ' ' + city + ', ' + state + ' ' + postalCode; var phone = getChildNodeData(markerdata[i].getElementsByTagName("phone")[0]); var fax = getChildNodeData(markerdata[i].getElementsByTagName("fax")[0]); var email = getChildNodeData(markerdata[i].getElementsByTagName("email")[0]); var sundayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("sundayHours")[0])); var mondayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("mondayHours")[0])); var tuesdayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("tuesdayHours")[0])); var wednesdayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("wednesdayHours")[0])); var thursdayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("thursdayHours")[0])); var fridayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("fridayHours")[0])); var saturdayHours = parseHours(getChildNodeData(markerdata[i].getElementsByTagName("saturdayHours")[0])); var storeHours = [sundayHours,mondayHours,tuesdayHours,wednesdayHours,thursdayHours,fridayHours,saturdayHours]; var productLines = markerdata[i].getElementsByTagName("productLines")[0].childNodes; var products = []; var product; for (j=0; j < productLines.length; j++) { if (productLines.item(j).nodeType == 1) { var node = productLines.item(j); if (node.getAttribute("published") == '1' && getChildNodeData(node) == '1') { product = { lineNumber: node.getAttribute("lineNumber"), name: node.getAttribute("name"), link: node.getAttribute("link") }; products.push(product); } } } var servicesOffered = markerdata[i].getElementsByTagName("services")[0].childNodes; var services = []; var service; for (j=0; j < servicesOffered.length; j++) { if (servicesOffered.item(j).nodeType == 1) { var node = servicesOffered.item(j); if (getChildNodeData(node) == '1') { service = { name: node.getAttribute("name") }; services.push(service); } } } var retail = getChildNodeData(markerdata[i].getElementsByTagName("retail")[0]); var repair = getChildNodeData(markerdata[i].getElementsByTagName("repair")[0]); var isc = getChildNodeData(markerdata[i].getElementsByTagName("isc")[0]); var bsc = getChildNodeData(markerdata[i].getElementsByTagName("bsc")[0]); var kfi = getChildNodeData(markerdata[i].getElementsByTagName("kfi")[0]); var keywords = getChildNodeData(markerdata[i].getElementsByTagName("keywords")[0]); var espanol = getChildNodeData(markerdata[i].getElementsByTagName("espanol")[0]); var mechanicnetUrl = getChildNodeData(markerdata[i].getElementsByTagName("mechanicnetUrl")[0]); var countryRegion = getChildNodeData(markerdata[i].getElementsByTagName("countryRegion")[0]); var tradeOnly = getChildNodeData(markerdata[i].getElementsByTagName("tradeOnly")[0]); var tssLevel = getChildNodeData(markerdata[i].getElementsByTagName("tssLevel")[0]); var distance = getChildNodeData(markerdata[i].getElementsByTagName("distance")[0]); var latlng = new google.maps.LatLng(lat, lng); var store = { itemNum: itemnum, markerLabel: markerLabel, latlng: latlng, accountNo: accountNo, name: businessName, address: address, city: city, state: state, postalCode: postalCode, fullAddress: fullAddress, phone: phone, fax: fax, email: email, website: mechanicnetUrl, storeHours: storeHours, productLines: products, services: services, retail: retail, repair: repair, isc: isc, bsc: bsc, kfi: kfi, keywords: keywords, espanol: espanol, countryRegion: countryRegion, tradeOnly: tradeOnly, tssLevel: tssLevel }; var marker = createMarker(store); markers.push(marker); markerBounds.extend(marker.position); } // fit bounds to the actual markers loaded // add a listener for the zoom_changed event so we can store the current zoom level after the call to fitBounds google.maps.event.addListenerOnce(map, 'bounds_changed', function() { currzoom = map.getZoom(); }); map.fitBounds(markerBounds); }); } function getChildNodeData(node) { retval = ''; if (node != null) { if (node.childNodes[0] != null) { retval = node.childNodes[0].nodeValue; } } return retval; } function createMarker(store) { var htmlContent = ""; var infowindow; var markerIcon; if (store.tssLevel == 'B') { markerIcon = blueStarIcon; } else { markerIcon = blueIcon; } var marker = new google.maps.Marker({ position: store.latlng, map: map, //title: store.name, icon: markerIcon }); // implement smartinfowindow instead of stock infowindow htmlContent = '
'; htmlContent += '

' + store.name + '

'; htmlContent += '
'; htmlContent += '' + store.address + '
'; htmlContent += '' + store.city + ',' + store.state + ' ' + store.postalCode + '
'; if (store.phone != '') {htmlContent += 'Phone: ' + store.phone + '
';} htmlContent += '
'; htmlContent += '
'; htmlContent += '

More Info

'; htmlContent += '
'; htmlContent += '
'; google.maps.event.addListener(marker, 'mouseover', function(e) { if (currinfowindow != null) { currinfowindow.close(); currinfowindow = null; } currinfowindow = new SmartInfoWindowService({ marker: marker, position: marker.getPosition(), map: map, content: htmlContent, accountNo: store.accountNo, businessName: store.name }); tMarker = marker; clearTimeout(tHover); tHover = setTimeout("checkPinHover()", 3000); tDartMarker = marker; clearTimeout(tDartHover); tDartHover = setTimeout("checkDartPinHover()", 3000); }); google.maps.event.addListener(marker, 'mouseout', function(e) { if (currinfowindow != null) { var t=setTimeout("checkInfoWindow()",500); } }); return marker; } function checkInfoWindow() { if (currinfowindow != null) { if (!currinfowindow.getIsActive()) { closeInfoWindow(); } } } function checkPinHover() { if (tMarker != null && currinfowindow != null) { if (tMarker == currinfowindow.getMarker()) { hoverMapPin(currinfowindow.getAccountNo(), currinfowindow.getBusinessName()); } tMarker = null; tHover = null; } } function checkDartPinHover() { if (tDartMarker != null && currinfowindow != null) { if (tDartMarker == currinfowindow.getMarker()) { dartMapPinHover(); } tDartMarker = null; tDartHover = null; } } function registerMapEvents() { google.maps.event.addListener(map, 'mouseover', function(e) { if (currinfowindow != null) { var t=setTimeout("checkInfoWindow()",500); } }); } function clearMarkers() { map.clearMarkers } function zoomToMarker(markernum) { var markerBounds = new google.maps.LatLngBounds(); var nummarkers = markers.length; // hide markers for the currently displayed page var first = pagenum * pagesize - pagesize; var last = first + pagesize - 1; if (last > nummarkers - 1) { last = nummarkers - 1; } for (i=first; i <= last; i++) { markers[i].setVisible(false); } // show the marker to zoom markers[markernum].setVisible(true); // extend the marker bounds markerBounds.extend(markers[markernum].position); map.fitBounds(markerBounds); map.setZoom(16); } function zoomToCluster() { currzoom = map.getZoom(); //currclustericon.triggerClusterClick(); map.fitBounds(currclustericon.cluster_.getBounds()); closeInfoWindow(); currclustericon = null; showBackToPreviousViewWindow(); } function showPreviousView() { map.setZoom(currzoom); var dv = document.getElementById('divBackToPreviousView'); if (dv != null) { dv.style.visibility = 'hidden'; } } function parseHours(hours) { var open; var close; if (!hours || hours == '') { open = 'CLOSED'; close = ''; } else { open = hours.substring(5, 12); close = hours.substring(18); } hoursObject = { open: open, close: close }; return hoursObject; }