OpenLayers.DOTS_PER_INCH = 96;

//debug="true";
var sliderControl;
var map, offset, myIcon;
var autocompleteCarrerSeleccionat = null;

//Controls
var caixaBotons, panCntrl, poisResaltaCtrl, infoCntrl;
//Layers
var markers, carrersSeleccionatsLayer, poisLayer, marKersLayer, orto5mLayer,  hibridLayer, massaTopograficaLayer, baseLayer;

var elmeuPopup, numeroPortalMarker, poiPopup, poiAutocomplete, entitatIsacMarker

var poiAutocomplete;
//Estils
var defaultStyle;

OpenLayers.ProxyHost= openLayersProxyHost;
OpenLayers._getScriptLocation = function () {
		return openLayersScriptLocation;
	}
OpenLayers.ImgPath = openLayersImgPath;


function init(){

	var mousePositionOptions = {
		numdigits: 1,
		numdecimals: 2,
		separator: ', ',
		displayClass: "olControlMyMousePositionOptions"
	}
	
	var scaleOptions = {
		maxWidth: 100,
		topOutUnits: "km",
		topInUnits: "m",
		eBottom: false,
		bottomOutUnits: 0,
		bottomInUnits: 0,
		displayClass: "olControlMyScaleLine"
	}


	var bounds = new OpenLayers.Bounds(478720.577277375,4644434.74586246,484770.161743852,4649385.37308615);


	var opcions = {
			projection: "EPSG:23031",
			units: "m",
			maxExtent: bounds, restrictedExtent: bounds,
			scales: [1/100, 1/500, 1/1000, 1/2500, 1/5000, 1/10000, 1/20000]
		 };

	var mapOptions = OpenLayers.Util.extend(
			{
			controls: [new OpenLayers.Control.PanZoom(),
						new OpenLayers.Control.MousePosition(mousePositionOptions), 
						new OpenLayers.Control.ScaleLine(scaleOptions)
						
						]
			},
			opcions
			);
	if(!isIE6) mapOptions.controls.push( new OpenLayers.Control.LoadingPanel() );
	map = new OpenLayers.Map('map', mapOptions);


	orto5mLayer = new OpenLayers.Layer.WMS(
			"Foto", "http://shagrat.icc.es/lizardtech/iserv/ows?",
			{	
				layers:  ['orto5m,'], 
				format:"image/jpeg", 
				exceptions:"application/vnd.ogc.se_xml"
			}, 
			{
				buffer:0, ratio: 1, displayOutsideMaxExtent: true,
				isBaseLayer: true,
				visibility: false, 
				tileSize: new OpenLayers.Size(512,512), 
				attribution: "La imatgeria és de l'Institut Cartogràfic de Catalunya", 
				title:"Mostra les imatges de satèl·lit"
			}
		);


	baseLayer = new OpenLayers.Layer.WMS(
			"Mapa", wmsMassaUrl,
			{	
				layers:  ['base'], 
				format:"image/png", 
				exceptions:"application/vnd.ogc.se_xml"
			}, 
			{
				buffer:0, ratio: 1, displayOutsideMaxExtent: true,
				isBaseLayer: true,
				visibility: true, 
				tileSize: new OpenLayers.Size(512,512)
			}
		);


	hibridLayer = new OpenLayers.Layer.WMS(
			"Híbrid", "http://shagrat.icc.es/lizardtech/iserv/ows?",
			{	
				layers:  ['orto5m,'], 
				format:"image/jpeg", 
				exceptions:"application/vnd.ogc.se_xml"
			}, 
			{
				buffer:0, ratio: 1, displayOutsideMaxExtent: true,
				isBaseLayer: true,
				visibility: false, 
				tileSize: new OpenLayers.Size(512,512), 
				attribution: "La imatgeria és de l'Institut Cartogràfic de Catalunya", 
				title:"Mostra les imatges de satèl·lit"
			}
		);


//	orto5mOverviewLayer = new OpenLayers.Layer.WMS(
//			"Imatge aèrea", "http://shagrat.icc.es/lizardtech/iserv/ows?",
//			{	
//				layers:  ['orto5m,'], 
//				format:"image/jpeg", 
//				exceptions:"application/vnd.ogc.se_xml"
//			}, 
//			{
//				buffer:0,
//				ratio: 1, 
//				isBaseLayer: true,
//				visibility: true,
//				singleTile: true
//			}
//		);

	massaTopograficaLayer = new OpenLayers.Layer.WMS( "Mapa",
			wmsMassaUrl,
			{layers: wmsMassaCapes, transparent: 'true', srs: 'EPSG:23031',
			format: "image/png"
			}, 
			{
				buffer:0, ratio: 1, displayOutsideMaxExtent: true,
				isBaseLayer: false,
				visibility: true, 
				tileSize: new OpenLayers.Size(512,512)
			, alpha: true
			} );


	massaTopograficaOverviewLayer = new OpenLayers.Layer.WMS(
			"Mapa vista petita", wmsMassaOverviewUrl,
			{
				layers: wmsMassaOverviewCapes,
				transparent: 'true',
				srs: 'EPSG:23031',
				format: "image/png"
			},
			{
				buffer:0,
				ratio: 1, 
				/*isBaseLayer: false,*/ isBaseLayer: true,
				visibility: true,
				singleTile: true
				, alpha: true
				} 
		);
	
	generaLlegendaMassa(wmsMassaCapesLlegenda);

	carrersSeleccionatsLayer = new OpenLayers.Layer.Vector("Carrer seleccionat", {
		styleMap: new OpenLayers.StyleMap(
		{
		'default':{
			strokeColor: "#fff029",
			strokeOpacity: 0.6,
			//strokeDashstyle	{String} Stroke dash style.  Default is "solid".  [dot | dash | dashdot | longdash | longdashdot | solid]
			//strokeDashstyle: "dash",
			strokeWidth: 5
			}
		})
	});


	marKersLayer = new OpenLayers.Layer.Markers( "Markers");

	var styleMap = new OpenLayers.StyleMap({
		fillOpacity: 1,
		pointRadius: 10,
		cursor: 'pointer'
	});

	var lookup = {};
	var cond = [];

	for( var i=0; i < llistatCapesGuia.length; i++){
		lookup[llistatCapesGuia[i].id] = {externalGraphic: llistatCapesGuia[i].imatge, graphicWidth:16, graphicHeight:16};
		if(llistatCapesGuia[i].visible) cond.push( llistatCapesGuia[i].id );
	}

	styleMap.addUniqueValueRules("default", "categoria_id", lookup);
	

	var parametresPoisLayer = "";
	if (cond.length>0)
	{
		parametresPoisLayer = escape(cond.join(","));
	}

	poisLayer= new OpenLayers.Layer.GML("Pois", poisUrl+"?categoria="+parametresPoisLayer, {
					styleMap: styleMap,
					format: OpenLayers.Format.GeoJSON,
					formatOptions: {
						extractStyles: true,
						extractAttributes: true
					}
					
	});


	//Control per interceptar el hovers del layer de pois, i poder-ne fer els popups
	poisResaltaCtrl = new OpenLayers.Control.SelectFeature(poisLayer, {
		hover: true,
		highlightOnly: false,
		//renderIntent: "temporary",
		eventListeners: {
		featurehighlighted: function(arg){
			if( (panCntrl.active) || (infoCntrl.active) ){
				creaPoiPopup(arg);
			}
		},
		featureunhighlighted: function(){
		/*
		window.setTimeout(
			function(){ 
				eliminaPoiPopup();
			}, 5000);*/
		}

		}
	});
	map.addControl(poisResaltaCtrl);
	poisResaltaCtrl.activate();


	map.addLayers([baseLayer, hibridLayer, orto5mLayer, massaTopograficaLayer]);
	carregaLayersTransports("L3,L4,LC,paradesbus,taxi");
	generaLlegendatTransports("L3,L4,LC,paradesbus,taxi");
	map.addLayers([carrersSeleccionatsLayer, poisLayer, marKersLayer ]);

	//Llegenda de la capa de pois
	lSGuia = new LayerSwitcherGuia({guiaArray:llistatCapesGuia, divDesti:OpenLayers.Util.getElement("llegenda"), layer: poisLayer})
	map.addControl(lSGuia);

	lSGuia.events.register("canvidefiltre", lSGuia, function(){
		poiAutocomplete[0].autocompleter.setExtraParams({categoria: lSGuia.capesGuiaFiltreIds()});
		poiAutocomplete[0].autocompleter.flushCache();
		poisLayer.setUrl(poisUrl+"?categoria=" + escape( lSGuia.capesGuiaFiltreIds() ) );
		eliminaPoiPopup();
	});


	//Control per tal que surti l'avís de la capa del cartogràfic
	map.addControl(new OpenLayers.Control.Attribution({displayClass: "olControlMyAttribution"}));
	
	//Botó de desplaçament
	panCntrl = new OpenLayers.Control.Navigation({title:'Desplaçament'});
	//OpenLayers.Control.Navigation
	//Botó de zoom
	var botoZoom = new OpenLayers.Control.ZoomBox({alwaysZoom:true, title:"Zoom a la sel·leció"});
	
	//Control de l'històric de les aproximacions
	var historicAproximacionsCntrl = new OpenLayers.Control.NavigationHistory({displayClass:"olControlMyNavigationHistory"});
	var historicAproximacionsSeguentCntrl = historicAproximacionsCntrl.next;
	historicAproximacionsSeguentCntrl.title = "Zoom següent";

	var historicAproximacionsPreviCntrl = historicAproximacionsCntrl.previous;
	historicAproximacionsPreviCntrl.title = "Zoom prèvi";

	map.addControl(historicAproximacionsCntrl); 

	//Botó informació
	infoCntrl = new OpenLayers.Control.Button(
	{
		title:"Obtenir informació", 
		displayClass: "olControlMyInfoButton",
		type: OpenLayers.Control.TYPE_TOOL
	});

	var measureControls = controlsDeMesura();


	var botoImprimir = new OpenLayers.Control.Button(
		{
			title:"Imprimir", 
			displayClass: "olControlImprimir",
			trigger: function(){
				imprimirMapa();
			}
		}
	);


	caixaBotons = new OpenLayers.Control.Panel( {defaultControl: panCntrl, div: document.getElementById("barraEines")} );
	caixaBotons.addControls([panCntrl, botoZoom, historicAproximacionsPreviCntrl, historicAproximacionsSeguentCntrl, infoCntrl, measureControls['line'], measureControls['polygon'],botoImprimir]);
	map.addControl(caixaBotons);

	//Mapa petit
	var opcionsOverview = {
			projection: "EPSG:23031",
			units: "m",
			minScale: 100000,
			maxExtent: bounds, restrictedExtent: bounds,
			numZoomLevels: 1
	};

	var controlOptions = {
			layers: [/*orto5mOverviewLayer, */ massaTopograficaOverviewLayer],
			autoPan: false,
			mapOptions: opcionsOverview
	};

	var overview1 = new OpenLayers.Control.OverviewMap(controlOptions);
	map.addControl(overview1);
	overview1.maximizeControl();

	//Desplegables escala
	map.addControl( new OpenLayers.Control.DesplegableEscala({divDesti: document.getElementById("barraEscala")}) );
	
	//Botons per gestionar els baseLayers
	map.addControl( new OpenLayers.Control.MapTypePanel() );

	map.events.register("changebaselayer", this, function(){
	
		if( map.baseLayer == orto5mLayer ){
			if( massaTopograficaLayer.getVisibility() ) massaTopograficaLayer.setVisibility(false);
		}else{
			if( !massaTopograficaLayer.getVisibility() ) {
			massaTopograficaLayer.setVisibility(true);
			}
		}

		if( (!isIE6) && (map.baseLayer == hibridLayer) ){
			massaTopograficaLayer.setOpacity( $('#slidercontainer1').data('opacitat') );
			$('#barraSlide').show();
		}else{
			if(massaTopograficaLayer.opacity < 1) massaTopograficaLayer.setOpacity(1);
			$('#barraSlide').hide();
		}

		
	});
	

	map.zoomToMaxExtent();
}

