



function config_init(visorUMAT) {
	var vu = visorUMAT;
	var map = vu.map;

//	  var bounds = left, bottom, right, top
	var bounds = new OpenLayers.Bounds(468106.0252, 4637178.7754, 505893.9748, 4658821.225);
//	var bounds = new OpenLayers.Bounds(305432.2901300584, 5152940.29940062, 323914.025239633, 5165261.456140337);

    // left, bottom, right, top
//	var bounds = new OpenLayers.Bounds(conf.bounds[0], conf.bounds[1], conf.bounds[2], conf.bounds[3]);

	var genericMapOptions = {
//        		projection: new OpenLayers.Projection('EPSG:0')
			projection: new OpenLayers.Projection('EPSG:23031')
//                  projection: new OpenLayers.Projection("EPSG:900913")
//        		projection: new OpenLayers.Projection("EPSG:102113")
//                projection: new OpenLayers.Projection("EPSG:3785")
//                projection: new OpenLayers.Projection("EPSG:4326")
//              projection: new OpenLayers.Projection("EPSG:54004")
				, units: 'm'
			, maxExtent: bounds
//			, resolutions: [128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5, 0.25, 0.125]

//                , maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34)
	}

	var mapOptions = OpenLayers.Util.extend({
		numZoomLevels: 11,
		maxResolution: 128,
		controls: []
		}, genericMapOptions);


	vu.map = new OpenLayers.Map('mapDiv', mapOptions );
	var map = vu.map;

	// HACK, OL layers limit
	map.Z_INDEX_BASE.Overlay = 400;

	var loadingpanel = new OpenLayers.Control.LoadingPanel();
	map.addControl(loadingpanel);

	var navigationControl = new OpenLayers.Control.Navigation(
			{mouseWheelOptions: {interval: 100 }});
	map.addControl(navigationControl);
	visorUMAT.navigationControl = navigationControl;

	map.addControl(new OpenLayers.Control.Pan());
	map.addControl(new OpenLayers.Control.PanZoomBarUMAT());
    map.zoomStart = function () {
		map.zoomToExtent(new OpenLayers.Bounds(482094,4643527,491502,4653007));
    };

//	map.addControl(new OpenLayers.Control.KeyboardDefaults());
//	map.addControl(new OpenLayers.Control.PanZoomBarUMAT({'displayClass': 'panZoomBarUMAT'}));
//	map.addControl(new OpenLayers.Control.PanZoomBar({'div':OpenLayers.Util.getElement('panzoombar')}));
//	map.addControl(new OpenLayers.Control.PanZoom());
//	map.addControl(new OpenLayers.Control.MouseToolbar());

	
	      
	      
	    	
	          
	
    

    

    
    var layer_centres_socials = new OpenLayers.Layer.WMS("centres_socials"
    	, 'http://terra.girona.cat/wms/serveis_socials/'
        , {layers: ['centres_socials']
           , format: "image/png"
		   , transparent: "TRUE"}
		  , {isBaseLayer: false
    	  , visibility: true
		  , buffer: 0
		  , code: "centres_socials"
		  
		  
		  
		  
		  
    	  
		}
    );

    map.addLayer(layer_centres_socials);
	
    map.setLayerIndex(layer_centres_socials, 1);
    

    layer_centres_socials.events.register("visibilitychanged", layer_centres_socials, vu.visibility_changed);
    
    

    

    

    

    

	          
	
    

    

    
    var layer_zones_sbas = new OpenLayers.Layer.WMS("zones_sbas"
    	, 'http://terra.girona.cat/wms/serveis_socials/'
        , {layers: ['zones_sbas']
           , format: "image/png"
		   , transparent: "TRUE"}
		  , {isBaseLayer: false
    	  , visibility: true
		  , buffer: 0
		  , code: "zones_sbas"
		  
		  , grupVisibilitat: 'serveis_socials'
		  
		  
		  , opacity: 0.8
    	  
		}
    );

    map.addLayer(layer_zones_sbas);
	
    map.setLayerIndex(layer_zones_sbas, 0);
    

    layer_zones_sbas.events.register("visibilitychanged", layer_zones_sbas, vu.visibility_changed);
    
    
    	if (vu.gv_serveis_socials == undefined) {
    		vu.gv_serveis_socials = new Array();
    	}
    	vu.gv_serveis_socials.push('zones_sbas');
    

    

    

    

    

	          
	
    

    

    
    var layer_sectors_serveis_socials = new OpenLayers.Layer.WMS("sectors_serveis_socials"
    	, 'http://terra.girona.cat/wms/serveis_socials/'
        , {layers: ['sectors_serveis_socials']
           , format: "image/png"
		   , transparent: "TRUE"}
		  , {isBaseLayer: false
    	  , visibility: false
		  , buffer: 0
		  , code: "sectors_serveis_socials"
		  
		  , grupVisibilitat: 'serveis_socials'
		  
		  
		  , opacity: 0.8
    	  
		}
    );

    map.addLayer(layer_sectors_serveis_socials);
	
    map.setLayerIndex(layer_sectors_serveis_socials, 0);
    

    layer_sectors_serveis_socials.events.register("visibilitychanged", layer_sectors_serveis_socials, vu.visibility_changed);
    
    
    	if (vu.gv_serveis_socials == undefined) {
    		vu.gv_serveis_socials = new Array();
    	}
    	vu.gv_serveis_socials.push('sectors_serveis_socials');
    

    

    

    

    

	          
	        
	      
	      
	      
	    	
	          
	
    

    

    
    var layer_carrers_numeros = new OpenLayers.Layer.WMS("carrers_numeros"
    	, 'http://terra.girona.cat/wmsc/carrers'
        , {layers: ['carrers_numeros']
           , format: "image/png"
		   , transparent: "TRUE"}
		  , {isBaseLayer: false
    	  , visibility: false
		  , buffer: 0
		  , code: "carrers_numeros"
		  
		  
		  
		  
		  
    	  
		}
    );

    map.addLayer(layer_carrers_numeros);
	

    layer_carrers_numeros.events.register("visibilitychanged", layer_carrers_numeros, vu.visibility_changed);
    
    

    

    

    

    

	          
	
    

    

    
    var layer_toponimia_basica = new OpenLayers.Layer.WMS("toponimia_basica"
    	, 'http://terra.girona.cat/wms/brt/'
        , {layers: ['toponimia_eixos_hidro','toponimia_administracio','toponimia_administracio','toponimia_educatiu','toponimia_esportiu','toponimia_religio','toponimia_sanitaris','toponimia_socials','toponimia_masos','toponimia_basica']
           , format: "image/png"
		   , transparent: "TRUE"}
		  , {isBaseLayer: false
    	  , visibility: true
		  , buffer: 0
		  , code: "toponimia_basica"
		  
		  
		  
		  , minScale: 40000
		  
    	  
		}
    );

    map.addLayer(layer_toponimia_basica);
	

    layer_toponimia_basica.events.register("visibilitychanged", layer_toponimia_basica, vu.visibility_changed);
    
    

    

    

    

    

	          
	
    

    

    
    var layer_brt_coloma = new OpenLayers.Layer.WMS("brt_coloma"
    	, 'http://base.terra.girona.cat/wmsc/base/'
        , {layers: ['brt']
           , format: "image/jpeg"
		   , transparent: "false"}
		  , {isBaseLayer: true
    	  , visibility: true
		  , buffer: 0
		  , code: "brt_coloma"
		  
		  , grupVisibilitat: 'base'
		  , numZoomLevels: 11
		  
		  
    	  , transitionEffect: "resize"
		}
    );

    map.addLayer(layer_brt_coloma);
	

    layer_brt_coloma.events.register("visibilitychanged", layer_brt_coloma, vu.visibility_changed);
    
    
    	if (vu.gv_base == undefined) {
    		vu.gv_base = new Array();
    	}
    	vu.gv_base.push('brt_coloma');
    

    

    

    
    vu.baseDefault = layer_brt_coloma;
    

    

	          
	
    

    

    
    var layer_orto2011 = new OpenLayers.Layer.WMS("orto2011"
    	, 'http://base.terra.girona.cat/wmsc/base'
        , {layers: ['orto2011']
           , format: "image/jpg"
		   , transparent: "false"}
		  , {isBaseLayer: true
    	  , visibility: false
		  , buffer: 0
		  , code: "orto2011"
		  
		  , grupVisibilitat: 'base'
		  , numZoomLevels: 11
		  
		  
    	  , transitionEffect: "resize"
		}
    );

    map.addLayer(layer_orto2011);
	

    layer_orto2011.events.register("visibilitychanged", layer_orto2011, vu.visibility_changed);
    
    
    	if (vu.gv_base == undefined) {
    		vu.gv_base = new Array();
    	}
    	vu.gv_base.push('orto2011');
    

    

    

    

    

	          
	
    

    

    
    var layer_orto2007 = new OpenLayers.Layer.WMS("orto2007"
    	, 'http://base.terra.girona.cat/wmsc/base'
        , {layers: ['orto2007']
           , format: "image/png"
		   , transparent: "false"}
		  , {isBaseLayer: true
    	  , visibility: false
		  , buffer: 0
		  , code: "orto2007"
		  
		  , grupVisibilitat: 'base'
		  , numZoomLevels: 11
		  
		  
    	  , transitionEffect: "resize"
		}
    );

    map.addLayer(layer_orto2007);
	

    layer_orto2007.events.register("visibilitychanged", layer_orto2007, vu.visibility_changed);
    
    
    	if (vu.gv_base == undefined) {
    		vu.gv_base = new Array();
    	}
    	vu.gv_base.push('orto2007');
    

    

    

    

    

	          
	
    

    

    

    
	// Overview _________________________________________________________________
	var ov_overview = new OpenLayers.Layer.WMS("overview",
			"http://base.terra.girona.cat/wmsc/base",
			{layers: ['Overview'], format: "image/png"}
			, {isBaseLayer: true, transparent: false, visibility: true, buffer: 0}
		);

	var ovMapOptions = OpenLayers.Util.extend({ maxResolution: 128}, genericMapOptions);
	var overviewOptions = {
		mapOptions: ovMapOptions
	//	, minRatio: 4
	//	, maxRatio: 24
		, size: new OpenLayers.Size(167, 167)
		, layers: [ov_overview]
		, autoPan: true
	}

	var overview = new OpenLayers.Control.OverviewMap(overviewOptions);
	vu.overview = overview;
	map.addControl(overview);
	

	          
	        
	      
	      
	

	if (vu.baseDefault != undefined) {
		vu.map.setBaseLayer(vu.baseDefault);
	}

	vu.map.events.register("move", vu.map, vu.zoom_changed);

//  map.addControl(new OpenLayers.Control.DragPan());
//  map.addControl(new OpenLayers.Control.KeyboardDefaults());

	

//	map.addControl(new OpenLayers.Control.MousePosition());
	map.addControl(new OpenLayers.Control.MousePositionUMAT({elemX: 'coord_x', elemY: 'coord_y', elemXY: 'coord_xy'}));
	//	map.addControl(new OpenLayers.Control.MouseToolbar());

	//	map.addControl(new OpenLayers.Control.OverviewMap(overviewOptions));
	//  map.addControl(new OpenLayers.Control.PanZoom());
	//	map.addControl(new OpenLayers.Control.PanZoomBar());
	map.addControl(new OpenLayers.Control.ScaleUMAT({input_id: 'scale'}));
	map.addControl(new OpenLayers.Control.ScaleLine({'div':OpenLayers.Util.getElement('scaleline'), bottomOutUnits: "", bottomInUnits: ""}));
	//  map.addControl(new OpenLayers.Control.NavToolbar());
	
	//  map.addControl(new OpenLayers.Control.ZoomBox());
	
	var controls = new Array();

	// Pan map ________________________________________________________________
	
	var panMap = new OpenLayers.Control.Navigation({title:'Moure', displayClass: 'olControlPanMap'});
	panMap.activate = function () {
		OpenLayers.Control.Navigation.prototype.activate.apply(this, arguments);
		this.map.div.style.cursor = 'hand';
	};
	panMap.wheelUp = function () {
	};
	panMap.wheelDown = function () {
	};
	panMap.deactivate = function () {
		OpenLayers.Control.Navigation.prototype.deactivate.apply(this, arguments);
		this.map.div.style.cursor = '';
	};
	controls.push(panMap);
	

	// Zoom in ________________________________________________________________
	

	// Zoom out _______________________________________________________________
	

	//var panMap = new OpenLayers.Control.DragPan({title:'Drag map', displayClass: 'olControlPanMap'});
//	var zoomBox = new OpenLayers.Control.ZoomBox({ title: "Zoom in box" });
	
	// Max extent ______________________________________________________________
	

	// Història de navegació ___________________________________________________
	
	var navHistory = new OpenLayers.Control.NavigationHistory();  
	navHistory.previous.title = "Vista anterior";
	navHistory.next.title = "Vista següent";             
	map.addControl(navHistory);
	controls.push(navHistory.previous);
	controls.push(navHistory.next);
	

	// Clear _________________________________________________________________
	
	var clear = new OpenLayers.Control.Button({
		title:'Netejar',
	    displayClass: "olControlClear",
	    trigger: function() {
			for (i = vu.map.layers.length - 1; i >= 0; i = i - 1) {
				layer = vu.map.layers[i];
				if (layer.name.substring(10,0) == "highlight_") {
					vu.map.removeLayer(layer);
				}
			}
	 	}
	});
	map.addControl(clear);
	controls.push(clear);
	

	// Identify ______________________________________________________________
	
	var identify = new OpenLayers.Control.Identify({elementDiv: 'IdentifyControlDiv',
		title: "Informació",
		activeLayerId: 'layerActiu'});
	map.addControl(identify);
	controls.push(identify);
	

	// Measure ______________________________________________________________
	

	// XY ______________________________________________________________
	
	var xytool = new OpenLayers.Control.XY({elementDiv: 'XYControlDiv',
		title: "Coordenades" });
	map.addControl(xytool);
	controls.push(xytool);

	// Guardar Imatge ________________________________________________________
	
	var eina_nom = 'SaveImage';
	var save_image = new OpenLayers.Control.OptionsButton({
		type: OpenLayers.Control.TYPE_TOOL_WITH_OPTIONS,
		title:'Guardar imatge',
	    displayClass: "olControl" + eina_nom,
	    optionsdivid: eina_nom });
	map.addControl(save_image);
	var opcions = new OpenLayers.Control.OptionsPanel({div: eina_nom + 'OptionsDiv'});
	map.addControl(opcions);
	controls.push(save_image);
	

	// Print _________________________________________________________________
	
	var eina_nom = 'Print';
	var print = new OpenLayers.Control.OptionsButton({
		type: OpenLayers.Control.TYPE_TOOL_WITH_OPTIONS,
		title:'Imprimir',
	    displayClass: "olControl" + eina_nom,
	    optionsdivid: eina_nom });
	map.addControl(print);
	var opcions = new OpenLayers.Control.OptionsPanel({div: eina_nom + 'OptionsDiv'});
	map.addControl(opcions);
	controls.push(print);
	
	
	// Pantalla completa _______________________________________________________
	
	var full_screen = new OpenLayers.Control.Button({
		title:'Maximitzar vista',
	    displayClass: "olControlFullScreen",
	    trigger: function() {
			this.active = ! this.active;
			if (this.active) {
//		    	$('#capsalera').hide();
		    	$('#header').hide();
		    	$('#ariadna').hide();
		    	$('#colL').hide();
		    	$('#peupagina').hide();
		    	this.default_activate();
		    } else {
//		    	$('#capsalera').show();
		    	$('#header').show();
		    	$('#ariadna').show();
		    	$('#colL').show();
		    	$('#peupagina').show();
		    	this.default_deactivate();
			}
			visorUMAT.window_resized();
	 	}
	});
	
	full_screen.default_activate = full_screen.activate;
	full_screen.activate = function(){};
	full_screen.default_deactivate = full_screen.deactivate;
	full_screen.deactivate = function(){};
	vu.full_screen = full_screen;
	map.addControl(full_screen);
	controls.push(full_screen);
	

	// Cercar _________________________________________________________________
	
	var eina_nom = 'Search';
	var search = new OpenLayers.Control.OptionsButton({
		type: OpenLayers.Control.TYPE_TOOL_WITH_OPTIONS,
		title:'Cercar',
	    displayClass: "olControl" + eina_nom,
	    optionsdivid: eina_nom,
	    on_activate: function() {

			if (this.fet == undefined) {
				var maxh = 0, maxv = 0;
				$('.cercadorOpcions').each(function() {
					maxv = Math.max(maxv, $('#' + this.id).height());
					maxh = Math.max(maxh, $('#' + this.id).width());
				});

				$('.cercadorOpcions').each(function() {
					$('#' + this.id).height(maxv);
					$('#' + this.id).width(maxh);
				});

				$('#tabs56').tabs({
				    show: function(event, ui) {
						var sel = $(ui.panel).attr('umat:focusonshow');
						$('#' + sel).focus();
						var sel = $(ui.panel).attr('umat:execonshow');
						eval(sel);
				        return true;
			    	}
				});

				$("#search_adresa_carrer_loading").addClass('carrers_loading');
				$("#search_adresa_numero").autocomplete(null, {
					button: "#search_adresa_numero_sel"
				}).result(function(event, data, formatted) {
					if (data != undefined) {
						$('#search_adresa_numero_input').val(data[1]);
					}
			    });

				this.fet = true;
			}
		}
	});

	map.addControl(search);
	var opcions = new OpenLayers.Control.OptionsPanel({div: eina_nom + 'OptionsDiv'});
	map.addControl(opcions);
	controls.push(search);
	

	// Controls Panel ________________________________________________________________
	panel = new OpenLayers.Control.Panel({
		div: document.getElementById("toolBox"),
		defaultControl: panMap
	});


	panel.activateControl = function(control) {
        if (control.type == OpenLayers.Control.TYPE_TOOL_WITH_OPTIONS) {
        	if (control.active) {
        		control.deactivate();
        		return;
        	}
        }
		OpenLayers.Control.Panel.prototype.activateControl.apply(this, [control]);
	}
	
	panel.onDoubleClick = function(ctrl, evt) {
        OpenLayers.Event.stop(evt ? evt : window.event);
        this.activateControl(ctrl);
    };

	
	panel.addControls(controls);
	map.addControl(panel);                

	var context = function(feature) {
	  return feature;
	}

	var symbolizer = OpenLayers.Util.applyDefaults(
	      {externalGraphic: "images/${thumbnail}.png", pointRadius: 20},
	      OpenLayers.Feature.Vector.style["default"]);
	var styleMap = new OpenLayers.StyleMap({"default": symbolizer, "select": {pointRadius: 30}});


	var styleMap = new OpenLayers.StyleMap(OpenLayers.Util.applyDefaults(
			{strokeColor: "gray", strokeWidth: 1, strokeOpacity: 1, fillOpacity: 0.3, fillColor:"#aaaaaa"},
	      OpenLayers.Feature.Vector.style["default"]));
	
	var myStyles = new OpenLayers.StyleMap({
		"default": new OpenLayers.Style({
			fillColor: "#ffcc66",
			strokeColor: "#ff9933",
			strokeWidth: 1,
			fillOpacity: 0.4
		}),
		"select": new OpenLayers.Style({
			fillColor: "#66ccff",
			strokeColor: "#3399ff"
		})
	});
	
	// Inici ____________________________________________________________________
	vars = getUrlVars();

	vu.add_initial_bounds(0, new OpenLayers.Bounds(482094,4643527,491502,4653007));

	if (is_true(vars['fullscreen']) || is_true(vars['fs'])) {
		vu.full_screen.trigger();
	}

	if (vars['zoomlevel'] || vars['zl']) {
		vu.initial_zoomlevel = vars['zoomlevel'] || vars['zl'];
	}

	// Box around selections
	if (vars['zoombox'] || vars['zb']) {
		vu.initial_zoombox = parseFloat(vars['zoombox'] || vars['zb']);
	}

	if (vars['seleccio_carrer']) {
		vu.initial_operations += 1;
		vu.seleccio('carrer', vars['seleccio_carrer'], vu.initial_zoombox);
	}

	if (vars['seleccio_facana']) {
		vu.initial_operations += 1;
		vu.seleccio('facana', vars['seleccio_facana'], vu.initial_zoombox);
	}

	if (vars['seleccio_parcela']) {
		vu.initial_operations += 1;
		vu.seleccio('parcella', vars['seleccio_parcela'], vu.initial_zoombox);
	}

	if (vars['seleccio_edifici']) {
		vu.initial_operations += 1;
		vu.seleccio('edifici', vars['seleccio_edifici'], vu.initial_zoombox);
	}

	// deprecated, html viewer
	if (vars['query']) {
		var query = vars['query'];
		var ref = query.replace(RegExp(" ", 'g'), '').replace(RegExp("'", 'g'), '').replace(RegExp("%20", 'g'), '').replace(RegExp("%27", 'g'), '');
		if (query.substr(0,6) == "REFPAR") {
			ref = ref.substr(6).replace(RegExp("=", 'g'), '');
			vu.initial_operations += 1;
			vu.seleccio('parcella', ref, vu.initial_zoombox);
		} else if (query.substr(0,9) == "CODIAJUNT") {
			ref = ref.substr(9).replace(RegExp("=", 'g'), '');
			vu.initial_operations += 1;
			vu.seleccio('carrer', ref, vu.initial_zoombox);
		} else if (query.substr(0,10) == "CODI_EDIFI") {
			ref = ref.substr(10).replace(RegExp("=", 'g'), '');
			vu.initial_operations += 1;
			vu.seleccio('edifici', ref, vu.initial_zoombox);
		}
	}

	if (vars['seleccio'] || vars['sel']) {
		vu.initial_operations += 1;
		vu.seleccio(vars['seleccio'] || vars['sel'],
				vars['valor'] || vars['val'], vu.initial_zoombox, vars['info']);
		needs_zoom = false;
	}

	if (vars['vista']) {
		vu.initial_operations += 1;
		vu.vista(vars['vista']);
	}

	//deprecated
	if (vars['coords']) {
		var coords = vars['coords'].replace(RegExp("%3A", 'g'), ':');
		var xy = coords.split('::');
		xytool.addXY(xy[0], xy[1]);
		zoom_bounds = xytool.layer.getDataExtent();
		vu.add_initial_bounds(400, zoom_bounds);
	}

	if (vars['points']) {
		var array = vars['points'].split(':');
		for (i in array) {
			var xy = array[i].split(',');
			xytool.addXY(xy[0], xy[1]);
		}
		zoom_bounds = xytool.layer.getDataExtent();
		vu.add_initial_bounds(400, zoom_bounds);
	}

	if (vars['box']) {
		var box = vars['box'].split(':');
		vu.add_initial_bounds(1000, new OpenLayers.Bounds(box[0],box[1],box[2],box[3]));
	}

	vu.initial_zoom();
	vu.window_resized();
}

function is_true(text) {
	if (text == undefined) { return false; }

	if ((text.toLowerCase() == 'true')
		|| (text.toLowerCase() == 't')
		|| (text == '1')) {
		return true;
	} else {
		return false;
	}
}

//Read a page's GET URL variables and return them as an associative array.
function getUrlVars() {
	var map = {};
	var href = window.location.href.replace(RegExp("%26", 'g'), '&');
	var parts = href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
		map[key.toLowerCase()] = value;
		});
	return map;
}

