var mapRutas = new Array();
var showing_rutas = true;
var lang = "es";

var comloc = new Array();
comloc["1"] = new Array('-4.691162109375','37.474858084971');
comloc["2"] = new Array('-0.703125','41.4921208396878');
comloc["3"] = new Array('-5.888671875','43.2932003138528');
comloc["4"] = new Array('2.79052734375','39.554883059924');
comloc["5"] = new Array('-15.501708984375','28.1398159127545');
comloc["6"] = new Array('-3.97255859375','43.2211897329875');
comloc["7"] = new Array('-4.603271484375','41.5825796014303');
comloc["8"] = new Array('-3.01025390625','39.827707384656');
comloc["9"] = new Array('1.42822265625','41.7467258417694');
comloc["10"] = new Array('-5.29541015625','35.8999939298853');
comloc["11"] = new Array('-0.52734375','39.622614940943');
comloc["12"] = new Array('-6.240234375','39.2067188449185');
comloc["13"] = new Array('-8.15185546875','42.7389437512438');
comloc["14"] = new Array('-2.33671875','42.2639928001706');
comloc["15"] = new Array('-3.68878841400146','40.4199654136383');
comloc["16"] = new Array('-2.92236328125','35.4159149234562');
comloc["17"] = new Array('-1.285400390625','37.8661807852967');
comloc["18"] = new Array('-1.461181640625','42.6339587226732');
comloc["19"] = new Array('-2.471923828125','43.0195807157959');
var com_actual = "";

var provloc = new Array();
provloc["1"] = new Array('-8.36334228515625','43.2191882234813');
provloc["2"] = new Array('-2.76580810546875','42.9141949451053');
provloc["3"] = new Array('-1.84295654296875','38.9807627650163');
provloc["4"] = new Array('-0.67291259765625','38.4406822641739');
provloc["5"] = new Array('-2.5762939453125','37.0836667824155');
provloc["6"] = new Array('-5.78155517578125','43.411033484126');
provloc["7"] = new Array('-4.7515869140625','40.6410514961004');
provloc["8"] = new Array('-6.35833740234375','38.8717902138254');
provloc["9"] = new Array('2.00225830078125','41.5476446235773');
provloc["10"] = new Array('-3.7078857421875','42.3423052785728');
provloc["12"] = new Array('-3.9111328125','43.3331693928173');
provloc["13"] = new Array('-0.23345947265625','40.0885785982371');
provloc["14"] = new Array('-5.34759521484375','35.8823743372924');
provloc["15"] = new Array('-3.93035888671875','38.9679511540159');
provloc["16"] = new Array('-2.20001220703125','40.0612565814047');
provloc["17"] = new Array('-6.383056640625','39.4489194834723');
provloc["18"] = new Array('-5.80078125','36.5493624683978');
provloc["19"] = new Array('-4.82025146484375','37.868349033059');
provloc["20"] = new Array('-18.028564453125','27.7516076875494');
provloc["22"] = new Array('-14.1201782226562','28.3962327116804');
provloc["23"] = new Array('2.00225830078125','41.5476446235773');
provloc["24"] = new Array('-17.2457885742188','28.1010579586694');
provloc["25"] = new Array('-15.6362915039062','27.9555910046426');
provloc["26"] = new Array('-3.47991943359375','37.3221203594518');
provloc["27"] = new Array('-3.131103515625','40.6535550432884');
provloc["28"] = new Array('-2.1807861328125','43.1971672825013');
provloc["29"] = new Array('-6.91314697265625','37.4138003506629');
provloc["30"] = new Array('-0.406494140625','42.1491508091193');
provloc["31"] = new Array('1.41448974609375','38.977560079552');
provloc["32"] = new Array('-3.8616943359375','37.8162934802451');
provloc["33"] = new Array('-17.865711','28.655357');
provloc["34"] = new Array('-2.47467041015625','42.36260292172');
provloc["35"] = new Array('-13.6532592773438','29.017748018496');
provloc["36"] = new Array('-5.592041015625','42.57533232111');
provloc["37"] = new Array('0.65093994140625','41.590796851056');
provloc["38"] = new Array('-7.52838134765625','42.972501586026');
provloc["39"] = new Array('-3.6968994140625','40.4218603620452');
provloc["40"] = new Array('2.96218872070312','39.6141520770026');
provloc["41"] = new Array('-3.04046630859375','35.2590765425257');
provloc["42"] = new Array('4.05807495117188','39.9655432199661');
provloc["43"] = new Array('-1.2249755859375','37.9896690440362');
provloc["44"] = new Array('-4.59228515625','36.9191561114819');
provloc["45"] = new Array('-1.65618896484375','42.7933852211617');
provloc["46"] = new Array('-7.9046630859375','42.3585439174971');
provloc["47"] = new Array('-4.51263427734375','42.0105298188953');
provloc["48"] = new Array('-8.52813720703125','42.4558876419717');
provloc["49"] = new Array('-5.69915771484375','40.9342652117794');
provloc["50"] = new Array('-4.21051025390625','40.9736772647783');
provloc["51"] = new Array('-5.9930419921875','37.4007100687405');
provloc["52"] = new Array('-2.4774169921875','41.7303300504665');
provloc["53"] = new Array('1.12335205078125','41.2199857849392');
provloc["54"] = new Array('-16.5371704101562','28.3309775977782');
provloc["55"] = new Array('-1.131591796875','40.3653810760217');
provloc["56"] = new Array('-4.01824951171875','39.8654795137861');
provloc["57"] = new Array('-0.46966552734375','39.4616436420555');
provloc["58"] = new Array('-4.7296142578125','41.6154423246811');
provloc["59"] = new Array('-2.83721923828125','43.185152509373');
provloc["60"] = new Array('-5.75408935546875','41.5332541428132');
provloc["61"] = new Array('-0.867919921875','41.6216022222456');
provloc["11"] = new Array('2.9443359375','39.1257989811816');
provloc["21"] = new Array('1.4776611328125','38.6876536782617');
var prov_actual = "";


