commit d45a74426e7a976b8e1f0fe382e493c102f01149
Author: Alessandro_N <alessandro.nastasi@ias.u-psud.fr>
Date:   Fri Apr 17 18:33:37 2015 +0200

    Updated code to create a 'Reset Form' button

diff --git a/szcluster-db/workspace/client-public/js/forms/components/BooleanCheckBox.js b/szcluster-db/workspace/client-public/js/forms/components/BooleanCheckBox.js
new file mode 100644
index 0000000..b0b5a13
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/BooleanCheckBox.js
@@ -0,0 +1,87 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.BooleanCheckbox
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.BooleanCheckbox = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.BooleanCheckbox = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+	    this.context = new sitools.common.forms.ComponentFactory(this.context);
+        this.cbGroup = new Ext.form.CheckboxGroup ({
+	        allowBlank : true,
+	        flex : 1,
+	        items : [ {
+	            xtype : "checkbox",
+	            checked : eval(this.defaultValues[0]),
+	            value : true
+	        } ]
+	    });
+	    Ext.apply(this, {
+	    	layout : "hbox",
+	    	stype : "sitoolsFormContainer",
+	    	overCls : 'fieldset-child',
+	        items : [this.cbGroup]
+	    });
+	    sitools.common.forms.components.BooleanCheckbox.superclass.initComponent.apply(
+	            this, arguments);
+   	    
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+	},
+
+    getSelectedValue : function () {
+	    if (this.cbGroup.getValue() && this.cbGroup.getValue().length > 0) {
+		    return "true";
+	    } else {
+		    return "false";
+	    }
+
+    },
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value
+	    };
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.cbGroup.reset();
+    }
+//  **************************************//
+
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/CheckBox.js b/szcluster-db/workspace/client-public/js/forms/components/CheckBox.js
new file mode 100644
index 0000000..b708964
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/CheckBox.js
@@ -0,0 +1,108 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.CheckBox
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.CheckBox = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.MultipleSelection.CheckBox = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+		this.context = new sitools.common.forms.ComponentFactory(this.context);
+        var items = [];
+		for (i = 0; i < this.values.length; i++) {
+			value = this.values[i];
+			items.push({
+			    value : value.value,
+			    boxLabel : value.value,
+			    name : this.code,
+			    checked : value.defaultValue,
+			    height : 25
+			    
+			});
+		}
+	    this.cbGroup = new Ext.form.CheckboxGroup ({
+	        allowBlank : true,
+	        columns : 3,
+	        flex : 1, 
+	        items : items
+	    });
+	    Ext.apply(this, {
+	    	height : this.height, 
+	        width : this.width,
+	        overCls : 'fieldset-child',
+	        layout : "hbox", 
+	        stype : "sitoolsFormContainer",
+	        items : [this.cbGroup]
+	    });
+   	    sitools.common.forms.components.CheckBox.superclass.initComponent.apply(this, arguments);
+   	    
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+    },
+
+    getSelectedValue : function () {
+	    var values = this.cbGroup.getValue();
+	    if (values && values.length > 0) {
+		    var selectedValues = [];
+		    for (var i = 0; i < values.length; i++) {
+		        if (Ext.isString(values[i].value) && ! Ext.isNumber(parseFloat(values[i].value))){
+		            values[i].value = values[i].value;
+		        }
+		        selectedValues.push(values[i].value);
+		    }
+		    return selectedValues;
+	    } else {
+		    return null;
+	    }
+    },
+    getParameterValue : function () {
+	    var values = this.getSelectedValue();
+	    if (!Ext.isArray(values)) {
+		    return null;
+	    }
+	    values = values.join("|");
+//	    return this.type + "|" + this.code + "|" + values;
+   	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : values
+	    };
+
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.cbGroup.reset();
+    }
+//  **************************************//
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/ConeSearch.js b/szcluster-db/workspace/client-public/js/forms/components/ConeSearch.js
new file mode 100644
index 0000000..ad5b641
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/ConeSearch.js
@@ -0,0 +1,380 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../AbstractComponentsWithUnit.js"
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * Abstract Class to build Container to display a Cone Search. 
+ * subclasses : 
+ * 		- sitools.common.forms.components.ConeSearchCartesien
+ *      - sitools.common.forms.components.ConeSearchPGSphere
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.AbstractConeSearch
+ * @extends sitools.common.forms.AbstractWithUnit
+ */
+sitools.common.forms.components.AbstractConeSearch = Ext.extend(sitools.common.forms.AbstractWithUnit, {
+    initComponent : function () {
+        this.context = new sitools.common.forms.ComponentFactory(this.context);
+        //formattage de extraParams : 
+        var extraParams = {};
+        Ext.each(this.extraParams, function (param) {
+            extraParams[param.name]= param.value;
+        }, this);
+        
+        this.extraParams = extraParams;
+        var unit;
+        //the administrator defines a dimension for this component
+        if (!Ext.isEmpty(this.dimensionId)) {
+            var unit = new Ext.Button({
+                scope : this, 
+                text : i18n.get('label.degree'), 
+                width : 100,
+                sitoolsType : 'unitbutton',
+                handler : function (b, e) {
+                    //inherited method 
+                    this.loadUnits(b, e);
+                }
+            });
+        }
+        else {
+            unit = new Ext.Container({
+				html : i18n.get('label.degree'),
+        		width : 100
+	    	});
+            
+        }
+        
+        //Build the defaults Values
+        var defaultRa = null;
+        var defaultDec = null;
+        var defaultThirdValue = null;
+        if (Ext.isArray(this.defaultValues) && this.defaultValues.length == 3) {
+        	defaultRa = this.defaultValues[0];
+        	defaultDec = this.defaultValues[1];
+        	defaultThirdValue = this.defaultValues[2];
+        }
+        
+	    this.raParam = new Ext.form.NumberField({
+	        fieldLabel : "RA", 
+	        allowBlank : true,
+	        decimalPrecision : 20, 
+	        anchor : "98%", 
+	        value : defaultRa, 
+	        flex : 1, 
+	        labelSeparator : ""
+	        
+	    });
+	    this.decParam = new Ext.form.NumberField({
+	        fieldLabel : "DEC", 
+	        allowBlank : true,
+	        decimalPrecision : 20, 
+	        anchor : "98%", 
+	        value : defaultDec, 
+	        flex : 1, 
+	        labelSeparator : ""
+	    });
+	    
+		this.thirdParam = new Ext.form.NumberField({
+			fieldLabel : this.getLabelThirdParam(), 
+			allowBlank : true,
+			decimalPrecision : 20, 
+	        value : defaultThirdValue, 
+	        flex : 1, 
+	        labelSeparator : ""
+		});
+
+		var thirdCont = new Ext.form.CompositeField({
+			labelWidth : 100,
+			fieldLabel : this.getLabelThirdParam(),
+			items : [this.thirdParam, unit], 
+        	labelSeparator : ""
+		});
+		
+		//build the resolver Name
+		this.targetName = new Ext.form.TextField({
+            flex : 1,
+            fieldLabel : i18n.get("label.targetName"),
+            enableKeyEvents : true,
+            listeners : {
+                scope : this,
+                change : function (field, newValue, oldValue) {
+                    this.nameResolverButton.setDisabled(Ext.isEmpty(newValue));
+                },
+                keyup : function () {
+                    this.nameResolverButton.setDisabled(Ext.isEmpty(this.targetName.getValue()));
+                }
+            }
+		});
+
+		
+		this.nameResolverButton = new Ext.Button({
+            scope : this,
+            id : 'resolveNameBtn',
+            handler : this.resolveTargetName, 
+            text : i18n.get('label.resolveName'), 
+            width : 100,
+            disabled : true
+        });
+		
+		var targetCmp = new Ext.form.FieldSet({
+			title : i18n.get('label.resolverName'), 
+			items : [
+				new Ext.form.CompositeField ({
+					items : [this.targetName, this.nameResolverButton]
+				})
+			]
+		});
+		
+		//Load the 3 fields into a form layout in the main container items
+		var items = [{
+        	layout : "form", 
+        	items : [ this.raParam, this.decParam, thirdCont], 
+        	flex : 3
+        }];
+        
+        //insert first the name Resolver if needed
+        if (this.extraParams.showTargetName && this.extraParams.showTargetName != "false") {
+        	items[0].items.unshift(targetCmp);
+        }
+		
+	    Ext.apply(this, {
+	        autoEl: 'div', 
+	        layout : 'hbox', 
+	        defaults : {
+	        	xtype : 'container',
+	        	autoEl : 'div'
+	        },
+	        items : items,
+	        overCls : 'fieldset-child',
+	        stype : "sitoolsFormContainer"
+	    });
+	    sitools.common.forms.components.AbstractConeSearch.superclass.initComponent.apply(
+	            this, arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+	/**
+	 * Return true if values are specified 
+	 * @return {Boolean}
+	 */
+    isValueDefined : function () {
+	    if (this.raParam.getValue() && this.decParam.getValue() && this.thirdParam.getValue()) {
+		    return true;
+	    } else {
+		    return false;
+	    }
+    },
+	/**
+	 * Return the ConeSearch value
+	 * @return {}
+	 */
+    getSelectedValue : function () {
+	    return {
+	        raParam : this.raParam.getValue(),
+	        decParam : this.decParam.getValue(),
+	        thirdParam : this.thirdParam.getValue()
+	    };
+    },
+    
+    /**
+     * Method to be called by the form 
+     * returns an object with type, code& value attributes
+     * @return {}
+     */
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (Ext.isEmpty(value) || Ext.isEmpty(value.raParam) || Ext.isEmpty(value.decParam) || Ext.isEmpty(value.thirdParam)) {
+		    return null;
+	    }
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value.raParam + "|" + value.decParam + "|" + value.thirdParam, 
+	    	userDimension : this.userDimension, 
+	    	userUnit : this.userUnit
+	    };
+	    
+    },
+    /**
+     * Name Resolver action. 
+     * Send a query as defined by the admin. 
+     * @param type
+     * 		the type
+     */
+    resolveTargetName : function () {
+    	
+    	var baseUrl = this.extraParams.resolveNameUrl;
+    	var url = baseUrl + "/" + this.targetName.getValue() + "/" + this.extraParams.coordSystem;
+		
+    	if (!Ext.isEmpty(this.extraParams.resolverName)){
+    		url += "?nameResolver=" + this.extraParams.resolverName;
+    	}
+    	
+    	this.getEl().mask();
+    	Ext.Ajax.request({
+    		url : url, 
+    		scope : this, 
+    		method : "GET", 
+    		success : function (ret) {
+    			try {
+    				var json = Ext.decode(ret.responseText);
+    				
+    				if (json.totalResults > 1){
+	    				this.choosePropertyType(json);
+    				}
+    				else {
+    					this.fillUpRADEC(json.features[0].geometry.coordinates);
+    				}
+    			}
+    			catch(err) {
+    				Ext.Msg.alert(i18n.get('label.error'), i18n.get("label.unableToParseRequest"));
+    				return;
+    			}
+    		}, 
+    		failure : alertFailure, 
+    		callback : function () {
+    			this.getEl().unmask();
+    		}
+    	})
+    },
+    
+    /**
+     * Choose a property type. 
+     * Define a type to fill up RA/DEC 
+     */
+    choosePropertyType : function (json) {
+    	
+    	var position = Ext.getCmp('resolveNameBtn').getPosition();
+    	
+    	var tabTypes = [];
+    	
+    	tabTypes.push({
+            	xtype : 'label',
+            	text : 'Select a Type : ',
+	            style : 'padding:3px; margin:auto; font-style:italic;'
+            });
+    	
+    	
+    	Ext.each(json.features, function(feat, ind, all){
+    		if(feat.properties.type){
+    			tabTypes.push({
+    				xtype : 'button',
+    				text : feat.properties.type,
+    				style : 'padding:3px; margin:auto;',
+    				scope : this,
+	            	handler : function(b, e){
+	            		this.fillUpRADEC(feat.geometry.coordinates);
+	            		Ext.getCmp('nameResolverTypeWin').close();
+	            }
+    			});
+    		}
+    	}, this);
+    	
+    	var popup = new Ext.Window({
+    		id  : 'nameResolverTypeWin',
+            x : position[0] + 4,
+            y : position[1] + 18,
+            title : '',
+            bodyStyle : 'background-color : #E4E8EC;',
+            frame:false,
+            closable : false,
+            resizable : false,
+            draggable : true,
+            items : tabTypes,
+            listeners : {
+            	deactivate : function (t){
+            		t.close();
+            	}
+            }
+        }).show();
+    },
+    
+    fillUpRADEC : function (coord){
+    	this.raParam.setValue(coord[0]);
+    	this.decParam.setValue(coord[1]);
+    },
+  
+    isValid : function () {
+        if(!this.isEmpty(this.raParam) || !this.isEmpty(this.decParam) || !this.isEmpty(this.decParam)) {
+            var valid = true;
+            valid &= this.checkTextFieldIsNotEmpty(this.raParam);
+            valid &= this.checkTextFieldIsNotEmpty(this.decParam);
+            valid &= this.checkTextFieldIsNotEmpty(this.thirdParam);
+            return valid;
+        } else {
+            return true;
+        }
+    },
+    
+    //private
+    checkTextFieldIsNotEmpty : function (field){
+        var valid = true;
+        if(this.isEmpty(field)){
+            field.markInvalid();
+            valid = false;
+        }
+        return valid;        
+    },
+    
+    isEmpty : function (field) {
+        return Ext.isEmpty(field.getValue())
+    },
+    
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+        this.raParam.reset();
+        this.decParam.reset();
+        this.thirdParam.reset();
+        this.targetName.reset();
+    }
+//  **************************************//
+	
+});
+
+/**
+ * Specification of sitools.common.forms.components.AbstractConeSearch
+ * @class sitools.common.forms.components.ConeSearchCartesien
+ * @extends sitools.common.forms.components.AbstractConeSearch
+ */
+sitools.common.forms.components.ConeSearchCartesien = Ext.extend(sitools.common.forms.components.AbstractConeSearch, {
+    getLabelThirdParam : function () {
+		return "Search Radius";
+    }
+});
+
+/**
+ * Specification of sitools.common.forms.components.AbstractConeSearch
+ * @class sitools.common.forms.components.ConeSearchPGSphere
+ * @extends sitools.common.forms.components.AbstractConeSearch
+ */
+sitools.common.forms.components.ConeSearchPGSphere = Ext.extend(sitools.common.forms.components.AbstractConeSearch, {
+    getLabelThirdParam : function () {
+		return "Radius";
+    }
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/DateBetween.js b/szcluster-db/workspace/client-public/js/forms/components/DateBetween.js
new file mode 100644
index 0000000..1401e30
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/DateBetween.js
@@ -0,0 +1,241 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.DateBetween
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.DateBetween = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.DateBetween = Ext.extend(Ext.Container, {
+    regToday : new RegExp("^\{\\$TODAY\}"), 
+    initComponent : function () {
+        this.context = new sitools.common.forms.ComponentFactory(this.context);
+        //formattage de extraParams : 
+        var extraParams = {};
+        Ext.each(this.extraParams, function (param) {
+            extraParams[param.name]= param.value;
+        }, this);
+        
+
+    	this.showTime = extraParams.showTime;
+        if (Ext.isString(this.showTime)) {
+        	this.showTime = extraParams.showTime == "true";
+        }
+        this.truncateDefaultValue = extraParams.truncateDefaultValue;
+        if (Ext.isString(this.truncateDefaultValue)) {
+        	this.truncateDefaultValue = extraParams.truncateDefaultValue == "true";
+        }
+        this.format = extraParams.format;
+    	
+        var dateFormat = this.format;
+        
+        var valueFrom = this.getDefaultValue(this.defaultValues[0]) ;
+		var valueTo = this.getDefaultValue(this.defaultValues[1]) ;
+		
+        this.fieldFrom = new Ext.form.DateField({
+            allowBlank : true,
+            format : dateFormat, 
+            flex : 1,
+            //height : this.height,
+            value : valueFrom, 
+            showTime : this.showTime,
+            listeners : {
+                scope : this,
+                change : function (field, newValue, oldValue) {
+                    this.fieldTo.setMinValue(newValue);
+                    this.fieldTo.validate();
+                }
+            }
+        });
+        this.fieldTo = new Ext.form.DateField({
+            allowBlank : true,
+            format : dateFormat, 
+            flex : 1,
+            //height : this.height,
+            value : valueTo, 
+            showTime : this.showTime,
+            minValue : valueFrom
+        });
+        Ext.apply(this, {
+            layout : 'hbox',
+            overCls : 'fieldset-child',
+            stype : "sitoolsFormContainer",
+
+            items : [this.fieldFrom, this.fieldTo ]
+        });
+        sitools.common.forms.components.DateBetween.superclass.initComponent.apply(
+                this, arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	var labels = this.label.split("|") || [];
+	    	switch (labels.length) {
+	    		case 0 : 
+	    			break;
+	    		case 1 : 
+	    			this.items.insert(0, new Ext.Container({
+			            border : false,
+			            html : labels[0],
+			            width : 100
+			        }));
+			        break;
+			    case 2 : 
+		        	this.items.insert(0, new Ext.Container({
+			            border : false,
+			            html : labels[0],
+			            width : 50
+			        }));
+		        	this.items.insert(2, new Ext.Container({
+			            border : false,
+			            html : labels[1],
+			            width : 50, 
+			            style : {
+			            	"padding-left" : "10px"
+			            }
+			        }));
+			        break;
+			    case 3 : 
+		        	this.items.insert(0, new Ext.Container({
+			            border : false,
+			            html : labels[0],
+			            width : 50
+			        }));
+		        	this.items.insert(1, new Ext.Container({
+			            border : false,
+			            html : labels[1],
+			            width : 50, 
+			            style : {
+			            	"padding-left" : "10px"
+			            }
+			        }));
+			        this.items.insert(3, new Ext.Container({
+			            border : false,
+			            html : labels[2],
+			            width : 50, 
+			            style : {
+			            	"padding-left" : "10px"
+			            }
+			        }));
+			        break;
+	    	}
+	    }
+
+    },
+
+    /**
+     * The code of the parameter to notify changed event.
+     */
+    code : null,
+
+    /**
+     * The left bound of the period.
+     */
+    fieldFrom : null,
+
+    /**
+     * The right bound of the period.
+     */
+    fieldTo : null,
+
+    notifyValueSelected : function () {
+        this.parent.notifyValueChanged(this.code);
+    },
+
+    isValueDefined : function () {
+        if (this.fieldFrom.getValue() && this.fieldTo.getValue()) {
+            return true;
+        } else {
+            return false;
+        }
+    },
+
+    getSelectedValue : function () {
+        return {
+            from : this.fieldFrom.getValue(),
+            to : this.fieldTo.getValue()
+        };
+    },
+    
+    getParameterValue : function () {
+        var value = this.getSelectedValue();
+        if (Ext.isEmpty(value) || Ext.isEmpty(value.from) || Ext.isEmpty(value.to)) {
+            return null;
+        }
+        var format = SITOOLS_DATE_FORMAT;
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value.from.format(format) + "|" + value.to.format(format)
+	    };
+
+//        return this.type + "|" + this.code + "|" + value.from.format(format) + "|" + value.to.format(format) ;
+    }, 
+    
+    /**
+     * return a date truncated or not depending on this.truncateDefaultValue
+     * @param {String} val A string representing date a SITOOLS_DATE_FORMAT or containg {$TODAY}
+     * @return {Date} the date 
+     */
+    getDefaultValue : function (val) {
+		var result;
+		if (Ext.isEmpty(val)) {
+			return null;
+		}
+		else {
+			if (Ext.isDate(Date.parseDate(val, SITOOLS_DATE_FORMAT))) {
+				result = Date.parseDate(val, SITOOLS_DATE_FORMAT);
+			}
+			else {
+				if (this.regToday.test(val)) {
+		        	try {
+		        		result = sitools.common.utils.Date.stringWithTodayToDate(val);
+		        	}
+		        	catch (err) {
+		        		return null;
+		        	}
+		        	
+		        }
+			}
+		}
+		
+		if (this.truncateDefaultValue) {
+			return result.clearTime();
+		}
+		else {
+			return result;
+		}
+    },
+    
+    isValid : function () {
+        return (this.fieldFrom.isValid() && this.fieldTo.isValid());
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.fieldFrom.reset();
+	this.fieldTo.reset();
+    }
+//  **************************************//
+
+});
+
diff --git a/szcluster-db/workspace/client-public/js/forms/components/ListBoxMultiple.js b/szcluster-db/workspace/client-public/js/forms/components/ListBoxMultiple.js
new file mode 100644
index 0000000..225ab57
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/ListBoxMultiple.js
@@ -0,0 +1,157 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.ListBoxMultiple
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.ListBoxMultiple = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.MultipleSelection.ListBox = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+		this.context = new sitools.common.forms.ComponentFactory(this.context);
+        var items = [];
+		this.defaultValues = [];
+		for (i = 0; i < this.values.length; i++) {
+			value = this.values[i];
+			items.push([ value.value, value.value ]);
+			if (value.defaultValue) {
+				this.defaultValues.push(value.value);
+			}
+		}
+
+    	var store;
+        if (this.valueSelection == 'S') {
+            store = new Ext.data.ArrayStore({
+                fields : ['value','text'],
+                data : items, 
+                valueField : 'value', 
+                displayField : 'text'
+            });
+        } else {
+            var params = {
+                colModel : [ this.code ],
+                distinct : true
+            };
+            store = new Ext.data.JsonStore({
+                fields : [ {
+                    name : 'value',
+                    mapping : this.code
+                }, {
+                    name : 'text',
+                    mapping : this.code
+                } ],
+                autoLoad : !Ext.isEmpty(this.dataUrl) ? true : false,
+                root : 'data',
+                restful : true,
+                url : this.dataUrl + "/records",
+                baseParams : params, 
+                valueField : 'value', 
+                displayField : 'text'
+            });
+        }   
+        this.multiSelect = new Ext.ux.form.MultiSelect ({
+	        store : store,
+	        width : this.width,
+	        height : this.height - 10,
+	        flex : 1, 
+	        delimiter : '|', 
+			stype : "sitoolsFormItem", 
+            listeners : {
+                scope : this, 
+                'click' : function () {
+                    this.form.fireEvent('componentChanged', this.form, this);
+                },
+                'afterRender' : function () {
+				    this.setSelectedValue(this.defaultValues);
+			    }
+            }
+	    });
+        Ext.apply(this, {
+	    	height : this.height, 
+	        width : this.width, 
+	        layout : "hbox",
+	        overCls : 'fieldset-child',
+	        stype : "sitoolsFormContainer",
+	        items : [this.multiSelect]
+	    });
+	    sitools.common.forms.components.ListBoxMultiple.superclass.initComponent.apply(this,
+	            arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+
+    /**
+	 * The code of the parameter to notify changed event.
+	 */
+    code : null,
+
+    isValueDefined : function () {
+	    if (this.multiSelect.getValue() && this.multiSelect.getValue() !== "") {
+		    return true;
+	    } else {
+		    return false;
+	    }
+    },
+
+    getSelectedValue : function () {
+	    if (this.multiSelect.getValue()) {
+		    return this.multiSelect.getValue();
+	    } else {
+		    return null;
+	    }
+    },
+    
+
+    setSelectedValue : function (values) {
+	    this.multiSelect.setValue(values);
+    },
+    
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (Ext.isEmpty(value)) {
+		    return null;
+	    }
+//	    return this.type + "|" + this.code + "|" + value;
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value
+	    };
+	    
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.multiSelect.reset();
+    }
+//  ***************************************//
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/Listbox.js b/szcluster-db/workspace/client-public/js/forms/components/Listbox.js
new file mode 100644
index 0000000..ae7bfcb
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/Listbox.js
@@ -0,0 +1,158 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.ListBox
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.ListBox = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.MultipleSelection.ListBox = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+		this.context = new sitools.common.forms.ComponentFactory(this.context);
+        var items = [];
+		this.defaultValues = [];
+		for (i = 0; i < this.values.length; i++) {
+			value = this.values[i];
+			items.push([ value.value, value.value ]);
+			if (value.defaultValue) {
+				this.defaultValues.push(value.value);
+			}
+		}
+
+    	var store;
+        if (this.valueSelection == 'S') {
+            store = new Ext.data.ArrayStore({
+                fields : ['value','text'],
+                data : items, 
+                valueField : 'value', 
+                displayField : 'text'
+            });
+        } else {
+            var params = {
+                colModel : [ this.code ],
+                distinct : true
+            };
+            store = new Ext.data.JsonStore({
+                fields : [ {
+                    name : 'value',
+                    mapping : this.code
+                }, {
+                    name : 'text',
+                    mapping : this.code
+                } ],
+                autoLoad : !Ext.isEmpty(this.dataUrl) ? true : false,
+                root : 'data',
+                restful : true,
+                url : this.dataUrl + "/records",
+                baseParams : params, 
+                valueField : 'value', 
+                displayField : 'text'
+            });
+        }   
+        this.multiSelect = new Ext.ux.form.MultiSelect ({
+	        store : store,
+	        width : this.width,
+	        height : this.height - 10,
+	        flex : 1, 
+	        delimiter : '|', 
+			stype : "sitoolsFormItem", 
+            listeners : {
+                scope : this, 
+                'click' : function () {
+                    this.form.fireEvent('componentChanged', this.form, this);
+                },
+                'afterRender' : function () {
+				    this.setSelectedValue(this.defaultValues);
+			    }
+            }
+	    });
+        Ext.apply(this, {
+	    	height : this.height, 
+	        width : this.width,
+	        overCls : 'fieldset-child',
+	        layout : "hbox", 
+	        stype : "sitoolsFormContainer",
+	        items : [this.multiSelect]
+	    });
+	    sitools.common.forms.components.ListBox.superclass.initComponent.apply(this,
+	            arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+
+    /**
+	 * The code of the parameter to notify changed event.
+	 */
+    code : null,
+
+    isValueDefined : function () {
+	    if (this.multiSelect.getValue() && this.multiSelect.getValue() !== "") {
+		    return true;
+	    } else {
+		    return false;
+	    }
+    },
+
+    getSelectedValue : function () {
+	    if (this.multiSelect.getValue()) {
+		    return this.multiSelect.getValue();
+	    } else {
+		    return null;
+	    }
+    },
+    
+
+    setSelectedValue : function (values) {
+	    this.multiSelect.setValue(values);
+    },
+    
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (Ext.isEmpty(value)) {
+		    return null;
+	    }
+//	    return this.type + "|" + this.code + "|" + value;
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value
+	    };
+	    
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.multiSelect.reset();
+    }
+//  **************************************//
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/NumberBetween.js b/szcluster-db/workspace/client-public/js/forms/components/NumberBetween.js
index 162b2d2..0746a83 100644
--- a/szcluster-db/workspace/client-public/js/forms/components/NumberBetween.js
+++ b/szcluster-db/workspace/client-public/js/forms/components/NumberBetween.js
@@ -22,6 +22,7 @@
  * @include "../ComponentFactory.js"
  */
 Ext.ns('sitools.common.forms.components');
