var map = null;
var geocoder = null;
var side_bar_html = "";
var gmarkers = [];
var htmls = [];
var i = 0;
var bounds = null
var southWest = null
var northEast = null
var reasons=[];
reasons[G_GEO_SUCCESS]            = "Perfecto";
reasons[G_GEO_MISSING_ADDRESS]    = "Direccion Perdida: La direccion se ha perdido, o no tiene valor.";
reasons[G_GEO_UNKNOWN_ADDRESS]    = "Direccion Desconocida:  No encontramos su direccion en ningun lugar geografico.";
reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Direccion no disponible:  El servicio de geocoder para la direccion entregada no se puede mostrar por razones legales o por una razon contractual";
reasons[G_GEO_BAD_KEY]            = "Key incorrecta: La API key es incorrecta o no corresponde a este dominio";
reasons[G_GEO_TOO_MANY_QUERIES]   = "Demasiadas consultas: El numero de consultas diarias para este sitio ha sido excedido.";
reasons[G_GEO_SERVER_ERROR]       = "Error de servidor: La peticion de geoocding no ha podido ser procesada.";

function limpiamapa()
{
	map.clearOverlays();
	document.getElementById('mensajegeo').innerHTML = '';
	document.getElementById('mensajegeo').style.display = 'none';
}

 function createMarker(point,name,html,icono) {
	elicono=iconos[icono];
        var marker = new GMarker(point,elicono);
        GEvent.addListener(marker, "click", function() {
          	marker.openInfoWindowHtml(html);
        });
        // save the info we need to use later for the side_bar
        gmarkers[i] = marker;
        htmls[i] = html;
        // add a line to the side_bar html
        //side_bar_html += '<a href="javascript:myclick(' + i + ')">' + name + '</a><br>';
        i++;
        return marker;
}

function myclick(i) {
        	gmarkers[i].openInfoWindowHtml(htmls[i]);
}
function procesajson(doc) {

        // === Parsea el documento JSON === 
        var jsonData = eval('(' + doc + ')');
// === Dibuja los marcadores ===



        for (var i=0; i<jsonData.markers.length; i++) {
          var marker = createMarker(jsonData.markers[i].point, jsonData.markers[i].label, jsonData.markers[i].html,jsonData.markers[i].cat);
          map.addOverlay(marker);
	var actual=i+1;

	var incrementabar=Math.ceil((actual*100) / jsonData.markers.length);

	emptyProgress ('barramarker1');
	plus ('barramarker1',incrementabar);


        }

        // put the assembled side_bar_html contents into the side_bar div
       //document.getElementById("side_bar").innerHTML = side_bar_html;
}
function addPolygonToMap(overlay, point){
 var elmarker = new GMarker(point);
  GEvent.addListener(elmarker, "click", function() {
var latlngbounds = map.getBounds();
  var southwest = latlngbounds.getSouthWest();
  var northeast = latlngbounds.getNorthEast();
  var nelat = northeast.lat();
  var swlng = southwest.lng();
  var lefttop = map.fromLatLngToDivPixel(new GLatLng(nelat, swlng));


var html="SUDESTE:"+southwest +"noreste"+northeast+" hola"+map.fromContainerPixelToLatLng (new GPoint(0,67))+" - "+lefttop+"original"+nelat+"," +swlng+" lat"+map.fromContainerPixelToLatLng (new GPoint(0,67)).lat();
          	elmarker.openInfoWindowHtml(html);
        });
  map.addOverlay(elmarker);
}






function dibujagdown(){
	emptyProgress ('barramarker1')
	bounds = map.getBounds();
	southWest = bounds.getSouthWest();
	northEast = bounds.getNorthEast();
	var cat = document.getElementById("listcat").value;
      	// ================================================================
      	// === Fetch the JSON data file ====    
      	GDownloadUrl("includes/request/lugares.php?southWestlat="+southWest.lat()+"&southWestlng="+southWest.lng() +"&northEastlat="+map.fromContainerPixelToLatLng(new GPoint(0,102)).lat()+"&northEastlng="+northEast.lng()+"&listcat="+cat, function(data) {
procesajson(data);});

}
//funcion principal, carga el mapa el inicio
function initialize() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("mapagto"));
	
map.addControl(new GLargeMapControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,100)));





      	map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,80)));


        map.setCenter(new GLatLng(lat, lng), altura);

	  

	//GEvent.addListener(map, "click", addPolygonToMap);



	geocoder = new GClientGeocoder();
	dibujagdown();
  	var point = new GLatLng(lat,lng);
 

 	var marker = new GMarker(point,icongeocoder);
        	GEvent.addListener(marker, "click", function() {
          	marker.openInfoWindowHtml(lugar);
        });

      	map.addOverlay(marker);

GEvent.addListener(map, "dragend", function() {
	limpiamapa();
  	dibujagdown();
});



GEvent.addListener(map, "zoomend", function() {
	limpiamapa();
  	dibujagdown();
});



      }
    }
 // ====== Geocoding ======
      function buscargeocoder() {
limpiamapa();
        var search = document.getElementById("geocoder").value;
        // ====== Perform the Geocoding ======        
        geocoder.getLocations(search, function (result)
          { 
            // If that was successful
            if (result.Status.code == G_GEO_SUCCESS) {
              // How many resuts were found
		document.getElementById('mensajegeo').style.display = 'block';
              document.getElementById("mensajegeo").innerHTML = "Encontrados " +result.Placemark.length +" lugares";
              // Loop through the results, placing markers
              for (var i=0; i<result.Placemark.length; i++) {
                var p = result.Placemark[i].Point.coordinates;
                var marker = new GMarker(new GLatLng(p[1],p[0]));
                document.getElementById("mensajegeo").innerHTML += "<br>"+(i+1)+": "+ result.Placemark[i].address + marker.getPoint();
                map.addOverlay(marker);
              }
	
	
      
              // centre the map on the first result
              var p = result.Placemark[0].Point.coordinates;
              map.setCenter(new GLatLng(p[1],p[0]),14);

dibujagdown();

      // ================================================================

            }


            // ====== Decode the error status ======
            else {
              var reason="Codigo "+result.Status.code;
              if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
              } 
              alert('No se pudo Encontrar "'+search+ '" ' + reason);
            }
          }
        );
      }