Hola,
Mira viendo tu código casi me mareo, por uqe lo tienes mezclado con el PHP y es un poco tedioso...
Te pongo un código que hice hace un par de años a ver si te ayuda a solucionar tu problema:
Código:
imagen=opcionColor+etiqueta+".png";
var icono = new GIcon();
icono.image = "../../../imagenes/markers/"+imagen;
icono.shadow = "http://maps.google.com/intl/es_ALL/mapfiles/shadow50.png";
icono.iconSize = new GSize(20.0, 34.0);
icono.shadowSize = new GSize(37.0, 34.0);
icono.iconAnchor = new GPoint(9.0, 34.0);
icono.infoWindowAnchor = new GPoint(9.0, 2.0);
var opciones = {icon: icono, title: "Marca "+(num+1), draggable: true};
marker = new GMarker(latlng,opciones);
ind = markers.length;
markers[ind]= marker;
infoWindows[ind] = "";
map.addOverlay(marker);
num++;
marker.bindInfoWindowHtml("Puedes editar el contenido para<br>a\u00f1adir comentarios o imagenes.");
GEvent.addListener(marker, "dragstart", function() {
marker.closeInfoWindow();}
Piensa que es parte de un código mucho más grande y puede que haya variables por el medio que no estén definidas en este trozo del código. Como por ejemplo la variable imagen se construye con el resultado de dos selects que no aparecen por aquí.
También puede ser que haya algún parentesis o alguna llave mal puesta que se me haya colado, pero diriía que está todo ok. Hay partes que he eliminado como la teiqueta del marcador. Le he puesto solo un texto, pero en realidad había botnes con otras funciones JS. Para no liar las he quitado. Espero que te sirva.
Si tienes alguna duda me lo comentas!