Ciao unendo un po di tutorial in rete ho creato una mappa che recupera i markers da mysql via xml e i dati vengono anche inseriti in una tabella.
Il caricamento dei dati nella mappa e nella tabella funziona, funziona l'highlight della riga selezionata, funziona il fatto che alla chiusura della infowindow venga tolto l'highlight alla riga, non riesco a gestire però questo:
se seleziono un'altra riga della tabella la precedente rimane evidenziata lo stesso vale se chiudo la infowindow cliccando su un altro marker.

Penso ci sia qualche errore nella gestione della variabile lastlink nell'addListener.


Grazie in anticipo.

var map;
var markers = [];
var infoWindow;
var locationSelect;
var imagemap;
var lastlinkid;
var customIcons = {
english: {
icon: 'marker.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
},
italian: {
icon: 'marker2.png',
shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
}
};

var lastlinkid;
function load() {
map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(46.107398, 13.134499),
zoom: 12,
mapTypeId: 'roadmap',
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
});
infoWindow = new google.maps.InfoWindow();
locationSelect = document.getElementById("locationSelect");
imagemap = document.getElementById("imagemap");
}

function searchLocations() {
var address = document.getElementById("addressInput").value;
if (address != ""){
var geocoder = new google.maps.Geocoder();
geocoder.geocode({address: address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
searchLocationsNear(results[0].geometry.location);
} else {
alert(address + ' not found');
}
});
}
}

function clearLocations() {
infoWindow.close();
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(null);
}
markers.length = 0;
locationSelect.innerHTML = "";
}

function searchLocationsNear(center) {
clearLocations();
var radius = document.getElementById('radiusSelect').value;
var searchUrl = 'phpsqlajax_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
downloadUrl(searchUrl, function(data) {
var xml = parseXml(data);
var markerNodes = xml.documentElement.getElementsByTagName("marker") ;
var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < markerNodes.length; i++) {
var id = markerNodes[i].getAttribute("id");
var name = markerNodes[i].getAttribute("name");
var address = markerNodes[i].getAttribute("address");
var city = markerNodes[i].getAttribute("city");
var type = markerNodes[i].getAttribute("type");
var lat = markerNodes[i].getAttribute("lat");
var lng = markerNodes[i].getAttribute("lng");
var distance = parseFloat(markerNodes[i].getAttribute("distance"));
var latlng = new google.maps.LatLng(parseFloat(markerNodes[i].getAttribute("lat")),parseFloat(markerNodes[i].getAttribute("lng")));

createMarker(latlng, lat, lng, name, address, distance, city, type, mq);
bounds.extend(latlng);
}
map.fitBounds(bounds);


});
}

function createMarker(latlng, lat, lng, name, address, distance, city, type, mq) {
var linkid = "link"+(markers.length);
var html = "" + name + "
" + address + "
" + type + "
" + mq;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: latlng,
icon: icon.icon,
shadow: icon.shadow,
});

google.maps.event.addListener(infoWindow, 'closeclick', function() {
if (lastlinkid) {
document.getElementById(lastlinkid).style.backgrou nd="#ffffff";
}
});

google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
imagemap.innerHTML = '';
imagemap.innerHTML += '[img]' + type+'.jpg[/img]';
document.getElementById(linkid).style.background=" #dddddd";
lastlinkid = linkid;
});

markers.push(marker);
locationSelect.innerHTML += '<tr id="'+ linkid +'"><td><a href="javascript:myclick(' + (markers.length-1) + ')">' + name + '<\/a></td><td> ' + distance.toFixed(1) + 'km' + '<td>' + city + '</td>' + '<td>' + type + '</td></tr>';
return marker;
}