+
 /**
  * A number between form component. 
  * @cfg {string} parameterId Id of the future component.
@@ -71,6 +72,12 @@ sitools.common.forms.components.NumericBetween = Ext.extend(sitools.common.forms
 	        flex : 1, 
 	        //height : this.height,
 
+                /* Comment here and uncomment line 95 for the 2nd option */
+	        /*value : this.defaultValues[0],
+		fieldClass : "defaultGray",
+		focusClass : "textblack",*/
+                /****/
+
 		validator : function (value) {
 		        if (Ext.isEmpty(this.ownerCt.fieldTo.getValue())) {
 			        return true;
@@ -95,6 +102,12 @@ sitools.common.forms.components.NumericBetween = Ext.extend(sitools.common.forms
 	        flex : 1,
 	        //height : this.height,
 
+ 		/* Comment here and uncomment line 124 for the 2nd option */
+	        /*value : this.defaultValues[1],
+		fieldClass : "defaultGray",
+                focusClass : "textblack",*/
+		/****/
+
 		validator : function (value) {
 		        if (value < this.ownerCt.fieldFrom.getValue()) {
 			        return "invalid Value";
diff --git a/szcluster-db/workspace/client-public/js/forms/components/NumberFieldUser.js b/szcluster-db/workspace/client-public/js/forms/components/NumberFieldUser.js
new file mode 100644
index 0000000..3838994
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/NumberFieldUser.js
@@ -0,0 +1,159 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../AbstractComponentsWithUnit.js"
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * A number Field form component. 
+ * @cfg {string} parameterId Id of the future component.
+ * @cfg {Array} code Array of string representing columns alias attached to this component
+ * @cfg {string} type Defines wich unique type of component it is.
+ * @cfg {string} label The label of the form component.
+ * @cfg {numeric} height height of the future component.
+ * @cfg {numeric} widthBox width of the future component.
+ * @cfg {string} valueSelection "S" for specific Selection, "D" for data selection.
+ * @cfg {string} dataUrl the url to request the data in case of valueSelection == "D".
+ * @cfg {boolean} autoComplete for TEXTFIELD, autoComplete configuration of future Ext.form.Textfield.
+ * @cfg {string} formId The form id that contains this component.
+ * @cfg {string} dimensionId The sitools units dimension id.
+ * @cfg {string} css An optional css to add to this component.
+ * @cfg {Array} defaultValues Array of default values.
+ * @cfg {} datasetCm the dataset ColumnModel object
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.NumberField
+ * @extends sitools.common.forms.AbstractWithUnit
+ */
+sitools.common.forms.components.NumberField = Ext.extend(sitools.common.forms.AbstractWithUnit, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.NumberFieldUser = Ext.extend(sitools.common.forms.AbstractWithUnit, {
+
+    /**
+	 * The numeric field
+	 */
+    field : null,
+
+    initComponent : function () {
+        this.context = new sitools.common.forms.ComponentFactory(this.context);
+        
+                
+        var extraParams = {};
+        Ext.each(this.extraParams, function (param) {
+            extraParams[param.name]= param.value;
+        }, this);
+        
+        this.extraParams = extraParams;
+	    
+	    var unit = this.getUnitComponent();
+        
+	    this.field = new Ext.form.NumberField({
+	        allowBlank : true,
+	        flex : 1,
+	        //height : this.height,
+	        value : this.defaultValues[0],
+	        decimalPrecision : 20
+	    });
+	    var items = [this.field];
+        
+        if (!Ext.isEmpty(unit)) {
+        	items.push(unit);
+        }
+	    
+	    Ext.apply(this, {
+	        layout : 'hbox',
+	        stype : "sitoolsFormContainer",
+	        overCls : 'fieldset-child',
+			defaults : {
+	        	xtype : 'container',
+	        	autoEl : 'div'
+	        },
+	        items : items
+	    });
+	    sitools.common.forms.components.NumberField.superclass.initComponent.apply(
+	            this, arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+
+    /**
+     * Notify the parent of any change
+     * @method
+     */
+    notifyValueSelected : function () {
+	    this.parent.notifyValueChanged(this.code);
+    },
+
+    /**
+     * Return if the value is defined.
+     * @method
+     * @return {Boolean} 
+     */
+    isValueDefined : function () {
+	    if (this.fieldFrom.getValue()) {
+		    return true;
+	    } else {
+		    return false;
+	    }
+    },
+
+    /**
+     * Get the selected Value
+     * @return {Numeric} the selected Value
+     */
+    getSelectedValue : function () {
+	    return this.field.getValue();
+    },
+    
+    /**
+     * Returns the value to request corresponding to the Filter API.
+     * @return {String} parameter filter value
+     */
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (Ext.isEmpty(value) || Ext.isEmpty(value)) {
+		    return null;
+	    }
+	    var result = this.type + "|" + this.code + "|" + value;
+	    if (!Ext.isEmpty(this.userDimension) && !Ext.isEmpty(this.userUnit)){
+	    	result += "|" + this.userDimension + "|" + this.userUnit;
+	    }
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value, 
+	    	userDimension : this.userDimension, 
+	    	userUnit : this.userUnit
+	    };
+    },
+
+    //  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.field.reset();
+    },
+    //
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/OneOrBetween.js b/szcluster-db/workspace/client-public/js/forms/components/OneOrBetween.js
new file mode 100644
index 0000000..84f79c2
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/OneOrBetween.js
@@ -0,0 +1,228 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools, i18n*/
+/*
+ * @include "../AbstractComponentsWithUnit.js"
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * A number between form component. 
+ * @cfg {string} parameterId Id of the future component.
+ * @cfg {Array} code Array of string representing columns alias attached to this component
+ * @cfg {string} type Defines wich unique type of component it is.
+ * @cfg {string} label The label of the form component.
+ * @cfg {numeric} height height of the future component.
+ * @cfg {numeric} widthBox width of the future component.
+ * @cfg {string} valueSelection "S" for specific Selection, "D" for data selection.
+ * @cfg {string} dataUrl the url to request the data in case of valueSelection == "D".
+ * @cfg {boolean} autoComplete for TEXTFIELD, autoComplete configuration of future Ext.form.Textfield.
+ * @cfg {string} formId The form id that contains this component.
+ * @cfg {string} dimensionId The sitools units dimension id.
+ * @cfg {string} css An optional css to add to this component.
+ * @cfg {Array} defaultValues Array of default values.
+ * @cfg {} datasetCm the dataset ColumnModel object
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.OneOrBetween
+ * @extends sitools.common.forms.AbstractWithUnit
+ */
+sitools.common.forms.components.OneOrBetween = Ext.extend(sitools.common.forms.AbstractWithUnit, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.OneOrBetween = Ext.extend(sitools.common.forms.AbstractWithUnit, {
+    /**
+	 * the first value.
+	 */
+    fieldOne : null,
+
+    /**
+	 * The left bound of the period.
+	 */
+    fieldFrom : null,
+
+    /**
+	 * The right bound of the period.
+	 */
+    fieldTo : null,
+
+
+    initComponent : function () {
+        this.context = new sitools.common.forms.ComponentFactory(this.context);
+        
+        //formattage de extraParams : 
+	    var unit = this.getUnitComponent();
+        
+	    this.fieldOne = new Ext.form.NumberField({
+	        allowBlank : true,
+	        //height : this.height,
+	        value : this.defaultValues[0],
+	        flex : 2,
+	        listeners :
+            {
+                scope : this,
+		        change : function () {
+			        this.fieldTo.setValue("");
+			        this.fieldFrom.setValue("");
+		        }
+	        }, 
+	        decimalPrecision : 20
+	    });
+        
+	    this.fieldFrom = new Ext.form.NumberField({
+	        allowBlank : true,
+	        //height : this.height,
+	        flex : 2,
+	        validator : function (value) {
+		        if (Ext.isEmpty(this.ownerCt.fieldTo.getValue())) {
+			        return true;
+		        }
+		        if (value > this.ownerCt.fieldTo.getValue()) {
+			        return "invalid Value";
+		        } else {
+			        return true;
+		        }
+	        },
+	        listeners : {
+		        change : function () {
+			        this.ownerCt.fieldOne.setValue("");
+		        }
+	        }, 
+	        decimalPrecision : 20
+	    });
+	    this.fieldTo = new Ext.form.NumberField({
+	        allowBlank : true,
+	        //height : this.height,
+	        flex : 2,
+	        validator : function (value) {
+		        if (value < this.ownerCt.fieldFrom.getValue()) {
+			        return "invalid Value";
+		        } else {
+			        return true;
+		        }
+	        },
+	        listeners : {
+		        change : function () {
+			        this.ownerCt.fieldOne.setValue("");
+		        }
+	        }, 
+	        decimalPrecision : 20
+	    });
+	    var items = [this.fieldOne, new Ext.Container({
+            border : false,
+            html : i18n.get('label.or'),
+            width : 35
+        }), new Ext.Container({
+            border : false,
+            html : i18n.get('label.min'),
+            width : 35
+        }), this.fieldFrom, new Ext.Container({
+            border : false,
+            html : i18n.get('label.max'),
+            width : 35
+        }), this.fieldTo];
+        if (!Ext.isEmpty(unit)) {
+        	items.push(unit);
+        }
+	    Ext.apply(this, {
+	        layout : 'hbox',
+	        columns : Ext.isEmpty(unit) ? 6 : 7,
+	        fieldLabel : this.label,
+	        overCls : 'fieldset-child',
+	        stype : "sitoolsFormContainer",
+
+	        items : items
+	    });
+	     sitools.common.forms.components.OneOrBetween.superclass.initComponent
+                                .apply( this, arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+
+    /**
+     * Notify the parent of any change
+     * @method
+     */
+    notifyValueSelected : function () {
+	    this.parent.notifyValueChanged(this.code);
+    },
+
+    /**
+     * Return if at least one value is defined.
+     * @method
+     * @return {Boolean} 
+     */
+    isValueDefined : function () {
+	    var value = this.getSelectedValue();
+	    return !(Ext.isEmpty(value) || (Ext.isEmpty(value.from) && Ext.isEmpty(value.to) && Ext.isEmpty(value.one)));
+    },
+
+    /**
+     * Get the selected Value
+     * @return {} the selected Value {
+     * 	one : one value, 
+     *  from : from value, 
+     * 	to : to value
+     * }
+     */
+    getSelectedValue : function () {
+	    return {
+	        one : this.fieldOne.getValue(),
+	        from : this.fieldFrom.getValue(),
+	        to : this.fieldTo.getValue()
+	    };
+    },
+
+    /**
+     * Returns the value to request corresponding to the Filter API.
+     * @return {String} parameter filter value
+     */
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (!this.isValueDefined()) {
+		    return null;
+	    }
+
+	    var result = this.type + "|" + this.code + "|" + value.one + "|" + value.from+ "|" + value.to;
+	    if (!Ext.isEmpty(this.userDimension) && !Ext.isEmpty(this.userUnit)){
+	    	result += "|" + this.userDimension + "|" + this.userUnit;
+	    }
+	   	return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value.one + "|" + value.from + "|" + value.to, 
+	    	userDimension : this.userDimension, 
+	    	userUnit : this.userUnit
+	    };
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+        this.fieldOne.reset();
+        this.fieldFrom.reset();
+	this.fieldTo.reset();
+    }
+//  ***************************************//
+
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/PlanckType.js b/szcluster-db/workspace/client-public/js/forms/components/PlanckType.js
new file mode 100644
index 0000000..e63e810
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/PlanckType.js
@@ -0,0 +1,153 @@
+/***************************************
+ * Copyright 2011 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+ * 
+ * This file is part of SITools2.
+ * 
+ * SITools2 is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * SITools2 is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+ ***************************************/
+/*global Ext, sitools*/
+//Ext.ns('sitools.component.users.SubSelectionParameters.SingleSelection');
+Ext.ns('sitools.common.forms.components')
+
+//sitools.component.users.SubSelectionParameters.SingleSelection.PlanckType = Ext.extend(Ext.Container, {
+
+sitools.common.forms.components.PlanckType = Ext.extend(Ext.Container, {
+
+	initComponent : function () {
+		var defaultValue = "", value, items=[];
+		items.push(['', '']);
+		/*items.push(['20', 'Known clusters (type = 20)']);
+		items.push(['10', 'New confirmed (type = 10)']);
+		items.push(['1', 'New candidates-classe 1 (type = 1)']);
+		items.push(['2', 'New candidates-classe 2 (type = 2)']);
+		items.push(['3', 'New candidates-classe 3 (type = 3)']);*/
+		items.push(['20', 'Known clusters']);
+		items.push(['10', 'New confirmed']);
+		items.push(['1', 'New candidates']);
+
+
+		var store;
+		store = new Ext.data.ArrayStore({
+			fields : [ 'id', 'value' ],
+			data : items
+		});
+
+		this.combo = new Ext.form.ComboBox ({
+			store : store,
+			parameterId : this.parameterId, 
+			sParentParam : this.parentParam, 
+			valueField : 'id',
+			displayField : 'value',
+			typeAhead : true,
+			mode : 'local',
+			triggerAction : 'all',
+			selectOnFocus : true,
+			allowBlank : true,
+			editable : false,
+			autoSelect : false,
+			flex : 1, 
+			height : this.height,
+			value : defaultValue,
+			tpl : '<tpl for="."><div class="x-combo-list-item comboItem">{value}</div></tpl>', 
+			stype : "sitoolsFormItem", 
+			/**
+			 * The Parent Window.
+			 */
+			parent : "panelResultForm" + this.formId, 
+
+			/**
+			 * The code of the parameter to notify changed event.
+			 */
+			code : this.code,
+			anchor : '90%', 
+			listeners : {
+				scope : this, 
+				'select' : function () {
+					var parentPanel = this.ownerCt.ownerCt;
+					parentPanel.fireEvent('componentChanged', parentPanel, this);
+				}
+			}
+		});
+		
+		Ext.apply(this, {
+			stype : "sitoolsFormContainer",
+			layout : "hbox",
+			items : [new Ext.Container({
+				border : false,
+				html : this.label,
+				width : 50
+			}), this.combo, new Ext.Container({border : false,
+				html : '&nbsp;'}), new Ext.Container({
+				border : false,
+				html : '&nbsp;',
+				width : 5
+			})]
+		});
+		//sitools.component.users.SubSelectionParameters.SingleSelection.PlanckType.superclass.initComponent.apply(this,
+		sitools.common.forms.components.PlanckType.superclass.initComponent.apply(this,
+				arguments);
+	},
+
+	notifyValueSelected : function () {
+		this.parent.notifyValueChanged(this.code);
+	},
+
+	isValueDefined : function () {
+		if (this.combo.getValue() && this.combo.getValue() !== "") {
+			return true;
+		} else {
+			return false;
+		}
+	},
+	getSelectedValue : function () {
+		if (this.combo.getValue() && this.combo.getValue() !== "") {
+			return this.combo.getValue();
+		} else {
+			return null;
+		}
+	},
+	setSelectedValue : function (value) {
+		this.combo.setValue(value);
+	},
+	getParameterValue : function () {
+		var value = this.getSelectedValue();
+		if (Ext.isEmpty(value)) {
+			return null;
+		}
+		
+//		alert( this.type + "|" + value);
+//		return this.type + "|" + this.code + "|" + value + "|" + probaval;
+		//return this.type + "|" + value;
+		if (value == "1") {
+			return {
+			    	type : this.type, 
+		    		code : "validation", 
+				value : '2'+"|"+'1'+"|"+'3'
+			}
+		} 
+		return {
+			type : this.type,
+                        code : "validation",
+                       	value : value
+		}
+	},
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.combo.reset();
+    }
+//  ***************************************//
+
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/Radio.js b/szcluster-db/workspace/client-public/js/forms/components/Radio.js
new file mode 100644
index 0000000..c27aac5
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/Radio.js
@@ -0,0 +1,126 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.Radio
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.Radio = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.Radio = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+		this.context = new sitools.common.forms.ComponentFactory(this.context);
+        var value;
+		var items = [];
+		for (i = 0; i < this.values.length; i++) {
+			value = this.values[i];
+			items.push({
+			    value : value.value,
+			    boxLabel : value.value,
+			    name : this.code[0],
+			    checked : value.defaultValue
+			});
+		}
+
+    	this.radioGroup = new Ext.form.RadioGroup({
+	        allowBlank : true,
+	        //height : this.height,
+	        items : items, 
+	        flex : 1,
+	        /**
+			 * The code of the parameter to notify changed event.
+			 */
+	        code : this.code[0], 
+	        listeners : {
+	        	scope : this, 
+	        	change : function () {
+                    this.form.fireEvent('componentChanged', this.form, this);
+	        	}
+	        }
+	        
+
+	    }); 
+    	Ext.apply(this, {
+	    	layout : "hbox",
+	    	stype : "sitoolsFormContainer",
+	    	overCls : 'fieldset-child',
+	        items : [this.radioGroup]
+	    });
+	    sitools.common.forms.components.Radio.superclass.initComponent.apply(this,
+	            arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+
+    },
+
+   /* notifyValueChanged : function () {
+	    this.parent.notifyValueChanged(this.code);
+    },
+*/
+    isValueDefined : function () {
+	    if (this.radioGroup.getValue()) {
+		    return true;
+	    } else {
+		    return false;
+	    }
+    },
+
+    getSelectedValue : function () {
+	    if (this.radioGroup.getValue()) {
+		    return this.radioGroup.getValue().value;
+	    } else {
+		    return null;
+	    }
+    },
+    getParameterValue : function () {
+	    var value = this.getSelectedValue();
+	    if (Ext.isEmpty(value)) {
+		    return null;
+	    }
+//        if (Ext.isString(value) && ! Ext.isNumber(parseFloat(value))){
+//            value = "\"" + value + "\"";
+//        }
+	    return {
+	    	type : this.type, 
+	    	code : this.code, 
+	    	value : value
+	    };
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+	this.radioGroup.reset();
+    }
+//  ***************************************//
+
+
+
+
+});
diff --git a/szcluster-db/workspace/client-public/js/forms/components/textfield.js b/szcluster-db/workspace/client-public/js/forms/components/textfield.js
new file mode 100644
index 0000000..cffb02d
--- /dev/null
+++ b/szcluster-db/workspace/client-public/js/forms/components/textfield.js
@@ -0,0 +1,142 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools*/
+/*
+ * @include "../ComponentFactory.js"
+ */
+Ext.ns('sitools.common.forms.components');
+
+/**
+ * @requires sitools.common.forms.ComponentFactory
+ * @class sitools.common.forms.components.TextField
+ * @extends Ext.Container
+ */
+sitools.common.forms.components.TextField = Ext.extend(Ext.Container, {
+//sitools.component.users.SubSelectionParameters.SingleSelection.TextField = Ext.extend(Ext.Container, {
+
+    initComponent : function () {
+        this.context = new sitools.common.forms.ComponentFactory(this.context);
+        //alert (this.valueSelection);
+        var store;
+        var params = {
+            colModel : [ this.code[0]],
+            distinct : true
+        };
+        store = new Ext.data.JsonStore({
+            fields : [ {
+                name : 'id',
+                mapping : this.code[0]
+            }, {
+                name : 'value',
+                mapping : this.code[0]
+            } ],
+            autoLoad : false,
+            root : 'data',
+            restful : true,
+            url : this.dataUrl + "/records" ,
+            baseParams : params
+        });
+
+        this.tf = new Ext.form.ComboBox ({
+            store : store,
+            stype : "sitoolsFormItem",
+            valueField : 'id',
+            displayField : 'value',
+            typeAhead : false,
+            hideTrigger : true, 
+            mode : 'remote',
+            allowBlank : true,
+            editable : true,
+            autoSelect : false,
+//            width : this.width - 110,
+            value : this.defaultValues[0],
+            
+            /**
+             * The code of the parameter to notify changed event.
+             */
+            code : this.code,
+            flex : 1, 
+            listeners : {
+                scope : this, 
+                beforequery : function () {
+                    if (Ext.isEmpty(this.dataUrl)) {
+                    	return false;
+                    }
+                    return this.autoComplete;
+                }
+            }
+        });
+        Ext.apply(this, {
+	    	layout : "hbox",
+	    	stype : "sitoolsFormContainer",
+	        items : [this.tf]
+        });
+        sitools.common.forms.components.TextField.superclass.initComponent.apply(this,
+                arguments);
+   	    if (!Ext.isEmpty(this.label)) {
+	    	this.items.insert(0, new Ext.Container({
+	            border : false,
+	            html : this.label,
+	            width : 100
+	        }));
+	    }
+                
+    },
+
+    notifyValueSelected : function () {
+        this.parent.notifyValueChanged(this.code);
+    },
+
+    isValueDefined : function () {
+        if (this.tf.getValue() && this.tf.getValue() !== "") {
+            return true;
+        } else {
+            return false;
+        }
+    },
+    getSelectedValue : function () {
+        if (this.tf.getValue() && this.tf.getValue() !== "") {
+            return this.tf.getValue();
+        } else {
+            return null;
+        }
+    },
+    setSelectedValue : function (value) {
+        this.tf.setValue(value);
+    },
+
+    getParameterValue : function () {
+      var value = this.getSelectedValue();
+      if (Ext.isEmpty(value)) {
+          return null;
+      }
+      return {
+      	type : this.type, 
+      	code : this.code.join(','), 
+      	value : '%'+value+'%'
+      };
+    },
+
+//  *** Reset function for RESET button ***//
+    resetToDefault : function () {
+        this.tf.reset();
+    }
+//  ***************************************//
+
+});
diff --git a/szcluster-db/workspace/client-public/res/css/desktop.css b/szcluster-db/workspace/client-public/res/css/desktop.css
new file mode 100644
index 0000000..4214c48
--- /dev/null
+++ b/szcluster-db/workspace/client-public/res/css/desktop.css
@@ -0,0 +1,1485 @@
+
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*!
+ * Ext JS Library 3.2.1
+ * Copyright(c) 2006-2010 Ext JS, Inc.
+ * licensing@extjs.com
+ * http://www.extjs.com/license
+ */
+html, body {
+	/*background:#3d71b8 url(../wallpapers/desktop_large.jpg) no-repeat left top;*/
+	background:#3d71b8 url(../wallpapers/desktop2.jpg) no-repeat left top;
+	background-size : 100%;
+    font: normal 12px tahoma, arial, verdana, sans-serif;
+	margin: 0;
+	padding: 0;
+	border: 0 none;
+	overflow: hidden;
+	height: 100%;
+}
+
+.start {
+	background-image: url( ../images/taskbar/black/startbutton-icon.gif ) !important;
+}
+
+.bogus {
+	background-image: url( ../images/desktop/bogus.png ) !important;
+}
+
+.logout {
+	background-image: url( /sitools/common/res/images/icons/logout.png ) !important;
+}
+
+.login {
+	background-image: url( /sitools/common/res/images/icons/login.png ) !important;
+}
+
+.settings {
+	background-image: url( /sitools/common/res/images/icons/save.png ) !important;
+}
+
+.version {
+	background-image: url( /sitools/common/res/images/icons/version.png ) !important;
+}
+
+.openSearch {
+	background-image: url(/sitools/common/res/images/icons/toolbar_open_search.png); 	
+}
+
+.plot {
+	background-image: url(/sitools/common/res/images/icons/plot.png); 	
+}
+.help {
+	background-image: url( /sitools/common/res/images/icons/help.png ) !important;
+}
+
+.semantic {
+	background-image: url( /sitools/common/res/images/icons/tree_dictionary.png );
+}
+
+.dataDetail {
+	background-image: url( /sitools/common/res/images/icons/toolbar_details.png );
+}
+
+.tasks {
+	background-image: url( /sitools/common/res/images/icons/tree_application_plugin.png );
+}
+
+.editProfile {
+	background-image: url(/sitools/common/res/images/icons/tree_userman.png); 
+}
+
+.diskSpace {
+	background-image: url(/sitools/common/res/images/icons/tree_user_storage.png);
+}
+
+.orders {
+	background-image: url(/sitools/common/res/images/icons/tree_orders.png);
+}
+
+.dataviews {
+	background-image: url(/sitools/common/res/images/icons/tree_datasets.png);	
+}
+
+.form {
+	background-image: url(/sitools/common/res/images/icons/tree_forms.png);	
+}
+
+.datasetRessource {
+	background-image: url( /sitools/common/res/images/icons/tree_datasets_resource.png );
+}
+
+.preferences {
+	background-image: url( /sitools/common/res/images/icons/espace_utilisateur_ptt.png ) !important;
+}
+#dpanels {
+	width: 250px;
+	float: right;
+}
+
+#dpanels .x-panel {
+	margin: 15px;
+}
+
+#dpanels .x-date-picker {
+	border: 0 none;
+	border-top: 0 none;
+	background: transparent;
+}
+
+#dpanels .x-date-picker td.x-date-active {
+	background: #ffffff;
+}
+
+#dpanels .x-date-picker {
+	width: 100% !important;
+}
+
+#x-desktop {
+	border: 0 none;
+	position: relative;
+    overflow: hidden;
+    zoom:1;
+    width : 100%;
+}
+
+#ux-taskbar .x-btn {
+	margin: 1px 0 0 1px;
+}
+
+#ux-taskbar-start .x-btn {
+	margin: 0;
+}
+
+#ux-taskbar button {
+	/* width: 150px;
+	overflow: hidden; */
+	text-align: left;
+	color: #ffffff;
+}
+#title-bar-wrapper {
+	height:35px;
+}
+
+#title-bar {
+	color: #225599;
+	padding: 9px 7px;
+	font: bold 16px tahoma,arial,verdana,sans-serif;
+	float:left;
+}
+
+#x-logout {
+	float:right;
+	padding:6px 7px;
+}
+
+.x-btn-text-icon .x-btn-center .logout {
+	background-position:0pt 3px;
+	background-repeat:no-repeat;
+	padding:3px 0pt 3px 18px;
+}
+
+#ux-taskbar {
+	background:transparent none;
+	height:30px;
+	margin:0;
+	padding:0;
+	/*position:relative;*/
+ 	/*z-index: 10000;*/
+ 	visibility:hidden;
+}
+
+.x-btn-icon .ux-taskbutton-center .x-btn-text{
+	background-position: center !important;
+	background-repeat: no-repeat;
+	height: 32px;
+	width: 32px;
+	cursor:pointer;
+	white-space: nowrap;
+    padding:0;
+}
+.x-btn-icon .ux-taskbutton-center{
+	padding:1px;
+}
+
+.x-btn-text-icon .ux-taskbutton-center .x-btn-text{
+	background-position: 0 6px;
+	background-repeat: no-repeat;
+	padding:7px 0px 7px 20px;
+}
+
+.x-btn-text-icon .ux-startbutton-center .x-btn-text{
+	background-position: 0 4px;
+	background-repeat: no-repeat;
+	color:#000000 !important;
+	font-weight:bold;
+	padding:7px 0px 7px 28px;
+}
+
+.ux-taskbutton-left, .ux-taskbutton-right{
+	font-size:1px;
+    line-height:1px;
+}
+.ux-taskbutton-left{
+	width:4px;
+	height:28px;
+	background:url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 0;
+}
+.ux-taskbutton-right{
+	width:4px;
+	height:28px;
+	background:url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 -28px;
+}
+.ux-taskbutton-left i, .ux-taskbutton-right i{
+	display:block;
+    width:4px;
+    overflow:hidden;
+    font-size:1px;
+    line-height:1px;
+}
+.ux-taskbutton-center{
+	background:url( ../images/taskbar/black/taskbutton.gif ) repeat-x 0 -56px;
+	vertical-align: middle;
+	text-align:center;
+	padding:0 5px;
+	cursor:pointer;
+	white-space:nowrap;
+}
+
+#ux-taskbar .ux-taskbutton-left{
+	background-position:0 0;
+}
+#ux-taskbar .ux-taskbutton-right{
+	background-position:0 -28px;
+}
+#ux-taskbar .ux-taskbutton-center{
+	background-position:0 -56px;
+}
+
+#ux-taskbar .x-btn-over .ux-taskbutton-left{
+	background-position:0 -252px;
+}
+#ux-taskbar .x-btn-over  .ux-taskbutton-right{
+	background-position:0 -280px;
+}
+#ux-taskbar .x-btn-over .ux-taskbutton-center{
+	background-position:0 -308px;
+}
+
+#ux-taskbar .x-btn-click .ux-taskbutton-left{
+	background-position:0 -168px;
+}
+#ux-taskbar .x-btn-click  .ux-taskbutton-right{
+	background-position:0 -196px;
+}
+#ux-taskbar .x-btn-click .ux-taskbutton-center{
+	background-position:0 -224px;
+}
+
+#ux-taskbar .active-win .ux-taskbutton-left{
+	background-position:0 -84px;
+}
+#ux-taskbar .active-win  .ux-taskbutton-right{
+	background:url( ../images/taskbar/black/taskbutton.gif ) no-repeat 0 -112px;
+}
+#ux-taskbar .active-win .ux-taskbutton-center{
+	background:url( ../images/taskbar/black/taskbutton.gif ) repeat-x 0 -140px;
+}
+#ux-taskbar .active-win .ux-taskbutton-center button {
+    color:#fff;
+}
+
+#spacer {
+	height: 25px;
+	float: left;
+	width: 0;
+	overflow: hidden;
+	margin-top: 2px;
+}
+
+.x-window-body p,.x-panel-body p {
+	padding: 10px;
+	margin: 0;
+}
+
+.x-window-maximized .x-window-bc {
+	height:0;
+}
+
+.icon-grid {
+    background-image:url( ../images/desktop/grid.png ) !important;
+}
+.datasetExplorerModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/dataset_explorer_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.graphModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/graph_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.feedsModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/rss_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.helpModule {
+    background-image:url( /sitools/common/res/images/icons/help.png ) !important;
+}
+.formsModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/form_list_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.openSearchModule {
+    background-image:url( /sitools/common/res/images/icons/open_search_small.png ) !important;
+}
+.desktopManagerModule {
+    background-image:url( /sitools/common/res/images/icons/desktop_manager_small.png ) !important;
+}
+.projectDescriptionModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/description_project_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.projectServicesModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/tree_application_resource_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.contentViewerModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/content-viewer_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.contentEditorModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/content-editor_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+.datastorageExplorerModule {
+	background-image:url( /sitools/common/res/images/icons/32x32/datastorage-explorer_32.png ) !important;
+    background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+
+.addToCartModule {
+	background-image: url("/sitools/common/res/images/icons/tree_orders.png");
+	background-size: 18px 18px;
+	background-position: left !important;
+	background-repeat: no-repeat;
+}
+
+/*ADD OUR CSS class for Module */
+.downloads {
+    background-image:url( /sitools/common/res/images/icons/32x32/downloads.png ) !important;
+    background-size: 18px 18px;
+        background-position: left !important;
+        background-repeat: no-repeat;
+}
+
+.rss {
+    background-image:url( /sitools/common/res/images/icons/32x32/rss_32.png ) !important;
+    background-size: 18px 18px;
+        background-position: left !important;
+        background-repeat: no-repeat;
+}
+.externalLinks {
+        background-image:url( /sitools/common/res/images/icons/32x32/links2.png ) !important;
+    background-size: 18px 18px;
+        background-position: left !important;
+        background-repeat: no-repeat;
+}
+.relatedPapersModule {
+    background-image:url( /sitools/common/res/images/icons/32x32/description_project_32.png ) !important;
+    background-size: 18px 18px;
+        background-position: left !important;
+        background-repeat: no-repeat;
+}
+
+/*------------------------------------------------- */
+
+.add {
+    background-image:url(../images/desktop/icons/add.gif) !important;
+}
+.option {
+    background-image:url(../images/desktop/icons/plugin.gif) !important;
+}
+.remove {
+    background-image:url(../images/desktop/icons/delete.gif) !important;
+}
+.save {
+    background-image:url(../images/desktop/icons/save.gif) !important;
+}
+.accordion {
+    background-image:url(../images/desktop/accordian.gif) !important;
+}
+.tabs {
+    background-image:url(../images/desktop/tabs.gif) !important;
+}
+
+/* IM window icons */
+
+.user {
+    background-image:url( /sitools/common/res/images/icons/tree_userman.png ) !important;
+}
+
+.user-add {
+    background-image:url(../images/desktop/icons/user_add.gif) !important;
+}
+
+.user-delete {
+    background-image:url(../images/desktop/icons/user_delete.gif) !important;
+}
+
+.connect {
+    background-image:url(../images/desktop/icons/connect.gif) !important;
+}
+
+.user-girl {
+    background-image:url(../images/desktop/icons/user_female.gif) !important;
+}
+
+.user-kid {
+    background-image:url(../images/desktop/icons/user_green.gif) !important;
+}
+
+.user-suit {
+    background-image:url(../images/desktop/icons/user_suit.gif) !important;
+}
+
+.ux-start-menu {
+	background:transparent none;
+	border:0px none;
+	padding:0;
+}
+
+.ux-start-menu-tl .x-window-header {
+	color:#f1f1f1;
+	font:bold 11px tahoma,arial,verdana,sans-serif;
+    padding:5px 0 4px 0;
+}
+
+.x-panel-tl .x-panel-icon, .ux-start-menu-tl .x-panel-icon {
+	background-position:0pt 4px;
+	background-repeat:no-repeat;
+	padding-left:20px !important;
+}
+
+.ux-start-menu-tl {
+	background: transparent url( ../images/taskbar/black/start-menu-left-corners.png ) no-repeat 0 0;
+	padding-left:6px;
+    zoom:1;
+    z-index:1;
+    position:relative;
+}
+
+.ux-start-menu-tr {
+	background: transparent url( ../images/taskbar/black/start-menu-right-corners.png ) no-repeat right 0;
+	padding-right:6px;
+}
+
+.ux-start-menu-tc {
+	background: transparent url( ../images/taskbar/black/start-menu-top-bottom.png ) repeat-x 0 0;
+	overflow:hidden;
+    zoom:1;
+}
+
+.ux-start-menu-ml {
+	background: transparent url( ../images/taskbar/black/start-menu-left-right.png ) repeat-y 0 0;
+	padding-left:6px;
+    zoom:1;
+}
+
+.ux-start-menu-bc {
+	background: transparent url( ../images/taskbar/black/start-menu-top-bottom.png ) repeat-x 0 bottom;
+    zoom:1;
+}
+
+.ux-start-menu-bc .x-window-footer {
+    padding-bottom:6px;
+    zoom:1;
+    font-size:0;
+    line-height:0;
+}
+
+.ux-start-menu-bl {
+	background: transparent url( ../images/taskbar/black/start-menu-left-corners.png ) no-repeat 0 bottom;
+	padding-left:6px;
+    zoom:1;
+}
+
+.ux-start-menu-br {
+	background: transparent url( ../images/taskbar/black/start-menu-right-corners.png ) no-repeat right bottom;
+	padding-right:6px;
+    zoom:1;
+}
+
+.x-panel-nofooter .ux-start-menu-bc {
+	height:6px;
+}
+
+.ux-start-menu-splitbar-h {
+	background-color:#d0d0d0;
+}
+
+
+.ux-start-menu-bwrap {
+	background:transparent none;
+	border:0px none;
+}
+
+.ux-start-menu-body {
+	background:transparent none;
+	border:0px none;
+}
+
+.ux-start-menu-apps-panel {
+	background:#ffffff none;
+	border:1px solid #1e2124;
+}
+
+.ux-start-menu-tools-panel {
+	border:0px none;
+	background:transparent url( ../images/taskbar/black/start-menu-right.png ) repeat-y scroll right 0pt;
+}
+
+#ux-taskbar-start {
+	background:#000000 url( ../images/taskbar/black/taskbar-start-panel-bg.gif ) repeat-x left top;
+	left:0px;
+	padding:0;
+	position:absolute;
+}
+
+#ux-taskbar-start .x-toolbar {
+	background: none;
+	padding:0px;
+	border:0px none;
+}
+
+#ux-taskbuttons-panel {
+	background:#000000 url( ../images/taskbar/black/taskbuttons-panel-bg.gif ) repeat-x left top;
+	padding-top:0;
+	margin-left: 111px;
+}
+
+.ux-taskbuttons-strip-wrap {
+	/* overflow:hidden;
+	position:relative;
+	width:100%; */
+
+	width:100%;
+    overflow:hidden;
+    position:relative;
+    zoom:1;
+}
+
+ul.ux-taskbuttons-strip {
+	display:block;
+/* 	width:5000px; */
+    zoom:1;
+}
+
+ul.ux-taskbuttons-strip li {
+    float:left;
+/*     margin-left:2px; */
+}
+
+
+ul.ux-taskbuttons-strip li.ux-taskbuttons-edge {
+    float:left;
+    margin:0 !important;
+    padding:0 !important;
+    border:0 none !important;
+    font-size:1px !important;
+    line-height:1px !important;
+    overflow:hidden;
+    zoom:1;
+    background:transparent !important;
+    width:25px;
+}
+
+.x-clear {
+    clear:both;
+    height:0;
+    overflow:hidden;
+    line-height:0;
+    font-size:0;
+}
+
+.x-taskbuttons-scrolling {
+	position:relative;
+}
+
+.x-taskbuttons-scrolling .ux-taskbuttons-strip-wrap {
+	margin-left:18px;
+	margin-right:18px;
+}
+
+td.ux-taskButtons-edge {
+    /*float:left;*/
+    margin:0 !important;
+    padding:0 !important;
+    border:0 none !important;
+    font-size:1px !important;
+    line-height:1px !important;
+    overflow:hidden;
+    zoom:1;
+    background:transparent !important;
+    width:1px;
+}
+
+.ux-taskbuttons-scroller-left {
+    background: transparent url( ../images/taskbar/black/scroll-left.gif ) no-repeat -18px 0;
+    width:18px;
+    position:absolute;
+    left:1px;
+    top:0px;
+    z-index:10;
+    cursor:pointer;
+}
+.ux-taskbuttons-scroller-left-over {
+    background-position: 0 0;
+}
+.ux-taskbuttons-scroller-left-disabled {
+    background-position: -18px 0;
+    opacity:.5;
+    -moz-opacity:.5;
+    filter:alpha(opacity=50);
+    cursor:default;
+}
+.ux-taskbuttons-scroller-right {
+    background: transparent url( ../images/taskbar/black/scroll-right.gif ) no-repeat 0 0;
+    width:18px;
+    position:absolute;
+    right:0;
+    top:0px;
+    z-index:10;
+    cursor:pointer;
+}
+.ux-taskbuttons-scroller-right-over {
+    background-position: -18px 0;
+}
+.ux-taskbuttons-scroller-right-disabled {
+    background-position: 0 0;
+    opacity:.5;
+    -moz-opacity:.5;
+    filter:alpha(opacity=50);
+    cursor:default;
+}
+
+#btn-showDesk {
+	margin : -1px !important;
+	-moz-box-shadow: 2px 2px 5px 2px #343434;   
+	-webkit-box-shadow: 2px 2px 2px 2px #343434;   -o-box-shadow: 2px 2px 5px 2px #343434;   
+	box-shadow: 2px 2px 4px 0px #343434;   filter:progid:DXImageTransform.Microsoft.Shadow(color=#343434, Direction=134, Strength=5);
+	opacity: .7;
+    -moz-opacity: .7;
+    filter:alpha(opacity=70);
+	
+	background: -moz-linear-gradient(-45deg,  rgba(151,153,160,1) 0%, rgba(183,184,191,0.94) 16%, rgba(135,136,145,0.86) 37%, rgba(112,114,121,0.81) 50%, rgba(199,202,209,0.62) 99%, rgba(199,202,209,0.62) 100%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(151,153,160,1)), color-stop(16%,rgba(183,184,191,0.94)), color-stop(37%,rgba(135,136,145,0.86)), color-stop(50%,rgba(112,114,121,0.81)), color-stop(99%,rgba(199,202,209,0.62)), color-stop(100%,rgba(199,202,209,0.62))); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(-45deg,  rgba(151,153,160,1) 0%,rgba(183,184,191,0.94) 16%,rgba(135,136,145,0.86) 37%,rgba(112,114,121,0.81) 50%,rgba(199,202,209,0.62) 99%,rgba(199,202,209,0.62) 100%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(-45deg,  rgba(151,153,160,1) 0%,rgba(183,184,191,0.94) 16%,rgba(135,136,145,0.86) 37%,rgba(112,114,121,0.81) 50%,rgba(199,202,209,0.62) 99%,rgba(199,202,209,0.62) 100%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(-45deg,  rgba(151,153,160,1) 0%,rgba(183,184,191,0.94) 16%,rgba(135,136,145,0.86) 37%,rgba(112,114,121,0.81) 50%,rgba(199,202,209,0.62) 99%,rgba(199,202,209,0.62) 100%); /* IE10+ */
+	background: linear-gradient(135deg,  rgba(151,153,160,1) 0%,rgba(183,184,191,0.94) 16%,rgba(135,136,145,0.86) 37%,rgba(112,114,121,0.81) 50%,rgba(199,202,209,0.62) 99%,rgba(199,202,209,0.62) 100%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9799a0', endColorstr='#9ec7cad1',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+}
+
+#btn-showDesk:HOVER {
+	background: -moz-linear-gradient(-45deg,  rgba(199,202,209,0.62) 0%, rgba(199,202,209,0.62) 1%, rgba(149,150,160,0.81) 50%, rgba(151,151,160,0.86) 64%, rgba(208,208,216,0.93) 83%, rgba(151,153,160,1) 100%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(199,202,209,0.62)), color-stop(1%,rgba(199,202,209,0.62)), color-stop(50%,rgba(149,150,160,0.81)), color-stop(64%,rgba(151,151,160,0.86)), color-stop(83%,rgba(208,208,216,0.93)), color-stop(100%,rgba(151,153,160,1))); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(-45deg,  rgba(199,202,209,0.62) 0%,rgba(199,202,209,0.62) 1%,rgba(149,150,160,0.81) 50%,rgba(151,151,160,0.86) 64%,rgba(208,208,216,0.93) 83%,rgba(151,153,160,1) 100%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(-45deg,  rgba(199,202,209,0.62) 0%,rgba(199,202,209,0.62) 1%,rgba(149,150,160,0.81) 50%,rgba(151,151,160,0.86) 64%,rgba(208,208,216,0.93) 83%,rgba(151,153,160,1) 100%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(-45deg,  rgba(199,202,209,0.62) 0%,rgba(199,202,209,0.62) 1%,rgba(149,150,160,0.81) 50%,rgba(151,151,160,0.86) 64%,rgba(208,208,216,0.93) 83%,rgba(151,153,160,1) 100%); /* IE10+ */
+	background: linear-gradient(135deg,  rgba(199,202,209,0.62) 0%,rgba(199,202,209,0.62) 1%,rgba(149,150,160,0.81) 50%,rgba(151,151,160,0.86) 64%,rgba(208,208,216,0.93) 83%,rgba(151,153,160,1) 100%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9ec7cad1', endColorstr='#9799a0',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+}
+
+#btn-showDesk:ACTIVE {
+	opacity: .5;
+    -moz-opacity: .5;
+    filter:alpha(opacity=50);
+}
+
+.ux-toolmenu-sep {
+	background-color:#18191a;
+	border-bottom:1px solid #858789;
+	display:block;
+	font-size:1px;
+	line-height:1px;
+	margin:2px 3px;
+}
+
+.ux-start-menu-tools-panel ul.x-menu-list li.x-menu-list-item a.x-menu-item {
+	color:#ffffff;
+}
+
+.ux-start-menu-tools-panel ul.x-menu-list li.x-menu-list-item .x-menu-item-active a.x-menu-item {
+	color:#000000;
+}
+
+.ux-start-menu-tools-panel .x-menu-item-active {
+	background: #525456 url( ../images/taskbar/black/item-over.gif ) repeat-x left bottom;
+	border:1px solid #000000;
+	padding: 0;
+}
+
+#ux-taskbar .x-splitbar-h {
+	background:#000000 url( ../images/taskbar/black/taskbar-split-h.gif ) no-repeat 0 0;
+	width:8px;
+}
+
+.x-window-header-text {
+	cursor:default;
+	padding-left: 5px !important;
+}
+
+/*
+ * Begin Start button
+ */
+.ux-startbutton-left, .ux-startbutton-right{
+	font-size:1px;
+    line-height:1px;
+}
+.ux-startbutton-left{
+	width:10px;
+	height:28px;
+	background:url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 0;
+}
+.ux-startbutton-right{
+	width:10px;
+	height:30px;
+	background:url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 -28px;
+}
+.ux-startbutton-left i, .ux-startbutton-right i{
+	display:block;
+    width:10px;
+    overflow:hidden;
+    font-size:1px;
+    line-height:1px;
+}
+.ux-startbutton-center{
+	background:url( ../images/taskbar/black/startbutton.gif ) repeat-x 0 -56px;
+	vertical-align: middle;
+	text-align:center;
+	padding:0;
+	cursor:pointer;
+	white-space:nowrap;
+}
+
+#ux-taskbar .ux-startbutton-left{
+	background-position:0 0;
+}
+#ux-taskbar .ux-startbutton-right{
+	background-position:0 -30px;
+}
+#ux-taskbar .ux-startbutton-center{
+	background-position:0 -60px;
+}
+
+#ux-taskbar .x-btn-over .ux-startbutton-left{
+	background-position:0 -270px;
+}
+#ux-taskbar .x-btn-over  .ux-startbutton-right{
+	background-position:0 -300px;
+}
+#ux-taskbar .x-btn-over .ux-startbutton-center{
+	background-position:0 -330px;
+}
+
+#ux-taskbar .x-btn-click .ux-startbutton-left{
+	background-position:0 -180px;
+}
+#ux-taskbar .x-btn-click  .ux-startbutton-right{
+	background-position:0 -210px;
+}
+#ux-taskbar .x-btn-click .ux-startbutton-center{
+	background-position:0 -240px;
+}
+
+#ux-taskbar .active-win .ux-startbutton-left{
+	background-position:0 -90px;
+}
+#ux-taskbar .active-win  .ux-startbutton-right{
+	background:url( ../images/taskbar/black/startbutton.gif ) no-repeat 0 -120px;
+}
+#ux-taskbar .active-win .ux-startbutton-center{
+	background:url( ../images/taskbar/black/startbutton.gif ) repeat-x 0 -150px;
+}
+#ux-taskbar .active-win .ux-startbutton-center button {
+    color:#fff;
+}
+
+.ux-taskbar-warning {
+	height : 30px;
+	width : 24px;
+	border : none;
+}
+
+.ux-taskbuttons-edge .x-warning {
+	color: #C33;
+    background-image: url(../images/ux/exclamation.gif);
+    background-repeat: no-repeat;
+    background-position: center center;
+    height: 30px;
+}
+/*
+ * End Start button
+ */
+
+.x-resizable-proxy{
+    background:#C7DFFC;
+    opacity:.5;
+    -moz-opacity:.5;
+    filter:alpha(opacity=50);
+    border: 1px solid #3b5a82;
+}
+
+/* Desktop Shortcuts */
+#x-shortcuts dt {
+    float:left;
+    margin:15px 0 0 15px;
+    clear:left;
+    width:64px;
+    font:normal 10px tahoma,arial,verdana,sans-serif;
+    text-align:center;
+    zoom:1;
+    display:block;
+}
+#x-shortcuts dt a {
+    width:64px;
+    display:block;
+    color:white;
+    text-decoration:none;
+}
+#x-shortcuts dt div {
+    width:100%;
+    color:white;
+    overflow:hidden;
+    text-overflow:ellipsis;
+    cursor:pointer;
+}
+.ext-ie #x-shortcuts dt img {
+    background:transparent !important;
+}
+#x-shortcuts dt a:hover {
+    text-decoration:underline;
+}
+/* shortcuts */
+#grid-win-shortcut img {
+    width:48px;
+    height:48px;
+    background-image: url(../images/desktop/grid48x48.png);
+    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/grid48x48.png', sizingMethod='scale');
+}
+#acc-win-shortcut img {
+    width:48px;
+    height:48px;
+    background-image: url(../images/desktop/im48x48.png);
+    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/im48x48.png', sizingMethod='scale');
+}
+
+.graphNodeType {
+	height:24px !important;
+	width:24px !important;		
+}
+
+.imageDsNode{
+	max-height : 70px;	
+	max-width : 70px;
+}
+
+.cnes {
+	background-image : url('/sitools/common/res/wallpapers/fond_sitools2.jpg');
+	background-color: black;
+	background-position : top center;
+}
+
+.linkImageDataView ul li img {
+	width : 80px;
+	height : 80px;
+}
+
+.linkImageDataView ul li {
+	float: left;
+	padding-top: 10px;
+	margin-top : 10px;
+	/*    margin: 10px 0 0 25px;*/
+	text-align: center;
+	line-height: 1.25em;
+	color: #333;
+	font-family: "Helvetica Neue", sans-serif;
+	height: 90px;
+	width: 120px;
+	overflow: hidden;
+	cursor: pointer;
+}
+
+.linkImageDataView .nodes-hover {
+    background: -webkit-linear-gradient(top, #D8D8D8 , #F8F8F8);
+    background: -moz-linear-gradient(top, #D8D8D8 , #F8F8F8);
+    -moz-border-radius: 8px;
+    -webkit-border-radius: 8px;
+}
+
+.dataview_columnValue {
+	margin-bottom: 5px;	
+}
+
+.sitools {
+	overflow: hidden;	
+}
+
+#rightPanel {
+	float : left;
+	height : 100%; /*1000px;*/	
+	/*background-color: black;*/
+	width : 15%; 
+}
+
+#x-headers {
+	height : 150px;
+	/*background-color: black;*/
+}
+#news {
+	height : 50%;
+	width : 100%;
+}
+
+#shortcuts {
+	height : 100%;/* 50%;*/
+	width : 100%;
+/* 	border-top: 1px solid #A3A3A3; */
+}
+
+#x-bottom {
+	height : 50px;
+	/*background-color: black;*/
+	clear: both;
+}
+
+#sitools-desktop {
+	height : 100%;
+}
+
+#x-desktop-taskbar {
+	float : left;
+	width : 85%;
+	height : 100%; /*1000px;*/
+}
+
+.x-navBar {
+	height : 35px;	
+	background: #000000 url( ../images/taskbar/black/taskbuttons-panel-bg.gif ) repeat-x left top;
+	padding-top:0;
+	float : left;
+	position:relative;
+}
+
+.x-navBar-buttons {
+	border-left : 1px solid #000000;
+/* 	padding-top: 7px; */
+	padding-left: 12px;
+	padding-right: 6px;
+	height : 35px;	
+	background-color: #000000;
+	/*position: initial;*/
+}
+
+.navBarButtons-icon {
+	height : 32px !important;
+	width :32px !important;
+	-webkit-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+   	-moz-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    -ms-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    -o-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    z-index:1;
+}
+
+.navBarButtons-icon:HOVER {
+	-webkit-transform: scale(1.09);
+	-moz-transform: scale(1.09);
+	-ms-transform: scale(1.09);
+	-o-transform: scale(1.09);
+	transform: scale(1.09);
+	z-index:5;
+	opacity: .7;
+    -moz-opacity: .7;
+    filter:alpha(opacity=70);
+}
+
+.navBarButtons-icon:ACTIVE {
+	opacity : .3;
+}
+
+.taskbarButtons-icon {
+	-webkit-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+   	-moz-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    -ms-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    -o-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+    transition: width .5s cubic-bezier( .4, 1, .4, 1);
+}
+
+.taskbarButtons-icon:HOVER {
+	-webkit-transform: scale(1.07);
+	-moz-transform: scale(1.07);
+	-ms-transform: scale(1.07);
+	-o-transform: scale(1.07);
+	transform: scale(1.07);
+	opacity: .7;
+    -moz-opacity: .7;
+    filter:alpha(opacity=70);
+}
+
+.taskbarButtons-icon:ACTIVE {
+	opacity: .3;
+    -moz-opacity: .3;
+    filter:alpha(opacity=30);
+}
+
+.x-navBar-items {
+	padding-left : 5px;	
+	padding-right : 5px;
+	padding-top: 5px;
+	padding-bottom: 2px;	
+	
+}
+
+.x-navBar-items button {
+	font: 12px arial,tahoma,verdana,helvetica;
+	color: white;
+	/*text-transform: uppercase;*/
+	font-weight: bold;
+}
+
+#navBarId .x-btn-over .ux-taskbutton-left{
+	background-position:0 -252px;
+}
+#navBarId .x-btn-over  .ux-taskbutton-right{
+	background-position:0 -280px;
+}
+#navBarId .x-btn-over .ux-taskbutton-center{
+	background-position:0 -308px;
+}
+
+#x-headers .x-panel-body {
+	background-color: black;
+	color : white;	
+}
+
+.sitools-module-panel .x-panel-body{
+/* 	background-color: #D9DCDF;	 */
+}
+
+<!-- Tree node selected for xtheme-gray -->
+#x-tree-node .x-tree-selected{
+	background-color: white;
+}
+.sitools-userContainer {
+	position: absolute;
+	color: black;
+	z-index: 1;
+	text-align: right;
+	border-color: #848AC7;
+	background-color: white;
+	opacity: .7;
+    -moz-opacity: .7;
+    filter:alpha(opacity=70);
+	
+	background-color:#EDEDED;
+	border:1px solid #666666;
+	margin:10px auto;
+	padding:10px;
+}
+
+.sitools-userContainer-arrow-border-down {
+  border-color: #666666 transparent transparent transparent;
+  border-style: solid;
+  border-width: 10px;
+  height:0;
+  width:0;
+  position:absolute;
+  bottom:-22px;
+  z-index: 1;
+}
+.sitools-userContainer-arrow-down {
+  border-color: #EDEDED transparent transparent transparent;
+  border-style: solid;
+  border-width: 10px;
+  height:0;
+  width:0;
+  position:absolute;
+  bottom:-20px;
+  z-index: 1;
+}
+
+.sitools-userContainer-arrow-border-up {
+  border-color: transparent transparent #666666 transparent;
+  border-style: solid;
+  border-width: 10px;
+  height:0;
+  width:0;
+  position:absolute;
+  top:-21px;
+  z-index: 1;
+}
+.sitools-userContainer-arrow-up {
+  border-color: transparent transparent #EDEDED transparent;
+  border-style: solid;
+  border-width: 10px;
+  height:0;
+  width:0;
+  position:absolute;
+  top:-19px;
+  z-index: 1;
+}
+
+.sitools-userContainer-icon {
+	float: left;
+	width: 16px;
+	padding-left: 10px;
+}
+
+.userProfileBtn {
+	padding: 5px;
+	float: left;
+}
+
+.datastorageSelectionClass {
+	border: 0.07em outset #B3B3B3 !important;
+	box-shadow: 1px 1px 1px 1px #888 !important;
+	background: linear-gradient(135deg, #F2F2F2 0%,rgba(242, 242, 242, 0) 100%);
+}
+
+.dv-datastorage-wrap{
+	float:left;
+	margin : 10px 15px 10px 15px;
+	border-radius: 1px;
+	/*border: 1px outset #F8F8F8;*/
+	text-align: center;
+	width: 90px;
+	height : 88px;
+	/*box-shadow: 1.5px 1.5px 0.5px rgba(124, 128, 114, 0.96);
+	filter:progid:DXImageTransform.Microsoft.Shadow(color='#aaaaaa', Direction=135, Strength=12);
+  	zoom: 1;
+	text-shadow: 0.5px 2px 0px rgba( 255, 255, 255, 0.2);
+	background: -moz-radial-gradient(center, ellipse cover, #e2e2e2 0%, #d1d1d1 21%, #dbdbdb 43%, #fefefe 100%);
+	background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#e2e2e2), color-stop(21%,#d1d1d1), color-stop(43%,#dbdbdb), color-stop(100%,#fefefe));
+	background: -webkit-radial-gradient(center, ellipse cover, #e2e2e2 0%,#d1d1d1 21%,#dbdbdb 43%,#fefefe 100%); 
+	background: -o-radial-gradient(center, ellipse cover, #e2e2e2 0%,#d1d1d1 21%,#dbdbdb 43%,#fefefe 100%); 
+	background: -ms-radial-gradient(center, ellipse cover, #e2e2e2 0%,#d1d1d1 21%,#dbdbdb 43%,#fefefe 100%); 
+	background: radial-gradient(ellipse at center, #e2e2e2 0%,#d1d1d1 21%,#dbdbdb 43%,#fefefe 100%);*/
+}
+
+.dv-datastorage-wrap:ACTIVE{
+	background: -moz-linear-gradient(top, rgba(238,238,238,1) 0%, rgba(238,238,238,1) 100%); 
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(238,238,238,1)), color-stop(100%,rgba(238,238,238,1))); 
+	background: -webkit-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(238,238,238,1) 100%);
+	background: -o-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(238,238,238,1) 100%); 
+	background: -ms-linear-gradient(top, rgba(238,238,238,1) 0%,rgba(238,238,238,1) 100%);
+    box-shadow: 0.5px 0.5px 5px #666666 inset, 0 1px 0 rgba( 255, 255, 255, 0.4);
+}
+
+.dv-datastorage-wrap:HOVER{
+	background: -moz-linear-gradient(-45deg, #D5D5D5 0%, #E7E7E7 100%);
+	background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#D5D5D5), color-stop(100%,#E7E7E7)); 
+	background: -webkit-linear-gradient(-45deg, #D5D5D5 0%,#E7E7E7 100%); 
+	background: -o-linear-gradient(-45deg, #D5D5D5 0%,#E7E7E7 100%); 
+	background: -ms-linear-gradient(-45deg,#D5D5D5 0%,#E7E7E7 100%);
+	background: linear-gradient(135deg, #D5D5D5 0%, #E7E7E7 100%); 
+}
+
+.dv-datastorage{
+	padding : 5px 3px 4px 3px;
+	display:block;
+	overflow : hidden;
+	text-overflow: ellipsis;
+	text-align : center;
+}
+
+.dv-datastorage span{
+	white-space: nowrap;
+}
+
+#treepanel .x-tree-node .x-tree-selected {
+/* 	background-color: white !important; */
+}
+
+
+.full-desktop {
+	width:100% !important;
+}
+
+/** START CSS FEED MODULE + FEED DETAILS **/
+#leftPanel {
+	float : left;
+	height : 100%; /*1000px;*/	
+	width : 20%;
+}
+
+
+#menu {
+	height : 100%;
+	width : 100%;
+}
+
+
+#feeds-date {
+	padding: 5px 0px 0px 0px;
+}
+
+.detailFeed-view{
+	background: rgb(250,242,230); /* Old browsers */
+	background: -moz-linear-gradient(45deg,  rgba(250,242,230,1) 6%, rgba(224,206,178,1) 29%, rgba(228,214,190,1) 32%, rgba(246,237,222,1) 75%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left bottom, right top, color-stop(6%,rgba(250,242,230,1)), color-stop(29%,rgba(224,206,178,1)), color-stop(32%,rgba(228,214,190,1)), color-stop(75%,rgba(246,237,222,1))); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(45deg,  rgba(250,242,230,1) 6%,rgba(224,206,178,1) 29%,rgba(228,214,190,1) 32%,rgba(246,237,222,1) 75%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(45deg,  rgba(250,242,230,1) 6%,rgba(224,206,178,1) 29%,rgba(228,214,190,1) 32%,rgba(246,237,222,1) 75%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(45deg,  rgba(250,242,230,1) 6%,rgba(224,206,178,1) 29%,rgba(228,214,190,1) 32%,rgba(246,237,222,1) 75%); /* IE10+ */
+	background: linear-gradient(45deg,  rgba(250,242,230,1) 6%,rgba(224,206,178,1) 29%,rgba(228,214,190,1) 32%,rgba(246,237,222,1) 75%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#faf2e6', endColorstr='#f6edde',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+			
+}
+
+.feed-article {
+	padding: 15px;
+	margin: 25px;
+	-moz-border-radius:5px;
+	-webkit-border-radius:5px;
+	border-radius:5px;
+	border: 1px solid rgba(80, 80, 80, 0.1);
+	-moz-box-shadow: 5px 5px 6px 0px #656565;
+	-webkit-box-shadow: 5px 5px 6px 0px #656565;
+	-o-box-shadow: 5px 5px 6px 0px #656565;
+	box-shadow: 5px 5px 6px 0px #656565;
+	filter:progid:DXImageTransform.Microsoft.Shadow(color=#656565, Direction=134, Strength=6);
+	background-color : white;
+}
+
+.feed-img{
+	float: left;
+}
+
+.feed-title{
+	text-align: center;
+	font-size: 18px;
+	padding: 14px;
+}
+
+.feed-date-detail{
+	padding-top : 45px;
+}
+
+.feed-author{
+	padding-top : 2px;
+}
+
+.feed-description{
+	padding-top: 25px;
+	padding-bottom: 25px;
+	text-indent: 18px;
+}
+
+.feed-complementary{
+	padding : 10px;
+	border : 1px solid #c0c0c0;
+	-moz-box-shadow: inset 3px 3px 3px 1px #c0c0c0;
+	-webkit-box-shadow: inset 3px 3px 3px 1px #c0c0c0;
+	-o-box-shadow: inset 3px 3px 3px 1px #c0c0c0;
+	box-shadow: inset 3px 3px 3px 1px #c0c0c0;
+	filter:progid:DXImageTransform.Microsoft.Shadow(color=#c0c0c0, Direction=135, Strength=3);
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+}
+/** END CSS FEED MODULE + FEED DETAILS **/
+
+
+/** START PREVIEW BOX CSS **/
+.taskbar-previewbox {
+	position: absolute;
+	/*top: 35px;*/
+	padding-top: 8px;
+	left: 0px;
+	width: 250px;
+	height: 180px;
+	z-index: 9500;
+	user-select: none;
+	-moz-user-select: -moz-none;
+	-khtml-user-select: none;
+	-webkit-user-select: none;
+	-webkit-transform: translate3d(0, 0, 0);
+}
+
+.taskbar-previewbox-ml,
+.taskbar-previewbox-mc,
+.taskbar-previewbox-mr {
+	height: 178px;
+	background-repeat: no-repeat;
+	
+	-moz-border-radius: 10px;
+	-webkit-border-radius: 10px;
+	border-radius: 10px;
+	
+	background: -moz-linear-gradient(-45deg,  rgba(0,0,0,0.65) 5%, rgba(0,0,0,0.31) 54%, rgba(0,0,0,0.09) 87%, rgba(0,0,0,0) 100%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left top, right bottom, color-stop(5%,rgba(0,0,0,0.65)), color-stop(54%,rgba(0,0,0,0.31)), color-stop(87%,rgba(0,0,0,0.09)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(-45deg,  rgba(0,0,0,0.65) 5%,rgba(0,0,0,0.31) 54%,rgba(0,0,0,0.09) 87%,rgba(0,0,0,0) 100%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(-45deg,  rgba(0,0,0,0.65) 5%,rgba(0,0,0,0.31) 54%,rgba(0,0,0,0.09) 87%,rgba(0,0,0,0) 100%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(-45deg,  rgba(0,0,0,0.65) 5%,rgba(0,0,0,0.31) 54%,rgba(0,0,0,0.09) 87%,rgba(0,0,0,0) 100%); /* IE10+ */
+	background: linear-gradient(135deg,  rgba(0,0,0,0.65) 5%,rgba(0,0,0,0.31) 54%,rgba(0,0,0,0.09) 87%,rgba(0,0,0,0) 100%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a6000000', endColorstr='#00000000',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
+	
+}
+.taskbar-previewbox-ml {
+	position: relative;
+	background-position: 0 0;
+/* 	padding-left: 15px; */
+}
+.taskbar-previewbox-mc {
+	background-position: 0 -178px;
+	background-repeat: repeat-x;
+	width: 250px;
+}
+.taskbar-previewbox-mr {
+	background-position: right -356px;
+	padding-right: 15px;
+}
+.taskbar-previewbox-arrow {
+	background-image: url(../images/icons/arrow-down-gray.png);
+	background-repeat: no-repeat;
+	position: relative;
+	top: -13px;
+	left: 114px;
+	width: 22px;
+	height: 25px;
+}
+.taskbar-previewbox-desc {
+	color: #FFF;
+	font-size: 10pt;
+	font-weight: bold;
+	padding-top: 14px;
+	text-align: center;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	-o-text-overflow: ellipsis;
+	white-space: nowrap;
+	text-shadow: 0.1em 0.1em 0.1em #000000;
+}
+.taskbar-previewbox-win {
+	position: absolute;
+	left : 16px;
+	height : 10px;
+	width : 10px;
+}
+.taskbar-previewbox-win-transform {
+	transform-origin: 0% 0%;
+	-webkit-transform-origin: 0% 0%;
+	-moz-transform-origin: 0% 0%;
+	-o-transform-origin: 0% 0%;
+}
+.taskbar-previewbox-win-mask {
+	position: absolute;
+	left: 0px;
+	top: 0px;
+	width: 100%;
+	height: 100%;
+	background: transparent;
+	z-index: 8999;
+}
+.taskbar-previewbox-transition {
+	transition-delay: 0s;
+	transition-property: top, left, opacity;
+	transition-duration: 0.8s;
+
+	-webkit-transition-delay: 0s;
+	-webkit-transition-property: top, left, opacity;
+	-webkit-transition-duration: 0.8s;
+
+	-moz-transition-delay: 0s;
+	-moz-transition-property: top, left, opacity;
+	-moz-transition-duration: 0.8s;
+
+	-o-transition-delay: 0s;
+	-o-transition-property: top, left, opacity;
+	-o-transition-duration: 0.8s;
+}
+
+/** END PREVIEW BOX CSS **/
+
+/** START TOOLBAR BUTTON **/
+
+.arrow-back{
+	background-image : url(../images/icons/simple-arrow-left.png);
+}
+
+.arrow-next{
+	background-image : url(../images/icons/simple-arrow-right.png);
+}
+
+.btn-format-icon {
+	background-size : 16px 16px;
+}
+
+/** ENDTOOLBAR BUTTON **/
+
+.x-item-disabled-custom {
+	color : black;
+	border : none;
+}
+
+.menu-title {
+	color : white;
+}
+
+.button-transition {
+	-webkit-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+	-moz-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+	-ms-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+	-o-transition: width .5s cubic-bezier( .4, 1, .4, 1);
+	transition: width .5s cubic-bezier( .4, 1, .4, 1);
+}
+
+.button-transition:HOVER {
+	-webkit-transform: scale(1.09);
+	-moz-transform: scale(1.09);
+	-ms-transform: scale(1.09);
+	-o-transform: scale(1.09);
+	transform: scale(1.09);
+	z-index:5;
+	opacity: .7;
+    -moz-opacity: .7;
+    filter:alpha(opacity=70);
+}
+
+.button-transition:ACTIVE {
+	opacity : .6;
+}
+
+.x-grid3-row-warningDate {
+	color : #F63E3E !important;
+}
+
+/* SEARCH button re-styling (for more visibility) */
+button.x-btn-search{
+	color:#0033FF;
+	font-size: 1.3em;
+	font-weight: bold;
+        background-image: url("/sitools/common/res/images/icons/toolbar_open_search.png");
+}
+
+/* RESET FORM button styling*/
+button.x-btn-reset{
+	font-size: 1.2em;
+	font-weight: normal;
+        background-image: url("/sitools/common/res/images/icons/clean.png");
+}
+
+}
diff --git a/szcluster-db/workspace/client-public/res/images/icons/clean.png b/szcluster-db/workspace/client-public/res/images/icons/clean.png
new file mode 100644
index 0000000..b61e566
Binary files /dev/null and b/szcluster-db/workspace/client-public/res/images/icons/clean.png differ
diff --git a/szcluster-db/workspace/client-user/js/components/forms/mainContainer.js b/szcluster-db/workspace/client-user/js/components/forms/mainContainer.js
new file mode 100644
index 0000000..3d32ffb
--- /dev/null
+++ b/szcluster-db/workspace/client-user/js/components/forms/mainContainer.js
@@ -0,0 +1,321 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools, i18n, userLogin, DEFAULT_WIN_HEIGHT, DEFAULT_WIN_WIDTH, getDesktop, projectGlobal, SitoolsDesk, DEFAULT_PREFERENCES_FOLDER*/
+/*global loadUrl*/
+/*
+ * @include "formComponentsPanel.js"
+ */
+Ext.namespace('sitools.user.component.forms');
+
+/**
+ * The global Panel. A panel with a formComponentsPanel and the buttons. 
+ * @cfg {string} dataUrl Attachement Url of the dataset
+ * @cfg {string} datasetId datasetId 
+ * @cfg {string} datasetName Dataset Name
+ * @cfg {Ext.grid.ColumnModel} datasetCm Column model of the dataset
+ * @cfg {string} formId Form Id
+ * @cfg {string} formName Form Name
+ * @cfg {Array} formParameters Array of form parameters
+ * @cfg {Array} formZones Array of form Zones containing parameters
+ * @cfg {number} formWidth Form Width 
+ * @cfg {number} formHeight Form Height 
+ * @cfg {string} formCss Name of a specific css class to apply to form
+ * @cfg {string} datasetView Name of the datasetView Object
+ * @cfg {Array} dictionaryMappings the Mapping between dataset column Model and concepts
+ * @class sitools.user.component.forms.mainContainer
+ * @extends Ext.Panel
+ * @requires sitools.user.component.formComponentsPanel
+ */
+sitools.user.component.forms.mainContainer = function (config) {
+//sitools.component.users.datasets.forms = function (config) {
+    Ext.apply(this, config);
+    this.componentType = "form";
+    
+    var panelIdObject = {};
+    
+    // New Form model with zones
+    if (!Ext.isEmpty(this.formZones)){
+        Ext.each(this.formZones, function(formParam) { 
+//AVANT MODIF AVEC UN BUB            var containerId = formParam.containerPanelId;
+            var containerId = formParam.id;
+            if (Ext.isEmpty(panelIdObject[containerId])){
+                panelIdObject[containerId] = [];
+            }
+            panelIdObject[containerId].push(formParam);
+        });
+    } else { // old form model
+        Ext.each(config.formParameters, function(formParam) { 
+            var containerId = formParam.containerPanelId;
+            if (Ext.isEmpty(panelIdObject[containerId])){
+                panelIdObject[containerId] = [];
+            }
+            panelIdObject[containerId].push(formParam);
+        });
+    }
+    
+    var items = [];
+    var globalParams = {};
+    
+    Ext.iterate(panelIdObject, function(key, formParams){
+    	var componentList = new  sitools.user.component.formComponentsPanel({
+            border: true,
+            css : config.formCss, 
+            formId : config.formId,
+            id : key
+    	});
+
+        if (!Ext.isEmpty(this.formZones)) {
+            globalParams.formZones = formParams;
+        } else {
+            globalParams.oldParameters = formParams;
+        }
+
+        componentList.datasetCm = config.dataset.columnModel;
+        componentList.loadParameters(globalParams, config.dataUrl, "dataset");
+
+		items.push(componentList);
+    }, this);
+    
+    this.zonesPanel = new Ext.Panel({
+        width : config.formWidth,
+        height : config.formHeight,
+        css : config.formCss, 
+        formId : config.formId,
+        items : [items]
+    });
+    
+    if (Ext.isEmpty(config.dataset)) {
+	    Ext.Ajax.request({
+			url : config.dataUrl, 
+			method : "GET", 
+			scope : this, 
+			success : function (ret) {
+				if (showResponse(ret)) {
+	                var json = Ext.decode(ret.responseText);
+//	                this.componentList.datasetCm = json.dataset.columnModel;
+//					this.componentList.loadParameters(config.formParameters, config.dataUrl, "dataset");
+					this.datasetId = json.dataset.id;
+					this.datasetName = json.dataset.name;
+					this.datasetCm = json.dataset.columnModel;
+		            this.datasetView = json.dataset.datasetView;
+					this.dictionaryMappings = json.dataset.dictionaryMappings;
+	            }
+			}
+		});
+    }
+    else {
+//		this.componentList.datasetCm = config.dataset.columnModel;
+//		this.componentList.loadParameters(config.formParameters, config.dataUrl, "dataset");
+		this.datasetId = config.dataset.id;
+		this.datasetName = config.dataset.name;
+		this.datasetCm = config.dataset.columnModel;
+        this.datasetView = config.dataset.datasetView;
+		this.dictionaryMappings = config.dataset.dictionaryMappings;
+    }
+    
+    sitools.user.component.forms.mainContainer.superclass.constructor.call(this, Ext.apply({
+        height : config.formHeight,
+        width : config.formWidth,
+        autoScroll : true,
+        bodyBorder : false,
+        border : false,
+        iconCls : 'z-btn-search',
+        items : [this.zonesPanel],
+        buttons : [ 
+
+//      ************************* Reset Form button ************************** //
+	{
+            text : 'Reset Form',
+            scope : this,
+            iconCls : 'x-btn-reset',
+            handler : function () {
+		var containers = this.find("stype", 'sitoolsFormContainer');
+	        Ext.each(containers, function (container) {
+			if(Ext.isFunction(container.resetToDefault)){
+			container.resetToDefault();
+			}
+        	}, this);
+
+	    }
+        },
+//      ********************************************************************** //
+
+	{
+            text : i18n.get('label.search'),
+            scope : this,
+            iconCls : 'x-btn-search',
+            handler : function () {
+                this.onSearch(config);
+            }
+        }
+	],
+        listeners : {
+			scope : this, 
+			resize : function () {
+				if (!Ext.isEmpty(this.zonesPanel.getEl())) {
+					var cmpChildSize = this.zonesPanel.getSize();
+					var size = this.body.getSize();
+					var xpos = 0, ypos = 0;
+					if (size.height > cmpChildSize.height) {
+						ypos = (size.height - cmpChildSize.height) / 2;
+					}
+					if (size.width > cmpChildSize.width) {
+						xpos = (size.width - cmpChildSize.width) / 2;
+					}
+					this.zonesPanel.setPosition(xpos, ypos);
+				}
+				
+			}
+        },          
+        bbar : new Ext.ux.StatusBar({
+            text : i18n.get('label.ready'),
+            iconCls : 'x-status-valid',
+            hidden : true
+        })
+    }));
+
+};
+Ext.extend(sitools.user.component.forms.mainContainer, Ext.Panel, {
+    onSearch : function (config) {
+        
+        var valid = true;
+        
+        this.zonesPanel.items.each(function(componentList){
+            valid = valid && componentList.isComponentsValid();            
+        },this);
+        
+        if (!valid) {
+            this.getBottomToolbar().setStatus({
+                text : i18n.get('label.checkformvalue'),
+                iconCls : 'x-status-error'
+            });
+            this.getBottomToolbar().setVisible(true);    
+            return;
+        } else {
+            this.getBottomToolbar().setVisible(false);
+        }
+		//Execute a request to get the dataset config 
+		Ext.Ajax.request({
+			url : config.dataUrl, 
+			method : "GET", 
+			scope : this, 
+			success : function (ret) {
+                var Json = Ext.decode(ret.responseText);
+                if (!Json.success) {
+                    Ext.Msg.alert(i18n.get('label.warning'), Json.message);
+                    return;
+                } else {
+					var dataset = Json.dataset;
+					this.doSearch(config, dataset);
+                }
+			},
+			failure : alertFailure
+		});
+    }, 
+    
+    /**
+     * Build the query for the liveGrid and build the livegrid component
+     * @param config
+     * @returns
+     */
+    doSearch : function (config, dataset) {
+        var containers = this.find("stype", 'sitoolsFormContainer');
+        var formParams = [];
+        var glue = "";
+        var i = 0;
+        Ext.each(containers, function (container) {
+            // var f = form.getForm();
+
+            if (Ext.isFunction(container.getParameterValue)) {
+	            var param = container.getParameterValue();
+	            if (!Ext.isEmpty(param)) {
+	                formParams.push(this.paramValueToApi(param));
+	            }
+            }
+        }, this);
+
+        var desktop = getDesktop();
+        var win = desktop.getWindow("windResultForm" + config.formId);
+        if (win) {
+            win.close();
+        }
+        if (Ext.isFunction(this.searchAction)) {
+        	this.searchAction(formParams, dataset, this.scope);
+        }
+        else {
+        	this.defaultSearchAction(formParams, dataset);
+        }
+        
+    },
+    
+    defaultSearchAction : function (formParams, dataset) {
+        var jsObj = eval(dataset.datasetView.jsObject);
+        var componentCfg = {
+            dataUrl : dataset.sitoolsAttachementForUsers,
+            datasetId : dataset.id,
+            datasetCm : dataset.columnModel,
+            datasetName : dataset.name, 
+            formParams : formParams, 
+            dictionaryMappings : dataset.dictionaryMappings, 
+			datasetViewConfig : dataset.datasetViewConfig, 
+            preferencesPath : "/" + dataset.name, 
+            preferencesFileName : "datasetView"
+        };
+        var windowConfig = {
+//            id : "windResultForm" + config.formId, 
+            title : i18n.get('label.dataTitle') + " : " + dataset.name, 
+            datasetName : dataset.name, 
+            type : "data", 
+            saveToolbar : true, 
+            iconCls : "dataviews"
+        };
+        SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, jsObj);
+    }, 
+    
+    _getSettings : function () {
+        return {
+			objectName : "forms", 
+			dataUrl : this.dataUrl,
+			dataset : this.dataset,
+            formId : this.formId,
+            formName : this.formName,
+            formParameters : this.formParameters,
+            formWidth : this.formWidth,
+            formHeight : this.formHeight, 
+            formCss : this.formCss, 
+            datasetView : this.datasetView,
+            dictionaryMappings : this.dictionaryMappings, 
+            preferencesPath : this.preferencesPath, 
+            preferencesFileName : this.preferencesFileName
+        };
+    }, 
+    /**
+     * Build a string using a form param Value. 
+     * @param {} paramValue An object with attributes : at least type, code, value and optionnal userDimension, userUnit
+     * @return {string} something like "TEXTFIELD|ColumnAlias|value"
+     */
+    paramValueToApi : function (paramValue) {
+		var stringParam = paramValue.type + "|" + paramValue.code + "|" + paramValue.value;
+        if (!Ext.isEmpty(paramValue.userDimension) && !Ext.isEmpty(paramValue.userUnit)) {
+			stringParam += "|" + paramValue.userDimension + "|" + paramValue.userUnit.unitName; 
+        }  
+        return stringParam;
+    }
+});
+
diff --git a/szcluster-db/workspace/client-user/js/components/forms/projectForm.js b/szcluster-db/workspace/client-user/js/components/forms/projectForm.js
new file mode 100644
index 0000000..01e4ad9
--- /dev/null
+++ b/szcluster-db/workspace/client-user/js/components/forms/projectForm.js
@@ -0,0 +1,617 @@
+/***************************************
+* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES
+* 
+* This file is part of SITools2.
+* 
+* SITools2 is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+* 
+* SITools2 is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+* 
+* You should have received a copy of the GNU General Public License
+* along with SITools2.  If not, see <http://www.gnu.org/licenses/>.
+***************************************/
+/*global Ext, sitools, SITOOLS_DATE_FORMAT, SITOOLS_DEFAULT_IHM_DATE_FORMAT, i18n, userLogin, DEFAULT_WIN_HEIGHT, DEFAULT_WIN_WIDTH, getDesktop, projectGlobal, SitoolsDesk, DEFAULT_PREFERENCES_FOLDER, alertFailure*/
+/*global loadUrl*/
+/*
+ * @include "formComponentsPanel.js"
+ * @include "resultsProjectForm.js"
+ */
+Ext.namespace('sitools.user.component.forms');
+
+/**
+ * The global Panel. A panel with a formComponentsPanel and the buttons. 
+ * @cfg {string} formId Id of the selected Form
+ * @cfg {string} formName Name of the selected Form 
+ * @cfg {Array} formParameters Array of all form Parameters
+ * @cfg {number} formWidth Form Width 
+ * @cfg {number} formHeight Form Height 
+ * @cfg {string} formCss Name of a specific css class to apply to form 
+ * @cfg {Array} properties An array of Properties. 
+ * @cfg {string} urlServicePropertiesSearch The url to request properties
+ * @cfg {string} urlServiceDatasetSearch the url to request for Multids Search
+ * @cfg {string} dictionaryName the Name of the dictionary attached to the form
+ * @class sitools.user.component.forms.projectForm
+ * @extends Ext.Panel
+ * @requires sitools.user.component.formComponentsPanel
+ */
+sitools.user.component.forms.projectForm = Ext.extend(Ext.Panel, {
+    initComponent : function () {
+        var config = this; 
+        this.componentType = "formProject";
+        
+        var panelIdObject = {};
+        
+        // New Form model with zones
+        if (!Ext.isEmpty(this.formZones)){
+            Ext.each(this.formZones, function(formParam) { 
+                var containerId = formParam.containerPanelId;
+                if (Ext.isEmpty(panelIdObject[containerId])){
+                    panelIdObject[containerId] = [];
+                }
+                panelIdObject[containerId].push(formParam);
+            });
+        } else { // old form model
+            Ext.each(config.formParameters, function(formParam) { 
+                var containerId = formParam.containerPanelId;
+                if (Ext.isEmpty(panelIdObject[containerId])){
+                    panelIdObject[containerId] = [];
+                }
+                panelIdObject[containerId].push(formParam);
+            });
+        }
+        
+        var items = [];
+        var globalParams = {};
+        
+        Ext.iterate(panelIdObject, function(key, formParams){
+            var componentList = new  sitools.user.component.formComponentsPanel({
+                border: true,
+                css : config.formCss, 
+                formId : config.formId,
+                id : key
+            });
+
+            if (!Ext.isEmpty(this.formZones)) {
+                globalParams.formZones = formParams;
+            } else {
+                globalParams.oldParameters = formParams;
+            }
+
+//            componentList.datasetCm = config.dataset.columnModel;
+            componentList.loadParameters(globalParams, config.dataUrl, "dataset");
+
+            items.push(componentList);
+        }, this);
+        
+        
+        
+        /**
+         * The panel that displays all form components as defined by the administrator. 
+         */
+        this.zonesPanel = new Ext.Panel({
+            width : config.formWidth,
+            height : config.formHeight, 
+            css : config.formCss, 
+            formId : config.formId,
+            items : [items]
+        });
+//        
+//        if (!Ext.isEmpty(config.formParameters)) {
+//            this.componentList.loadParameters(config.formParameters, config.dataUrl, "project");
+//        }
+    
+        var displayComponentPanel = new Ext.Panel({
+            title : i18n.get('label.formConcepts'), 
+            region : "center", 
+            flex : 2, 
+            autoScroll : true,
+            items : this.zonesPanel,
+            layout : "absolute",
+            listeners : {
+                scope : this, 
+                resize : function () {
+                    if (!Ext.isEmpty(this.zonesPanel.getEl())) {
+                        var cmpChildSize = this.zonesPanel.getSize();
+                        var size = this.body.getSize();
+                        var xpos = 0, ypos = 0;
+                        if (size.height > cmpChildSize.height) {
+                            ypos = (size.height - cmpChildSize.height) / 2;
+                        }
+                        if (size.width > cmpChildSize.width) {
+                            xpos = (size.width - cmpChildSize.width) / 2;
+                        }
+                        this.zonesPanel.setPosition(xpos, ypos);
+                        
+                    }
+                }
+            }
+        });
+        
+        /**
+         * The panel that displays Property search
+         * Each property adds a formField with the buildPropertyField method
+         */
+        this.propertyPanel = new Ext.form.FormPanel({
+            title : i18n.get("label.defineProperties"), 
+            padding : 10,
+            labelWidth : 100, 
+            flex : 2,
+            autoScroll : true, 
+            defaults : {
+                labelSeparator : ""
+            },
+            buttons : [{
+                text : i18n.get('label.refreshDatasets'), 
+                scope : this, 
+                handler : this.propertySearch
+            }]
+        });
+        if (!Ext.isEmpty(this.properties)) {
+            Ext.each(this.properties, function (prop) {
+                var field = this.buildPropertyField(prop);
+                this.propertyPanel.add(field);
+            }, this);
+        }
+        
+        var storeDatasets = new Ext.data.JsonStore({
+            restful  : true, 
+            fields : [{
+                name : "id", 
+                type : "string"
+            }, {
+                name : "name", 
+                type : "string"
+            }, {
+                name : "visible", 
+                type : "boolean"
+            }], 
+            url : projectGlobal.sitoolsAttachementForUsers + this.urlServicePropertiesSearch, 
+            root : "collection.dataSets", 
+            listeners : {
+                load : function (store, recs) {
+                    Ext.each(recs, function (rec) {
+                        rec.set("visible", true);
+                    });
+                }
+            }, 
+            autoLoad : true
+        });
+        
+        var visible = new Ext.grid.CheckColumn({
+            header : i18n.get('headers.visible'),
+            dataIndex : 'visible',
+            width : 55
+        });
+        
+        var cmDatasets = new Ext.grid.ColumnModel({
+            columns : [ {
+                header : i18n.get('headers.name'),
+                dataIndex : 'name',
+                width : 120
+            }, visible]
+        });
+        
+        var smDatasets = new Ext.grid.RowSelectionModel({
+            singleSelect : true
+        });
+        
+        /**
+         * The dataset list. 
+         * It is updated when user pressed on refresh dataset button.
+         */
+        this.datasetPanel = new Ext.grid.EditorGridPanel({
+            title : i18n.get('label.defineDatasets'), 
+            store : storeDatasets, 
+            cm : cmDatasets, 
+            sm : smDatasets, 
+            flex : 1, 
+            autoScroll : true, 
+            viewConfig : {
+                forceFit : true 
+            }, 
+            plugins : [visible]
+        });
+        
+        var firstPanel = new Ext.Panel({
+            height : 300, 
+            items : [this.propertyPanel, this.datasetPanel], 
+            layout : "hbox", 
+            collapsedTitle : i18n.get('label.advancedSearch'),
+            region : "north",
+            collapsible : true, 
+            collapsed : true, 
+            flex : 2, 
+            layoutConfig : {
+                align : "stretch"   
+            }
+        });
+
+//      ************************* Reset Form button ************************** //
+        this.resetFormButton = new Ext.Button({
+            text : 'Reset Form',
+            scope : this,
+            iconCls : 'x-btn-reset',
+            handler : function () {
+                var containers = this.find("stype", 'sitoolsFormContainer');
+                Ext.each(containers, function (container) {
+                        if(Ext.isFunction(container.resetToDefault)){
+                        container.resetToDefault();
+                        }
+                }, this);
+            }
+        });
+//      ********************************************************************** //
+
+        /**
+         * A simple button to launch the main request on each selected dataset. 
+         */
+        this.searchButton = new Ext.Button({
+            text : i18n.get('label.search'),
+            scope : this,
+            iconCls : 'x-btn-search',
+            handler : function (button) {
+                this.onSearch(button);
+            }
+        });
+        
+        Ext.apply(this, {
+            height : config.formHeight,
+            layout : "border", 
+            layoutConfig : {
+                align : "stretch"
+            },
+            items : [ firstPanel, displayComponentPanel ],
+            buttons : [this.resetFormButton, this.searchButton], //reset button
+            listeners : {
+                scope : this, 
+                propertyChanged : function () {
+                    var properties = this.propertyPanel.items.items;
+                    var params = {};
+                    var j = 0;
+                    var k = {};
+                    for (var i = 0; i < properties.length; i++) {
+                        var prop = properties[i];
+                        if (!Ext.isEmpty(prop.getAPIValue())) {
+                            params["k[" + j + "]"] = prop.getAPIValue();
+                            j++;
+                        }
+                    }
+                    this.datasetPanel.getStore().load({
+                        params : params
+                    });
+                }, 
+                multiDsSearchDone : function () {
+                    this.resetFormButton.setDisabled(false); //reset button
+                    this.searchButton.setDisabled(false);
+                }
+
+            },            
+            bbar : new Ext.ux.StatusBar({
+                text : i18n.get('label.ready'),
+                iconCls : 'x-status-valid',
+                hidden : true
+            })
+        });
+        sitools.user.component.forms.projectForm.superclass.initComponent.call(this);
+    }, 
+    /**
+     * Build the query for the multiDs search
+     * @param {Ext.Button} button The button that launch the request (to be disabled)
+     * @returns
+     */
+    onSearch : function (button) {
+        button.setDisabled(true);
+        var containers = this.find("stype", 'sitoolsFormContainer');
+        var formMultiDsParams = [];
+        var glue = "";
+        var i = 0;
+        var datasets = [];
+        this.datasetPanel.getStore().each(function (rec) {
+            if (rec.get("visible")) {
+                datasets.push(rec.get('id'));
+            }
+        });
+        if (datasets.length <= 0) {
+            Ext.Msg.alert(i18n.get('label.error'), i18n.get('label.atLeastOneDataset'));
+            button.setDisabled(false);
+            return;
+        }
+        
+        if (! Ext.isEmpty(this.nbDatasetsMax) && datasets.length > this.nbDatasetsMax) {          
+            Ext.Msg.alert(i18n.get('label.error'), String.format(i18n.get('label.toManyDatasetsAllowed'), this.nbDatasetsMax));
+            button.setDisabled(false);
+            return;
+        }
+        var valid = true;
+        
+        this.zonesPanel.items.each(function(componentList){
+            valid = valid && componentList.isComponentsValid();            
+        },this);
+        
+        if (!valid) {
+            this.getBottomToolbar().setStatus({
+                text : i18n.get('label.checkformvalue'),
+                iconCls : 'x-status-error'
+            });
+            this.getBottomToolbar().setVisible(true);    
+            button.setDisabled(false);
+            return;
+        } else {
+            this.getBottomToolbar().setVisible(false);
+        }
+        
+        Ext.each(containers, function (container) {
+            // var f = form.getForm();
+
+            if (Ext.isFunction(container.getParameterValue)) {
+                var param = container.getParameterValue();
+                
+                if (!Ext.isEmpty(param)) {
+                    formMultiDsParams.push(this.paramValueToApi(param));
+                }
+            }
+        }, this);
+        
+        var urlService = projectGlobal.sitoolsAttachementForUsers + this.urlServiceDatasetSearch;
+        
+        var params = {};
+        params.datasetsList = datasets.join("|");
+
+        i = 0;
+        
+        if (!Ext.isEmpty(formMultiDsParams)) {
+            Ext.each(formMultiDsParams, function (param) {
+                params["c[" + i + "]"] = param;
+                i += 1;
+            }, this);
+        }
+
+        //Launch the first POST Request on service: 
+        Ext.Ajax.request({
+            method : "POST", 
+            params : params, 
+            //Just to be sure that params are passed with the url request
+            jsonData : {}, 
+            scope : this, 
+            url : urlService, 
+            success : function (response) {
+                try {
+                    var json = Ext.decode(response.responseText);
+                    if (! json.success) {
+                        Ext.Msg.alert(i18n.get('label.error'), json.message);
+                        return;
+                    }
+                    var jsObj = SitoolsDesk.navProfile.multiDataset.getObjectResults();
+                    var componentCfg = {
+                        urlTask : json.TaskModel.statusUrl,
+                        formId : this.formId,
+                        formMultiDsParams : formMultiDsParams,
+                        datasets : datasets, 
+                        formName : this.formName, 
+                        callerId : this.id
+                    };
+
+                    var windowConfig = {
+                        id : "windMultiDsResultForm" + this.formId, 
+                        title : i18n.get('label.MultiDsResultForm') + " : " + this.formName, 
+                        saveToolbar : false, 
+                        iconCls : "dataviews"
+                    };
+                    SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, jsObj);
+                    
+                }
+                catch (err) {
+                    Ext.Msg.alert(i18n.get('label.error'), err);
+                    return;
+                }
+            }, 
+                
+            failure : alertFailure
+        });
+        var desktop = getDesktop();
+        var win = desktop.getWindow("windMultiDsResultForm" + this.formId);
+        if (win) {
+            win.close();
+        }
+
+    },
+    /**
+     * A method to save all the window settings to be abble to reload it when desktop is reloaded. 
+     * @return {}
+     */
+    _getSettings : function () {
+        return {
+            objectName : "projectForm", 
+        	formId : this.formId,
+            formName : this.formName,
+            formParameters : this.formParameters,
+            formWidth : this.formWidth,
+            formHeight : this.formHeight, 
+            formCss : this.formCss, 
+            properties : this.properties, 
+            urlServicePropertiesSearch : this.urlServicePropertiesSearch, 
+            urlServiceDatasetSearch : this.urlServiceDatasetSearch, 
+            componentType : this.componentType, 
+            dictionaryName : this.dictionaryName,
+            preferencesPath : this.preferencesPath, 
+            preferencesFileName : this.preferencesFileName,
+            formZones : this.zones
+            
+        };
+    }, 
+    /**
+     * Build a string using a form param Value. 
+     * @param {} paramValue An object with attributes : at least type, code, value and optionnal userDimension, userUnit
+     * @return {string} something like "TEXTFIELD|ColumnAlias|value"
+     */
+    paramValueToApi : function (paramValue) {
+        var stringParam = paramValue.type + "|" + this.dictionaryName + "," + paramValue.code + "|" + paramValue.value;
+        if (!Ext.isEmpty(paramValue.userDimension) && !Ext.isEmpty(paramValue.userUnit)) {
+            stringParam += "|" + paramValue.userDimension + "|" + paramValue.userUnit.unitName; 
+        }  
+        return stringParam;
+    }, 
+
+//  ******** Reset Form Button *********//
+    getResetFormButton : function () {
+        return this.resetFormButton;
+    },
+//  ************************************//
+
+    /**
+     * Returns the search Button. 
+     * @return {}
+     */
+    getSearchButton : function () {
+        return this.searchButton;
+    }, 
+   
+    /**
+     * Build for a properties a new formField depending on property type. 
+     * The property type could be one of : 
+     *  - TEXTFIELD, 
+     *  - NUMERIC_FIELD, 
+     *  - NUMERIC_BETWEEN, 
+     *  - DATE_BETWEEN
+     * @param {} prop the Json definition of a property. 
+     * @return {Ext.form.Field} a simple or composite field. 
+     */
+    buildPropertyField : function (prop) {
+        var field;
+        switch (prop.type) {
+        case "TEXTFIELD" : 
+            field = {
+                xtype : "textfield", 
+                name : prop.name, 
+                anchor : '98%', 
+                enableKeyEvents : true, 
+                fieldLabel : prop.name, 
+                getAPIValue : function () {
+                    if (Ext.isEmpty(this.getValue())) {
+                        return null;
+                    }
+                    return String.format("{0}|{1}|{2}", prop.type, prop.name, this.getValue());
+                }
+            };          
+            break;
+        case "NUMBER_FIELD" : 
+            field = {
+                xtype : "numberfield", 
+                name : prop.name, 
+                anchor : '98%', 
+                enableKeyEvents : true, 
+                fieldLabel : prop.name, 
+                getAPIValue : function () {
+                    if (Ext.isEmpty(this.getValue())) {
+                        return null;
+                    }
+                    return String.format("{0}|{1}|{2}", prop.type, prop.name, this.getValue());
+                }
+            };          
+            break;
+        case "NUMERIC_BETWEEN" : 
+            field = {
+                xtype: 'compositefield',
+                defaults: {
+                    flex: 1
+                },
+                msgTarget: 'under',
+                anchor : '98%', 
+                items: [
+                    {
+                        xtype: 'numberfield',
+                        name : prop.name + "deb", 
+                        enableKeyEvents : true
+                    },
+                    {
+                        xtype: 'numberfield',
+                        name : prop.name + "fin"
+                
+                    }
+                ],
+                fieldLabel : prop.name, 
+                getAPIValue : function () {
+                    var deb = this.items.itemAt(0).getValue();
+                    var fin = this.items.itemAt(1).getValue();
+                    if (Ext.isEmpty(deb) || Ext.isEmpty(fin)) {
+                        return null;
+                    }
+                    return String.format("{0}|{1}|{2}|{3}", prop.type, prop.name, deb, fin);
+                }
+            };          
+            break;
+        case "DATE_BETWEEN" : 
+            field = {
+                xtype: 'compositefield',
+                defaults: {
+                    flex: 1
+                },
+                msgTarget: 'under',
+                anchor : '98%', 
+                items: [
+                    {
+                        xtype: 'datefield',
+                        name : prop.name + "deb", 
+                        enableKeyEvents : true, 
+                        format : SITOOLS_DEFAULT_IHM_DATE_FORMAT, 
+                        showTime : true
+                    },
+                    {
+                        xtype: 'datefield',
+                        name : prop.name + "fin", 
+                        format : SITOOLS_DEFAULT_IHM_DATE_FORMAT, 
+                        showTime : true
+                
+                    }
+                ],
+                fieldLabel : prop.name, 
+                getAPIValue : function () {
+                    var deb, fin;
+                    try {
+                        deb = this.items.itemAt(0).getValue().format(SITOOLS_DATE_FORMAT);
+                        fin = this.items.itemAt(1).getValue().format(SITOOLS_DATE_FORMAT);
+                    
+                    }
+                    catch (err) {
+                        return null;
+                    }
+                    if (Ext.isEmpty(deb) || Ext.isEmpty(fin)) {
+                        return null;
+                    }
+                    return String.format("{0}|{1}|{2}|{3}", prop.type, prop.name, deb, fin);
+                }
+            };          
+            break;
+        }
+        return field;
+    }, 
+    /**
+     * Method called when user pressed on refresh Datasets button. 
+     * Course properties and creates the parameters of the query to search the list of datasets
+     */
+    propertySearch : function () {
+        var properties = this.propertyPanel.items.items;
+        var params = {};
+        var j = 0;
+        var k = {};
+        for (var i = 0; i < properties.length; i++) {
+            var prop = properties[i];
+            if (!Ext.isEmpty(prop.getAPIValue())) {
+                params["k[" + j + "]"] = prop.getAPIValue();
+                j++;
+            }
+        }
+        this.datasetPanel.getStore().load({
+            params : params
+        });
+        this.datasetPanel.getView().refresh();
+    }
+    
+});
+