// Funciones para ticket
var cX = 0; var cY = 0; var rX = 0; var rY = 0;
function UpdateCursorPosition(e){ cX = e.pageX; cY = e.pageY;}
function UpdateCursorPositionDocAll(e){ cX = event.clientX; cY = event.clientY;}
if(document.all) { document.onmousemove = UpdateCursorPositionDocAll; }
else { document.onmousemove = UpdateCursorPosition; }

// Parsea los datos de la llamada ajax
function parseJSON (data) {
	try {
		return eval ("(" + data + ")");
	} catch (e) {
		alert ("ERROR JSON "+e.message+" : "+data);
		return null;
	}
}

function objetoAjax()
{
	var xmlhttp=false;
	try
	{
	        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
	        try
	        {
	                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	        }
	        catch(E) { xmlhttp=false; }
	}
	if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); }

	return xmlhttp;
}
function distancia (a1,b1,a2,b2) {
	return Math.sqrt((a2-a1)*(a2-a1)+(b2-b1)*(b2-b1));
}
// Mira si el punto esta en la zona visible
function inBounds (bounds, point) {
    var lat = point.lat();
	var lng = point.lng();
    var min_bounds = bounds.getSouthWest();
	var max_bounds = bounds.getNorthEast();
	//alert ("lat:"+lat+"< miny:"+bounds.minY+", lat > "+bounds.maxY);
	if (lat < min_bounds.lat() || lat > max_bounds.lat() ||
         lng < min_bounds.lng() || lng > max_bounds.lng()) {
        return false;
    } else {
        return true;
    }
}

function mouseTicket () {
	movehandler = GEvent.addListener(map, "mousemove", function(pPoint){
		if (tick_now != "")
			show_ticket (tick_now);
	});
}
// Oculta etiqueta
function hide_ticket () {
	document.getElementById('ticketdiv').display = "none";
	document.getElementById('ticketdiv').visibility = "hidden";
	document.getElementById('ticketdiv').innerHTML = "";
	tick_now = "";
}
// Muestra etiqueta
function show_ticket (label) {
	tick_now = label;
	document.getElementById('ticketdiv').display = "inline";
	document.getElementById('ticketdiv').visibility = "visible";
	document.getElementById('ticketdiv').innerHTML = "<table><tr><td bgcolor='#333333' style='border:1px dotted black;color:white'><b>"+label+"</b></td></tr></table>";
	document.getElementById('ticketdiv').style.left = (cX+10) + "px";
	document.getElementById('ticketdiv').style.top = (cY+10) + "px";
}

