var masMapasTimer;
var masMapasChosen = [];
var masMapasLayers = [];

var masMapasLoaded = false;
var masMapasCargados = false;
var mouseDentro =false;

var spanTemporal;
var mapaTemporal;
var xmljson;

var controlBoundinBoxFillColor = "#0000FF"; 
var controlBoundinBoxLineColor = "#0000FF"; 
var controlBoundinBoxOpacity = .5;
var controlBoundinBoxlineWeight = 3;

function mostrarMasMapas() {
	var masmapas_box = $("masmapas_box");
	var button = $("mas_inner");
	if(masmapas_box.style.display == "block"){
		masmapas_box.style.display = "none";
		//button.className ="";
		button.style.borderBottomWidth = "1px";
		button.style.borderBottomColor = "#b0b0b0";
		
	}
	else{
		masmapas_box.style.display = "block";
		button.style.borderBottomWidth = "4px";
		button.style.borderBottomColor = "#fff";
		
		if(!masMapasCargados){
			masMapasCargados = true;
			$("masmapas_content").innerHTML = mvar.cargandoMapas+ ' .. '+ imgCargando;
			CargarListadoMasMapas();
		}
	
	}
 
}


function ocultarMasMapas(e) {
 mouseDentro = false;
 if(!e) e = window.event;
 var layerbox = $("masmapas_box");

 if(checkMouseLeave(layerbox, e))
  masMapasTimer = setTimeout(function() {
   if(!mouseDentro)layerbox.style.display = "none"; }, 1500);
}

function CargarListadoMasMapas(){
	var url = rutaPrincipal+"recursos/masmapas.xml";
	XmlToJson(url,"CallBackCargarListadoMasMapas");	
}
function CallBackCargarListadoMasMapas(json){
	xmljson = json;
	var grupos = xmljson.masmapas.grupo;
	var numeroDeGrupos = grupos.length;
	var selectMasMapas = $("selectMasMapas");
	for(var i=0;i<numeroDeGrupos;i++){
		var grupo = grupos[i];
		var nombreGrupo = grupo.nombreGrupo;
		var valueGrupo = grupo.nombreGrupo;
		selectMasMapas.options[i+1]=new Option(nombreGrupo,valueGrupo);		
		}
	
	var masmapas_content = $("masmapas_content");
	masmapas_content.innerHTML = "";
	
	function AnadirMapa(mapa,nombreGrupo){
		var divMapa = document.createElement("div");
		var imgTree = document.createElement("img");
		imgTree.src = directorioImagenes + "treeplus.png";
		var spanMapa = document.createElement("span");
		spanMapa.innerHTML = mapa.nombremapa;
		divMapa.imgTree = imgTree;
		divMapa.url = mapa.urlmapa;
		divMapa.nombre = mapa.nombremapa;
		divMapa.formato = mapa.formato;
		divMapa.nombreGrupo = nombreGrupo;
		divMapa.appendChild(imgTree);
		divMapa.appendChild(spanMapa);
		masmapas_content.appendChild(divMapa);
		AttachEvent(spanMapa,"click",function(){ClickEnLayer(this.parentNode);});
		AttachEvent(imgTree,"click",function(){ClickEnLayer(this.parentNode);});
	}
	
	var grupos = xmljson.masmapas.grupo;
	var numeroDeGrupos = grupos.length;
	for(var i=0;i<numeroDeGrupos;i++){
		var masmapas = grupos[i].mapa;
		if(!masmapas.length)AnadirMapa(masmapas,grupos[i].nombreGrupo);
		else for(var j=0;j<masmapas.length;j++){AnadirMapa(masmapas[j],grupos[i].nombreGrupo);}
	}
	
	//ChageSelectMasMapas();
	masMapasCargados = true;
	VerificarBoxLink();
	
	
}
function ChageSelectMasMapas(){
	var grupoSeleccionado = $("selectMasMapas");
	grupoSeleccionado = grupoSeleccionado.options[grupoSeleccionado.selectedIndex].value;	
	var masmapasChildNodes = $("masmapas_content").childNodes;
	var masmapasChildNodesLength = masmapasChildNodes.length;
	
	for(var i=0;i<masmapasChildNodesLength;i++){
		var child = masmapasChildNodes[i];
		child.style.display = (grupoSeleccionado=="" || child.nombreGrupo == grupoSeleccionado)?"":"none";
	}

}
	
