﻿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;
var lst_meteos;


function firefoxversion(firefoxuseragent){
if (/Firefox[\/\s](\d+\.\d+)/.test(firefoxuseragent)){ 
 var ffversion=new Number(RegExp.$1)
 return ffversion;
 }
else if (/Iceweasel[\/\s](\d+\.\d+)/.test(firefoxuseragent)){ 
 var ffversion=new Number(RegExp.$1)
 return ffversion;
 }
else{
 return 0;
 }
}

function CustomMapTypeControl() {
}
CustomMapTypeControl.prototype = new GControl();

function MeteoMapTypeControl() {
}
MeteoMapTypeControl.prototype = new CustomMapTypeControl();

CustomMapTypeControl.prototype.getDefaultPosition = function() {
// By default, the control will appear in the top left corner of the
// map with 7 pixels of padding.
  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";
}

CustomMapTypeControl.prototype.initialize = function(map) {
 // 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.
  var container = document.createElement("div");
  anade_mapa(container);
  anade_satelite(container);
  anade_terreno(container);
  map.getContainer().appendChild(container);
  return container;
}

MeteoMapTypeControl.prototype.initialize = function(map) {
//Sobreescribe el initialize del Custom en caso de ser heredado   
  var container = document.createElement("div");
  anade_mapa(container);
  anade_satelite(container);
  anade_terreno(container);
  map.getContainer().appendChild(container);
  return container;
}

function anade_satelite(container){
  var satTipus = document.createElement("div");
  CustomMapTypeControl.prototype.setButtonStyle_(satTipus,"/estilos/geomapa/sat.gif","st");
  container.appendChild(satTipus);
  GEvent.addDomListener(satTipus, "click", function() {
    map.setMapType(G_SATELLITE_MAP);
  });
 return satTipus;
}

function anade_hibrido(container){
  var hybTipus = document.createElement("div");
  CustomMapTypeControl.prototype.setButtonStyle_(hybTipus,"/estilos/geomapa/hib.gif","ht");
  container.appendChild(hybTipus);
  GEvent.addDomListener(hybTipus, "click", function() {
    map.setMapType(G_HYBRID_TYPE);
  });
return hybTipus;
}

function anade_mapa(container){
var mapaTipus = document.createElement("div");
  CustomMapTypeControl.prototype.setButtonStyle_(mapaTipus,"/estilos/geomapa/map.gif","mt");
  container.appendChild(mapaTipus);
  GEvent.addDomListener(mapaTipus, "click", function() {
    map.setMapType(G_NORMAL_MAP);
  });
return mapaTipus
}

function anade_terreno(container){
var terrTipus = document.createElement("div");
  CustomMapTypeControl.prototype.setButtonStyle_(terrTipus,"/estilos/geomapa/phy.gif","mt");
  container.appendChild(terrTipus);
  GEvent.addDomListener(terrTipus, "click", function() {
    map.setMapType(G_PHYSICAL_MAP);
  });
return terrTipus
}

function mostrarHibrido(){map.setMapType(G_HYBRID_MAP);}

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());
	if (mapa == 'MeteoGeoMap') {CMTC = new MeteoMapTypeControl()}
	else {CMTC = new CustomMapTypeControl()}
	map.addControl(CMTC); centrar_mapa();
	//MODO POR DEFECTO
	if (mapa == 'MeteoGeoMap') {map.setMapType(G_PHYSICAL_MAP);}
	else{map.setMapType(G_PHYSICAL_MAP);}
}

