//Especialització de OpenLayers.Popup.FramedCloud
AutoSizeFramedCloudMinSize = OpenLayers.Class(OpenLayers.Popup.FramedCloud, {
    initialize:function(id, lonlat, contentSize, contentHTML, anchor, closeBox, 
                        closeBoxCallback) {

        if(isIE6) this.imageSrc = OpenLayers.Util.getImagesLocation() + 'cloud-popup-relative.gif';
			else  this.imageSrc = OpenLayers.Util.getImagesLocation() + 'cloud-popup-relative.png';

        OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments);
        this.contentDiv.className = this.contentDisplayClass;
    },
	autoSize: true, 
	minSize: new OpenLayers.Size(100,20)
});


// Genera un requadre amb el bbox donat
var requadreBbox = function(map, bbox){
	var boxes = new OpenLayers.Layer.Boxes("boxes");
	var box = new OpenLayers.Marker.Box(bbox);
	boxes.addMarker(box);
	map.addLayer(boxes);
}

// Borra el carrer seleccionat i el número de polícia si existeix.
var cercarMapaBorraTot = function(){
	
	if(numeroPortalMarker != null){
		map.removePopup(numeroPortalMarker.popup);
		delete numeroPortalMarker.popup;
		marKersLayer.removeMarker(numeroPortalMarker);
		numeroPortalMarker=null;
	}

	if(carrersSeleccionatsLayer.features.length>0)carrersSeleccionatsLayer.destroyFeatures();

	if( $('#nomCarrer').attr('value') == "" ){
		//Borrem les entrades del desplegable de punts
		$("#numeroPortal").removeData();
		$("#numeroPortal").html("");
		$("#numeroPortal")[0].options[ $("#numeroPortal")[0].options.length ] = new Option('tria un número', '');
		autocompleteCarrerSeleccionat=null;
	}
}

//----------------------------------------------------------------------------------------------------
// Quan apretem, boto de cercar una adreça en el mapa.
var botoCercarMapaOnclick = function(){

	cercarMapaBorraTot();

	if(autocompleteCarrerSeleccionat!=null){

//		var geometriaPunt,geometriaCarrer, parser;
//		parser = new OpenLayers.Format.WKT();
//
//		geometriaCarrer = parser.read(autocompleteCarrerSeleccionat.the_geom);
//		geometriaCarrer.attributes = autocompleteCarrerSeleccionat;
//		
//		var myBounds = geometriaCarrer.geometry.getBounds().clone();
//		map.zoomToExtent(myBounds,null);

		if($('#numeroPortal').attr('value')!=""){
			var puntSeleccionat = $("#numeroPortal").data( $('#numeroPortal').attr('value') );
			creaNumeroPortalPopup(puntSeleccionat, autocompleteCarrerSeleccionat,true);
		}else{
			marcaCarrer(autocompleteCarrerSeleccionat,true);
		}
	}

}

//----------------------------------------------------------------------------------------------------
// Ressalta un carrer
var marcaCarrer = function(carrer,centra){
	
	var geometriaCarrer, parser;
	parser = new OpenLayers.Format.WKT();

	geometriaCarrer = parser.read(carrer.the_geom);
	geometriaCarrer.attributes = carrer;
	
	var myBounds = geometriaCarrer.geometry.getBounds().clone();
	if(centra)map.zoomToExtent(myBounds,null);
	
	//Hauriem de mirar 
	if(carrersSeleccionatsLayer.features.length>0)carrersSeleccionatsLayer.destroyFeatures();
	carrersSeleccionatsLayer.addFeatures([geometriaCarrer]);
	carrersSeleccionatsLayer.redraw();

}



//----------------------------------------------------------------------------------------------------
// Crea el popup d'una adreça