// VARIABLES DE MAPA
var tick_now = "";
var map;
var zoom = 5;
var markers = new Array();
var mapdiv;

// Crea un marcador
function createMarker(point,content,tick,icon_type,marker_type) {
	// Configuramos nuestro objeto GMarkerOptions.
	var markerOptions = { icon:icon_type };
	var marker = new GMarker(point, markerOptions);

	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(content);
	});
	GEvent.addListener(marker, "mouseover", function() {
		//if (zoom == 9) {
			//GEvent.removeListener(movehandler);
			//hide_ticket();
			show_ticket(tick);
			
		//}
	  });
	  GEvent.addListener(marker, "mouseout", function() {
		hide_ticket();
		//mouseTicket();
	 });
	return marker;
}

// CONSTRUCTOR
function loadMapa (id_com,id_prov,url_lat,url_lng,id_url,url_id_coleccion,zoom,sat,show,l,remote) {
	lang = l;
	// && (document.domain == "www.despania.es" || document.domain == "despania.es")
	if (GBrowserIsCompatible() && (document.domain == "www.despania.es" || document.domain == "despania.es" || document.domain == "70.86.79.2")) {
		var locok = 1;
		actualiza (id_com,id_prov);
		m = document.getElementById("map");
		mapdiv = document.getElementById("map");
		var point = new GLatLng(37.4419, -4.5419);
        map = new GMap2(m);
		if (url_id_coleccion == 4 || sat == 1) map.setMapType(G_SATELLITE_MAP);
		else map.setMapType(G_NORMAL_MAP);
        if (url_lat == 0 && url_lng == 0) {
			url_lat = 37.4419; url_lng = -4.5419; zoom = 4; locok = 0;
		}
		map.setCenter(new GLatLng(url_lat, url_lng), zoom);
        GEvent.addListener (map,"moveend", loadData);
        loadData();
		mouseTicket();
		
		if (id_url != "" && show != "itinerarios" && locok) {
			reloc (url_lat,url_lng,zoom,id_url,''," ");
		}
		if (show == "itinerarios") {
			if (id_url != "") show_rutas('id',id_url);
			else if (id_prov != "") show_rutas('id_provincia',id_prov);
			else if (id_com != "") show_rutas('id_comunidad',id_com);
		}
    }
	//geoip(remote);
	load_cabecera(l);
	//if (show == "ficha") load_menu(id_com,id_prov,l);
	resizead();
}

function load_cabecera(lang) {
	ajax_cab=objetoAjax();
	ajax_cab.open("GET", "/ajax_cabecera.php?lang="+lang);
	ajax_cab.onreadystatechange=function() {
		if (ajax_cab.readyState==4) {
			document.getElementById('cabecera').innerHTML = ajax_cab.responseText;
		}
	}
	ajax_cab.send(null);
}

function load_menu(id_com,id_prov,lang) {
	ajax_menu=objetoAjax();
	ajax_menu.open("GET", "/mod_regiones_provincias_ajax.php?comunidad_url_id="+id_com+"&provincia_url_id="+id_prov+"&lang="+lang);
	ajax_menu.onreadystatechange=function() {
		if (ajax_menu.readyState==4) {
			document.getElementById('menu_provincias').innerHTML = ajax_menu.responseText;
		}
	}
	ajax_menu.send(null);
}

function geoip(remote) {
	ajax_ip=objetoAjax();
	ajax_ip.open("GET", "/geoip.php?ip="+remote);
	ajax_ip.onreadystatechange=function() {
		if (ajax_ip.readyState==4) {
			var msg = ajax_ip.responseText;
			if (msg != "error") {
				// GrayBox
				GB_TYPE = 'w';
				GB_show("Participa en <b>deSpania</b>","/sugeridor.php?id="+msg,450,500);
				return false;
				//alert(msg);
				//var latlng = msg.split(",");
				//alert(latlng);
			}
		}
	}
	ajax_ip.send(null);
}