function crear_minimapa_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));
 	centrar_mapa();
	//MODO POR DEFECTO
	if (mapa == 'MeteoGeoMap') {map.setMapType(G_PHYSICAL_MAP);}
	else{map.setMapType(G_PHYSICAL_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 HiBRIDO POR DEFECTO
	map.setMapType(G_NORMAL_MAP);
}
function GeoMap_cargar_noticias() { 
	var mapa='NewsGeoMap';
	var lat='42.75361';
	var lng='-8.008472';
	var xml='http://www.galiciae.com/rss/markers.rss';
	var zoom = '2';
	if (GBrowserIsCompatible()) { 
	crear_mapa_xml(mapa,lat,lng,xml,zoom);
	mostrar_marcas_xml();
	}
	limitarZoom(2,9);
}

function GeoMap_cargar_meteoros(hora) { 
	var mapa='MeteoGeoMap';
	var lat='42.75361';
	var lng='-8.008472';
	var xml='http://www.galiciae.com/rss/predmeteo.rss';
	var zoom = '8';
	boton_hoy = $("botonhoy");
	boton_mana = $('boton_manana');
	boton_hoy.removeClassName('boton_desactivo');
	boton_hoy.removeClassName('boton_activo');
	boton_mana.removeClassName('boton_desactivo');
	boton_mana.removeClassName('boton_activo');
	if (hora =='today'){
		boton_mana.addClassName('boton_desactivo')
		boton_hoy.addClassName('boton_activo');
	}
	else{
		boton_mana.addClassName('boton_activo');
		boton_hoy.addClassName('boton_desactivo')
	}
	if (GBrowserIsCompatible()) {
	crear_mapa_xml(mapa, lat, lng, xml, zoom);
	mostrar_marcas_meteogeorss(hora);
	}
	else{alert('Navegador Incompatible');}
	//limitarZoom(7,9);
}

function MiniGeoMap_cargar_meteoros(hora, contexto) { 
	var mapa='MiniMeteoGeoMap';
	var lat='42.75361';
	var lng='-8.008472';
	var xml='http://'+contexto+'.galiciae.com/rss/predmeteo.rss';
	var zoom = '7';
	if (GBrowserIsCompatible()) {
	crear_minimapa_xml(mapa, lat, lng, xml, zoom);
	mostrar_marcas_meteogeorss(hora);
	}
	else{alert('Navegador Incompatible');}
	//limitarZoom(7,9);
}

function limitarZoom(minmapscale, maxmapscale){
	var mapTypes = map.getMapTypes();
	for (var i=0; i<mapTypes.length; i++) {
	mapTypes[i].getMinimumResolution = function() {return minmapscale;}
	mapTypes[i].getMaximumResolution = function() {return maxmapscale;}
	} 
}
function centrar_mapa(){
	map.setCenter(new GLatLng(lat, lng), zoom);
}

function mostrar_marcas_xml(){
	GDownloadUrl(xml, function(data, responseCode) {
		if (window.ActiveXObject) {
			    var xml = GXml.parse(data);
			    fParsed = xml.parsed;
		} 
		else if (window.DOMParser) {
			    var parser=new DOMParser();
			    var xml=parser.parseFromString(data,"text/xml");
			    fParsed = true;
		}
		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(tnum == 1)
			{
				marker = createMarker(point, markers[i].childNodes[0].nodeValue, markers[i].getAttribute("image"),markers[i].getAttribute("img_width"),markers[i].getAttribute("img_height"));
			}
			else
			{
				marker = createMarkerCustomTab(point, markers[i].childNodes[0].nodeValue, markers[i].getAttribute("image"), markers[i].getAttribute("img_width"), markers[i].getAttribute("img_height"));
				var marcaID = "marker"+String(parseFloat(marker.getPoint().lat())).replace(".", "_")+"_"+String(parseFloat(marker.getPoint().lng())).replace(".","_");
  				setGlobalVariable(marcaID+"_max_pieces", tnum);
  				setGlobalVariable(marcaID+"_current_piece", 1);    	  
			}
			map.addOverlay(marker);
		}
	});
}

function meteoro(nombre, media, max, min){
	this.nombre = nombre;
	this.meteoro = media
	this.max = max;
	this.min = min;
	}

function geoobjeto(nombre, media){
	this.nombre = nombre;
	this.meteoro = media
	}

