﻿        var map;
        
        function init()
        {
            /**
             * DOM operations
             * 'Map coming...' visible only with JavaScript on.
             */
            document.getElementById("contentMap").innerHTML = "Cargando el mapa...";
            //document.getElementById("api-version").innerHTML = "api v=2."+G_API_VERSION;
            if (!GBrowserIsCompatible()) {
              alert('Sorry. Your browser is not Google Maps compatible.');
            }

            /**
             * map
             */
            _mPreferMetric = true;
            map = new GMap2(document.getElementById("contentMap"));
            var start = new GLatLng(40.416741,-3.70325);
            map.setCenter(start, 6);
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl(1));
            map.openInfoWindowHtml(map.getCenter(), "Cazaworld");
            map.closeInfoWindow(); //preload iw
        }


        /**
         * reverse/forward gecoder
         * sets marker LatLng
         */
        var markers = [];
        var geo = new GClientGeocoder();
        
        function geocode(query, pin_)
        {
          geo.getLocations(query, function(addresses)
          {
            if(addresses.Status.code != 200)
            {
              alert("Error:\n " + query);
            }
            else
            {
              marker = pin_ || createMarker();
              var result = addresses.Placemark[0];
              marker.howMany = addresses.Placemark.length;
              marker.response = result.address;
              var details = result.AddressDetails || {};
              marker.accuracy = details.Accuracy || 0;
              var lat = result.Point.coordinates[1];
              var lng = result.Point.coordinates[0];
              var responsePoint = new GLatLng(lat, lng);
              marker.setLatLng(responsePoint);
              //if(marker.poly) map.removeOverlay(marker.poly);
              //marker.poly = new GPolyline([query, responsePoint],"#ff0000",2,1);
              //map.addOverlay(marker.poly);
              marker.index = markers.length;
              markers.push(marker);
              if(!pin_)
              {
                map.setCenter(responsePoint);
                map.setZoom(marker.accuracy*2 + 3);
              }
              if(result.address) 
              {
                doInfo(marker);
              }
            }
          });
        }


        /**
         * creates and opens an info window
         * @param GMarker
         */
        function doInfo(marker_)
        {
          var pin = marker_;
          var iwContents = pin.response.replace(/,/g, ",<br/>");
          iwContents += "<div class='small'>"; // + pin.getLatLng().toUrlValue();
          iwContents += "<br/>Precisión: " + pin.accuracy;
          if (pin.howMany>1)iwContents += " - " + pin.howMany;
          iwContents += "</div>";
          pin.bindInfoWindowHtml(iwContents);
          map.openInfoWindowHtml(pin.getLatLng(), iwContents);
        }

        /**
         * marker with follow() function
         * @author: Esa 2008
         */
        var marker;

        function createMarker()
        {
          marker = new GMarker(map.getCenter(),{draggable:true, autoPan:false});
          map.addOverlay(marker);
          
          GEvent.addListener(marker, 'dragend', function(markerPoint)
          {
            if(!map.getBounds().containsLatLng(markerPoint))
            {
              map.removeOverlay(this);
              map.removeOverlay(this.poly);
            }
            else
            {
            geocode(this.getLatLng(),this);
            }
          });
          return marker
        }

        function follow(imageInd)
        {
          var dog = true;
          var noMore = false;

          var mouseMove = GEvent.addListener(map, 'mousemove', function(cursorPoint)
          {
            if(!noMore){
              marker = createMarker();
              noMore = true;
            }
            if(dog){
              marker.setLatLng(cursorPoint);
            }
          });
          
          var mapClick = GEvent.addListener(map, 'click', function()
          {
            dog = false;
            geocode(marker.getLatLng(),marker);
            // 'mousemove' event listener is deleted for saving resources
            GEvent.removeListener(mouseMove);
            GEvent.removeListener(mapClick);
          });
        }
          