var creaNumeroPortalPopup = function(numeroPortal, carrerSeleccionat,centra){
/*
	if(numeroPortalMarker != null){
		map.removePopup(numeroPortalMarker.popup);
		delete numeroPortalMarker.popup;
		marKersLayer.removeMarker(numeroPortalMarker);
		numeroPortalMarker=null;
	}
*/
	var parser = new OpenLayers.Format.WKT();

	var geometriaPunt = parser.read(numeroPortal.the_geom);
	var myBounds = geometriaPunt.geometry.getBounds().clone();
	if(centra)map.setCenter( myBounds.getCenterLonLat(), null);

	var size = new OpenLayers.Size(21,25);
	var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
	

	if(typeof(myIcon) !== 'undefined' && myIcon!=null){
		numeroPortalMarker = new OpenLayers.Marker(geometriaPunt.geometry.getBounds().getCenterLonLat(),myIcon.clone());
	}else{
		myIcon = new OpenLayers.Icon( pathArrel + 'public/images/marker.png',size,offset);
		myIcon.imageDiv.style.cursor='pointer';
		numeroPortalMarker = new OpenLayers.Marker(geometriaPunt.geometry.getBounds().getCenterLonLat(),myIcon);
	}

	marKersLayer.addMarker(numeroPortalMarker);
	numeroPortalMarker.text = carrerSeleccionat.nom + ", "+numeroPortal.numero;
	numeroPortalMarker.popup  = new AutoSizeFramedCloudMinSize("numeroPortal_marquer", 
													geometriaPunt.geometry.getBounds().getCenterLonLat(),
													new OpenLayers.Size(100, 20),
													numeroPortalMarker.text,
													null,
													true,
													function(){
														this.hide();
													}
													);

	numeroPortalMarker.events.register('mouseover', '', function(evt) {
								if( (panCntrl.active) || (infoCntrl.active) ){
									if(numeroPortalMarker.popup.visible()==false) numeroPortalMarker.popup.show();
									OpenLayers.Event.stop(evt);
								}
								});
	numeroPortalMarker.objecte = numeroPortal;
	map.addPopup(numeroPortalMarker.popup);

}


//----------------------------------------------------------------------------------------------------
// Genera la llegenda de la capa de Massa
var generaLlegendaMassa = function(capesLayer){

	var capesTrobades = capesLayer.split(",");
	var html = "";
	//var wmsMassaUrlLlegenda = wmsMassaUrlLlegenda;
	
	for(i=0; i < capesTrobades.length; i++){
		format = "image/png";
		extensio = "png";
//		if(isIE6){
//			format = "image/gif";
//			extensio = ".gif";
//		}

		var divElem = document.createElement("div");
		divElem.style.height = "24px";

		var iconaLlegenda = document.createElement("img");
		iconaLlegenda.src = wmsMassaUrlLlegenda+'&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&LAYER='+capesTrobades[i]+'&STYLE=&FORMAT='+format+"&"+extensio;
		iconaLlegenda.alt = capesTrobades[i];
		iconaLlegenda.title = capesTrobades[i];
//		iconaLlegenda.className = "pngfix";
//		$("#llegendaMassa")[0].appendChild(iconaLlegenda);
//		$("#llegendaMassa")[0].appendChild(document.createElement("br"));
		divElem.appendChild(iconaLlegenda);
		$("#llegendaMassa")[0].appendChild(divElem);

	}
	//$("#llegendaMassa").html(html);
}

//----------------------------------------------------------------------------------------------------
// Genera la llegenda dels transports
var generaLlegendatTransports = function(capesLayer){

	var capesTrobades = capesLayer.split(",");
	var html = "";
	
	var layers = [];
	for(var i=0; i < capesTrobades.length; i++){
		
		var divElem = document.createElement("div");
		divElem.style.height = "24px";

		var inputElem = document.createElement("input");
		inputElem.id = "input_" + capesTrobades[i];
		inputElem.name =  "input_" + capesTrobades[i];
		inputElem.type = "checkbox";
		inputElem.value = "layer_"+ capesTrobades[i];
		inputElem.onclick = function(){map.getLayer(this.value).setVisibility(this.checked);};

		divElem.appendChild(inputElem);

		
		format = "image/png";
		extensio = "png";
//		if(isIE6){
//			format = "image/gif";
//			extensio = ".gif";
//		}
		

		var iconaLlegenda = document.createElement("img");
		iconaLlegenda.src = wmsMassaUrlLlegenda+'&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&LAYER='+capesTrobades[i]+'&STYLE=&FORMAT='+format+"&"+extensio;
		iconaLlegenda.alt = capesTrobades[i];
		iconaLlegenda.title = capesTrobades[i];
//		iconaLlegenda.className = "pngfix";
		divElem.appendChild(iconaLlegenda);
		$("#llegendaTransports")[0].appendChild(divElem);
		

	}


}