function mostrar_marcas_meteogeorss(hora){
		lst_meteos = new Array;
		GDownloadUrl(xml, function(data, responseCode) {
		if (window.ActiveXObject) {
			    var xml = GXml.parse(data);
			    fParsed = xml.parsed;
		} 
		else if (window.DOMParser) {
			    var parser=new DOMParser();
			    var xml=parser.parseFromString(data,"text/xml");
			    fParsed = true;
		}
		var markers = xml.documentElement.getElementsByTagName("item");
		for (var i = 0; i < markers.length; i++) {
			var nombre = markers[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var fecha = markers[i].getElementsByTagName("fecha")[0].firstChild.nodeValue;
			var contenido =  markers[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			var mediamarker =  markers[i].getElementsByTagName("mediamarker")[0].firstChild.nodeValue;
			var tmax =  markers[i].getElementsByTagName("tmax")[0].firstChild.nodeValue;
			var tmin =  markers[i].getElementsByTagName("tmin")[0].firstChild.nodeValue;
			var navname = navigator.appName;
			if (navname == "Microsoft Internet Explorer"){geotag = "georss:point"}
			else{ 
				ffversion = firefoxversion(navigator.userAgent);
				if (ffversion >= 3 ){geotag = "georss:point"}
				else{ geotag="point";}
			 }
			var geo = markers[i].getElementsByTagName(geotag)[0].firstChild.nodeValue;
			geo = geo.split(" ");
			var lat = geo[0];
			var lng = geo[1];
			var ancho = 42;
			var alto = 42;
			var point = new GLatLng(parseFloat(lat),parseFloat(lng));
			var marker = "";
			var imagen = '/estilos/meteoros/42/'+mediamarker+'42.png';
			marker = createMarker(point, contenido, imagen, ancho, alto);
			meteo = new meteoro(nombre, mediamarker, tmax, tmin);
			if(fecha==hora){
				lst_meteos.push(meteo);
				map.addOverlay(marker);
			}		
		}
		/*Download es una funcion asincrona. 
		Si necesitamos datos que se recojan en esta funcion, el resto debe ser lanzado desde esta misma.*/
		showMeteoTable();		
		/*alert(lst_meteos);*/
	});
}

function mostrar_marcas_georss(){
		lst_meteos = new Array;
		GDownloadUrl(xml, function(data, responseCode) {
		if (window.ActiveXObject) {
			    var xml = GXml.parse(data);
			    fParsed = xml.parsed;
		} 
		else if (window.DOMParser) {
			    var parser=new DOMParser();
			    var xml=parser.parseFromString(data,"text/xml");
			    fParsed = true;
		}
		var markers = xml.documentElement.getElementsByTagName("item");
		for (var i = 0; i < markers.length; i++) {
			var nombre = markers[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var fecha = markers[i].getElementsByTagName("fecha")[0].firstChild.nodeValue;
			var contenido =  markers[i].getElementsByTagName("description")[0].firstChild.nodeValue;
			var mediamarker =  markers[i].getElementsByTagName("mediamarker")[0].firstChild.nodeValue;
			var navname = navigator.appName;
			if (navname == "Microsoft Internet Explorer"){geotag = "georss:point"}
			else{ 
				ffversion = firefoxversion(navigator.userAgent);
				if (ffversion >= 3 ){geotag = "georss:point"}
				else{ geotag="point";}
			 }
			var geo = markers[i].getElementsByTagName(geotag)[0].firstChild.nodeValue;
			geo = geo.split(" ");
			var lat = geo[0];
			var lng = geo[1];
			var ancho = 32;
			var alto = 32;
			var point = new GLatLng(parseFloat(lat),parseFloat(lng));
			var marker = "";
			var imagen = mediamarker;
			marker = createMarker(point, contenido, imagen, ancho, alto);
			geoo = new geoobjeto(nombre, mediamarker);
			lst_meteos.push(geoo);
			map.addOverlay(marker);
		}
		/*Download es una funcion asincrona. /
		Si necesitamos lanzar funciones que usen estos datos, /
		se debe lanzar desde esta misma.*/
	});
}



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() {

	var marca;
	var lat;
	var lng;
	var marcaID;

	marca =  marker.getPoint();
	lng=marca.lng();
	lat=marca.lat()+0.3;

	// map.setCenter(new GLatLng(lat,lng), zoom);
    marker.openInfoWindowHtml(content);
  });
  return marker;
}

function createMarkerCustomTab(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);
        marker = new GMarker(point,icon);
	 }
	 else
	  marker = new GMarker(point);
  
  GEvent.addListener(marker, "click", function() {

	var marca;
	var lat;
	var lng;
	var marcaID;

	marca =  marker.getPoint();
	var marcaID = "marker"+String(marca.lat()).replace(".", "_")+"_"+String(marca.lng()).replace(".","_");
	lng=marca.lng();
	lat=marca.lat()+0.3;
    marker.openInfoWindowHtml(content);
    showPiece(marcaID, 1);
  });
 
  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);

	// Cuando se hace click sobre el marcador, se centra el mapa y se muestran 
	// los tabs	
	
	GEvent.addListener(marker, "click", function() {
		marca =  marker.getPoint();
		lng=marca.lng();
		lat=marca.lat()+0.3;

//		map.setCenter(new GLatLng(lat,lng), zoom);
		marker.openInfoWindowTabsHtml(infoTabs);
	});
	return marker;
}

function mostrar_marca(){
		
	var point = new GLatLng(parseFloat(lat),
	parseFloat(lng));
	
	map.addOverlay(createMarker(point, contenido));
}

function showMeteo(){
	
	}

function showAddress(address,message) {
	//coloca una marca en 'address' con el contenido '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);
      }
    }

    
function showPrev(markerID) {
	/*** Funcion para paginar ventanas con tabs ***/
	return showPiece(markerID,  eval('window.'+markerID+'_current_piece')-1);
}
		
function showNext(markerID) {
	return showPiece(markerID,  eval('window.'+markerID+'_current_piece')+1);		
}
		