function ClickEnLayer(layer){
	if(layer.layerUl)MostrarOcultarMapa(layer);
	else{
		var imagenCargandoTemporal = document.createElement("label");
		//imagenCargandoTemporal.setAttribute("style","float:none;font-weight:bold;display:inline;margin:0 0 0 10px;padding:0px;");
		
		imagenCargandoTemporal.style.float ="none";
		imagenCargandoTemporal.style.fontWeight="bold";
		imagenCargandoTemporal.style.display = "inline";
		imagenCargandoTemporal.style.margin = "0 0 0 10px";
		imagenCargandoTemporal.style.padding="0px;";
		
		//imagenCargandoTemporal.setAttribute("src",rutaImagenCargando);
		imagenCargandoTemporal.innerHTML = mvar.cargando + ' ..';
		spanTemporal=layer.childNodes[1];
		spanTemporal.imagenCargandoTemporal = imagenCargandoTemporal;
		spanTemporal.appendChild(spanTemporal.imagenCargandoTemporal);				
		if(mapaTemporal)MostrarOcultarMapa(mapaTemporal);
		mapaTemporal = layer;
		//mapaTemporal.url = this.url;
		mapaTemporal.className ="highlight";
		GetCapabilitiesWMS(mapaTemporal.url,"CallBackMostrarLayers");
		}
	
}
function GetCapabilitiesWMS(urlWMS,callback){
	urlWMS = trim(urlWMS);
	if(isUrl(urlWMS)){
		if(urlWMS.substring(urlWMS.length-1)!="?")urlWMS+="?";
		mapaTemporal.url = urlWMS;
		urlWMS+="&service=WMS&request=GetCapabilities&c="+ GetDateString();
		XmlToJson(urlWMS,callback);
	}
	else GAlert(mvar.urlwmlnovalida);
}
function CallBackMostrarLayers(json){
	spanTemporal.removeChild(spanTemporal.imagenCargandoTemporal);
	
	if(!json || json==''){
		GAlert(mvar.fallowms);
		mapaTemporal.className = "";
		mapaTemporal = "";
		
		}
	else{
		var WMS_Capabilities = (json.WMT_MS_Capabilities)?json.WMT_MS_Capabilities:(json.WMS_Capabilities)?json.WMS_Capabilities:"";
		//var Version = ["1.1.0","1.1.1"];
		var Service = WMS_Capabilities.Service;
		var Name = Service.Name;
		var Title = Service.Title;
		var Abstract = Service.Abstract;
		spanTemporal.title = Abstract;
		var KeywordList = "";
		if(Service.KeywordList && Service.KeywordList.Keyword)
			for (i=0;i<Service.KeywordList.Keyword.length;i++){
				if(i!=0)KeywordList+=", ";
				KeywordList+=Service.KeywordList.Keyword[i];
			}
		var Capability = WMS_Capabilities.Capability;
		//var Request = WMS_Capabilities.Request;
		var Format = Capability.Request.GetMap.Format;
		var SRS = (Capability.Layer.CRS)?Capability.Layer.CRS:(Capability.Layer.SRS)?Capability.Layer.SRS:"";
		
		/*
		$("wmsTitle").innerHTML = Title;
		$("wmsTitle").title= Abstract;
		$("wmsTitle").alt= Abstract;*/
		
		//for(i=0;i<Format.length;i++){$("formatoWMS").options[i]= new Option(Format[i], Format[i]);}
		
		var layerUl = document.createElement("ul");
		layerUl.style.display="none";
		mapaTemporal.layerUl = layerUl;
		mapaTemporal.appendChild(layerUl);
		
		
		/*
		if(SRS[0].length<=1)SRS = SRS.split(" ");
		for(i=0;i<SRS.length;i++){
			var option =new Option(SRS[i], SRS[i]);
			$("SRSWMS").options[i]= option;
			if(SRS[i].indexOf("4326")>-1)option.selected = true;		
		}
		
		for(i=0;i<Version.length;i++){
			var option = new Option(Version[i], Version[i]);
			$("versionWMS").options[i]= option;
			if(Version[i].indexOf("1.1.1")>-1)option.selected = true;		
		}*/
		function CreateLayer(theLayer,parentLayer){
			//if(theLayer.Layer && theLayer.Layer!=undefined){
			if(theLayer.Layer && theLayer.Layer!=undefined){
				var Layers = [];
				var LayerAux = theLayer.Layer;
				if(!LayerAux.length)Layers[0]=LayerAux;
				else Layers = LayerAux;
				
				for(i=0;i<Layers.length ;i++){CreateLayer(Layers[i],theLayer);}
			}
			else {
				var layerLi = document.createElement("li");
				var layer = document.createElement("input");
				layer.type = "checkbox";
				layer.value = theLayer.Name;
				layer.name = "mark";
				layer.url = mapaTemporal.url;
				if(theLayer.LatLonBoundingBox!=undefined ||parentLayer.LatLonBoundingBox!=undefined || theLayer.BoundingBox!=undefined || parentLayer.BoundingBox!=undefined){
					var auxLatLongBounding = theLayer.LatLonBoundingBox || parentLayer.LatLonBoundingBox;
					if(!auxLatLongBounding){
						var boundingBoxes = theLayer.BoundingBox || parentLayer.BoundingBox;
						for(var i=0;i<boundingBoxes.length;i++){if(boundingBoxes[i].CRS == "EPSG:4326"){auxLatLongBounding = boundingBoxes[i];break;}}
					}
					if(auxLatLongBounding){
						var pointNW = new GLatLng(auxLatLongBounding.miny,auxLatLongBounding.minx);
						var pointSW = new GLatLng(auxLatLongBounding.maxy,auxLatLongBounding.minx);
						var pointNE = new GLatLng(auxLatLongBounding.miny,auxLatLongBounding.maxx);
						var pointSE = new GLatLng(auxLatLongBounding.maxy,auxLatLongBounding.maxx);
						//layer.LatLonBoundingBox = new GPolyline([pointNW,pointSW,pointSE,pointNE,pointNW]);
						//layer.LatLonBoundingBox = [pointNW,pointSW,pointSE,pointNE,pointNW];
						
						layer.LatLonBoundingBox = new GPolyline([pointNW,pointSW,pointSE,pointNE,pointNW],controlBoundinBoxLineColor,controlBoundinBoxlineWeight,controlBoundinBoxOpacity,{geodesic:true})
						}
					}
				layer.formato = (esExplorer6 &&(mapaTemporal.formato.toLowerCase().indexOf("png")!=-1))?"image/gif":mapaTemporal.formato;
				//layer.transparent = esExplorer?"FALSE":"TRUE";
				layer.transparent = "TRUE";
				layer.version = "1.1.1";
				layer.tileoverlay= new GTileLayerOverlay(new CustomTileLayer(1, 21,'GetMap', srs4326, layer.value,layer.formato,layer.version, layer.transparent,'1', layer.url));
				AttachEvent(layer,"click",function(){CargarLayerWMS(this,this.checked)});
				var layerTitle = document.createElement("span");
				AttachEvent(layerTitle,"click",function(){this.previousSibling.checked = !this.previousSibling.checked;CargarLayerWMS(this.previousSibling,this.previousSibling.checked)});
				var legend = "";
				if(theLayer.Style && theLayer.Style.LegendURL && theLayer.Style.LegendURL.OnlineResource["xlink:href"]){
					var LegendURL = theLayer.Style.LegendURL;
					legend = document.createElement("span");
					
					//legend.setAttribute("style","padding-left:5px;color:blue;text-decoration:underline;font-size:10px;");
					
					legend.style.paddingLeft = "5px";
					legend.style.color = "blue";
					legend.style.textDecoration = "underline";
					legend.style.fontSize= "10px";
					/*var ancho = (LegendURL["width"])?parseInt(LegendURL["width"])+20:400;
					var alto = (LegendURL["height"])?parseInt(LegendURL["height"])+60:245;
					if(alto>=altoDeVentana)alto = altoDeVentana-40;
					else if(alto<=70)alto = 70;
					if(ancho>anchoDeVentana)ancho = anchoDeVentana-40;
					else if(ancho<110)ancho = 110;*/
					AttachEvent(legend,"click",function(){
						//GLog.write(parseInt(LegendURL["width"]) + " x " +parseInt(LegendURL["height"]));
						//CrearVentanaPoput(ancho,alto,'Leyenda', '<img width="'+(ancho-20)+'" height="'+(alto-60)+'" src="'+LegendURL.OnlineResource["xlink:href"]+'" />');
						CrearVentanaPoput(400,350,'Leyenda', '<img src="'+LegendURL.OnlineResource["xlink:href"]+'" />');
						});
						
					legend.innerHTML = "Leyenda";
					//legend.appendChild(legendLink);
					//legend = '<a target="_blank" style="padding-left:5px;text-decoration:underline;" href="'+theLayer.Style.LegendURL.OnlineResource["xlink:href"]+'">Leyenda</a>';
					}
				layerTitle.innerHTML = theLayer.Title;
				if(theLayer.Abstract)layerTitle.title =theLayer.Abstract;
				layerLi.appendChild(layer);
				layerLi.appendChild(layerTitle);
				if(legend!="")layerLi.appendChild(legend);
				layerUl.appendChild(layerLi);
			}
		}
		CreateLayer(Capability.Layer);
		MostrarOcultarMapa(mapaTemporal);

	}
}
function MostrarOcultarMapa(mapa){
	if(mapa.layerUl && mapa.layerUl.style.display=="none"){
		if(mapaTemporal){
			//alert(mapaTemporal.layerUl.style.display);
			mapaTemporal.layerUl.style.display ="none";
			mapaTemporal.imgTree.src =directorioImagenes + "treeplus.png";
			mapaTemporal.className ="";
			mapaTemporal = "";
			}
		mapa.layerUl.style.display ="";
		mapa.className ="highlight";
		mapaTemporal = mapa;
		mapa.imgTree.src = directorioImagenes + "treeminus.png";
	}
	else{
		mapa.layerUl.style.display ="none";
		mapa.className ="";
		mapa.imgTree.src = directorioImagenes + "treeplus.png";
		mapaTemporal = "";
		
	}
}