function loadData () {	
	bounds = map.getBounds();
	min_bounds = bounds.getSouthWest();
	max_bounds = bounds.getNorthEast();
	
	// Markers
	for (mkey in markers) {
		if (!inBounds(bounds,markers[mkey]['marker_object'].getPoint())) {
		// HIDE (oculto por fuera de limites)
		//alert ("borra "+mkey);
		//markers[mkey]['marker_object'].hide();
		map.removeOverlay (markers[mkey]['marker_object']);
		delete markers[mkey];
		}
	}
	
	
	//alert ("http://www.despania.es/API/?zoom="+map.getZoom()+"&miny="+min_bounds.lat()+"&minx="+min_bounds.lng()+"&maxy="+max_bounds.lat()+"&maxx="+max_bounds.lng()+"&limit=60");
	ajax=objetoAjax();
	ajax.open("GET", "/API/?zoom="+map.getZoom()+"&miny="+min_bounds.lat()+"&minx="+min_bounds.lng()+"&maxy="+max_bounds.lat()+"&maxx="+max_bounds.lng()+"&limit=50");
	ajax.onreadystatechange=function() {
		if (ajax.readyState==4) {
			ajaxData = ajax.responseText;
			//alert ("ajax1: "+ajaxData);
			var dataMarkers = parseJSON (ajaxData);
			var mIcon = new GIcon(G_DEFAULT_ICON);
			mIcon.iconSize = new GSize(33, 45);
			mIcon.iconAnchor = new GPoint(16, 45);
			mIcon.infoWindowAnchor = new GPoint(16, 45);
			mIcon.shadow = "http://www.despania.es/images/marker_shadow.png";
			mIcon.shadowSize = new GSize(48.0, 41.0);
			for (i = 0; i < dataMarkers.length; i++) {
				var mk_unique_key = dataMarkers[i].id;
				if (dataMarkers[i].id_coleccion == 2)
					mIcon.image = "http://www.despania.es/images/marker_monumentos.png";
				if (dataMarkers[i].id_coleccion == 3)
					mIcon.image = "http://www.despania.es/images/marker_museos.png";
				if (dataMarkers[i].id_coleccion == 4)
					mIcon.image = "http://www.despania.es/images/marker_espacios.png";
				if (dataMarkers[i].id_coleccion == 5)
					mIcon.image = "http://www.despania.es/images/marker_playas.png";
				if (typeof(markers[mk_unique_key]) == "undefined") {
					var lat = dataMarkers[i].lat;
					var lng = dataMarkers[i].lng;
					var stars = dataMarkers[i].estrellas;
					var stars_str = "";
					for (s = 0; s < stars; s++) {
						stars_str += "<img src='http://www.despania.es/images/star-small.png'>";
					}
					var content = "<IFRAME src='/ficha.php?id="+dataMarkers[i].id+"&clic=1' frameborder=0 width='300' height='230' scrolling=no></IFRAME>";
					var tick = "<table><tr><td><table><tr><td style='font-family:arial;font-size:12px'>"+dataMarkers[i].nombre+"</td></tr><tr><td style='font-family:arial;font-size:10px'>"+stars_str+"</td></tr></table></td><td><img src='cache/"+dataMarkers[i].id_coleccion+".data/"+dataMarkers[i].id+"/foto_principal_40.jpg'></td></tr></table>";
					//var tick = "<table><tr><td><table><tr><td style='font-family:arial;font-size:12px'>"+dataMarkers[i].nombre+"</td></tr></table></td><td><img src='/cache/"+dataMarkers[i].id_coleccion+".data/"+dataMarkers[i].id+"/foto_principal_40.jpg'></td></tr></table>";
					var point = new GLatLng (lat,lng);
					markers[mk_unique_key] = Array();
					markers[mk_unique_key]['marker_object'] = createMarker (point,content,tick,mIcon,'info');
					map.addOverlay (markers[mk_unique_key]['marker_object']);
				}
			}
		}
	 }
	 ajax.send(null);
	 
	var xsend = map.getCenter().lng();
	var ysend = map.getCenter().lat();
	if (map.getZoom() > 7) showinfo(ysend,xsend,map.getZoom());
}

