//<![CDATA[

var dragMarker;

// A�ade ceros delante de un n�mero
function pad(n, totalDigits) {
	n = n.toString();
	var pd = '';
	if (totalDigits > n.length) {
		for (i=0; i < (totalDigits-n.length); i++) {
			 pd += '0';
		}
	}
	return pd+n.toString();
}


// Objeto de proyecci�n personalizada

customProjection = new GProjection();
customProjection.mercator = new GMercatorProjection(19);
customProjection.xscale = 256/340.0145;
customProjection.yscale = 256/340.03;

customProjection.fromLatLngToPixel = function(latlng,zoom) {
	if (zoom == 3) zoom = 4;
	var ll = new GLatLng(latlng.lat()*this.yscale, latlng.lng()*this.xscale, true);
	var p = this.mercator.fromLatLngToPixel(ll,16);
	p.x = p.x*zoom;
	p.y = p.y*zoom;
	return p;
}

customProjection.fromPixelToLatLng = function(pixel,zoom,unbounded) {
	if (zoom == 3) zoom = 4;
	pixel.x = pixel.x/zoom;
	pixel.y = pixel.y/zoom;
	var latlng = this.mercator.fromPixelToLatLng(pixel,16,unbounded);
	return new GLatLng(latlng.lat()/this.yscale, latlng.lng()/this.xscale, true);
}

customProjection.tileCheckRange = function(tile,zoom,tileSize) {
	if (zoom == 3) zoom = 4;
	if ((tile.x < 32061*zoom) || (tile.x > 32064*zoom))
		return false;
	if ((tile.y < 27571*zoom) || (tile.y > 27574*zoom))
		return false;
	return true;
}

customProjection.getWrapWidth = function(zoom){
	if (zoom == 3) zoom = 4;
	return this.mercator.getWrapWidth(16)*zoom;
}

// Crea iconos con letras.
var baseIcon = new GIcon();
baseIcon.shadow = "images/markers/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

function createMarker(id, point, letter) {
  var icono = new GIcon(baseIcon);
  if (letter) {
     icono.image = "images/markers/marker"+letter+".png";
	 var marker = new GMarker(point,icono);
  }
  else {
     icono.image = "images/markers/marker.png";
     var marker = new GMarker(point, {icon:icono, draggable:true});
	 GEvent.addListener(marker, "dragend", function() {
        var p = marker.getPoint();
        updateLatLng(p.lat(),p.lng());
//		marker.openInfoWindowHtml(p.lat()+" , "+p.lng());
     });
  }

  GEvent.addListener(marker, "click", function() {
    showDetails(id);
  });
  return marker;
}


// Límites geográficos del mapa.
var allowedBounds = new GLatLngBounds(customProjection.fromPixelToLatLng(new GPoint(32062*256,27574*256),1,false),
													customProjection.fromPixelToLatLng(new GPoint(32064*256,27572*256),1,false));

// Comprueba si se han sobrepasado los límites, si es así corrige la posición.
function checkBounds() {
  if (allowedBounds.contains(map.getCenter())) {
	 return;
  }
  var C = map.getCenter();
  var X = C.lng();
  var Y = C.lat();

  var AmaxX = allowedBounds.getNorthEast().lng();
  var AmaxY = allowedBounds.getNorthEast().lat();
  var AminX = allowedBounds.getSouthWest().lng();
  var AminY = allowedBounds.getSouthWest().lat();

  if (X < AminX) {X = AminX;}
  if (X > AmaxX) {X = AmaxX;}
  if (Y < AminY) {Y = AminY;}
  if (Y > AmaxY) {Y = AmaxY;}
  map.setCenter(new GLatLng(Y,X));
}

// Comprueba si la posición está dentro de los límites.
function getLatLng(lat,lng)
{
  var AmaxX = allowedBounds.getNorthEast().lng();
  var AmaxY = allowedBounds.getNorthEast().lat();
  var AminX = allowedBounds.getSouthWest().lng();
  var AminY = allowedBounds.getSouthWest().lat();

  if ((lng < AminX) || (lng > AmaxX) || (lat < AminY) || (lat > AmaxY))
     return new GLatLng(36.424866091962,-5.14378010628512);
  else
  	 return new GLatLng(lat,lng);
}

function showAddress(id,address,letter) {
  geocoder.getLatLng(
    address,
    function(point) {
      if (point) {
        var marker = createMarker(id,point,letter);
        map.addOverlay(marker);
      }
    }
  );
}

function showMarker(id,lat,lng,letter) {
   var marker = createMarker(id,getLatLng(lat,lng),letter);
   map.addOverlay(marker);
}

function setMapZoom(zoom)
{
    document.getElementById('zoom'+map.getZoom()).className = "";
	map.setZoom(zoom);
    var element = document.getElementById('zoom'+zoom);
    element.className = "selected";
    element.blur();
}


// Arranque del script.
if (GBrowserIsCompatible()) {

	var map = new GMap2(document.getElementById("map"));

	var copyright = new GCopyright("AEE",
		 new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180) ),
		 1, "Delegación de Turismo del Ilmo. Ayto. de Estepona");
	var copyrightCollection = new GCopyrightCollection('Map Data:');
	copyrightCollection.addCopyright(copyright);

	// Dadas las coordenadas y el zoom devuelve la url de la imagen.
	CustomGetTileUrl=function(p,z) {
		var zz = z;
		if (zz == 3) zz = 4;
		var v = (p.x-32061*zz)+(4*zz*(p.y-27571*zz))+1;
		return "images/map_z"+z+"_"+pad(v,2)+".png";
	}
	var tilelayers = [new GTileLayer(copyrightCollection,1,3)];
	tilelayers[0].getTileUrl = CustomGetTileUrl;

	var custommap = new GMapType(tilelayers,customProjection,"Estepona",{shortName:'BMN',tileSize:256,maxResolution:3,minResolution:1} );
	map.addMapType(custommap);

	// Registra el evento que comprueba los l�mites.
	GEvent.addListener(map, "move", function() { checkBounds(); });

	map.setCenter(customProjection.fromPixelToLatLng(new GPoint(32063*256+1,27573*256+1),1,false), 1, custommap);
	// map.addOverlay(new GMarker(new GLatLng(36.426,-5.1454)));

	var geocoder = new GClientGeocoder();
    setMapZoom(1);
}
// Muestra un aviso si el navegador no es compatible.
else {
	alert("Lo siento, este navegador no es compatible con el mapa.");
}

//]]>