function VerificarBoxLink(){

	if(layersAdidionalesAnadidos.length==0){
		$("mas_boxlink").className = "";
		$("mas_inner").className ="";
		$("masmapas_box").className ="";
	}
	else{
		$("mas_boxlink").className = "highlight";
		$("mas_inner").className ="highlight";
		$("masmapas_box").className ="highlight";
	}
}
function CargarLayerWMS(layer,checked){
	if(checked) {
		AnadirLayerAdicional(layer.tileoverlay);
		if(layer.LatLonBoundingBox!=undefined){
			map.addOverlay(layer.LatLonBoundingBox);
		}
		VerificarBoxLink();
	}
	else {
		BorrarLayerAdicional(layer.tileoverlay);
		if(layer.LatLonBoundingBox!=undefined){
			map.removeOverlay(layer.LatLonBoundingBox);
		}
		VerificarBoxLink();
	}
}
function OcultarTodosLosMapas(){
	var boxes = (esExplorer)?getElementsByName_iefix("input","mark"):document.getElementsByName("mark");
	for(var i = 0; i < boxes.length; i++) {
		if(boxes[i].checked) {
			boxes[i].checked = false;
			CargarLayerWMS(boxes[i],false);
		}
	}
	BorrarTodosLosLayersAdicionales();
}