//----------------------------------------------------------------------------------------------------
// Carrega capes de transports
var carregaLayersTransports = function(capesLayer){

	var capesTrobades = capesLayer.split(",");
	var html = "";
	
	var layers = [];
	for(var i=0; i < capesTrobades.length; i++){

		//Afegim la capa al mapa
		layers[i] = new OpenLayers.Layer.WMS(
			capesTrobades[i] , wmsMassaUrl,
			{
				layers: capesTrobades[i],
				transparent: 'true',
				srs: 'EPSG:23031',
				format: "image/png"
			},
			{
				buffer:0, ratio: 1, displayOutsideMaxExtent: false,
				isBaseLayer: false,
				visibility: false, 
				tileSize: new OpenLayers.Size(512,512)
			, alpha: true
				} 
		);
		layers[i].id = "layer_"+capesTrobades[i];
	}
	map.addLayers(layers);
}

//----------------------------------------------------------------------------------------------------
// Genera la url per obtenir una versió imprimible del mapa
var imprimirMapa = function(){
	
	var parametres = "";
	var zoom = map.zoom;
	parametres += "&zoom="+zoom;
	center = map.getCenter();
	//lon,lat
	var lat = center.lat;
	parametres += "&lat="+lat;
	var lon = center.lon;
	parametres += "&lon="+lon;

	parametres +="&layers=";
	layers = map.layers;
	for (var i=0, len=layers.length; i<len; i++) {
		var layer = layers[i];

		if (layer.isBaseLayer) {
			parametres += (layer == this.map.baseLayer) ? "B" : "0";
		} else {
			parametres += (layer.getVisibility()) ? "T" : "F";
		}
	}
	//Pois actius
	parametres += "&categoria="+ escape( lSGuia.capesGuiaFiltreIds() );

	//idPoi
	if(poiPopup!=null){
		parametres += "&idPoi="+poiPopup.objecte;
		//console.debug( poiPopup.objecte );
	}
	//carrer i portal
	if(autocompleteCarrerSeleccionat!=null){
		parametres += "&codiCarrer="+ autocompleteCarrerSeleccionat.codi;
		
		if( numeroPortalMarker != null){
			parametres += "&numeroPortal="+ numeroPortalMarker.objecte.numero;
		}
	}

	//isac
	var idEntitatIsac = $.getURLVar('idEntitatIsac') ;
	if(idEntitatIsac){
		parametres += "&idEntitatIsac="+ idEntitatIsac
	}

	var url = urlImprimir + "?" + parametres;
	window.open(url);

}


//----------------------------------------------------------------------------------------------------
// Popup poi

