var IEBrowser = navigator.appVersion.split("MSIE");
var IEVersion = parseFloat(IEBrowser[1]);

var geocoder;
var mapa;
var lat;
var lng;
var xml;
var zoom;
var map;
var contenido;

function CustomMapTypeControl() {
}
CustomMapTypeControl.prototype = new GControl();
// Creates a one DIV for each of the buttons and places them in a container
// DIV which is returned as our control element. We add the control to
// to the map container and return the element for the map class to
// position properly.
CustomMapTypeControl.prototype.initialize = function(map) {
  var container = document.createElement("div");
  var mapaTipus = document.createElement("div");
  //this.setButtonStyle_(mapaTipus,"/img/mapa.jpg","mt");
  container.appendChild(mapaTipus);
  GEvent.addDomListener(mapaTipus, "click", function() {
    map.setMapType(G_MAP_TYPE);
  });

  var satTipus = document.createElement("div");
  //this.setButtonStyle_(satTipus,"/img/satellit.jpg","st");
  container.appendChild(satTipus);
  GEvent.addDomListener(satTipus, "click", function() {
    map.setMapType(G_SATELLITE_TYPE);
  });

  var hybTipus = document.createElement("div");
  //this.setButtonStyle_(hybTipus,"/img/hibrid.jpg","ht");
  container.appendChild(hybTipus);
  GEvent.addDomListener(hybTipus, "click", function() {
    map.setMapType(G_HYBRID_TYPE);
  });  

  map.getContainer().appendChild(container);
  return container;
}

// By default, the control will appear in the top left corner of the
// map with 7 pixels of padding.
CustomMapTypeControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7));
}

CustomMapTypeControl.prototype.setButtonStyle_ = function(button,imgfile,id) {
	button.setAttribute("style","float:left");
	button.style.styleFloat = "left";

	var image = document.createElement("img");
	image.src = imgfile;
	/*
	if (!IEVersion || (IEVersion && IEVersion >= 7)) image.src = imgfile;
	else {
		image.src = "/img/blank.gif";
		image.style.filter = "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+imgfile+"')";
	}
	*/
	image.id = id;
	button.appendChild(image);
	button.style.cursor = "pointer";
	button.style.color = "white";
	button.style.font = "small Arial";
	button.style.padding = "2px";
	button.style.marginBottom = "3px";
	button.style.textAlign = "center";
}

function crear_mapa_xml(p_mapa,p_lat,p_lng,p_xml,p_zoom){
	
	mapa=p_mapa;
	lat=p_lat;
	lng=p_lng;
	xml=p_xml;
	zoom=parseInt(p_zoom);
		
	map = new GMap2(document.getElementById(mapa));

	//CREA LOS CONTROLES DE ZOOM Y TIPO DE MAPA
	map.addControl(new GSmallMapControl());
	//map.addControl(new GMapTypeControl());
	map.addControl(new CustomMapTypeControl());
	
	//CENTRAMOS EL MAPA EN UN PUNTO
	centrar_mapa();
	
	//MODO H?BRIDO POR DEFECTO
	//map.setMapType(G_HYBRID_TYPE);

	//MODO NORMAL POR DEFECTO
	map.setMapType(G_NORMAL_MAP);

}

function mostrarHibrido()
{
	map.setMapType(G_HYBRID_MAP)
}


function crear_mapa_marca(p_mapa,p_lat,p_lng,p_zoom,p_contenido){
		
	mapa=p_mapa;
	lat=p_lat;
	lng=p_lng;	
	zoom=parseInt(p_zoom);
	contenido=p_contenido;
		
	map = new GMap2(document.getElementById(mapa));
	
	//CREA LOS CONTROLES DE ZOOM Y TIPO DE MAPA
	map.addControl(new GSmallMapControl());
	//map.addControl(new GMapTypeControl());
	map.addControl(new CustomMapTypeControl());
	
	//CENTRAMOS EL MAPA EN UN PUNTO
	centrar_mapa();
	
	//MODO H?BRIDO POR DEFECTO
	map.setMapType(G_MAP_TYPE);
}



function centrar_mapa(){
	
	map.setCenter(new GLatLng(lat, lng), zoom);
	
	
}