function showPiece(markerID, pieceNumber) {
	var element_max_pieces = getGlobalVariable(markerID+'_max_pieces');
	if(pieceNumber <= 0)
	{
		pieceNumber = 1;
	}

	if(pieceNumber >= element_max_pieces)
	{
		pieceNumber = element_max_pieces;
	}

	var new_selected_element = document.getElementById(markerID+'_piece'+pieceNumber);
	var current_selected_element_name = markerID+'_current_piece';
	var current_selected_element_value = getGlobalVariable(current_selected_element_name);
			
	if((new_selected_element != null) && (new_selected_element != 'undefined'))
	{
		if(current_selected_element_value > 0)
		{
			var current_selected_element = document.getElementById(markerID+'_piece'+current_selected_element_value);
			if((current_selected_element != null) && (current_selected_element != 'undefined'))
			{
				current_selected_element.style.display = 'none';
			}
		}
		
		new_selected_element.style.display = 'block';
		setGlobalVariable(current_selected_element_name, pieceNumber);
		
		var pager_tab = document.getElementById("pager_tab"+markerID);
		var pager_right_arrow = document.getElementById("arrow_right"+markerID);
		var pager_left_arrow = document.getElementById("arrow_left"+markerID);
		pager_tab.innerHTML = "";
		var startIndex = (Math.ceil((pieceNumber)/10)*10)-9;
		/* Imprimir regla de paginacion */
		for(i = startIndex; (i < startIndex+10) && (i <= element_max_pieces); i++)
		{
		
			if(i == pieceNumber)
			{
				pager_tab.innerHTML = pager_tab.innerHTML+"<span class=\"selected\">"+i+"</span>";
			}
			else
			{
				pager_tab.innerHTML = pager_tab.innerHTML+"<a href=\"Javascript:showPiece('"+markerID+"','"+i+"');\" class=\"pager\">"+i+"</a>";			
			}
		}
		
		/* Comprobar si hay mas paginas para mostrar la flecha derecha */
		if(hasMorePages(startIndex, element_max_pieces, 10)) {
			pager_right_arrow.innerHTML = "<a href=\"Javascript:showPiece('"+markerID+"',"+startIndex+"+10)\" class=\"arrow_right\"></a>";
		}
		else
		{
			pager_right_arrow.innerHTML = "";
		}
		
		
		/* Comprobar si hay mas paginas para mostrar la flecha izquierda */
		if(hasLessPages(startIndex, 10)) {
			pager_left_arrow.innerHTML = "<a href=\"Javascript:showPiece('"+markerID+"', "+startIndex+"-10)\" class=\"arrow_left\"></a>";
		}
		else
		{
			pager_left_arrow.innerHTML = "";
		}
	}
}

function hasMorePages(startIndex, totalRegs, regsPerPage){
	if(Math.ceil(startIndex/regsPerPage) == Math.ceil(totalRegs/regsPerPage))
		return false;
	else
		return true;
}

function hasLessPages(startIndex, regsPerPage){
	if(Math.ceil(startIndex/regsPerPage) == 1)
	 	return false;
	else
		return true;
}

function setGlobalVariable(varname, varvalue){
		window[varname] = varvalue;
	}
	
function getGlobalVariable(varname){
		return window[varname];
	}

function showMeteoTable(){
	var div = $('MeteoTable');
	div.innerHTML = '';
	var tabla = document.createElement('table');
	var tbody = document.createElement('tbody');
	tabla.appendChild(tbody);
	var par = false;
	for (var i = 0; i < lst_meteos.length; i++){
		var meteo = lst_meteos[i];
		/*div.appendChild(document.createTextNode(meteo.nombre));*/
		if (par == false){
			var tr = document.createElement('tr');
			tbody.appendChild(tr);
			var etd = document.createElement('td');
			par = true;
		}
		else{	var etd = document.createElement('td'); 
			etd.setAttribute('class','par');			
			par = false;}			
		var image = document.createElement('img');
		var rutaimagen="/estilos/meteoros/42/"+meteo.meteoro+"42.png";
		image.setAttribute('src',rutaimagen);
		etd.appendChild(image);
		tr.appendChild(etd)
		etd = document.createElement('td');
		etd.appendChild(document.createTextNode(meteo.nombre));
		etd.appendChild(document.createElement('br'));
		
		tmax = document.createElement('span');
		tmax.setAttribute('class','rojo');		
		tmax.appendChild(document.createTextNode(meteo.max));
		tmin = document.createElement('span');
		tmin.setAttribute('class','azul');
		tmin.appendChild(document.createTextNode(meteo.min));
		etd.appendChild(tmax);
		etd.appendChild(document.createTextNode(' - '));
		etd.appendChild(tmin);
		etd.appendChild(document.createTextNode(' ºC'));
		tr.appendChild(etd);
	}
	div.appendChild(tabla);
}