var creaPoiPopup = function(objecte){

		var fitxaHtml = "";
		fitxaHtml += "<b>"+objecte.feature.attributes.nom+"</b>";
		if((objecte.feature.attributes.via!=null) && (objecte.feature.attributes.via!="null") && (objecte.feature.attributes.via!="")){
			fitxaHtml += "<br />";
			if((objecte.feature.attributes.via!=null) && (objecte.feature.attributes.via!="null") && (objecte.feature.attributes.via!="")) fitxaHtml += objecte.feature.attributes.via;
			if((objecte.feature.attributes.portal!=null) && (objecte.feature.attributes.portal!="null") && (objecte.feature.attributes.portal!="") ) fitxaHtml += ", "+objecte.feature.attributes.portal;
			if((objecte.feature.attributes.pis!=null) && (objecte.feature.attributes.pis!="null") && (objecte.feature.attributes.pis!="")) fitxaHtml += " "+objecte.feature.attributes.pis+" ";
		}

		if((objecte.feature.attributes.telefon!=null) && (objecte.feature.attributes.telefon!="null") && (objecte.feature.attributes.telefon!="")) fitxaHtml += "<br />"+objecte.feature.attributes.telefon;
		//Imatge
		
		if((objecte.feature.attributes.imatge!="") && (objecte.feature.attributes.imatge!="null") && (objecte.feature.attributes.imatge!=null)){
			var srcGran = pathArrelUpload + objecte.feature.attributes.imatge;
			var srcPetita = srcGran.replace(/imatge.jpg/i, "petita.jpg")
			fitxaHtml += "<br /><br /><center><a href=\""+srcGran+"\" target=\"_blank\"><img src=\"" + srcPetita +"\" class=\"imatgePopup\" alt=\"Click per ampliar\" title=\"Click per ampliar\" /></a></center>";
		}

		if(poiPopup!=null)map.removePopup(poiPopup);//poiPopup.destroy();
		
		poiPopup  = new AutoSizeFramedCloudMinSize("poiPopup", 
										objecte.feature.geometry.getBounds().getCenterLonLat(),
										new OpenLayers.Size(100, 20),
										fitxaHtml,
										null,
										true,
										function(){
											this.destroy();
											poiPopup=null;
										}
										
										);
		poiPopup.updateSize();
		poiPopup.objecte = objecte.feature.fid.match(/[0-9]+/g)[0];
		//poiPopup.events.register('mousemove', poiPopup, function (e) {try{e.stopPropagation();}catch(e){}}); 
		map.addPopup(poiPopup);
}

var eliminaPoiPopup = function(){
	if(poiPopup!=null) map.removePopup(poiPopup);
}

//----------------------------------------------------------------------------------------------------
// Popup isac

var creaEntitatIsacPopup = function(objecte, centra){
		
	var punt = new OpenLayers.LonLat(objecte.x,objecte.y);
	//Baixem l'escala a 1.5000
	if(centra)map.setCenter( punt, 2);

	var size = new OpenLayers.Size(16,16);
	offset = new OpenLayers.Pixel(-(size.w/2), -(size.w/2) );
	
	var myIconIsac = new OpenLayers.Icon( pathArrel + 'public/images/markerIsac.gif',size,offset);
	myIconIsac.imageDiv.style.cursor='pointer';
	entitatIsacMarker = new OpenLayers.Marker(punt,myIconIsac);
	
	marKersLayer.addMarker(entitatIsacMarker);

	//{"id":1,"via":"Carrer Marquès de Camps","portal":"50","nom":"A.P.A. Escola del Pla"}

	var fitxaHtml = "";
	fitxaHtml += "<b>"+objecte.nom+"</b>";
	if((objecte.via!=null) && (objecte.via!="null") && (objecte.via!="")){
		fitxaHtml += "<br />";
		if((objecte.via!=null) && (objecte.via!="null") && (objecte.via!="")) fitxaHtml += objecte.via;
		if((objecte.portal!=null) && (objecte.portal!="null") && (objecte.portal!="") ) fitxaHtml += ", "+objecte.portal;
	}

	//Imatge
	
	/*
	if((objecte.feature.attributes.imatge!="") && (objecte.feature.attributes.imatge!="null") && (objecte.feature.attributes.imatge!=null)){
		var srcGran = pathArrelUpload + objecte.feature.attributes.imatge;
		var srcPetita = srcGran.replace(/imatge.jpg/i, "petita.jpg")
		fitxaHtml += "<br /><br /><center><a href=\""+srcGran+"\" target=\"_blank\"><img src=\"" + srcPetita +"\" class=\"imatgePopup\" alt=\"Click per ampliar\" title=\"Click per ampliar\" /></a></center>";
	}
	*/	

	entitatIsacMarker.text = fitxaHtml;
	entitatIsacMarker.popup  = new AutoSizeFramedCloudMinSize("entitatIsacPopup", 
													punt,
													new OpenLayers.Size(100, 20),
													entitatIsacMarker.text,
													null,
													true,
													function(){
														this.hide();
													}
													);

	entitatIsacMarker.events.register('mouseover', '', function(evt) {
								if( (panCntrl.active) || (infoCntrl.active) ){
									if(entitatIsacMarker.popup.visible()==false) entitatIsacMarker.popup.show();
									OpenLayers.Event.stop(evt); 
								}
								
								});
	map.addPopup(entitatIsacMarker.popup);

}