function show_rutas(param,val) {
	var zoomnow = map.getZoom();
	var bounds = map.getBounds();
	var min_bounds = bounds.getSouthWest();
	var max_bounds = bounds.getNorthEast();
	//alert ("/get_rutas.php?param="+param+"&val="+val);
	ajax_rutas=objetoAjax();
	ajax_rutas.open("GET", "/get_rutas.php?param="+param+"&val="+val);
	ajax_rutas.onreadystatechange=function() {
		if (ajax_rutas.readyState==4) {
			var ajaxRutas = parseJSON (ajax_rutas.responseText);
			//alert (ajax_rutas.responseText);
			for (i = 0; i < ajaxRutas.length; i++) {
				var unique_key = ajaxRutas[i].nombre;
				if (typeof (mapRutas[unique_key]) == "undefined") {
					ajaxRuta = ajaxRutas[i];
					var lRutaNombre = ajaxRuta.nombre;
					var lRutaNodos = new Array();
					for (v = 0; v < ajaxRuta.nodos.length; v++) {
						var lNodo = new GLatLng(ajaxRuta.nodos[v][0], ajaxRuta.nodos[v][1]);
						lRutaNodos.push(lNodo);
					}
					var lPolyline = new GPolyline(lRutaNodos);
					GEvent.addListener(lPolyline, "click", function() {
						document.getElementById('ticketdiv').display = "inline";
						document.getElementById('ticketdiv').visibility = "visible";
						document.getElementById('ticketdiv').innerHTML = "<table><tr><td bgcolor='#333333' style='border:1px dotted black;color:white'><b>"+lRutaNombre+"</b></td></tr></table>";
						document.getElementById('ticketdiv').style.left = (cX+10) + "px";
						document.getElementById('ticketdiv').style.top = (cY+10) + "px";
						//alert (content);
					  });
					mapRutas[unique_key] = lPolyline;
					map.addOverlay(lPolyline);
					if (!showing_rutas) mapRutas[unique_key].hide();
				}
			}
		}
	}
	ajax_rutas.send(null);
}

function reloc(lat,lng,zoom,id,name,col) {
	var markerwidth = 300;
	
	if (col == "espacios_naturales")
		markerwidth = 370;
		
	var point = new GLatLng (lat,lng);
	window.map.setCenter(point, zoom);
	
	window.map.openInfoWindow(point, "<IFRAME src='/ficha.php?id="+id+"' frameborder=0 width='"+markerwidth+"' height='230' scrolling=no></IFRAME>");
}

function actualiza(id_comunidad,id_provincia){
	ajaxd=objetoAjax();
	ajaxd.open("GET", "/dinamic.php?id_comunidad="+id_comunidad+"&id_provincia="+id_provincia+"&lang="+lang);
	ajaxd.onreadystatechange=function() {
		if (ajaxd.readyState==4) {
			document.getElementById('dinamic').innerHTML = ajaxd.responseText;
		}
	}
	ajaxd.send(null)
	
	ajaxd1=objetoAjax();
	ajaxd1.open("GET", "/mod_dinamic_fotos1.php?id_comunidad="+id_comunidad+"&id_provincia="+id_provincia+"&lang="+lang);
	ajaxd1.onreadystatechange=function() {
		if (ajaxd1.readyState==4) {
			document.getElementById('dinfotos1').innerHTML = ajaxd1.responseText;
		}
	}
	ajaxd1.send(null)
	
	ajaxd2=objetoAjax();
	ajaxd2.open("GET", "/mod_dinamic_fotos2.php?id_comunidad="+id_comunidad+"&id_provincia="+id_provincia+"&lang="+lang);
	ajaxd2.onreadystatechange=function() {
		if (ajaxd2.readyState==4) {
			document.getElementById('dinfotos2').innerHTML = ajaxd2.responseText;
		}
	}
	ajaxd2.send(null)
}

function showinfo (lat,lng,dinzoom) {
	if (dinzoom < 11) {
		var menor = "";
		var dist = 999;
		for (var id in comloc) {
			var d = distancia (lng,lat,comloc[id][0],comloc[id][1]);
			if (d < dist) { 
				menor = id;
				dist = d;
			}
		}
		if (menor != com_actual) {
			actualiza (menor,0);
			com_actual = menor;
		}
	}
	else {
		var menor = "";
		var dist = 999;
		for (var id in provloc) {
			var d = distancia (lng,lat,provloc[id][0],provloc[id][1]);
			if (d < dist) { 
				menor = id;
				dist = d;
			}
		}
		if (menor != prov_actual) {
			actualiza (0,menor);
			prov_actual = menor;
		}
	}
}

function resizead() {
	var x=mapdiv.offsetLeft;
	var y=mapdiv.offsetTop;

	x += 375;
	y += 275;
	document.getElementById('publi').style.left = x+"px";
	document.getElementById('publi').style.top = y+"px";
	document.getElementById('publi').style.display = "inline";
}