function mostrar_marcas_xml(){
	
	GDownloadUrl(xml, function(data, responseCode) {
				
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
			var tnum = parseInt(markers[i].getAttribute("tnum"));
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
			var marker = "";
			if (isNaN(tnum) || (tnum == 0)) {
				marker = createMarker(point, markers[i].childNodes[0].nodeValue,markers[i].getAttribute("image"),markers[i].getAttribute("img_width"),markers[i].getAttribute("img_height"));
			} else {			
				var infoTabs = new Array(tnum);
				for (var j = 0; (j < tnum) && (i < markers.length); i++, j++) {
					var tord = parseInt(markers[i].getAttribute("tord"));
					var content = markers[i].childNodes[0].nodeValue;
					infoTabs[tord] = new GInfoWindowTab(j+1, content);
				}
				marker = createMarkerTab(point, infoTabs);
			}
			map.addOverlay(marker);
		}

	});
}

function mostrar_marcas_xml_poly(){
	
	GDownloadUrl(xml, function(data, responseCode) {
				
		
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
			var tnum = parseInt(markers[i].getAttribute("tnum"));
			var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
			var marker = "";
			if (isNaN(tnum) || (tnum == 0)) {
				marker = createMarker(point, markers[i].childNodes[0].nodeValue,markers[i].getAttribute("image"),markers[i].getAttribute("img_width"),markers[i].getAttribute("img_height"));
			} else {			
				var infoTabs = new Array(tnum);
				for (var j = 0; (j < tnum) && (i < markers.length); i++, j++) {
					var tord = parseInt(markers[i].getAttribute("tord"));
					var content = markers[i].childNodes[0].nodeValue;
					infoTabs[tord] = new GInfoWindowTab(j+1, content);
				}
				marker = createMarkerTab(point, infoTabs);
			}
			map.addOverlay(marker);

			//aņadimos la linia
			if(i>0)
			{
				var lat_actual = parseFloat(markers[i].getAttribute("lat"));
				var lng_actual = parseFloat(markers[i].getAttribute("lng"));
				var lat_anterior = parseFloat(markers[i-1].getAttribute("lat"));
				var lng_anterior = parseFloat(markers[i-1].getAttribute("lng"));

	      var polyline = new GPolyline([
		  		  new GLatLng(lat_actual, lng_actual),
		  		  new GLatLng(lat_anterior, lng_anterior)
				], "#ff0000", 10);
				map.addOverlay(polyline);
			}

		}

	});
}

function createMarker(point, content, imagen, img_width, img_height) {
	var marker;
	 if(imagen)
	 {
        var icon = new GIcon();
        var ancho = 36;
        var alto= 36;
        if(img_width) ancho = img_width;
        if(img_height) alto = img_height;
        icon.image = imagen;
        icon.iconAnchor = new GPoint(16, 16);
        icon.infoWindowAnchor = new GPoint(16, 0);
        icon.iconSize = new GSize(ancho, alto);
//        icon.shadow = "http://www.avui.loc/img/meteo/plugim.gif";
//        icon.shadowSize = new GSize(59, 32);
        marker = new GMarker(point,icon);
	 }
	 else
	  marker = new GMarker(point);
  
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(content);
  });
  return marker;
}

function createMarkerTab(point, infoTabs) {
	var marker;

	// Place a marker in the center of the map and open the info window
	// automatically
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		
	  marker.openInfoWindowTabsHtml(infoTabs);
	});
	return marker;
}

function mostrar_marca(){
		
	var point = new GLatLng(parseFloat(lat),
	parseFloat(lng));
	
	map.addOverlay(createMarker(point, contenido));
}


//coloca una marca en 'address' con el contenido 'message'
function showAddress(address,message) {
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert(address + " not found");
				} else {
					map.setCenter(point, 8);
					var marker = new GMarker(point,iconoMarca);
					GEvent.addListener(marker, "click", function() {
						marker.openInfoWindowHtml(message);
					});
					map.addOverlay(marker);
				
				}
			}
		);
	}
}

function load(map) {
	
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById(map));
        map.setCenter(new GLatLng(37.4419, -122.1419), 13);
      }
    }