//----------------------------------------------------------------------------------------------------
// debug zindex de les capes
var debugzindex = function(){
	for(var i=0; i < map.layers.length; i++){
		console.debug( map.layers[i].name +"=> "+ map.layers[i].visibility + " "+ map.layers[i].getZIndex() );
	}
}

//----------------------------------------------------------------------------------------------------
// Controls de mesura

function handleMeasurements(event) {
	var geometry = event.geometry;
	var units = event.units;
	var order = event.order;
	var measure = event.measure;
	var element = document.getElementById('barraMesures');
	var out = "";
	if(order == 1) {
		out += " | Distància: " + measure.toFixed(2) + " " + units;
	} else {
		out += " | Àrea " + measure.toFixed(2) + " " + units + "<sup>2</" + "sup>";
	}
	element.innerHTML = out;
}


function controlsDeMesura(){
	//Botons de mesures
	var sketchSymbolizers = {
		"Point": {
			pointRadius: 4,
			graphicName: "square",
			fillColor: "white",
			fillOpacity: 1,
			strokeWidth: 1,
			strokeOpacity: 1,
			strokeColor: "#333333"
		},
		"Line": {
			strokeWidth: 3,
			strokeOpacity: 1,
			strokeColor: "#333333"
		},
		"Polygon": {
			strokeWidth: 2,
			strokeOpacity: 1,
			strokeColor: "#666666",
			fillColor: "white",
			fillOpacity: 0.3
		}
	};
	var style = new OpenLayers.Style();
	style.addRules([
		new OpenLayers.Rule({symbolizer: sketchSymbolizers})
	]);

	var styleMap = new OpenLayers.StyleMap({"default": style});

	var measureControls = {
			line: new OpenLayers.Control.Measure(
				OpenLayers.Handler.Path, {
					persist: true,
					handlerOptions: {
						layerOptions: {styleMap: styleMap}
					}, title:"Mesurar distància"
				}
			),
			polygon: new OpenLayers.Control.Measure(
				OpenLayers.Handler.Polygon, {
					persist: true,
					handlerOptions: {
						layerOptions: {styleMap: styleMap}
					}, displayClass: "olControlMeasureArea", title:"Mesurar àrea"
				}
			)
	};

	var control;
	for(var key in measureControls) {
		control = measureControls[key];
		control.events.on({
			"measure": handleMeasurements,
			"measurepartial": handleMeasurements,
			"deactivate": function(){
				document.getElementById("barraMesures").innerHTML = "";
				//Restablim l'ordre de les capes, sino ens queda la capa de pois per sobre de tot i perdem el markers.
				map.resetLayersZIndex();
			}
		});
	}
	
	return measureControls;
}

//----------------------------------------------------------------------------------------------------
// Popup per avisos
function avisPopup(capa) {
	var contingut = $('#'+capa).html();
	ample=parseInt($('#'+capa).css('width'));
	alt=parseInt($('#'+capa).css('height'));

	//var centre = ( map.getCenter() ) ? map.getCenter() : map.getExtent().getCenterLonLat();
	var grandariaMapa = map.getSize()
	var pixelX = ( grandariaMapa.w / 2 ) - ( ample / 2);
	var pixelY = ( grandariaMapa.h / 2 ) - ( alt / 2)
	var posicio =  new OpenLayers.Pixel( pixelX, pixelY)
	
	var centre = map.getLonLatFromPixel(posicio);

	var popup = new OpenLayers.Popup("avisPopup", 
								centre,
								new OpenLayers.Size(ample,alt),
								contingut,
								true);
	popup.closeOnMove = true;

	map.addPopup(popup);
}
