[OpenLayers-Commits] r5096 - in sandbox/ominiverdi/ows/OWSManager: examples lib/OpenLayers/Control theme theme/OWSManager

commits at openlayers.org commits at openlayers.org
Thu Nov 1 16:51:41 EDT 2007


Author: ominiverdi
Date: 2007-11-01 16:51:39 -0400 (Thu, 01 Nov 2007)
New Revision: 5096

Added:
   sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html
   sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html
   sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSPermalink.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSQuery.js
   sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSToolbar.js
   sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/
   sandbox/ominiverdi/ows/OWSManager/theme/OWSManager/owsmanager.css
Log:
OWSManager: SLD module added

Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager.html	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,98 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <style type="text/css">
+        #map {
+            width: 800px;
+            height: 475px;
+            border: 1px solid black;
+        }
+		#queryOut {
+			width:800px;
+          	height: 200px;
+			border: 1px solid black;
+			position:absolute;
+			left:10px;
+			top:500px;
+			overflow:auto;
+		}
+    </style>
+	
+    <script src="../lib/OpenLayers.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSManager.js"></script>
+	
+	<script src="../lib/OpenLayers/Control/WMSToolbar.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSExporter.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSPermalink.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSQuery.js"></script>
+	<script src="../lib/OpenLayers/Control/SLDManager.js"></script>
+	<link href="../theme/OWSManager/owsmanager.css" rel="stylesheet" type="text/css" media="all" />
+
+	<!--<script src="../lib/sarissa/sarissa.js"></script>-->
+    <script type="text/javascript">
+        <!--
+        
+        var map;
+
+        function init(){
+			OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";//ominiverdi.org
+			//OpenLayers.ProxyHost="proxy.cgi?url=";//dev.openlayers.org
+           // OpenLayers.ProxyHost="http://www.openlayers.org/proxy/?url=";//www.openlayers.org
+           
+		    map = new OpenLayers.Map( $('map') );
+           
+			var aWMSServers=new Array(
+				['OpenLayers WMS','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],//content type: application/vnd.ogc.wms_xml
+				['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'],
+				['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list
+				['World - Demis World Map','http://www2.demis.nl/mapserver/Request.asp?'],
+				['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'],
+				['FAO','http://193.43.36.137/ows/14110'],
+				['NATO','http://geos2.nurc.nato.int/geoserver/wms'],
+				['Kappa','http://149.139.8.29/geoserver/wms?'],
+				['CubeWerx','http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?config=main&'],
+				['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'],
+				['AU - Aims Australia','http://adc.aims.gov.au:9555/atlas/SstWmsServer?'],
+				['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+				['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'],
+				['SP - Catalunya - ICC Web Map Service','http://shagrat.icc.es/lizardtech/iserv/ows?'],
+				['SP - Junta Andalucia','http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?'],
+				['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'],
+				['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'],
+				['SP - Comunidad Valenciana - Conselleria de Territori i Habitatge, GVA - Servici WMS: wms_senderos','http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_senderos?'],
+				//['SP - Comunidad Valenciana ','http://icvmapas.cetesi.gva.es/wms?'],//only spanish projection
+				//['SP - Castilla La Mancha','http://161.67.10.126/cgi-bin/mapserv?map=/usr/local/webmapping/ideclm/mapserver/ideclm.map'],//only spanish projection
+				//['SP - Cantabria','http://www.idee.es/wms/WMS-Cantabria/WMS-Cantabria?'],
+				['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco']
+				//['SP - La Rioja','http://wms.larioja.org/request.asp']
+				
+				
+				
+				//['Localhost','http://localhost/cgi-bin/mapserv?map=mapfile/worldata.map']
+				//['OpenPlans WMS','http://sigma.openplans.org:3128/geoserver/wms']
+				
+			);
+
+            map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+			
+            //map.addControl(new OpenLayers.Control.NavToolbar());
+			var queryTarget = $('queryOut');
+			WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+			map.addControl(WMSToolbar);
+			map.addControl(new OpenLayers.Control.WMSPermalink());
+			map.addControl(new OpenLayers.Control.WMSExporter());
+			
+			//map.addControl(new OpenLayers.Control.OverviewMap());
+			
+			
+        }
+        
+        // -->
+    </script>
+  </head>
+  <body onload="init()">
+  	
+    <div id="map"></div>
+	<div id="queryOut"></div>
+	
+  </body>
+</html>

Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_abs.html	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,57 @@
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<style type="text/css">
+	#map {
+		 width: 800px;
+		 height: 475px;
+		 border: 1px solid black;
+	}
+	#queryOut {
+			width:800px;
+          	height: 200px;
+			border: 1px solid black;
+			position:absolute;
+			left:10px;
+			top:500px;
+			overflow:auto;
+		}
+</style>
+<script src="http://www.openlayers.org/api/OpenLayers.js"></script>
+<script src="http://www.ominiverdi.org/openlayers/nightly/openlayers/build/WMSManager.js"></script>
+<script type="text/javascript">
+<!-- 
+	 var map;
+	 function init(){
+	 	
+		OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";
+		
+		map = new OpenLayers.Map( $('map') ); 
+
+		var aWMSServers=new Array(
+				['OpenLayers WMS (UMN mapserver)','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],
+				['NASA Blue Marble (???)','http://wms.jpl.nasa.gov/wms.cgi?'],
+				['Demis World Map (UMN Mapserver)','http://www2.demis.nl/mapserver/Request.asp?'],
+				['FAO (UMN Mapserver)','http://193.43.36.137/ows/14110'],
+				['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+				['SP - Comunidad Valenciana - Conselleria de Territori i Habitatge, GVA - Servici WMS: wms_senderos','http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_senderos?']
+			);
+		 map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+			
+			//map.addControl(new OpenLayers.Control.NavToolbar());
+			var queryTarget = $('queryOut');
+			WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+			map.addControl(WMSToolbar);
+			map.addControl(new OpenLayers.Control.WMSPermalink());
+			map.addControl(new OpenLayers.Control.WMSExporter());
+	} 
+ // --> 
+</script> 
+<link rel="stylesheet" type="text/css" href="http://www.ominiverdi.org/openlayers/nightly/openlayers/theme/default/style.css"></style>
+</head>
+<body onload="init()"> 
+	  <div id="map"></div>
+	<div id="queryOut"></div>
+</body>
+</html>
+

Added: sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/examples/wms_manager_stile.html	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,116 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <style type="text/css">
+        #map {
+            width: 800px;
+            height: 375px;
+            border: 1px solid black;
+        }
+		#queryOut {
+			width:800px;
+          	height: 200px;
+			border: 1px solid black;
+			position:absolute;
+			left:10px;
+			top:400px;
+			overflow:auto;
+		}
+    </style>
+	
+    <script src="../lib/OpenLayers.js"></script>
+	
+	<script src="../lib/OpenLayers/Control/WMSManager.js"></script>
+	
+	<script src="../lib/OpenLayers/Control/WMSToolbar.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSExporter.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSPermalink.js"></script>
+	<script src="../lib/OpenLayers/Control/WMSQuery.js"></script>
+	<script src="../lib/OpenLayers/Control/WMCexporter.js"></script>
+	<link href="../theme/OWSManager/owsmanager.css" rel="stylesheet" type="text/css" media="all" />
+
+
+	<script src="../lib/OpenLayers/Control/SLDManager.js"></script>
+    <script type="text/javascript">
+        <!--
+        
+        var map;
+		var WMSToolbar;
+		var SLDManager;
+
+        function init(){
+			OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";//ominiverdi.org
+			//OpenLayers.ProxyHost="proxy.cgi?url=";//dev.openlayers.org
+           // OpenLayers.ProxyHost="http://www.openlayers.org/proxy/?url=";//www.openlayers.org
+           
+		    map = new OpenLayers.Map( $('map') );
+           
+			var aWMSServers=new Array(
+				['kappu','http://192.168.1.8:8080/geoserver/wms?'],
+				['FAO - GAUL','http://149.139.8.29/cgi-bin/wms.sh'],
+				["OpenLayers WMS-C",  "http://labs.metacarta.com/wms-c/Basic.py?"],
+				['OpenLayers WMS','http://labs.metacarta.com/cgi-bin/mapserv?map=/www/labs/map/vmap0.map'],//content type: application/vnd.ogc.wms_xml
+				['World - NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?'],
+				['World - esa','http://mapserv2.esrin.esa.it/cubestor/cubeserv/cubeserv.cgi?'],// no layers shown in list
+				['World - Demis World Map','http://www2.demis.nl/mapserver/Request.asp?'],
+				['Tilecache at OpenPlans','http://sigma.openplans.org/tilecache-1.3/tilecache.py?'],
+				['FAO','http://193.43.36.137/ows/14110'],
+				['NATO','http://geos2.nurc.nato.int/geoserver/wms'],
+				['Kappa','http://149.139.8.29/geoserver/wms?'],
+				//[ 'Mumbay - freemap','http://mumbai.freemap.in/tiles?'],
+				['CubeWerx','http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?config=main&'],
+				['QGIS WMS server at ethz.ch','http://karlinapp.ethz.ch/fcgi-bin/qgis_wms_dir/europe/qgis_wms_serv.fcgi?'],
+				['AU - Aims Australia','http://adc.aims.gov.au:9555/atlas/SstWmsServer?'],
+				['BR - Unidades de Conservacao do Brasil (dados preliminares)','http://mapas.mma.gov.br/cgi-bin/mapserv?map=/opt/www/html/webservices/ucs.map&'],
+				['SP - IGN','http://www.idee.es/wms/IDEE-Base/IDEE-Base'],
+				['SP - Catalunya - ICC Web Map Service','http://shagrat.icc.es/lizardtech/iserv/ows?'],
+				['SP - Junta Andalucia','http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?'],
+				['SP - Aragon', 'http://sitar.aragon.es/AragonWMS?'],
+				['SP - Asturias','http://www.cartografia.asturias.es/wmsortofotos/request.asp?'],
+				['SP - Comunidad Valenciana - Conselleria de Territori i Habitatge, GVA - Servici WMS: wms_senderos','http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_senderos?'],
+				//['SP - Comunidad Valenciana ','http://icvmapas.cetesi.gva.es/wms?'],//only spanish projection
+				//['SP - Castilla La Mancha','http://161.67.10.126/cgi-bin/mapserv?map=/usr/local/webmapping/ideclm/mapserver/ideclm.map'],//only spanish projection
+				//['SP - Cantabria','http://www.idee.es/wms/WMS-Cantabria/WMS-Cantabria?'],
+				['SP - Euskadi (Pais Vasco)','http://www1.euskadi.net/servlet/com.esri.wms.Esrimap?ServiceName=GVasco']
+				//['SP - La Rioja','http://wms.larioja.org/request.asp']
+				
+				
+				
+				//['Localhost','http://localhost/cgi-bin/mapserv?map=mapfile/worldata.map']
+				//['OpenPlans WMS','http://sigma.openplans.org:3128/geoserver/wms']
+				
+			);
+
+            map.addControl( new OpenLayers.Control.WMSManager(aWMSServers ) );
+			
+			
+			
+			
+			
+			
+            //map.addControl(new OpenLayers.Control.NavToolbar());
+			var queryTarget = $('queryOut');
+			WMSToolbar = new OpenLayers.Control.WMSToolbar({queryTarget: queryTarget});
+			map.addControl(WMSToolbar);
+			//alert(WMSToolbar.div.id);
+			//WMSToolbar.style.display = "none";
+			map.addControl(new OpenLayers.Control.WMSPermalink());
+			map.addControl(new OpenLayers.Control.WMSExporter());
+			//map.addControl(new OpenLayers.Control.WMCExporter());
+			
+			map.addControl( new OpenLayers.Control.SLDManager($('queryOut')) );
+			
+			//map.addControl(new OpenLayers.Control.OverviewMap());
+			
+			
+        }
+		
+        
+        // -->
+    </script>
+  </head>
+  <body onload="init()">
+	<div id="map"></div>
+	<div id="queryOut"></div>
+	
+  </body>
+</html>

Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/SLDManager.js	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,376 @@
+/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/release-license.txt 
+ * for the full text of the license. */
+
+/** 
+ * @class
+ *  
+ * @author Lorenzo Becchi (ominiverdi.org)
+ * @projectDescription ticket #687
+ * 
+ * @requires OpenLayers/Control.js
+ * @requires OpenLayers/Format/JSON.js
+ */
+OpenLayers.Control.SLDManager = OpenLayers.Class.create();
+OpenLayers.Control.SLDManager.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type String */
+    div: null,
+    
+
+  // DOM Elements
+  
+
+	
+ 
+    /**
+    * @constructor
+    */
+    initialize: function(targetObj,options) {
+        //OpenLayers.Control.prototype.initialize.apply(this, arguments);
+		
+        
+		OpenLayers.Format.JSON.prototype.initialize.apply(this, [options]);
+		this.div = targetObj;
+		
+    },
+
+    /**
+     *  
+     */    
+    destroy: function() {
+        
+        OpenLayers.Event.stopObservingElement(this.div);
+
+        
+        OpenLayers.Control.prototype.destroy.apply(this, arguments);
+    },
+
+    /**
+    * @returns A reference to the DIV DOMElement containing the switcher tabs
+    * @type DOMElement
+    */  
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this);
+		
+		
+		
+        // create layout divs
+       // this.loadContents();
+
+        // set mode to minimize
+        //this.minimizeControl();
+        //this.showControls();
+		
+        // populate div with current info
+        //this.redraw();    
+		
+		//this.switchPanel();
+		//this.maximizeControl();
+        return this.div;
+    },
+
+    /** 
+     */
+    updateTarget: function(div) {
+        this.div = div;
+		return this.div;
+    },
+
+
+    /** Goes through and takes the current state of the Map and rebuilds the
+     *   control to display that state. Groups base layers into a radio-button
+     *   group and lists each data layer with a checkbox.
+     * 
+     * @returns A reference to the DIV DOMElement containing the control
+     * @type DOMElement
+     */  
+    redraw: function(sldButton) {
+		/*
+		 * sldButton.map = this.map;
+			sldButton.layer = selectedLayer;
+			sldButton.SLDManager = SLDManager;
+		 */
+        //clear out previous layers 
+        sldButton.SLDManager.div.innerHTML = "";
+        
+		var SLDinterface = document.createElement('div');
+		SLDinterface.className = 'SLDinterface';
+		sldButton.SLDManager.div.appendChild(SLDinterface);
+		
+		var SLDmessanger = document.createElement('div');
+		SLDmessanger.className = 'SLDmessanger';
+		SLDmessanger.innerHTML = 'Click on button to retrieve styles';
+        sldButton.SLDManager.div.appendChild(SLDmessanger);
+		
+		var SLDblackboard = document.createElement('div');
+		SLDblackboard.className = 'SLDblackboard';
+		SLDblackboard.innerHTML = 'SLDblackboard';
+        sldButton.SLDManager.div.appendChild(SLDblackboard);
+		
+		var StyleSeeker = document.createElement('button');
+		StyleSeeker.className = 'StyleSeeker';
+		StyleSeeker.innerHTML = 'get Styles';
+		StyleSeeker.SLDManager = sldButton.SLDManager;
+		StyleSeeker.onclick = function(){this.SLDManager.getSldservice()};
+        SLDblackboard.appendChild(StyleSeeker);
+		
+		sldButton.SLDManager.SLDmessanger = SLDmessanger;
+		sldButton.SLDManager.SLDblackboard = SLDblackboard;
+		sldButton.SLDManager.map = sldButton.map;
+		sldButton.SLDManager.layer = sldButton.layer;
+		
+		
+        return sldButton.SLDManager.div;
+    },
+
+
+
+
+    
+	
+	 /** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    getSldservice: function(evt) {
+         this.SLDblackboard.innerHTML ='';
+		 /*
+		 var select = this;
+		 if((select)) var url = select[select.selectedIndex].value;
+		 else url ="";
+		 
+		 if(url.length>0) {
+			 this.baseURL = url;
+		 } else {
+			 alert('no server selected. please select one.');
+			 return;
+		 } 
+	    if (this.baseURL.indexOf('?') == -1)
+	    {
+	        this.baseURL = this.baseURL + '?';
+	    }
+	    else
+	    {
+	        if (this.baseURL.charAt( this.baseURL.length - 1 ) == '&')
+	            this.baseURL = this.baseURL.slice( 0, -1 );
+	    }
+		
+	    this.baseURL = this.baseURL+ "&service=WMS";
+	    this.baseURL = this.baseURL +  "&version=1.1.1";
+	    this.baseURL = this.baseURL + "&request=GetCapabilities";
+	    */
+		
+		this.SLDmessanger.innerHTML = "Loading Layers list... please wait...";
+        //$('SLDManagerOutput').innerHTML = this.baseURL;
+		//alert(this.baseURL);
+		this.baseURL = 'http://192.168.1.8:8080/geoserver/sldservice/'+ this.layer;
+        OpenLayers.loadURL(this.baseURL, null, this, this.parseSldservice);
+    },
+	
+		 /** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    parseSldservice:  function(ajaxRequest) {
+		var text = ajaxRequest.responseText;
+		
+		var data = OpenLayers.Format.JSON.prototype.read(text);
+		console.log(data);
+		
+		//create styles select
+		//Make server select
+		this.styleSelect = document.createElement('select');
+		this.styleSelect.className = 'styleSelect';
+		this.styleSelect.map = this.map;
+		this.styleSelect.layer = this.layer;
+		//this.styleSelect.style.width = "220px";
+		this.styleSelect.onchange = function(){
+						var select = this;
+						var styleName = select[select.selectedIndex].value;
+						console.log('stile name:' + styleName);
+						var olLayerName = this.layer; 
+						console.log('olLayerName: '+olLayerName);
+						var olLayer;
+						for( u=0;u < this.map.layers.length;u++){
+							var layer = this.map.layers[u];
+							console.log('layer: '+layer.name);
+							aLayerName = layer.name.split(',');
+							var matched = false;
+							var layerPos;
+							var  wmsStyleList= [];
+							var styles = layer.params['STYLES'];
+							var aStyles = styles.split(',');
+							if(aStyles.length == aLayerName.length){
+								for(var zz = 0;zz<aLayerName.length;zz++){
+									if(this.layer==aLayerName[zz]){
+										layerPos = zz;
+										matched = true;
+										aStyles[zz] = styleName;
+									}	
+								}
+							} else {
+								aStyles = [];
+								for(var zz = 0;zz<aLayerName.length;zz++){
+									if(this.layer==aLayerName[zz]){
+										layerPos = zz;
+										matched = true;
+										aStyles.push(styleName);
+									}	else {
+										aStyles.push('');
+									}
+								}
+							}
+							
+							
+							if(matched) {
+								olLayer = layer;
+								console.log(olLayer);
+								olLayer.params['STYLES'] = aStyles.join(',');
+								olLayer.redraw();
+							} else {
+								console.log('niente');
+							}
+						}
+						
+					};
+		var j = 0;
+		var opt = new Option( 'select a style', '', true, true );
+		this.styleSelect[j++] = opt;
+		
+		//form.appendChild(this.styleSelect);
+		for(i=0;i<data.length;i++) {
+			this.styleSelect[j++] = new Option(data[i]['name'],data[i]['name'],false,false);
+		}
+		console.log(this);
+		this.SLDblackboard.innerHTML = '';
+		this.SLDmessanger.innerHTML = '';
+		
+		this.SLDblackboard.appendChild(this.styleSelect);
+		
+        return data;
+    },
+	
+	 /**
+     * APIMethod: read
+     * Deserialize an OpenLayers JSON string.
+     *
+     * Parameters:
+     * str - {String} An OLON string
+     * filter - {Function} A function which will be called for every key and
+     *     value at every level of the final result. Each value will be
+     *     replaced by the result of the filter function. This can be used to
+     *     reform generic objects into instances of classes, or to transform
+     *     date strings into Date objects.
+     *     
+     * Returns:
+     * {Object} An object, array, string, or number.
+     */
+    readJSON: function(str, filter) {
+        var data = OpenLayers.Format.JSON.prototype.read(str, filter);
+        var instance = OpenLayers.Class.deserialize(data);
+        return instance;
+    },
+	
+	
+	
+
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Control.SLDManager"
+});
+
+
+ /** Sarissa derived getText
+     *  
+     * @private
+     *
+     * @param {Node} XML node
+     * @param {int} deep recursion  
+     */
+	OpenLayers.Ajax.getText = function(oNode, deep){
+	    var s = "";
+	    var nodes = oNode.childNodes;
+	    for(var i=0; i < nodes.length; i++){
+	        var node = nodes[i];
+	        var nodeType = node.nodeType;
+	        if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){
+	            s += node.data;
+	        } else if(deep == true
+	                    && (nodeType == Node.ELEMENT_NODE
+	                        || nodeType == Node.DOCUMENT_NODE
+	                        || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
+	            s += OpenLayers.Ajax.getText.getText(node, true);
+	        };
+	    };
+	    return s;
+	};
+	
+	/** Sarissa derived getParseErrorText
+     *  
+     * @private
+     *
+     * @param {Document} oDoc The target DOM document
+     * @returns The parsing error description of the target Document in
+     *          human readable form (preformated text)
+     */
+	OpenLayers.Ajax.PARSED_OK = "Document contains no parsing errors";
+	OpenLayers.Ajax.PARSED_EMPTY = "Document is empty";
+	OpenLayers.Ajax.PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
+	
+	OpenLayers.Ajax.getParseErrorText = function(oDoc){
+		//this is only the IE version from Sarissa	
+	   var parseErrorText = OpenLayers.Ajax.PARSED_OK;
+        if(oDoc && oDoc.parseError && oDoc.parseError.errorCode && oDoc.parseError.errorCode != 0){
+            parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason + 
+                "\nLocation: " + oDoc.parseError.url + 
+                "\nLine Number " + oDoc.parseError.line + ", Column " + 
+                oDoc.parseError.linepos + 
+                ":\n" + oDoc.parseError.srcText +
+                "\n";
+            for(var i = 0;  i < oDoc.parseError.linepos;i++){
+                parseErrorText += "-";
+            };
+            parseErrorText +=  "^\n";
+        }
+        else if(oDoc.documentElement == null){
+            parseErrorText = OpenLayers.Ajax.PARSED_EMPTY;
+        };
+        return parseErrorText;
+	};
+	
+	/** 
+	 * Sarissa derived Escape
+	 * Escape the given string chacters that correspond to the five predefined XML entities
+	 * @param sXml the string to escape
+	 */
+	OpenLayers.Ajax.escape = function(sXml){
+	    return sXml.replace(/&/g, "&amp;")
+	        .replace(/</g, "&lt;")
+	        .replace(/>/g, "&gt;")
+	        .replace(/"/g, "&quot;")
+	        .replace(/'/g, "&apos;");
+	};
+	/** 
+	 * Sarissa derived Unescape
+	 * Unescape the given string. This turns the occurences of the predefined XML 
+	 * entities to become the characters they represent correspond to the five predefined XML entities
+	 * @param sXml the string to unescape
+	 */
+	OpenLayers.Ajax.unescape = function(sXml){
+	    return sXml.replace(/&apos;/g,"'")
+	        .replace(/&quot;/g,"\"")
+	        .replace(/&gt;/g,">")
+	        .replace(/&lt;/g,"<")
+	        .replace(/&amp;/g,"&");
+	};
+	
+	/** 
+	 * Sarissa node values definition
+	 * 
+	 */
+	if(!window.Node || !Node.ELEMENT_NODE){
+	    Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5,  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
+	};

Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMCExporter.js	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,247 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ * 
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMCExporter = OpenLayers.Class.create();
+OpenLayers.Control.WMCExporter.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type DOMElement */
+    element: null,
+    
+    /** @type String */
+    base: '',
+
+    /**
+     * @constructor
+     * 
+     * @param {DOMElement} element
+     * @param {String} base
+     */
+    initialize: function(element, base) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+        this.element = OpenLayers.Util.getElement(element);        
+        if (base) {
+            this.base = base;
+        }
+    },
+
+    /**
+     * 
+     */
+    destroy: function()  {
+        if (this.element.parentNode == this.div) {
+            this.div.removeChild(this.element);
+        }
+        this.element = null;
+
+        this.map.events.unregister('moveend', this, this.updateLink);
+
+        OpenLayers.Control.prototype.destroy.apply(this, arguments); 
+    },
+
+    /** Set the map property for the control. 
+     * 
+     * @param {OpenLayers.Map} map
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+        //make sure we have an arg parser attached
+        for(var i=0; i< this.map.controls.length; i++) {
+            var control = this.map.controls[i];
+            if (control.CLASS_NAME == "OpenLayers.Control.ArgParser") {
+                break;
+            }
+        }
+        if (i == this.map.controls.length) {
+            this.map.addControl(new OpenLayers.Control.ArgParser());       
+        }
+
+    },
+
+    /**
+     * @type DOMElement
+     */    
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this, arguments);
+          
+        if (!this.element) {
+            this.div.className = this.displayClass;
+            this.element = document.createElement("a");
+            this.element.style.fontSize="smaller";
+            this.element.innerHTML = "WMC Exporter";
+            this.element.href="";
+			this.element.onclick = function() {
+									//alert(this.outstring);
+									var newwindow;
+									//Encode the xml inside the error message
+									encodedHtml = this.outstring;
+							    	encodedHtml = encodedHtml.replace(/</g,"&lt;");
+							    	encodedHtml = encodedHtml.replace(/>/g,"&gt;"); 
+									//popup a message windows to let the use copy the error
+									newwindow=window.open('','','menubar=1,scrollbars=1,width=700,height=400,resizable=1') ;
+									//menubar=1,location=1,status=1,
+									newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+									newwindow.document.writeln(encodedHtml);
+									newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+									newwindow.document.close();
+									return false;
+								};
+            this.div.appendChild(this.element);
+        }
+        this.map.events.register('moveend', this, this.updateLink);
+        return this.div;
+    },
+   
+    /**
+     * 
+     */
+    updateLink: function() {
+        var center = this.map.getCenter();
+        var zoom = "zoom=" + this.map.getZoom(); 
+        var lat = "lat=" + Math.round(center.lat*100000)/100000;
+        var lon = "lon=" + Math.round(center.lon*100000)/100000;
+
+        var layers = "layers=";
+        /*for(var i=0; i< this.map.layers.length; i++) {
+            var layer = this.map.layers[i];
+
+            if (layer.isBaseLayer) {
+                layers += (layer == this.map.baseLayer) ? "B" : "0";
+            } else {
+                layers += (layer.getVisibility()) ? "T" : "F";           
+            }
+        }*/
+		
+		//OpenLayers last build: http://www.openlayers.org/api/OpenLayers.js
+		//WMSManager nightly build: http://www.ominiverdi.org/openlayers/nightly/openlayers/build/OpenLayers.js
+		var header = '{\n';
+		//View Context
+  		header +=		'\t"id":"Map3",\n';
+  		header +=		'\t"version":"1.1",\n';
+		
+		//General Section	
+		
+		var mapBounds = this.map.getExtent();
+		
+		header +=		'\t"General":{\n';
+		
+		header +=		'\t\t"title":"Map3",\n';
+  		header +=		'\t\t"abstract":"Long description of my map",\n';
+  		header +=		'\t\t"KeywordList":"",\n';
+  		header +=		'\t\t"BoundingBox":{"minX":' + mapBounds.left + ',"minY":' + mapBounds.bottom + ',"maxX":' + mapBounds.right + ',"maxY":' + mapBounds.top + ',"srs":"' + this.map.projection + '"},\n';
+  		header +=		'\t\t"Window":{"width":' + this.map.size.w + ',"height":' + this.map.size.h + '},\n';
+		header +=		'\t\t\n';
+		header +=		'\t\t"ContactInformation":{}\n';
+		header +=		'\t\t\n';
+		header +=		'\t\t"LogoURL":null,\n';
+		header +=		'\t\t\n';
+		header +=		'\t\t"DescriptionURL":null,\n';
+		header +=		'\t\t\n';
+		
+		header +=		'\t},\n';
+		var layers = '\t"LayerList":[\n';
+		
+		for(var i=0; i< this.map.layers.length; i++) {
+            var layer = this.map.layers[i];
+			layers += '\t\t{ \n';
+			
+			var serverUrl = layer.WMSinfo[1];
+			 
+			var aParams = layer.WMSinfo[2].split('!!'); 
+			var srs = null;
+			var format = null;	
+			var transparent = null;
+			var exception = null;
+			var service = null;
+			var version = null;
+			var styles = null;
+			
+			for(y=0;y<aParams.length;y++){
+				var keyVal = aParams[y].split('!');
+				if(keyVal[0]){
+					if(keyVal[0]=='TRANSPARENT') {
+						if(keyVal[1]=='TRUE') transparent = 'true';
+						else    transparent = 'false';
+					}
+					if(keyVal[0]=='FORMAT') {
+						format = keyVal[1];
+					}
+					if(keyVal[0]=='SRS') {
+						srs = keyVal[1];
+					}
+					if(keyVal[0]=='SERVICE') {
+						service = keyVal[1];
+					}
+					if(keyVal[0]=='VERSION') {
+						version = keyVal[1];
+					}
+					if(keyVal[0]=='STYLES') {
+						styles = keyVal[1];
+					}
+				}
+			}
+			
+			
+			layers += '\t\t"name":"'+ layer.WMSinfo[0] + '",\n';
+			layers += '\t\t"label":"'+ layer.WMSinfo[0] + '",\n';
+			layers += '\t\t"description":"'+ layer.WMSinfo[0] + '",\n';
+			layers += '\t\t"SRS":"' + srs + '",\n';
+			
+			layers += '\t\t"queryable":false,\n';
+			layers += '\t\t"resourceId":9,\n';
+			layers += '\t\t"hidden":false,\n';
+			layers += '\t\t"server":{ "service":"WMS", "title":"WMSServer", "onlineResource":{"href":"'+ layer.WMSinfo[1] + '","type":"type1"}, "id":1, "version":"1.1.1"},\n';
+			
+			layers += '\t\t"FormatList":[],\n';//Describe one output image format for the Layer. 
+			layers += '\t\t"MetadataURL":[],\n';
+			layers += '\t\t"StyleTypeList":[],\n';
+			
+			
+			layers += '\t\t"transparent":'+transparent+',\n';//?!?? does it exists in mapcontext?
+			//layers += '\t\t\n';
+			//layers += '\t\t\n';
+			layers += '\t\t},\n';
+			/*layers += 			layer.WMSinfo[0] + '", "';
+			layers += 	layer.WMSinfo[1];
+			layers += 		'",{';
+			var aParams = layer.WMSinfo[2].split('!!'); 	
+			for(y=0;y<aParams.length;y++){
+				var keyVal = aParams[y].split('!');
+				if(keyVal[0]){
+					if(keyVal[0]=='TRANSPARENT') {
+						if(keyVal[1]=='TRUE')layers +=  'TRANSPARENT : true';
+						else layers +=  'TRANSPARENT : false';
+					}
+					else layers +=  keyVal[0] + ': \'' + keyVal[1] + '\'';
+					if(y<aParams.length-1) layers += ',';
+				}
+			}*/
+			
+			/*layers += '\n\t\t map.addLayer(layer' + i + ');';	
+			if (layer.isBaseLayer) {
+				layers += '\n\t\t map.setBaseLayer(layer' + i + ');';	
+			} else {
+				layers += '\n\t\t layer' + i + '.setVisibility('+layer.getVisibility() +' );';
+			}*/
+			
+        }
+       
+	    layers +='\t],\n';
+		
+		var footer = '}';
+		
+		this.element.outstring = header + layers + footer;
+		
+    }, 
+
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Control.WMCExporter"
+});

Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSArgParser.js	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,216 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ * 
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.ArgParser = OpenLayers.Class.create();
+OpenLayers.Control.ArgParser.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type OpenLayers.LonLat */
+    center: null,
+    
+    /** @type int */
+    zoom: null,
+
+    /** @type Array */
+    layers: null,
+
+    /**
+     * @constructor
+     * 
+     * @param {DOMElement} element
+     * @param {String} base
+     */
+    initialize: function(element, base) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+    },
+
+    /** Set the map property for the control. 
+     * 
+     * @param {OpenLayers.Map} map
+     */
+    setMap: function(map) {
+		
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+        //make sure we dont already have an arg parser attached
+        for(var i=0; i< this.map.controls.length; i++) {
+            var control = this.map.controls[i];
+            if ( (control != this) &&
+                 (control.CLASS_NAME == "OpenLayers.Control.ArgParser") ) {
+                break;
+            }
+        }
+        if (i == this.map.controls.length) {
+
+            var args = OpenLayers.Util.getArgs();
+			
+            if (args.lat && args.lon) {
+                this.center = new OpenLayers.LonLat(parseFloat(args.lon),
+                                                   parseFloat(args.lat));
+				
+                if (args.zoom) {
+                    this.zoom = parseInt(args.zoom);
+                }
+    
+                // when we add a new baselayer to see when we can set the center
+                this.map.events.register('changebaselayer', this, 
+                                         this.setCenter);
+                this.setCenter();
+            }
+    
+            if (args.layers) {
+				
+                this.layers = args.layers;
+    
+                // when we add a new layer, set its visibility 
+                this.map.events.register('addlayer', this, 
+                                         this.configureLayers);
+                this.configureLayers();
+            }
+        }
+    },
+   
+    /** As soon as a baseLayer has been loaded, we center and zoom
+     *   ...and remove the handler.
+     */
+    setCenter: function() {
+        this.map.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90);
+        if (this.map.baseLayer) {
+            //dont need to listen for this one anymore
+            this.map.events.unregister('changebaselayer', this, 
+                                       this.setCenter);
+                                       
+            this.map.setCenter(this.center, this.zoom);
+        }
+    },
+
+    /** As soon as all the layers are loaded, cycle through them and 
+     *   hide or show them. 
+     */
+    configureLayers: function() {
+		
+		var aLayers = this.layers.split('||');
+        if (aLayers.length) { 
+            this.map.events.unregister('addlayer', this, this.configureLayers);
+			
+			//WEIRD TRICK TO AVOID A JS ERROR !!!!!!!
+			this.map.popups = []; 
+			
+            for(var i=0; i < aLayers.length; i++) {
+               // alert('1');
+                var aLayer = aLayers[i].split('|');
+                if(aLayer.length>1){
+					var c = aLayer[0];
+					//alert(aLayer[1]);
+					//WMSinfo
+					var layerName = aLayer[1];
+					var url = aLayer[2];
+					var params = aLayer[3];
+					var wmsLayerString =  aLayer[4];
+					//alert(wmsLayerString);
+					//WMS request vars
+					var format = '';//FORMAT
+					var exceptions = '';//EXCEPTIONS
+					var service = 'WMS';//SERVICE
+					var version = '';//VERSION
+					var request = "getMap";//REQUEST
+					var styles = '';//STYLES
+					
+					//aWMSLayers params
+					var aParams = params.split('!!');
+					for(j=0;j<aParams.length;j++){
+						var param = aParams[j].split('!');
+						switch(param[0]){
+							case 'FORMAT':
+							format = param[1];
+							break;
+							case 'EXCEPTIONS':	
+							exceptions = param[1];
+							break;
+							case 'VERSION':	
+							version = param[1];
+							break;
+							case 'STYLES':	
+							styles = param[1];
+							break;
+						};
+						
+					}
+					//var Name= layerName;
+					//var Title = layerName;
+					//var Abstract = '';
+					//var BoundingBox = '';
+					//var LegendURL = '';
+					//var queryable = false;
+					
+					
+					
+					
+					
+					var layerTitle = '';
+					//wmsLayerString
+						
+
+	                if (c == "B") {
+						
+						
+
+						var layer = new OpenLayers.Layer.WMS( layerName,
+						 url, {layers: layerName, EXCEPTIONS: exceptions} );
+						
+						layer.aWMSLayers = [];
+						aWMSlayer = unescape(wmsLayerString).split('$$$');
+						for(u=0;u<aWMSlayer.length;u++){
+							if(aWMSlayer[u].length)layer.aWMSLayers.push(aWMSlayer[u].split('@')); 
+							//alert(wmsLayer);
+						}
+						
+						//if(!layer.aWMSLayers) layer.aWMSLayers = [];
+						//layer.aWMSLayers.push(Name,Title,Abstract,BoundingBox,LegendURL);
+						layer.WMSinfo = [layerName,url,params,layer.aWMSLayers];
+						this.map.addLayer(layer);
+						//alert('22');
+	                    this.map.setBaseLayer(layer);
+						//alert('23');
+						
+	                } else if ( (c == "T") || (c == "F") ) {
+						
+						var layer = new OpenLayers.Layer.WMS( layerName, 
+	                    url, {layers: layerName,format: format,TRANSPARENT: "TRUE", EXCEPTIONS: exceptions} );
+						
+						layer.aWMSLayers = [];
+						aWMSlayer = unescape(wmsLayerString).split('$$$');
+						for(u=0;u<aWMSlayer.length;u++){
+							if(aWMSlayer[u].length)layer.aWMSLayers.push(aWMSlayer[u].split('@')); 
+							//alert(aWMSlayer[u].split('@'));
+						}
+						
+
+						layer.WMSinfo = [layerName,url,params,aWMSlayer];
+						layer.isBaseLayer = false; 
+						layer.setVisibility(c == "T");
+						this.map.addLayer(layer);
+	                    
+						
+	                }
+					
+				}	
+	        }
+				
+			//var bounds = new OpenLayers.Bounds(-180,-87,90,180); 
+					
+			//this.map.zoomToExtent(bounds);
+			
+        }
+    },     
+    
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Control.ArgParser"
+});

Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSExporter.js	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,175 @@
+/* Copyright (c) 2006 MetaCarta, Inc., published under a modified BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt 
+ * for the full text of the license. */
+
+
+/**
+ * @class
+ * 
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMSExporter = OpenLayers.Class.create();
+OpenLayers.Control.WMSExporter.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type DOMElement */
+    element: null,
+    
+    /** @type String */
+    base: '',
+
+    /**
+     * @constructor
+     * 
+     * @param {DOMElement} element
+     * @param {String} base
+     */
+    initialize: function(element, base) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+        this.element = OpenLayers.Util.getElement(element);        
+        if (base) {
+            this.base = base;
+        }
+    },
+
+    /**
+     * 
+     */
+    destroy: function()  {
+        if (this.element.parentNode == this.div) {
+            this.div.removeChild(this.element);
+        }
+        this.element = null;
+
+        this.map.events.unregister('moveend', this, this.updateLink);
+
+        OpenLayers.Control.prototype.destroy.apply(this, arguments); 
+    },
+
+    /** Set the map property for the control. 
+     * 
+     * @param {OpenLayers.Map} map
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+        //make sure we have an arg parser attached
+        for(var i=0; i< this.map.controls.length; i++) {
+            var control = this.map.controls[i];
+            if (control.CLASS_NAME == "OpenLayers.Control.ArgParser") {
+                break;
+            }
+        }
+        if (i == this.map.controls.length) {
+            this.map.addControl(new OpenLayers.Control.ArgParser());       
+        }
+
+    },
+
+    /**
+     * @type DOMElement
+     */    
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this, arguments);
+          
+        if (!this.element) {
+            this.div.className = this.displayClass;
+            this.element = document.createElement("a");
+            this.element.style.fontSize="smaller";
+            this.element.innerHTML = "OL Exporter";
+            this.element.href="";
+			this.element.onclick = function() {
+									//alert(this.outstring);
+									var newwindow;
+									//Encode the xml inside the error message
+									encodedHtml = this.outstring;
+							    	encodedHtml = encodedHtml.replace(/</g,"&lt;");
+							    	encodedHtml = encodedHtml.replace(/>/g,"&gt;"); 
+									//popup a message windows to let the use copy the error
+									newwindow=window.open('','','menubar=1,scrollbars=1,width=700,height=400,resizable=1') ;
+									//menubar=1,location=1,status=1,
+									newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+									newwindow.document.writeln(encodedHtml);
+									newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+									newwindow.document.close();
+									return false;
+								};
+            this.div.appendChild(this.element);
+        }
+        this.map.events.register('moveend', this, this.updateLink);
+        return this.div;
+    },
+   
+    /**
+     * 
+     */
+    updateLink: function() {
+        var center = this.map.getCenter();
+        var zoom = "zoom=" + this.map.getZoom(); 
+        var lat = "lat=" + Math.round(center.lat*100000)/100000;
+        var lon = "lon=" + Math.round(center.lon*100000)/100000;
+
+        var layers = "layers=";
+        /*for(var i=0; i< this.map.layers.length; i++) {
+            var layer = this.map.layers[i];
+
+            if (layer.isBaseLayer) {
+                layers += (layer == this.map.baseLayer) ? "B" : "0";
+            } else {
+                layers += (layer.getVisibility()) ? "T" : "F";           
+            }
+        }*/
+		
+		//OpenLayers last build: http://www.openlayers.org/api/OpenLayers.js
+		//WMSManager nightly build: http://www.ominiverdi.org/openlayers/nightly/openlayers/build/OpenLayers.js
+		var header = '<html xmlns="http:\/\/www.w3.org/1999/xhtml">\n';
+  		header +=		'<head>\n<style type="text/css">\n';
+		header += '\t#map {\n\t\t width: 800px;\n\t\t height: 475px;\n\t\t border: 1px solid black;\n\t}\n</style>\n';
+		header +=					'<script src="http:&#47;&#47;www.openlayers.org/api/OpenLayers.js"></script>\n';
+		//header +=				//'<script src="http:&#47;&#47;www.ominiverdi.org/openlayers/nightly/openlayers/build/WMSManager.js"></script>\n';
+		header +=				'<script type="text/javascript">\n<!-- \n\t var map;';  
+		header +=		'\n\t function init(){\n\t\t map = new OpenLayers.Map( $(\'map\') ); ';
+		var layers = '\n';
+		
+		for(var i=0; i< this.map.layers.length; i++) {
+            var layer = this.map.layers[i];
+			layers += '\n\t\t layer' + i + ' = new OpenLayers.Layer.WMS( "' +
+						layer.WMSinfo[0] + '", "';
+			layers += 	layer.WMSinfo[1];
+			layers += 		'",{';
+			var aParams = layer.WMSinfo[2].split('!!'); 	
+			for(y=0;y<aParams.length;y++){
+				var keyVal = aParams[y].split('!');
+				if(keyVal[0]){
+					if(keyVal[0]=='TRANSPARENT') {
+						if(keyVal[1]=='TRUE')layers +=  'TRANSPARENT : true';
+						else layers +=  'TRANSPARENT : false';
+					}
+					else layers +=  keyVal[0] + ': \'' + keyVal[1] + '\'';
+					if(y<aParams.length-1) layers += ',';
+				}
+			}
+			layers +='} );';
+			
+			layers += '\n\t\t map.addLayer(layer' + i + ');';	
+			if (layer.isBaseLayer) {
+				layers += '\n\t\t map.setBaseLayer(layer' + i + ');';	
+			} else {
+				layers += '\n\t\t layer' + i + '.setVisibility('+layer.getVisibility() +' );';
+			}
+			
+        }
+       
+		var footer = '';
+		footer += '\n\t\t map.setCenter(new OpenLayers.LonLat('+ lon + ','+ lat +'),' +zoom+');';
+		footer += '\n\t\t map.addControl( new OpenLayers.Control.LayerSwitcher() );';
+		footer +=				'\n\t\} \n &#47;&#47; --&gt; \n</script> \n</head>';
+		footer +=				'\n<body onload="init()"> \n\t  <div id="map"></div>';
+		footer +=				'\n</body>\n</html>';
+		this.element.outstring = header + layers + footer;
+		
+    }, 
+
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Control.WMSExporter"
+});

