--- gmap.module.bak	2006-03-14 16:24:06.000000000 +0100
+++ gmap.module	2006-03-15 14:34:29.000000000 +0100
@@ -146,29 +146,70 @@ function gmap_from_var ($gmap,$javascrip
     }
 
     if (isset($gmap['markers'])) {
-      $lastmarker='';
-      foreach ($gmap['markers'] as $item) {
-        $mymarker='';
-        $mytext='';
-        if (isset($item['markername'])){
-          if ($item['markername']==$lastmarker) {
-            $i++;
+      if (isset($gmap['markerstyles'])) {
+        foreach($gmap['markerstyles'] as $markerstyle) {
+          $outtext .= 'var '. $markerstyle['name'] ." = new GIcon(baseIcon);\n";
+          if ($markerstyle['image']) {
+            $outtext .= $markerstyle['name'] .'.image = "'. $markerstyle['image'] ."\";\n";
           }
+          if ($markerstyle['iconSize']) {
+            $outtext .= $markerstyle['name'] .'.iconSize = new GSize('. $markerstyle['iconSize']['width'] .', ' . $markerstyle['iconSize']['height'] .");\n";
+          }
+          if ($markerstyle['iconAnchor']) {
+            $outtext .= $markerstyle['name'] .'.iconAnchor = new GPoint('. $markerstyle['iconAnchor']['horizontal'] .', ' . $markerstyle['iconAnchor']['vertical'] .");\n";
+          }
+          if (isset($markerstyle['shadow'])) {
+            $outtext .= $markerstyle['name'] .'.shadow = "'. $markerstyle['shadow'] ."\";\n";
+          } 
           else {
-            $lastmarker=$item['markername'];
-            $i=1;
+            $outtext .= $markerstyle['name'] .".shadow = '';\n";
+          }
+          if ($markerstyle['shadowSize']) {
+            $outtext .= $markerstyle['name'] .'.shadowSize = new GSize('. $markerstyle['shadowSize']['width'] .', ' . $markerstyle['shadowSize']['height'] .");\n";
+          }
+          if ($markerstyle['infoWindowAnchor']) {
+            $outtext .= $markerstyle['name'] .'.infoWindowAnchor = new GPoint('. $markerstyle['infoWindowAnchor']['horizontal'] .', ' . $markerstyle['infoWindowAnchor']['vertical'] .");\n";
           }
-          if (file_exists(variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].$i.'.png')) {
-            $mymarker=$base_url.'/'.variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].$i.'.png';
+        }
+
+        foreach ($gmap['markers'] as $item) {
+          $mymarker='';
+          $mytext='';
+          if (isset($item['markername'])){
+            $mymarker = $item['markername'];
           }
-          elseif (file_exists(variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].'.png')) {
-            $mymarker=$base_url.'/'.variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].'.png';
+          if (isset($item['label']) && strlen($item['label'])>0) {
+            $mytext=$item['label'];
           }
+          $outtext .=$gmap['id'].'.addOverlay(createcustomGMarker(new GPoint('.$item['point'].'),\''.$mytext.'\','.$mymarker."));\n";
         }
-        if (isset($item['label']) && strlen($item['label'])>0) {
-          $mytext=$item['label'];
+
+      }
+      else {
+        $lastmarker='';
+        foreach ($gmap['markers'] as $item) {
+          $mymarker='';
+          $mytext='';
+          if (isset($item['markername'])){
+            if ($item['markername']==$lastmarker) {
+              $i++;
+            }
+            else {
+              $lastmarker=$item['markername'];
+              $i=1;
+            }
+            if (file_exists(variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].$i.'.png')) {
+              $mymarker=$base_url.'/'.variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].$i.'.png';
+            }
+            elseif (file_exists(variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].'.png')) {
+              $mymarker=$base_url.'/'.variable_get('gmap_markerfiles','modules/gmap/markers').'/'.$item['markername'].'.png';
+            }
+          }
+          if (isset($item['label']) && strlen($item['label'])>0) {
+            $mytext=$item['label'];
+          }
+          $outtext .=$gmap['id'].'.addOverlay(createGMarker(new GPoint('.$item['point'].'),\''.$mytext.'\',\''.$mymarker."'));\n";
         }
-        $outtext .=$gmap['id'].'.addOverlay(createGMarker(new GPoint('.$item['point'].'),\''.$mytext.'\',\''.$mymarker."'));\n";
       }
     }
     if (isset($gmap['shape']) && !variable_get('gmap_xmaps',0)) {
@@ -476,7 +517,6 @@ function _gmap_doheader(){
                    }
 
               var baseIcon = new GIcon();
-              var baseIcon = new GIcon();
               baseIcon.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
               baseIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
               baseIcon.iconSize = new GSize(12, 20);
@@ -502,6 +542,25 @@ function _gmap_doheader(){
                 }
                 return returnMarker;
               }
+
+              function createcustomGMarker(point, htmltext, marker) {
+                if (marker.image) {
+                  var markerIcon = new GIcon(marker);
+                  var returnMarker = new GMarker(point, markerIcon);
+                }
+                else {
+                  var returnMarker = new GMarker(point);
+                }
+
+                // Show this htmltext  info window when it is clicked.
+                if (htmltext.length>0) {
+                  GEvent.addListener(returnMarker, \'click\', function() {
+                    returnMarker.openInfoWindowHtml(htmltext);
+                  });
+                }
+                return returnMarker;
+              }
+
                   // ]]>
                </script>
               ';