Added: sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js
===================================================================
--- sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js	                        (rev 0)
+++ sandbox/ominiverdi/ows/OWSManager/lib/OpenLayers/Control/WMSManager.js	2007-11-01 20:51:39 UTC (rev 5096)
@@ -0,0 +1,2460 @@
+/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/release-license.txt 
+ * for the full text of the license. */
+
+/** 
+ * @class
+ *  
+ * @author Lorenzo Becchi (ominiverdi.org)
+ * @projectDescription ticket #687
+ * 
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMSManager = OpenLayers.Class.create();
+OpenLayers.Control.WMSManager.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type String */
+    activeColor: "darkblue",
+    
+
+  // DOM Elements
+  
+  	/** @type DOMElement */
+    olLayerManager: null,
+    
+	
+	/** @type DOMElement */
+	olServerList: null,
+	
+	/** @type DOMElement */
+	olLegend: null,
+	
+	/** @type DOMElement */
+	olLayerManagerHeader: null,
+	
+	/** @type DOMElement */
+	WMSManagerForm: null,
+	
+  
+    /** @type DOMElement */
+    layersDiv: null,
+	
+	/** @type DOMElement */
+	layerStuff: null,
+    
+    /** @type DOMElement */
+    baseLayersDiv: null,
+	
+	/** @type DOMElement */
+    selectImageType: null,
+	
+	/** @type DOMElement */
+	overlayButton:null,
+
+    /** @type Array */
+    baseLayerInputs: null,
+    
+    
+    /** @type DOMElement */
+    dataLbl: null,
+    
+    /** @type DOMElement */
+    dataLayersDiv: null,
+
+    /** @type Array */
+    dataLayerInputs: null,
+
+
+    /** @type DOMElement */
+    minimizeDiv: null,
+
+    /** @type DOMElement */
+    maximizeDiv: null,
+    
+	//Arrays
+    /** @type Array */
+    aWMSServer: null,
+	
+	//WMS layers features
+	/** @type Array
+	 *  @param Name:Title:Abstract:BoundingBox:LegendURL:queryable
+	 */ 
+	aWMSLayers: [],
+	
+	//Image formats for WMS server
+	/** @type Array
+	 */ 
+	aImageFormats: [],
+	
+    //others
+   
+    /** @type Boolean */
+    ascending: true,
+	
+ 	/** @type string */
+    activePanel: 'olLegend',
+	
+	//WMS default params
+	/** @type string */
+    exceptionsValue: 'application/vnd.ogc.se_inimage',//OL default value
+	resolutionsValue: null,//OL default value
+	
+ 
+    /**
+    * @constructor
+    */
+    initialize: function(aWMSServer,targetObj,options) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+		this.aWMSServer= aWMSServer;
+		this.targetObj = targetObj;
+		
+    },
+
+    /**
+     *  
+     */    
+    destroy: function() {
+        
+        OpenLayers.Event.stopObservingElement(this.div);
+
+        OpenLayers.Event.stopObservingElement(this.minimizeDiv);
+        OpenLayers.Event.stopObservingElement(this.maximizeDiv);
+
+        //clear out layers info and unregister their events 
+        this.clearLayersArray("base");
+        this.clearLayersArray("data");
+        
+        this.map.events.unregister("addlayer", this, this.redraw);
+        this.map.events.unregister("changelayer", this, this.redraw);
+        this.map.events.unregister("removelayer", this, this.redraw);
+        this.map.events.unregister("changebaselayer", this, this.redraw);
+        
+        OpenLayers.Control.prototype.destroy.apply(this, arguments);
+    },
+
+    /** 
+     * @param {OpenLayers.Map} map
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+        this.map.events.register("addlayer", this, this.redraw);
+        this.map.events.register("changelayer", this, this.redraw);
+        this.map.events.register("removelayer", this, this.redraw);
+        this.map.events.register("changebaselayer", this, this.redraw);
+		
+		
+    },
+
+    /**
+    * @returns A reference to the DIV DOMElement containing the switcher tabs
+    * @type DOMElement
+    */  
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this);
+		
+		
+		
+        // create layout divs
+        this.loadContents();
+
+        // set mode to minimize
+        //this.minimizeControl();
+        //this.showControls();
+		
+        // populate div with current info
+        this.redraw();    
+		
+		this.switchPanel();
+		this.maximizeControl();
+        return this.div;
+    },
+
+    /** user specifies either "base" or "data". we then clear all the 
+     *    corresponding listeners, the div, and reinitialize a new array.
+     * 
+     * @private
+     * 
+     * @param {String} layersType Ei
+     */
+    clearLayersArray: function(layersType) {
+        var layers = this[layersType + "Layers"];
+        if (layers) {
+            for(var i=0; i < layers.length; i++) {
+                var layer = layers[i];
+                OpenLayers.Event.stopObservingElement(layer.inputElem);
+                OpenLayers.Event.stopObservingElement(layer.labelSpan);
+            }
+        }
+        this[layersType + "LayersDiv"].innerHTML = "";
+        this[layersType + "Layers"] = [];
+    },
+
+
+    /** Goes through and takes the current state of the Map and rebuilds the
+     *   control to display that state. Groups base layers into a radio-button
+     *   group and lists each data layer with a checkbox.
+     * 
+     * @returns A reference to the DIV DOMElement containing the control
+     * @type DOMElement
+     */  
+    redraw: function() {
+
+        //clear out previous layers 
+        this.baseLayersDiv.innerHTML = "";
+        this.baseLayerInputs = [];
+        
+        this.dataLayersDiv.innerHTML = "";
+        this.dataLayerInputs = [];
+        
+        var containsOverlays = false;
+        
+        var layers = this.map.layers.slice();
+		if(layers.length == 0) 
+				this.baseLayersDiv.innerHTML = "<p><span style='color:yellow'>no layers added</span><br> Please add some using 'WMS Servers' selector or using 'Catalogue' search.</p>";
+		
+        if (!this.ascending) { layers.reverse(); }
+        for( var i = 0; i < layers.length; i++) {
+            var layer = layers[i];
+            var baseLayer = layer.isBaseLayer;
+
+            if (baseLayer || layer.displayInLayerSwitcher) {
+				
+				//GET LAYER INFOS from WMS array
+				// set gently layer Name	
+				var layerName=  layer.name;
+				
+                if (!baseLayer) {
+                    containsOverlays = true;
+                }
+
+                // only check a baselayer if it is *the* baselayer, check data
+                //  layers if they are visible
+                var checked = (baseLayer) ? (layer == this.map.baseLayer)
+                                          : layer.getVisibility();
+    
+                // create input element
+                var inputElem = document.createElement("input");
+                inputElem.id = "input_" + layer.name;
+                inputElem.name = (baseLayer) ? "baseLayers" : layer.name;
+                inputElem.type = (baseLayer) ? "radio" : "checkbox";
+                inputElem.value = layer.name;
+                inputElem.checked = checked;
+                inputElem.defaultChecked = checked;
+				inputElem.layer = layer;
+                inputElem.control = this;
+
+
+                if (!baseLayer && !layer.inRange) {
+                    inputElem.disabled = true;
+                }
+                
+
+                OpenLayers.Event.observe(inputElem, "mouseup",  this.onInputClick.bindAsEventListener(inputElem));
+                
+                // create span
+                /*var labelSpan = document.createElement("span");
+                if (!baseLayer && !layer.inRange) {
+                    labelSpan.style.color = "gray";
+                }*/
+				
+				var layerUl = document.createElement("ul");
+				
+				var layerTitle = '';
+				var aExtents = [];
+				var aLayersName = layer.name.split(',');
+				for(j=0;j<aLayersName.length;j++){
+					var selectedLayer = aLayersName[j];
+					for(y=0;y<layer.aWMSLayers.length;y++){
+						var legendUrl = null;
+						var listedLayer = layer.aWMSLayers[y];
+						if(selectedLayer==listedLayer[0]) {
+							//list of layer titles
+							/*
+								layerTitle +=(layerTitle.length>0)?
+									    ', ' + '[' + listedLayer[0] + '] ' + listedLayer[1]
+									  :   '[' + listedLayer[0] + '] ' + listedLayer[1];
+								
+								//show if queryable
+								if(listedLayer[5]==1) layerTitle +=' (q)'; 
+							*/
+							
+							var li = document.createElement('li');
+							li.innerHTML =  '[' + listedLayer[0] + '] ' + listedLayer[1];
+							if(listedLayer[5]==1) li.innerHTML +=' (q)'; 
+							layerUl.appendChild(li);
+							
+							 
+							
+							//find layers extents
+							if(listedLayer[3].length==4){
+								aExtents.push(listedLayer[3]);//bounding boxes
+							} else if(listedLayer[3].split){
+								var bbox = listedLayer[3].split(',');
+								aExtents.push(bbox);//bounding boxes
+							} else alert('wrong bbox: '+listedLayer[3])
+						}
+					}
+				}
+
+                //labelSpan.innerHTML = layerTitle;
+                layerUl.style.verticalAlign = (baseLayer) ? "bottom" 
+                                                            : "baseline";
+                OpenLayers.Event.observe(layerUl, "click",   this.onInputClick.bindAsEventListener(inputElem));
+                
+				
+				
+				// create line break
+                var br = document.createElement("br");
+    			
+				//create legend Tool and image
+				var legendTools = document.createElement("div");
+				legendTools.style.paddingLeft ='10px';
+				legendTools.style.display ='none';
+				
+				//create opacity value
+				var opacity = (layer.opacity)?layer.opacity:1;
+    			var opSpan = document.createElement("span");
+				opSpan.innerHTML = opacity;
+				
+				// create opacity Anchors
+                var aUp = document.createElement("a");
+				aUp.href="#";
+				aUp.layer=layer;
+				aUp.opSpan = opSpan;
+				aUp.className="olLegendLayerOpacity";
+				aUp.onclick = function(){
+									var maxOpacity = 1;
+  								    var minOpacity = 0.1;
+									var opacity=(this.layer.opacity)?this.layer.opacity:1;
+									var newOpacity = (parseFloat(opacity) + 0.1).toFixed(1);
+          							newOpacity = Math.min(maxOpacity, Math.max(minOpacity, newOpacity));
+									this.layer.setOpacity(newOpacity);
+									this.opSpan.innerHTML = newOpacity;
+								};
+				aUp.innerHTML = '<span>&gt;</span>';
+    			
+				var aDown = document.createElement("a");
+				aDown.href="#";
+				aDown.layer=layer;
+				aDown.opSpan = opSpan;
+				aDown.className="olLegendLayerOpacity";
+				aDown.onclick = function(){
+									var maxOpacity = 1;
+  								    var minOpacity = 0.1;
+									var opacity=(this.layer.opacity)?this.layer.opacity:1;
+									var newOpacity = (parseFloat(opacity) - 0.1).toFixed(1);
+          							newOpacity = Math.min(maxOpacity, Math.max(minOpacity, newOpacity));
+									this.layer.setOpacity(newOpacity);
+									this.opSpan.innerHTML = newOpacity;
+								};
+				aDown.innerHTML = '<span>&lt;</span>';
+				
+				
+				//Create DropLayer
+                var aDrop = document.createElement("a");
+				aDrop.innerHTML = '<span>X</span>';
+				aDrop.className = 'olLegendLayerDrop';
+				aDrop.layer = layer;
+				aDrop.onclick = function(){
+									this.layer.map.removeLayer(this.layer);
+								};
+								
+				//Create SwitchLayer
+                var aSwitchUp = document.createElement("a");
+				aSwitchUp.innerHTML = '<span>&uarr;</span>';
+				aSwitchUp.className = 'olLegendLayerSwitch';
+				aSwitchUp.layer = layer;
+				aSwitchUp.onclick = function(){
+									var startZ = this.layer.map.getLayerIndex(this.layer);
+									if(startZ==0)return alert("this is already the top");
+									this.layer.map.raiseLayer(this.layer,-1);
+								};
+				var aSwitchDown = document.createElement("a");
+				aSwitchDown.innerHTML = '<span>&darr;</span>';// + ' ' + layer.map.getLayerIndex(layer)
+				aSwitchDown.className = 'olLegendLayerSwitch';
+				aSwitchDown.layer = layer;
+				aSwitchDown.onclick = function(){
+									var startZ = this.layer.map.getLayerIndex(this.layer);
+									var numL = this.layer.map.getNumLayers();
+									//alert(startZ + ':' + numL);
+									if(startZ==numL-1)return alert("this is already the bottom");
+									this.layer.map.raiseLayer(this.layer,1);
+									//NEED A PATCH IN this.layer.map.raiseLayer TO AVOID COUNTING BASE LAYERS
+								};
+				
+				//expand legend icon				
+				var aExpandIcon = document.createElement("a");
+				aExpandIcon.innerHTML = '<span> + </span>';
+				aExpandIcon.className = 'olLegendIconExpander';
+				aExpandIcon.layer = layer;
+				aExpandIcon.expanded = true;
+				aExpandIcon.legendTools = legendTools;
+				aExpandIcon.onclick = function(){
+									if(this.expanded){
+										this.innerHTML = '<span> - </span>';
+										this.legendTools.style.display = "block";
+										this.expanded = false;
+									}else {
+										this.innerHTML = '<span> + </span>';
+										this.legendTools.style.display = "none";
+										this.expanded = true;
+									}
+								};
+				
+				//zoom to layer extent icon	
+				var bounds = null;
+				for(u=0;u<aExtents.length;u++){
+					var ext = aExtents[u];
+					if(!bounds) {
+						bounds = new OpenLayers.Bounds(ext[0], ext[1], ext[2], ext[3]); 
+					} 
+					else {
+						var nBounds = new OpenLayers.Bounds(ext[0], ext[1], ext[2], ext[3]); 
+						bounds.extend(nBounds);
+						
+					}
+				}		
+				var aZoomToIcon = document.createElement("a");
+				aZoomToIcon.innerHTML = '<span> zoom </span>';
+				aZoomToIcon.title = 'zoom to extent';
+				aZoomToIcon.className = 'olLegendIconZoomer';
+				aZoomToIcon.layer = layer;
+				aZoomToIcon.bounds = bounds;
+				aZoomToIcon.onclick = function(){
+									//alert(this.bounds);
+									
+									this.layer.map.zoomToExtent(this.bounds);
+								};
+				
+				
+				if(!baseLayer){
+					var layerTools = document.createElement("div");
+					layerTools.className = 'olLegendLayerTools';
+					layerTools.appendChild(aDown);
+              	  	layerTools.appendChild(opSpan);
+					layerTools.appendChild(aUp);
+					layerTools.appendChild(aSwitchDown);
+					layerTools.appendChild(aSwitchUp);
+					legendTools.appendChild(layerTools);
+				}
+				
+				
+				var legendImages = document.createElement("div");
+				legendImages.className = 'olLegendLegendImages';
+				var aLayersName = layer.name.split(',');
+				for(j=0;j<aLayersName.length;j++){
+					var selectedLayer = aLayersName[j];
+					for(y=0;y<layer.aWMSLayers.length;y++){
+						var legendUrl = null;
+						var listedLayer = layer.aWMSLayers[y];
+						if(selectedLayer==listedLayer[0]) {
+							
+							//set legend url
+							legendName = listedLayer[0];
+							legendTitle = listedLayer[1];
+							legendAbstract = listedLayer[2];
+							legendQueriable = listedLayer[5];
+							legendUrl = listedLayer[4];
+						
+						
+							var legendSpan = document.createElement("span");
+								var mess = '<table><tr><th>Name</th><td> '+ legendName + '</td></tr>' +
+													'<tr><th>Title</th><td>'+legendTitle  +'</td></tr>' +
+													'<tr><th>Abstract</th><td>'+ legendAbstract +'</td></tr>' +
+													'<tr><th>Queryable</th><td>'+legendQueriable + '</td></tr>';
+							
+							
+							if(legendUrl){
+								mess += '<tr><th>Image</th><td><img src="'+legendUrl + '"></td></tr>';
+								//'<h5>Legend Image:</h5><img src="'+legendUrl+'">';
+								//var legendImg = document.createElement("img");
+								//legendImg.src =legendUrl;
+								//legendSpan.appendChild(legendImg);	
+							}else {
+								mess += '<tr><th>Image</th><td>none</td></tr>';
+							}
+							
+							
+							
+							legendSpan.innerHTML = mess + '</tr></table>';
+							
+							//TODO check id SLDManager is in Control LIST
+							var controls = this.map.controls;
+							var SLDManager;
+							for(z=0;z<controls.length;z++){
+								var control = controls[z];
+								if(control.CLASS_NAME == 'OpenLayers.Control.SLDManager'){
+									SLDManager = control;
+								}
+							}
+							if(SLDManager){
+								var sldman = document.createElement('div');
+								sldman.className = 'sldman';
+								var sldButton = document.createElement('button');
+								sldButton.innerHTML = 'change SLD';
+								sldButton.map = this.map;
+								sldButton.layer = selectedLayer;
+								sldButton.SLDManager = SLDManager;
+								sldButton.target = sldman;
+								sldButton.onclick = function(){
+														this.SLDManager.updateTarget(this.target);
+														this.SLDManager.redraw(this);
+														
+													};
+								//sldButton.onclick = function(){this.SLDManager.redraw(this)};
+								//new OpenLayers.Control.SLDManager($('queryOut'))
+								legendSpan.appendChild(sldman);
+								legendSpan.appendChild(sldButton);
+							}
+				
+							
+							legendImages.appendChild(legendSpan);
+							legendImages.style.display = 'block';
+							
+								
+								
+							
+						}
+					}
+				
+				}			
+				
+				legendTools.appendChild(legendImages);
+				
+				
+				
+				
+				
+				
+				
+                var groupArray = (baseLayer) ? this.baseLayerInputs
+                                             : this.dataLayerInputs;
+                groupArray.push(inputElem);
+                                                     
+    
+                var groupDiv = (baseLayer) ? this.baseLayersDiv
+                                           : this.dataLayersDiv;
+                
+				//create Layer div 
+				var layerDiv = document.createElement("div");
+				layerDiv.className = 'olLegendLayerDiv';
+				layerDiv.appendChild(inputElem);
+				layerDiv.appendChild(aDrop);
+				layerDiv.appendChild(aExpandIcon);	
+                layerDiv.appendChild(aZoomToIcon);	
+                //layerDiv.appendChild(labelSpan);
+				layerDiv.appendChild(layerUl);
+                //layerDiv.appendChild(br);
+                
+				
+				
+				layerDiv.appendChild(legendTools);
+				
+				
+				//append to group div
+                groupDiv.appendChild(layerDiv);
+				
+            }
+        }
+
+        // if no overlays, dont display the overlay label
+        this.dataLbl.style.display = (containsOverlays) ? "" : "none";        
+
+        return this.div;
+    },
+
+    /** the overlay checbox has been clicked, check or uncheck its corresponding input
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+
+    onOverlayClick: function(e) {
+        if (!this.disabled) {
+            if (this.type == "radio") {
+                this.checked = true;
+                //this.layer.map.setBaseLayer(this.layer, true);
+                //this.layer.map.events.triggerEvent("changebaselayer");
+            } else {
+                this.checked = !this.checked;
+            }
+        }
+        OpenLayers.Event.stop(e);
+    },
+	
+	/** the overlay checbox has been clicked, check or uncheck its corresponding input
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+
+    onServerSelectFocus: function(e) {
+		
+		//TODO DELETE THIS IF NOT NEEDED
+		//alert('focus');
+       /* if (!this.disabled) {
+            if (this.type == "radio") {
+                this.checked = true;
+                //this.layer.map.setBaseLayer(this.layer, true);
+                //this.layer.map.events.triggerEvent("changebaselayer");
+            } else {
+                this.checked = !this.checked;
+            }
+        }*/
+        OpenLayers.Event.stop(e);
+    },
+	
+	/** A label has been clicked, check or uncheck its corresponding input
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+
+    onInputClick: function(e) {
+        if (!this.disabled) {
+            if (this.type == "radio") {
+                this.checked = true;
+                this.layer.map.setBaseLayer(this.layer, true);
+                this.layer.map.events.triggerEvent("changebaselayer");
+            } else {
+                this.checked = !this.checked;
+                this.control.updateMap();
+            }
+        }
+        OpenLayers.Event.stop(e);
+    },
+    
+    /** Need to update the map accordingly whenever user clicks in either of
+     *   the layers.
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+    onLayerClick: function(e) {
+        this.updateMap();
+    },
+
+
+    /** Cycles through the loaded data and base layer input arrays and makes
+     *   the necessary calls to the Map object such that that the map's 
+     *   visual state corresponds to what the user has selected in the control
+     * 
+     * @private
+     */
+    updateMap: function() {
+
+        // set the newly selected base layer        
+        for(var i=0; i < this.baseLayerInputs.length; i++) {
+            var input = this.baseLayerInputs[i];   
+            if (input.checked) {
+                this.map.setBaseLayer(input.layer, false);
+            }
+        }
+
+        // set the correct visibilities for the overlays
+        for(var i=0; i < this.dataLayerInputs.length; i++) {
+            var input = this.dataLayerInputs[i];   
+            input.layer.setVisibility(input.checked, true);
+        }
+
+    },
+
+    /** Set up the labels and divs for the control
+     * 
+     * @param {Event} e
+     */
+    maximizeControl: function(e) {
+
+        //HACK HACK HACK - find a way to auto-size this layerswitcher
+        this.div.style.width = "20em";
+        this.div.style.height = "";
+
+        this.showControls(false);
+
+        if (e != null) {
+            OpenLayers.Event.stop(e);                                            
+        }
+    },
+    
+    /** Hide all the contents of the control, shrink the size, 
+     *   add the maximize icon
+     * 
+     * @param {Event} e
+     */
+    minimizeControl: function(e) {
+
+        this.div.style.width = "0px";
+        this.div.style.height = "0px";
+
+        this.showControls(true);
+
+        if (e != null) {
+            OpenLayers.Event.stop(e);                                            
+        }
+    },
+
+    /** Hide/Show all LayerSwitcher controls depending on whether we are
+     *   minimized or not
+     * 
+     * @private
+     * 
+     * @param {Boolean} minimize
+     */
+    showControls: function(minimize) {
+
+        this.maximizeDiv.style.display = minimize ? "" : "none";
+        this.minimizeDiv.style.display = minimize ? "none" : "";
+
+        this.layersDiv.style.display = minimize ? "none" : "";
+    },
+    
+    /** Set up the labels and divs for the control
+     * 
+     */
+    loadContents: function() {
+
+        //configure main div
+        this.div.style.position = "absolute";
+        this.div.style.top = "25px";
+        this.div.style.right = "0px";
+        this.div.style.left = "";
+        this.div.style.fontFamily = "sans-serif";
+        this.div.style.fontWeight = "bold";
+        this.div.style.marginTop = "3px";
+        this.div.style.marginLeft = "3px";
+        this.div.style.marginBottom = "3px";
+        this.div.style.fontSize = "smaller";   
+        this.div.style.color = "white";   
+        this.div.style.backgroundColor = "transparent";
+    
+        OpenLayers.Event.observe(this.div, "mouseup", 
+                      this.mouseUp.bindAsEventListener(this));
+        OpenLayers.Event.observe(this.div, "click",
+                      this.ignoreEvent);
+        OpenLayers.Event.observe(this.div, "mousedown",
+                      this.mouseDown.bindAsEventListener(this));
+        OpenLayers.Event.observe(this.div, "dblclick", this.ignoreEvent);
+
+		//create olLayerManagerHeader div
+		this.olLayerManagerHeader = document.createElement("div");
+		this.olLayerManagerHeader.className = "olLayerManagerHeader";
+		// add Legend button
+		this.buttonLayers = document.createElement("a");
+		this.buttonLayers.href="#";
+		this.buttonLayers.LayerManager =this;
+		this.buttonLayers.panel ='olLegend';
+		this.buttonLayers.onclick =this.switchPanel;
+		var spanL = document.createElement("span");
+		spanL.innerHTML = "Legend";
+		this.buttonLayers.appendChild(spanL);
+		
+		// add WMS Servers button
+		this.buttonServers = document.createElement("a");
+		this.buttonServers.href="#";
+		this.buttonServers.LayerManager =this;
+		this.buttonServers.panel = 'olServerList';
+		this.buttonServers.onclick =this.switchPanel;
+		var spanS = document.createElement("span");
+		spanS.innerHTML = "WMS Servers";
+		this.buttonServers.appendChild(spanS);
+		
+		// add Catalogue Server button
+		this.catalogueServers = document.createElement("a");
+		this.catalogueServers.href="#";
+		this.catalogueServers.LayerManager =this;
+		this.catalogueServers.panel = 'olCatalogue';
+		this.catalogueServers.onclick =this.switchPanel;
+		var spanS = document.createElement("span");
+		spanS.innerHTML = "Catalogue";
+		this.catalogueServers.appendChild(spanS);
+		
+		this.olLayerManagerHeader.appendChild(this.buttonLayers);
+		this.olLayerManagerHeader.appendChild(this.buttonServers);
+		this.olLayerManagerHeader.appendChild(this.catalogueServers);
+		
+		
+		/*
+		 * Catalogue panel 
+		 */
+		
+		this.olCatalogue = document.createElement("div");
+		this.olCatalogue.className = "olCatalogue";
+		
+		this.catalogueLog  = document.createElement('p');
+		this.catalogueLog.className = 'CatalogueOutput';
+		this.catalogueLog.innerHTML = 'Write a search string and press "search" button. Then wait for layer list to appear.';
+		this.olCatalogue.appendChild(this.catalogueLog);
+		
+		//Catalogue FORM
+		var form = document.createElement('form');
+		form.name='CatalogueConnector';
+		form.onsubmit = function() { return null; };
+		form.action='#';
+		
+		this.catalogueInput = document.createElement('input');
+		this.catalogueInput.className = 'CatalogueInput';
+		this.catalogueInput.type = 'text';
+		OpenLayers.Event.observe(this.catalogueInput, "click",
+                      function(evt) { evt.target.focus();});
+		form.appendChild(this.catalogueInput);
+		
+		this.catSubmit = document.createElement('input');
+		this.catSubmit.type = 'button';
+		this.catSubmit.value = 'search';
+		this.catSubmit.WMSManager = this;
+		OpenLayers.Event.observe(this.catSubmit, "click",
+                      function(evt) { 
+					  	var str = this.WMSManager.catalogueInput.value;
+						if(!str) {
+							return alert('you can\'t  search an empty string');	
+						}
+						console.log(str);
+						this.WMSManager.searchCatalogue(this);
+					});
+		
+		form.appendChild(this.catSubmit);
+		
+		this.olCatalogue.appendChild(form);
+		
+		
+
+
+		/*
+		 * WMS server form - panel
+		 */
+		
+		//div to pack all layers stuff 
+		
+		this.layerStuff = document.createElement('div');
+		this.layerStuff.className = 'wmsLayerLayerStuff';
+		
+		
+		//server select
+		this.olServerList = document.createElement("div");
+		this.olServerList.className = "olServerList";
+		var p = document.createElement('p');
+		//p.innerHTML = 'Use the select box here below to choose a server. Wait for remote response.';
+		this.olServerList.appendChild(p);
+		var p = document.createElement('p');
+		p.id = 'wmsManagerOutput';
+		this.olServerList.appendChild(p);
+		
+		var form = document.createElement('form');
+		form.name='WMSServerConnector';
+		form.onsubmit = function() {return null;};
+		form.action='#';
+		this.olServerList.appendChild(form);
+		
+		//Make server select
+		this.serverSelect = document.createElement('select');
+		this.serverSelect.className = 'wmsServerList';
+		this.serverSelect.id = 'wmsServerList';
+		this.serverSelect.WMSManager = this;
+		//this.serverSelect.style.width = "220px";
+		this.serverSelect.onchange = this.connect2server;
+		OpenLayers.Event.observe(this.serverSelect, "mouseup",  this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+		OpenLayers.Event.observe(this.serverSelect, "blur",  this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+		OpenLayers.Event.observe(this.serverSelect, "focus",  this.onServerSelectFocus.bindAsEventListener(this.serverSelect));
+		var j = 0;
+		var opt = new Option( 'select a server', '', true, true );
+		this.serverSelect[j++] = opt;
+		
+		form.appendChild(this.serverSelect);
+		for(i=0;i<this.aWMSServer.length;i++) {
+			this.serverSelect[j++] = new Option(this.aWMSServer[i][0],this.aWMSServer[i][1],false,false);
+		}
+		
+		form.appendChild(this.layerStuff);
+		
+		/*
+		 * OL Layers Manager - panel
+		 */
+		
+        // layers list div        
+        this.layersDiv = document.createElement("div");
+        this.layersDiv.id = "layersDiv";
+        this.layersDiv.style.paddingTop = "5px";
+        this.layersDiv.style.paddingLeft = "10px";
+        this.layersDiv.style.paddingBottom = "5px";
+        //this.layersDiv.style.paddingRight = "75px";
+        this.layersDiv.style.backgroundColor = this.activeColor;        
+		
+        // had to set width/height to get transparency in IE to work.
+        // thanks -- http://jszen.blogspot.com/2005/04/ie6-opacity-filter-caveat.html
+        //
+        this.layersDiv.style.width = "100%";
+        this.layersDiv.style.height = "100%";
+	
+		
+
+        var baseLbl = document.createElement("div");
+        baseLbl.innerHTML = "<u>Base Layer</u>";
+        baseLbl.style.marginTop = "3px";
+        baseLbl.style.marginLeft = "3px";
+        baseLbl.style.marginBottom = "3px";
+        
+        this.baseLayersDiv = document.createElement("div");
+        this.baseLayersDiv.style.paddingLeft = "10px";
+        /*OpenLayers.Event.observe(this.baseLayersDiv, "click", 
+                      this.onLayerClick.bindAsEventListener(this));
+        */
+                     
+
+        this.dataLbl = document.createElement("div");
+        this.dataLbl.innerHTML = "<u>Overlays</u>";
+        this.dataLbl.style.marginTop = "3px";
+        this.dataLbl.style.marginLeft = "3px";
+        this.dataLbl.style.marginBottom = "3px";
+        
+        this.dataLayersDiv = document.createElement("div");
+        this.dataLayersDiv.style.paddingLeft = "10px";
+		this.olLegend = document.createElement("div");
+		this.olLegend.className = "olLegend";
+		
+		this.layersDiv.appendChild(this.olLayerManagerHeader);
+        if (this.ascending) {
+            this.olLegend.appendChild(baseLbl);
+            this.olLegend.appendChild(this.baseLayersDiv);
+            this.olLegend.appendChild(this.dataLbl);
+            this.olLegend.appendChild(this.dataLayersDiv);
+			
+        } else {
+            this.olLegend.appendChild(this.dataLbl);
+            this.olLegend.appendChild(this.dataLayersDiv);
+            this.olLegend.appendChild(baseLbl);
+            this.olLegend.appendChild(this.baseLayersDiv);
+        }    
+		
+        this.layersDiv.appendChild(this.olLegend);
+ 		this.layersDiv.appendChild(this.olServerList);
+ 		this.layersDiv.appendChild(this.olCatalogue);
+		
+        this.div.appendChild(this.layersDiv);
+
+        OpenLayers.Rico.Corner.round(this.div, {corners: "tl bl",
+                                        bgColor: "transparent",
+                                        color: this.activeColor,
+                                        blend: false});
+
+        OpenLayers.Rico.Corner.changeOpacity(this.layersDiv, 0.75);
+
+        var imgLocation = OpenLayers.Util.getImagesLocation();
+        var sz = new OpenLayers.Size(18,18);        
+
+        // maximize button div
+        var img = imgLocation + 'layer-switcher-maximize.png';
+        this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(
+                                    "OpenLayers_Control_MaximizeDiv", 
+                                    null, 
+                                    sz, 
+                                    img, 
+                                    "absolute");
+        this.maximizeDiv.style.top = "5px";
+        this.maximizeDiv.style.right = "0px";
+        this.maximizeDiv.style.left = "";
+        this.maximizeDiv.style.display = "none";
+        OpenLayers.Event.observe(this.maximizeDiv, 
+                      "click", 
+                      this.maximizeControl.bindAsEventListener(this));
+        
+        this.div.appendChild(this.maximizeDiv);
+
+        // minimize button div
+        var img = imgLocation + 'layer-switcher-minimize.png';
+        var sz = new OpenLayers.Size(18,18);        
+        this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv(
+                                    "OpenLayers_Control_MinimizeDiv", 
+                                    null, 
+                                    sz, 
+                                    img, 
+                                    "absolute");
+        this.minimizeDiv.style.top = "5px";
+        this.minimizeDiv.style.right = "0px";
+        this.minimizeDiv.style.left = "";
+        this.minimizeDiv.style.display = "none";
+        OpenLayers.Event.observe(this.minimizeDiv, 
+                      "click", 
+                      this.minimizeControl.bindAsEventListener(this));
+
+        this.div.appendChild(this.minimizeDiv);
+    },
+    
+	
+	   /** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    connect2server: function(evt) {
+         this.WMSManager.layerStuff.innerHTML ='';
+		 
+		 var select = this;
+		 if((select)) var url = select[select.selectedIndex].value;
+		 else url ="";
+		 
+		 if(url.length>0) {
+			 this.baseURL = url;
+		 } else {
+			 alert('no server selected. please select one.');
+			 return;
+		 } 
+	    if (this.baseURL.indexOf('?') == -1)
+	    {
+	        this.baseURL = this.baseURL + '?';
+	    }
+	    else
+	    {
+	        if (this.baseURL.charAt( this.baseURL.length - 1 ) == '&')
+	            this.baseURL = this.baseURL.slice( 0, -1 );
+	    }
+		
+	    this.baseURL = this.baseURL+ "&service=WMS";
+	    this.baseURL = this.baseURL +  "&version=1.1.1";
+	    this.baseURL = this.baseURL + "&request=GetCapabilities";
+	    
+		
+		$('wmsManagerOutput').innerHTML = "Loading Layers list... please wait...";
+        //$('wmsManagerOutput').innerHTML = this.baseURL;
+		//alert(this.baseURL);
+        OpenLayers.loadURL(this.baseURL, null, this, this.WMSManager.parseGetCapabilities);
+    },
+	
+	
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    parseGetCapabilities: function(ajaxRequest) {
+		var text = ajaxRequest.responseText;
+		
+		//var oDomDoc = Sarissa.getDomDocument();
+	    
+		//myregexp = new RegExp('<!--[^(-->)]*-->');
+		text = text.replace(/<!--.*?-->/g, ''); //Helped with ESA server
+		text = text.replace(/\[.<!.*?>.\]/g, ''); //Helped with ESA server
+		text = text.replace(/<GetTileService>.*?GetTileService>/g, '');//skip NASA DTD error
+		
+		var xml = OpenLayers.parseXMLString(text);
+		
+		if(xml == null) return alert('incorrect content: check your WMS url');
+		if(xml.childNodes.length==0) {
+			try{
+				if(OpenLayers.Ajax.getParseErrorText(xml) == OpenLayers.Ajax.PARSED_OK){
+			      // The document was parsed/loaded just fine, go on
+			      //alert(xml);
+				  alert('no Layers available on this server');
+			    } 
+			    else{
+			      	// The document was not loaded correctly! Inform the user:
+					var error = OpenLayers.Ajax.getParseErrorText(xml);
+			      	//alert(error);
+				  	var newwindow;
+					//Encode the xml inside the error message
+					//encodedHtml = error;
+			    	//encodedHtml = encodedHtml.replace(/</g,"&lt;");
+			    	//encodedHtml = encodedHtml.replace(/>/g,"&gt;"); 
+					//popup a message windows to let the use copy the error
+					newwindow=window.open('','','menubar=1,scrollbars=1,width=400,height=300,resizable=1') ;
+					//menubar=1,location=1,status=1,
+					newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+					newwindow.document.writeln(OpenLayers.Ajax.escape(error));
+					newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+					newwindow.document.close();
+			    };
+				//return alert('the browser is not able to parse this GetCapabilities. Try with Firefox  ;-) ');
+				
+
+			} catch(e){
+				alert(e.description);
+			}
+		}
+		
+		if(typeof xml=='object'){
+			
+			
+			//Check exceptionsValue
+			var exceptions = xml.getElementsByTagName('Exception');
+			if(exceptions.length){
+				var aFormats = exceptions[0].getElementsByTagName('Format');
+				var exceptionsValue = this.WMSManager.exceptionsValue;
+				var formatExists = null;
+				var oFormats = [];
+				for(i=0;i<aFormats.length;i++){
+						//var format =(aFormats[i].textContent)? aFormats[i].textContent:aFormats[i].text;
+						//var format = OpenLayers.Ajax.getText(aFormats[i]);
+						try{
+						var format = OpenLayers.Ajax.getText(aFormats[i]);
+						} catch(e){alert(e)};
+						if(format ==exceptionsValue) formatExists = true;
+						else oFormats.push(format);
+				}
+				//if default format is not supported use the first usable
+				if(!formatExists) this.WMSManager.exceptionsValue = oFormats[0];
+			}
+			
+			
+			
+			//Check GetMap Formats
+			//var GetMap = xml.getElementsByTagName('GetMap');
+			var GetMap = xml.getElementsByTagName('GetMap');
+			if(GetMap.length){
+				var aFormats = GetMap[0].getElementsByTagName('Format');
+				var oFormats = [];
+				for(i=0;i<aFormats.length;i++){				
+						//var format =(aFormats[i].textContent)? aFormats[i].textContent:aFormats[i].text;
+						if(aFormats[i])var format = OpenLayers.Ajax.getText(aFormats[i]);
+						if(format == 'image/png' || format == 'image/jpeg' || format == 'image/gif')oFormats.push(format);
+				}
+				
+				this.WMSManager.aImageFormats = oFormats;
+				
+			}
+			
+			
+			//Check resolutionsValue for TileCache
+			var resolutions = xml.getElementsByTagName('Resolutions');
+			if(resolutions.length){
+				//var resolutionsS = resolutions[0].textContent;
+				var resolutionsS = OpenLayers.Ajax.getText(resolutions[0]);
+				if(resolutionsS.length){
+					var aResolutions = resolutionsS.split(' ');
+					//this.WMSManager.resolutionsValue = resolutionsS.replace(" ",",");
+					this.WMSManager.resolutionsValue = aResolutions;
+				} 
+				
+			}
+		 	
+			 //Print Layer List
+			 var aLayer = xml.getElementsByTagName('Layer');
+			 if(aLayer.length>0){
+				 //this.WMSManager.drawLayersForm(xml);
+				 this.WMSManager.drawLayersForm(xml);
+			 } 
+			 
+	 } else {
+		alert('connection error: response is not an object');
+	 }
+		
+    },
+	
+	
+	
+	
+	
+	
+    /** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    searchCatalogue: function(obj) {
+		var str = obj.WMSManager.catalogueInput.value;
+		console.log(str);
+         obj.WMSManager.catalogueLog.innerHTML ='';
+		 
+		 var url ="catalogue/fake_catalogue_response.xml";
+		 
+		 if(url.length>0) {
+			 this.catalogueURL = url;
+		 } else {
+			 alert('no server selected. please select one.');
+			 return;
+		 } 
+	    if (this.catalogueURL.indexOf('?') == -1)
+	    {
+	        this.catalogueURL = this.baseURL + '?';
+	    }
+	    else
+	    {
+	        if (this.catalogueURL.charAt( this.catalogueURL.length - 1 ) == '&')
+	            this.catalogueURL = this.catalogueURL.slice( 0, -1 );
+	    }
+		/*
+	    this.catalogueURL = this.catalogueURL+ "&service=WMS";
+	    this.catalogueURL = this.catalogueURL +  "&version=1.1.1";
+	    this.catalogueURL = this.catalogueURL + "&request=GetCapabilities";
+	    */
+		
+		obj.WMSManager.catalogueLog.innerHTML = "Loading Layers list... please wait...";
+        //$('wmsManagerOutput').innerHTML = this.baseURL;
+		//alert(this.baseURL);
+        OpenLayers.loadURL(url, null, obj, obj.WMSManager.parseCatalogueResponse);
+    },
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    parseCatalogueResponse: function(ajaxRequest) {
+		var text = ajaxRequest.responseText;
+		
+		//var oDomDoc = Sarissa.getDomDocument();
+	    
+		//myregexp = new RegExp('<!--[^(-->)]*-->');
+		text = text.replace(/<!--.*?-->/g, ''); //Helped with ESA server
+		text = text.replace(/\[.<!.*?>.\]/g, ''); //Helped with ESA server
+		text = text.replace(/<GetTileService>.*?GetTileService>/g, '');//skip NASA DTD error
+		
+		var xml = OpenLayers.parseXMLString(text);
+		console.log(xml);
+		if(xml == null) return alert('incorrect content: check your Catalogue url');
+		if(xml.childNodes.length==0) {
+			try{
+				if(OpenLayers.Ajax.getParseErrorText(xml) == OpenLayers.Ajax.PARSED_OK){
+			      // The document was parsed/loaded just fine, go on
+			      //alert(xml);
+				  alert('no Layers available on this server');
+			    } 
+			    else{
+			      	// The document was not loaded correctly! Inform the user:
+					var error = OpenLayers.Ajax.getParseErrorText(xml);
+			      	//alert(error);
+				  	var newwindow;
+					//Encode the xml inside the error message
+					//encodedHtml = error;
+			    	//encodedHtml = encodedHtml.replace(/</g,"&lt;");
+			    	//encodedHtml = encodedHtml.replace(/>/g,"&gt;"); 
+					//popup a message windows to let the use copy the error
+					newwindow=window.open('','','menubar=1,scrollbars=1,width=400,height=300,resizable=1') ;
+					//menubar=1,location=1,status=1,
+					newwindow.document.writeln('<html> <head> <title>Error Parsing GetCapabilties<\/title> <\/head> <body><pre><code>');
+					newwindow.document.writeln(OpenLayers.Ajax.escape(error));
+					newwindow.document.writeln('<\/code><\/pre> <\/body> <\/html>');
+					newwindow.document.close();
+			    };
+				//return alert('the browser is not able to parse this GetCapabilities. Try with Firefox  ;-) ');
+				
+
+			} catch(e){
+				alert(e.description);
+			}
+		}
+		//console.log('vicino');
+		if(typeof xml=='object'){
+			
+			//console.dirxml(xml);
+			//console.log('dentro');
+			 //Print Layer List
+			 var aLayer = xml.getElementsByTagName('Layer');
+			 if(aLayer.length>0){
+				 //this.WMSManager.drawLayersForm(xml);
+				 this.WMSManager.drawCatalogueForm(xml);
+				 //console.log('dentro layers');
+			 } 
+			 
+	 } else {
+		alert('connection error: response is not an object');
+	 }
+		
+    },
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    drawLayersForm: function(xml) {
+		
+		// DOM OBJECTS
+		var formObj = this.olServerList;
+		
+		
+		
+		//div to show layer info
+		var infoDiv = document.createElement('div');
+		infoDiv.className = 'wmsLayerListOutput';
+		
+		infoDiv.innerHTML = 'Click on a layer to have details';
+		
+		//alert('1');
+		//get Extent (to implent BoundingBox alternative) 
+		//this is a generical catch for a bbox the refining comes when layers are parsed
+		var bbox = xml.getElementsByTagName('LatLonBoundingBox')[0];
+		if(!bbox) bbox = xml.getElementsByTagName('BoundingBox')[0];
+		this.extent = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+		this.mapCenter = [((bbox.getAttribute('maxx') - bbox.getAttribute('minx'))/2),((bbox.getAttribute('maxy') - bbox.getAttribute('miny'))/2)];
+		
+		
+		//getCapabilities
+		var Capability = xml.getElementsByTagName('Capability')[0];
+		var layerCont = this.findChildByName(Capability,'Layer');
+		
+		
+		
+		var aLayers = this.findChildrenByName(layerCont,'Layer');
+		//var aLayers = layerCont.childNodes;
+		
+		//try to look for nested layers
+		//ex: http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?
+		var aLayersTemp = [];
+		
+		//alert(aLayers.length);
+		for(i=0;i<aLayers.length;i++){
+			try{
+		
+			//alert('i: '+i);
+			aLayersTemp.push(aLayers[i]);
+			var n = aLayers[i];
+			var nameNode = this.findChildByName(n,'Name');
+			//if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+			//else var Name = null;
+			if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+			else var Name = null;
+			
+			var titleNode = this.findChildByName(n,'Title');
+			//if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+			//else var Title = null;
+			if(titleNode)var Title = OpenLayers.Ajax.getText(titleNode);
+			else var Title = null;
+			
+			
+			var x  = n.firstChild;
+			} catch(e){alert(e)}
+			
+		    do {
+		    	if(x.nodeType==1 && x.nodeName=='Layer'){
+					
+					var nameNodeN = this.findChildByName(n,'Name');
+					var titleNodeN = this.findChildByName(n,'Title');
+					//alert(nameNodeN);
+					if(!nameNodeN && titleNodeN) aLayersTemp.push(x);
+				} 
+				 
+				x=x.nextSibling;
+				
+		    }while (x!=n.lastChild)
+			
+			
+		}
+		
+		
+		
+		//aLayers.concat(aLayersTemp);
+		aLayers = aLayersTemp;
+		//alert(aLayers.length);
+		
+		
+		var myselect = $('wmsLayerList');
+		if( myselect)myselect.parentNode.removeChild(myselect);
+		var select = document.createElement('select');
+		select.name = 'wmsLayerList';
+		//select.onchange = this.addWMSLayer;
+		select.id = 'wmsLayerList';
+		select.WMSManager = this;
+		//select.style.width = "220px";
+		select.multiple = 'true';
+		select.size = 5;
+		var j = 0;
+		//var opt = new Option( 'select a Layer', '', true, true );
+		//select[j++] = opt;
+		for(i=0;i<aLayers.length;i++){
+			try{
+			var nameNode = this.findChildByName(aLayers[i],'Name');
+			//if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+			//else var Name = null;
+			if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+			else var Name = null;
+			//alert(nameNode.data);
+			
+			
+			var titleNode = this.findChildByName(aLayers[i],'Title');
+			//if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+			//else var Title = null;
+			if(titleNode)var Title =OpenLayers.Ajax.getText(titleNode);
+			else var Title = null;
+			
+			
+			var abstractNode =  this.findChildByName(aLayers[i],'Abstract');
+			//if(abstractNode) var Abstract =(abstractNode.textContent)? abstractNode.textContent:abstractNode.text;
+			//else var Abstract = null;
+			if(abstractNode)var Abstract =OpenLayers.Ajax.getText(abstractNode);
+			else var Abstract = null;
+			
+			var queryable = aLayers[i].getAttribute('queryable');
+			
+			var qTitle = Title + ' (q)';
+			qTitle =(queryable==1)?qTitle :Title;
+			select[j++] = new Option(qTitle,Name,false,false);
+			select.options[i].Title = Title;
+						
+			//Legend sta dentro Style
+				var LegendURL = null;
+				
+				var legendNode = aLayers[i].getElementsByTagName('LegendURL')[0];
+				if(legendNode) {
+					var OnlineResourceNode = this.findChildByName(legendNode,'OnlineResource');
+					if(OnlineResourceNode){
+						 LegendURL = OnlineResourceNode.getAttribute('xlink:href');
+						//alert(LegendURL);
+					}
+					
+				}
+				
+					
+			//this should be changed with an <optgroup label="Title">
+			if(!Name && Title) {
+				select.options[i].disabled = true;
+			} else {
+				select.options[i].Name = Name;
+				select.options[i].Abstract = Abstract;
+				select.options[i].queryable = queryable;
+				select.options[i].LegendURL = LegendURL;
+				select.options[i].infoDiv = infoDiv;
+				select.onchange = 	function(){
+										var option = this[this.selectedIndex];
+										var outObj = option.infoDiv;
+										var queryable = (option.queryable>0)?'true -> (q)':'false';
+										var mess = '<b>Layer Name:</b><br>'+option.Name +'<br><br><b>Layer Title:</b><br>'+option.Title 
+														+'<br><br><b>Abstract:</b><br>'+option.Abstract+'<br><br><b>Queryable:</b><br>'+queryable;
+										outObj.innerHTML = mess;
+										
+										if(option.LegendURL)outObj.innerHTML += '<br><br><b>Legend Image:</b><br><img src="'+option.LegendURL+'">';
+										else outObj.innerHTML += '<br><br><b>Legend Image:</b><br>none';
+										
+									};
+			}
+			
+			
+			
+			
+			var bboxNode = this.findChildByName(aLayers[i],'BoundingBox');
+			var latbboxNode = this.findChildByName(aLayers[i],'LatLonBoundingBox');
+			
+			if (latbboxNode){
+				 var bbox = latbboxNode;
+				 var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+			} else if(bboxNode){
+				var bbox = bboxNode;
+				var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+			} else if(this.extent){
+				var BoundingBox = this.extent;
+			}
+			else  return alert('no bbox defined, check getCapabilities configuration');
+			
+			
+			
+			this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,LegendURL,queryable]);
+			}catch(e){alert(e);}
+			
+		}
+		//formObj.appendChild(select);
+		this.layerStuff.appendChild(select);
+		
+		//alert('5');
+		this.overlayButton = document.createElement('input');
+		this.overlayButton.name = 'WMSradioB';
+		this.overlayButton.className = 'wmsLayerButton';
+		this.overlayButton.type = 'checkbox';
+		this.overlayButton.value = 'overlay';
+		OpenLayers.Event.observe(this.overlayButton, "mouseup",  this.onOverlayClick.bindAsEventListener(this.overlayButton));
+		
+		var radioSoverlay = document.createElement('span');
+		radioSoverlay.innerHTML = 'overlay';
+		radioSoverlay.id = 'wmsLayerButtonSpan';
+		radioSoverlay.style.width = '5em';
+		radioSoverlay.style.border = '1px solid black';
+		radioSoverlay.button = this.overlayButton;
+		radioSoverlay.WMSManager = this;
+		
+		OpenLayers.Event.observe(radioSoverlay, "mouseup",  this.onOverlayClick.bindAsEventListener(this.overlayButton));
+		
+		var br = document.createElement('br');
+		
+		var button = document.createElement('input');
+		button.onclick = this.addWMSLayer;
+		button.WMSManager = this;
+		button.value = 'add layer';
+		button.type = 'button';
+		
+		
+		var layerBox = document.createElement('div');
+		layerBox.id = 'wmsLayerBox';
+		
+		//Buttons to switch layers up and down
+		var aSwitchUp = document.createElement("a");
+				aSwitchUp.innerHTML = '<span>&uarr;</span>';
+				aSwitchUp.className = 'olWMSLayerSwitch';
+				aSwitchUp.select = select;
+				aSwitchUp.onclick = function(){
+									var obj =  this.select;
+									//alert(obj[obj.selectedIndex].value);
+									var sel = new Array();
+									for (var i=0; i<obj.length; i++) {
+										if (obj[i].selected == true) {
+											sel[sel.length] = i;
+										}
+									}
+									for (i in sel) {
+										if (sel[i] != 0 && !obj[sel[i]-1].selected) {
+											var tmp = new Array((document.body.innerHTML ? obj[sel[i]-1].innerHTML : obj[sel[i]-1].text), obj[sel[i]-1].value, obj[sel[i]-1].style.color, obj[sel[i]-1].style.backgroundColor, obj[sel[i]-1].className, obj[sel[i]-1].id);
+											if (document.body.innerHTML) obj[sel[i]-1].innerHTML = obj[sel[i]].innerHTML;
+											else obj[sel[i]-1].text = obj[sel[i]].text;
+											obj[sel[i]-1].value = obj[sel[i]].value;
+											obj[sel[i]-1].style.color = obj[sel[i]].style.color;
+											obj[sel[i]-1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+											obj[sel[i]-1].className = obj[sel[i]].className;
+											obj[sel[i]-1].id = obj[sel[i]].id;
+											if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+											else obj[sel[i]].text = tmp[0];
+											obj[sel[i]].value = tmp[1];
+											obj[sel[i]].style.color = tmp[2];
+											obj[sel[i]].style.backgroundColor = tmp[3];
+											obj[sel[i]].className = tmp[4];
+											obj[sel[i]].id = tmp[5];
+											obj[sel[i]-1].selected = true;
+											obj[sel[i]].selected = false;
+										}
+									}
+								};
+		var aSwitchDown = document.createElement("a");
+				aSwitchDown.innerHTML = '<span>&darr;</span>';
+				aSwitchDown.className = 'olWMSLayerSwitch';
+				aSwitchDown.select = select;
+				aSwitchDown.onclick = function(){
+									var obj =  this.select;
+									//alert(obj[obj.selectedIndex].value);
+									var sel = [];
+									for (var i=obj.length-1; i>-1; i--) {
+										if (obj[i].selected == true) {
+											sel[sel.length] = i;
+										}
+									}
+									for (i in sel) {
+										if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
+											var tmp = new Array((document.body.innerHTML ? obj[sel[i]+1].innerHTML : obj[sel[i]+1].text), obj[sel[i]+1].value, obj[sel[i]+1].style.color, obj[sel[i]+1].style.backgroundColor, obj[sel[i]+1].className, obj[sel[i]+1].id);
+											if (document.body.innerHTML) obj[sel[i]+1].innerHTML = obj[sel[i]].innerHTML;
+											else obj[sel[i]+1].text = obj[sel[i]].text;
+											obj[sel[i]+1].value = obj[sel[i]].value;
+											obj[sel[i]+1].style.color = obj[sel[i]].style.color;
+											obj[sel[i]+1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+											obj[sel[i]+1].className = obj[sel[i]].className;
+											obj[sel[i]+1].id = obj[sel[i]].id;
+											if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+											else obj[sel[i]].text = tmp[0];
+											obj[sel[i]].value = tmp[1];
+											obj[sel[i]].style.color = tmp[2];
+											obj[sel[i]].style.backgroundColor = tmp[3];
+											obj[sel[i]].className = tmp[4];
+											obj[sel[i]].id = tmp[5];
+											obj[sel[i]+1].selected = true;
+											obj[sel[i]].selected = false;
+										}
+									}
+								};
+								
+		//Image type chooser
+		this.selectImageType = document.createElement('select');
+		this.selectImageType.className = 'wmsLayerSelectImageType';
+		//alert(this.aImageFormats.length);
+		
+		for(i=0;i<this.aImageFormats.length;i++){
+			var format = this.aImageFormats[i];
+			this.selectImageType[i]= new Option(format, format, false, false );
+		}
+		
+		//mount interface
+		layerBox.appendChild(aSwitchUp);
+		layerBox.appendChild(aSwitchDown);
+		layerBox.appendChild(radioSoverlay);
+		layerBox.appendChild(this.overlayButton);
+		layerBox.appendChild(br);
+		layerBox.appendChild(this.selectImageType);	
+		layerBox.appendChild(button);
+		layerBox.appendChild(infoDiv);	
+		
+		this.layerStuff.appendChild(layerBox);
+		//formObj.appendChild();
+		
+
+		
+		$('wmsManagerOutput').innerHTML = '';
+    },
+	
+	
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    drawCatalogueForm: function(xml) {
+		
+		if(!this.catalogueDivForm ){
+			this.catalogueDivForm = document.createElement('div');
+			this.catalogueDivForm.className = 'catalogueListOutput';
+			
+		} else {
+			this.catalogueDivForm.innerHTML = '';
+		}
+		
+		
+		
+		//div to show layer info
+		var infoDiv = document.createElement('div');
+		infoDiv.className = 'catalogueInfoDiv';
+		
+		infoDiv.innerHTML = 'Click on a layer to have details';
+		this.catalogueDivForm.appendChild(infoDiv);
+		this.catalogueLog.innerHTML = '';
+		
+		
+		var aLayers = xml.getElementsByTagName('Layer');
+		//var aLayers = layerCont.childNodes;
+		
+		console.log(aLayers);
+		//try to look for nested layers
+		//ex: http://www.andaluciajunta.es/IDEAndalucia/IDEAwms/wms/MTA100v?
+		var aLayersTemp = [];
+		//alert(aLayers.length);
+		for(i=0;i<aLayers.length;i++){
+			//try{
+		
+			//alert('i: '+i);
+			aLayersTemp.push(aLayers[i]);
+			
+			/*
+			 var n = aLayers[i];
+			var nameNode = this.findChildByName(n,'Name');
+			//if(nameNode)var Name =(nameNode.textContent)? nameNode.textContent:nameNode.text;
+			//else var Name = null;
+			if(nameNode)var Name =OpenLayers.Ajax.getText(nameNode);
+			else var Name = null;
+			
+			var titleNode = this.findChildByName(n,'Title');
+			//if(titleNode)var Title =(titleNode.textContent)? titleNode.textContent:titleNode.text;
+			//else var Title = null;
+			if(titleNode)var Title = OpenLayers.Ajax.getText(titleNode);
+			else var Title = null;
+			
+			 */
+			
+			/*var x  = n.firstChild;
+			
+			} catch(e){alert(e)}
+			
+		    do {
+		    	if(x.nodeType==1 && x.nodeName=='Layer'){
+					
+					var nameNodeN = this.findChildByName(n,'Name');
+					var titleNodeN = this.findChildByName(n,'Title');
+					//alert(nameNodeN);
+					if(!nameNodeN && titleNodeN) aLayersTemp.push(x);
+				} 
+				 
+				x=x.nextSibling;
+				
+		    }while (x!=n.lastChild)
+			*/
+			
+		}
+		
+		
+		
+		//aLayers.concat(aLayersTemp);
+		aLayers = aLayersTemp;
+		//alert(aLayers.length);
+		
+		
+		var myselect = $('wmsLayerList');
+		if( myselect)myselect.parentNode.removeChild(myselect);
+		var select = document.createElement('select');
+		select.name = 'wmsLayerList';
+		//select.onchange = this.addWMSLayer;
+		select.id = 'wmsLayerList';
+		select.WMSManager = this;
+		//select.style.width = "220px";
+		//select.multiple = 'true';
+		//select.size = 5;
+		var j = 0;
+		var opt = new Option( 'select a Layer', '', true, true );
+		select[j++] = opt;
+		for(i=1;i<=aLayers.length;i++){
+			try{
+			var layer= aLayers[i-1];
+			
+			var Name = layer.getAttribute('name');
+			console.log(Name);
+			//console.dirxml(aLayers[i]);
+			
+			
+			var Title = layer.getAttribute('title');
+			
+			var HREF = layer.getAttribute('href');
+			var Type = layer.getAttribute('type');
+			
+			var Abstract = layer.getAttribute('abstract');
+			
+			
+			var queryable = layer.getAttribute('queryable');
+			
+			var qTitle = Title + ' (q)';
+			qTitle =(queryable==1)?qTitle :Title;
+			select[j++] = new Option(qTitle,Name,false,false);
+			select.options[i].Title = Title;
+						
+			//Legend sta dentro Style
+				var LegendURL = null;
+				
+				var legendNode = layer.getElementsByTagName('LegendURL')[0];
+				if(legendNode) {
+					var OnlineResourceNode = this.findChildByName(legendNode,'OnlineResource');
+					if(OnlineResourceNode){
+						 LegendURL = OnlineResourceNode.getAttribute('xlink:href');
+						//alert(LegendURL);
+					}
+					
+				}
+				
+			
+			select.options[0].infoDiv = infoDiv;
+			//this should be changed with an <optgroup label="Title">
+			if(!Name && Title) {
+				select.options[i].disabled = true;
+			} else {
+				select.options[i].Name = Name;
+				select.options[i].Abstract = Abstract;
+				select.options[i].queryable = queryable;
+				select.options[i].LegendURL = LegendURL;
+				select.options[i].HREF = HREF;
+				select.options[i].Type = Type;
+				select.options[i].infoDiv = infoDiv;
+				select.onchange = 	function(){
+										var option = this[this.selectedIndex];
+										var outObj = option.infoDiv;
+										var queryable = (option.queryable>0)?'true -> (q)':'false';
+										if(option.Name){
+										var mess = '<b>Layer Name:</b><br>'+option.Name +'<br><br><b>Layer Title:</b><br>'+option.Title 
+														+'<br><br><b>Abstract:</b><br>'+option.Abstract
+														+'<br><br><b>HREF:</b><br>'+option.HREF
+														+'<br><br><b>Type:</b><br>'+option.Type
+														+'<br><br><b>Queryable:</b><br>'+queryable;
+												if(option.LegendURL)mess += '<br><br><b>Legend Image:</b><br><img src="'+option.LegendURL+'">';
+												else mess += '<br><br><b>Legend Image:</b><br>none';
+										} else {
+											var mess = 'choose a valid layer from the list'
+										}
+										outObj.innerHTML = mess;
+										
+										
+										
+									};
+			}
+			
+			
+			
+			
+			/*var bboxNode = this.findChildByName(layer,'BoundingBox');
+			var latbboxNode = this.findChildByName(layer,'LatLonBoundingBox');
+			
+			if (latbboxNode){
+				 var bbox = latbboxNode;
+				 var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+			} else if(bboxNode){
+				var bbox = bboxNode;
+				var BoundingBox = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+			} else if(this.extent){
+				var BoundingBox = this.extent;
+			}
+			else  return alert('no bbox defined, check getCapabilities configuration');
+			*/
+			BoundingBox = [-180,-90,180,90];
+			
+			//this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,LegendURL,queryable]);
+			this.aWMSLayers.push([Name,Title,Abstract,BoundingBox,HREF,queryable]);
+			}catch(e){alert(e);}
+			
+		}
+		//formObj.appendChild(select);
+		this.catalogueSelect = select;
+		this.catalogueDivForm.appendChild(select);
+		
+		//alert('5');
+		this.overlayButton = document.createElement('input');
+		this.overlayButton.name = 'WMSradioB';
+		this.overlayButton.className = 'wmsLayerButton';
+		this.overlayButton.type = 'checkbox';
+		this.overlayButton.value = 'overlay';
+		OpenLayers.Event.observe(this.overlayButton, "mouseup",  this.onOverlayClick.bindAsEventListener(this.overlayButton));
+		
+		var radioSoverlay = document.createElement('span');
+		radioSoverlay.innerHTML = 'overlay';
+		radioSoverlay.id = 'wmsLayerButtonSpan';
+		radioSoverlay.style.width = '5em';
+		radioSoverlay.style.border = '1px solid black';
+		radioSoverlay.button = this.overlayButton;
+		radioSoverlay.WMSManager = this;
+		
+		OpenLayers.Event.observe(radioSoverlay, "mouseup",  this.onOverlayClick.bindAsEventListener(this.overlayButton));
+		
+		var br = document.createElement('br');
+		
+		var button = document.createElement('input');
+		button.onclick = this.addCatalogueLayer;
+		button.WMSManager = this;
+		button.value = 'add layer';
+		button.type = 'button';
+		
+		
+		var layerBox = document.createElement('div');
+		layerBox.id = 'wmsLayerBox';
+		
+		//Buttons to switch layers up and down
+		var aSwitchUp = document.createElement("a");
+				aSwitchUp.innerHTML = '<span>&uarr;</span>';
+				aSwitchUp.className = 'olWMSLayerSwitch';
+				aSwitchUp.select = select;
+				aSwitchUp.onclick = function(){
+									var obj =  this.select;
+									//alert(obj[obj.selectedIndex].value);
+									var sel = new Array();
+									for (var i=0; i<obj.length; i++) {
+										if (obj[i].selected == true) {
+											sel[sel.length] = i;
+										}
+									}
+									for (i in sel) {
+										if (sel[i] != 0 && !obj[sel[i]-1].selected) {
+											var tmp = new Array((document.body.innerHTML ? obj[sel[i]-1].innerHTML : obj[sel[i]-1].text), obj[sel[i]-1].value, obj[sel[i]-1].style.color, obj[sel[i]-1].style.backgroundColor, obj[sel[i]-1].className, obj[sel[i]-1].id);
+											if (document.body.innerHTML) obj[sel[i]-1].innerHTML = obj[sel[i]].innerHTML;
+											else obj[sel[i]-1].text = obj[sel[i]].text;
+											obj[sel[i]-1].value = obj[sel[i]].value;
+											obj[sel[i]-1].style.color = obj[sel[i]].style.color;
+											obj[sel[i]-1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+											obj[sel[i]-1].className = obj[sel[i]].className;
+											obj[sel[i]-1].id = obj[sel[i]].id;
+											if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+											else obj[sel[i]].text = tmp[0];
+											obj[sel[i]].value = tmp[1];
+											obj[sel[i]].style.color = tmp[2];
+											obj[sel[i]].style.backgroundColor = tmp[3];
+											obj[sel[i]].className = tmp[4];
+											obj[sel[i]].id = tmp[5];
+											obj[sel[i]-1].selected = true;
+											obj[sel[i]].selected = false;
+										}
+									}
+								};
+		var aSwitchDown = document.createElement("a");
+				aSwitchDown.innerHTML = '<span>&darr;</span>';
+				aSwitchDown.className = 'olWMSLayerSwitch';
+				aSwitchDown.select = select;
+				aSwitchDown.onclick = function(){
+									var obj =  this.select;
+									//alert(obj[obj.selectedIndex].value);
+									var sel = [];
+									for (var i=obj.length-1; i>-1; i--) {
+										if (obj[i].selected == true) {
+											sel[sel.length] = i;
+										}
+									}
+									for (i in sel) {
+										if (sel[i] != obj.length-1 && !obj[sel[i]+1].selected) {
+											var tmp = new Array((document.body.innerHTML ? obj[sel[i]+1].innerHTML : obj[sel[i]+1].text), obj[sel[i]+1].value, obj[sel[i]+1].style.color, obj[sel[i]+1].style.backgroundColor, obj[sel[i]+1].className, obj[sel[i]+1].id);
+											if (document.body.innerHTML) obj[sel[i]+1].innerHTML = obj[sel[i]].innerHTML;
+											else obj[sel[i]+1].text = obj[sel[i]].text;
+											obj[sel[i]+1].value = obj[sel[i]].value;
+											obj[sel[i]+1].style.color = obj[sel[i]].style.color;
+											obj[sel[i]+1].style.backgroundColor = obj[sel[i]].style.backgroundColor;
+											obj[sel[i]+1].className = obj[sel[i]].className;
+											obj[sel[i]+1].id = obj[sel[i]].id;
+											if (document.body.innerHTML) obj[sel[i]].innerHTML = tmp[0];
+											else obj[sel[i]].text = tmp[0];
+											obj[sel[i]].value = tmp[1];
+											obj[sel[i]].style.color = tmp[2];
+											obj[sel[i]].style.backgroundColor = tmp[3];
+											obj[sel[i]].className = tmp[4];
+											obj[sel[i]].id = tmp[5];
+											obj[sel[i]+1].selected = true;
+											obj[sel[i]].selected = false;
+										}
+									}
+								};
+								
+		//Image type chooser
+		this.selectImageType = document.createElement('select');
+		this.selectImageType.className = 'wmsLayerSelectImageType';
+		//alert(this.aImageFormats.length);
+		
+		
+		//THIS IS BAD -> need request to getCapabilities to check.
+		this.aImageFormats = ['image/jpeg','image/png','img/gif'];
+		
+		for(i=0;i<this.aImageFormats.length;i++){
+			var format = this.aImageFormats[i];
+			this.selectImageType[i]= new Option(format, format, false, false );
+		}
+		
+		//mount interface
+		//this.catalogueDivForm.appendChild(aSwitchUp);
+		//this.catalogueDivForm.appendChild(aSwitchDown);
+		this.catalogueDivForm.appendChild(radioSoverlay);
+		this.catalogueDivForm.appendChild(this.overlayButton);
+		this.catalogueDivForm.appendChild(br);
+		this.catalogueDivForm.appendChild(this.selectImageType);
+		this.catalogueDivForm.appendChild(br);	
+		this.catalogueDivForm.appendChild(button);
+		this.catalogueDivForm.appendChild(infoDiv);	
+		
+		//this.layerStuff.appendChild(layerBox);
+		//formObj.appendChild();
+		
+		this.olCatalogue.appendChild(this.catalogueDivForm);
+		
+		$('wmsManagerOutput').innerHTML = '';
+    },
+	
+	
+	
+	/** 
+     * @private
+     *
+     */
+    findChildByName: function(n,name) {
+		if(!n)return false;
+		var x = n.firstChild;
+		while (x)
+	    {
+	    	if(x.nodeName==name) return x;
+			else if(x==n.lastChild)return null;
+			else x=x.nextSibling;
+	    }
+	},
+	
+	/** 
+     * @private
+     *
+     */
+    findChildrenByName: function(n,name) {
+		if(!n)return false;
+		var nodes=n.childNodes;
+		var aNode = [];
+		for (i=0;i<nodes.length;i++) {
+			var x=n.childNodes[i];
+			if(x.nodeName==name) aNode.push(x) ;
+		}
+		
+		return aNode;
+	},
+	
+	/** 
+     * @private
+     *
+     */
+    addWMSLayer: function() {
+        var select1 = $('wmsServerList');
+		var select2 = $('wmsLayerList');
+
+		 if(select1) var url = select1[select1.selectedIndex].value;
+		 else url ="";
+		 
+		 var layerA = [];
+		 var titleA = [];
+		 for(i = 0; i < select2.options.length; i++) {
+  			 if(select2.options[i].selected) {
+				layerA.push(select2.options[i].value);
+				if(select2.options[i].textContent)titleA.push(select2.options[i].textContent);
+				else titleA.push(select2.options[i].text);
+			}
+		}
+		 if(layerA.length) var layerName = layerA.join(',');
+		 else layerName ="";
+		 if(titleA.length) var title = titleA.join(', ');
+		 else title = layer;
+		 
+		 if(url.length<1) {
+			 alert('no server selected. please select one.');
+			 return;
+		 }
+		 if(layerName.length<1) {
+			 alert('no layer selected. please select one.');
+			 return;
+		 }
+		  
+	    if (url.indexOf('?') == -1)
+	    {
+	        url = url + '?';
+	    }
+	    else
+	    {
+	        if (url.charAt( url.length - 1 ) == '&')
+	            url = url.slice( 0, -1 );
+	    }
+		
+		
+		//create layer add with OL
+		/*
+		 * need to check if PNG is supported by the server
+		 */
+		
+		
+		//get selected layers features
+		var aExtents = [];
+		var aLegendUrl = [];
+		var aWMSLayers = [];
+		for(i=0;i<layerA.length;i++){
+			
+			for(j=0;j<this.WMSManager.aWMSLayers.length;j++){
+				var checkedLayer = layerA[i];
+				var listedLayer = this.WMSManager.aWMSLayers[j];
+				if(checkedLayer==listedLayer[0]) {
+					aExtents.push(listedLayer[3]); 
+					aLegendUrl.push(listedLayer[4]);
+					aWMSLayers.push(listedLayer);
+				}
+			}
+		}
+		
+		//alert(aLegendUrl);
+		
+		//set base or overlay
+		var overlayButton = this.WMSManager.overlayButton;
+		
+		
+		//check for base layer
+		var layers = this.WMSManager.map.layers.slice();
+		var hasBaseLayer = false;
+		for(i=0;i<layers.length;i++){
+			layer = layers[i];
+			if(layer.isBaseLayer) hasBaseLayer = true;
+		}
+		if(overlayButton.checked) if(!hasBaseLayer)return alert('you need a base layer before setting an overlay') ;
+		
+		//manage exceptions
+		if(this.WMSManager.exceptionsValue)
+			var exception = this.WMSManager.exceptionsValue;
+		 
+		 
+		 if(this.WMSManager.resolutionsValue){
+		 		var aResolutions = this.WMSManager.resolutionsValue;
+				var minRes = aResolutions[aResolutions.length -1];
+		 		var options = {resolutions: aResolutions, maxresolution: aResolutions[0], minResolution: minRes};
+		 		this.WMSManager.map.setOptions(options) ;
+			}
+			
+		//SRS - OL default srs is EPSG:4326 
+		/*var options = {srs: 'EPSG:4326'};
+				this.WMSManager.map.setOptions(options) ;	
+		*/
+		
+		//IMAGE TYPE
+		var imageType = this.WMSManager.selectImageType[this.WMSManager.selectImageType.selectedIndex].value;
+		
+		
+		if(overlayButton.checked){
+			if(imageType=='image/jpeg') return alert('you cannot sele