diff --git a/frontend-js/.idea/frontend-js.iml b/frontend-js/.idea/frontend-js.iml
index efb73a09b9bdf2792393a146168852c9da1fb5a9..45dbf88f6539d78ee4888ab62c2e63d304225ec4 100644
--- a/frontend-js/.idea/frontend-js.iml
+++ b/frontend-js/.idea/frontend-js.iml
@@ -20,5 +20,6 @@
     <orderEntry type="library" name="jQuery UI-1.10.2" level="application" />
     <orderEntry type="library" name="jQuery-2.0.0" level="application" />
     <orderEntry type="library" name="datatables.net-DefinitelyTyped" level="application" />
+    <orderEntry type="library" name="request-DefinitelyTyped" level="application" />
   </component>
 </module>
\ No newline at end of file
diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index 78f7c7216d2890fe933b3faf1bf355bc54bdd8dd..abf9eedc134329defe54ed3a23a25a832617370c 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -157,27 +157,35 @@ AbstractCustomMap.prototype.createMapOptions = function () {
  */
 AbstractCustomMap.prototype.createTypeOptions = function (param) {
   var self = this;
-  var result = {
+  return {
     // this is a function that will retrieve valid url to png images for
     // tiles on different zoom levels
     getTileUrl: function (coord, zoom) {
       // we have 1 tile on self.getConfiguration().MIN_ZOOM and
       // therefore must limit tails according to this
       /* jshint bitwise: false */
-      var tileRange = 1 << (zoom - self.getMinZoom());
-      if (coord.y < 0 || coord.y >= tileRange || coord.x < 0 || coord.x >= tileRange) {
+      var maxTileRange = 1 << (zoom - self.getMinZoom());
+      var maxTileXRange = maxTileRange;
+      var maxTileYRange = maxTileRange;
+
+      var width = self.getModel().getWidth();
+      var height = self.getModel().getHeight();
+      if (width > height) {
+        maxTileYRange = height / width * maxTileRange;
+      } else if (width < height) {
+        maxTileXRange = width / height * maxTileRange;
+      }
+      if (coord.y < 0 || coord.y >= maxTileYRange || coord.x < 0 || coord.x >= maxTileXRange) {
         return null;
       }
-      var addr = "../map_images/" + param.getDirectory() + "/" + zoom + "/" + coord.x + "/" + coord.y + ".PNG";
-      return addr;
+      return "../map_images/" + param.getDirectory() + "/" + zoom + "/" + coord.x + "/" + coord.y + ".PNG";
     },
-    tileSize: new google.maps.Size(this.getTileSize(), this.getTileSize()),
-    maxZoom: this.getMaxZoom(),
-    minZoom: this.getMinZoom(),
+    tileSize: new google.maps.Size(self.getTileSize(), self.getTileSize()),
+    maxZoom: self.getMaxZoom(),
+    minZoom: self.getMinZoom(),
     radius: 360,
     name: param.name
   };
-  return result;
 };
 
 /**
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 464687c519bdebf2782030479e66ed695396bd49..2dcf1c7a9fcdda04ab59e72c87eb337ec64108f7 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -70,7 +70,7 @@ CustomMap.prototype.constructor = CustomMap;
  * This code must be run after the object is created. It requires to download
  * some data via promises.
  *
- * @return promise with empty result
+ * @return {Promise} with empty result
  */
 CustomMap.prototype.init = function () {
   var self = this;
@@ -85,11 +85,9 @@ CustomMap.prototype.init = function () {
     ids.push(mapType);
   }
 
-  for (var i = 0; i < ids.length; i++) {
-    var id = ids[i];
+  return Promise.each(ids, function (overlayId) {
     try {
-      var promise = self.openDataOverlay(id);
-      openOverlaysPromises.push(promise);
+      return self.openDataOverlay(overlayId);
     } catch (e) {
       if (e instanceof SecurityError) {
         logger.debug(e.message);
@@ -98,10 +96,7 @@ CustomMap.prototype.init = function () {
         return Promise.reject(e);
       }
     }
-
-  }
-
-  return Promise.all(openOverlaysPromises).then(function () {
+  }).then(function () {
     return ServerConnector.getLogoImg()
   }).then(function (url) {
     var logo2 = self.getControl(ControlType.LOGO_2_IMG);
diff --git a/frontend-js/src/test/js/Configuration-test.js b/frontend-js/src/test/js/Configuration-test.js
index 1d26da921f35b11fd143568ec44588a68feca1d6..6a8adcbc5611e90a3b5253e970e9884ef38b3bb4 100644
--- a/frontend-js/src/test/js/Configuration-test.js
+++ b/frontend-js/src/test/js/Configuration-test.js
@@ -1,112 +1,110 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-require("./mocha-config");
-
-var Configuration = require('../../main/js/Configuration');
-var ConfigurationType = require('../../main/js/ConfigurationType');
-var logger = require('./logger');
-
-var assert = require('assert');
-
-describe('Configuration', function () {
-  describe('constructor', function () {
-    it('default', function () {
-      var configuration = new Configuration({
-        options: {},
-        overlayTypes: {},
-        imageFormats: {},
-        modelFormats: {},
-        elementTypes: {},
-        reactionTypes: {},
-        miriamTypes: {},
-        mapTypes: {},
-        modificationStateTypes: {},
-        privilegeTypes: {},
-        annotators: {}
-      });
-      assert.ok(configuration);
-      assert.equal(0, logger.getWarnings().length);
-    });
-    it('copy', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var copy = new Configuration(configuration);
-
-        assert.equal(configuration.getElementTypes().length, copy.getElementTypes().length)
-      });
-    });
-  });
-
-  describe('getParentType', function () {
-    it('for element type', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var elementType = configuration.getElementTypes()[0];
-        if (elementType.parentClass.indexOf("BioEntity") > 0) {
-          elementType = configuration.getElementTypes()[1];
-        }
-        var parent = configuration.getParentType(elementType);
-        assert.ok(parent);
-      });
-    });
-    it('for reaction type', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var elementType = configuration.getReactionTypes()[0];
-        if (elementType.parentClass.indexOf("BioEntity") > 0) {
-          elementType = configuration.getReactionTypes()[1];
-        }
-        var parent = configuration.getParentType(elementType);
-        assert.ok(parent);
-      });
-    });
-  });
-
-  describe('getElementAnnotators', function () {
-    it('get all', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var annotators = configuration.getElementAnnotators();
-        assert.ok(annotators);
-        assert.ok(annotators.length > 0);
-      });
-    });
-    it('get for element', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var found = false;
-        var types = configuration.getElementTypes();
-        for (var i = 0; i < types.length; i++) {
-          var annotators = configuration.getElementAnnotators(types[i]);
-          if (annotators.length > 0) {
-            found = true;
-          }
-        }
-        assert.ok(found);
-      });
-    });
-  });
-
-  describe('getOption', function () {
-    it('DEFAULT_MAP', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var option = configuration.getOption(ConfigurationType.DEFAULT_MAP);
-        assert.ok(option);
-        assert.ok(option.getType());
-        assert.ok(option.getValue());
-        assert.ok(option.getCommonName());
-      });
-    });
-    it('get for element', function () {
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var found = false;
-        var types = configuration.getElementTypes();
-        for (var i = 0; i < types.length; i++) {
-          var annotators = configuration.getElementAnnotators(types[i]);
-          if (annotators.length > 0) {
-            found = true;
-          }
-        }
-        assert.ok(found);
-      });
-    });
-  });
-});
+"use strict";
+
+require("./mocha-config");
+
+var Configuration = require('../../main/js/Configuration');
+var ConfigurationType = require('../../main/js/ConfigurationType');
+var ServerConnector = require('./ServerConnector-mock');
+var logger = require('./logger');
+
+var assert = require('assert');
+
+describe('Configuration', function () {
+  describe('constructor', function () {
+    it('default', function () {
+      var configuration = new Configuration({
+        options: {},
+        overlayTypes: {},
+        imageFormats: {},
+        modelFormats: {},
+        elementTypes: {},
+        reactionTypes: {},
+        miriamTypes: {},
+        mapTypes: {},
+        modificationStateTypes: {},
+        privilegeTypes: {},
+        annotators: {}
+      });
+      assert.ok(configuration);
+      assert.equal(0, logger.getWarnings().length);
+    });
+    it('copy', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var copy = new Configuration(configuration);
+
+        assert.equal(configuration.getElementTypes().length, copy.getElementTypes().length)
+      });
+    });
+  });
+
+  describe('getParentType', function () {
+    it('for element type', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var elementType = configuration.getElementTypes()[0];
+        if (elementType.parentClass.indexOf("BioEntity") > 0) {
+          elementType = configuration.getElementTypes()[1];
+        }
+        var parent = configuration.getParentType(elementType);
+        assert.ok(parent);
+      });
+    });
+    it('for reaction type', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var elementType = configuration.getReactionTypes()[0];
+        if (elementType.parentClass.indexOf("BioEntity") > 0) {
+          elementType = configuration.getReactionTypes()[1];
+        }
+        var parent = configuration.getParentType(elementType);
+        assert.ok(parent);
+      });
+    });
+  });
+
+  describe('getElementAnnotators', function () {
+    it('get all', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var annotators = configuration.getElementAnnotators();
+        assert.ok(annotators);
+        assert.ok(annotators.length > 0);
+      });
+    });
+    it('get for element', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var found = false;
+        var types = configuration.getElementTypes();
+        for (var i = 0; i < types.length; i++) {
+          var annotators = configuration.getElementAnnotators(types[i]);
+          if (annotators.length > 0) {
+            found = true;
+          }
+        }
+        assert.ok(found);
+      });
+    });
+  });
+
+  describe('getOption', function () {
+    it('DEFAULT_MAP', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var option = configuration.getOption(ConfigurationType.DEFAULT_MAP);
+        assert.ok(option);
+        assert.ok(option.getType());
+        assert.ok(option.getValue());
+        assert.ok(option.getCommonName());
+      });
+    });
+    it('get for element', function () {
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var found = false;
+        var types = configuration.getElementTypes();
+        for (var i = 0; i < types.length; i++) {
+          var annotators = configuration.getElementAnnotators(types[i]);
+          if (annotators.length > 0) {
+            found = true;
+          }
+        }
+        assert.ok(found);
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/Export-test.js b/frontend-js/src/test/js/Export-test.js
index f3ca1655401c87e20568d97e6619e4ca7afcfcf9..2ba754019637bf75fdd5ef2c5abdb18e8b3b0d30 100644
--- a/frontend-js/src/test/js/Export-test.js
+++ b/frontend-js/src/test/js/Export-test.js
@@ -1,36 +1,35 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-var Export = require('../../main/js/Export');
-var logger = require('./logger');
-
-var assert = require('assert');
-
-describe('Export', function() {
-
-  describe('init', function() {
-    it('default behaviour', function() {
-      var exportObject;
-      var project;
-      var configuration;
-
-      return ServerConnector.getConfiguration().then(function(result) {
-        configuration = result;
-        return ServerConnector.getProject();
-      }).then(function(result) {
-        project = result;
-        exportObject = new Export({
-          element : testDiv,
-          project : project,
-          configuration : configuration,
-        });
-        return exportObject.init();
-      }).then(function() {
-
-      });
-    });
-  });
-
-});
+"use strict";
+require("./mocha-config");
+
+var Export = require('../../main/js/Export');
+var ServerConnector = require('./ServerConnector-mock');
+var logger = require('./logger');
+
+var assert = require('assert');
+
+describe('Export', function () {
+
+  describe('init', function () {
+    it('default behaviour', function () {
+      var exportObject;
+      var project;
+      var configuration;
+
+      return ServerConnector.getConfiguration().then(function (result) {
+        configuration = result;
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        exportObject = new Export({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        assert.equal(0, logger.getWarnings().length);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/Functions-test.js b/frontend-js/src/test/js/Functions-test.js
index c1fb623227189c3548228f36e666bb3fec0eb972..6230b87e40c652f646789ccc5ac70f6560d4d06f 100644
--- a/frontend-js/src/test/js/Functions-test.js
+++ b/frontend-js/src/test/js/Functions-test.js
@@ -1,252 +1,252 @@
-"use strict";
-
-require('./mocha-config');
-
-var functions = require('../../main/js/Functions');
-var logger = require('./logger');
-
-var assert = require('assert');
-
-var originalNavigator = null;
-describe('functions', function () {
-
-  beforeEach(function () {
-    originalNavigator = global.navigator;
-  });
-
-  afterEach(function () {
-    global.navigator = originalNavigator;
-  });
-
-  it('Point inside polygon 1', function () {
-    var point = {
-      x: 123,
-      y: 124
-    };
-    var polygon = [];
-    polygon[0] = {
-      x: 0,
-      y: 0
-    };
-    polygon[1] = {
-      x: 100,
-      y: 0
-    };
-    polygon[2] = {
-      x: 100,
-      y: 100
-    };
-    polygon[3] = {
-      x: 0,
-      y: 100
-    };
-
-    assert.equal(false, functions.pointInsidePolygon(point, polygon));
-  });
-
-  it('Point inside polygon 2', function () {
-    var point = {
-      x: 123,
-      y: 124
-    };
-    var polygon = [];
-    polygon[0] = {
-      x: 0,
-      y: 0
-    };
-    polygon[1] = {
-      x: 1000,
-      y: 0
-    };
-    polygon[2] = {
-      x: 1000,
-      y: 1000
-    };
-    polygon[3] = {
-      x: 0,
-      y: 1000
-    };
-
-    assert.ok(functions.pointInsidePolygon(point, polygon));
-  });
-
-  it('Point inside polygon 3', function () {
-    var point = {
-      x: 20,
-      y: 50
-    };
-    var polygon = [];
-    polygon[0] = {
-      x: 0,
-      y: 0
-    };
-    polygon[1] = {
-      x: 100,
-      y: 0
-    };
-    polygon[2] = {
-      x: 10,
-      y: 50
-    };
-    polygon[3] = {
-      x: 100,
-      y: 100
-    };
-    polygon[4] = {
-      x: 0,
-      y: 100
-    };
-
-    assert.equal(false, functions.pointInsidePolygon(point, polygon));
-  });
-
-  it('Point inside polygon 4', function () {
-    var point = {
-      x: 5,
-      y: 50
-    };
-    var polygon = [];
-    polygon[0] = {
-      x: 0,
-      y: 0
-    };
-    polygon[1] = {
-      x: 100,
-      y: 0
-    };
-    polygon[2] = {
-      x: 10,
-      y: 50
-    };
-    polygon[3] = {
-      x: 100,
-      y: 100
-    };
-    polygon[4] = {
-      x: 0,
-      y: 100
-    };
-
-    assert.ok(functions.pointInsidePolygon(point, polygon));
-  });
-
-  it('Integer to html color', function () {
-    var integer = -16711936;
-    var color = functions.intToColorString(integer);
-    assert.equal(7, color.length);
-    assert.equal(color.charAt(0), '#');
-  });
-
-  it('isInt', function () {
-    assert.ok(functions.isInt(12));
-    assert.ok(functions.isInt(-12));
-    assert.ok(functions.isInt(0));
-    assert.equal(functions.isInt(12.1), false);
-    assert.equal(functions.isInt(null), false);
-    assert.equal(functions.isInt(""), false);
-  });
-
-  it('stackTrace', function () {
-    assert.ok(functions.stackTrace());
-  });
-
-  it('getPosition', function () {
-    var div = document.createElement('div');
-    div.scrollLeft = 0;
-    div.scrollTop = 0;
-    var pos = functions.getPosition(div);
-    assert.equal(0, pos.x);
-    assert.equal(0, pos.y);
-  });
-
-  it('isDomElement', function () {
-    assert.strictEqual(false, functions.isDomElement(12));
-    assert.strictEqual(false, functions.isDomElement(-12));
-    assert.strictEqual(false, functions.isDomElement(0));
-    assert.strictEqual(false, functions.isDomElement(12.1));
-    assert.strictEqual(false, functions.isDomElement(null));
-    assert.strictEqual(false, functions.isDomElement(""));
-    assert.strictEqual(false, functions.isDomElement({}));
-    assert.strictEqual(true, functions.isDomElement(document.createElement('div')));
-  });
-
-  describe('overlayToColor', function () {
-    it('positive value', function () {
-      var overlay = {
-        value: 0.5
-      };
-      return functions.overlayToColor(overlay).then(function (colorString) {
-        // check the format of the html color
-        assert.equal(colorString.charAt(0), "#");
-        assert.equal(colorString.length, 7);
-      });
-    });
-    it('negative value', function () {
-      var overlay = {
-        value: -0.5
-      };
-      return functions.overlayToColor(overlay).then(function (colorString) {
-        // check the format of the html color
-        assert.equal(colorString.charAt(0), "#");
-        assert.equal(colorString.length, 7);
-      });
-    });
-    it('invalid arg', function () {
-      return functions.overlayToColor(null).then(function (colorString) {
-        throw new Error('Promise was unexpectedly fulfilled. Result: ' + colorString);
-      }, function rejected(error) {
-        assert.ok(error.indexOf("cannot be null") >= 0);
-      });
-    });
-
-    it('invalid arg 2', function () {
-      return functions.overlayToColor({}).then(function (colorString) {
-        assert.ok(colorString);
-      });
-    });
-  });
-
-
-  it('bound with null params', function () {
-    var value = 12;
-    var result = functions.bound(value, 13, null);
-    assert.equal(result, 13);
-
-    var value2 = 12;
-    var result2 = functions.bound(value2, null, -1);
-    assert.equal(result2, -1);
-  });
-
-  it('browser detection simulation with unsupported detection browser', function () {
-    var browser = functions.browser;
-    browser.init();
-    assert.equal(browser.name, "Unknown");
-    assert.equal(browser.version, "Unknown");
-  });
-
-  it('browser detection simulation with IE', function () {
-    global.navigator = {
-      appName: 'Microsoft Internet Explorer',
-      userAgent: "MSIE 7.0"
-    };
-
-    var browser = functions.browser;
-    browser.init();
-    assert.equal(browser.name, "IE");
-    assert.equal(browser.version, "7.0");
-  });
-
-  it('browser detection simulation with other', function () {
-    global.navigator = {
-      appName: 'Netscape',
-      userAgent: "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko"
-    };
-
-    var browser = functions.browser;
-    browser.init();
-    assert.equal(browser.name, "Other");
-    assert.equal(browser.version, "11.0");
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-});
+"use strict";
+
+require('./mocha-config');
+
+var functions = require('../../main/js/Functions');
+var logger = require('./logger');
+
+var assert = require('assert');
+
+var originalNavigator = null;
+describe('functions', function () {
+
+  beforeEach(function () {
+    originalNavigator = global.navigator;
+  });
+
+  afterEach(function () {
+    global.navigator = originalNavigator;
+  });
+
+  it('Point inside polygon 1', function () {
+    var point = {
+      x: 123,
+      y: 124
+    };
+    var polygon = [];
+    polygon[0] = {
+      x: 0,
+      y: 0
+    };
+    polygon[1] = {
+      x: 100,
+      y: 0
+    };
+    polygon[2] = {
+      x: 100,
+      y: 100
+    };
+    polygon[3] = {
+      x: 0,
+      y: 100
+    };
+
+    assert.equal(false, functions.pointInsidePolygon(point, polygon));
+  });
+
+  it('Point inside polygon 2', function () {
+    var point = {
+      x: 123,
+      y: 124
+    };
+    var polygon = [];
+    polygon[0] = {
+      x: 0,
+      y: 0
+    };
+    polygon[1] = {
+      x: 1000,
+      y: 0
+    };
+    polygon[2] = {
+      x: 1000,
+      y: 1000
+    };
+    polygon[3] = {
+      x: 0,
+      y: 1000
+    };
+
+    assert.ok(functions.pointInsidePolygon(point, polygon));
+  });
+
+  it('Point inside polygon 3', function () {
+    var point = {
+      x: 20,
+      y: 50
+    };
+    var polygon = [];
+    polygon[0] = {
+      x: 0,
+      y: 0
+    };
+    polygon[1] = {
+      x: 100,
+      y: 0
+    };
+    polygon[2] = {
+      x: 10,
+      y: 50
+    };
+    polygon[3] = {
+      x: 100,
+      y: 100
+    };
+    polygon[4] = {
+      x: 0,
+      y: 100
+    };
+
+    assert.equal(false, functions.pointInsidePolygon(point, polygon));
+  });
+
+  it('Point inside polygon 4', function () {
+    var point = {
+      x: 5,
+      y: 50
+    };
+    var polygon = [];
+    polygon[0] = {
+      x: 0,
+      y: 0
+    };
+    polygon[1] = {
+      x: 100,
+      y: 0
+    };
+    polygon[2] = {
+      x: 10,
+      y: 50
+    };
+    polygon[3] = {
+      x: 100,
+      y: 100
+    };
+    polygon[4] = {
+      x: 0,
+      y: 100
+    };
+
+    assert.ok(functions.pointInsidePolygon(point, polygon));
+  });
+
+  it('Integer to html color', function () {
+    var integer = -16711936;
+    var color = functions.intToColorString(integer);
+    assert.equal(7, color.length);
+    assert.equal(color.charAt(0), '#');
+  });
+
+  it('isInt', function () {
+    assert.ok(functions.isInt(12));
+    assert.ok(functions.isInt(-12));
+    assert.ok(functions.isInt(0));
+    assert.equal(functions.isInt(12.1), false);
+    assert.equal(functions.isInt(null), false);
+    assert.equal(functions.isInt(""), false);
+  });
+
+  it('stackTrace', function () {
+    assert.ok(functions.stackTrace());
+  });
+
+  it('getPosition', function () {
+    var div = document.createElement('div');
+    div.scrollLeft = 0;
+    div.scrollTop = 0;
+    var pos = functions.getPosition(div);
+    assert.equal(0, pos.x);
+    assert.equal(0, pos.y);
+  });
+
+  it('isDomElement', function () {
+    assert.strictEqual(false, functions.isDomElement(12));
+    assert.strictEqual(false, functions.isDomElement(-12));
+    assert.strictEqual(false, functions.isDomElement(0));
+    assert.strictEqual(false, functions.isDomElement(12.1));
+    assert.strictEqual(false, functions.isDomElement(null));
+    assert.strictEqual(false, functions.isDomElement(""));
+    assert.strictEqual(false, functions.isDomElement({}));
+    assert.strictEqual(true, functions.isDomElement(document.createElement('div')));
+  });
+
+  describe('overlayToColor', function () {
+    it('positive value', function () {
+      var overlay = {
+        value: 0.5
+      };
+      return functions.overlayToColor(overlay).then(function (colorString) {
+        // check the format of the html color
+        assert.equal(colorString.charAt(0), "#");
+        assert.equal(colorString.length, 7);
+      });
+    });
+    it('negative value', function () {
+      var overlay = {
+        value: -0.5
+      };
+      return functions.overlayToColor(overlay).then(function (colorString) {
+        // check the format of the html color
+        assert.equal(colorString.charAt(0), "#");
+        assert.equal(colorString.length, 7);
+      });
+    });
+    it('invalid arg', function () {
+      return functions.overlayToColor(null).then(function (colorString) {
+        throw new Error('Promise was unexpectedly fulfilled. Result: ' + colorString);
+      }, function rejected(error) {
+        assert.ok(error.indexOf("cannot be null") >= 0);
+      });
+    });
+
+    it('invalid arg 2', function () {
+      return functions.overlayToColor({}).then(function (colorString) {
+        assert.ok(colorString);
+      });
+    });
+  });
+
+
+  it('bound with null params', function () {
+    var value = 12;
+    var result = functions.bound(value, 13, null);
+    assert.equal(result, 13);
+
+    var value2 = 12;
+    var result2 = functions.bound(value2, null, -1);
+    assert.equal(result2, -1);
+  });
+
+  it('browser detection simulation with unsupported detection browser', function () {
+    var browser = functions.browser;
+    browser.init();
+    assert.equal(browser.name, "Unknown");
+    assert.equal(browser.version, "Unknown");
+  });
+
+  it('browser detection simulation with IE', function () {
+    global.navigator = {
+      appName: 'Microsoft Internet Explorer',
+      userAgent: "MSIE 7.0"
+    };
+
+    var browser = functions.browser;
+    browser.init();
+    assert.equal(browser.name, "IE");
+    assert.equal(browser.version, "7.0");
+  });
+
+  it('browser detection simulation with other', function () {
+    global.navigator = {
+      appName: 'Netscape',
+      userAgent: "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko"
+    };
+
+    var browser = functions.browser;
+    browser.init();
+    assert.equal(browser.name, "Other");
+    assert.equal(browser.version, "11.0");
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+});
diff --git a/frontend-js/src/test/js/GuiConnector-mock.js b/frontend-js/src/test/js/GuiConnector-mock.js
index f07c01923a070f1c5d0223e1be379c2f7df7eb17..16731e8490c8a83a3f8d30350a0f2a61035c12e2 100644
--- a/frontend-js/src/test/js/GuiConnector-mock.js
+++ b/frontend-js/src/test/js/GuiConnector-mock.js
@@ -1,30 +1,30 @@
-"use strict";
-
-/* exported logger */
-
-var logger = require('./logger');
-
-var OriginalGuiConnector = require('../../main/js/GuiConnector');
-
-var GuiConnectorMock = OriginalGuiConnector;
-
-GuiConnectorMock.alert = function (error) {
-  if (error instanceof Error) {
-    throw error;
-  } else {
-    throw new Error(error);
-  }
-};
-
-GuiConnectorMock.showProcessing = function (message) {
-  if (message === undefined) {
-    message = "";
-  }
-  logger.debug("[PROCESSING STARTED] " + message);
-};
-
-GuiConnectorMock.hideProcessing = function () {
-  logger.debug("[PROCESSING STOPPED]");
-};
-
-module.exports = GuiConnectorMock;
+"use strict";
+
+/* exported logger */
+
+var logger = require('./logger');
+
+var OriginalGuiConnector = require('../../main/js/GuiConnector');
+
+var GuiConnectorMock = OriginalGuiConnector;
+
+GuiConnectorMock.alert = function (error) {
+  if (error instanceof Error) {
+    throw error;
+  } else {
+    throw new Error(error);
+  }
+};
+
+GuiConnectorMock.showProcessing = function (message) {
+  if (message === undefined) {
+    message = "";
+  }
+  logger.debug("[PROCESSING STARTED] " + message);
+};
+
+GuiConnectorMock.hideProcessing = function () {
+  logger.debug("[PROCESSING STOPPED]");
+};
+
+module.exports = GuiConnectorMock;
diff --git a/frontend-js/src/test/js/GuiConnector-test.js b/frontend-js/src/test/js/GuiConnector-test.js
index db0015dfe10218849c3df6273b17295829437340..36c0edd54af14790a31944a2ed2d5599e46c193e 100644
--- a/frontend-js/src/test/js/GuiConnector-test.js
+++ b/frontend-js/src/test/js/GuiConnector-test.js
@@ -1,76 +1,75 @@
-"use strict";
-
-require("./mocha-config");
-/* exported logger */
-
-var GuiConnector = require('../../main/js/GuiConnector');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('./logger');
-
-describe('GuiConnector', function () {
-  it('destroy', function () {
-    var length = document.body.children.length;
-    var connector = new (GuiConnector.constructor)();
-    connector.showProcessing("test");
-    connector.destroy();
-    assert.equal(length, document.body.children.length);
-  });
-
-  it('hideProcessing', function () {
-    var connector = new (GuiConnector.constructor)();
-    connector.showProcessing();
-    connector.hideProcessing();
-    $(".ui-dialog-content").each(function () {
-      assert.notOk($(this).dialog('isOpen'));
-    });
-    connector.destroy();
-  });
-
-  it('alert', function () {
-    var connector = new (GuiConnector.constructor)();
-    connector.alert("some error");
-    $(".ui-dialog-content").each(function () {
-      assert.ok($(this).dialog('isOpen'));
-    });
-    connector.destroy();
-  });
-
-  it('info', function () {
-    var connector = new (GuiConnector.constructor)();
-    connector.info("info message");
-    $(".ui-dialog-content").each(function () {
-      assert.ok($(this).dialog('isOpen'));
-    });
-    connector.destroy();
-  });
-
-  describe('removeWindowResizeEvent', function () {
-    it('valid handler', function () {
-      var connector = new (GuiConnector.constructor)();
-      connector.init();
-      var handler = function () {
-
-      };
-      connector.addWindowResizeEvent(handler);
-      connector.removeWindowResizeEvent(handler);
-      assert.equal(0, logger.getWarnings().length);
-      connector.destroy();
-    });
-    it('invalid handler', function () {
-      var connector = new (GuiConnector.constructor)();
-      connector.init();
-      var handler = function () {
-
-      };
-      connector.addWindowResizeEvent(handler);
-      connector.removeWindowResizeEvent(function(){
-
-      });
-      assert.equal(1, logger.getWarnings().length);
-      connector.destroy();
-    });
-  });
-
+"use strict";
+
+require("./mocha-config");
+
+var GuiConnector = require('../../main/js/GuiConnector');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('./logger');
+
+describe('GuiConnector', function () {
+  it('destroy', function () {
+    var length = document.body.children.length;
+    var connector = new (GuiConnector.constructor)();
+    connector.showProcessing("test");
+    connector.destroy();
+    assert.equal(length, document.body.children.length);
+  });
+
+  it('hideProcessing', function () {
+    var connector = new (GuiConnector.constructor)();
+    connector.showProcessing();
+    connector.hideProcessing();
+    $(".ui-dialog-content").each(function () {
+      assert.notOk($(this).dialog('isOpen'));
+    });
+    connector.destroy();
+  });
+
+  it('alert', function () {
+    var connector = new (GuiConnector.constructor)();
+    connector.alert("some error");
+    $(".ui-dialog-content").each(function () {
+      assert.ok($(this).dialog('isOpen'));
+    });
+    connector.destroy();
+  });
+
+  it('info', function () {
+    var connector = new (GuiConnector.constructor)();
+    connector.info("info message");
+    $(".ui-dialog-content").each(function () {
+      assert.ok($(this).dialog('isOpen'));
+    });
+    connector.destroy();
+  });
+
+  describe('removeWindowResizeEvent', function () {
+    it('valid handler', function () {
+      var connector = new (GuiConnector.constructor)();
+      connector.init();
+      var handler = function () {
+
+      };
+      connector.addWindowResizeEvent(handler);
+      connector.removeWindowResizeEvent(handler);
+      assert.equal(0, logger.getWarnings().length);
+      connector.destroy();
+    });
+    it('invalid handler', function () {
+      var connector = new (GuiConnector.constructor)();
+      connector.init();
+      var handler = function () {
+
+      };
+      connector.addWindowResizeEvent(handler);
+      connector.removeWindowResizeEvent(function(){
+
+      });
+      assert.equal(1, logger.getWarnings().length);
+      connector.destroy();
+    });
+  });
+
 });
\ No newline at end of file
diff --git a/frontend-js/src/test/js/ObjectWithListeners-test.js b/frontend-js/src/test/js/ObjectWithListeners-test.js
index effe63b928e748140041a62194f707a9d8974a7d..289444da46760c774c930ab309d7f894ac7b6d9f 100644
--- a/frontend-js/src/test/js/ObjectWithListeners-test.js
+++ b/frontend-js/src/test/js/ObjectWithListeners-test.js
@@ -1,155 +1,155 @@
-"use strict";
-
-var ObjectWithListeners = require('../../main/js/ObjectWithListeners');
-
-var logger = require('./logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-var expect = chai.expect;
-
-describe('ObjectWithListeners', function() {
-  beforeEach(function() {
-    logger.flushBuffer();
-  });
-  
-  it("ObjectWithListeners constructor", function() {
-    var obj = new ObjectWithListeners();
-    assert.ok(obj);
-  });
-
-  it("add invalid listener", function() {
-    var obj = new ObjectWithListeners();
-    obj.registerListenerType("t");
-    var code = function(){obj.addListener("t", "not a function");};
-    expect(code).to.throw(/string/);
-    
-  });
-
-  it("add invalid property change listener", function() {
-    var obj = new ObjectWithListeners();
-    var code = function(){obj.addPropertyChangeListener ("t", function(){});};
-    expect(code).to.throw(/Unknown property/);
-    
-  });
-
-  it("add invalid property change listener 2", function() {
-    var obj = new ObjectWithListeners();
-    obj.registerPropertyType("t");
-    var code = function(){obj.addPropertyChangeListener ("t", "not a function");};
-    expect(code).to.throw(/string/);
-    
-  });
-
-  it("re-register listener type", function() {
-    var obj = new ObjectWithListeners();
-    obj.registerListenerType("t");
-    var code = function(){obj.registerListenerType("t");};
-    expect(code).to.throw(/already registered/);
-    
-  });
-
-  it("re-register property type", function() {
-    var obj = new ObjectWithListeners();
-    obj.registerPropertyType ("t");
-    var code = function(){obj.registerPropertyType ("t");};
-    expect(code).to.throw(/already registered/);
-    
-  });
-
-  it("remove invalid listener", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var fun = function(){};
-    var code = function(){obj.removeListener(name, fun);};
-    expect(code).to.throw(/Unknown listener type/);
-    
-  });
-
-  it("remove invalid listener 2", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var fun = function(){};
-    obj.registerListenerType(name, fun);
-    var code = function(){obj.removeListener(name, "not a function");};
-    expect(code).to.throw(/string/);
-    
-  });
-
-  it("remove invalid listener 3", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var fun = function(){};
-    obj.registerListenerType(name, fun);
-    obj.removeListener(name, function(){});
-    assert.equal(logger.getWarnings().length, 1);
-    
-  });
-
-  it("remove invalid property listener", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var fun = function(){};
-    var code = function(){obj.removePropertyListener (name, fun);};
-    expect(code).to.throw(/Unknown property/);
-    
-  });
-
-  it("remove invalid property listener 2", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    obj.registerPropertyType(name);
-    var code = function(){obj.removePropertyListener (name, "not a function");};
-    expect(code).to.throw(/string/);
-    
-  });
-
-  it("remove invalid property listener 3", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var fun = function(){};
-    obj.registerPropertyType(name);
-    obj.removePropertyListener (name, fun);
-    assert.equal(logger.getWarnings().length, 1);
-    
-  });
-
-  it("call invalid listeners", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var code = function(){obj.callListeners(name);};
-    expect(code).to.throw(/Unknown listener/);
-    
-  });
-  it("fire invalid property change listeners", function() {
-    var obj = new ObjectWithListeners();
-    var name = "t";
-    var code = function(){obj.firePropertyChangeListener (name,"old","new");};
-    expect(code).to.throw(/Unknown property/);
-    
-  });
-
-  it("ObjectWithListeners property changes", function() {
-    var handlerCalled = 0;
-    var obj = new ObjectWithListeners();
-
-    var handler = function() {
-      handlerCalled++;
-    };
-
-    obj.registerPropertyType("test");
-
-    obj.addPropertyChangeListener("test", handler);
-
-    obj.firePropertyChangeListener("test", "old val", "new val");
-    assert.equal(1, handlerCalled);
-
-    obj.firePropertyChangeListener("test", "old val", "new val");
-    assert.equal(2, handlerCalled);
-
-    obj.removePropertyListener("test", handler);
-
-    obj.firePropertyChangeListener("test", "old val", "new val");
-    assert.equal(2, handlerCalled);
-  });
-});
+"use strict";
+
+var ObjectWithListeners = require('../../main/js/ObjectWithListeners');
+
+var logger = require('./logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+var expect = chai.expect;
+
+describe('ObjectWithListeners', function() {
+  beforeEach(function() {
+    logger.flushBuffer();
+  });
+  
+  it("ObjectWithListeners constructor", function() {
+    var obj = new ObjectWithListeners();
+    assert.ok(obj);
+  });
+
+  it("add invalid listener", function() {
+    var obj = new ObjectWithListeners();
+    obj.registerListenerType("t");
+    var code = function(){obj.addListener("t", "not a function");};
+    expect(code).to.throw(/string/);
+    
+  });
+
+  it("add invalid property change listener", function() {
+    var obj = new ObjectWithListeners();
+    var code = function(){obj.addPropertyChangeListener ("t", function(){});};
+    expect(code).to.throw(/Unknown property/);
+    
+  });
+
+  it("add invalid property change listener 2", function() {
+    var obj = new ObjectWithListeners();
+    obj.registerPropertyType("t");
+    var code = function(){obj.addPropertyChangeListener ("t", "not a function");};
+    expect(code).to.throw(/string/);
+    
+  });
+
+  it("re-register listener type", function() {
+    var obj = new ObjectWithListeners();
+    obj.registerListenerType("t");
+    var code = function(){obj.registerListenerType("t");};
+    expect(code).to.throw(/already registered/);
+    
+  });
+
+  it("re-register property type", function() {
+    var obj = new ObjectWithListeners();
+    obj.registerPropertyType ("t");
+    var code = function(){obj.registerPropertyType ("t");};
+    expect(code).to.throw(/already registered/);
+    
+  });
+
+  it("remove invalid listener", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var fun = function(){};
+    var code = function(){obj.removeListener(name, fun);};
+    expect(code).to.throw(/Unknown listener type/);
+    
+  });
+
+  it("remove invalid listener 2", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var fun = function(){};
+    obj.registerListenerType(name, fun);
+    var code = function(){obj.removeListener(name, "not a function");};
+    expect(code).to.throw(/string/);
+    
+  });
+
+  it("remove invalid listener 3", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var fun = function(){};
+    obj.registerListenerType(name, fun);
+    obj.removeListener(name, function(){});
+    assert.equal(logger.getWarnings().length, 1);
+    
+  });
+
+  it("remove invalid property listener", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var fun = function(){};
+    var code = function(){obj.removePropertyListener (name, fun);};
+    expect(code).to.throw(/Unknown property/);
+    
+  });
+
+  it("remove invalid property listener 2", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    obj.registerPropertyType(name);
+    var code = function(){obj.removePropertyListener (name, "not a function");};
+    expect(code).to.throw(/string/);
+    
+  });
+
+  it("remove invalid property listener 3", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var fun = function(){};
+    obj.registerPropertyType(name);
+    obj.removePropertyListener (name, fun);
+    assert.equal(logger.getWarnings().length, 1);
+    
+  });
+
+  it("call invalid listeners", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var code = function(){obj.callListeners(name);};
+    expect(code).to.throw(/Unknown listener/);
+    
+  });
+  it("fire invalid property change listeners", function() {
+    var obj = new ObjectWithListeners();
+    var name = "t";
+    var code = function(){obj.firePropertyChangeListener (name,"old","new");};
+    expect(code).to.throw(/Unknown property/);
+    
+  });
+
+  it("ObjectWithListeners property changes", function() {
+    var handlerCalled = 0;
+    var obj = new ObjectWithListeners();
+
+    var handler = function() {
+      handlerCalled++;
+    };
+
+    obj.registerPropertyType("test");
+
+    obj.addPropertyChangeListener("test", handler);
+
+    obj.firePropertyChangeListener("test", "old val", "new val");
+    assert.equal(1, handlerCalled);
+
+    obj.firePropertyChangeListener("test", "old val", "new val");
+    assert.equal(2, handlerCalled);
+
+    obj.removePropertyListener("test", handler);
+
+    obj.firePropertyChangeListener("test", "old val", "new val");
+    assert.equal(2, handlerCalled);
+  });
+});
diff --git a/frontend-js/src/test/js/ServerConnector-mock.js b/frontend-js/src/test/js/ServerConnector-mock.js
index ca5b5a01a593e6fd6c482e610fe206d52531c095..d9f1bf1d4eaf1e321256d0039d4e31075786ec01 100644
--- a/frontend-js/src/test/js/ServerConnector-mock.js
+++ b/frontend-js/src/test/js/ServerConnector-mock.js
@@ -1,100 +1,99 @@
-'use strict';
-
-var Promise = require("bluebird");
-
-/* exported logger */
-
-var logger = require('./logger');
-
-var OriginalServerConnector = require('../../main/js/ServerConnector');
-var NetworkError = require('../../main/js/NetworkError');
-
-var fs = require('fs');
-var request = require('request');
-
-var ServerConnectorMock = OriginalServerConnector;
-
-function replaceAsterisk(str) {
-  return str.replace(/\*/g, "all").replace(/\:/g, ".");
-}
-
-function urlToFileName(url) {
-  var result = url;
-  var token = OriginalServerConnector.getSessionData().getToken();
-  if (token !== undefined && token !== "" && url.startsWith("./testFiles/apiCalls")) {
-    if (!result.endsWith("&") && !result.endsWith("_")) {
-      result += "/";
-    }
-    result += "token=" + token + "&";
-  }
-
-  return replaceAsterisk(result);
-}
-
-function encodeParams(params) {
-  var result = {};
-  for (var key in params) {
-    if (params.hasOwnProperty(key) && params[key] !== undefined) {
-      result[key] = encodeURIComponent(params[key]);
-    }
-  }
-  return result;
-}
-
-ServerConnectorMock._sendRequest = function (params) {
-  var self = this;
-  var url = params.url;
-  var prefix = params.method;
-  if (prefix === "GET") {
-    prefix = "";
-  } else {
-    prefix = "/" + prefix + "_";
-  }
-  var suffix = "";
-  if (params.form !== undefined) {
-    suffix += self.createGetParams(encodeParams(params.form));
-  }
-  if (params.json !== undefined) {
-    suffix += self.createGetParams(params.json);
-  }
-  return new Promise(function (resolve, reject) {
-    if (url.indexOf("http") === 0) {
-      request.get(url, function (error, response, body) {
-        if (error) {
-          reject(error);
-        } else if (response.statusCode !== 200) {
-          reject(response);
-        } else {
-          resolve(body);
-        }
-      });
-    } else {
-      var fileName = urlToFileName(url + prefix + suffix);
-      fs.readFile(fileName, 'utf8', function (err, content) {
-        if (err) {
-          reject(new NetworkError(err.message, {
-            content: content,
-            url: fileName,
-            statusCode: 404
-          }));
-        } else {
-          resolve(content);
-        }
-      });
-    }
-  });
-};
-
-ServerConnectorMock.getApiBaseUrl = function () {
-  return "./testFiles/apiCalls/";
-};
-
-var originalGetApiUrl = OriginalServerConnector.getApiUrl;
-
-ServerConnectorMock.getApiUrl = function (paramObj) {
-  // replace '?' with '/'
-  // the call is done on ServerConnectorObject (so 'this' is set properly)
-  return originalGetApiUrl.call(this, paramObj).replace(/\?/g, '/');
-};
-
-module.exports = ServerConnectorMock;
+'use strict';
+
+var Promise = require("bluebird");
+
+// noinspection JSUnusedLocalSymbols
+var logger = require('./logger');
+
+var OriginalServerConnector = require('../../main/js/ServerConnector');
+var NetworkError = require('../../main/js/NetworkError');
+
+var fs = require('fs');
+var request = require('request');
+
+var ServerConnectorMock = OriginalServerConnector;
+
+function replaceAsterisk(str) {
+  return str.replace(/\*/g, "all").replace(/:/g, ".");
+}
+
+function urlToFileName(url) {
+  var result = url;
+  var token = OriginalServerConnector.getSessionData().getToken();
+  if (token !== undefined && token !== "" && url.startsWith("./testFiles/apiCalls")) {
+    if (!result.endsWith("&") && !result.endsWith("_")) {
+      result += "/";
+    }
+    result += "token=" + token + "&";
+  }
+
+  return replaceAsterisk(result);
+}
+
+function encodeParams(params) {
+  var result = {};
+  for (var key in params) {
+    if (params.hasOwnProperty(key) && params[key] !== undefined) {
+      result[key] = encodeURIComponent(params[key]);
+    }
+  }
+  return result;
+}
+
+ServerConnectorMock._sendRequest = function (params) {
+  var self = this;
+  var url = params.url;
+  var prefix = params.method;
+  if (prefix === "GET") {
+    prefix = "";
+  } else {
+    prefix = "/" + prefix + "_";
+  }
+  var suffix = "";
+  if (params.form !== undefined) {
+    suffix += self.createGetParams(encodeParams(params.form));
+  }
+  if (params.json !== undefined) {
+    suffix += self.createGetParams(params.json);
+  }
+  return new Promise(function (resolve, reject) {
+    if (url.indexOf("http") === 0) {
+      request.get(url, function (error, response, body) {
+        if (error) {
+          reject(error);
+        } else if (response.statusCode !== 200) {
+          reject(response);
+        } else {
+          resolve(body);
+        }
+      });
+    } else {
+      var fileName = urlToFileName(url + prefix + suffix);
+      fs.readFile(fileName, 'utf8', function (err, content) {
+        if (err) {
+          reject(new NetworkError(err.message, {
+            content: content,
+            url: fileName,
+            statusCode: 404
+          }));
+        } else {
+          resolve(content);
+        }
+      });
+    }
+  });
+};
+
+ServerConnectorMock.getApiBaseUrl = function () {
+  return "./testFiles/apiCalls/";
+};
+
+var originalGetApiUrl = OriginalServerConnector.getApiUrl;
+
+ServerConnectorMock.getApiUrl = function (paramObj) {
+  // replace '?' with '/'
+  // the call is done on ServerConnectorObject (so 'this' is set properly)
+  return originalGetApiUrl.call(this, paramObj).replace(/\?/g, '/');
+};
+
+module.exports = ServerConnectorMock;
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index 7b844e1e805d8a2e16a1a9bfec32bd3f9b3afd07..c48d2795a5734f0f466ddd8c56b95b440f6fbaa1 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -1,373 +1,373 @@
-"use strict";
-
-require("./mocha-config.js");
-
-var Promise = require("bluebird");
-
-var HttpStatus = require('http-status-codes');
-
-var Alias = require('../../main/js/map/data/Alias');
-var Configuration = require('../../main/js/Configuration');
-var LayoutData = require('../../main/js/map/data/LayoutData');
-var LayoutAlias = require('../../main/js/map/data/LayoutAlias');
-var MapModel = require('../../main/js/map/data/MapModel');
-var NetworkError = require('../../main/js/NetworkError');
-var Project = require('../../main/js/map/data/Project');
-var Reaction = require('../../main/js/map/data/Reaction');
-var ServerConnector = require('../../main/js/ServerConnector');
-
-var logger = require('./logger');
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('ServerConnector', function () {
-  describe('getProject', function () {
-    it('default', function () {
-      return ServerConnector.getProject().then(function (result) {
-        assert.ok(result instanceof Project);
-        assert.equal(result.getProjectId(), "sample");
-        assert.equal(logger.getWarnings().length, 0);
-      });
-    });
-    it('invalid project id', function () {
-      return ServerConnector.getProject("invalid_project_id").then(function (result) {
-        assert.equal(result, null);
-      });
-    });
-    it('caching', function () {
-      var project;
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        return ServerConnector.getProject();
-
-      }).then(function (result) {
-        assert.ok(result === project);
-      });
-    });
-  });
-
-  describe('updateProject', function () {
-    it('default', function () {
-      var project;
-      var newVersion = "2.01";
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        project.setVersion(newVersion);
-        return ServerConnector.updateProject(project);
-      }).then(function (result) {
-        assert.ok(project === result);
-        assert.equal(newVersion, result.getVersion());
-      });
-    });
-  });
-  describe('removeProject', function () {
-    it('default', function () {
-      var project;
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        return ServerConnector.removeProject(project.getProjectId());
-      }).then(function (result) {
-        assert.ok(project === result);
-      });
-    });
-  });
-
-  it('getModels', function () {
-    return ServerConnector.getModels("sample").then(function (models) {
-      assert.equal(1, models.length);
-      assert.ok(models[0] instanceof MapModel);
-    });
-  });
-
-  it('getPublications', function () {
-    return ServerConnector.getPublications().then(function (result) {
-      assert.equal(result.totalSize, 1);
-    });
-  });
-
-  it('getProjectId from GET params', function () {
-    helper.setUrl("http://test/?id=test");
-    return ServerConnector.getProjectId().then(function (result) {
-      assert.equal(result, "test");
-    });
-  });
-
-  it('getReactions with empty list of ids', function () {
-    return ServerConnector.getReactions([]).then(function (result) {
-      assert.equal(result.length, 2);
-      var reaction = result[0];
-      assert.ok(reaction instanceof Reaction);
-      assert.equal(reaction.getId(), 153513);
-      assert.equal(reaction.getModelId(), 15781);
-    });
-  });
-
-  it('getReactions without ids', function () {
-    return ServerConnector.getReactions([]).then(function (result) {
-      assert.equal(result.length, 2);
-      var reaction = result[0];
-      assert.ok(reaction instanceof Reaction);
-      assert.equal(reaction.getId(), 153513);
-      assert.equal(reaction.getModelId(), 15781);
-    });
-  });
-
-  it('getElements with empty list of ids', function () {
-    return ServerConnector.getAliases({}).then(function (result) {
-      assert.equal(result.length, 30);
-      var alias = result[0];
-      assert.ok(alias instanceof Alias);
-      assert.equal(alias.getModelId(), 15781);
-    });
-  });
-
-  it('getOverlayElements', function () {
-    return ServerConnector.getOverlayElements(18077).then(function (result) {
-      assert.equal(result.length, 1);
-      var layoutAlias = result[0];
-      assert.ok(layoutAlias instanceof LayoutAlias);
-      assert.equal(-7602176, layoutAlias.getColor().value);
-      assert.equal(15781, layoutAlias.getModelId());
-      assert.equal(329163, layoutAlias.getId());
-    });
-  });
-
-  it('idsToString', function () {
-    var ids = [3, 2, 9, 1, 6, 8, 3, 2, 9, 1, 7, 3];
-    var str = ServerConnector.idsToString(ids);
-    assert.equal(str, "1,2,3,6,7,8,9");
-  });
-
-  it('getOverlaySourceDownloadUrl', function () {
-    var id = 17296;
-    return ServerConnector.getOverlaySourceDownloadUrl({
-      overlayId: id
-    }).then(function (url) {
-      assert.ok(url);
-      assert.ok(url.indexOf(id) >= 0);
-      return ServerConnector.sendGetRequest(url);
-    });
-  });
-
-  it('getImageDownloadUrl', function () {
-    var modelId = 15781;
-    return ServerConnector.getImageDownloadUrl({
-      modelId: modelId,
-      handlerClass: "lcsb.mapviewer.converter.graphics.PngImageGenerator"
-    }).then(function (url) {
-      assert.ok(url);
-      assert.ok(url.indexOf(modelId) >= 0);
-      return ServerConnector.sendGetRequest(url);
-    });
-  });
-
-  it('getModelDownloadUrl', function () {
-    var modelId = 15781;
-    return ServerConnector.getModelDownloadUrl({
-      modelId: modelId,
-      handlerClass: "lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser"
-    }).then(function (url) {
-      assert.ok(url);
-      assert.ok(url.indexOf(modelId) >= 0);
-      return ServerConnector.sendGetRequest(url);
-    });
-  });
-
-  it('getProjectSourceDownloadUrl', function () {
-    return ServerConnector.getProjectSourceDownloadUrl().then(function (url) {
-      assert.ok(url);
-      return ServerConnector.sendGetRequest(url);
-    });
-  });
-
-  it('addOverlay', function () {
-    return ServerConnector.addOverlay({
-      overlay: new LayoutData({
-        name: "test nam",
-        description: "test desc",
-        content: "name color\nCAPN1 #00FF00\nPARK7 #AC0000",
-        filename: "test.txt"
-      })
-    }).then(function (overlay) {
-      assert.ok(overlay);
-    });
-  });
-
-  it('removeOverlay', function () {
-    return ServerConnector.removeOverlay({
-      overlayId: 17296
-    });
-  });
-
-  it('removeComment', function () {
-    return ServerConnector.removeComment({
-      commentId: 4290
-    });
-  });
-
-  it('updateOverlay', function () {
-    var overlay = new LayoutData({});
-    overlay.setId(17296);
-    overlay.setName("test nam2");
-    overlay.setDescription("test desc2");
-
-    return ServerConnector.updateOverlay(overlay);
-  });
-
-  it('logout', function () {
-    return ServerConnector.logout().then(function () {
-      assert.equal(ServerConnector.getSessionData().getToken(), undefined);
-    });
-  });
-
-  it('getToken', function () {
-    ServerConnector.getSessionData(null).setToken(undefined);
-
-    return ServerConnector.getToken().then(function (token) {
-      assert.ok(token !== undefined);
-    });
-  });
-
-  it('getModelDownloadUrl', function () {
-    return ServerConnector.getModelDownloadUrl({
-      backgroundOverlayId: "cv14081"
-    }).then(function (url) {
-      assert.ok(url);
-    });
-  });
-
-  it('getOverlayById', function () {
-    return ServerConnector.getOverlayById(18083, "complex_model_with_submaps").then(function (overlay) {
-      assert.ok(overlay);
-    });
-  });
-
-  it('getConfiguration', function () {
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      assert.ok(configuration instanceof Configuration);
-      assert.ok(configuration.getElementTypes().length > 0);
-      assert.ok(configuration.getReactionTypes().length > 0);
-    });
-  });
-
-  describe('getProjects', function () {
-    it('test caching', function () {
-      var projects;
-      return ServerConnector.getProjects().then(function (result) {
-        projects = result;
-        return ServerConnector.getProjects();
-      }).then(function (result) {
-        assert.ok(result === projects);
-      });
-    });
-
-    it('test force reload', function () {
-      var projects;
-      var originalName;
-      return ServerConnector.getProjects().then(function (result) {
-        projects = result;
-        originalName = projects[0].getName();
-        projects[0].setName("test name");
-        return ServerConnector.getProjects(true);
-      }).then(function (result) {
-        assert.ok(result === projects);
-        assert.equal(originalName, projects[0].getName());
-      });
-    });
-  });
-
-  describe('login', function () {
-    it('try invalid credentials', function () {
-      var method = ServerConnector.sendPostRequest;
-      ServerConnector.sendPostRequest = function () {
-        return Promise.reject(new NetworkError("xxx", {
-          statusCode: HttpStatus.FORBIDDEN
-        }));
-      };
-      return ServerConnector.login("unknown", "unknown password").then(function () {
-        ServerConnector.sendPostRequest = method;
-        assert.ok(false);
-      }, function (error) {
-        ServerConnector.sendPostRequest = method;
-        assert.ok(error.message.indexOf("credentials") >= 0);
-      });
-    });
-  });
-
-  describe('getServerBaseUrl', function () {
-    it('url with GET arg that looks similar to original url', function () {
-      helper.setUrl("http://localhost:8080/minerva/login.xhtml?from=http://localhost:8080/minerva/?id=sample");
-      var url = ServerConnector.getServerBaseUrl();
-      assert.ok(url.indexOf("?") === -1);
-    });
-  });
-
-
-  describe('returnUserOrSystemColor ', function () {
-    it('user has empty color', function () {
-      var systemColor = "0000FF";
-      return ServerConnector.returnUserOrSystemColor("", Promise.resolve(systemColor)).then(function (result) {
-        assert.ok(255, result);
-      });
-    });
-    it('user has defined color', function () {
-      var userColor = "000001";
-      var systemColor = "000010";
-      return ServerConnector.returnUserOrSystemColor(userColor, Promise.resolve(systemColor)).then(function (result) {
-        assert.ok(1, result);
-      });
-    });
-  });
-
-  describe('readFile', function () {
-    it('check session expired', function () {
-      ServerConnector.getSessionData().setToken(undefined);
-      assert.ok(ServerConnector.getSessionData().getLogin());
-      return ServerConnector.sendGetRequest("package.json", "Downloading projects").then(function () {
-        assert.notOk(ServerConnector.getSessionData().getLogin());
-      });
-    });
-  });
-
-  describe('getUsers', function () {
-    it('default', function () {
-      return ServerConnector.getUsers().then(function (users) {
-        assert.ok(users.length > 0);
-      });
-    });
-    it('refresh', function () {
-      var user;
-      var users;
-      var modifiedName = "xxx name";
-      return ServerConnector.getUsers().then(function (result) {
-        users = result;
-        user = users[0];
-        user.setName(modifiedName);
-        return ServerConnector.getUsers(true);
-      }).then(function (result) {
-        assert.ok(users === result);
-        assert.ok(user.getName() !== modifiedName);
-      });
-    });
-  });
-
-  describe('uploadFile', function () {
-    it('small file', function () {
-      return ServerConnector.uploadFile({
-        filename: "test.txt",
-        content: new Uint8Array([1, 65, 90, 4, 8])
-      }).then(function (file) {
-        logger.debug(file);
-        assert.ok(file.id);
-      });
-    });
-  });
-
-  it('getNeutralOverlayColorInt', function () {
-    return ServerConnector.getNeutralOverlayColorInt().then(function (color) {
-      assert.ok(color);
-    });
-  });
-
-
-});
+"use strict";
+
+require("./mocha-config.js");
+
+var Promise = require("bluebird");
+
+var HttpStatus = require('http-status-codes');
+
+var Alias = require('../../main/js/map/data/Alias');
+var Configuration = require('../../main/js/Configuration');
+var LayoutData = require('../../main/js/map/data/LayoutData');
+var LayoutAlias = require('../../main/js/map/data/LayoutAlias');
+var MapModel = require('../../main/js/map/data/MapModel');
+var NetworkError = require('../../main/js/NetworkError');
+var Project = require('../../main/js/map/data/Project');
+var Reaction = require('../../main/js/map/data/Reaction');
+var ServerConnector = require('../../main/js/ServerConnector');
+
+var logger = require('./logger');
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('ServerConnector', function () {
+  describe('getProject', function () {
+    it('default', function () {
+      return ServerConnector.getProject().then(function (result) {
+        assert.ok(result instanceof Project);
+        assert.equal(result.getProjectId(), "sample");
+        assert.equal(logger.getWarnings().length, 0);
+      });
+    });
+    it('invalid project id', function () {
+      return ServerConnector.getProject("invalid_project_id").then(function (result) {
+        assert.equal(result, null);
+      });
+    });
+    it('caching', function () {
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getProject();
+
+      }).then(function (result) {
+        assert.ok(result === project);
+      });
+    });
+  });
+
+  describe('updateProject', function () {
+    it('default', function () {
+      var project;
+      var newVersion = "2.01";
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        project.setVersion(newVersion);
+        return ServerConnector.updateProject(project);
+      }).then(function (result) {
+        assert.ok(project === result);
+        assert.equal(newVersion, result.getVersion());
+      });
+    });
+  });
+  describe('removeProject', function () {
+    it('default', function () {
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.removeProject(project.getProjectId());
+      }).then(function (result) {
+        assert.ok(project === result);
+      });
+    });
+  });
+
+  it('getModels', function () {
+    return ServerConnector.getModels("sample").then(function (models) {
+      assert.equal(1, models.length);
+      assert.ok(models[0] instanceof MapModel);
+    });
+  });
+
+  it('getPublications', function () {
+    return ServerConnector.getPublications().then(function (result) {
+      assert.equal(result.totalSize, 1);
+    });
+  });
+
+  it('getProjectId from GET params', function () {
+    helper.setUrl("http://test/?id=test");
+    return ServerConnector.getProjectId().then(function (result) {
+      assert.equal(result, "test");
+    });
+  });
+
+  it('getReactions with empty list of ids', function () {
+    return ServerConnector.getReactions([]).then(function (result) {
+      assert.equal(result.length, 2);
+      var reaction = result[0];
+      assert.ok(reaction instanceof Reaction);
+      assert.equal(reaction.getId(), 153513);
+      assert.equal(reaction.getModelId(), 15781);
+    });
+  });
+
+  it('getReactions without ids', function () {
+    return ServerConnector.getReactions([]).then(function (result) {
+      assert.equal(result.length, 2);
+      var reaction = result[0];
+      assert.ok(reaction instanceof Reaction);
+      assert.equal(reaction.getId(), 153513);
+      assert.equal(reaction.getModelId(), 15781);
+    });
+  });
+
+  it('getElements with empty list of ids', function () {
+    return ServerConnector.getAliases({}).then(function (result) {
+      assert.equal(result.length, 30);
+      var alias = result[0];
+      assert.ok(alias instanceof Alias);
+      assert.equal(alias.getModelId(), 15781);
+    });
+  });
+
+  it('getOverlayElements', function () {
+    return ServerConnector.getOverlayElements(18077).then(function (result) {
+      assert.equal(result.length, 1);
+      var layoutAlias = result[0];
+      assert.ok(layoutAlias instanceof LayoutAlias);
+      assert.equal(-7602176, layoutAlias.getColor().value);
+      assert.equal(15781, layoutAlias.getModelId());
+      assert.equal(329163, layoutAlias.getId());
+    });
+  });
+
+  it('idsToString', function () {
+    var ids = [3, 2, 9, 1, 6, 8, 3, 2, 9, 1, 7, 3];
+    var str = ServerConnector.idsToString(ids);
+    assert.equal(str, "1,2,3,6,7,8,9");
+  });
+
+  it('getOverlaySourceDownloadUrl', function () {
+    var id = 17296;
+    return ServerConnector.getOverlaySourceDownloadUrl({
+      overlayId: id
+    }).then(function (url) {
+      assert.ok(url);
+      assert.ok(url.indexOf(id) >= 0);
+      return ServerConnector.sendGetRequest(url);
+    });
+  });
+
+  it('getImageDownloadUrl', function () {
+    var modelId = 15781;
+    return ServerConnector.getImageDownloadUrl({
+      modelId: modelId,
+      handlerClass: "lcsb.mapviewer.converter.graphics.PngImageGenerator"
+    }).then(function (url) {
+      assert.ok(url);
+      assert.ok(url.indexOf(modelId) >= 0);
+      return ServerConnector.sendGetRequest(url);
+    });
+  });
+
+  it('getModelDownloadUrl', function () {
+    var modelId = 15781;
+    return ServerConnector.getModelDownloadUrl({
+      modelId: modelId,
+      handlerClass: "lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser"
+    }).then(function (url) {
+      assert.ok(url);
+      assert.ok(url.indexOf(modelId) >= 0);
+      return ServerConnector.sendGetRequest(url);
+    });
+  });
+
+  it('getProjectSourceDownloadUrl', function () {
+    return ServerConnector.getProjectSourceDownloadUrl().then(function (url) {
+      assert.ok(url);
+      return ServerConnector.sendGetRequest(url);
+    });
+  });
+
+  it('addOverlay', function () {
+    return ServerConnector.addOverlay({
+      overlay: new LayoutData({
+        name: "test nam",
+        description: "test desc",
+        content: "name color\nCAPN1 #00FF00\nPARK7 #AC0000",
+        filename: "test.txt"
+      })
+    }).then(function (overlay) {
+      assert.ok(overlay);
+    });
+  });
+
+  it('removeOverlay', function () {
+    return ServerConnector.removeOverlay({
+      overlayId: 17296
+    });
+  });
+
+  it('removeComment', function () {
+    return ServerConnector.removeComment({
+      commentId: 4290
+    });
+  });
+
+  it('updateOverlay', function () {
+    var overlay = new LayoutData({});
+    overlay.setId(17296);
+    overlay.setName("test nam2");
+    overlay.setDescription("test desc2");
+
+    return ServerConnector.updateOverlay(overlay);
+  });
+
+  it('logout', function () {
+    return ServerConnector.logout().then(function () {
+      assert.equal(ServerConnector.getSessionData().getToken(), undefined);
+    });
+  });
+
+  it('getToken', function () {
+    ServerConnector.getSessionData(null).setToken(undefined);
+
+    return ServerConnector.getToken().then(function (token) {
+      assert.ok(token !== undefined);
+    });
+  });
+
+  it('getModelDownloadUrl', function () {
+    return ServerConnector.getModelDownloadUrl({
+      backgroundOverlayId: "cv14081"
+    }).then(function (url) {
+      assert.ok(url);
+    });
+  });
+
+  it('getOverlayById', function () {
+    return ServerConnector.getOverlayById(18083, "complex_model_with_submaps").then(function (overlay) {
+      assert.ok(overlay);
+    });
+  });
+
+  it('getConfiguration', function () {
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      assert.ok(configuration instanceof Configuration);
+      assert.ok(configuration.getElementTypes().length > 0);
+      assert.ok(configuration.getReactionTypes().length > 0);
+    });
+  });
+
+  describe('getProjects', function () {
+    it('test caching', function () {
+      var projects;
+      return ServerConnector.getProjects().then(function (result) {
+        projects = result;
+        return ServerConnector.getProjects();
+      }).then(function (result) {
+        assert.ok(result === projects);
+      });
+    });
+
+    it('test force reload', function () {
+      var projects;
+      var originalName;
+      return ServerConnector.getProjects().then(function (result) {
+        projects = result;
+        originalName = projects[0].getName();
+        projects[0].setName("test name");
+        return ServerConnector.getProjects(true);
+      }).then(function (result) {
+        assert.ok(result === projects);
+        assert.equal(originalName, projects[0].getName());
+      });
+    });
+  });
+
+  describe('login', function () {
+    it('try invalid credentials', function () {
+      var method = ServerConnector.sendPostRequest;
+      ServerConnector.sendPostRequest = function () {
+        return Promise.reject(new NetworkError("xxx", {
+          statusCode: HttpStatus.FORBIDDEN
+        }));
+      };
+      return ServerConnector.login("unknown", "unknown password").then(function () {
+        ServerConnector.sendPostRequest = method;
+        assert.ok(false);
+      }, function (error) {
+        ServerConnector.sendPostRequest = method;
+        assert.ok(error.message.indexOf("credentials") >= 0);
+      });
+    });
+  });
+
+  describe('getServerBaseUrl', function () {
+    it('url with GET arg that looks similar to original url', function () {
+      helper.setUrl("http://localhost:8080/minerva/login.xhtml?from=http://localhost:8080/minerva/?id=sample");
+      var url = ServerConnector.getServerBaseUrl();
+      assert.ok(url.indexOf("?") === -1);
+    });
+  });
+
+
+  describe('returnUserOrSystemColor ', function () {
+    it('user has empty color', function () {
+      var systemColor = "0000FF";
+      return ServerConnector.returnUserOrSystemColor("", Promise.resolve(systemColor)).then(function (result) {
+        assert.ok(255, result);
+      });
+    });
+    it('user has defined color', function () {
+      var userColor = "000001";
+      var systemColor = "000010";
+      return ServerConnector.returnUserOrSystemColor(userColor, Promise.resolve(systemColor)).then(function (result) {
+        assert.ok(1, result);
+      });
+    });
+  });
+
+  describe('readFile', function () {
+    it('check session expired', function () {
+      ServerConnector.getSessionData().setToken(undefined);
+      assert.ok(ServerConnector.getSessionData().getLogin());
+      return ServerConnector.sendGetRequest("package.json", "Downloading projects").then(function () {
+        assert.notOk(ServerConnector.getSessionData().getLogin());
+      });
+    });
+  });
+
+  describe('getUsers', function () {
+    it('default', function () {
+      return ServerConnector.getUsers().then(function (users) {
+        assert.ok(users.length > 0);
+      });
+    });
+    it('refresh', function () {
+      var user;
+      var users;
+      var modifiedName = "xxx name";
+      return ServerConnector.getUsers().then(function (result) {
+        users = result;
+        user = users[0];
+        user.setName(modifiedName);
+        return ServerConnector.getUsers(true);
+      }).then(function (result) {
+        assert.ok(users === result);
+        assert.ok(user.getName() !== modifiedName);
+      });
+    });
+  });
+
+  describe('uploadFile', function () {
+    it('small file', function () {
+      return ServerConnector.uploadFile({
+        filename: "test.txt",
+        content: new Uint8Array([1, 65, 90, 4, 8])
+      }).then(function (file) {
+        logger.debug(file);
+        assert.ok(file.id);
+      });
+    });
+  });
+
+  it('getNeutralOverlayColorInt', function () {
+    return ServerConnector.getNeutralOverlayColorInt().then(function (color) {
+      assert.ok(color);
+    });
+  });
+
+
+});
diff --git a/frontend-js/src/test/js/SessionData-test.js b/frontend-js/src/test/js/SessionData-test.js
index 829a17a57578bf24610d818d0f7a1a312cae97e2..cd6acc20a7f08a02e810095f3817a40bd97d2331 100644
--- a/frontend-js/src/test/js/SessionData-test.js
+++ b/frontend-js/src/test/js/SessionData-test.js
@@ -1,39 +1,39 @@
-"use strict";
-
-require("./mocha-config.js");
-
-var SessionData = require('../../main/js/SessionData');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('./logger');
-
-describe('SessionData', function() {
-  it('setShowComments', function() {
-    var project = helper.createProject();
-    var session = new SessionData(project);
-    session.setShowComments(true);
-    assert.ok(session.getShowComments());
-    session.setShowComments(false);
-    assert.notOk(session.getShowComments());
-    assert.equal(logger.getWarnings().length, 0);
-  });
-  
-  it('setVisibleOverlays', function() {
-    var project = helper.createProject();
-    var session = new SessionData(project);
-    
-    var overlays = session.getVisibleOverlays();
-    
-    assert.ok(overlays);
-    assert.equal(overlays.length, 0);
-    
-    session.setVisibleOverlays([1,3]);
-    overlays = session.getVisibleOverlays();
-    
-    assert.ok(overlays);
-    assert.equal(overlays.length, 2);
-    assert.equal(overlays[0],1);
-    assert.equal(overlays[1],3);
-  });
-});
+"use strict";
+
+require("./mocha-config.js");
+
+var SessionData = require('../../main/js/SessionData');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('./logger');
+
+describe('SessionData', function() {
+  it('setShowComments', function() {
+    var project = helper.createProject();
+    var session = new SessionData(project);
+    session.setShowComments(true);
+    assert.ok(session.getShowComments());
+    session.setShowComments(false);
+    assert.notOk(session.getShowComments());
+    assert.equal(logger.getWarnings().length, 0);
+  });
+  
+  it('setVisibleOverlays', function() {
+    var project = helper.createProject();
+    var session = new SessionData(project);
+    
+    var overlays = session.getVisibleOverlays();
+    
+    assert.ok(overlays);
+    assert.equal(overlays.length, 0);
+    
+    session.setVisibleOverlays([1,3]);
+    overlays = session.getVisibleOverlays();
+    
+    assert.ok(overlays);
+    assert.equal(overlays.length, 2);
+    assert.equal(overlays[0],1);
+    assert.equal(overlays[1],3);
+  });
+});
diff --git a/frontend-js/src/test/js/google-map-mock.js b/frontend-js/src/test/js/google-map-mock.js
index 3d50280af27fdf6ef9160041f4a0908b3590d748..e81caeaa017953026ce8d9c8d1310275d5d4d334 100644
--- a/frontend-js/src/test/js/google-map-mock.js
+++ b/frontend-js/src/test/js/google-map-mock.js
@@ -1,312 +1,319 @@
-"use strict";
-
-var Promise = require("bluebird");
-
-/* exported logger */
-
-var logger = require('./logger');
-
-var google = {
-  maps: {
-    event: {
-      _data: [],
-      addListener: function (object, type, fun) {
-        google.maps.event._data.push({
-          object: object,
-          type: type,
-          fun: fun
-        });
-      },
-      addDomListener: function (object, type, fun) {
-        object.addEventListener(type, fun);
-      },
-      trigger: function (object, type, param) {
-        var promises = [];
-        for (var i = 0; i < google.maps.event._data.length; i++) {
-          var e = google.maps.event._data[i];
-          if (e.object === object && e.type === type) {
-            promises.push(e.fun(param));
-          }
-        }
-        return Promise.all(promises);
-      },
-    },
-    drawing: {
-      DrawingManager: function (options) {
-        this.options = options;
-        if (this.options === undefined) {
-          this.options = {};
-        }
-        this.setMap = function (map) {
-          this.options.map = map;
-        };
-        this.setDrawingMode = function (mode) {
-          this.options.drawingMode = mode;
-        };
-        this.getDrawingMode = function () {
-          return this.options.drawingMode;
-        };
-      },
-      OverlayType: {
-        MARKER: "MARKER",
-      },
-    },
-
-    ControlPosition: {
-      TOP_LEFT: "TOP_LEFT",
-      LEFT_BOTTOM: "LEFT_BOTTOM",
-      RIGHT_BOTTOM: "RIGHT_BOTTOM",
-    },
-    LatLng: function (lat, lng) {
-      this.latitude = parseFloat(lat);
-      this.longitude = parseFloat(lng);
-
-      this.lat = function () {
-        return this.latitude;
-      };
-      this.lng = function () {
-        return this.longitude;
-      };
-    },
-    LatLngBounds: function (ne, sw) {
-      var data = {
-        ne: ne,
-        sw: sw
-      };
-      return {
-        getSouthWest: function () {
-          return data.sw;
-        },
-        getNorthEast: function () {
-          return data.ne;
-        },
-        getCenter: function () {
-          return new google.maps.LatLng((data.ne.lat() + data.sw.lat()) / 2, (data.ne.lng() + data.sw.lng()) / 2);
-        },
-        isEmpty: function () {
-          return data.ne === data.sw || (data.ne.lat() === data.sw.lat() && data.ne.lng() === data.sw.lng());
-        },
-        extend: function (arg) {
-          if (data.sw === undefined) {
-            data.sw = new google.maps.LatLng(arg.lat(), arg.lng());
-          } else {
-            if (arg.lng() < data.sw.lng()) {
-              data.sw.longitude = arg.lng();
-            }
-            if (arg.lat() < data.sw.lat()) {
-              data.sw.latitude = arg.lat();
-            }
-          }
-          if (data.ne === undefined) {
-            data.ne = new google.maps.LatLng(arg.lat(), arg.lng());
-          } else {
-            if (arg.lng() > data.ne.lng()) {
-              data.ne.longitude = arg.lng();
-            }
-
-            if (arg.lat() > data.ne.lat()) {
-              data.ne.latitude = arg.lat();
-            }
-          }
-        },
-
-      };
-    },
-    OverlayView: function () {
-      return {};
-    },
-    ImageMapType: function () {
-      return {};
-    },
-    InfoWindow: function (options) {
-      this.options = options;
-      if (this.options === undefined) {
-        this.options = {};
-      }
-      this.getMap = function () {
-        return this.options.map;
-      };
-      this.setMap = function (map) {
-        this.options.map = map;
-      };
-      this.open = function (map) {
-        this.setMap(map);
-      };
-      this.setContent = function () {
-      };
-    },
-    Marker: function (options) {
-      this.options = options;
-      this.position = options.position;
-      this.getMap = function () {
-        return this.options.map;
-      };
-      this.setMap = function (map) {
-        this.options.map = map;
-      };
-      this.setIcon = function (icon) {
-        this.options.icon = icon;
-      };
-    },
-
-    MarkerImage: function () {
-      return {};
-    },
-    Map: function (div, options) {
-      var data = {};
-      if (options !== undefined) {
-        data = options;
-      }
-      if (data.center === undefined) {
-        data.center = new google.maps.LatLng(83.42558775689403, -135);
-      }
-      data.div = div;
-      if (data.bounds === undefined) {
-        data.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(10, 10), new google.maps.LatLng(12, 12));
-      }
-
-      return {
-        controls: {
-          "TOP_LEFT": [],
-          "LEFT_BOTTOM": [],
-          "RIGHT_BOTTOM": [],
-        },
-        getDiv: function () {
-          return data.div;
-        },
-        mapTypes: {
-          set: function () {
-          },
-        },
-        getMapTypeId: function () {
-          return data.mapTypeId;
-        },
-        setMapTypeId: function (id) {
-          data.mapTypeId = id;
-          google.maps.event.trigger(this, "maptypeid_changed", id);
-        },
-        setOptions: function () {
-        },
-        getZoom: function () {
-          return data.zoom;
-        },
-        setZoom: function (zoom) {
-          data.zoom = zoom;
-          return google.maps.event.trigger(this, "zoom_changed", zoom);
-        },
-        getCenter: function () {
-          return data.center;
-        },
-        panBy: function (x, y) {
-          if (data.center !== undefined) {
-            data.center.x += x;
-            data.center.y += y;
-          } else {
-            data.center = new google.maps.Point(x, y);
-          }
-        },
-        setCenter: function (center) {
-          data.center = center;
-          return google.maps.event.trigger(this, "center_changed", center);
-        },
-        getBounds: function () {
-          return data.bounds;
-        },
-        setBounds: function (bounds) {
-          data.bounds = bounds;
-        },
-        fitBounds: function (bounds) {
-          this.setBounds(bounds);
-          this.setCenter(bounds.getCenter());
-        },
-      };
-    },
-    MVCArray: function (data) {
-      if (data !== undefined) {
-        this.data = data;
-      } else {
-        this.data = [];
-      }
-      this.getLength = function () {
-        return this.data.length;
-      };
-      this.length = this.data.length;
-      this.getAt = function (index) {
-        return this.data[index];
-      };
-    },
-    Point: function (x, y) {
-      this.x = x;
-      this.y = y;
-    },
-    Polyline: function (options) {
-      this.options = options;
-      if (this.options === undefined) {
-        this.options = {};
-      }
-      this.setOptions = function () {
-      };
-      this.getPath = function () {
-        return new google.maps.MVCArray();
-      };
-      this.getMap = function () {
-        return this.options.map;
-      };
-      this.setMap = function (map) {
-        this.options.map = map;
-      };
-    },
-    Polygon: function (options) {
-      this.options = options;
-      if (this.options.paths !== undefined) {
-        this.options.path = new google.maps.MVCArray(this.options.paths);
-      }
-      if (this.options.path === undefined) {
-        this.options.path = new google.maps.MVCArray();
-      }
-      this.getPath = function () {
-        return this.options.path;
-      };
-      this.getMap = function () {
-        return this.options.map;
-      };
-      this.setMap = function (map) {
-        this.options.map = map;
-      };
-    },
-    Rectangle: function (options) {
-      this.options = options;
-      if (this.options === undefined) {
-        this.options = {};
-      }
-      this.getMap = function () {
-        return this.options.map;
-      };
-      this.setMap = function (map) {
-        this.options.map = map;
-      };
-      this.setOptions = function (options) {
-        for (var key in options) {
-          this.options[key] = options[key];
-        }
-      };
-      this.getBounds = function () {
-        return this.options.bounds;
-      };
-      this.setBounds = function (bounds) {
-        this.options.bounds = bounds;
-      };
-    },
-    Size: function () {
-      return {};
-    },
-    ZoomControlStyle: {
-      LARGE: "LARGE",
-    },
-  }
-};
-
-google.maps.Map.prototype.fitBounds = function () {
-};
-
-module.exports = google;
+"use strict";
+
+var Promise = require("bluebird");
+
+/* exported logger */
+
+// noinspection JSUnusedLocalSymbols
+var logger = require('./logger');
+
+// noinspection JSUnusedGlobalSymbols
+var google = {
+  maps: {
+    event: {
+      _data: [],
+      addListener: function (object, type, fun) {
+        google.maps.event._data.push({
+          object: object,
+          type: type,
+          fun: fun
+        });
+      },
+      addDomListener: function (object, type, fun) {
+        object.addEventListener(type, fun);
+      },
+      trigger: function (object, type, param) {
+        var promises = [];
+        for (var i = 0; i < google.maps.event._data.length; i++) {
+          var e = google.maps.event._data[i];
+          if (e.object === object && e.type === type) {
+            promises.push(e.fun(param));
+          }
+        }
+        return Promise.all(promises);
+      }
+    },
+    drawing: {
+      DrawingManager: function (options) {
+        this.options = options;
+        if (this.options === undefined) {
+          this.options = {};
+        }
+        this.setMap = function (map) {
+          this.options.map = map;
+        };
+        // noinspection JSUnusedGlobalSymbols
+        this.setDrawingMode = function (mode) {
+          this.options.drawingMode = mode;
+        };
+        this.getDrawingMode = function () {
+          return this.options.drawingMode;
+        };
+      },
+      OverlayType: {
+        MARKER: "MARKER"
+      }
+    },
+
+    ControlPosition: {
+      TOP_LEFT: "TOP_LEFT",
+      LEFT_BOTTOM: "LEFT_BOTTOM",
+      RIGHT_BOTTOM: "RIGHT_BOTTOM"
+    },
+    LatLng: function (lat, lng) {
+      this.latitude = parseFloat(lat);
+      this.longitude = parseFloat(lng);
+
+      this.lat = function () {
+        return this.latitude;
+      };
+      this.lng = function () {
+        return this.longitude;
+      };
+    },
+    LatLngBounds: function (ne, sw) {
+      var data = {
+        ne: ne,
+        sw: sw
+      };
+      // noinspection JSUnusedGlobalSymbols
+      return {
+        getSouthWest: function () {
+          return data.sw;
+        },
+        getNorthEast: function () {
+          return data.ne;
+        },
+        getCenter: function () {
+          return new google.maps.LatLng((data.ne.lat() + data.sw.lat()) / 2, (data.ne.lng() + data.sw.lng()) / 2);
+        },
+        isEmpty: function () {
+          return data.ne === data.sw || (data.ne.lat() === data.sw.lat() && data.ne.lng() === data.sw.lng());
+        },
+        extend: function (arg) {
+          if (data.sw === undefined) {
+            data.sw = new google.maps.LatLng(arg.lat(), arg.lng());
+          } else {
+            if (arg.lng() < data.sw.lng()) {
+              data.sw.longitude = arg.lng();
+            }
+            if (arg.lat() < data.sw.lat()) {
+              data.sw.latitude = arg.lat();
+            }
+          }
+          if (data.ne === undefined) {
+            data.ne = new google.maps.LatLng(arg.lat(), arg.lng());
+          } else {
+            if (arg.lng() > data.ne.lng()) {
+              data.ne.longitude = arg.lng();
+            }
+
+            if (arg.lat() > data.ne.lat()) {
+              data.ne.latitude = arg.lat();
+            }
+          }
+        }
+
+      };
+    },
+    OverlayView: function () {
+      return {};
+    },
+    ImageMapType: function () {
+      return {};
+    },
+    InfoWindow: function (options) {
+      this.options = options;
+      if (this.options === undefined) {
+        this.options = {};
+      }
+      this.getMap = function () {
+        return this.options.map;
+      };
+      this.setMap = function (map) {
+        this.options.map = map;
+      };
+      this.open = function (map) {
+        this.setMap(map);
+      };
+      this.setContent = function () {
+      };
+    },
+    Marker: function (options) {
+      this.options = options;
+      this.position = options.position;
+      this.getMap = function () {
+        return this.options.map;
+      };
+      this.setMap = function (map) {
+        this.options.map = map;
+      };
+      this.setIcon = function (icon) {
+        this.options.icon = icon;
+      };
+    },
+
+    MarkerImage: function () {
+      return {};
+    },
+    Map: function (div, options) {
+      var data = {};
+      if (options !== undefined) {
+        data = options;
+      }
+      if (data.center === undefined) {
+        data.center = new google.maps.LatLng(83.42558775689403, -135);
+      }
+      data.div = div;
+      if (data.bounds === undefined) {
+        data.bounds = new google.maps.LatLngBounds(new google.maps.LatLng(10, 10), new google.maps.LatLng(12, 12));
+      }
+
+      // noinspection JSUnusedGlobalSymbols
+      return {
+        controls: {
+          "TOP_LEFT": [],
+          "LEFT_BOTTOM": [],
+          "RIGHT_BOTTOM": []
+        },
+        getDiv: function () {
+          return data.div;
+        },
+        mapTypes: {
+          set: function () {
+          }
+        },
+        getMapTypeId: function () {
+          return data.mapTypeId;
+        },
+        setMapTypeId: function (id) {
+          data.mapTypeId = id;
+          google.maps.event.trigger(this, "maptypeid_changed", id);
+        },
+        setOptions: function () {
+        },
+        getZoom: function () {
+          return data.zoom;
+        },
+        setZoom: function (zoom) {
+          data.zoom = zoom;
+          return google.maps.event.trigger(this, "zoom_changed", zoom);
+        },
+        getCenter: function () {
+          return data.center;
+        },
+        panBy: function (x, y) {
+          if (data.center !== undefined) {
+            data.center.x += x;
+            data.center.y += y;
+          } else {
+            data.center = new google.maps.Point(x, y);
+          }
+        },
+        setCenter: function (center) {
+          data.center = center;
+          return google.maps.event.trigger(this, "center_changed", center);
+        },
+        getBounds: function () {
+          return data.bounds;
+        },
+        setBounds: function (bounds) {
+          data.bounds = bounds;
+        },
+        fitBounds: function (bounds) {
+          this.setBounds(bounds);
+          this.setCenter(bounds.getCenter());
+        }
+      };
+    },
+    MVCArray: function (data) {
+      if (data !== undefined) {
+        this.data = data;
+      } else {
+        this.data = [];
+      }
+      this.getLength = function () {
+        return this.data.length;
+      };
+      this.length = this.data.length;
+      this.getAt = function (index) {
+        return this.data[index];
+      };
+    },
+    Point: function (x, y) {
+      this.x = x;
+      this.y = y;
+    },
+    Polyline: function (options) {
+      this.options = options;
+      if (this.options === undefined) {
+        this.options = {};
+      }
+      this.setOptions = function () {
+      };
+      this.getPath = function () {
+        return new google.maps.MVCArray();
+      };
+      this.getMap = function () {
+        return this.options.map;
+      };
+      this.setMap = function (map) {
+        this.options.map = map;
+      };
+    },
+    Polygon: function (options) {
+      this.options = options;
+      if (this.options.paths !== undefined) {
+        this.options.path = new google.maps.MVCArray(this.options.paths);
+      }
+      if (this.options.path === undefined) {
+        this.options.path = new google.maps.MVCArray();
+      }
+      this.getPath = function () {
+        return this.options.path;
+      };
+      this.getMap = function () {
+        return this.options.map;
+      };
+      this.setMap = function (map) {
+        this.options.map = map;
+      };
+    },
+    Rectangle: function (options) {
+      this.options = options;
+      if (this.options === undefined) {
+        this.options = {};
+      }
+      this.getMap = function () {
+        return this.options.map;
+      };
+      this.setMap = function (map) {
+        this.options.map = map;
+      };
+      this.setOptions = function (options) {
+        for (var key in options) {
+          if (options.hasOwnProperty(key)) {
+            this.options[key] = options[key];
+          }
+        }
+      };
+      this.getBounds = function () {
+        return this.options.bounds;
+      };
+      this.setBounds = function (bounds) {
+        this.options.bounds = bounds;
+      };
+    },
+    Size: function () {
+      return {};
+    },
+    ZoomControlStyle: {
+      LARGE: "LARGE"
+    }
+  }
+};
+
+google.maps.Map.prototype.fitBounds = function () {
+};
+
+module.exports = google;
diff --git a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js
index 26b190671ff0b2a9a19e5d807e1f8ad46559dbc6..e238c5c36a8df527f130e501022c11f1b25ee935 100644
--- a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js
+++ b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js
@@ -1,29 +1,29 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var AddOverlayDialog = require('../../../main/js/gui/AddOverlayDialog');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('AddOverlayDialog', function() {
-
-  it('addOverlay', function() {
-    var dialog;
-    return ServerConnector.getProject().then(function(project) {
-      dialog = new AddOverlayDialog({
-        element : testDiv,
-        project : project,
-        customMap : null
-      });
-
-      dialog.setFileContent("s1\n");
-      return dialog.addOverlay();
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config");
+
+var AddOverlayDialog = require('../../../main/js/gui/AddOverlayDialog');
+var ServerConnector = require('../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('AddOverlayDialog', function () {
+
+  it('addOverlay', function () {
+    var dialog;
+    return ServerConnector.getProject().then(function (project) {
+      dialog = new AddOverlayDialog({
+        element: testDiv,
+        project: project,
+        customMap: null
+      });
+
+      dialog.setFileContent("s1\n");
+      assert.equal(0, logger.getWarnings().length);
+      return dialog.addOverlay();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/CommentDialog-test.js b/frontend-js/src/test/js/gui/CommentDialog-test.js
index 7e87c882c8e7d9886f2eedf1ad82601bffefdf1e..26932c91ec6a2bdd4a14311fe642cac09b33e2f5 100644
--- a/frontend-js/src/test/js/gui/CommentDialog-test.js
+++ b/frontend-js/src/test/js/gui/CommentDialog-test.js
@@ -1,65 +1,66 @@
-"use strict";
-
-require('../mocha-config.js');
-
-var CommentDialog = require('../../../main/js/gui/CommentDialog');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('CommentDialog', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    var dialog = new CommentDialog({
-      element : testDiv,
-      customMap : map
-    });
-    assert.ok(testDiv.innerHTML);
-    assert.equal(logger.getWarnings().length, 0);
-    dialog.destroy();
-  });
-
-  it('getName', function() {
-    var map = helper.createCustomMap();
-
-    var dialog = new CommentDialog({
-      element : testDiv,
-      customMap : map
-    });
-    assert.ok(dialog.getName() !== undefined);
-    dialog.destroy();
-  });
-
-  describe('open', function() {
-    it('anonymous user', function() {
-      var map = helper.createCustomMap();
-      var dialog = new CommentDialog({
-        element : testDiv,
-        customMap : map
-      });
-      return dialog.open([]).then(function() {
-        assert.ok($(testDiv).dialog('isOpen'));
-        dialog.destroy();
-      });
-    });
-    it('logged user', function() {
-      var map;
-      var dialog;
-      return ServerConnector.login("admin", "admin").then(function() {
-        map = helper.createCustomMap();
-        dialog = new CommentDialog({
-          element : testDiv,
-          customMap : map
-        });
-        return dialog.open([]);
-      }).then(function() {
-        assert.ok($(testDiv).dialog('isOpen'));
-        dialog.destroy();
-      });
-    });
-  });
-
-});
+"use strict";
+
+require('../mocha-config');
+
+var CommentDialog = require('../../../main/js/gui/CommentDialog');
+var ServerConnector = require('../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('CommentDialog', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    var dialog = new CommentDialog({
+      element: testDiv,
+      customMap: map
+    });
+    assert.ok(testDiv.innerHTML);
+    assert.equal(logger.getWarnings().length, 0);
+    dialog.destroy();
+  });
+
+  it('getName', function () {
+    var map = helper.createCustomMap();
+
+    var dialog = new CommentDialog({
+      element: testDiv,
+      customMap: map
+    });
+    assert.ok(dialog.getName() !== undefined);
+    dialog.destroy();
+  });
+
+  describe('open', function () {
+    it('anonymous user', function () {
+      var map = helper.createCustomMap();
+      var dialog = new CommentDialog({
+        element: testDiv,
+        customMap: map
+      });
+      return dialog.open([]).then(function () {
+        assert.ok($(testDiv).dialog('isOpen'));
+        dialog.destroy();
+      });
+    });
+    it('logged user', function () {
+      var map;
+      var dialog;
+      return ServerConnector.login("admin", "admin").then(function () {
+        map = helper.createCustomMap();
+        dialog = new CommentDialog({
+          element: testDiv,
+          customMap: map
+        });
+        return dialog.open([]);
+      }).then(function () {
+        assert.ok($(testDiv).dialog('isOpen'));
+        dialog.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/ContextMentu-test.js b/frontend-js/src/test/js/gui/ContextMentu-test.js
index f9478bdaa937c3f263a11ae75463fcea360e2692..c1779f35e268d560462e5a3d78b545a18696fbb1 100644
--- a/frontend-js/src/test/js/gui/ContextMentu-test.js
+++ b/frontend-js/src/test/js/gui/ContextMentu-test.js
@@ -1,51 +1,49 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var ContextMenu = require('../../../main/js/gui/ContextMenu');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('ContextMenu', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    new ContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('open', function() {
-    var map = helper.createCustomMap();
-
-    var menu = new ContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-
-    var event = document.createEvent('MouseEvent');
-    menu.open(event);
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('hide', function() {
-    var map = helper.createCustomMap();
-
-    var menu = new ContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-
-    menu.hide();
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var ContextMenu = require('../../../main/js/gui/ContextMenu');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('ContextMenu', function() {
+
+  it('constructor', function() {
+    var map = helper.createCustomMap();
+
+    new ContextMenu({
+      element : testDiv,
+      customMap : map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('open', function() {
+    var map = helper.createCustomMap();
+
+    var menu = new ContextMenu({
+      element : testDiv,
+      customMap : map
+    });
+
+    var event = document.createEvent('MouseEvent');
+    menu.open(event);
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('hide', function() {
+    var map = helper.createCustomMap();
+
+    var menu = new ContextMenu({
+      element : testDiv,
+      customMap : map
+    });
+
+    menu.hide();
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/Header-test.js b/frontend-js/src/test/js/gui/Header-test.js
index 4d4b27fb812712b22358f79f6c2d1654f92e2c98..090b9a3870f5755c9cb86e33106b1a95009def81 100644
--- a/frontend-js/src/test/js/gui/Header-test.js
+++ b/frontend-js/src/test/js/gui/Header-test.js
@@ -1,64 +1,62 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var Header = require('../../../main/js/gui/Header');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('Header', function() {
-
-  describe('constructor', function() {
-    it('default', function() {
-      var map = helper.createCustomMap();
-
-      new Header({
-        element : testDiv,
-        customMap : map
-      });
-      assert.equal(logger.getWarnings().length, 0);
-      assert.equal(1, $(".fa-lock", $(testDiv)).length);
-    });
-    it('without admin-link', function() {
-      var map = helper.createCustomMap();
-
-      new Header({
-        element : testDiv,
-        customMap : map,
-        adminLink : false
-      });
-      assert.equal(logger.getWarnings().length, 0);
-      assert.equal(0, $(".fa-lock", $(testDiv)).length);
-    });
-    it('with options-link', function() {
-      var map = helper.createCustomMap();
-
-      var header = new Header({
-        element : testDiv,
-        customMap : map,
-        optionsMenu : true
-      });
-      assert.equal(logger.getWarnings().length, 0);
-      assert.equal(1, $(".fa-bars", $(testDiv)).length);
-      return header.destroy();
-    });
-  });
-
-  it('init', function() {
-    var map = helper.createCustomMap();
-
-    var header = new Header({
-      element : testDiv,
-      customMap : map
-    });
-
-    return header.init().then(function() {
-      return header.destroy();
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var Header = require('../../../main/js/gui/Header');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('Header', function () {
+
+  describe('constructor', function () {
+    it('default', function () {
+      var map = helper.createCustomMap();
+
+      new Header({
+        element: testDiv,
+        customMap: map
+      });
+      assert.equal(logger.getWarnings().length, 0);
+      assert.equal(1, $(".fa-lock", $(testDiv)).length);
+    });
+    it('without admin-link', function () {
+      var map = helper.createCustomMap();
+
+      new Header({
+        element: testDiv,
+        customMap: map,
+        adminLink: false
+      });
+      assert.equal(logger.getWarnings().length, 0);
+      assert.equal(0, $(".fa-lock", $(testDiv)).length);
+    });
+    it('with options-link', function () {
+      var map = helper.createCustomMap();
+
+      var header = new Header({
+        element: testDiv,
+        customMap: map,
+        optionsMenu: true
+      });
+      assert.equal(logger.getWarnings().length, 0);
+      assert.equal(1, $(".fa-bars", $(testDiv)).length);
+      return header.destroy();
+    });
+  });
+
+  it('init', function () {
+    var map = helper.createCustomMap();
+
+    var header = new Header({
+      element: testDiv,
+      customMap: map
+    });
+
+    return header.init().then(function () {
+      return header.destroy();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/Legend-test.js b/frontend-js/src/test/js/gui/Legend-test.js
index 7bc9c0b1b547820c87df92f73243831f683aca4a..bd494e7b6b4023d9a5d261bd5862f7bd96f6456c 100644
--- a/frontend-js/src/test/js/gui/Legend-test.js
+++ b/frontend-js/src/test/js/gui/Legend-test.js
@@ -1,38 +1,36 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var Legend = require('../../../main/js/gui/Legend');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('Legend', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    new Legend({
-      element : testDiv,
-      customMap : map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-
-  });
-
-  it('init', function() {
-    var map = helper.createCustomMap();
-
-    var legend = new Legend({
-      element : testDiv,
-      customMap : map
-    });
-    
-    return legend.init();
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var Legend = require('../../../main/js/gui/Legend');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('Legend', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    new Legend({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+
+  });
+
+  it('init', function () {
+    var map = helper.createCustomMap();
+
+    var legend = new Legend({
+      element: testDiv,
+      customMap: map
+    });
+
+    return legend.init();
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/LoginDialog-test.js b/frontend-js/src/test/js/gui/LoginDialog-test.js
index e7caebb84eb14f3e7ba18711a7ad00d05614e12c..e425b94920213093c6d2c3484e35d9c120948e34 100644
--- a/frontend-js/src/test/js/gui/LoginDialog-test.js
+++ b/frontend-js/src/test/js/gui/LoginDialog-test.js
@@ -1,49 +1,49 @@
-"use strict";
-
-require('../mocha-config.js');
-
-var LoginDialog = require('../../../main/js/gui/LoginDialog');
-var PanelControlElementType = require('../../../main/js/gui/PanelControlElementType');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('LoginDialog', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    var dialog = new LoginDialog({
-      element : testDiv,
-      customMap : map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-    dialog.destroy();
-  });
-
-  it('open', function() {
-    var map = helper.createCustomMap();
-
-    var dialog = new LoginDialog({
-      element : testDiv,
-      customMap : map
-    });
-
-    dialog.open();
-    dialog.destroy();
-  });
-
-  it('login', function() {
-    var map = helper.createCustomMap();
-
-    var dialog = new LoginDialog({
-      element : testDiv,
-      customMap : map
-    });
-
-    return dialog.getControlElement(PanelControlElementType.USER_TAB_LOGIN_BUTTON).onclick().then(function() {
-      dialog.destroy();
-    });
-  });
-});
+"use strict";
+
+require('../mocha-config.js');
+
+var LoginDialog = require('../../../main/js/gui/LoginDialog');
+var PanelControlElementType = require('../../../main/js/gui/PanelControlElementType');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('LoginDialog', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    var dialog = new LoginDialog({
+      element: testDiv,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+    dialog.destroy();
+  });
+
+  it('open', function () {
+    var map = helper.createCustomMap();
+
+    var dialog = new LoginDialog({
+      element: testDiv,
+      customMap: map
+    });
+
+    dialog.open();
+    dialog.destroy();
+  });
+
+  it('login', function () {
+    var map = helper.createCustomMap();
+
+    var dialog = new LoginDialog({
+      element: testDiv,
+      customMap: map
+    });
+
+    return dialog.getControlElement(PanelControlElementType.USER_TAB_LOGIN_BUTTON).onclick().then(function () {
+      dialog.destroy();
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/gui/MapContextMenu-test.js b/frontend-js/src/test/js/gui/MapContextMenu-test.js
index 46bc5d86ad0a9558858e77b4d1066b4dc97f5896..42c576cd0580d87513656d6fceba14920e2006ff 100644
--- a/frontend-js/src/test/js/gui/MapContextMenu-test.js
+++ b/frontend-js/src/test/js/gui/MapContextMenu-test.js
@@ -1,75 +1,74 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var MapContextMenu = require('../../../main/js/gui/MapContextMenu');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('MapContextMenu', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    new MapContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('init', function() {
-    var map = helper.createCustomMap();
-
-    var menu = new MapContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-    return menu.init();
-  });
-
-  it('open comment dialog', function() {
-    var map;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-
-      new MapContextMenu({
-        element : testDiv,
-        customMap : map
-      });
-      map.setActiveSubmapId(map.getProject().getModel().getId());
-      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
-
-      var handler = $($("a:contains('comment')", $(testDiv))[0]).data("handler");
-      return handler();
-    }).then(function() {
-      map.destroy();
-    });
-  });
-
-  it('start select mode', function() {
-    var map;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-
-      new MapContextMenu({
-        element : testDiv,
-        customMap : map
-      });
-      map.setActiveSubmapId(map.getProject().getModel().getId());
-      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
-
-      assert.ok(!map.isDrawingOn());
-      var handler = $($("a:contains('Select mode')", $(testDiv))[0]).data("handler");
-      return handler();
-    }).then(function() {
-      assert.ok(map.isDrawingOn());
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var MapContextMenu = require('../../../main/js/gui/MapContextMenu');
+var ServerConnector = require('../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('MapContextMenu', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    new MapContextMenu({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('init', function () {
+    var map = helper.createCustomMap();
+
+    var menu = new MapContextMenu({
+      element: testDiv,
+      customMap: map
+    });
+    return menu.init();
+  });
+
+  it('open comment dialog', function () {
+    var map;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      new MapContextMenu({
+        element: testDiv,
+        customMap: map
+      });
+      map.setActiveSubmapId(map.getProject().getModel().getId());
+      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
+
+      var handler = $($("a:contains('comment')", $(testDiv))[0]).data("handler");
+      return handler();
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  it('start select mode', function () {
+    var map;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      new MapContextMenu({
+        element: testDiv,
+        customMap: map
+      });
+      map.setActiveSubmapId(map.getProject().getModel().getId());
+      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
+
+      assert.ok(!map.isDrawingOn());
+      var handler = $($("a:contains('Select mode')", $(testDiv))[0]).data("handler");
+      return handler();
+    }).then(function () {
+      assert.ok(map.isDrawingOn());
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/OptionsMenu-test.js b/frontend-js/src/test/js/gui/OptionsMenu-test.js
index 58e741d7332de438f3e87227a410ec88150da3f9..d8552c092ed14c9aad98d7d36ecd886441e0ea9e 100644
--- a/frontend-js/src/test/js/gui/OptionsMenu-test.js
+++ b/frontend-js/src/test/js/gui/OptionsMenu-test.js
@@ -1,50 +1,49 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var OptionsMenu = require('../../../main/js/gui/OptionsMenu');
-var PluginManager = require('../../../main/js/plugin/PluginManager');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('OptionsMenu', function () {
-
-  it('init', function () {
-    var map = helper.createCustomMap();
-
-    var menu = new OptionsMenu({
-      element: testDiv,
-      customMap: map
-    });
-    return menu.init();
-  });
-
-  it('open dialog', function () {
-    var map = helper.createCustomMap();
-
-    var menu = new OptionsMenu({
-      element: testDiv,
-      customMap: map
-    });
-    var pluginManager;
-    return ServerConnector.getProject().then(function (project) {
-
-      pluginManager = new PluginManager({project: project});
-      return menu.init();
-    }).then(function () {
-      menu.setPluginManager(pluginManager);
-      return menu.open(10, 10, 20);
-    }).then(function () {
-      return $("a", testDiv).data("handler")();
-    }).then(function () {
-      assert.equal(0, logger.getWarnings().length);
-      return menu.destroy();
-    }).then(function () {
-      return pluginManager.destroy();
-    });
-  });
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var OptionsMenu = require('../../../main/js/gui/OptionsMenu');
+var PluginManager = require('../../../main/js/plugin/PluginManager');
+var ServerConnector = require('../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('OptionsMenu', function () {
+
+  it('init', function () {
+    var map = helper.createCustomMap();
+
+    var menu = new OptionsMenu({
+      element: testDiv,
+      customMap: map
+    });
+    return menu.init();
+  });
+
+  it('open dialog', function () {
+    var map = helper.createCustomMap();
+
+    var menu = new OptionsMenu({
+      element: testDiv,
+      customMap: map
+    });
+    var pluginManager;
+    return ServerConnector.getProject().then(function (project) {
+
+      pluginManager = new PluginManager({project: project});
+      return menu.init();
+    }).then(function () {
+      menu.setPluginManager(pluginManager);
+      return menu.open(10, 10, 20);
+    }).then(function () {
+      return $("a", testDiv).data("handler")();
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      return menu.destroy();
+    }).then(function () {
+      return pluginManager.destroy();
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/gui/OverviewDialog-test.js b/frontend-js/src/test/js/gui/OverviewDialog-test.js
index c214b9cf45ccf8a8a22b41de4c44b0f0262690b1..7c425c546ba671b31497df7ff73685aca17d29ec 100644
--- a/frontend-js/src/test/js/gui/OverviewDialog-test.js
+++ b/frontend-js/src/test/js/gui/OverviewDialog-test.js
@@ -1,97 +1,97 @@
-"use strict";
-
-require("../mocha-config.js");
-var ServerConnector = require('../ServerConnector-mock');
-
-var CustomMap = require('../../../main/js/map/CustomMap');
-var OverviewDialog = require('../../../main/js/gui/OverviewDialog');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('OverviewDialog', function () {
-
-  it('open image', function () {
-    helper.setUrl("http://test/?id=complex_model_with_images");
-    return ServerConnector.getProject().then(function (project) {
-      var options = helper.createOptions(project);
-      var map = new CustomMap(options);
-
-      var dialog = new OverviewDialog({
-        element: testDiv,
-        customMap: map
-      });
-
-      dialog.showOverview(project.getOverviewImages()[1].idObject);
-      dialog.destroy();
-    });
-  });
-
-  it('open invalid image', function () {
-    helper.setUrl("http://test/?id=complex_model_with_images");
-    return ServerConnector.getProject().then(function (project) {
-      var options = helper.createOptions(project);
-      var map = new CustomMap(options);
-
-      var dialog = new OverviewDialog({
-        element: testDiv,
-        customMap: map
-      });
-
-      dialog.showOverview(-1123);
-      dialog.destroy();
-    });
-  });
-
-  describe('openLink', function () {
-    it('link to map', function () {
-      helper.setUrl("http://test/?id=complex_model_with_images");
-      return ServerConnector.getProject().then(function (project) {
-        var map = helper.createCustomMap(project);
-
-        var dialog = new OverviewDialog({
-          element: testDiv,
-          customMap: map
-        });
-
-        dialog.openLink({
-          type: "OverviewModelLink",
-          modelLinkId: map.getId(),
-          latLng: new google.maps.LatLng(1, 34)
-        });
-        assert.equal(logger.getWarnings().length, 0);
-        assert.equal(1, map.getGoogleMap().getCenter().lat());
-        assert.equal(34, map.getGoogleMap().getCenter().lng());
-        dialog.destroy();
-      });
-    });
-    it('link to search', function () {
-      helper.setUrl("http://test/?id=complex_model_with_images");
-      var dialog, searchOverlay;
-      return ServerConnector.getProject().then(function (project) {
-        var map = helper.createCustomMap(project);
-        searchOverlay = helper.createSearchDbOverlay(map);
-
-        dialog = new OverviewDialog({
-          element: testDiv,
-          customMap: map
-        });
-
-        return dialog.openLink({
-          type: "OverviewSearchLink",
-          query: "some_query"
-        });
-      }).then(function () {
-        assert.equal(logger.getWarnings().length, 0);
-        assert.equal(1, searchOverlay.getQueries().length);
-        return searchOverlay.getIdentifiedElements();
-      }).then(function (elements) {
-        assert.equal(0, elements.length);
-      }).finally(function () {
-        dialog.destroy();
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+var ServerConnector = require('../ServerConnector-mock');
+
+var CustomMap = require('../../../main/js/map/CustomMap');
+var OverviewDialog = require('../../../main/js/gui/OverviewDialog');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('OverviewDialog', function () {
+
+  it('open image', function () {
+    helper.setUrl("http://test/?id=complex_model_with_images");
+    return ServerConnector.getProject().then(function (project) {
+      var options = helper.createOptions(project);
+      var map = new CustomMap(options);
+
+      var dialog = new OverviewDialog({
+        element: testDiv,
+        customMap: map
+      });
+
+      dialog.showOverview(project.getOverviewImages()[1].idObject);
+      dialog.destroy();
+    });
+  });
+
+  it('open invalid image', function () {
+    helper.setUrl("http://test/?id=complex_model_with_images");
+    return ServerConnector.getProject().then(function (project) {
+      var options = helper.createOptions(project);
+      var map = new CustomMap(options);
+
+      var dialog = new OverviewDialog({
+        element: testDiv,
+        customMap: map
+      });
+
+      dialog.showOverview(-1123);
+      dialog.destroy();
+    });
+  });
+
+  describe('openLink', function () {
+    it('link to map', function () {
+      helper.setUrl("http://test/?id=complex_model_with_images");
+      return ServerConnector.getProject().then(function (project) {
+        var map = helper.createCustomMap(project);
+
+        var dialog = new OverviewDialog({
+          element: testDiv,
+          customMap: map
+        });
+
+        dialog.openLink({
+          type: "OverviewModelLink",
+          modelLinkId: map.getId(),
+          latLng: new google.maps.LatLng(1, 34)
+        });
+        assert.equal(logger.getWarnings().length, 0);
+        assert.equal(1, map.getGoogleMap().getCenter().lat());
+        assert.equal(34, map.getGoogleMap().getCenter().lng());
+        dialog.destroy();
+      });
+    });
+    it('link to search', function () {
+      helper.setUrl("http://test/?id=complex_model_with_images");
+      var dialog, searchOverlay;
+      return ServerConnector.getProject().then(function (project) {
+        var map = helper.createCustomMap(project);
+        searchOverlay = helper.createSearchDbOverlay(map);
+
+        dialog = new OverviewDialog({
+          element: testDiv,
+          customMap: map
+        });
+
+        return dialog.openLink({
+          type: "OverviewSearchLink",
+          query: "some_query"
+        });
+      }).then(function () {
+        assert.equal(logger.getWarnings().length, 0);
+        assert.equal(1, searchOverlay.getQueries().length);
+        return searchOverlay.getIdentifiedElements();
+      }).then(function (elements) {
+        assert.equal(0, elements.length);
+      }).finally(function () {
+        dialog.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/Panel-test.js b/frontend-js/src/test/js/gui/Panel-test.js
index bd7a34c78a18c6f6c1bf46b6a44272a9faf0fca6..a2bc9279daf6f5a5c3ce038150826abccd76777b 100644
--- a/frontend-js/src/test/js/gui/Panel-test.js
+++ b/frontend-js/src/test/js/gui/Panel-test.js
@@ -1,36 +1,36 @@
-"use strict";
-
-/* exported logger */
-
-require('../mocha-config.js');
-
-var Panel = require('../../../main/js/gui/Panel');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('Panel', function () {
-
-    it('openDialog', function () {
-        var map = helper.createCustomMap();
-
-        var panel = new Panel({
-            element: testDiv,
-            customMap: map
-        });
-
-        var content = document.createElement("div");
-        content.innerHTML = "some content";
-
-        var id = 1;
-        panel.openDialog(content, {
-            id: id
-        });
-
-        assert.ok(panel.getDialogDiv(id).innerHTML.indexOf("some content") >= 0);
-        panel.destroy();
-
-    });
-
-});
+"use strict";
+
+/* exported logger */
+
+require('../mocha-config.js');
+
+var Panel = require('../../../main/js/gui/Panel');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('Panel', function () {
+
+  it('openDialog', function () {
+    var map = helper.createCustomMap();
+
+    var panel = new Panel({
+      element: testDiv,
+      customMap: map
+    });
+
+    var content = document.createElement("div");
+    content.innerHTML = "some content";
+
+    var id = 1;
+    panel.openDialog(content, {
+      id: id
+    });
+
+    assert.ok(panel.getDialogDiv(id).innerHTML.indexOf("some content") >= 0);
+    panel.destroy();
+    assert.equal(0, logger.getWarnings().length);
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/SelectionContextMenu-test.js b/frontend-js/src/test/js/gui/SelectionContextMenu-test.js
index aac2264380520cad2ae7f1f3589a8016b210f913..693b76345ac8e006a3475fed75ca9ec954b9f0f7 100644
--- a/frontend-js/src/test/js/gui/SelectionContextMenu-test.js
+++ b/frontend-js/src/test/js/gui/SelectionContextMenu-test.js
@@ -1,66 +1,65 @@
-"use strict";
-
-/* exported logger */
-
-require("../mocha-config.js");
-
-var SelectionContextMenu = require('../../../main/js/gui/SelectionContextMenu');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('SelectionContextMenu', function() {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-
-    new SelectionContextMenu({
-      element : testDiv,
-      customMap : map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('download image', function() {
-    var map;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-
-      var contextMenu = new SelectionContextMenu({
-        element : testDiv,
-        customMap : map
-      });
-      return contextMenu.init();
-    }).then(function(){
-      map.setActiveSubmapId(map.getProject().getModel().getId());
-      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
-
-      var handler = $($("a:contains('PNG')", $(testDiv))[0]).data("handler");
-      return handler();
-    }).then(function() {
-      map.destroy();
-    });
-  });
-  
-  it('download cell designer file', function() {
-    var map;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-
-      var contextMenu = new SelectionContextMenu({
-        element : testDiv,
-        customMap : map
-      });
-      return contextMenu.init();
-    }).then(function(){
-      map.setActiveSubmapId(map.getProject().getModel().getId());
-      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
-      var handler = $($("a:contains('CellDesigner')", $(testDiv))[0]).data("handler");
-      return handler();
-    }).then(function() {
-      map.destroy();
-    });
-  });
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var SelectionContextMenu = require('../../../main/js/gui/SelectionContextMenu');
+var ServerConnector = require('../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('SelectionContextMenu', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    new SelectionContextMenu({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('download image', function () {
+    var map;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      var contextMenu = new SelectionContextMenu({
+        element: testDiv,
+        customMap: map
+      });
+      return contextMenu.init();
+    }).then(function () {
+      map.setActiveSubmapId(map.getProject().getModel().getId());
+      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
+
+      var handler = $($("a:contains('PNG')", $(testDiv))[0]).data("handler");
+      return handler();
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  it('download cell designer file', function () {
+    var map;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      var contextMenu = new SelectionContextMenu({
+        element: testDiv,
+        customMap: map
+      });
+      return contextMenu.init();
+    }).then(function () {
+      map.setActiveSubmapId(map.getProject().getModel().getId());
+      map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12));
+      var handler = $($("a:contains('CellDesigner')", $(testDiv))[0]).data("handler");
+      return handler();
+    }).then(function () {
+      map.destroy();
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/gui/SubMentu-test.js b/frontend-js/src/test/js/gui/SubMentu-test.js
index 9dfd9326a92f813b3bde1e8c03bdc5d488400ef8..5c32b9ab4e1a8790b92736994e5afc32395d8448 100644
--- a/frontend-js/src/test/js/gui/SubMentu-test.js
+++ b/frontend-js/src/test/js/gui/SubMentu-test.js
@@ -1,7 +1,5 @@
 "use strict";
 
-/* exported logger */
-
 require("../mocha-config.js");
 
 var SubMenu = require('../../../main/js/gui/SubMenu');
@@ -10,16 +8,16 @@ var chai = require('chai');
 var assert = chai.assert;
 var logger = require('../logger');
 
-describe('SubMenu', function() {
+describe('SubMenu', function () {
 
-  it('constructor', function() {
+  it('constructor', function () {
     var map = helper.createCustomMap();
 
     var menu = new SubMenu({
-      element : testDiv,
-      customMap : map
+      element: testDiv,
+      customMap: map
     });
-    
+
     menu.addOption("xxx");
 
     assert.equal(logger.getWarnings().length, 0);
diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
index 3e1807a01672c66e5c3631be2774160c1df0ccf6..b5417a04e8c1a3ecfb48fab3a43d400b4cdacf70 100644
--- a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
@@ -1,157 +1,158 @@
-"use strict";
-
-/* exported assert */
-/* exported logger */
-require("../../mocha-config");
-
-var AddProjectDialog = require('../../../../main/js/gui/admin/AddProjectDialog');
-var logger = require('../../logger');
-
-var fs = require("fs");
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('AddProjectDialog', function () {
-  it('init', function () {
-    var dialog = new AddProjectDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.login("admin", "admin").then(function () {
-      return dialog.init();
-    }).then(function () {
-      assert.ok(dialog.getNotifyEmail() !== "");
-      return dialog.destroy();
-    });
-  });
-
-  it('onUserPreferencesChange', function () {
-    var dialog = new AddProjectDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.login("admin", "admin").then(function () {
-      return dialog.init();
-    }).then(function () {
-      dialog.setCache(false);
-      assert.notOk(dialog.isCache());
-      dialog.setCache(true);
-      assert.ok(dialog.isCache());
-      return dialog.destroy();
-    });
-  });
-
-  describe('onFileUpload', function () {
-    it('default', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
-
-      var file = new Blob(["<node></node>"]);
-      file.name = "test.xml";
-      return dialog.init().then(function () {
-        return dialog.callListeners("onFileUpload", file);
-      }).then(function () {
-        assert.ok(dialog.getFileContent());
-        assert.equal("test", dialog.getProjectId());
-        return dialog.getConverter();
-      }).then(function (converter) {
-        assert.equal("xml", converter.extension);
-        return dialog.destroy();
-      });
-    });
-  });
-
-  describe('setZipFileContent', function () {
-    it('submaps', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
-      var buf = fs.readFileSync("testFiles/map/complex_model_with_submaps.zip");
-      buf.name = "complex_model_with_submaps.zip";
-      return dialog.init().then(function () {
-        return dialog.setZipFileContent(buf);
-      }).then(function () {
-        assert.equal(5, dialog.getZipEntries().length);
-        return dialog.destroy();
-      });
-    });
-    it('overlays', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
-      var buf = fs.readFileSync("testFiles/map/complex_model_with_overlays.zip");
-      buf.name = "complex_model_with_overlays.zip";
-      return dialog.init().then(function () {
-        var dataTable = $($("[name='overlaysTable']", testDiv)[0]).DataTable();
-        assert.equal(0, dataTable.data().count());
-        return dialog.setZipFileContent(buf);
-      }).then(function () {
-        var dataTable = $($("[name='overlaysTable']", testDiv)[0]).DataTable();
-        assert.ok(dataTable.data().count() > 0);
-        return dialog.destroy();
-      });
-    });
-  });
-
-  describe('showAnnotatorsDialog', function () {
-    it('default', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
-
-      return dialog.showAnnotatorsDialog().then(function () {
-        return dialog.destroy();
-      });
-    });
-  });
-
-
-  describe('onSaveClicked', function () {
-    var originalAddProject;
-    beforeEach(function () {
-      originalAddProject = ServerConnector.addProject;
-    });
-    afterEach(function () {
-      ServerConnector.addProject = originalAddProject;
-    });
-    it('default', function () {
-      var options;
-      ServerConnector.addProject = function (params) {
-        options = params;
-      };
-
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
-
-      var file = new Blob(["<node></node>"]);
-      file.name = "test.xml";
-      return dialog.init().then(function () {
-        return dialog.callListeners("onFileUpload", file);
-      }).then(function () {
-        return dialog.onSaveClicked();
-      }).then(function () {
-        assert.ok(options["name"] !== undefined);
-        assert.ok(options["projectId"] !== undefined);
-        assert.ok(options["file-id"] !== undefined);
-        assert.ok(options["parser"] !== undefined);
-        assert.ok(options["auto-resize"] !== undefined);
-        assert.ok(options["cache"] !== undefined);
-        assert.ok(options["notify-email"] !== undefined);
-        assert.ok(options["disease"] !== undefined);
-        assert.ok(options["organism"] !== undefined);
-        assert.ok(options["sbgn"] !== undefined);
-        assert.ok(options["semantic-zoom"] !== undefined);
-      }).finally(function () {
-        return dialog.destroy();
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var AddProjectDialog = require('../../../../main/js/gui/admin/AddProjectDialog');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var fs = require("fs");
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('AddProjectDialog', function () {
+  it('init', function () {
+    var dialog = new AddProjectDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.login("admin", "admin").then(function () {
+      return dialog.init();
+    }).then(function () {
+      assert.ok(dialog.getNotifyEmail() !== "");
+      assert.equal(0, logger.getWarnings().length);
+      return dialog.destroy();
+    });
+  });
+
+  it('onUserPreferencesChange', function () {
+    var dialog = new AddProjectDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.login("admin", "admin").then(function () {
+      return dialog.init();
+    }).then(function () {
+      dialog.setCache(false);
+      assert.notOk(dialog.isCache());
+      dialog.setCache(true);
+      assert.ok(dialog.isCache());
+      return dialog.destroy();
+    });
+  });
+
+  describe('onFileUpload', function () {
+    it('default', function () {
+      var dialog = new AddProjectDialog({
+        element: testDiv,
+        customMap: null
+      });
+
+      var file = new Blob(["<node></node>"]);
+      file.name = "test.xml";
+      return dialog.init().then(function () {
+        return dialog.callListeners("onFileUpload", file);
+      }).then(function () {
+        assert.ok(dialog.getFileContent());
+        assert.equal("test", dialog.getProjectId());
+        return dialog.getConverter();
+      }).then(function (converter) {
+        assert.equal("xml", converter.extension);
+        return dialog.destroy();
+      });
+    });
+  });
+
+  describe('setZipFileContent', function () {
+    it('submaps', function () {
+      var dialog = new AddProjectDialog({
+        element: testDiv,
+        customMap: null
+      });
+      var buf = fs.readFileSync("testFiles/map/complex_model_with_submaps.zip");
+      buf.name = "complex_model_with_submaps.zip";
+      return dialog.init().then(function () {
+        return dialog.setZipFileContent(buf);
+      }).then(function () {
+        assert.equal(5, dialog.getZipEntries().length);
+        return dialog.destroy();
+      });
+    });
+    it('overlays', function () {
+      var dialog = new AddProjectDialog({
+        element: testDiv,
+        customMap: null
+      });
+      var buf = fs.readFileSync("testFiles/map/complex_model_with_overlays.zip");
+      buf.name = "complex_model_with_overlays.zip";
+      return dialog.init().then(function () {
+        var dataTable = $($("[name='overlaysTable']", testDiv)[0]).DataTable();
+        assert.equal(0, dataTable.data().count());
+        return dialog.setZipFileContent(buf);
+      }).then(function () {
+        var dataTable = $($("[name='overlaysTable']", testDiv)[0]).DataTable();
+        assert.ok(dataTable.data().count() > 0);
+        return dialog.destroy();
+      });
+    });
+  });
+
+  describe('showAnnotatorsDialog', function () {
+    it('default', function () {
+      var dialog = new AddProjectDialog({
+        element: testDiv,
+        customMap: null
+      });
+
+      return dialog.showAnnotatorsDialog().then(function () {
+        return dialog.destroy();
+      });
+    });
+  });
+
+
+  describe('onSaveClicked', function () {
+    var originalAddProject;
+    beforeEach(function () {
+      originalAddProject = ServerConnector.addProject;
+    });
+    afterEach(function () {
+      ServerConnector.addProject = originalAddProject;
+    });
+    it('default', function () {
+      var options;
+      ServerConnector.addProject = function (params) {
+        options = params;
+      };
+
+      var dialog = new AddProjectDialog({
+        element: testDiv,
+        customMap: null
+      });
+
+      var file = new Blob(["<node></node>"]);
+      file.name = "test.xml";
+      return dialog.init().then(function () {
+        return dialog.callListeners("onFileUpload", file);
+      }).then(function () {
+        return dialog.onSaveClicked();
+      }).then(function () {
+        assert.ok(options["name"] !== undefined);
+        assert.ok(options["projectId"] !== undefined);
+        assert.ok(options["file-id"] !== undefined);
+        assert.ok(options["parser"] !== undefined);
+        assert.ok(options["auto-resize"] !== undefined);
+        assert.ok(options["cache"] !== undefined);
+        assert.ok(options["notify-email"] !== undefined);
+        assert.ok(options["disease"] !== undefined);
+        assert.ok(options["organism"] !== undefined);
+        assert.ok(options["sbgn"] !== undefined);
+        assert.ok(options["semantic-zoom"] !== undefined);
+      }).finally(function () {
+        return dialog.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/ChooseAnnotatorsDialog-test.js b/frontend-js/src/test/js/gui/admin/ChooseAnnotatorsDialog-test.js
index e9831410f589583baf9429cb6e02cb3526f43052..e7e321353be67a636b60147947759b85ba43662b 100644
--- a/frontend-js/src/test/js/gui/admin/ChooseAnnotatorsDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/ChooseAnnotatorsDialog-test.js
@@ -1,47 +1,47 @@
-"use strict";
-
-/* exported assert */
-/* exported logger */
-require("../../mocha-config");
-
-var ChooseAnnotatorsDialog = require('../../../../main/js/gui/admin/ChooseAnnotatorsDialog');
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('ChooseAnnotatorsDialog', function () {
-  it('init', function () {
-    var dialog = new ChooseAnnotatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return dialog.init();
-  });
-
-  it('createElementTree', function () {
-    var dialog = new ChooseAnnotatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      var treeData = dialog.createElementTree(configuration);
-
-      assert.ok(treeData);
-      assert.ok(treeData.text);
-      assert.ok(treeData.children);
-      assert.equal(2, treeData.children.length);
-    })
-  });
-
-  it('setElementType', function () {
-    var dialog = new ChooseAnnotatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      return dialog.setElementType(configuration.getReactionTypes()[0]);
-    })
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var ChooseAnnotatorsDialog = require('../../../../main/js/gui/admin/ChooseAnnotatorsDialog');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('ChooseAnnotatorsDialog', function () {
+  it('init', function () {
+    var dialog = new ChooseAnnotatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    assert.equal(0, logger.getWarnings().length);
+    return dialog.init();
+  });
+
+  it('createElementTree', function () {
+    var dialog = new ChooseAnnotatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      var treeData = dialog.createElementTree(configuration);
+
+      assert.ok(treeData);
+      assert.ok(treeData.text);
+      assert.ok(treeData.children);
+      assert.equal(2, treeData.children.length);
+    })
+  });
+
+  it('setElementType', function () {
+    var dialog = new ChooseAnnotatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      return dialog.setElementType(configuration.getReactionTypes()[0]);
+    })
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/ChooseValidatorsDialog-test.js b/frontend-js/src/test/js/gui/admin/ChooseValidatorsDialog-test.js
index 9ed8f4cbef7a5e1087983882e21eb13a820dc73e..ef96a952b42b83c668ae49e1f15afef37967b8d9 100644
--- a/frontend-js/src/test/js/gui/admin/ChooseValidatorsDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/ChooseValidatorsDialog-test.js
@@ -1,47 +1,47 @@
-"use strict";
-
-/* exported assert */
-/* exported logger */
-require("../../mocha-config");
-
-var ChooseValidatorsDialog = require('../../../../main/js/gui/admin/ChooseValidatorsDialog');
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('ChooseValidatorsDialog', function () {
-  it('init', function () {
-    var dialog = new ChooseValidatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return dialog.init();
-  });
-
-  it('createElementTree', function () {
-    var dialog = new ChooseValidatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      var treeData = dialog.createElementTree(configuration);
-
-      assert.ok(treeData);
-      assert.ok(treeData.text);
-      assert.ok(treeData.children);
-      assert.equal(2, treeData.children.length);
-    })
-  });
-
-  it('setElementType', function () {
-    var dialog = new ChooseValidatorsDialog({
-      element: testDiv,
-      customMap: null
-    });
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      return dialog.setElementType(configuration.getReactionTypes()[0]);
-    })
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var ChooseValidatorsDialog = require('../../../../main/js/gui/admin/ChooseValidatorsDialog');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('ChooseValidatorsDialog', function () {
+  it('init', function () {
+    var dialog = new ChooseValidatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    assert.equal(0, logger.getWarnings().length);
+    return dialog.init();
+  });
+
+  it('createElementTree', function () {
+    var dialog = new ChooseValidatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      var treeData = dialog.createElementTree(configuration);
+
+      assert.ok(treeData);
+      assert.ok(treeData.text);
+      assert.ok(treeData.children);
+      assert.equal(2, treeData.children.length);
+    })
+  });
+
+  it('setElementType', function () {
+    var dialog = new ChooseValidatorsDialog({
+      element: testDiv,
+      customMap: null
+    });
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      return dialog.setElementType(configuration.getReactionTypes()[0]);
+    })
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
index 2725b2ac515b8a06dda893fb66efb3068dd748f7..38d68865a65cbbf5287b941de580fe5241041e95 100644
--- a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
+++ b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
@@ -1,51 +1,52 @@
-"use strict";
-
-require("../../mocha-config");
-
-var ConfigurationAdminPanel = require('../../../../main/js/gui/admin/ConfigurationAdminPanel');
-var ConfigurationType = require('../../../../main/js/ConfigurationType');
-var logger = require('../../logger');
-
-var assert = require('assert');
-
-describe('ConfigurationAdminPanel', function () {
-
-  it('init', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new ConfigurationAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      assert.equal(0, logger.getWarnings().length);
-      return mapTab.destroy();
-    });
-  });
-  it('saveOption', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new ConfigurationAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.saveOption(ConfigurationType.DEFAULT_MAP);
-    }).then(function () {
-      return mapTab.destroy();
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var ConfigurationAdminPanel = require('../../../../main/js/gui/admin/ConfigurationAdminPanel');
+var ConfigurationType = require('../../../../main/js/ConfigurationType');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var assert = require('assert');
+
+describe('ConfigurationAdminPanel', function () {
+
+  it('init', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new ConfigurationAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      return mapTab.destroy();
+    });
+  });
+  it('saveOption', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new ConfigurationAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.saveOption(ConfigurationType.DEFAULT_MAP);
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js b/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
index 9c50e955d605b70d2e1ba6b2ff34ba29954bde60..d410430a03f6126d00f79cf45634bc6d9b87db8c 100644
--- a/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/EditUserDialog-test.js
@@ -1,174 +1,172 @@
-"use strict";
-
-/* exported assert */
-/* exported logger */
-require("../../mocha-config");
-
-var EditUserDialog = require('../../../../main/js/gui/admin/EditUserDialog');
-var User = require('../../../../main/js/map/data/User');
-var ValidationError = require('../../../../main/js/ValidationError');
-
-
-// noinspection JSUnusedLocalSymbols
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-var expect = chai.expect;
-
-describe('EditUserDialog', function () {
-
-  describe('init', function () {
-    it('empty user', function () {
-      var dialog;
-      var project;
-      var user = new User({});
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        dialog.destroy();
-      });
-    });
-  });
-
-  describe('checkValidity', function () {
-    it('empty user', function () {
-      var dialog;
-      var project;
-      var user = new User({});
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        return dialog.checkValidity().then(function () {
-          assert.ok(null);
-        }, function (error) {
-          assert.ok(error instanceof ValidationError);
-        });
-      }).then(function () {
-        dialog.destroy();
-      });
-    });
-
-    it('existing user', function () {
-      var dialog;
-      var project;
-      var user;
-      return ServerConnector.getUser("anonymous").then(function (result) {
-        user = result;
-        return ServerConnector.getProject();
-      }).then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        return dialog.checkValidity();
-      }).then(function (result) {
-        assert.ok(result);
-      }).then(function () {
-        dialog.destroy();
-      });
-    });
-  });
-
-  describe('onSaveClicked', function () {
-    it('existing user', function () {
-      var dialog;
-      var project;
-      var user;
-      return ServerConnector.getUser("anonymous").then(function (result) {
-        user = result;
-        return ServerConnector.getProject();
-      }).then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        return dialog.onSaveClicked();
-      }).then(function () {
-        dialog.destroy();
-      });
-    });
-
-  });
-  describe('click privilege checkbox', function () {
-    it('existing user', function () {
-      var dialog;
-      var project;
-      var user;
-      var serializedPrivileges;
-      return ServerConnector.getUser("anonymous").then(function (result) {
-        user = result;
-        serializedPrivileges = user.privilegesToExport(helper.getConfiguration());
-        return ServerConnector.getProject();
-      }).then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        return $("[name=privilege-checkbox]", dialog.getElement()).click();
-      }).then(function () {
-        expect(serializedPrivileges).not.to.deep.equal(user.privilegesToExport(helper.getConfiguration()));
-        dialog.destroy();
-      });
-    });
-
-  });
-  describe('change privilege int value', function () {
-    it('existing user', function () {
-      var dialog;
-      var project;
-      var user;
-      var serializedPrivileges;
-      return ServerConnector.getUser("anonymous").then(function (result) {
-        user = result;
-        serializedPrivileges = user.privilegesToExport(helper.getConfiguration());
-        return ServerConnector.getProject();
-      }).then(function (result) {
-        project = result;
-        dialog = new EditUserDialog({
-          element: testDiv,
-          project: project,
-          user: user,
-          customMap: null
-        });
-        return dialog.init();
-      }).then(function () {
-        $("[name=privilege-int]", dialog.getElement()).val("101010");
-        $("[name=privilege-int]", dialog.getElement()).trigger("change");
-      }).then(function () {
-        expect(serializedPrivileges).not.to.deep.equal(user.privilegesToExport(helper.getConfiguration()));
-        dialog.destroy();
-      });
-    });
-
-  });
-});
+"use strict";
+
+require("../../mocha-config");
+
+var EditUserDialog = require('../../../../main/js/gui/admin/EditUserDialog');
+var User = require('../../../../main/js/map/data/User');
+var ValidationError = require('../../../../main/js/ValidationError');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+var expect = chai.expect;
+
+describe('EditUserDialog', function () {
+
+  describe('init', function () {
+    it('empty user', function () {
+      var dialog;
+      var project;
+      var user = new User({});
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        assert.equal(0, logger.getWarnings().length);
+        dialog.destroy();
+      });
+    });
+  });
+
+  describe('checkValidity', function () {
+    it('empty user', function () {
+      var dialog;
+      var project;
+      var user = new User({});
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        return dialog.checkValidity().then(function () {
+          assert.ok(null);
+        }, function (error) {
+          assert.ok(error instanceof ValidationError);
+        });
+      }).then(function () {
+        dialog.destroy();
+      });
+    });
+
+    it('existing user', function () {
+      var dialog;
+      var project;
+      var user;
+      return ServerConnector.getUser("anonymous").then(function (result) {
+        user = result;
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        return dialog.checkValidity();
+      }).then(function (result) {
+        assert.ok(result);
+      }).then(function () {
+        dialog.destroy();
+      });
+    });
+  });
+
+  describe('onSaveClicked', function () {
+    it('existing user', function () {
+      var dialog;
+      var project;
+      var user;
+      return ServerConnector.getUser("anonymous").then(function (result) {
+        user = result;
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        return dialog.onSaveClicked();
+      }).then(function () {
+        dialog.destroy();
+      });
+    });
+
+  });
+  describe('click privilege checkbox', function () {
+    it('existing user', function () {
+      var dialog;
+      var project;
+      var user;
+      var serializedPrivileges;
+      return ServerConnector.getUser("anonymous").then(function (result) {
+        user = result;
+        serializedPrivileges = user.privilegesToExport(helper.getConfiguration());
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        return $("[name=privilege-checkbox]", dialog.getElement()).click();
+      }).then(function () {
+        expect(serializedPrivileges).not.to.deep.equal(user.privilegesToExport(helper.getConfiguration()));
+        dialog.destroy();
+      });
+    });
+
+  });
+  describe('change privilege int value', function () {
+    it('existing user', function () {
+      var dialog;
+      var project;
+      var user;
+      var serializedPrivileges;
+      return ServerConnector.getUser("anonymous").then(function (result) {
+        user = result;
+        serializedPrivileges = user.privilegesToExport(helper.getConfiguration());
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        dialog = new EditUserDialog({
+          element: testDiv,
+          project: project,
+          user: user,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        $("[name=privilege-int]", dialog.getElement()).val("101010");
+        $("[name=privilege-int]", dialog.getElement()).trigger("change");
+      }).then(function () {
+        expect(serializedPrivileges).not.to.deep.equal(user.privilegesToExport(helper.getConfiguration()));
+        dialog.destroy();
+      });
+    });
+
+  });
+});
diff --git a/frontend-js/src/test/js/gui/admin/LogListDialog-test.js b/frontend-js/src/test/js/gui/admin/LogListDialog-test.js
index 6e2ab51ad00e0ce1e85a3339e78b5c390f3c0e11..97f483b47bc81526e0f629dcb735f1d6034c4bdf 100644
--- a/frontend-js/src/test/js/gui/admin/LogListDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/LogListDialog-test.js
@@ -1,52 +1,52 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var LogListDialog = require('../../../../main/js/gui/admin/LogListDialog');
-var ServerConnector = require('../../ServerConnector-mock');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('LogListDialog', function () {
-
-  it('constructor', function () {
-    var div = testDiv;
-
-    var map = helper.createCustomMap();
-
-    var dialog = new LogListDialog({
-      element: div,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-
-    dialog.destroy();
-  });
-
-  it('_dataTableAjaxCall', function () {
-    var dialog;
-    var callbackCalled = false;
-    return ServerConnector.getProject().then(function (project) {
-      dialog = new LogListDialog({
-        element: testDiv,
-        customMap: helper.createCustomMap(project),
-        level: 'error'
-      });
-      return dialog._dataTableAjaxCall({
-        start: 0,
-        length: 10,
-        order: [{column: 0, dir: 'asc'}],
-        search: {value: '', regex: false}
-      }, function () {
-        callbackCalled = true;
-      });
-    }).then(function () {
-      assert.ok(callbackCalled);
-    }).finally(function () {
-      dialog.destroy();
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var LogListDialog = require('../../../../main/js/gui/admin/LogListDialog');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('LogListDialog', function () {
+
+  it('constructor', function () {
+    var div = testDiv;
+
+    var map = helper.createCustomMap();
+
+    var dialog = new LogListDialog({
+      element: div,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+
+    dialog.destroy();
+  });
+
+  it('_dataTableAjaxCall', function () {
+    var dialog;
+    var callbackCalled = false;
+    return ServerConnector.getProject().then(function (project) {
+      dialog = new LogListDialog({
+        element: testDiv,
+        customMap: helper.createCustomMap(project),
+        level: 'error'
+      });
+      return dialog._dataTableAjaxCall({
+        start: 0,
+        length: 10,
+        order: [{column: 0, dir: 'asc'}],
+        search: {value: '', regex: false}
+      }, function () {
+        callbackCalled = true;
+      });
+    }).then(function () {
+      assert.ok(callbackCalled);
+    }).finally(function () {
+      dialog.destroy();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js
index 2d28862da5db2836894192b792905eb84e1e6ee0..d5fdf4574bd1ceb68547ce2d37a3e0d5c1083b01 100644
--- a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js
+++ b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js
@@ -1,101 +1,99 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-require("../../mocha-config");
-
-var MapsAdminPanel = require('../../../../main/js/gui/admin/MapsAdminPanel');
-var logger = require('../../logger');
-
-var assert = require('assert');
-
-describe('MapsAdminPanel', function () {
-
-  it('refresh', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new MapsAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.onRefreshClicked();
-    }).then(function () {
-      assert.equal(0, logger.getWarnings().length);
-      return mapTab.destroy();
-    });
-  });
-  it('showLogs', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new MapsAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.showLogs(project.getProjectId(), 'error');
-    }).then(function () {
-      assert.equal(0, logger.getWarnings().length);
-      return mapTab.destroy();
-    });
-  });
-
-
-  describe('onAddClicked', function () {
-    it('default', function () {
-      var mapTab;
-      var project;
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function (configuration) {
-        mapTab = new MapsAdminPanel({
-          element: testDiv,
-          project: project,
-          configuration: configuration
-        });
-        return mapTab.init();
-      }).then(function () {
-        return mapTab.onAddClicked();
-      }).then(function () {
-        return mapTab.destroy();
-      });
-    });
-    it('close and reopen', function () {
-      var mapTab;
-      var project;
-      return ServerConnector.getProject().then(function (result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function (configuration) {
-        mapTab = new MapsAdminPanel({
-          element: testDiv,
-          project: project,
-          configuration: configuration
-        });
-        return mapTab.init();
-      }).then(function () {
-        return mapTab.onAddClicked();
-      }).then(function () {
-        mapTab._addDialog.close();
-        return mapTab.onAddClicked();
-      }).then(function () {
-        return mapTab.destroy();
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var MapsAdminPanel = require('../../../../main/js/gui/admin/MapsAdminPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var assert = require('assert');
+
+describe('MapsAdminPanel', function () {
+
+  it('refresh', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new MapsAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.onRefreshClicked();
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      return mapTab.destroy();
+    });
+  });
+  it('showLogs', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new MapsAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.showLogs(project.getProjectId(), 'error');
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      return mapTab.destroy();
+    });
+  });
+
+
+  describe('onAddClicked', function () {
+    it('default', function () {
+      var mapTab;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        mapTab = new MapsAdminPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return mapTab.init();
+      }).then(function () {
+        return mapTab.onAddClicked();
+      }).then(function () {
+        return mapTab.destroy();
+      });
+    });
+    it('close and reopen', function () {
+      var mapTab;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        mapTab = new MapsAdminPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return mapTab.init();
+      }).then(function () {
+        return mapTab.onAddClicked();
+      }).then(function () {
+        mapTab._addDialog.close();
+        return mapTab.onAddClicked();
+      }).then(function () {
+        return mapTab.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js
index 29ab789732f09a87a025003169ad69df1075b52c..92410c1671356f7985c17170f31c7ada5eee791c 100644
--- a/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js
+++ b/frontend-js/src/test/js/gui/admin/UserAdminPanel-test.js
@@ -1,95 +1,92 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-require("../../mocha-config");
-
-var UsersAdminPanel = require('../../../../main/js/gui/admin/UsersAdminPanel');
-// noinspection JSUnusedLocalSymbols
-var logger = require('../../logger');
-
-// noinspection JSUnusedLocalSymbols
-var assert = require('assert');
-
-describe('UsersAdminPanel', function () {
-
-  it('init', function () {
-    var usersTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      usersTab = new UsersAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return usersTab.init();
-    }).then(function () {
-      return usersTab.destroy();
-    });
-  });
-
-  it('refresh', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new UsersAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.onRefreshClicked();
-    }).then(function () {
-      return mapTab.destroy();
-    });
-  });
-
-  it('showEditDialog', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new UsersAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.showEditDialog("anonymous");
-    }).then(function () {
-      return mapTab.destroy();
-    });
-  });
-  it('onAddClicked', function () {
-    var mapTab;
-    var project;
-    return ServerConnector.getProject().then(function (result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function (configuration) {
-      mapTab = new UsersAdminPanel({
-        element: testDiv,
-        project: project,
-        configuration: configuration
-      });
-      return mapTab.init();
-    }).then(function () {
-      return mapTab.onAddClicked();
-    }).then(function () {
-      return mapTab.destroy();
-    });
-  });
-
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var UsersAdminPanel = require('../../../../main/js/gui/admin/UsersAdminPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var assert = require('assert');
+
+describe('UsersAdminPanel', function () {
+
+  it('init', function () {
+    var usersTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      usersTab = new UsersAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return usersTab.init();
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      return usersTab.destroy();
+    });
+  });
+
+  it('refresh', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new UsersAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.onRefreshClicked();
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
+
+  it('showEditDialog', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new UsersAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.showEditDialog("anonymous");
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
+  it('onAddClicked', function () {
+    var mapTab;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      mapTab = new UsersAdminPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return mapTab.init();
+    }).then(function () {
+      return mapTab.onAddClicked();
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
+
+
+});
diff --git a/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
index 1998c1f27983bd45acf715c65b4040cb0a3b8506..da83d0760d942b6245e3d8349e7cb864c90fc457 100644
--- a/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
+++ b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
@@ -1,290 +1,291 @@
-"use strict";
-
-/* exported logger */
-require("../../mocha-config.js");
-
-var ElementExportPanel = require('../../../../main/js/gui/export/ElementExportPanel');
-var GuiMessageError = require('../../../../main/js/gui/GuiMessageError');
-var MiriamType = require('../../../../main/js/map/data/MiriamType');
-var logger = require('../../logger');
-
-var assert = require('assert');
-
-describe('ElementExportPanel', function() {
-
-  describe('getSelectedTypes', function() {
-    it('select single element', function() {
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        $("input[name='Degraded']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        return exportObject.getSelectedTypes();
-      }).then(function(selectedTypes) {
-        assert.deepEqual([ "Degraded" ], selectedTypes);
-      });
-    });
-    it('select all', function() {
-      var exportObject;
-      var project;
-      var elementTypes;
-
-      var configuration;
-
-      return ServerConnector.getConfiguration().then(function(result) {
-        configuration = result;
-        elementTypes = configuration.getSimpleElementTypeNames();
-        return ServerConnector.getProject();
-      }).then(function(result) {
-        project = result;
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        $("input[name='Degraded']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        return exportObject.getSelectedTypes();
-      }).then(function(selectedTypes) {
-        assert.deepEqual(elementTypes, selectedTypes);
-      });
-    });
-  });
-
-  describe('getSelectedColumns', function() {
-    it('select single element', function() {
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        $("input[name='column_name']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        return exportObject.getSelectedColumns();
-      }).then(function(selectedTypes) {
-        assert.equal([ "name" ], selectedTypes[0].columnName);
-      });
-    });
-    it('select all', function() {
-      var exportObject;
-      var project;
-      var elementTypes;
-      var configuration;
-
-      return ServerConnector.getConfiguration().then(function(result) {
-        configuration = result;
-        elementTypes = configuration.getElementTypes();
-        return ServerConnector.getProject();
-      }).then(function(result) {
-        project = result;
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        $("input[name='column_name']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        return exportObject.getSelectedColumns();
-      }).then(function(selectedTypes) {
-        assert.equal(exportObject.getAllColumns().length, selectedTypes.length);
-      });
-    });
-  });
-
-  describe('getSelectedMiriamTypes', function() {
-    it('select single element', function() {
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        var dlb = exportObject.getMiriamTypesDualListbox();
-        var listItem = dlb.available[0];
-        dlb.addSelected(listItem);
-        return exportObject.getSelectedMiriamTypes();
-      }).then(function(result) {
-        assert.equal(result.length, 1);
-        assert.ok(result[0] instanceof MiriamType);
-      });
-    });
-  });
-
-  describe('getSelectedIncludedCompartments', function() {
-    it('empty selection', function() {
-      helper.setUrl("http://test/?id=complex_model_with_submaps");
-
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        assert.ok(exportObject.getIncludedCompartmentsDualListbox().available.length > 0);
-        return exportObject.getSelectedIncludedCompartments();
-      }).then(function(result) {
-        assert.equal(result.length, 0);
-      });
-    });
-  });
-
-  describe('getSelectedExcludedCompartments', function() {
-    it('empty selection', function() {
-      helper.setUrl("http://test/?id=complex_model_with_submaps");
-
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        var dlb = exportObject.getExcludedCompartmentsDualListbox();
-        var listItem = dlb.available[0];
-        dlb.addSelected(listItem);
-        return exportObject.getSelectedExcludedCompartments();
-      }).then(function(result) {
-        assert.equal(result.length, 1);
-      });
-    });
-  });
-
-  describe('createResponseString', function() {
-    it('get all', function() {
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
-          element.checked = true;
-        });
-        var dlb = exportObject.getMiriamTypesDualListbox();
-        var listItem = dlb.available[0];
-        dlb.addSelected(listItem);
-        return exportObject.createResponseString();
-      }).then(function(result) {
-        // protein id
-        assert.equal(result.indexOf("[object Object]"), -1);
-        assert.ok(result.indexOf("329156") >= 0);
-      });
-    });
-    it('get invalid', function() {
-      var exportObject;
-      var project;
-      return ServerConnector.getProject().then(function(result) {
-        project = result;
-        return ServerConnector.getConfiguration();
-      }).then(function(configuration) {
-        exportObject = new ElementExportPanel({
-          element : testDiv,
-          project : project,
-          configuration : configuration
-        });
-        return exportObject.init();
-      }).then(function() {
-        return exportObject.createResponseString();
-      }).then(null, function(error) {
-        assert.ok(error instanceof GuiMessageError);
-      });
-    });
-  });
-
-  it('download file', function() {
-    var exportObject;
-    var project;
-    return ServerConnector.getProject().then(function(result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function(configuration) {
-      exportObject = new ElementExportPanel({
-        element : testDiv,
-        project : project,
-        configuration : configuration
-      });
-      return exportObject.init();
-    }).then(function() {
-      $("input[name='ALL']", $(testDiv)).each(function(index, element) {
-        element.checked = true;
-      });
-      var element = $("[name='downloadButton']", $(testDiv))[0];
-      return element.onclick();
-    });
-  });
-
-  describe('createResponseRow', function() {
-    it('description with new line', function() {
-      var exportObject = new ElementExportPanel({
-        element : testDiv,
-        project : helper.createProject(),
-        configuration : helper.getConfiguration()
-      });
-      var alias = helper.createAlias();
-      var desc = "test\ntest2\n";
-      alias.setDescription(desc);
-      var rowString = exportObject.createResponseRow(alias, exportObject.getAllColumns(), []);
-      assert.ok(rowString.indexOf("test\ntest2\n") === -1);
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config.js");
+
+var ElementExportPanel = require('../../../../main/js/gui/export/ElementExportPanel');
+var GuiMessageError = require('../../../../main/js/gui/GuiMessageError');
+var MiriamType = require('../../../../main/js/map/data/MiriamType');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var assert = require('assert');
+
+describe('ElementExportPanel', function () {
+
+  describe('getSelectedTypes', function () {
+    it('select single element', function () {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        $("input[name='Degraded']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedTypes();
+      }).then(function (selectedTypes) {
+        assert.equal(0, logger.getWarnings().length);
+        assert.deepEqual(["Degraded"], selectedTypes);
+      });
+    });
+    it('select all', function () {
+      var exportObject;
+      var project;
+      var elementTypes;
+
+      var configuration;
+
+      return ServerConnector.getConfiguration().then(function (result) {
+        configuration = result;
+        elementTypes = configuration.getSimpleElementTypeNames();
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        $("input[name='Degraded']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        $("input[name='ALL']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedTypes();
+      }).then(function (selectedTypes) {
+        assert.deepEqual(elementTypes, selectedTypes);
+      });
+    });
+  });
+
+  describe('getSelectedColumns', function () {
+    it('select single element', function () {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        $("input[name='column_name']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedColumns();
+      }).then(function (selectedTypes) {
+        assert.equal(["name"], selectedTypes[0].columnName);
+      });
+    });
+    it('select all', function () {
+      var exportObject;
+      var project;
+      var elementTypes;
+      var configuration;
+
+      return ServerConnector.getConfiguration().then(function (result) {
+        configuration = result;
+        elementTypes = configuration.getElementTypes();
+        return ServerConnector.getProject();
+      }).then(function (result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        $("input[name='column_name']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        $("input[name='ALL']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedColumns();
+      }).then(function (selectedTypes) {
+        assert.equal(exportObject.getAllColumns().length, selectedTypes.length);
+      });
+    });
+  });
+
+  describe('getSelectedMiriamTypes', function () {
+    it('select single element', function () {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        var dlb = exportObject.getMiriamTypesDualListbox();
+        var listItem = dlb.available[0];
+        dlb.addSelected(listItem);
+        return exportObject.getSelectedMiriamTypes();
+      }).then(function (result) {
+        assert.equal(result.length, 1);
+        assert.ok(result[0] instanceof MiriamType);
+      });
+    });
+  });
+
+  describe('getSelectedIncludedCompartments', function () {
+    it('empty selection', function () {
+      helper.setUrl("http://test/?id=complex_model_with_submaps");
+
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        assert.ok(exportObject.getIncludedCompartmentsDualListbox().available.length > 0);
+        return exportObject.getSelectedIncludedCompartments();
+      }).then(function (result) {
+        assert.equal(result.length, 0);
+      });
+    });
+  });
+
+  describe('getSelectedExcludedCompartments', function () {
+    it('empty selection', function () {
+      helper.setUrl("http://test/?id=complex_model_with_submaps");
+
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        var dlb = exportObject.getExcludedCompartmentsDualListbox();
+        var listItem = dlb.available[0];
+        dlb.addSelected(listItem);
+        return exportObject.getSelectedExcludedCompartments();
+      }).then(function (result) {
+        assert.equal(result.length, 1);
+      });
+    });
+  });
+
+  describe('createResponseString', function () {
+    it('get all', function () {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        $("input[name='ALL']", $(testDiv)).each(function (index, element) {
+          element.checked = true;
+        });
+        var dlb = exportObject.getMiriamTypesDualListbox();
+        var listItem = dlb.available[0];
+        dlb.addSelected(listItem);
+        return exportObject.createResponseString();
+      }).then(function (result) {
+        // protein id
+        assert.equal(result.indexOf("[object Object]"), -1);
+        assert.ok(result.indexOf("329156") >= 0);
+      });
+    });
+    it('get invalid', function () {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        return ServerConnector.getConfiguration();
+      }).then(function (configuration) {
+        exportObject = new ElementExportPanel({
+          element: testDiv,
+          project: project,
+          configuration: configuration
+        });
+        return exportObject.init();
+      }).then(function () {
+        return exportObject.createResponseString();
+      }).then(null, function (error) {
+        assert.ok(error instanceof GuiMessageError);
+      });
+    });
+  });
+
+  it('download file', function () {
+    var exportObject;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      exportObject = new ElementExportPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return exportObject.init();
+    }).then(function () {
+      $("input[name='ALL']", $(testDiv)).each(function (index, element) {
+        element.checked = true;
+      });
+      var element = $("[name='downloadButton']", $(testDiv))[0];
+      return element.onclick();
+    });
+  });
+
+  describe('createResponseRow', function () {
+    it('description with new line', function () {
+      var exportObject = new ElementExportPanel({
+        element: testDiv,
+        project: helper.createProject(),
+        configuration: helper.getConfiguration()
+      });
+      var alias = helper.createAlias();
+      var desc = "test\ntest2\n";
+      alias.setDescription(desc);
+      var rowString = exportObject.createResponseRow(alias, exportObject.getAllColumns(), []);
+      assert.ok(rowString.indexOf("test\ntest2\n") === -1);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/export/GraphicsExportPanel-test.js b/frontend-js/src/test/js/gui/export/GraphicsExportPanel-test.js
index a2b91b43d1f71c2c2ccae68098c6ed749fb6ee06..d53571bd2e2fb8dcd3e1b9d68fbb7c7d85d6864d 100644
--- a/frontend-js/src/test/js/gui/export/GraphicsExportPanel-test.js
+++ b/frontend-js/src/test/js/gui/export/GraphicsExportPanel-test.js
@@ -1,68 +1,69 @@
-"use strict";
-
-/* exported logger */
-
-var GraphicsExportPanel = require('../../../../main/js/gui/export/GraphicsExportPanel');
-var logger = require('../../logger');
-var assert = require('assert');
-
-describe('GraphicsExportPanel', function() {
-
-  it('getModelId', function() {
-    var exportObject;
-    var project;
-    return ServerConnector.getProject().then(function(result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function(configuration) {
-      exportObject = new GraphicsExportPanel({
-        element : testDiv,
-        project : project,
-        configuration : configuration,
-      });
-      return exportObject.init();
-    }).then(function() {
-      var id = exportObject.getSubmapId();
-      assert.ok(id);
-    });
-  });
-
-  it('getFormatHandler', function() {
-    var exportObject;
-    var project;
-    return ServerConnector.getProject().then(function(result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function(configuration) {
-      exportObject = new GraphicsExportPanel({
-        element : testDiv,
-        project : project,
-        configuration : configuration,
-      });
-      return exportObject.init();
-    }).then(function() {
-      var format = exportObject.getFormatHandler();
-      assert.ok(format);
-    });
-  });
-
-  it('download file', function() {
-    var exportObject;
-    var project;
-    return ServerConnector.getProject().then(function(result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function(configuration) {
-      exportObject = new GraphicsExportPanel({
-        element : testDiv,
-        project : project,
-        configuration : configuration,
-      });
-      return exportObject.init();
-    }).then(function() {
-      var element = $("[name='downloadButton']", $(testDiv))[0];
-      return element.onclick();
-    });
-  });
-
-});
+"use strict";
+
+var GraphicsExportPanel = require('../../../../main/js/gui/export/GraphicsExportPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+var assert = require('assert');
+
+describe('GraphicsExportPanel', function() {
+
+  it('getModelId', function() {
+    var exportObject;
+    var project;
+    return ServerConnector.getProject().then(function(result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function(configuration) {
+      exportObject = new GraphicsExportPanel({
+        element : testDiv,
+        project : project,
+        configuration : configuration
+      });
+      return exportObject.init();
+    }).then(function() {
+      var id = exportObject.getSubmapId();
+      assert.ok(id);
+      assert.equal(0,logger.getWarnings().length)
+    });
+  });
+
+  it('getFormatHandler', function() {
+    var exportObject;
+    var project;
+    return ServerConnector.getProject().then(function(result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function(configuration) {
+      exportObject = new GraphicsExportPanel({
+        element : testDiv,
+        project : project,
+        configuration : configuration
+      });
+      return exportObject.init();
+    }).then(function() {
+      var format = exportObject.getFormatHandler();
+      assert.ok(format);
+    });
+  });
+
+  it('download file', function() {
+    var exportObject;
+    var project;
+    return ServerConnector.getProject().then(function(result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function(configuration) {
+      exportObject = new GraphicsExportPanel({
+        element : testDiv,
+        project : project,
+        configuration : configuration
+      });
+      return exportObject.init();
+    }).then(function() {
+      var element = $("[name='downloadButton']", $(testDiv))[0];
+      return element.onclick();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/export/NetworkExportPanel-test.js b/frontend-js/src/test/js/gui/export/NetworkExportPanel-test.js
index 814080ba54ae225f5ea084b2b717fef66daa599a..4e249befcdb70003ba6fa8b840137f4bdba39631 100644
--- a/frontend-js/src/test/js/gui/export/NetworkExportPanel-test.js
+++ b/frontend-js/src/test/js/gui/export/NetworkExportPanel-test.js
@@ -1,34 +1,37 @@
-"use strict";
-
-/* exported logger */
-
-require("../../mocha-config");
-
-var NetworkExportPanel = require('../../../../main/js/gui/export/NetworkExportPanel');
-var logger = require('../../logger');
-
-describe('NetworkExportPanel', function() {
-
-  it('download file', function() {
-    var exportObject;
-    var project;
-    return ServerConnector.getProject().then(function(result) {
-      project = result;
-      return ServerConnector.getConfiguration();
-    }).then(function(configuration) {
-      exportObject = new NetworkExportPanel({
-        element : testDiv,
-        project : project,
-        configuration : configuration,
-      });
-      return exportObject.init();
-    }).then(function() {
-      $("input[name='ALL']", $(testDiv)).each(function(index, element) {
-        element.checked = true;
-      });
-      var element = $("[name='downloadButton']", $(testDiv))[0];
-      return element.onclick();
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var NetworkExportPanel = require('../../../../main/js/gui/export/NetworkExportPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('NetworkExportPanel', function () {
+
+  it('download file', function () {
+    var exportObject;
+    var project;
+    return ServerConnector.getProject().then(function (result) {
+      project = result;
+      return ServerConnector.getConfiguration();
+    }).then(function (configuration) {
+      exportObject = new NetworkExportPanel({
+        element: testDiv,
+        project: project,
+        configuration: configuration
+      });
+      return exportObject.init();
+    }).then(function () {
+      $("input[name='ALL']", $(testDiv)).each(function (index, element) {
+        element.checked = true;
+      });
+      var element = $("[name='downloadButton']", $(testDiv))[0];
+      assert.equal(0, logger.getWarnings().length);
+      return element.onclick();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/AbstractPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/AbstractPanel-test.js
index 51b82ca66f4c3a14f438c630e1d54df287a28af8..da4594bbe8ea2f47df94566bbec6cb457eb25442 100644
--- a/frontend-js/src/test/js/gui/leftPanel/AbstractPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/AbstractPanel-test.js
@@ -1,66 +1,66 @@
-"use strict";
-
-/* exported logger */
-
-require('../../mocha-config.js');
-
-var AbstractDbPanel = require('../../../../main/js/gui/leftPanel/AbstractDbPanel');
-var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
-var Target = require('../../../../main/js/map/data/Target');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('AbstractDbPanel', function() {
-
-  it('constructor', function() {
-    var div = document.createElement("div");
-
-    var map = helper.createCustomMap();
-    map.registerDbOverlay(helper.createSearchDbOverlay(map));
-
-    var panel = new AbstractDbPanel({
-      element : div,
-      customMap : map,
-      panelName : "search",
-    });
-
-    assert.ok(panel.getControlElement(PanelControlElementType.SEARCH_LABEL).innerHTML !== "");
-  });
-  describe('createTargetRow', function() {
-    it('target with elements', function() {
-      var div = document.createElement("div");
-      helper.setUrl("http://test/?id=complex_model_with_submaps");
-      var map;
-
-      return ServerConnector.getProject().then(function(project) {
-        map = helper.createCustomMap(project);
-        map.registerDbOverlay(helper.createSearchDbOverlay(map));
-
-        var panel = new AbstractDbPanel({
-          element : div,
-          customMap : map,
-          panelName : "search",
-        });
-
-        var target = new Target({
-          targetElements : [ {
-            id : 345337,
-            modelId : 16731,
-            type : "ALIAS"
-          }, {
-            id : 345338,
-            modelId : 16731,
-            type : "ALIAS"
-          } ],
-          references : [],
-          targetParticipants : [],
-        });
-        var htmlTag = panel.createTargetRow(target, "empty.png");
-        assert.ok(htmlTag);
-        assert.equal(1, $(".minerva-open-submap-button", $(htmlTag)).length);
-      });
-    });
-  });
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var AbstractDbPanel = require('../../../../main/js/gui/leftPanel/AbstractDbPanel');
+var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
+var ServerConnector = require('../../ServerConnector-mock');
+var Target = require('../../../../main/js/map/data/Target');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('AbstractDbPanel', function () {
+
+  it('constructor', function () {
+    var div = document.createElement("div");
+
+    var map = helper.createCustomMap();
+    map.registerDbOverlay(helper.createSearchDbOverlay(map));
+
+    var panel = new AbstractDbPanel({
+      element: div,
+      customMap: map,
+      panelName: "search"
+    });
+
+    assert.ok(panel.getControlElement(PanelControlElementType.SEARCH_LABEL).innerHTML !== "");
+    assert.equal(0, logger.getWarnings().length);
+  });
+  describe('createTargetRow', function () {
+    it('target with elements', function () {
+      var div = document.createElement("div");
+      helper.setUrl("http://test/?id=complex_model_with_submaps");
+      var map;
+
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        map.registerDbOverlay(helper.createSearchDbOverlay(map));
+
+        var panel = new AbstractDbPanel({
+          element: div,
+          customMap: map,
+          panelName: "search"
+        });
+
+        var target = new Target({
+          targetElements: [{
+            id: 345337,
+            modelId: 16731,
+            type: "ALIAS"
+          }, {
+            id: 345338,
+            modelId: 16731,
+            type: "ALIAS"
+          }],
+          references: [],
+          targetParticipants: []
+        });
+        var htmlTag = panel.createTargetRow(target, "empty.png");
+        assert.ok(htmlTag);
+        assert.equal(1, $(".minerva-open-submap-button", $(htmlTag)).length);
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/ChemicalPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/ChemicalPanel-test.js
index c3250263fa079838170c035e51c92ed44ddb6829..27610bcb8971bbfdab0a452b9675258b88fd94c1 100644
--- a/frontend-js/src/test/js/gui/leftPanel/ChemicalPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/ChemicalPanel-test.js
@@ -1,127 +1,128 @@
-"use strict";
-
-require('../../mocha-config');
-
-var Annotation = require('../../../../main/js/map/data/Annotation');
-var Chemical = require('../../../../main/js/map/data/Chemical');
-var ChemicalPanel = require('../../../../main/js/gui/leftPanel/ChemicalPanel');
-var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('ChemicalPanel', function () {
-  function createPanel(){
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createChemicalDbOverlay(map);
-
-    return new ChemicalPanel({
-      element: testDiv,
-      customMap: map
-    });
-  }
-
-  describe('constructor', function () {
-    it('default', function () {
-      var map = helper.createCustomMap();
-      helper.createChemicalDbOverlay(map);
-
-      var panel = new ChemicalPanel({
-        element: testDiv,
-        customMap: map
-      });
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(panel.isDisabled());
-    });
-    it('map with disease', function () {
-      return ServerConnector.getProject().then(function (project) {
-        project.setDisease(new Annotation({
-          link: "http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300",
-          type: "MESH_2012",
-          resource: "D010300",
-        }));
-
-        var map = helper.createCustomMap(project);
-        helper.createChemicalDbOverlay(map);
-
-        var panel = new ChemicalPanel({
-          element: testDiv,
-          customMap: map
-        });
-        assert.equal(logger.getWarnings().length, 0);
-        assert.notOk(panel.isDisabled());
-      });
-    });
-  });
-
-  describe('createPreamble', function () {
-    it('default', function () {
-      var map = helper.createCustomMap();
-      helper.createChemicalDbOverlay(map);
-
-      var panel = new ChemicalPanel({
-        element: testDiv,
-        customMap: map
-      });
-
-      assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
-    });
-
-    it('for empty', function () {
-      var map = helper.createCustomMap();
-      helper.createChemicalDbOverlay(map);
-
-      var panel = new ChemicalPanel({
-        element: testDiv,
-        customMap: map
-      });
-
-      assert.ok(panel.createPreamble(new Chemical()).innerHTML.indexOf("NOT FOUND") > 0);
-    });
-  });
-
-  it('on searchResults changed', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var chemicalDbOverlay = helper.createChemicalDbOverlay(map);
-
-    new ChemicalPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return chemicalDbOverlay.searchByQuery("rotenone").then(function () {
-      assert.equal(logger.getWarnings().length, 1);
-      assert.ok(testDiv.innerHTML.indexOf("marker/mechanism") >= 0);
-    });
-  });
-
-  it('searchByQuery', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createChemicalDbOverlay(map);
-
-    var panel = new ChemicalPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "rotenone";
-
-    return panel.searchByQuery().then(function () {
-      assert.equal(logger.getWarnings().length, 1);
-      assert.ok(testDiv.innerHTML.indexOf("Rotenone ") >= 0);
-    });
-  });
-
-  it("refreshSearchAutocomplete", function () {
-    var panel = createPanel();
-
-    return panel.refreshSearchAutocomplete("s").then(function (data) {
-      assert.ok(data);
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config');
+
+var Annotation = require('../../../../main/js/map/data/Annotation');
+var Chemical = require('../../../../main/js/map/data/Chemical');
+var ChemicalPanel = require('../../../../main/js/gui/leftPanel/ChemicalPanel');
+var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('ChemicalPanel', function () {
+  function createPanel(){
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createChemicalDbOverlay(map);
+
+    return new ChemicalPanel({
+      element: testDiv,
+      customMap: map
+    });
+  }
+
+  describe('constructor', function () {
+    it('default', function () {
+      var map = helper.createCustomMap();
+      helper.createChemicalDbOverlay(map);
+
+      var panel = new ChemicalPanel({
+        element: testDiv,
+        customMap: map
+      });
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(panel.isDisabled());
+    });
+    it('map with disease', function () {
+      return ServerConnector.getProject().then(function (project) {
+        project.setDisease(new Annotation({
+          link: "http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300",
+          type: "MESH_2012",
+          resource: "D010300"
+        }));
+
+        var map = helper.createCustomMap(project);
+        helper.createChemicalDbOverlay(map);
+
+        var panel = new ChemicalPanel({
+          element: testDiv,
+          customMap: map
+        });
+        assert.equal(logger.getWarnings().length, 0);
+        assert.notOk(panel.isDisabled());
+      });
+    });
+  });
+
+  describe('createPreamble', function () {
+    it('default', function () {
+      var map = helper.createCustomMap();
+      helper.createChemicalDbOverlay(map);
+
+      var panel = new ChemicalPanel({
+        element: testDiv,
+        customMap: map
+      });
+
+      assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
+    });
+
+    it('for empty', function () {
+      var map = helper.createCustomMap();
+      helper.createChemicalDbOverlay(map);
+
+      var panel = new ChemicalPanel({
+        element: testDiv,
+        customMap: map
+      });
+
+      assert.ok(panel.createPreamble(new Chemical()).innerHTML.indexOf("NOT FOUND") > 0);
+    });
+  });
+
+  it('on searchResults changed', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var chemicalDbOverlay = helper.createChemicalDbOverlay(map);
+
+    new ChemicalPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return chemicalDbOverlay.searchByQuery("rotenone").then(function () {
+      assert.equal(logger.getWarnings().length, 1);
+      assert.ok(testDiv.innerHTML.indexOf("marker/mechanism") >= 0);
+    });
+  });
+
+  it('searchByQuery', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createChemicalDbOverlay(map);
+
+    var panel = new ChemicalPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "rotenone";
+
+    return panel.searchByQuery().then(function () {
+      assert.equal(logger.getWarnings().length, 1);
+      assert.ok(testDiv.innerHTML.indexOf("Rotenone ") >= 0);
+    });
+  });
+
+  it("refreshSearchAutocomplete", function () {
+    var panel = createPanel();
+
+    return panel.refreshSearchAutocomplete("s").then(function (data) {
+      assert.ok(data);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/DrugPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/DrugPanel-test.js
index 546cc6342b555bf68e5e45c0558d66f8123ddb2a..713dd580537bb569f9a622340a749430c83b12ce 100644
--- a/frontend-js/src/test/js/gui/leftPanel/DrugPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/DrugPanel-test.js
@@ -1,96 +1,96 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var Drug = require('../../../../main/js/map/data/Drug');
-var DrugPanel = require('../../../../main/js/gui/leftPanel/DrugPanel');
-var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('DrugPanel', function () {
-
-  function createPanel() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createDrugDbOverlay(map);
-
-    return new DrugPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-  }
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-    helper.createDrugDbOverlay(map);
-
-    new DrugPanel({
-      element: testDiv,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('create DrugPanel', function () {
-    var map = helper.createCustomMap();
-    helper.createDrugDbOverlay(map);
-
-    var panel = new DrugPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
-  });
-
-  it('create DrugPanel for empty drug', function () {
-    var map = helper.createCustomMap();
-    helper.createDrugDbOverlay(map);
-
-    var panel = new DrugPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.ok(panel.createPreamble(new Drug()).innerHTML.indexOf("NOT FOUND") > 0);
-  });
-
-  it('on searchResults changed', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var drugDbOverlay = helper.createDrugDbOverlay(map);
-
-    new DrugPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return drugDbOverlay.searchByQuery("aspirin").then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("Acetylsalicylic acid") >= 0);
-    });
-  });
-
-  it('searchByQuery', function () {
-    var panel = createPanel();
-    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "aspirin";
-
-    return panel.searchByQuery().then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("Acetylsalicylic acid") >= 0);
-    });
-  });
-
-  it("refreshSearchAutocomplete", function () {
-    var panel = createPanel();
-
-    return panel.refreshSearchAutocomplete("s").then(function (data) {
-      assert.ok(data);
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var Drug = require('../../../../main/js/map/data/Drug');
+var DrugPanel = require('../../../../main/js/gui/leftPanel/DrugPanel');
+var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('DrugPanel', function () {
+
+  function createPanel() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createDrugDbOverlay(map);
+
+    return new DrugPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+  }
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+    helper.createDrugDbOverlay(map);
+
+    new DrugPanel({
+      element: testDiv,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('create DrugPanel', function () {
+    var map = helper.createCustomMap();
+    helper.createDrugDbOverlay(map);
+
+    var panel = new DrugPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
+  });
+
+  it('create DrugPanel for empty drug', function () {
+    var map = helper.createCustomMap();
+    helper.createDrugDbOverlay(map);
+
+    var panel = new DrugPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.ok(panel.createPreamble(new Drug()).innerHTML.indexOf("NOT FOUND") > 0);
+  });
+
+  it('on searchResults changed', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var drugDbOverlay = helper.createDrugDbOverlay(map);
+
+    new DrugPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return drugDbOverlay.searchByQuery("aspirin").then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("Acetylsalicylic acid") >= 0);
+    });
+  });
+
+  it('searchByQuery', function () {
+    var panel = createPanel();
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "aspirin";
+
+    return panel.searchByQuery().then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("Acetylsalicylic acid") >= 0);
+    });
+  });
+
+  it("refreshSearchAutocomplete", function () {
+    var panel = createPanel();
+
+    return panel.refreshSearchAutocomplete("s").then(function (data) {
+      assert.ok(data);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/GenericSearchPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/GenericSearchPanel-test.js
index d1ac00c2ab1e36bdb1499e988e00d24ea08e5722..fa757f58a7b69479a0c8ef5c9acda6a10c56bf19 100644
--- a/frontend-js/src/test/js/gui/leftPanel/GenericSearchPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/GenericSearchPanel-test.js
@@ -1,234 +1,234 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var Alias = require('../../../../main/js/map/data/Alias');
-var GenericSearchPanel = require('../../../../main/js/gui/leftPanel/GenericSearchPanel');
-var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('GenericSearchPanel', function () {
-  var createPanel = function() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDbOverlay = helper.createSearchDbOverlay(map);
-
-    return new GenericSearchPanel({
-      element: testDiv,
-      customMap: map
-    });
-  };
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-    helper.createSearchDbOverlay(map);
-
-    new GenericSearchPanel({
-      element: testDiv,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('on searchResults changed', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDbOverlay = helper.createSearchDbOverlay(map);
-
-    new GenericSearchPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    var searchParams = {
-      modelId: map.getModel().getId(),
-      coordinates: new google.maps.Point(457.51, 356.84),
-      zoom: 4
-    };
-
-    return searchDbOverlay.searchByCoordinates(searchParams).then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("Reaction") >= 0);
-    });
-  });
-
-  it('on searchResults changed 2', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDbOverlay = helper.createSearchDbOverlay(map);
-
-    new GenericSearchPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return searchDbOverlay.searchByQuery("s1", false).then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("s1") >= 0);
-    });
-  });
-
-  it('search by query with no results', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createSearchDbOverlay(map);
-
-    var panel = new GenericSearchPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "s1";
-
-    return panel.searchByQuery().then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("s1") >= 0);
-    });
-  });
-
-
-  describe('createReactionElement', function () {
-    it('type in desc', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var panel = new GenericSearchPanel({
-        element: testDiv,
-        customMap: map
-      });
-      var reaction = helper.createReaction(map);
-      var reactionType = "XX TYPE";
-      reaction.setType(reactionType);
-
-      assert.ok(panel.createReactionElement(reaction).innerHTML.indexOf(reactionType) >= 0);
-    });
-  });
-
-  describe('createAliasElement', function () {
-    it('default', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var aliasObj = {
-        symbol: "S1_SYMBOL",
-        formerSymbols: [],
-        modelId: map.getId(),
-        synonyms: ["syn44"],
-        description: "DESCRIPTION",
-        type: "Simple molecule",
-        abbreviation: "ABBREVIATION",
-        name: "s1",
-        bounds: {
-          x: 170.0,
-          y: 171.5,
-          width: 70.0,
-          height: 25.0
-        },
-        formula: "FORMULA",
-        id: 380217,
-        references: []
-      };
-      var alias = new Alias(aliasObj);
-
-
-      var panel = new GenericSearchPanel({
-        element: testDiv,
-        customMap: map
-      });
-
-      var aliasDiv = panel.createAliasElement(alias);
-      assert.ok(aliasDiv.innerHTML);
-    });
-
-
-    it('full name in desc', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var panel = new GenericSearchPanel({
-        element: testDiv,
-        customMap: map
-      });
-      var alias = helper.createAlias(map);
-
-      alias.setFullName("xxx");
-      assert.ok(panel.createAliasElement(alias).innerHTML.indexOf("Full name") >= 0);
-
-      alias.setFullName("");
-      assert.ok(panel.createAliasElement(alias).innerHTML.indexOf("Full name") === -1);
-    });
-  });
-
-  describe('clear', function () {
-    it('input text', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      new GenericSearchPanel({
-        element: testDiv,
-        customMap: map
-      });
-
-      $(".typeahead", testDiv)[0].value = "some input";
-      return map.clearDbOverlays().then(function () {
-        assert.equal("", $(":input", testDiv)[0].value);
-      });
-    });
-  });
-
-  describe("getAutocomplete", function () {
-    it("without initialization", function () {
-      var panel = createPanel();
-
-      var t = panel.getAutocomplete("s");
-      assert.ok(t);
-      assert.equal(t.length, 0);
-    });
-
-    it("after initialization", function () {
-      var panel = createPanel();
-
-      return panel.refreshSearchAutocomplete("s").then(function () {
-        var t = panel.getAutocomplete("s");
-        assert.ok(t);
-        assert.ok(t.length > 0);
-      });
-    });
-  });
-
-  describe("computeAutocompleteDictionary", function () {
-    it("using prefixes", function () {
-      var queries = ["text 1", "text 2", "text 3", "alphabet"];
-      var panel = createPanel();
-
-      var dictionary = panel.computeAutocompleteDictionary(queries);
-      assert.ok(dictionary);
-      assert.equal(dictionary["te"].length, 3);
-    });
-
-    it("using prefixes and inside", function () {
-      var queries = ["text 1", "text 2", "text 3", "alphabet", "unknown"];
-      var panel = createPanel();
-
-      var dictionary = panel.computeAutocompleteDictionary(queries);
-      assert.ok(dictionary);
-      assert.equal(dictionary["t"].length, 4);
-      assert.equal(dictionary["t"][0], "text 1");
-      assert.equal(dictionary["t"][3], "alphabet");
-    });
-
-    it("function names as query list", function () {
-      var queries = ["-pop", "some", "map"];
-      var panel = createPanel();
-
-      var dictionary = panel.computeAutocompleteDictionary(queries);
-      assert.ok(dictionary);
-      assert.equal(dictionary["p"].length, 2);
-    });
-
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var Alias = require('../../../../main/js/map/data/Alias');
+var GenericSearchPanel = require('../../../../main/js/gui/leftPanel/GenericSearchPanel');
+var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('GenericSearchPanel', function () {
+  var createPanel = function() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createSearchDbOverlay(map);
+
+    return new GenericSearchPanel({
+      element: testDiv,
+      customMap: map
+    });
+  };
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+    helper.createSearchDbOverlay(map);
+
+    new GenericSearchPanel({
+      element: testDiv,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('on searchResults changed', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDbOverlay = helper.createSearchDbOverlay(map);
+
+    new GenericSearchPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    var searchParams = {
+      modelId: map.getModel().getId(),
+      coordinates: new google.maps.Point(457.51, 356.84),
+      zoom: 4
+    };
+
+    return searchDbOverlay.searchByCoordinates(searchParams).then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("Reaction") >= 0);
+    });
+  });
+
+  it('on searchResults changed 2', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDbOverlay = helper.createSearchDbOverlay(map);
+
+    new GenericSearchPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return searchDbOverlay.searchByQuery("s1", false).then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("s1") >= 0);
+    });
+  });
+
+  it('search by query with no results', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createSearchDbOverlay(map);
+
+    var panel = new GenericSearchPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "s1";
+
+    return panel.searchByQuery().then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("s1") >= 0);
+    });
+  });
+
+
+  describe('createReactionElement', function () {
+    it('type in desc', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var panel = new GenericSearchPanel({
+        element: testDiv,
+        customMap: map
+      });
+      var reaction = helper.createReaction(map);
+      var reactionType = "XX TYPE";
+      reaction.setType(reactionType);
+
+      assert.ok(panel.createReactionElement(reaction).innerHTML.indexOf(reactionType) >= 0);
+    });
+  });
+
+  describe('createAliasElement', function () {
+    it('default', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var aliasObj = {
+        symbol: "S1_SYMBOL",
+        formerSymbols: [],
+        modelId: map.getId(),
+        synonyms: ["syn44"],
+        description: "DESCRIPTION",
+        type: "Simple molecule",
+        abbreviation: "ABBREVIATION",
+        name: "s1",
+        bounds: {
+          x: 170.0,
+          y: 171.5,
+          width: 70.0,
+          height: 25.0
+        },
+        formula: "FORMULA",
+        id: 380217,
+        references: []
+      };
+      var alias = new Alias(aliasObj);
+
+
+      var panel = new GenericSearchPanel({
+        element: testDiv,
+        customMap: map
+      });
+
+      var aliasDiv = panel.createAliasElement(alias);
+      assert.ok(aliasDiv.innerHTML);
+    });
+
+
+    it('full name in desc', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var panel = new GenericSearchPanel({
+        element: testDiv,
+        customMap: map
+      });
+      var alias = helper.createAlias(map);
+
+      alias.setFullName("xxx");
+      assert.ok(panel.createAliasElement(alias).innerHTML.indexOf("Full name") >= 0);
+
+      alias.setFullName("");
+      assert.ok(panel.createAliasElement(alias).innerHTML.indexOf("Full name") === -1);
+    });
+  });
+
+  describe('clear', function () {
+    it('input text', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      new GenericSearchPanel({
+        element: testDiv,
+        customMap: map
+      });
+
+      $(".typeahead", testDiv)[0].value = "some input";
+      return map.clearDbOverlays().then(function () {
+        assert.equal("", $(":input", testDiv)[0].value);
+      });
+    });
+  });
+
+  describe("getAutocomplete", function () {
+    it("without initialization", function () {
+      var panel = createPanel();
+
+      var t = panel.getAutocomplete("s");
+      assert.ok(t);
+      assert.equal(t.length, 0);
+    });
+
+    it("after initialization", function () {
+      var panel = createPanel();
+
+      return panel.refreshSearchAutocomplete("s").then(function () {
+        var t = panel.getAutocomplete("s");
+        assert.ok(t);
+        assert.ok(t.length > 0);
+      });
+    });
+  });
+
+  describe("computeAutocompleteDictionary", function () {
+    it("using prefixes", function () {
+      var queries = ["text 1", "text 2", "text 3", "alphabet"];
+      var panel = createPanel();
+
+      var dictionary = panel.computeAutocompleteDictionary(queries);
+      assert.ok(dictionary);
+      assert.equal(dictionary["te"].length, 3);
+    });
+
+    it("using prefixes and inside", function () {
+      var queries = ["text 1", "text 2", "text 3", "alphabet", "unknown"];
+      var panel = createPanel();
+
+      var dictionary = panel.computeAutocompleteDictionary(queries);
+      assert.ok(dictionary);
+      assert.equal(dictionary["t"].length, 4);
+      assert.equal(dictionary["t"][0], "text 1");
+      assert.equal(dictionary["t"][3], "alphabet");
+    });
+
+    it("function names as query list", function () {
+      var queries = ["-pop", "some", "map"];
+      var panel = createPanel();
+
+      var dictionary = panel.computeAutocompleteDictionary(queries);
+      assert.ok(dictionary);
+      assert.equal(dictionary["p"].length, 2);
+    });
+
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
index c31b71809fb86bbd19dd6824ef8d395dde69e267..0b8d3520736d54720a2643a36ed2324a1ec71d13 100644
--- a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
@@ -1,156 +1,156 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var Alias = require('../../../../main/js/map/data/Alias');
-var GuiUtils = require('../../../../main/js/gui/leftPanel/GuiUtils');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('GuiUtils', function () {
-
-  it('constructor', function() {
-    var map = helper.createCustomMap();
-    helper.createSearchDbOverlay(map);
-
-    new GuiUtils();
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('default', function () {
-    var aliasObj = {
-      symbol : "S1_SYMBOL",
-      formerSymbols : [],
-      modelId : 15781,
-      synonyms : [ "syn44" ],
-      description : "DESCRIPTION",
-      type : "Simple molecule",
-      abbreviation : "ABBREVIATION",
-      name : "s1",
-      bounds : {
-        x : 170.0,
-        y : 171.5,
-        width : 70.0,
-        height : 25.0
-      },
-      formula: "FORMULA",
-      id: 380217,
-      references: []
-    };
-    var alias = new Alias(aliasObj);
-
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createSearchDbOverlay(map);
-
-    var guiUtils = new GuiUtils();
-    guiUtils.setMap(map);
-
-    var aliasDiv = guiUtils.createAliasElement({
-      alias: alias
-    });
-    assert.ok(aliasDiv.innerHTML);
-  });
-
-  it('createLabelText for undefined', function () {
-    var map = helper.createCustomMap();
-
-    var guiUtils = new GuiUtils();
-    guiUtils.setMap(map);
-
-    var res = guiUtils.createLabelText();
-    assert.notOk(res.innerHTML);
-  });
-
-  it('createSubMapLink', function () {
-    var map = helper.createCustomMap();
-
-    var guiUtils = new GuiUtils();
-    guiUtils.setMap(map);
-
-    var res = guiUtils.createSubMapLink("TEST", map.getId());
-    assert.ok(res.innerHTML);
-  });
-
-  it('createPostTranslationalModifications', function () {
-    var alias = helper.createAlias();
-    alias.setOther({
-      "modifications": [{
-        "name": "S63",
-        "state": "PHOSPHORYLATED"
-      }, {
-        "name": "S73",
-        "state": "PHOSPHORYLATED"
-      }, {
-        "name": "",
-        "state": "PHOSPHORYLATED"
-      }, {
-        "name": null,
-        "state": "PHOSPHORYLATED"
-      }]
-    });
-    var utils = new GuiUtils(helper.getConfiguration());
-
-    var res = utils.createPostTranslationalModifications("label", alias.getOther("modifications"));
-    assert.ok(res.innerHTML);
-    assert.ok(res.innerHTML.indexOf("phosphorylated") >= 0);
-  });
-
-  describe('createReactionElement', function () {
-    it('type in desc', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var guiUtils = new GuiUtils();
-      guiUtils.setMap(map);
-
-      var reaction = helper.createReaction(map);
-      var reactionType = "XX TYPE";
-      reaction.setType(reactionType);
-
-      assert.ok(guiUtils.createReactionElement({
-        reaction: reaction
-      }).innerHTML.indexOf(reactionType) >= 0);
-    });
-  });
-
-  describe('createAliasElement', function () {
-    it('full name in desc', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var guiUtils = new GuiUtils();
-      guiUtils.setMap(map);
-      var alias = helper.createAlias(map);
-
-      alias.setFullName("xxx");
-      assert.ok(guiUtils.createAliasElement({
-        alias: alias
-      }).innerHTML.indexOf("Full name") >= 0);
-
-      alias.setFullName("");
-      assert.ok(guiUtils.createAliasElement({
-        alias: alias
-      }).innerHTML.indexOf("Full name") === -1);
-    });
-  });
-
-  describe('createLink', function () {
-    it('normal', function () {
-      var guiUtils = new GuiUtils();
-      var link = guiUtils.createLink("http://www.minerva.uni.lu", "PD map");
-      assert.ok(link);
-      assert.equal(0, logger.getWarnings().length);
-    });
-
-    it('with null link', function () {
-      var guiUtils = new GuiUtils();
-      var link = guiUtils.createLink(null, "PD map");
-      assert.ok(link);
-      assert.ok(logger.getWarnings().length > 0);
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var Alias = require('../../../../main/js/map/data/Alias');
+var GuiUtils = require('../../../../main/js/gui/leftPanel/GuiUtils');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('GuiUtils', function () {
+
+  it('constructor', function() {
+    var map = helper.createCustomMap();
+    helper.createSearchDbOverlay(map);
+
+    new GuiUtils();
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('default', function () {
+    var aliasObj = {
+      symbol : "S1_SYMBOL",
+      formerSymbols : [],
+      modelId : 15781,
+      synonyms : [ "syn44" ],
+      description : "DESCRIPTION",
+      type : "Simple molecule",
+      abbreviation : "ABBREVIATION",
+      name : "s1",
+      bounds : {
+        x : 170.0,
+        y : 171.5,
+        width : 70.0,
+        height : 25.0
+      },
+      formula: "FORMULA",
+      id: 380217,
+      references: []
+    };
+    var alias = new Alias(aliasObj);
+
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createSearchDbOverlay(map);
+
+    var guiUtils = new GuiUtils();
+    guiUtils.setMap(map);
+
+    var aliasDiv = guiUtils.createAliasElement({
+      alias: alias
+    });
+    assert.ok(aliasDiv.innerHTML);
+  });
+
+  it('createLabelText for undefined', function () {
+    var map = helper.createCustomMap();
+
+    var guiUtils = new GuiUtils();
+    guiUtils.setMap(map);
+
+    var res = guiUtils.createLabelText();
+    assert.notOk(res.innerHTML);
+  });
+
+  it('createSubMapLink', function () {
+    var map = helper.createCustomMap();
+
+    var guiUtils = new GuiUtils();
+    guiUtils.setMap(map);
+
+    var res = guiUtils.createSubMapLink("TEST", map.getId());
+    assert.ok(res.innerHTML);
+  });
+
+  it('createPostTranslationalModifications', function () {
+    var alias = helper.createAlias();
+    alias.setOther({
+      "modifications": [{
+        "name": "S63",
+        "state": "PHOSPHORYLATED"
+      }, {
+        "name": "S73",
+        "state": "PHOSPHORYLATED"
+      }, {
+        "name": "",
+        "state": "PHOSPHORYLATED"
+      }, {
+        "name": null,
+        "state": "PHOSPHORYLATED"
+      }]
+    });
+    var utils = new GuiUtils(helper.getConfiguration());
+
+    var res = utils.createPostTranslationalModifications("label", alias.getOther("modifications"));
+    assert.ok(res.innerHTML);
+    assert.ok(res.innerHTML.indexOf("phosphorylated") >= 0);
+  });
+
+  describe('createReactionElement', function () {
+    it('type in desc', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var guiUtils = new GuiUtils();
+      guiUtils.setMap(map);
+
+      var reaction = helper.createReaction(map);
+      var reactionType = "XX TYPE";
+      reaction.setType(reactionType);
+
+      assert.ok(guiUtils.createReactionElement({
+        reaction: reaction
+      }).innerHTML.indexOf(reactionType) >= 0);
+    });
+  });
+
+  describe('createAliasElement', function () {
+    it('full name in desc', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var guiUtils = new GuiUtils();
+      guiUtils.setMap(map);
+      var alias = helper.createAlias(map);
+
+      alias.setFullName("xxx");
+      assert.ok(guiUtils.createAliasElement({
+        alias: alias
+      }).innerHTML.indexOf("Full name") >= 0);
+
+      alias.setFullName("");
+      assert.ok(guiUtils.createAliasElement({
+        alias: alias
+      }).innerHTML.indexOf("Full name") === -1);
+    });
+  });
+
+  describe('createLink', function () {
+    it('normal', function () {
+      var guiUtils = new GuiUtils();
+      var link = guiUtils.createLink("http://www.minerva.uni.lu", "PD map");
+      assert.ok(link);
+      assert.equal(0, logger.getWarnings().length);
+    });
+
+    it('with null link', function () {
+      var guiUtils = new GuiUtils();
+      var link = guiUtils.createLink(null, "PD map");
+      assert.ok(link);
+      assert.ok(logger.getWarnings().length > 0);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js
index a1157cfb8acfefab4d562d4732f5c12181daaf85..49e5d1811c9f9126f641863e9885e4512b86c2e2 100644
--- a/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js
@@ -1,160 +1,159 @@
-"use strict";
-
-/* exported logger */
-
-require('../../mocha-config.js');
-
-var LeftPanel = require('../../../../main/js/gui/leftPanel/LeftPanel');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('LeftPanel', function () {
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-    helper.createSearchDbOverlay(map);
-    helper.createDrugDbOverlay(map);
-    helper.createChemicalDbOverlay(map);
-    helper.createMiRnaDbOverlay(map);
-
-    var panel = new LeftPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-
-    return panel.destroy();
-  });
-
-  describe('prepareElementDetailsContent', function () {
-    it('for element', function () {
-      var map;
-      var panel;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-
-        helper.createSearchDbOverlay(map);
-        helper.createDrugDbOverlay(map);
-        helper.createChemicalDbOverlay(map);
-        helper.createMiRnaDbOverlay(map);
-
-        panel = new LeftPanel({
-          element: testDiv,
-          customMap: map
-        });
-
-        var element = new IdentifiedElement({
-          id: 329163,
-          type: "ALIAS",
-          modelId: map.getId()
-        });
-        return map.getModel().getByIdentifiedElement(element, true);
-      }).then(function (alias) {
-        var div = panel.prepareElementDetailsContent(alias);
-        assert.ok(div);
-        return panel.destroy();
-      });
-    });
-    it('for point', function () {
-      var map;
-      var panel;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-
-        helper.createSearchDbOverlay(map);
-        helper.createDrugDbOverlay(map);
-        helper.createChemicalDbOverlay(map);
-        helper.createMiRnaDbOverlay(map);
-
-        panel = new LeftPanel({
-          element: testDiv,
-          customMap: map
-        });
-
-        var element = new IdentifiedElement({
-          id: "(1.00,2.00)",
-          type: "POINT",
-          modelId: map.getId()
-        });
-        return map.getModel().getByIdentifiedElement(element, true);
-      }).then(function (point) {
-        var div = panel.prepareElementDetailsContent(point);
-        assert.ok(div);
-        return panel.destroy();
-      });
-    });
-  });
-
-  describe('showElementDetails', function () {
-    it('default', function () {
-      var map;
-      var panel;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-
-        helper.createSearchDbOverlay(map);
-        helper.createDrugDbOverlay(map);
-        helper.createChemicalDbOverlay(map);
-        helper.createMiRnaDbOverlay(map);
-
-        panel = new LeftPanel({
-          element: testDiv,
-          customMap: map
-        });
-
-        return panel.init();
-      }).then(function () {
-
-        var element = new IdentifiedElement({
-          id: 329163,
-          type: "ALIAS",
-          modelId: map.getId()
-        });
-        return map.getModel().getByIdentifiedElement(element, true);
-      }).then(function (alias) {
-        return panel.showElementDetails(alias);
-      }).then(function () {
-        assert.notOk($(panel.elementInfoDiv).dialog('isOpen'));
-        return panel.destroy();
-      });
-    });
-
-    it('when panel is hidden', function () {
-      var map;
-      var panel;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-
-        helper.createSearchDbOverlay(map);
-        helper.createDrugDbOverlay(map);
-        helper.createChemicalDbOverlay(map);
-        helper.createMiRnaDbOverlay(map);
-
-        panel = new LeftPanel({
-          element: testDiv,
-          customMap: map
-        });
-        return panel.init();
-      }).then(function () {
-        panel.hide();
-
-        var element = new IdentifiedElement({
-          id: 329163,
-          type: "ALIAS",
-          modelId: map.getId()
-        });
-        return map.getModel().getByIdentifiedElement(element, true);
-      }).then(function (alias) {
-        return panel.showElementDetails(alias);
-      }).then(function () {
-        assert.notOk($(panel.elementInfoDiv).dialog('isOpen'));
-        return panel.destroy();
-      });
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var LeftPanel = require('../../../../main/js/gui/leftPanel/LeftPanel');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('LeftPanel', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+    helper.createSearchDbOverlay(map);
+    helper.createDrugDbOverlay(map);
+    helper.createChemicalDbOverlay(map);
+    helper.createMiRnaDbOverlay(map);
+
+    var panel = new LeftPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+
+    return panel.destroy();
+  });
+
+  describe('prepareElementDetailsContent', function () {
+    it('for element', function () {
+      var map;
+      var panel;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+
+        helper.createSearchDbOverlay(map);
+        helper.createDrugDbOverlay(map);
+        helper.createChemicalDbOverlay(map);
+        helper.createMiRnaDbOverlay(map);
+
+        panel = new LeftPanel({
+          element: testDiv,
+          customMap: map
+        });
+
+        var element = new IdentifiedElement({
+          id: 329163,
+          type: "ALIAS",
+          modelId: map.getId()
+        });
+        return map.getModel().getByIdentifiedElement(element, true);
+      }).then(function (alias) {
+        var div = panel.prepareElementDetailsContent(alias);
+        assert.ok(div);
+        return panel.destroy();
+      });
+    });
+    it('for point', function () {
+      var map;
+      var panel;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+
+        helper.createSearchDbOverlay(map);
+        helper.createDrugDbOverlay(map);
+        helper.createChemicalDbOverlay(map);
+        helper.createMiRnaDbOverlay(map);
+
+        panel = new LeftPanel({
+          element: testDiv,
+          customMap: map
+        });
+
+        var element = new IdentifiedElement({
+          id: "(1.00,2.00)",
+          type: "POINT",
+          modelId: map.getId()
+        });
+        return map.getModel().getByIdentifiedElement(element, true);
+      }).then(function (point) {
+        var div = panel.prepareElementDetailsContent(point);
+        assert.ok(div);
+        return panel.destroy();
+      });
+    });
+  });
+
+  describe('showElementDetails', function () {
+    it('default', function () {
+      var map;
+      var panel;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+
+        helper.createSearchDbOverlay(map);
+        helper.createDrugDbOverlay(map);
+        helper.createChemicalDbOverlay(map);
+        helper.createMiRnaDbOverlay(map);
+
+        panel = new LeftPanel({
+          element: testDiv,
+          customMap: map
+        });
+
+        return panel.init();
+      }).then(function () {
+
+        var element = new IdentifiedElement({
+          id: 329163,
+          type: "ALIAS",
+          modelId: map.getId()
+        });
+        return map.getModel().getByIdentifiedElement(element, true);
+      }).then(function (alias) {
+        return panel.showElementDetails(alias);
+      }).then(function () {
+        assert.notOk($(panel.elementInfoDiv).dialog('isOpen'));
+        return panel.destroy();
+      });
+    });
+
+    it('when panel is hidden', function () {
+      var map;
+      var panel;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+
+        helper.createSearchDbOverlay(map);
+        helper.createDrugDbOverlay(map);
+        helper.createChemicalDbOverlay(map);
+        helper.createMiRnaDbOverlay(map);
+
+        panel = new LeftPanel({
+          element: testDiv,
+          customMap: map
+        });
+        return panel.init();
+      }).then(function () {
+        panel.hide();
+
+        var element = new IdentifiedElement({
+          id: 329163,
+          type: "ALIAS",
+          modelId: map.getId()
+        });
+        return map.getModel().getByIdentifiedElement(element, true);
+      }).then(function (alias) {
+        return panel.showElementDetails(alias);
+      }).then(function () {
+        assert.notOk($(panel.elementInfoDiv).dialog('isOpen'));
+        return panel.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/MiRnaPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/MiRnaPanel-test.js
index c930db68d6c76ecb7872b12e94459a6b1e1f2787..a67a2d3dbf559be7372821c87b6fff1cdbaee94c 100644
--- a/frontend-js/src/test/js/gui/leftPanel/MiRnaPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/MiRnaPanel-test.js
@@ -1,96 +1,96 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var MiRna = require('../../../../main/js/map/data/MiRna');
-var MiRnaPanel = require('../../../../main/js/gui/leftPanel/MiRnaPanel');
-var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('MiRnaPanel', function () {
-  function createPanel() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    helper.createMiRnaDbOverlay(map);
-
-    return new MiRnaPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-  }
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-    helper.createMiRnaDbOverlay(map);
-
-    new MiRnaPanel({
-      element: testDiv,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('create MiRnaPanel for empty', function () {
-    var map = helper.createCustomMap();
-    helper.createMiRnaDbOverlay(map);
-
-    var panel = new MiRnaPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
-  });
-
-  it('create MiRnaPanel for empty MiRna', function () {
-    var map = helper.createCustomMap();
-    helper.createMiRnaDbOverlay(map);
-
-    var panel = new MiRnaPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.ok(panel.createPreamble(new MiRna()).innerHTML.indexOf("NOT FOUND") > 0);
-  });
-
-  it('on searchResults changed', function () {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var miRnaDbOverlay = helper.createMiRnaDbOverlay(map);
-
-    new MiRnaPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return miRnaDbOverlay.searchByQuery("hsa-miR-125a-3p").then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("hsa-miR-125a-3p") >= 0);
-    });
-  });
-
-  it('searchByQuery', function () {
-    var panel = createPanel();
-
-    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "hsa-miR-125a-3p";
-
-    return panel.searchByQuery().then(function () {
-      assert.equal(logger.getWarnings().length, 0);
-      assert.ok(testDiv.innerHTML.indexOf("http://www.mirbase.org/cgi-bin/mirna_entry.pl?acc") >= 0);
-    });
-  });
-
-  it("refreshSearchAutocomplete", function () {
-    var panel = createPanel();
-
-    return panel.refreshSearchAutocomplete("s").then(function (data) {
-      assert.ok(data);
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var MiRna = require('../../../../main/js/map/data/MiRna');
+var MiRnaPanel = require('../../../../main/js/gui/leftPanel/MiRnaPanel');
+var PanelControlElementType = require('../../../../main/js/gui/PanelControlElementType');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('MiRnaPanel', function () {
+  function createPanel() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    helper.createMiRnaDbOverlay(map);
+
+    return new MiRnaPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+  }
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+    helper.createMiRnaDbOverlay(map);
+
+    new MiRnaPanel({
+      element: testDiv,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('create MiRnaPanel for empty', function () {
+    var map = helper.createCustomMap();
+    helper.createMiRnaDbOverlay(map);
+
+    var panel = new MiRnaPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.ok(panel.createPreamble().innerHTML.indexOf("NOT FOUND") > 0);
+  });
+
+  it('create MiRnaPanel for empty MiRna', function () {
+    var map = helper.createCustomMap();
+    helper.createMiRnaDbOverlay(map);
+
+    var panel = new MiRnaPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.ok(panel.createPreamble(new MiRna()).innerHTML.indexOf("NOT FOUND") > 0);
+  });
+
+  it('on searchResults changed', function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var miRnaDbOverlay = helper.createMiRnaDbOverlay(map);
+
+    new MiRnaPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return miRnaDbOverlay.searchByQuery("hsa-miR-125a-3p").then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("hsa-miR-125a-3p") >= 0);
+    });
+  });
+
+  it('searchByQuery', function () {
+    var panel = createPanel();
+
+    panel.getControlElement(PanelControlElementType.SEARCH_INPUT).value = "hsa-miR-125a-3p";
+
+    return panel.searchByQuery().then(function () {
+      assert.equal(logger.getWarnings().length, 0);
+      assert.ok(testDiv.innerHTML.indexOf("http://www.mirbase.org/cgi-bin/mirna_entry.pl?acc") >= 0);
+    });
+  });
+
+  it("refreshSearchAutocomplete", function () {
+    var panel = createPanel();
+
+    return panel.refreshSearchAutocomplete("s").then(function (data) {
+      assert.ok(data);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js
index b6faaa7c7aa0fe615aeac69b9e20b88ab10a5929..780cfe10c2fafc31c2097e979532e46d9982f8a9 100644
--- a/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js
@@ -1,108 +1,108 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var OverlayPanel = require('../../../../main/js/gui/leftPanel/OverlayPanel');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('OverlayPanel', function () {
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-
-    new OverlayPanel({
-      element: testDiv,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it('refresh', function () {
-    var map = helper.createCustomMap();
-
-    var panel = new OverlayPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return panel.refresh().then(function () {
-      assert.ok(panel.getElement().innerHTML.indexOf("testLayout") >= 0);
-      assert.ok(panel.getElement().innerHTML.indexOf("YOU ARE NOT LOGGED") >= 0);
-    });
-  });
-
-  it('createRow', function () {
-    var map = helper.createCustomMap();
-
-    var overlay = helper.createLayout();
-    overlay.setInputDataAvailable(true);
-    overlay.setCreator("me");
-    map.getModel().addLayout(overlay);
-
-    var panel = new OverlayPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    var row = panel.createOverlayRow(overlay);
-    assert.ok(row);
-
-    var buttons = row.getElementsByTagName("button");
-    var openButton = null;
-    for (var i = 0; i < buttons.length; i++) {
-      var name = buttons[i].getAttribute("name");
-      if (name !== undefined && name.indexOf("editButton") >= 0) {
-        openButton = buttons[i];
-      }
-    }
-    assert.ok(openButton);
-    openButton.onclick();
-    return panel.destroy();
-  });
-  it('download', function () {
-    var map = helper.createCustomMap();
-
-    var overlay = helper.createLayout();
-    overlay.setInputDataAvailable(true);
-    map.getModel().addLayout(overlay);
-
-    var panel = new OverlayPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return panel.refresh().then(function () {
-      var buttons = panel.getElement().getElementsByTagName("button");
-      var downloadButton;
-      for (var i = 0; i < buttons.length; i++) {
-        var name = buttons[i].getAttribute("name");
-        if (name !== undefined && name !== null && name.indexOf("download-overlay") >= 0) {
-          downloadButton = buttons[i];
-        }
-      }
-      assert.ok(downloadButton);
-      assert.notOk(panel.getLastDownloadUrl());
-      return downloadButton.onclick();
-    }).then(function () {
-      assert.ok(panel.getLastDownloadUrl());
-    });
-  });
-
-  it('openAddOverlayDialog', function () {
-    var map = helper.createCustomMap();
-
-    var panel = new OverlayPanel({
-      element: testDiv,
-      customMap: map
-    });
-
-    return panel.openAddOverlayDialog().then(function () {
-      return panel.destroy();
-    });
-  });
-
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var OverlayPanel = require('../../../../main/js/gui/leftPanel/OverlayPanel');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('OverlayPanel', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    new OverlayPanel({
+      element: testDiv,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it('refresh', function () {
+    var map = helper.createCustomMap();
+
+    var panel = new OverlayPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return panel.refresh().then(function () {
+      assert.ok(panel.getElement().innerHTML.indexOf("testLayout") >= 0);
+      assert.ok(panel.getElement().innerHTML.indexOf("YOU ARE NOT LOGGED") >= 0);
+    });
+  });
+
+  it('createRow', function () {
+    var map = helper.createCustomMap();
+
+    var overlay = helper.createLayout();
+    overlay.setInputDataAvailable(true);
+    overlay.setCreator("me");
+    map.getModel().addLayout(overlay);
+
+    var panel = new OverlayPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    var row = panel.createOverlayRow(overlay);
+    assert.ok(row);
+
+    var buttons = row.getElementsByTagName("button");
+    var openButton = null;
+    for (var i = 0; i < buttons.length; i++) {
+      var name = buttons[i].getAttribute("name");
+      if (name !== undefined && name.indexOf("editButton") >= 0) {
+        openButton = buttons[i];
+      }
+    }
+    assert.ok(openButton);
+    openButton.onclick();
+    return panel.destroy();
+  });
+  it('download', function () {
+    var map = helper.createCustomMap();
+
+    var overlay = helper.createLayout();
+    overlay.setInputDataAvailable(true);
+    map.getModel().addLayout(overlay);
+
+    var panel = new OverlayPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return panel.refresh().then(function () {
+      var buttons = panel.getElement().getElementsByTagName("button");
+      var downloadButton;
+      for (var i = 0; i < buttons.length; i++) {
+        var name = buttons[i].getAttribute("name");
+        if (name !== undefined && name !== null && name.indexOf("download-overlay") >= 0) {
+          downloadButton = buttons[i];
+        }
+      }
+      assert.ok(downloadButton);
+      assert.notOk(panel.getLastDownloadUrl());
+      return downloadButton.onclick();
+    }).then(function () {
+      assert.ok(panel.getLastDownloadUrl());
+    });
+  });
+
+  it('openAddOverlayDialog', function () {
+    var map = helper.createCustomMap();
+
+    var panel = new OverlayPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    return panel.openAddOverlayDialog().then(function () {
+      return panel.destroy();
+    });
+  });
+
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js
index a8257cf7e4291d74d7d3eec82d91d0244d827069..444ca6c6e8c710b9c6634bc02249d2028aa08b78 100644
--- a/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js
@@ -1,86 +1,87 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var ProjectInfoPanel = require('../../../../main/js/gui/leftPanel/ProjectInfoPanel');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('ProjectInfoPanel', function () {
-
-    it('constructor', function () {
-        var div = testDiv;
-
-        var map = helper.createCustomMap();
-
-        var panel = new ProjectInfoPanel({
-            element: div,
-            customMap: map
-        });
-        assert.equal(logger.getWarnings().length, 0);
-        panel.destroy();
-    });
-
-    it('refresh', function () {
-        var div = testDiv;
-        var panel = new ProjectInfoPanel({
-            element: div,
-            customMap: helper.createCustomMap(),
-        });
-        return panel.refresh().then(function () {
-            assert.ok(div.innerHTML.indexOf("UNKNOWN DISEASE MAP") >= 0);
-            return panel.destroy();
-        });
-    });
-
-    it('download source', function () {
-        var div = testDiv;
-        var panel = new ProjectInfoPanel({
-            element: div,
-            customMap: helper.createCustomMap(),
-        });
-        return panel.downloadSourceFile().then(function () {
-            return panel.destroy();
-        });
-    });
-
-    it('open manual', function () {
-        var div = testDiv;
-        var panel = new ProjectInfoPanel({
-            element: div,
-            customMap: helper.createCustomMap(),
-        });
-        return $("[name='manualLink']", $(div))[0].onclick().then(function () {
-            return panel.destroy();
-        });
-    });
-
-    it('show publication list', function () {
-        var panel;
-        return ServerConnector.getProject().then(function (project) {
-            panel = new ProjectInfoPanel({
-                element: testDiv,
-                customMap: helper.createCustomMap(project),
-            });
-            return panel.showPublicationListDialog();
-        }).then(function () {
-            return panel.destroy();
-        });
-    });
-
-    it('show profile', function () {
-        var map = helper.createCustomMap();
-
-        var panel = new ProjectInfoPanel({
-            element: testDiv,
-            customMap: map
-        });
-
-        var user = helper.createUser();
-        panel.showUserProfilePage(user);
-        panel.destroy();
-    });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var ProjectInfoPanel = require('../../../../main/js/gui/leftPanel/ProjectInfoPanel');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('ProjectInfoPanel', function () {
+
+  it('constructor', function () {
+    var div = testDiv;
+
+    var map = helper.createCustomMap();
+
+    var panel = new ProjectInfoPanel({
+      element: div,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+    panel.destroy();
+  });
+
+  it('refresh', function () {
+    var div = testDiv;
+    var panel = new ProjectInfoPanel({
+      element: div,
+      customMap: helper.createCustomMap()
+    });
+    return panel.refresh().then(function () {
+      assert.ok(div.innerHTML.indexOf("UNKNOWN DISEASE MAP") >= 0);
+      return panel.destroy();
+    });
+  });
+
+  it('download source', function () {
+    var div = testDiv;
+    var panel = new ProjectInfoPanel({
+      element: div,
+      customMap: helper.createCustomMap()
+    });
+    return panel.downloadSourceFile().then(function () {
+      return panel.destroy();
+    });
+  });
+
+  it('open manual', function () {
+    var div = testDiv;
+    var panel = new ProjectInfoPanel({
+      element: div,
+      customMap: helper.createCustomMap()
+    });
+    return $("[name='manualLink']", $(div))[0].onclick().then(function () {
+      return panel.destroy();
+    });
+  });
+
+  it('show publication list', function () {
+    var panel;
+    return ServerConnector.getProject().then(function (project) {
+      panel = new ProjectInfoPanel({
+        element: testDiv,
+        customMap: helper.createCustomMap(project)
+      });
+      return panel.showPublicationListDialog();
+    }).then(function () {
+      return panel.destroy();
+    });
+  });
+
+  it('show profile', function () {
+    var map = helper.createCustomMap();
+
+    var panel = new ProjectInfoPanel({
+      element: testDiv,
+      customMap: map
+    });
+
+    var user = helper.createUser();
+    panel.showUserProfilePage(user);
+    panel.destroy();
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/PublicationListDialog-test.js b/frontend-js/src/test/js/gui/leftPanel/PublicationListDialog-test.js
index dc9d95fd5ce1e42c52531699f340fe871724302f..e970c7b7f0064e039cbb703fb6d163dacca262b1 100644
--- a/frontend-js/src/test/js/gui/leftPanel/PublicationListDialog-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/PublicationListDialog-test.js
@@ -1,50 +1,51 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var PublicationListDialog = require('../../../../main/js/gui/leftPanel/PublicationListDialog');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('PublicationListDialog', function () {
-
-  it('constructor', function () {
-    var div = testDiv;
-
-    var map = helper.createCustomMap();
-
-    var dialog = new PublicationListDialog({
-      element: div,
-      customMap: map
-    });
-    assert.equal(logger.getWarnings().length, 0);
-
-    dialog.destroy();
-  });
-
-  it('_dataTableAjaxCall', function () {
-    var dialog;
-    var callbackCalled = false;
-    return ServerConnector.getProject().then(function (project) {
-      dialog = new PublicationListDialog({
-        element: testDiv,
-        customMap: helper.createCustomMap(project),
-      });
-      return dialog._dataTableAjaxCall({
-        start: 0,
-        length: 10,
-        order: [{column: 0, dir: 'asc'}],
-        search: {value: '', regex: false}
-      }, function () {
-        callbackCalled = true;
-      });
-    }).then(function () {
-      assert.ok(callbackCalled);
-    }).finally(function () {
-      dialog.destroy();
-    });
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var PublicationListDialog = require('../../../../main/js/gui/leftPanel/PublicationListDialog');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('PublicationListDialog', function () {
+
+  it('constructor', function () {
+    var div = testDiv;
+
+    var map = helper.createCustomMap();
+
+    var dialog = new PublicationListDialog({
+      element: div,
+      customMap: map
+    });
+    assert.equal(logger.getWarnings().length, 0);
+
+    dialog.destroy();
+  });
+
+  it('_dataTableAjaxCall', function () {
+    var dialog;
+    var callbackCalled = false;
+    return ServerConnector.getProject().then(function (project) {
+      dialog = new PublicationListDialog({
+        element: testDiv,
+        customMap: helper.createCustomMap(project)
+      });
+      return dialog._dataTableAjaxCall({
+        start: 0,
+        length: 10,
+        order: [{column: 0, dir: 'asc'}],
+        search: {value: '', regex: false}
+      }, function () {
+        callbackCalled = true;
+      });
+    }).then(function () {
+      assert.ok(callbackCalled);
+    }).finally(function () {
+      dialog.destroy();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/leftPanel/SubmapPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/SubmapPanel-test.js
index ce0bddc904e7c91896c4c3729169e7fb2d8184ab..c2f34d7c1147f49e08deada88192c9eaffd76a1d 100644
--- a/frontend-js/src/test/js/gui/leftPanel/SubmapPanel-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/SubmapPanel-test.js
@@ -1,32 +1,32 @@
-"use strict";
-
-require('../../mocha-config.js');
-
-var SubmapPanel = require('../../../../main/js/gui/leftPanel/SubmapPanel');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('SubmapPanel', function() {
-
-  it('constructor', function() {
-    var div = document.createElement("div");
-
-    var map = helper.createCustomMap();
-
-    new SubmapPanel({
-      element : div,
-      customMap : map,
-      parent : {
-        getMap : function() {
-          return map;
-        }
-      }
-    });
-    assert.equal(logger.getWarnings().length, 0);
-    var buttons = div.getElementsByTagName("button");
-    assert.equal(buttons.length, 1);
-  });
-
-});
+"use strict";
+
+require('../../mocha-config.js');
+
+var SubmapPanel = require('../../../../main/js/gui/leftPanel/SubmapPanel');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('SubmapPanel', function() {
+
+  it('constructor', function() {
+    var div = document.createElement("div");
+
+    var map = helper.createCustomMap();
+
+    new SubmapPanel({
+      element : div,
+      customMap : map,
+      parent : {
+        getMap : function() {
+          return map;
+        }
+      }
+    });
+    assert.equal(logger.getWarnings().length, 0);
+    var buttons = div.getElementsByTagName("button");
+    assert.equal(buttons.length, 1);
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
index 65831942a8c30833c472234af814947229b8a566..a09060318b5b5c00e21ce577d4d1e0092ad4b9c6 100644
--- a/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
+++ b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js
@@ -1,58 +1,58 @@
-"use strict";
-
-/* exported logger */
-
-require('../../mocha-config.js');
-
-var Legend = require('../../../../main/js/gui/Legend');
-var TopMenu = require('../../../../main/js/gui/topMenu/TopMenu');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('TopMenu', function () {
-
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-
-    new TopMenu({
-      element: testDiv,
-      customMap: map
-    });
-
-    assert.equal(logger.getWarnings().length, 0);
-
-  });
-
-  it('init', function () {
-    var map = helper.createCustomMap();
-
-    var topMenu = new TopMenu({
-      element: testDiv,
-      customMap: map
-    });
-
-    return topMenu.init();
-
-  });
-
-  it('toggleLegend', function () {
-    var map = helper.createCustomMap();
-
-    var topMenu = new TopMenu({
-      element: testDiv,
-      customMap: map
-    });
-    var legend = new Legend({element: document.createElement("div"), customMap: map});
-    topMenu.setLegend(legend);
-    return topMenu.init().then(function () {
-      $("input", testDiv).prop('checked', true);
-      return topMenu.toggleLegend();
-    }).then(function () {
-      $("input", testDiv).prop('checked', false);
-      return topMenu.toggleLegend();
-    });
-  });
-
-});
+"use strict";
+
+/* exported logger */
+
+require('../../mocha-config.js');
+
+var Legend = require('../../../../main/js/gui/Legend');
+var TopMenu = require('../../../../main/js/gui/topMenu/TopMenu');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('TopMenu', function () {
+
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+
+    new TopMenu({
+      element: testDiv,
+      customMap: map
+    });
+
+    assert.equal(logger.getWarnings().length, 0);
+
+  });
+
+  it('init', function () {
+    var map = helper.createCustomMap();
+
+    var topMenu = new TopMenu({
+      element: testDiv,
+      customMap: map
+    });
+
+    return topMenu.init();
+
+  });
+
+  it('toggleLegend', function () {
+    var map = helper.createCustomMap();
+
+    var topMenu = new TopMenu({
+      element: testDiv,
+      customMap: map
+    });
+    var legend = new Legend({element: document.createElement("div"), customMap: map});
+    topMenu.setLegend(legend);
+    return topMenu.init().then(function () {
+      $("input", testDiv).prop('checked', true);
+      return topMenu.toggleLegend();
+    }).then(function () {
+      $("input", testDiv).prop('checked', false);
+      return topMenu.toggleLegend();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/logger.js b/frontend-js/src/test/js/logger.js
index 16d8ec5eb303cffab9a651d2c5acdd907a7fc002..7b094496d7202066767d66b6d01ad6958ef4a9ac 100644
--- a/frontend-js/src/test/js/logger.js
+++ b/frontend-js/src/test/js/logger.js
@@ -1,61 +1,61 @@
-"use strict";
-
-var log4js = require('log4js');
-
-var $depth = 10;
-
-log4js.configure({
-  appenders : [ {
-    type : "console",
-    layout : {
-      type : "pattern",
-      pattern : "%[%p {%x{ln}} -%]\t%m",
-      tokens : {
-        ln : function() {
-          // The caller:
-          var filePath = (new Error()).stack.split("\n")[$depth].split("\\");
-          filePath = filePath[filePath.length - 1].split("/");
-          return filePath[filePath.length - 1];
-        }
-      }
-    }
-  } ]
-});
-var appender = require('log4js-memory-appender');
-
-var memAppender = appender({
-  maxBufferSize : 1000
-});
-
-log4js.loadAppender('memory', memAppender);
-log4js.addAppender(log4js.appenders.memory());
-
-var logger = log4js.getLogger();
-logger.getEvents = function() {
-  return memAppender.getBuffer();
-};
-logger.getErrors = function() {
-  var result = [];
-  for (var i = 0; i < memAppender.getBuffer().length; i++) {
-    var message = memAppender.getBuffer()[i];
-    if (message.indexOf("[ERROR]") !== -1) {
-      result.push(message);
-    }
-  }
-  return result;
-};
-logger.getWarnings = function() {
-  var result = [];
-  for (var i = 0; i < memAppender.getBuffer().length; i++) {
-    var message = memAppender.getBuffer()[i];
-    if (message.indexOf("[WARN]") !== -1) {
-      result.push(message);
-    }
-  }
-  return result;
-};
-logger.flushBuffer = function() {
-  return memAppender.flushBuffer();
-};
-
-module.exports = logger;
+"use strict";
+
+var log4js = require('log4js');
+
+var $depth = 10;
+
+log4js.configure({
+  appenders : [ {
+    type : "console",
+    layout : {
+      type : "pattern",
+      pattern : "%[%p {%x{ln}} -%]\t%m",
+      tokens : {
+        ln : function() {
+          // The caller:
+          var filePath = (new Error()).stack.split("\n")[$depth].split("\\");
+          filePath = filePath[filePath.length - 1].split("/");
+          return filePath[filePath.length - 1];
+        }
+      }
+    }
+  } ]
+});
+var appender = require('log4js-memory-appender');
+
+var memAppender = appender({
+  maxBufferSize : 1000
+});
+
+log4js.loadAppender('memory', memAppender);
+log4js.addAppender(log4js.appenders.memory());
+
+var logger = log4js.getLogger();
+logger.getEvents = function() {
+  return memAppender.getBuffer();
+};
+logger.getErrors = function() {
+  var result = [];
+  for (var i = 0; i < memAppender.getBuffer().length; i++) {
+    var message = memAppender.getBuffer()[i];
+    if (message.indexOf("[ERROR]") !== -1) {
+      result.push(message);
+    }
+  }
+  return result;
+};
+logger.getWarnings = function() {
+  var result = [];
+  for (var i = 0; i < memAppender.getBuffer().length; i++) {
+    var message = memAppender.getBuffer()[i];
+    if (message.indexOf("[WARN]") !== -1) {
+      result.push(message);
+    }
+  }
+  return result;
+};
+logger.flushBuffer = function() {
+  return memAppender.flushBuffer();
+};
+
+module.exports = logger;
diff --git a/frontend-js/src/test/js/map/AbstractCustomMap-test.js b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
index 31a38dc20a8a155713a7fde860ab78f8ceda32a7..dd47b2ed9e6b7103b8d4c5baf82ada4db56d3042 100644
--- a/frontend-js/src/test/js/map/AbstractCustomMap-test.js
+++ b/frontend-js/src/test/js/map/AbstractCustomMap-test.js
@@ -1,338 +1,338 @@
-"use strict";
-
-var Promise = require("bluebird");
-
-var AliasMarker = require('../../../main/js/map/marker/AliasMarker');
-var AliasSurface = require('../../../main/js/map/surface/AliasSurface');
-var AbstractCustomMap = require('../../../main/js/map/AbstractCustomMap');
-var IdentifiedElement = require('../../../main/js/map/data/IdentifiedElement');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-var logger = require("../logger");
-
-describe('AbstractCustomMap', function() {
-  it("Constructor", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    assert.ok(mockObject.getId());
-    assert.ok(mockObject.getModel());
-    assert.ok(mockObject.getSelectedLayoutOverlays());
-
-    assert.ok(mockObject.pixelOrigin_);
-    assert.ok(mockObject.pixelsPerLonDegree_);
-    assert.ok(mockObject.pixelsPerLonRadian_);
-    assert.ok(mockObject.zoomFactor);
-
-    assert.equal(mockObject.getAliasInfoWindowById(-1), null);
-    assert.equal(mockObject.getPointInfoWindowById(-1), null);
-    assert.equal(mockObject.getReactionInfoWindowById(-1), null);
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it("setupLayouts", function() {
-    var model = helper.createModel();
-    var layout = model.getLayouts()[0];
-    var options = helper.createCustomMapOptions();
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var googleMap = helper.createGoogleMap();
-
-    mockObject.setGoogleMap(googleMap);
-
-    mockObject.setupLayouts();
-    assert.ok(mockObject.getGoogleMap().getMapTypeId().indexOf(layout.getId()) >= 0);
-  });
-
-  it("createMapOptions", function() {
-    var mockObject = helper.createCustomMap();
-    assert.ok(mockObject.createMapOptions());
-
-  });
-
-  it("createTypeOptions", function() {
-    var layoutId = 40;
-    var layoutName = 'some layout name';
-    var layoutDirectory = 'dire45';
-
-    var model = helper.createModel();
-    var layoutDataObj = {
-      idObject : layoutId,
-      name : layoutName,
-      directory : layoutDirectory
-    };
-    model.addLayout(layoutDataObj);
-
-    var options = helper.createCustomMapOptions();
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var result = mockObject.createTypeOptions(layoutDataObj);
-
-    assert.ok(result);
-
-  });
-
-  it("setMaxZoomLevel", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    model.setMaxZoom(4);
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var googleMap = helper.createGoogleMap();
-
-    mockObject.setGoogleMap(googleMap);
-    mockObject.setMaxZoomLevel();
-
-    assert.equal(model.getMaxZoom(), mockObject.getGoogleMap().getZoom());
-  });
-
-  it("getMouseLatLng", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    model.setMaxZoom(4);
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var googleMap = new google.maps.Map(testDiv, {});
-    googleMap.setCenter(new google.maps.LatLng(1, 2));
-
-    mockObject.setGoogleMap(googleMap);
-
-    var coordinates = mockObject.getMouseLatLng();
-
-    assert.ok(coordinates);
-    assert.ok(coordinates instanceof google.maps.LatLng);
-  });
-
-  it("fromPixelsToPoint 1", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    model.setWidth(256);
-    model.setHeight(256);
-    model.setMinZoom(2);
-    model.setMaxZoom(2);
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var pointDist = {
-      x : 120,
-      y : 140
-    };
-
-    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
-
-    assert.ok(normalizedPoint);
-    assert.equal(normalizedPoint.x, pointDist.x);
-    assert.equal(normalizedPoint.y, pointDist.y);
-
-  });
-
-  it("fromPixelsToPoint 2", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    model.setWidth(512);
-    model.setHeight(512);
-    model.setMinZoom(2);
-    model.setMaxZoom(3);
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var pointDist = {
-      x : 120,
-      y : 140
-    };
-
-    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
-
-    assert.ok(normalizedPoint);
-    assert.equal(2 * pointDist.x, normalizedPoint.x);
-    assert.equal(2 * pointDist.y, normalizedPoint.y);
-
-    normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 3);
-
-    assert.ok(normalizedPoint);
-    assert.equal(pointDist.x, normalizedPoint.x);
-    assert.equal(pointDist.y, normalizedPoint.y);
-
-  });
-
-  it("fromPixelsToPoint 3", function() {
-    var model = helper.createModel();
-    var options = helper.createCustomMapOptions();
-
-    model.setWidth(512);
-    model.setHeight(512);
-    model.setMinZoom(0);
-    model.setMaxZoom(3);
-
-    var mockObject = new AbstractCustomMap(model, options);
-
-    var pointDist = {
-      x : 120,
-      y : 140
-    };
-
-    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
-
-    assert.ok(normalizedPoint);
-    assert.equal(0.5 * pointDist.x, normalizedPoint.x);
-    assert.equal(0.5 * pointDist.y, normalizedPoint.y);
-
-    normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 3);
-
-    assert.ok(normalizedPoint);
-    assert.equal(0.25 * pointDist.x, normalizedPoint.x);
-    assert.equal(0.25 * pointDist.y, normalizedPoint.y);
-
-  });
-
-  it("registerMapClickEvents", function() {
-    var mockObject = helper.createAbstractCustomMap();
-
-    var googleMap = new google.maps.Map(testDiv, {});
-
-    mockObject.setGoogleMap(googleMap);
-    // mock function to not put error log on console
-    mockObject.getTopMap = function() {
-      return null;
-    };
-
-    mockObject.registerMapClickEvents();
-  });
-
-  it("latLngToTile", function() {
-    var mockObject = helper.createAbstractCustomMap();
-
-    var latLng = new google.maps.LatLng(0, 1);
-
-    var tileCoordinates = mockObject.latLngToTile(latLng, 3);
-    assert.ok(tileCoordinates);
-    assert.ok(tileCoordinates instanceof google.maps.Point);
-
-  });
-
-  it("_turnOnOffDrawing", function() {
-    var mockObject = helper.createAbstractCustomMap();
-
-    var googleMap = new google.maps.Map(testDiv, {});
-
-    mockObject.setGoogleMap(googleMap);
-
-    // mock function to not put error log on console
-    mockObject.getTopMap = function() {
-      return null;
-    };
-
-    assert.equal(mockObject.isDrawingOn(), false);
-    mockObject._turnOnOffDrawing();
-    assert.ok(mockObject.isDrawingOn());
-    mockObject._turnOnOffDrawing();
-    assert.equal(mockObject.isDrawingOn(), false);
-  });
-
-  it("areaToString", function() {
-    var mockObject = helper.createAbstractCustomMap();
-
-    var triangleCoordinates = [ new google.maps.LatLng(25.774, -80.190), new google.maps.LatLng(18.466, -66.118),
-        new google.maps.LatLng(32.321, -64.757), new google.maps.LatLng(25.774, -80.190), ];
-
-    // Construct the polygon.
-    var bermudaTriangle = new google.maps.Polygon({
-      paths : triangleCoordinates,
-      strokeColor : '#FF0000',
-      strokeOpacity : 0.8,
-      strokeWeight : 2,
-      fillColor : '#FF0000',
-      fillOpacity : 0.35
-    });
-
-    assert.ok(mockObject.areaToString(bermudaTriangle));
-
-  });
-
-  it("Point - Lat,Lng conversion", function() {
-
-    var mockObject = helper.createAbstractCustomMap();
-
-    var x = 19920;
-    var y = 11040;
-    var point = new google.maps.Point(x, y);
-
-    var coordinates = mockObject.fromPointToLatLng(point);
-
-    var point2 = mockObject.fromLatLngToPoint(coordinates);
-
-    assert.closeTo(point2.x, point.x, 0.5, "X coordinate is invalid after transformation");
-    assert.closeTo(point2.y, point.y, 0.5, "Y coordinate is invalid after transformation");
-
-  });
-
-  it("_openInfoWindowForReaction", function() {
-    var mockObject = helper.createAbstractCustomMap();
-
-    var reaction = helper.createReaction(mockObject);
-
-    // mock the behaviour of the map
-    mockObject.getTopMap = function() {
-      return mockObject;
-    };
-    mockObject.getOverlayDataForReaction = function() {
-      return Promise.resolve([]);
-    };
-
-    mockObject.getModel().addReaction(reaction);
-
-    assert.equal(null, mockObject.getReactionInfoWindowById(reaction.getId()));
-
-    return mockObject._openInfoWindowForReaction(reaction).then(function() {
-      assert.ok(mockObject.getReactionInfoWindowById(reaction.getId()));
-    });
-
-  });
-
-  it("getDebug", function() {
-    var map = helper.createAbstractCustomMap();
-    map.setDebug(true);
-    assert.ok(map.isDebug());
-  });
-
-  it("fitBounds", function() {
-    var map = helper.createCustomMap();
-    var alias = helper.createAlias(map);
-    var ie = new IdentifiedElement(alias);
-    var marker = new AliasMarker({
-      map : map,
-      element : ie
-    });
-    var surface = new AliasSurface({
-      map : map,
-      element : ie,
-      gmapObj : new google.maps.Rectangle({
-        map : map.getGoogleMap(),
-        bounds : new google.maps.LatLngBounds(new google.maps.LatLng(0, 0), new google.maps.LatLng(0.5, 1)),
-      })
-    });
-
-    var markers = [ marker, surface ];
-    return marker.init().then(function() {
-
-      var center = map.getGoogleMap().getCenter();
-      map.fitBounds(markers);
-      var center2 = map.getGoogleMap().getCenter();
-      assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng());
-    });
-  });
-
-});
+"use strict";
+
+var Promise = require("bluebird");
+
+var AliasMarker = require('../../../main/js/map/marker/AliasMarker');
+var AliasSurface = require('../../../main/js/map/surface/AliasSurface');
+var AbstractCustomMap = require('../../../main/js/map/AbstractCustomMap');
+var IdentifiedElement = require('../../../main/js/map/data/IdentifiedElement');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+var logger = require("../logger");
+
+describe('AbstractCustomMap', function () {
+  it("Constructor", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    assert.ok(mockObject.getId());
+    assert.ok(mockObject.getModel());
+    assert.ok(mockObject.getSelectedLayoutOverlays());
+
+    assert.ok(mockObject.pixelOrigin_);
+    assert.ok(mockObject.pixelsPerLonDegree_);
+    assert.ok(mockObject.pixelsPerLonRadian_);
+    assert.ok(mockObject.zoomFactor);
+
+    assert.equal(mockObject.getAliasInfoWindowById(-1), null);
+    assert.equal(mockObject.getPointInfoWindowById(-1), null);
+    assert.equal(mockObject.getReactionInfoWindowById(-1), null);
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it("setupLayouts", function () {
+    var model = helper.createModel();
+    var layout = model.getLayouts()[0];
+    var options = helper.createCustomMapOptions();
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var googleMap = helper.createGoogleMap();
+
+    mockObject.setGoogleMap(googleMap);
+
+    mockObject.setupLayouts();
+    assert.ok(mockObject.getGoogleMap().getMapTypeId().indexOf(layout.getId()) >= 0);
+  });
+
+  it("createMapOptions", function () {
+    var mockObject = helper.createCustomMap();
+    assert.ok(mockObject.createMapOptions());
+
+  });
+
+  it("createTypeOptions", function () {
+    var layoutId = 40;
+    var layoutName = 'some layout name';
+    var layoutDirectory = 'dire45';
+
+    var model = helper.createModel();
+    var layoutDataObj = {
+      idObject: layoutId,
+      name: layoutName,
+      directory: layoutDirectory
+    };
+    model.addLayout(layoutDataObj);
+
+    var options = helper.createCustomMapOptions();
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var result = mockObject.createTypeOptions(layoutDataObj);
+
+    assert.ok(result);
+
+  });
+
+  it("setMaxZoomLevel", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    model.setMaxZoom(4);
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var googleMap = helper.createGoogleMap();
+
+    mockObject.setGoogleMap(googleMap);
+    mockObject.setMaxZoomLevel();
+
+    assert.equal(model.getMaxZoom(), mockObject.getGoogleMap().getZoom());
+  });
+
+  it("getMouseLatLng", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    model.setMaxZoom(4);
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var googleMap = new google.maps.Map(testDiv, {});
+    googleMap.setCenter(new google.maps.LatLng(1, 2));
+
+    mockObject.setGoogleMap(googleMap);
+
+    var coordinates = mockObject.getMouseLatLng();
+
+    assert.ok(coordinates);
+    assert.ok(coordinates instanceof google.maps.LatLng);
+  });
+
+  it("fromPixelsToPoint 1", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    model.setWidth(256);
+    model.setHeight(256);
+    model.setMinZoom(2);
+    model.setMaxZoom(2);
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var pointDist = {
+      x: 120,
+      y: 140
+    };
+
+    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
+
+    assert.ok(normalizedPoint);
+    assert.equal(normalizedPoint.x, pointDist.x);
+    assert.equal(normalizedPoint.y, pointDist.y);
+
+  });
+
+  it("fromPixelsToPoint 2", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    model.setWidth(512);
+    model.setHeight(512);
+    model.setMinZoom(2);
+    model.setMaxZoom(3);
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var pointDist = {
+      x: 120,
+      y: 140
+    };
+
+    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
+
+    assert.ok(normalizedPoint);
+    assert.equal(2 * pointDist.x, normalizedPoint.x);
+    assert.equal(2 * pointDist.y, normalizedPoint.y);
+
+    normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 3);
+
+    assert.ok(normalizedPoint);
+    assert.equal(pointDist.x, normalizedPoint.x);
+    assert.equal(pointDist.y, normalizedPoint.y);
+
+  });
+
+  it("fromPixelsToPoint 3", function () {
+    var model = helper.createModel();
+    var options = helper.createCustomMapOptions();
+
+    model.setWidth(512);
+    model.setHeight(512);
+    model.setMinZoom(0);
+    model.setMaxZoom(3);
+
+    var mockObject = new AbstractCustomMap(model, options);
+
+    var pointDist = {
+      x: 120,
+      y: 140
+    };
+
+    var normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 2);
+
+    assert.ok(normalizedPoint);
+    assert.equal(0.5 * pointDist.x, normalizedPoint.x);
+    assert.equal(0.5 * pointDist.y, normalizedPoint.y);
+
+    normalizedPoint = mockObject.fromPixelsToPoint(pointDist, 3);
+
+    assert.ok(normalizedPoint);
+    assert.equal(0.25 * pointDist.x, normalizedPoint.x);
+    assert.equal(0.25 * pointDist.y, normalizedPoint.y);
+
+  });
+
+  it("registerMapClickEvents", function () {
+    var mockObject = helper.createAbstractCustomMap();
+
+    var googleMap = new google.maps.Map(testDiv, {});
+
+    mockObject.setGoogleMap(googleMap);
+    // mock function to not put error log on console
+    mockObject.getTopMap = function () {
+      return null;
+    };
+
+    mockObject.registerMapClickEvents();
+  });
+
+  it("latLngToTile", function () {
+    var mockObject = helper.createAbstractCustomMap();
+
+    var latLng = new google.maps.LatLng(0, 1);
+
+    var tileCoordinates = mockObject.latLngToTile(latLng, 3);
+    assert.ok(tileCoordinates);
+    assert.ok(tileCoordinates instanceof google.maps.Point);
+
+  });
+
+  it("_turnOnOffDrawing", function () {
+    var mockObject = helper.createAbstractCustomMap();
+
+    var googleMap = new google.maps.Map(testDiv, {});
+
+    mockObject.setGoogleMap(googleMap);
+
+    // mock function to not put error log on console
+    mockObject.getTopMap = function () {
+      return null;
+    };
+
+    assert.equal(mockObject.isDrawingOn(), false);
+    mockObject._turnOnOffDrawing();
+    assert.ok(mockObject.isDrawingOn());
+    mockObject._turnOnOffDrawing();
+    assert.equal(mockObject.isDrawingOn(), false);
+  });
+
+  it("areaToString", function () {
+    var mockObject = helper.createAbstractCustomMap();
+
+    var triangleCoordinates = [new google.maps.LatLng(25.774, -80.190), new google.maps.LatLng(18.466, -66.118),
+      new google.maps.LatLng(32.321, -64.757), new google.maps.LatLng(25.774, -80.190)];
+
+    // Construct the polygon.
+    var bermudaTriangle = new google.maps.Polygon({
+      paths: triangleCoordinates,
+      strokeColor: '#FF0000',
+      strokeOpacity: 0.8,
+      strokeWeight: 2,
+      fillColor: '#FF0000',
+      fillOpacity: 0.35
+    });
+
+    assert.ok(mockObject.areaToString(bermudaTriangle));
+
+  });
+
+  it("Point - Lat,Lng conversion", function () {
+
+    var mockObject = helper.createAbstractCustomMap();
+
+    var x = 19920;
+    var y = 11040;
+    var point = new google.maps.Point(x, y);
+
+    var coordinates = mockObject.fromPointToLatLng(point);
+
+    var point2 = mockObject.fromLatLngToPoint(coordinates);
+
+    assert.closeTo(point2.x, point.x, 0.5, "X coordinate is invalid after transformation");
+    assert.closeTo(point2.y, point.y, 0.5, "Y coordinate is invalid after transformation");
+
+  });
+
+  it("_openInfoWindowForReaction", function () {
+    var mockObject = helper.createAbstractCustomMap();
+
+    var reaction = helper.createReaction(mockObject);
+
+    // mock the behaviour of the map
+    mockObject.getTopMap = function () {
+      return mockObject;
+    };
+    mockObject.getOverlayDataForReaction = function () {
+      return Promise.resolve([]);
+    };
+
+    mockObject.getModel().addReaction(reaction);
+
+    assert.equal(null, mockObject.getReactionInfoWindowById(reaction.getId()));
+
+    return mockObject._openInfoWindowForReaction(reaction).then(function () {
+      assert.ok(mockObject.getReactionInfoWindowById(reaction.getId()));
+    });
+
+  });
+
+  it("getDebug", function () {
+    var map = helper.createAbstractCustomMap();
+    map.setDebug(true);
+    assert.ok(map.isDebug());
+  });
+
+  it("fitBounds", function () {
+    var map = helper.createCustomMap();
+    var alias = helper.createAlias(map);
+    var ie = new IdentifiedElement(alias);
+    var marker = new AliasMarker({
+      map: map,
+      element: ie
+    });
+    var surface = new AliasSurface({
+      map: map,
+      element: ie,
+      gmapObj: new google.maps.Rectangle({
+        map: map.getGoogleMap(),
+        bounds: new google.maps.LatLngBounds(new google.maps.LatLng(0, 0), new google.maps.LatLng(0.5, 1))
+      })
+    });
+
+    var markers = [marker, surface];
+    return marker.init().then(function () {
+
+      var center = map.getGoogleMap().getCenter();
+      map.fitBounds(markers);
+      var center2 = map.getGoogleMap().getCenter();
+      assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng());
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/CustomMapOptions-test.js b/frontend-js/src/test/js/map/CustomMapOptions-test.js
index 04e4f6d2734211134dfbfc0672d5508633b2f098..3389f14010eb83545951b2cd32034b5eb8aa38fe 100644
--- a/frontend-js/src/test/js/map/CustomMapOptions-test.js
+++ b/frontend-js/src/test/js/map/CustomMapOptions-test.js
@@ -1,59 +1,58 @@
-"use strict";
-
-var CustomMapOptions = require('../../../main/js/map/CustomMapOptions');
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../logger');
-
-describe('CustomMapOptions', function () {
-  describe("constructor", function () {
-    it("with invalid arg", function () {
-      try {
-        new CustomMapOptions({
-          markerOptimization: 12,
-          bigLogo: "some strange string",
-          hideDiv: "some div ide",
-          customTouchInterface: "strange param",
-          debug: "unk boolean"
-        });
-        assert.ok(false);
-      } catch (exception) {
-        assert.ok(exception.message.indexOf("element must be defined") >= 0);
-      }
-    });
-    it("with invalid arg 3", function () {
-      try {
-        new CustomMapOptions({
-          element: testDiv,
-        });
-      } catch (exception) {
-        assert.ok(exception.message.indexOf("project must be defined") >= 0);
-      }
-    });
-
-    it("with valid arg 2", function () {
-      var project = helper.createProject();
-      new CustomMapOptions({
-        element: testDiv,
-        project: project,
-        debug: false,
-      });
-
-      assert.equal(0, logger.getErrors().length);
-      assert.equal(0, logger.getWarnings().length);
-    });
-
-  });
-
-
-  it("getDebug", function () {
-    var project = helper.createProject();
-    var options = new CustomMapOptions({
-      element: testDiv,
-      project: project,
-      debug: true,
-    });
-
-    assert.ok(options.isDebug());
-  });
-});
+"use strict";
+
+var CustomMapOptions = require('../../../main/js/map/CustomMapOptions');
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../logger');
+
+describe('CustomMapOptions', function () {
+  describe("constructor", function () {
+    it("with invalid arg", function () {
+      try {
+        new CustomMapOptions({
+          markerOptimization: 12,
+          bigLogo: "some strange string",
+          hideDiv: "some div ide",
+          customTouchInterface: "strange param",
+          debug: "unk boolean"
+        });
+        assert.ok(false);
+      } catch (exception) {
+        assert.ok(exception.message.indexOf("element must be defined") >= 0);
+      }
+    });
+    it("with invalid arg 3", function () {
+      try {
+        new CustomMapOptions({
+          element: testDiv
+        });
+      } catch (exception) {
+        assert.ok(exception.message.indexOf("project must be defined") >= 0);
+      }
+    });
+
+    it("with valid arg 2", function () {
+      var project = helper.createProject();
+      new CustomMapOptions({
+        element: testDiv,
+        project: project,
+        debug: false
+      });
+
+      assert.equal(0, logger.getErrors().length);
+      assert.equal(0, logger.getWarnings().length);
+    });
+
+  });
+
+  it("getDebug", function () {
+    var project = helper.createProject();
+    var options = new CustomMapOptions({
+      element: testDiv,
+      project: project,
+      debug: true
+    });
+
+    assert.ok(options.isDebug());
+  });
+});
diff --git a/frontend-js/src/test/js/map/OverlayParser-test.js b/frontend-js/src/test/js/map/OverlayParser-test.js
index 053ce56f0990179a209afd2b3eaacb57379d627a..48ce28d457854d75db0760b5b895aefa11f9ee66 100644
--- a/frontend-js/src/test/js/map/OverlayParser-test.js
+++ b/frontend-js/src/test/js/map/OverlayParser-test.js
@@ -1,46 +1,46 @@
-"use strict";
-
-require("../mocha-config.js");
-
-var OverlayParser = require('../../../main/js/map/OverlayParser');
-var ServerConnector = require('../ServerConnector-mock');
-var chai = require('chai');
-var assert = chai.assert;
-
-var TextEncoder = require('text-encoding').TextEncoder;
-
-describe('OverlayParser', function () {
-  describe('parse', function () {
-    it('simple', function () {
-      var parser = new OverlayParser();
-      var fileContent = "#NAME=some Name\n#DESCRIPTION=xxx\nname\tvalue\ns1\t1";
-
-      var overlay = parser.parse(fileContent);
-      assert.ok(overlay);
-      assert.equal(overlay.getDescription(), "xxx");
-      assert.equal(overlay.getName(), "some Name");
-      assert.ok(overlay.getContent());
-    });
-    it('Uint8Array', function () {
-      var parser = new OverlayParser();
-      var fileContent = new TextEncoder("UTF8").encode("#NAME=some Name\n#DESCRIPTION=xxx\nname\tvalue\ns1\t1");
-
-      var overlay = parser.parse(fileContent);
-      assert.ok(overlay);
-      assert.equal(overlay.getDescription(), "xxx");
-      assert.equal(overlay.getName(), "some Name");
-      assert.ok(overlay.getContent());
-    });
-    it('with type', function () {
-
-      return ServerConnector.sendGetRequest("testFiles/overlay/good.txt").then(function (fileContent) {
-        var parser = new OverlayParser();
-        var overlay = parser.parse(fileContent);
-        assert.equal(overlay.getName(), "example name");
-        assert.equal(overlay.getDescription(), "layout description");
-        assert.equal(overlay.getType(), "GENERIC");
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config.js");
+
+var OverlayParser = require('../../../main/js/map/OverlayParser');
+var ServerConnector = require('../ServerConnector-mock');
+var chai = require('chai');
+var assert = chai.assert;
+
+var TextEncoder = require('text-encoding').TextEncoder;
+
+describe('OverlayParser', function () {
+  describe('parse', function () {
+    it('simple', function () {
+      var parser = new OverlayParser();
+      var fileContent = "#NAME=some Name\n#DESCRIPTION=xxx\nname\tvalue\ns1\t1";
+
+      var overlay = parser.parse(fileContent);
+      assert.ok(overlay);
+      assert.equal(overlay.getDescription(), "xxx");
+      assert.equal(overlay.getName(), "some Name");
+      assert.ok(overlay.getContent());
+    });
+    it('Uint8Array', function () {
+      var parser = new OverlayParser();
+      var fileContent = new TextEncoder("UTF8").encode("#NAME=some Name\n#DESCRIPTION=xxx\nname\tvalue\ns1\t1");
+
+      var overlay = parser.parse(fileContent);
+      assert.ok(overlay);
+      assert.equal(overlay.getDescription(), "xxx");
+      assert.equal(overlay.getName(), "some Name");
+      assert.ok(overlay.getContent());
+    });
+    it('with type', function () {
+
+      return ServerConnector.sendGetRequest("testFiles/overlay/good.txt").then(function (fileContent) {
+        var parser = new OverlayParser();
+        var overlay = parser.parse(fileContent);
+        assert.equal(overlay.getName(), "example name");
+        assert.equal(overlay.getDescription(), "layout description");
+        assert.equal(overlay.getType(), "GENERIC");
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/Submap-test.js b/frontend-js/src/test/js/map/Submap-test.js
index 4ab4649496a950b2dcdf68207d3e25b2731d7c65..b2449e94cfa8a7a4f22641bf3d1dc35fbe758e31 100644
--- a/frontend-js/src/test/js/map/Submap-test.js
+++ b/frontend-js/src/test/js/map/Submap-test.js
@@ -1,72 +1,74 @@
-"use strict";
-
-var logger = require('../logger');
-
-var AliasMarker = require('../../../main/js/map/marker/AliasMarker');
-var IdentifiedElement = require('../../../main/js/map/data/IdentifiedElement');
-var Submap = require('../../../main/js/map/Submap');
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('Submap', function() {
-  it("simple constructor", function() {
-    var map = helper.createCustomMap();
-
-    var model = helper.createModel();
-
-    var submap = new Submap(map, model);
-    assert.ok(submap);
-    assert.equal(logger.getWarnings().length, 0);
-    assert.equal(logger.getErrors().length, 0);
-  });
-
-  it("open", function() {
-    var map = helper.createCustomMap();
-
-    var model = helper.createModel();
-
-    var submap = new Submap(map, model);
-
-    $(testDiv).dialog({
-      autoOpen : false
-    });
-
-    submap.open(testDiv);
-
-    $(testDiv).dialog("destroy");
-    assert.ok(submap);
-    assert.equal(logger.getWarnings().length, 0);
-    assert.equal(logger.getErrors().length, 0);
-  });
-
-  it("getTopMap", function() {
-    var map = helper.createCustomMap();
-
-    var model = helper.createModel();
-
-    var submap = new Submap(map, model);
-
-    assert.ok(submap.getTopMap());
-  });
-
-  it("create marker for submap", function() {
-    var map;
-    var submap;
-    var marker;
-    var projectId = "complex_model_with_submaps";
-    helper.setUrl("http://test/?id=" + projectId);
-    return ServerConnector.getProject(projectId).then(function(project) {
-      map = helper.createCustomMap(project);
-      submap = map.getSubmapById(16729);
-      return submap.getModel().getAliasById(345330);
-    }).then(function(alias) {
-      marker = new AliasMarker({
-        element : new IdentifiedElement(alias),
-        map : submap
-      });
-      return marker.init();
-    }).then(function() {
-      assert.ok(marker.getAliasData());
-    });
-  });
-});
+"use strict";
+
+var logger = require('../logger');
+
+var AliasMarker = require('../../../main/js/map/marker/AliasMarker');
+var IdentifiedElement = require('../../../main/js/map/data/IdentifiedElement');
+var ServerConnector = require('../ServerConnector-mock');
+var Submap = require('../../../main/js/map/Submap');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('Submap', function () {
+  it("simple constructor", function () {
+    var map = helper.createCustomMap();
+
+    var model = helper.createModel();
+
+    var submap = new Submap(map, model);
+    assert.ok(submap);
+    assert.equal(logger.getWarnings().length, 0);
+    assert.equal(logger.getErrors().length, 0);
+  });
+
+  it("open", function () {
+    var map = helper.createCustomMap();
+
+    var model = helper.createModel();
+
+    var submap = new Submap(map, model);
+
+    $(testDiv).dialog({
+      autoOpen: false
+    });
+
+    submap.open(testDiv);
+
+    $(testDiv).dialog("destroy");
+    assert.ok(submap);
+    assert.equal(logger.getWarnings().length, 0);
+    assert.equal(logger.getErrors().length, 0);
+  });
+
+  it("getTopMap", function () {
+    var map = helper.createCustomMap();
+
+    var model = helper.createModel();
+
+    var submap = new Submap(map, model);
+
+    assert.ok(submap.getTopMap());
+  });
+
+  it("create marker for submap", function () {
+    var map;
+    var submap;
+    var marker;
+    var projectId = "complex_model_with_submaps";
+    helper.setUrl("http://test/?id=" + projectId);
+    return ServerConnector.getProject(projectId).then(function (project) {
+      map = helper.createCustomMap(project);
+      submap = map.getSubmapById(16729);
+      return submap.getModel().getAliasById(345330);
+    }).then(function (alias) {
+      marker = new AliasMarker({
+        element: new IdentifiedElement(alias),
+        map: submap
+      });
+      return marker.init();
+    }).then(function () {
+      assert.ok(marker.getAliasData());
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/TouchMap-test.js b/frontend-js/src/test/js/map/TouchMap-test.js
index 975a0865f3c465c5a32919a1f15bc33cb20e41ae..4bd12c363dd6c303fcc65d0a3cb97ed2494f39f0 100644
--- a/frontend-js/src/test/js/map/TouchMap-test.js
+++ b/frontend-js/src/test/js/map/TouchMap-test.js
@@ -1,178 +1,179 @@
-"use strict";
-
-require("../mocha-config");
-
-var TouchMap = require('../../../main/js/map/TouchMap');
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('TouchMap', function () {
-  it("constructor", function () {
-    var map = helper.createCustomMap();
-    var touchMap = new TouchMap(map);
-    assert.ok(touchMap);
-  });
-
-  it("handleStart", function () {
-    var map = helper.createCustomMap();
-    var touchMap = new TouchMap(map);
-
-    assert.notOk(touchMap.firstFingerId);
-
-    var evt = document.createEvent('UIEvent');
-    evt.initUIEvent('touchstart', true, true, window, null);
-
-    evt.changedTouches = [{
-      pageX: 200,
-      pageY: 200,
-      identifier: 1,
-      clientX: 100,
-      clientY: 100
-    }];
-
-    map.getElement().dispatchEvent(evt);
-
-    assert.ok(touchMap.firstFingerId);
-  });
-
-  describe("handleEnd", function () {
-    it("after move", function () {
-      var map = helper.createCustomMap();
-      var touchMap = new TouchMap(map);
-
-      var evt = document.createEvent('UIEvent');
-      evt.initUIEvent('touchstart', true, true, window, null);
-
-      evt.changedTouches = [{
-        pageX: 200,
-        pageY: 200,
-        identifier: 1,
-        clientX: 100,
-        clientY: 100
-      }];
-
-      map.getElement().dispatchEvent(evt);
-
-      evt = document.createEvent('UIEvent');
-      evt.initUIEvent('touchend', true, true, window, null);
-
-      evt.changedTouches = [{
-        pageX: 300,
-        pageY: 300,
-        identifier: 1,
-        clientX: 200,
-        clientY: 200
-      }];
-
-      map.getElement().dispatchEvent(evt);
-
-      assert.notOk(touchMap.firstFingerId);
-    });
-    it("as a click", function () {
-      return ServerConnector.getProject().then(function (project) {
-        var map = helper.createCustomMap(project);
-        var touchMap = new TouchMap(map);
-
-        var evtLocation = {
-          pageX: 10,
-          pageY: 10,
-          identifier: 0,
-          clientX: 10,
-          clientY: 10
-        };
-
-        var evt = document.createEvent('UIEvent');
-        evt.initUIEvent('touchstart', true, true, window, null);
-        evt.changedTouches = [evtLocation];
-        map.getElement().dispatchEvent(evt);
-
-        var clicked = false;
-        google.maps.event.addListener(map.getGoogleMap(), "click", function () {
-          clicked = true;
-        });
-        evt = document.createEvent('UIEvent');
-        evt.initUIEvent('touchend', true, true, window, null);
-        evt.changedTouches = [evtLocation];
-        map.getElement().dispatchEvent(evt);
-
-        assert.notOk(touchMap.firstFingerId);
-        assert.ok(clicked);
-      });
-    });
-  });
-
-  describe("handleMove", function () {
-    it("default", function () {
-      var map = helper.createCustomMap();
-      var coordinates = map.getGoogleMap().getCenter();
-      new TouchMap(map);
-
-      var evtLocation = {
-        pageX: 10,
-        pageY: 10,
-        identifier: 0,
-        clientX: 10,
-        clientY: 10
-      };
-
-      var evt = document.createEvent('UIEvent');
-      evt.initUIEvent('touchstart', true, true, window, null);
-      evt.changedTouches = [evtLocation];
-      map.getElement().dispatchEvent(evt);
-
-      evt = document.createEvent('UIEvent');
-      evt.initUIEvent('touchmove', true, true, window, null);
-      evtLocation.pageX += 10;
-      evtLocation.pageY += 10;
-      evtLocation.clientX += 10;
-      evtLocation.clientY += 10;
-      evt.changedTouches = [evtLocation];
-      map.getElement().dispatchEvent(evt);
-
-      var coordinates2 = map.getGoogleMap().getCenter();
-
-      assert.ok(coordinates.x !== coordinates2.x);
-      assert.ok(coordinates.y !== coordinates2.y);
-
-    });
-  });
-  it("updateCoordinates", function () {
-    var map = helper.createCustomMap();
-
-    var touchMap = new TouchMap(map);
-    touchMap.firstFingerId = 1;
-
-    var evt = document.createEvent('UIEvent');
-    evt.initUIEvent('touchstart', true, true, window, null);
-
-    evt.changedTouches = [{
-      pageX: 200,
-      pageY: 200,
-      identifier: 1,
-      clientX: 100,
-      clientY: 100
-    }];
-
-    assert.notOk(touchMap.firstEndX);
-    assert.notOk(touchMap.firstEndY);
-    touchMap.updateCoordinates(evt.changedTouches[0]);
-    assert.ok(touchMap.firstEndX);
-    assert.ok(touchMap.firstEndY);
-  });
-
-  it("lineDistance", function () {
-    var map = helper.createCustomMap();
-    var touchMap = new TouchMap(map);
-
-    var dist = touchMap.lineDistance(1, 1, 4, 5);
-    assert.equal(5, dist);
-  });
-
-  it("zoomMap", function () {
-    var map = helper.createCustomMap();
-    var touchMap = new TouchMap(map);
-
-    touchMap.zoomMap(1, 2, 4);
-    assert.equal(map.getGoogleMap().getZoom(), 4);
-  });
-});
+"use strict";
+
+require("../mocha-config");
+
+var TouchMap = require('../../../main/js/map/TouchMap');
+var ServerConnector = require('../ServerConnector-mock');
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('TouchMap', function () {
+  it("constructor", function () {
+    var map = helper.createCustomMap();
+    var touchMap = new TouchMap(map);
+    assert.ok(touchMap);
+  });
+
+  it("handleStart", function () {
+    var map = helper.createCustomMap();
+    var touchMap = new TouchMap(map);
+
+    assert.notOk(touchMap.firstFingerId);
+
+    var evt = document.createEvent('UIEvent');
+    evt.initUIEvent('touchstart', true, true, window, null);
+
+    evt.changedTouches = [{
+      pageX: 200,
+      pageY: 200,
+      identifier: 1,
+      clientX: 100,
+      clientY: 100
+    }];
+
+    map.getElement().dispatchEvent(evt);
+
+    assert.ok(touchMap.firstFingerId);
+  });
+
+  describe("handleEnd", function () {
+    it("after move", function () {
+      var map = helper.createCustomMap();
+      var touchMap = new TouchMap(map);
+
+      var evt = document.createEvent('UIEvent');
+      evt.initUIEvent('touchstart', true, true, window, null);
+
+      evt.changedTouches = [{
+        pageX: 200,
+        pageY: 200,
+        identifier: 1,
+        clientX: 100,
+        clientY: 100
+      }];
+
+      map.getElement().dispatchEvent(evt);
+
+      evt = document.createEvent('UIEvent');
+      evt.initUIEvent('touchend', true, true, window, null);
+
+      evt.changedTouches = [{
+        pageX: 300,
+        pageY: 300,
+        identifier: 1,
+        clientX: 200,
+        clientY: 200
+      }];
+
+      map.getElement().dispatchEvent(evt);
+
+      assert.notOk(touchMap.firstFingerId);
+    });
+    it("as a click", function () {
+      return ServerConnector.getProject().then(function (project) {
+        var map = helper.createCustomMap(project);
+        var touchMap = new TouchMap(map);
+
+        var evtLocation = {
+          pageX: 10,
+          pageY: 10,
+          identifier: 0,
+          clientX: 10,
+          clientY: 10
+        };
+
+        var evt = document.createEvent('UIEvent');
+        evt.initUIEvent('touchstart', true, true, window, null);
+        evt.changedTouches = [evtLocation];
+        map.getElement().dispatchEvent(evt);
+
+        var clicked = false;
+        google.maps.event.addListener(map.getGoogleMap(), "click", function () {
+          clicked = true;
+        });
+        evt = document.createEvent('UIEvent');
+        evt.initUIEvent('touchend', true, true, window, null);
+        evt.changedTouches = [evtLocation];
+        map.getElement().dispatchEvent(evt);
+
+        assert.notOk(touchMap.firstFingerId);
+        assert.ok(clicked);
+      });
+    });
+  });
+
+  describe("handleMove", function () {
+    it("default", function () {
+      var map = helper.createCustomMap();
+      var coordinates = map.getGoogleMap().getCenter();
+      new TouchMap(map);
+
+      var evtLocation = {
+        pageX: 10,
+        pageY: 10,
+        identifier: 0,
+        clientX: 10,
+        clientY: 10
+      };
+
+      var evt = document.createEvent('UIEvent');
+      evt.initUIEvent('touchstart', true, true, window, null);
+      evt.changedTouches = [evtLocation];
+      map.getElement().dispatchEvent(evt);
+
+      evt = document.createEvent('UIEvent');
+      evt.initUIEvent('touchmove', true, true, window, null);
+      evtLocation.pageX += 10;
+      evtLocation.pageY += 10;
+      evtLocation.clientX += 10;
+      evtLocation.clientY += 10;
+      evt.changedTouches = [evtLocation];
+      map.getElement().dispatchEvent(evt);
+
+      var coordinates2 = map.getGoogleMap().getCenter();
+
+      assert.ok(coordinates.x !== coordinates2.x);
+      assert.ok(coordinates.y !== coordinates2.y);
+
+    });
+  });
+  it("updateCoordinates", function () {
+    var map = helper.createCustomMap();
+
+    var touchMap = new TouchMap(map);
+    touchMap.firstFingerId = 1;
+
+    var evt = document.createEvent('UIEvent');
+    evt.initUIEvent('touchstart', true, true, window, null);
+
+    evt.changedTouches = [{
+      pageX: 200,
+      pageY: 200,
+      identifier: 1,
+      clientX: 100,
+      clientY: 100
+    }];
+
+    assert.notOk(touchMap.firstEndX);
+    assert.notOk(touchMap.firstEndY);
+    touchMap.updateCoordinates(evt.changedTouches[0]);
+    assert.ok(touchMap.firstEndX);
+    assert.ok(touchMap.firstEndY);
+  });
+
+  it("lineDistance", function () {
+    var map = helper.createCustomMap();
+    var touchMap = new TouchMap(map);
+
+    var dist = touchMap.lineDistance(1, 1, 4, 5);
+    assert.equal(5, dist);
+  });
+
+  it("zoomMap", function () {
+    var map = helper.createCustomMap();
+    var touchMap = new TouchMap(map);
+
+    touchMap.zoomMap(1, 2, 4);
+    assert.equal(map.getGoogleMap().getZoom(), 4);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/Alias-test.js b/frontend-js/src/test/js/map/data/Alias-test.js
index ec4404357e9ad375b8897f8c536db72b2e9f1d62..2444f2ac02ebf0abfe95595a16d9aff32f775a6a 100644
--- a/frontend-js/src/test/js/map/data/Alias-test.js
+++ b/frontend-js/src/test/js/map/data/Alias-test.js
@@ -1,130 +1,130 @@
-"use strict";
-
-var Alias = require('../../../../main/js/map/data/Alias');
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('Alias', function () {
-  beforeEach(function () {
-    logger.flushBuffer();
-  });
-
-  describe("constructor", function () {
-    it("with invalid arg", function () {
-      try {
-        new Alias({});
-        assert.ok(null);
-      } catch (exception) {
-        assert.ok(exception.message.indexOf("ModelId is not defined") >= 0);
-      }
-    });
-    it("simple", function () {
-      var javaObject = {
-        bounds: {
-          x: 190,
-          y: 44,
-          width: 80,
-          height: 40
-        },
-        modelId: 57,
-        idObject: 18554
-      };
-      var alias = new Alias(javaObject);
-      assert.equal(alias.isComplete(), false);
-      assert.equal(null, alias.name);
-      assert.equal(alias.getX(), 190);
-    });
-    it("complex", function () {
-      var javaObject = {
-        notes: "",
-        type: "Protein",
-        name: "s1",
-        synonyms: [],
-        formerSymbols: [],
-        references: [],
-        other: [],
-        bounds: {
-          x: 59,
-          y: 73,
-          width: 80,
-          height: 40
-        },
-        modelId: 54,
-        idObject: 18552
-      };
-      var alias = new Alias(javaObject);
-      assert.ok(alias.isComplete());
-      assert.equal('s1', alias.name);
-    });
-
-  });
-
-
-  it("Alias update method", function () {
-    var javaObject = {
-      bounds: {
-        x: 190,
-        y: 44,
-        width: 80,
-        height: 40
-      },
-      modelId: 57,
-      idObject: 18554
-    };
-    var alias = new Alias(javaObject);
-    var javaObject2 = {
-      notes: "",
-      type: "Protein",
-      name: "s1",
-      synonyms: [],
-      formerSymbols: [],
-      references: [],
-      other: [],
-      bounds: {
-        x: 59,
-        y: 73,
-        width: 80,
-        height: 40
-      },
-      modelId: 54,
-      idObject: 18552
-    };
-    alias.update(javaObject2);
-    assert.ok(alias.isComplete());
-    assert.equal('s1', alias.name);
-  });
-
-  it("Alias update method 2", function () {
-    var javaObject = {
-      bounds: {
-        x: 190,
-        y: 44,
-        width: 80,
-        height: 40
-      },
-      modelId: 57,
-      idObject: 18554
-    };
-    var alias = new Alias(javaObject);
-    var javaObject2 = {
-      notes: "",
-      type: "Protein",
-      synonyms: [],
-      formerSymbols: [],
-      references: [],
-      other: [],
-      bounds: {
-        x: 59,
-        y: 73,
-        width: 80,
-        height: 40
-      },
-      modelId: 54,
-      idObject: 18552
-    };
-    alias.update(javaObject2);
-    assert.equal(alias.isComplete(), false);
-  });
-
-});
+"use strict";
+
+var Alias = require('../../../../main/js/map/data/Alias');
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('Alias', function () {
+  beforeEach(function () {
+    logger.flushBuffer();
+  });
+
+  describe("constructor", function () {
+    it("with invalid arg", function () {
+      try {
+        new Alias({});
+        assert.ok(null);
+      } catch (exception) {
+        assert.ok(exception.message.indexOf("ModelId is not defined") >= 0);
+      }
+    });
+    it("simple", function () {
+      var javaObject = {
+        bounds: {
+          x: 190,
+          y: 44,
+          width: 80,
+          height: 40
+        },
+        modelId: 57,
+        idObject: 18554
+      };
+      var alias = new Alias(javaObject);
+      assert.equal(alias.isComplete(), false);
+      assert.equal(null, alias.name);
+      assert.equal(alias.getX(), 190);
+    });
+    it("complex", function () {
+      var javaObject = {
+        notes: "",
+        type: "Protein",
+        name: "s1",
+        synonyms: [],
+        formerSymbols: [],
+        references: [],
+        other: [],
+        bounds: {
+          x: 59,
+          y: 73,
+          width: 80,
+          height: 40
+        },
+        modelId: 54,
+        idObject: 18552
+      };
+      var alias = new Alias(javaObject);
+      assert.ok(alias.isComplete());
+      assert.equal('s1', alias.name);
+    });
+
+  });
+
+
+  it("Alias update method", function () {
+    var javaObject = {
+      bounds: {
+        x: 190,
+        y: 44,
+        width: 80,
+        height: 40
+      },
+      modelId: 57,
+      idObject: 18554
+    };
+    var alias = new Alias(javaObject);
+    var javaObject2 = {
+      notes: "",
+      type: "Protein",
+      name: "s1",
+      synonyms: [],
+      formerSymbols: [],
+      references: [],
+      other: [],
+      bounds: {
+        x: 59,
+        y: 73,
+        width: 80,
+        height: 40
+      },
+      modelId: 54,
+      idObject: 18552
+    };
+    alias.update(javaObject2);
+    assert.ok(alias.isComplete());
+    assert.equal('s1', alias.name);
+  });
+
+  it("Alias update method 2", function () {
+    var javaObject = {
+      bounds: {
+        x: 190,
+        y: 44,
+        width: 80,
+        height: 40
+      },
+      modelId: 57,
+      idObject: 18554
+    };
+    var alias = new Alias(javaObject);
+    var javaObject2 = {
+      notes: "",
+      type: "Protein",
+      synonyms: [],
+      formerSymbols: [],
+      references: [],
+      other: [],
+      bounds: {
+        x: 59,
+        y: 73,
+        width: 80,
+        height: 40
+      },
+      modelId: 54,
+      idObject: 18552
+    };
+    alias.update(javaObject2);
+    assert.equal(alias.isComplete(), false);
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/data/Comment-test.js b/frontend-js/src/test/js/map/data/Comment-test.js
index 0c99ebc12d9538c24b1aee63def4edd54b3c91e2..49c3e11fbd0c5817340a3657edfacc76735a5240 100644
--- a/frontend-js/src/test/js/map/data/Comment-test.js
+++ b/frontend-js/src/test/js/map/data/Comment-test.js
@@ -1,32 +1,32 @@
-"use strict";
-
-var Comment = require('../../../../main/js/map/data/Comment');
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('../../logger');
-
-describe('Comment', function() {
-  beforeEach(function() {
-    logger.flushBuffer();
-  });
-
-  it("constructor", function() {
-    var comment = new Comment({
-      elementId : 1,
-      type : "ALIAS",
-      modelId : 3,
-      icon : "icons/comment.png",
-      id : 4,
-      pinned : true,
-      coord : {
-        x : 321.5,
-        y : 289.0
-      },
-      removed : false,
-      title : "title fo comment: ",
-      content : "content of the comment # "
-    });
-    assert.ok(comment.isPinned());
-    assert.notOk(comment.isRemoved());
-  });
-});
+"use strict";
+
+var Comment = require('../../../../main/js/map/data/Comment');
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('Comment', function () {
+  beforeEach(function () {
+    logger.flushBuffer();
+  });
+
+  it("constructor", function () {
+    var comment = new Comment({
+      elementId: 1,
+      type: "ALIAS",
+      modelId: 3,
+      icon: "icons/comment.png",
+      id: 4,
+      pinned: true,
+      coord: {
+        x: 321.5,
+        y: 289.0
+      },
+      removed: false,
+      title: "title fo comment: ",
+      content: "content of the comment # "
+    });
+    assert.ok(comment.isPinned());
+    assert.notOk(comment.isRemoved());
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/GeneVariant-test.js b/frontend-js/src/test/js/map/data/GeneVariant-test.js
index cca93dae87e34d3d14a3ef9412340a176816e95c..dd8ebcd3796cd9ba55b5c788f3cbf24d66d5c87b 100644
--- a/frontend-js/src/test/js/map/data/GeneVariant-test.js
+++ b/frontend-js/src/test/js/map/data/GeneVariant-test.js
@@ -1,28 +1,28 @@
-"use strict";
-
-var GeneVariant = require('../../../../main/js/map/data/GeneVariant');
-var assert = require('assert');
-
-describe('GeneVariant', function() {
-  it("constructor", function() {
-    var data = {
-      position : 12,
-      originalDna : "A",
-      modifiedDna : "C",
-      referenceGenomeType : "unk",
-      referenceGenomeVersion : "v1",
-      contig : "1",
-      allelFrequency : "0.2",
-      variantIdentifier : "id"
-    };
-    var variant = new GeneVariant(data);
-    assert.equal(variant.getPosition(), data.position);
-    assert.equal(variant.getOriginalDna(), data.originalDna);
-    assert.equal(variant.getModifiedDna(), data.modifiedDna);
-    assert.equal(variant.getReferenceGenomeType(), data.referenceGenomeType);
-    assert.equal(variant.getContig(), data.contig);
-    assert.equal(variant.getAllelFrequency(), data.allelFrequency);
-    assert.equal(variant.getVariantIdentifier(), data.variantIdentifier);
-    assert.equal(variant.getReferenceGenomeVersion(), data.referenceGenomeVersion);
-  });
-});
+"use strict";
+
+var GeneVariant = require('../../../../main/js/map/data/GeneVariant');
+var assert = require('assert');
+
+describe('GeneVariant', function () {
+  it("constructor", function () {
+    var data = {
+      position: 12,
+      originalDna: "A",
+      modifiedDna: "C",
+      referenceGenomeType: "unk",
+      referenceGenomeVersion: "v1",
+      contig: "1",
+      allelFrequency: "0.2",
+      variantIdentifier: "id"
+    };
+    var variant = new GeneVariant(data);
+    assert.equal(variant.getPosition(), data.position);
+    assert.equal(variant.getOriginalDna(), data.originalDna);
+    assert.equal(variant.getModifiedDna(), data.modifiedDna);
+    assert.equal(variant.getReferenceGenomeType(), data.referenceGenomeType);
+    assert.equal(variant.getContig(), data.contig);
+    assert.equal(variant.getAllelFrequency(), data.allelFrequency);
+    assert.equal(variant.getVariantIdentifier(), data.variantIdentifier);
+    assert.equal(variant.getReferenceGenomeVersion(), data.referenceGenomeVersion);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/IdentifiedElement-test.js b/frontend-js/src/test/js/map/data/IdentifiedElement-test.js
index 271f40c60f766b8a4503f7e9d7d8f781ca090963..a272bf4b182d1656314bcbed0193662305b97c58 100644
--- a/frontend-js/src/test/js/map/data/IdentifiedElement-test.js
+++ b/frontend-js/src/test/js/map/data/IdentifiedElement-test.js
@@ -1,177 +1,177 @@
-"use strict";
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var Alias = require('../../../../main/js/map/data/Alias');
-var Reaction = require('../../../../main/js/map/data/Reaction');
-var PointData = require('../../../../main/js/map/data/PointData');
-
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-var expect = chai.expect;
-
-describe('IdentifiedElement', function () {
-  beforeEach(function () {
-    logger.flushBuffer();
-  });
-
-  describe("constructor", function () {
-    it("simple", function () {
-      var javaObj = {
-        objectId: "31165",
-        modelId: 269,
-        type: "alias",
-        icon: "marker/marker/marker_red_1.png"
-      };
-      var ie = new IdentifiedElement(javaObj);
-      assert.ok(ie);
-      assert.equal(31165, ie.getId());
-      assert.equal(269, ie.getModelId());
-      assert.equal("ALIAS", ie.getType());
-      assert.equal("marker/marker/marker_red_1.png", ie.getIcon());
-    });
-
-    it("from point", function () {
-      var javaObj = {
-        objectId: "Point2D.Double[117.685546875, 204.6923828125001]",
-        modelId: 269,
-        type: "POINT",
-        icon: "icons/comment.png"
-      };
-      var ie = new IdentifiedElement(javaObj);
-      assert.ok(ie);
-      assert.ok(ie.getPoint());
-    });
-
-    it("from point 2", function () {
-      var javaObj = {
-        objectId: "(117.685546875, 204.6923828125001)",
-        modelId: 269,
-        type: "POINT",
-        icon: "empty.png"
-      };
-      var ie = new IdentifiedElement(javaObj);
-      assert.ok(ie);
-      assert.ok(ie.getPoint());
-    });
-    it("from alias", function () {
-      var jsonString = '{"bounds":{"x":190,"y":44,"width":80,"height":40},"modelId":57,"idObject":18554}';
-      var javaObject = JSON.parse(jsonString);
-      var alias = new Alias(javaObject);
-      var ie = new IdentifiedElement(alias);
-      assert.ok(ie);
-      assert.equal(ie.getType(), "ALIAS");
-    });
-
-    it("from Reaction", function () {
-      var javaObject = {
-        lines: [{
-          start: Object,
-          end: Object,
-          type: "START"
-        }, {
-          start: Object,
-          end: Object,
-          type: "END"
-        }, {
-          start: Object,
-          end: Object,
-          type: "MIDDLE"
-        }],
-        modelId: 319,
-        idObject: "13178",
-        centerPoint: {}
-      };
-      var reaction = new Reaction(javaObject);
-
-      var ie = new IdentifiedElement(reaction);
-      assert.ok(ie);
-      assert.equal(ie.getType(), "REACTION");
-    });
-
-    it("from invalid object", function () {
-      var javaObject = {
-        modelId: 2
-      };
-      var code = function () {
-        new IdentifiedElement(javaObject);
-      };
-      assert.throws(code, new RegExp("Type not defined"));
-    });
-
-    it("from PointData", function () {
-      var modelId = 3;
-      var point = new google.maps.Point(2, 3.45);
-      var pointData = new PointData(point, modelId);
-
-      var ie = new IdentifiedElement(pointData);
-      assert.ok(ie);
-      assert.equal(ie.getType(), "POINT");
-    });
-
-    it("from invalid object 2", function () {
-      var javaObject = {
-        modelId: 2,
-        type: "unk_type"
-      };
-      var code = function () {
-        new IdentifiedElement(javaObject);
-      };
-      assert.throws(code, new RegExp("Unknown type"));
-    });
-
-    it("from invalid object 3", function () {
-      var javaObject = {
-        type: "alias",
-        objectId: "el_id"
-      };
-      var code = function () {
-        new IdentifiedElement(javaObject);
-      };
-      assert.throws(code, new RegExp("ModelId is invalid"));
-    });
-
-    it("from invalid object 4", function () {
-      var javaObject = {
-        type: "alias",
-        modelId: 4,
-      };
-      var code = function () {
-        new IdentifiedElement(javaObject);
-      };
-      assert.throws(code, new RegExp("Id not defined"));
-    });
-
-    it("from artificial obj", function () {
-      var javaObject = {
-        type: "alias",
-        objectId: "el_id",
-        modelId: "m_id"
-      };
-      var ie = new IdentifiedElement(javaObject);
-      var point = ie.getPoint();
-      expect(point).to.equal(null);
-      assert.equal(logger.getWarnings().length, 1);
-    });
-
-  });
-
-  it("equals", function () {
-    var javaObj = {
-      objectId: "31165",
-      modelId: 269,
-      type: "alias"
-    };
-    var ie = new IdentifiedElement(javaObj);
-    var ie2 = new IdentifiedElement(javaObj);
-
-    var ie3 = helper.createIdentifiedElement();
-
-    assert.ok(ie.equals(ie));
-    assert.ok(ie.equals(ie2));
-    assert.notOk(ie.equals(ie3));
-
-  });
-
-});
+"use strict";
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var Alias = require('../../../../main/js/map/data/Alias');
+var Reaction = require('../../../../main/js/map/data/Reaction');
+var PointData = require('../../../../main/js/map/data/PointData');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+var expect = chai.expect;
+
+describe('IdentifiedElement', function () {
+  beforeEach(function () {
+    logger.flushBuffer();
+  });
+
+  describe("constructor", function () {
+    it("simple", function () {
+      var javaObj = {
+        objectId: "31165",
+        modelId: 269,
+        type: "alias",
+        icon: "marker/marker/marker_red_1.png"
+      };
+      var ie = new IdentifiedElement(javaObj);
+      assert.ok(ie);
+      assert.equal(31165, ie.getId());
+      assert.equal(269, ie.getModelId());
+      assert.equal("ALIAS", ie.getType());
+      assert.equal("marker/marker/marker_red_1.png", ie.getIcon());
+    });
+
+    it("from point", function () {
+      var javaObj = {
+        objectId: "Point2D.Double[117.685546875, 204.6923828125001]",
+        modelId: 269,
+        type: "POINT",
+        icon: "icons/comment.png"
+      };
+      var ie = new IdentifiedElement(javaObj);
+      assert.ok(ie);
+      assert.ok(ie.getPoint());
+    });
+
+    it("from point 2", function () {
+      var javaObj = {
+        objectId: "(117.685546875, 204.6923828125001)",
+        modelId: 269,
+        type: "POINT",
+        icon: "empty.png"
+      };
+      var ie = new IdentifiedElement(javaObj);
+      assert.ok(ie);
+      assert.ok(ie.getPoint());
+    });
+    it("from alias", function () {
+      var jsonString = '{"bounds":{"x":190,"y":44,"width":80,"height":40},"modelId":57,"idObject":18554}';
+      var javaObject = JSON.parse(jsonString);
+      var alias = new Alias(javaObject);
+      var ie = new IdentifiedElement(alias);
+      assert.ok(ie);
+      assert.equal(ie.getType(), "ALIAS");
+    });
+
+    it("from Reaction", function () {
+      var javaObject = {
+        lines: [{
+          start: Object,
+          end: Object,
+          type: "START"
+        }, {
+          start: Object,
+          end: Object,
+          type: "END"
+        }, {
+          start: Object,
+          end: Object,
+          type: "MIDDLE"
+        }],
+        modelId: 319,
+        idObject: "13178",
+        centerPoint: {}
+      };
+      var reaction = new Reaction(javaObject);
+
+      var ie = new IdentifiedElement(reaction);
+      assert.ok(ie);
+      assert.equal(ie.getType(), "REACTION");
+    });
+
+    it("from invalid object", function () {
+      var javaObject = {
+        modelId: 2
+      };
+      var code = function () {
+        new IdentifiedElement(javaObject);
+      };
+      assert.throws(code, new RegExp("Type not defined"));
+    });
+
+    it("from PointData", function () {
+      var modelId = 3;
+      var point = new google.maps.Point(2, 3.45);
+      var pointData = new PointData(point, modelId);
+
+      var ie = new IdentifiedElement(pointData);
+      assert.ok(ie);
+      assert.equal(ie.getType(), "POINT");
+    });
+
+    it("from invalid object 2", function () {
+      var javaObject = {
+        modelId: 2,
+        type: "unk_type"
+      };
+      var code = function () {
+        new IdentifiedElement(javaObject);
+      };
+      assert.throws(code, new RegExp("Unknown type"));
+    });
+
+    it("from invalid object 3", function () {
+      var javaObject = {
+        type: "alias",
+        objectId: "el_id"
+      };
+      var code = function () {
+        new IdentifiedElement(javaObject);
+      };
+      assert.throws(code, new RegExp("ModelId is invalid"));
+    });
+
+    it("from invalid object 4", function () {
+      var javaObject = {
+        type: "alias",
+        modelId: 4
+      };
+      var code = function () {
+        new IdentifiedElement(javaObject);
+      };
+      assert.throws(code, new RegExp("Id not defined"));
+    });
+
+    it("from artificial obj", function () {
+      var javaObject = {
+        type: "alias",
+        objectId: "el_id",
+        modelId: "m_id"
+      };
+      var ie = new IdentifiedElement(javaObject);
+      var point = ie.getPoint();
+      expect(point).to.equal(null);
+      assert.equal(logger.getWarnings().length, 1);
+    });
+
+  });
+
+  it("equals", function () {
+    var javaObj = {
+      objectId: "31165",
+      modelId: 269,
+      type: "alias"
+    };
+    var ie = new IdentifiedElement(javaObj);
+    var ie2 = new IdentifiedElement(javaObj);
+
+    var ie3 = helper.createIdentifiedElement();
+
+    assert.ok(ie.equals(ie));
+    assert.ok(ie.equals(ie2));
+    assert.notOk(ie.equals(ie3));
+
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/data/LayoutAlias-test.js b/frontend-js/src/test/js/map/data/LayoutAlias-test.js
index d4fd9295f4f7695813cc543d6677c8486991747f..902b350751c922fe3c35bcc39481d3203f59bee9 100644
--- a/frontend-js/src/test/js/map/data/LayoutAlias-test.js
+++ b/frontend-js/src/test/js/map/data/LayoutAlias-test.js
@@ -1,130 +1,130 @@
-"use strict";
-
-require("../../mocha-config.js");
-
-var LayoutAlias = require('../../../../main/js/map/data/LayoutAlias');
-var assert = require('assert');
-
-var logger = require('../../logger');
-
-describe('LayoutAlias', function() {
-
-  it("constructor", function() {
-    var aliasId = 908;
-    var val = 0.2;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : aliasId,
-      value : val,
-      color : colorVal,
-      geneVariations : [ {} ]
-    };
-    var alias = new LayoutAlias(javaObj);
-    assert.ok(alias);
-    assert.equal(aliasId, alias.getId());
-    assert.equal(val, alias.getValue());
-    assert.equal(colorVal, alias.getColor());
-    assert.equal(alias.getGeneVariants().length, 1);
-  });
-
-  it("update", function() {
-    var aliasId = 908;
-    var val = 0.2;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : aliasId,
-      value : val,
-      color : colorVal,
-      geneVariations : [ {} ]
-    };
-    var alias = new LayoutAlias(javaObj);
-
-    var aliasId2 = 908;
-    var val2 = 0.2;
-    var colorVal2 = {
-      a : 24
-    };
-    var javaObj2 = {
-      idObject : aliasId2,
-      value : val2,
-      color : colorVal2,
-      type : LayoutAlias.GENETIC_VARIANT
-    };
-
-    var alias2 = new LayoutAlias(javaObj2);
-    alias.update(alias2);
-
-    assert.equal(aliasId2, alias2.getId());
-    assert.equal(val2, alias2.getValue());
-    assert.equal(colorVal2, alias2.getColor());
-    assert.equal(alias2.getGeneVariants().length, 0);
-  });
-
-  it("invalid update", function() {
-    var alias = helper.createLayoutAlias();
-    try {
-      alias.update("invalid data");
-      assert.ok(false);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("Unknown parameter type") >= 0);
-    }
-
-  });
-
-  it("genetic variant constructor", function() {
-    var aliasId = 908;
-    var val = 0.2;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : aliasId,
-      value : val,
-      color : colorVal,
-      type : LayoutAlias.GENETIC_VARIANT
-    };
-    var alias = new LayoutAlias(javaObj);
-    assert.equal(alias.getType(), LayoutAlias.GENETIC_VARIANT);
-  });
-
-  it("GENERIC constructor", function() {
-    var aliasId = 908;
-    var val = 0.2;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : aliasId,
-      value : val,
-      color : colorVal,
-      type : LayoutAlias.GENERIC
-    };
-    var alias = new LayoutAlias(javaObj);
-    assert.equal(alias.getType(), LayoutAlias.GENERIC);
-    assert.equal(logger.getWarnings().length, 0);
-  });
-  it("unknown type constructor", function() {
-    var aliasId = 908;
-    var val = 0.2;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : aliasId,
-      value : val,
-      color : colorVal,
-      type : "some strange val"
-    };
-
-    try {
-      new LayoutAlias(javaObj);
-      assert.ok(false);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("Unknown type") >= 0);
-    }
-  });
-});
+"use strict";
+
+require("../../mocha-config.js");
+
+var LayoutAlias = require('../../../../main/js/map/data/LayoutAlias');
+var assert = require('assert');
+
+var logger = require('../../logger');
+
+describe('LayoutAlias', function () {
+
+  it("constructor", function () {
+    var aliasId = 908;
+    var val = 0.2;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: aliasId,
+      value: val,
+      color: colorVal,
+      geneVariations: [{}]
+    };
+    var alias = new LayoutAlias(javaObj);
+    assert.ok(alias);
+    assert.equal(aliasId, alias.getId());
+    assert.equal(val, alias.getValue());
+    assert.equal(colorVal, alias.getColor());
+    assert.equal(alias.getGeneVariants().length, 1);
+  });
+
+  it("update", function () {
+    var aliasId = 908;
+    var val = 0.2;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: aliasId,
+      value: val,
+      color: colorVal,
+      geneVariations: [{}]
+    };
+    var alias = new LayoutAlias(javaObj);
+
+    var aliasId2 = 908;
+    var val2 = 0.2;
+    var colorVal2 = {
+      a: 24
+    };
+    var javaObj2 = {
+      idObject: aliasId2,
+      value: val2,
+      color: colorVal2,
+      type: LayoutAlias.GENETIC_VARIANT
+    };
+
+    var alias2 = new LayoutAlias(javaObj2);
+    alias.update(alias2);
+
+    assert.equal(aliasId2, alias2.getId());
+    assert.equal(val2, alias2.getValue());
+    assert.equal(colorVal2, alias2.getColor());
+    assert.equal(alias2.getGeneVariants().length, 0);
+  });
+
+  it("invalid update", function () {
+    var alias = helper.createLayoutAlias();
+    try {
+      alias.update("invalid data");
+      assert.ok(false);
+    } catch (exception) {
+      assert.ok(exception.message.indexOf("Unknown parameter type") >= 0);
+    }
+
+  });
+
+  it("genetic variant constructor", function () {
+    var aliasId = 908;
+    var val = 0.2;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: aliasId,
+      value: val,
+      color: colorVal,
+      type: LayoutAlias.GENETIC_VARIANT
+    };
+    var alias = new LayoutAlias(javaObj);
+    assert.equal(alias.getType(), LayoutAlias.GENETIC_VARIANT);
+  });
+
+  it("GENERIC constructor", function () {
+    var aliasId = 908;
+    var val = 0.2;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: aliasId,
+      value: val,
+      color: colorVal,
+      type: LayoutAlias.GENERIC
+    };
+    var alias = new LayoutAlias(javaObj);
+    assert.equal(alias.getType(), LayoutAlias.GENERIC);
+    assert.equal(logger.getWarnings().length, 0);
+  });
+  it("unknown type constructor", function () {
+    var aliasId = 908;
+    var val = 0.2;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: aliasId,
+      value: val,
+      color: colorVal,
+      type: "some strange val"
+    };
+
+    try {
+      new LayoutAlias(javaObj);
+      assert.ok(false);
+    } catch (exception) {
+      assert.ok(exception.message.indexOf("Unknown type") >= 0);
+    }
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/LayoutData-test.js b/frontend-js/src/test/js/map/data/LayoutData-test.js
index 92413c34b7abce6c062c706ff29ee636babd71ab..89c1b2d6244e4aeb48bf9103182c10b6f9efb578 100644
--- a/frontend-js/src/test/js/map/data/LayoutData-test.js
+++ b/frontend-js/src/test/js/map/data/LayoutData-test.js
@@ -1,117 +1,117 @@
-"use strict";
-
-var LayoutAlias = require('../../../../main/js/map/data/LayoutAlias');
-var LayoutData = require('../../../../main/js/map/data/LayoutData');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-var logger = require('../../logger');
-
-describe('LayoutData', function() {
-  describe("constructor", function() {
-    it("default", function() {
-      var layoutId = 3;
-      var name = "nm";
-      var overlay = new LayoutData(layoutId, name);
-      assert.equal(overlay.getId(), layoutId);
-      assert.equal(overlay.getName(), name);
-    });
-
-    it("with content", function() {
-      var overlay = new LayoutData({
-        content : "test"
-      });
-      assert.ok(overlay.getContent());
-    });
-
-    it("from json obj", function() {
-      var obj = {
-        modelId : 15781,
-        name : "test",
-        description : "test",
-        status : "OK",
-        progress : "0.00",
-        directory : "dir/subDir",
-        creator : "admin ",
-        inputDataAvailable : "true",
-        idObject : 14852
-      };
-      var data = new LayoutData(obj);
-      assert.ok(data);
-      assert.equal(data.getInputDataAvailable(), true);
-      assert.equal(data.getDirectory(), "dir/subDir");
-    });
-
-    it("from problematic json", function() {
-      var obj = {
-        modelId : 15781,
-        name : "test",
-        inputDataAvailable : "wtf",
-        idObject : 14852
-      };
-      var data = new LayoutData(obj);
-      assert.ok(data);
-      assert.equal(logger.getWarnings().length, 1);
-    });
-  });
-
-  it("updateAlias", function() {
-    var layoutId = 3;
-    var name = "nm";
-    var overlay = new LayoutData(layoutId, name);
-
-    var aliasId = 4;
-    var alias = new LayoutAlias({
-      idObject : aliasId,
-    });
-
-    overlay.addAlias(alias);
-
-    assert.equal(overlay.getAliasById(aliasId).getValue(), null);
-
-    var val = 5;
-    var alias2 = new LayoutAlias({
-      idObject : aliasId,
-      value : val,
-    });
-    overlay.updateAlias(alias2);
-
-    assert.equal(overlay.getAliasById(aliasId).getValue(), val);
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it("getFullAliasById", function() {
-    var layoutId = 18076;
-    var name = "nm";
-    var overlay = new LayoutData(layoutId, name);
-
-    var aliasId = 329163;
-    var alias = new LayoutAlias({
-      idObject : aliasId,
-      modelId : 15781,
-    });
-
-    overlay.addAlias(alias);
-
-    return overlay.getFullAliasById(aliasId).then(function(data) {
-      assert.equal(data.getType(), LayoutAlias.GENERIC);
-    });
-  });
-
-  it("update invalid alias", function() {
-    var layoutId = 3;
-    var name = "nm";
-    var overlay = new LayoutData(layoutId, name);
-
-    var aliasId = 4;
-    var alias = new LayoutAlias({
-      idObject : aliasId,
-    });
-
-    overlay.updateAlias(alias);
-
-    assert.equal(logger.getWarnings().length, 1);
-  });
-});
+"use strict";
+
+var LayoutAlias = require('../../../../main/js/map/data/LayoutAlias');
+var LayoutData = require('../../../../main/js/map/data/LayoutData');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+var logger = require('../../logger');
+
+describe('LayoutData', function () {
+  describe("constructor", function () {
+    it("default", function () {
+      var layoutId = 3;
+      var name = "nm";
+      var overlay = new LayoutData(layoutId, name);
+      assert.equal(overlay.getId(), layoutId);
+      assert.equal(overlay.getName(), name);
+    });
+
+    it("with content", function () {
+      var overlay = new LayoutData({
+        content: "test"
+      });
+      assert.ok(overlay.getContent());
+    });
+
+    it("from json obj", function () {
+      var obj = {
+        modelId: 15781,
+        name: "test",
+        description: "test",
+        status: "OK",
+        progress: "0.00",
+        directory: "dir/subDir",
+        creator: "admin ",
+        inputDataAvailable: "true",
+        idObject: 14852
+      };
+      var data = new LayoutData(obj);
+      assert.ok(data);
+      assert.equal(data.getInputDataAvailable(), true);
+      assert.equal(data.getDirectory(), "dir/subDir");
+    });
+
+    it("from problematic json", function () {
+      var obj = {
+        modelId: 15781,
+        name: "test",
+        inputDataAvailable: "wtf",
+        idObject: 14852
+      };
+      var data = new LayoutData(obj);
+      assert.ok(data);
+      assert.equal(logger.getWarnings().length, 1);
+    });
+  });
+
+  it("updateAlias", function () {
+    var layoutId = 3;
+    var name = "nm";
+    var overlay = new LayoutData(layoutId, name);
+
+    var aliasId = 4;
+    var alias = new LayoutAlias({
+      idObject: aliasId
+    });
+
+    overlay.addAlias(alias);
+
+    assert.equal(overlay.getAliasById(aliasId).getValue(), null);
+
+    var val = 5;
+    var alias2 = new LayoutAlias({
+      idObject: aliasId,
+      value: val
+    });
+    overlay.updateAlias(alias2);
+
+    assert.equal(overlay.getAliasById(aliasId).getValue(), val);
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it("getFullAliasById", function () {
+    var layoutId = 18076;
+    var name = "nm";
+    var overlay = new LayoutData(layoutId, name);
+
+    var aliasId = 329163;
+    var alias = new LayoutAlias({
+      idObject: aliasId,
+      modelId: 15781
+    });
+
+    overlay.addAlias(alias);
+
+    return overlay.getFullAliasById(aliasId).then(function (data) {
+      assert.equal(data.getType(), LayoutAlias.GENERIC);
+    });
+  });
+
+  it("update invalid alias", function () {
+    var layoutId = 3;
+    var name = "nm";
+    var overlay = new LayoutData(layoutId, name);
+
+    var aliasId = 4;
+    var alias = new LayoutAlias({
+      idObject: aliasId
+    });
+
+    overlay.updateAlias(alias);
+
+    assert.equal(logger.getWarnings().length, 1);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/LayoutReaction-test.js b/frontend-js/src/test/js/map/data/LayoutReaction-test.js
index 5ead64d0b40370bae01f8de2ace61d4f248001c5..eb71ac953e39d824559d38c6567d999a240d512f 100644
--- a/frontend-js/src/test/js/map/data/LayoutReaction-test.js
+++ b/frontend-js/src/test/js/map/data/LayoutReaction-test.js
@@ -1,33 +1,33 @@
-"use strict";
-
-var LayoutReaction = require('../../../../main/js/map/data/LayoutReaction');
-
-var assert = require('assert');
-
-var logger = require('../../logger');
-
-describe('LayoutReaction', function() {
-
-  it("constructor", function() {
-    var reactionId = 908;
-    var width = 3.5;
-    var reverse = false;
-    var colorVal = {
-      a : 23
-    };
-    var javaObj = {
-      idObject : reactionId,
-      width : width,
-      color : colorVal,
-      reverse : reverse
-    };
-    var reaction = new LayoutReaction(javaObj);
-    assert.ok(reaction);
-    assert.equal(reactionId, reaction.getId());
-    assert.equal(width, reaction.getWidth());
-    assert.equal(colorVal, reaction.getColor());
-    assert.equal(reverse, reaction.getReverse());
-
-    assert.equal(logger.getWarnings().length, 0);
-  });
+"use strict";
+
+var LayoutReaction = require('../../../../main/js/map/data/LayoutReaction');
+
+var assert = require('assert');
+
+var logger = require('../../logger');
+
+describe('LayoutReaction', function () {
+
+  it("constructor", function () {
+    var reactionId = 908;
+    var width = 3.5;
+    var reverse = false;
+    var colorVal = {
+      a: 23
+    };
+    var javaObj = {
+      idObject: reactionId,
+      width: width,
+      color: colorVal,
+      reverse: reverse
+    };
+    var reaction = new LayoutReaction(javaObj);
+    assert.ok(reaction);
+    assert.equal(reactionId, reaction.getId());
+    assert.equal(width, reaction.getWidth());
+    assert.equal(colorVal, reaction.getColor());
+    assert.equal(reverse, reaction.getReverse());
+
+    assert.equal(logger.getWarnings().length, 0);
+  });
 });
\ No newline at end of file
diff --git a/frontend-js/src/test/js/map/data/MapModel-test.js b/frontend-js/src/test/js/map/data/MapModel-test.js
index 46f6ae592091ffdb458c9267aaa878ccdaecac21..5bad0d3b69968bb7314a452a5e4d9bfd90a8b6b7 100644
--- a/frontend-js/src/test/js/map/data/MapModel-test.js
+++ b/frontend-js/src/test/js/map/data/MapModel-test.js
@@ -1,186 +1,186 @@
-"use strict";
-
-require("../../mocha-config");
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var LayoutData = require('../../../../main/js/map/data/LayoutData');
-var MapModel = require('../../../../main/js/map/data/MapModel');
-var NetworkError = require('../../../../main/js/NetworkError');
-var PointData = require('../../../../main/js/map/data/PointData');
-
-var assert = require('chai').assert;
-
-var logger = require('../../logger');
-
-describe('MapModel', function() {
-
-  it("MapModel constructor", function() {
-    var model = new MapModel({
-      idObject : 123
-    });
-
-    assert.equal(123, model.getId());
-
-    assert.ok(model.getLayoutsData());
-  });
-
-  it("Get layout by id", function(done) {
-    var model = helper.createModel();
-    var layout = helper.createLayout();
-
-    model.getLayoutDataById(layout.getId()).then(function() {
-      assert.ok(false, 'expected rejection');
-    }, function(exception) {
-      assert.ok(exception);
-
-      model.addLayout(layout);
-
-      return model.getLayoutDataById(layout.getId()).then(function(layoutData) {
-        assert.ok(layoutData);
-        assert.ok(layoutData instanceof LayoutData);
-        done();
-      });
-    });
-  });
-
-  it("update alias", function() {
-    var model = helper.createModel();
-
-    var aliasObj = {
-      idObject : 32,
-      modelId : model.id,
-      references : [],
-    };
-
-    model.addAlias(aliasObj);
-
-    return model.getAliasById(32).then(function(alias) {
-
-      assert.equal(alias.getName(), undefined);
-
-      var aliasObj2 = {
-        idObject : 32,
-        modelId : model.id,
-        name : "testName",
-        type : "Protein",
-        references : [],
-      };
-
-      model.addAlias(aliasObj2);
-      return model.getAliasById(32);
-    }).then(function(alias) {
-      assert.equal(alias.getName(), "testName");
-    });
-  });
-
-  it("getPointDataByPoint", function() {
-    var model = helper.createModel();
-
-    var point = new google.maps.Point(2, 3.45);
-    var point2 = new google.maps.Point(2, 3.45);
-
-    var data = model.getPointDataByPoint(point);
-
-    var data2 = model.getPointDataByPoint(point2);
-
-    assert.ok(data);
-    assert.ok(data2);
-    assert.equal(data, data2);
-  });
-
-  it("getPointDataBy invalid point", function() {
-    var model = helper.createModel();
-
-    var data = model.getPointDataByPoint({});
-
-    assert.equal(data, null);
-    assert.equal(logger.getWarnings().length, 1);
-  });
-
-  it("getAliasById", function() {
-    var model = helper.createModel();
-
-    var alias = helper.createAlias();
-
-    return model.getAliasById(alias.getId()).then(function(result) {
-      assert.equal(null, result);
-    }, function(exception) {
-      assert.ok(exception.message.indexOf("no such file"));
-      // check if this is exception about not finding file
-      model.addAlias(alias);
-      return model.getAliasById(alias.getId());
-    }).then(function(result) {
-      assert.deepEqual(alias, result);
-    });
-  });
-
-  it("getReactionById 1", function() {
-    var model = helper.createModel();
-
-    var reaction = helper.createReaction();
-
-    return model.getReactionById(reaction.getId()).then(function(result) {
-      assert.equal(null, result);
-    }, function(exception) {
-      assert.ok(exception instanceof NetworkError);
-      // check if this is exception about not finding file
-      model.addReaction(reaction);
-      return model.getReactionById(reaction.getId());
-    }).then(function(result) {
-      assert.equal(reaction, result);
-    });
-  });
-
-  it("addReaction 2", function() {
-    var model = helper.createModel();
-
-    var reaction = helper.createReaction();
-    model.addReaction(reaction);
-    assert.equal(logger.getWarnings().length, 0);
-    model.addReaction(reaction);
-    assert.equal(logger.getWarnings().length, 1);
-  });
-
-  it("getMissingElements when everything is up to date", function() {
-    var model = helper.createModel();
-
-    return model.getMissingElements({}).then(function(result) {
-      assert.equal(result.length, 0);
-    });
-  });
-
-  it("getReactionByParticipantId", function() {
-    var model;
-    return ServerConnector.getProject().then(function(project) {
-
-      model = project.getModel();
-      var ie = new IdentifiedElement({
-        modelId : 15781,
-        type : "ALIAS",
-        id : 329167
-      });
-
-      return model.getByIdentifiedElement(ie);
-    }).then(function(element) {
-
-      return model.getReactionsForElement(element);
-    }).then(function(reactions) {
-      assert.equal(reactions.length, 5);
-    });
-  });
-
-  describe("getByIdentifiedElement", function() {
-    it("by POINT", function() {
-      var model = new MapModel();
-      var ie = new IdentifiedElement({
-        modelId : 15781,
-        type : "POINT",
-        id : "(1.00,2.00)"
-      });
-      return model.getByIdentifiedElement(ie).then(function(element) {
-        assert.ok(element instanceof PointData);
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config");
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var LayoutData = require('../../../../main/js/map/data/LayoutData');
+var MapModel = require('../../../../main/js/map/data/MapModel');
+var NetworkError = require('../../../../main/js/NetworkError');
+var PointData = require('../../../../main/js/map/data/PointData');
+
+var assert = require('chai').assert;
+
+var logger = require('../../logger');
+
+describe('MapModel', function () {
+
+  it("MapModel constructor", function () {
+    var model = new MapModel({
+      idObject: 123
+    });
+
+    assert.equal(123, model.getId());
+
+    assert.ok(model.getLayoutsData());
+  });
+
+  it("Get layout by id", function (done) {
+    var model = helper.createModel();
+    var layout = helper.createLayout();
+
+    model.getLayoutDataById(layout.getId()).then(function () {
+      assert.ok(false, 'expected rejection');
+    }, function (exception) {
+      assert.ok(exception);
+
+      model.addLayout(layout);
+
+      return model.getLayoutDataById(layout.getId()).then(function (layoutData) {
+        assert.ok(layoutData);
+        assert.ok(layoutData instanceof LayoutData);
+        done();
+      });
+    });
+  });
+
+  it("update alias", function () {
+    var model = helper.createModel();
+
+    var aliasObj = {
+      idObject: 32,
+      modelId: model.id,
+      references: []
+    };
+
+    model.addAlias(aliasObj);
+
+    return model.getAliasById(32).then(function (alias) {
+
+      assert.equal(alias.getName(), undefined);
+
+      var aliasObj2 = {
+        idObject: 32,
+        modelId: model.id,
+        name: "testName",
+        type: "Protein",
+        references: []
+      };
+
+      model.addAlias(aliasObj2);
+      return model.getAliasById(32);
+    }).then(function (alias) {
+      assert.equal(alias.getName(), "testName");
+    });
+  });
+
+  it("getPointDataByPoint", function () {
+    var model = helper.createModel();
+
+    var point = new google.maps.Point(2, 3.45);
+    var point2 = new google.maps.Point(2, 3.45);
+
+    var data = model.getPointDataByPoint(point);
+
+    var data2 = model.getPointDataByPoint(point2);
+
+    assert.ok(data);
+    assert.ok(data2);
+    assert.equal(data, data2);
+  });
+
+  it("getPointDataBy invalid point", function () {
+    var model = helper.createModel();
+
+    var data = model.getPointDataByPoint({});
+
+    assert.equal(data, null);
+    assert.equal(logger.getWarnings().length, 1);
+  });
+
+  it("getAliasById", function () {
+    var model = helper.createModel();
+
+    var alias = helper.createAlias();
+
+    return model.getAliasById(alias.getId()).then(function (result) {
+      assert.equal(null, result);
+    }, function (exception) {
+      assert.ok(exception.message.indexOf("no such file"));
+      // check if this is exception about not finding file
+      model.addAlias(alias);
+      return model.getAliasById(alias.getId());
+    }).then(function (result) {
+      assert.deepEqual(alias, result);
+    });
+  });
+
+  it("getReactionById 1", function () {
+    var model = helper.createModel();
+
+    var reaction = helper.createReaction();
+
+    return model.getReactionById(reaction.getId()).then(function (result) {
+      assert.equal(null, result);
+    }, function (exception) {
+      assert.ok(exception instanceof NetworkError);
+      // check if this is exception about not finding file
+      model.addReaction(reaction);
+      return model.getReactionById(reaction.getId());
+    }).then(function (result) {
+      assert.equal(reaction, result);
+    });
+  });
+
+  it("addReaction 2", function () {
+    var model = helper.createModel();
+
+    var reaction = helper.createReaction();
+    model.addReaction(reaction);
+    assert.equal(logger.getWarnings().length, 0);
+    model.addReaction(reaction);
+    assert.equal(logger.getWarnings().length, 1);
+  });
+
+  it("getMissingElements when everything is up to date", function () {
+    var model = helper.createModel();
+
+    return model.getMissingElements({}).then(function (result) {
+      assert.equal(result.length, 0);
+    });
+  });
+
+  it("getReactionByParticipantId", function () {
+    var model;
+    return ServerConnector.getProject().then(function (project) {
+
+      model = project.getModel();
+      var ie = new IdentifiedElement({
+        modelId: 15781,
+        type: "ALIAS",
+        id: 329167
+      });
+
+      return model.getByIdentifiedElement(ie);
+    }).then(function (element) {
+
+      return model.getReactionsForElement(element);
+    }).then(function (reactions) {
+      assert.equal(reactions.length, 5);
+    });
+  });
+
+  describe("getByIdentifiedElement", function () {
+    it("by POINT", function () {
+      var model = new MapModel();
+      var ie = new IdentifiedElement({
+        modelId: 15781,
+        type: "POINT",
+        id: "(1.00,2.00)"
+      });
+      return model.getByIdentifiedElement(ie).then(function (element) {
+        assert.ok(element instanceof PointData);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/data/PointData-test.js b/frontend-js/src/test/js/map/data/PointData-test.js
index 4a4d577bcf027c3042860cfccd2c2dedb5a89fb6..3ae65031671cd55e41ddf1ceb8766c4d75325064 100644
--- a/frontend-js/src/test/js/map/data/PointData-test.js
+++ b/frontend-js/src/test/js/map/data/PointData-test.js
@@ -1,36 +1,36 @@
-"use strict";
-
-var PointData = require('../../../../main/js/map/data/PointData');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var assert = require('assert');
-
-describe('PointData', function() {
-  describe("constructor", function() {
-    it("from coordinates", function() {
-      var point = new google.maps.Point(2, 3.45);
-      var pointData = new PointData(point);
-      assert.ok(pointData);
-      assert.ok(pointData.getId());
-      assert.ok(pointData.getPoint());
-      assert.ok(pointData.getPoint() instanceof google.maps.Point);
-    });
-    it("from javaObj", function() {
-
-      var pointData = new PointData({
-        idObject : "Point2D.Double[2.0, 3.0]"
-      });
-      assert.equal(pointData.getPoint().x, 2.0);
-      assert.equal(pointData.getPoint().y, 3.0);
-    });
-
-    it("from IdentifiedObject", function() {
-
-      var pointData = new PointData({
-        idObject : "Point2D.Double[2.0, 3.0]"
-      }, 102);
-      var ie = new IdentifiedElement(pointData);
-      var pointData2 = new PointData(ie);
-      assert.equal(pointData.getModelId(), pointData2.getModelId());
-    });
-  });
-});
+"use strict";
+
+var PointData = require('../../../../main/js/map/data/PointData');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var assert = require('assert');
+
+describe('PointData', function() {
+  describe("constructor", function() {
+    it("from coordinates", function() {
+      var point = new google.maps.Point(2, 3.45);
+      var pointData = new PointData(point);
+      assert.ok(pointData);
+      assert.ok(pointData.getId());
+      assert.ok(pointData.getPoint());
+      assert.ok(pointData.getPoint() instanceof google.maps.Point);
+    });
+    it("from javaObj", function() {
+
+      var pointData = new PointData({
+        idObject : "Point2D.Double[2.0, 3.0]"
+      });
+      assert.equal(pointData.getPoint().x, 2.0);
+      assert.equal(pointData.getPoint().y, 3.0);
+    });
+
+    it("from IdentifiedObject", function() {
+
+      var pointData = new PointData({
+        idObject : "Point2D.Double[2.0, 3.0]"
+      }, 102);
+      var ie = new IdentifiedElement(pointData);
+      var pointData2 = new PointData(ie);
+      assert.equal(pointData.getModelId(), pointData2.getModelId());
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/Project-test.js b/frontend-js/src/test/js/map/data/Project-test.js
index f498364fbe53ef7d500578d8297bae07561ef504..a3e56f1806f550605021a4c2ddffeb92623675f1 100644
--- a/frontend-js/src/test/js/map/data/Project-test.js
+++ b/frontend-js/src/test/js/map/data/Project-test.js
@@ -1,43 +1,44 @@
-"use strict";
-
-var Project = require('../../../../main/js/map/data/Project');
-
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('Project', function() {
-  describe("constructor", function() {
-    it("default", function() {
-      return ServerConnector.sendGetRequest("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function(res) {
-        var project = new Project(res);
-        assert.ok(project);
-
-        assert.equal(project.getVersion(), "0");
-        assert.equal(project.getId(), 14898);
-        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
-        assert.equal(project.getProjectId(), "sample");
-        assert.deepEqual(project.getOverviewImages(), []);
-
-        assert.equal(logger.getWarnings().length, 0);
-      });
-    });
-    it("from Project obj", function() {
-      return ServerConnector.sendGetRequest("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function(res) {
-        var tmpProject = new Project(res);
-
-        var project = new Project(tmpProject);
-        assert.ok(project);
-
-        assert.equal(project.getVersion(), "0");
-        assert.equal(project.getId(), 14898);
-        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
-        assert.equal(project.getProjectId(), "sample");
-        assert.deepEqual(project.getOverviewImages(), []);
-
-        assert.equal(logger.getWarnings().length, 0);
-      });
-    });
-  });
-});
+"use strict";
+
+var Project = require('../../../../main/js/map/data/Project');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('Project', function () {
+  describe("constructor", function () {
+    it("default", function () {
+      return ServerConnector.sendGetRequest("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function (res) {
+        var project = new Project(res);
+        assert.ok(project);
+
+        assert.equal(project.getVersion(), "0");
+        assert.equal(project.getId(), 14898);
+        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
+        assert.equal(project.getProjectId(), "sample");
+        assert.deepEqual(project.getOverviewImages(), []);
+
+        assert.equal(logger.getWarnings().length, 0);
+      });
+    });
+    it("from Project obj", function () {
+      return ServerConnector.sendGetRequest("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function (res) {
+        var tmpProject = new Project(res);
+
+        var project = new Project(tmpProject);
+        assert.ok(project);
+
+        assert.equal(project.getVersion(), "0");
+        assert.equal(project.getId(), 14898);
+        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
+        assert.equal(project.getProjectId(), "sample");
+        assert.deepEqual(project.getOverviewImages(), []);
+
+        assert.equal(logger.getWarnings().length, 0);
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/Reaction-test.js b/frontend-js/src/test/js/map/data/Reaction-test.js
index f7aea569e35fcc95be20875fab56c939cef913d8..c1d97443cdbe4e4d5fd55d7ae1b0cef5fd4f14fc 100644
--- a/frontend-js/src/test/js/map/data/Reaction-test.js
+++ b/frontend-js/src/test/js/map/data/Reaction-test.js
@@ -1,49 +1,49 @@
-"use strict";
-
-require("../../mocha-config.js");
-
-var Reaction = require('../../../../main/js/map/data/Reaction');
-var assert = require('assert');
-
-var logger = require('../../logger');
-
-describe('Reaction', function() {
-
-  it("constructor from invalid", function() {
-    var javaObject = {
-      lines : [ {
-        start : Object,
-        end : Object,
-        type : "UNK"
-      } ],
-
-    };
-    try {
-      new Reaction(javaObject);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("Unknown line type") >= 0);
-    }
-  });
-
-  it("constructor from invalid 2", function() {
-    var javaObject = {
-      lines : [],
-
-    };
-    try {
-      new Reaction(javaObject);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("undefined center") >= 0);
-    }
-  });
-
-  it("constructor from Reaction", function() {
-    var reaction = helper.createReaction();
-    var reaction2 = new Reaction(reaction);
-    assert.equal(reaction2.getId(), reaction.getId());
-    assert.equal(reaction2.getCenter(), reaction.getCenter());
-    assert.equal(reaction2.getModelId(), reaction.getModelId());
-    assert.deepEqual(reaction2.getLines(), reaction.getLines());
-    assert.equal(logger.getWarnings().length, 0);
-  });
-});
+"use strict";
+
+require("../../mocha-config.js");
+
+var Reaction = require('../../../../main/js/map/data/Reaction');
+var assert = require('assert');
+
+var logger = require('../../logger');
+
+describe('Reaction', function () {
+
+  it("constructor from invalid", function () {
+    var javaObject = {
+      lines: [{
+        start: Object,
+        end: Object,
+        type: "UNK"
+      }]
+
+    };
+    try {
+      new Reaction(javaObject);
+    } catch (exception) {
+      assert.ok(exception.message.indexOf("Unknown line type") >= 0);
+    }
+  });
+
+  it("constructor from invalid 2", function () {
+    var javaObject = {
+      lines: []
+
+    };
+    try {
+      new Reaction(javaObject);
+    } catch (exception) {
+      assert.ok(exception.message.indexOf("undefined center") >= 0);
+    }
+  });
+
+  it("constructor from Reaction", function () {
+    var reaction = helper.createReaction();
+    var reaction2 = new Reaction(reaction);
+    assert.equal(reaction2.getId(), reaction.getId());
+    assert.equal(reaction2.getCenter(), reaction.getCenter());
+    assert.equal(reaction2.getModelId(), reaction.getModelId());
+    assert.deepEqual(reaction2.getLines(), reaction.getLines());
+    assert.equal(logger.getWarnings().length, 0);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/ReferenceGenome-test.js b/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
index c3eff93fddb8ccece1cf1c500dc3ad459af72550..b001486d62b6f371b27916007a138f003e4ae8dc 100644
--- a/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
+++ b/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
@@ -1,44 +1,44 @@
-"use strict";
-
-var ReferenceGenome = require('../../../../main/js/map/data/ReferenceGenome');
-var assert = require('assert');
-
-describe('ReferenceGenome', function () {
-  describe("constructor", function () {
-    it("full", function () {
-      var data = {
-        type: "TYP",
-        version: "v3",
-        localUrl: "http://google.pl/",
-        sourceUrl: "http://google.pl/",
-      };
-      var genome = new ReferenceGenome(data);
-      assert.equal(genome.getType(), data.type);
-      assert.equal(genome.getVersion(), data.version);
-      assert.equal(genome.getUrl(), data.localUrl);
-      assert.equal(genome.getGeneMappings().length, 0);
-    });
-    it("simple", function () {
-      var data = {
-        sourceUrl: "http://google.pl/",
-        geneMapping: [{}],
-      };
-      var genome = new ReferenceGenome(data);
-      assert.equal(genome.getUrl(), data.sourceUrl);
-      assert.equal(genome.getGeneMappings().length, 1);
-    });
-
-    it("empty argument", function () {
-      var genome = new ReferenceGenome();
-      assert.ok(genome);
-    });
-
-    it("null argument", function () {
-      var genome = new ReferenceGenome(null);
-      assert.ok(genome);
-    });
-
-  });
-
-
-});
+"use strict";
+
+var ReferenceGenome = require('../../../../main/js/map/data/ReferenceGenome');
+var assert = require('assert');
+
+describe('ReferenceGenome', function () {
+  describe("constructor", function () {
+    it("full", function () {
+      var data = {
+        type: "TYP",
+        version: "v3",
+        localUrl: "http://google.pl/",
+        sourceUrl: "http://google.pl/"
+      };
+      var genome = new ReferenceGenome(data);
+      assert.equal(genome.getType(), data.type);
+      assert.equal(genome.getVersion(), data.version);
+      assert.equal(genome.getUrl(), data.localUrl);
+      assert.equal(genome.getGeneMappings().length, 0);
+    });
+    it("simple", function () {
+      var data = {
+        sourceUrl: "http://google.pl/",
+        geneMapping: [{}]
+      };
+      var genome = new ReferenceGenome(data);
+      assert.equal(genome.getUrl(), data.sourceUrl);
+      assert.equal(genome.getGeneMappings().length, 1);
+    });
+
+    it("empty argument", function () {
+      var genome = new ReferenceGenome();
+      assert.ok(genome);
+    });
+
+    it("null argument", function () {
+      var genome = new ReferenceGenome(null);
+      assert.ok(genome);
+    });
+
+  });
+
+
+});
diff --git a/frontend-js/src/test/js/map/data/ReferenceGenomeGeneMapping-test.js b/frontend-js/src/test/js/map/data/ReferenceGenomeGeneMapping-test.js
index 9b05299fba13bb7ad25e523bd84bdc4a771f3b1e..3a55bbfb6bc426aa4f7b6bada2b0c66716ff3bcc 100644
--- a/frontend-js/src/test/js/map/data/ReferenceGenomeGeneMapping-test.js
+++ b/frontend-js/src/test/js/map/data/ReferenceGenomeGeneMapping-test.js
@@ -1,16 +1,16 @@
-"use strict";
-
-var ReferenceGenomeGeneMapping = require('../../../../main/js/map/data/ReferenceGenomeGeneMapping');
-var assert = require('assert');
-
-describe('ReferenceGenomeGeneMapping', function() {
-  it("constructor", function() {
-    var data = {
-      name: "TYPe",
-      localUrl : "http://google.pl/",
-    };
-    var mapping = new ReferenceGenomeGeneMapping(data);
-    assert.equal(mapping.getName(), data.name);
-    assert.equal(mapping.getUrl(), data.localUrl);
-  });
-});
+"use strict";
+
+var ReferenceGenomeGeneMapping = require('../../../../main/js/map/data/ReferenceGenomeGeneMapping');
+var assert = require('assert');
+
+describe('ReferenceGenomeGeneMapping', function () {
+  it("constructor", function () {
+    var data = {
+      name: "TYPe",
+      localUrl: "http://google.pl/"
+    };
+    var mapping = new ReferenceGenomeGeneMapping(data);
+    assert.equal(mapping.getName(), data.name);
+    assert.equal(mapping.getUrl(), data.localUrl);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/TargettingStructure-test.js b/frontend-js/src/test/js/map/data/TargettingStructure-test.js
index 66a2c4816945e5107d32e28d060f41a3aa5c07f9..b0f5612d5cbf55ea89a1e4a074edb5a526fe8522 100644
--- a/frontend-js/src/test/js/map/data/TargettingStructure-test.js
+++ b/frontend-js/src/test/js/map/data/TargettingStructure-test.js
@@ -1,41 +1,40 @@
-"use strict";
-
-/* exported logger */
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('TargettingStructure', function() {
-  it("getTargetsForIdentifiedElement", function() {
-    helper.setUrl("http://test/?id=drug_target_sample");
-
-    var map, searchDb;
-    return ServerConnector.getProject("drug_target_sample").then(function(project) {
-      map = helper.createCustomMap(project);
-      searchDb = helper.createDrugDbOverlay(map);
-      return searchDb.searchByQuery("NADH");
-    }).then(function(drugs) {
-      var drug = drugs[0][0];
-      var ie = new IdentifiedElement({
-        id : 436152,
-        modelId : 20637,
-        type : 'ALIAS'
-      });
-      var targets = drug.getTargetsForIdentifiedElement(ie);
-      assert.equal(targets.length, 1);
-
-      ie = new IdentifiedElement({
-        id : 111111111111,
-        modelId : 20637,
-        type : 'ALIAS'
-      });
-      targets = drug.getTargetsForIdentifiedElement(ie);
-      assert.equal(targets.length, 0);
-
-    });
-  });
-});
+"use strict";
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('TargettingStructure', function () {
+  it("getTargetsForIdentifiedElement", function () {
+    helper.setUrl("http://test/?id=drug_target_sample");
+
+    var map, searchDb;
+    return ServerConnector.getProject("drug_target_sample").then(function (project) {
+      map = helper.createCustomMap(project);
+      searchDb = helper.createDrugDbOverlay(map);
+      return searchDb.searchByQuery("NADH");
+    }).then(function (drugs) {
+      var drug = drugs[0][0];
+      var ie = new IdentifiedElement({
+        id: 436152,
+        modelId: 20637,
+        type: 'ALIAS'
+      });
+      var targets = drug.getTargetsForIdentifiedElement(ie);
+      assert.equal(targets.length, 1);
+
+      ie = new IdentifiedElement({
+        id: 111111111111,
+        modelId: 20637,
+        type: 'ALIAS'
+      });
+      targets = drug.getTargetsForIdentifiedElement(ie);
+      assert.equal(targets.length, 0);
+      assert.equal(0, logger.getWarnings().length);
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/User-test.js b/frontend-js/src/test/js/map/data/User-test.js
index a8ec996794c0a1ca81f757855f9880bb1ff015db..6b432464293cb1aeaa5d02dde6326da8585ad5f3 100644
--- a/frontend-js/src/test/js/map/data/User-test.js
+++ b/frontend-js/src/test/js/map/data/User-test.js
@@ -1,58 +1,59 @@
-"use strict";
-
-require("../../mocha-config");
-
-var User = require('../../../../main/js/map/data/User');
-
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('Project', function () {
-  describe("constructor", function () {
-    it("empty data", function () {
-      var user = new User({});
-      assert.ok(user);
-
-      assert.equal(logger.getWarnings().length, 0);
-    });
-  });
-
-  describe("setPrivilege", function () {
-    it("non existing data", function () {
-      var user = new User({});
-      assert.ok(user);
-
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var privilegeType = configuration.getPrivilegeTypes()[0];
-        user.setPrivilege({type: privilegeType, value: true});
-        assert.ok(user.hasPrivilege(privilegeType));
-      });
-    });
-
-    it("existing data", function () {
-      var user = new User({});
-      assert.ok(user);
-
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var privilegeType = configuration.getPrivilegeTypes()[0];
-        user.setPrivilege({type: privilegeType, value: false});
-        user.setPrivilege({type: privilegeType, value: true});
-        assert.ok(user.hasPrivilege(privilegeType));
-      });
-    });
-
-    it("undefined value", function () {
-      var user = new User({});
-      assert.ok(user);
-
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        var privilegeType = configuration.getPrivilegeTypes()[0];
-        user.setPrivilege({type: privilegeType, value: false});
-        user.setPrivilege({type: privilegeType});
-        assert.ok(user.hasPrivilege(privilegeType));
-      });
-    });
-  });
-});
+"use strict";
+
+require("../../mocha-config");
+
+var User = require('../../../../main/js/map/data/User');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('Project', function () {
+  describe("constructor", function () {
+    it("empty data", function () {
+      var user = new User({});
+      assert.ok(user);
+
+      assert.equal(logger.getWarnings().length, 0);
+    });
+  });
+
+  describe("setPrivilege", function () {
+    it("non existing data", function () {
+      var user = new User({});
+      assert.ok(user);
+
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var privilegeType = configuration.getPrivilegeTypes()[0];
+        user.setPrivilege({type: privilegeType, value: true});
+        assert.ok(user.hasPrivilege(privilegeType));
+      });
+    });
+
+    it("existing data", function () {
+      var user = new User({});
+      assert.ok(user);
+
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var privilegeType = configuration.getPrivilegeTypes()[0];
+        user.setPrivilege({type: privilegeType, value: false});
+        user.setPrivilege({type: privilegeType, value: true});
+        assert.ok(user.hasPrivilege(privilegeType));
+      });
+    });
+
+    it("undefined value", function () {
+      var user = new User({});
+      assert.ok(user);
+
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        var privilegeType = configuration.getPrivilegeTypes()[0];
+        user.setPrivilege({type: privilegeType, value: false});
+        user.setPrivilege({type: privilegeType});
+        assert.ok(user.hasPrivilege(privilegeType));
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/UserPreferences-test.js b/frontend-js/src/test/js/map/data/UserPreferences-test.js
index 6a940f7717ada5fb8f4ea83d0edc83b4e4de430b..95299f8f97abe90e48e6bb811e4e0c900882af41 100644
--- a/frontend-js/src/test/js/map/data/UserPreferences-test.js
+++ b/frontend-js/src/test/js/map/data/UserPreferences-test.js
@@ -1,27 +1,27 @@
-"use strict";
-
-require("../../mocha-config");
-/* exported logger */
-
-var UserPreferences = require('../../../../main/js/map/data/UserPreferences');
-
-var logger = require('../../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-describe('UserPreferences', function () {
-  it("constructor", function () {
-    return helper.readFile("testFiles/preferences.json").then(function (content) {
-      var object = new UserPreferences(JSON.parse(content));
-      assert.ok(object);
-      assert.notOk(object.getProjectUpload().autoResize);
-      assert.ok(object.getProjectUpload().cacheData);
-
-      assert.ok(object.getElementAnnotators("lcsb.mapviewer.model.map.species.Protein").length > 0);
-      assert.ok(object.getElementValidAnnotations("lcsb.mapviewer.model.map.species.Protein").length > 0);
-      assert.ok(object.getElementRequiredAnnotations("lcsb.mapviewer.model.map.species.Protein").requiredAtLeastOnce);
-      assert.ok(object.getElementRequiredAnnotations("lcsb.mapviewer.model.map.species.Protein").list.length > 0);
-    });
-  });
-});
+"use strict";
+
+require("../../mocha-config");
+
+var UserPreferences = require('../../../../main/js/map/data/UserPreferences');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('UserPreferences', function () {
+  it("constructor", function () {
+    return helper.readFile("testFiles/preferences.json").then(function (content) {
+      var object = new UserPreferences(JSON.parse(content));
+      assert.ok(object);
+      assert.notOk(object.getProjectUpload().autoResize);
+      assert.ok(object.getProjectUpload().cacheData);
+
+      assert.ok(object.getElementAnnotators("lcsb.mapviewer.model.map.species.Protein").length > 0);
+      assert.ok(object.getElementValidAnnotations("lcsb.mapviewer.model.map.species.Protein").length > 0);
+      assert.ok(object.getElementRequiredAnnotations("lcsb.mapviewer.model.map.species.Protein").requiredAtLeastOnce);
+      assert.ok(object.getElementRequiredAnnotations("lcsb.mapviewer.model.map.species.Protein").list.length > 0);
+      assert.equal(0, logger.getWarnings().length);
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/marker/AliasMarker-test.js b/frontend-js/src/test/js/map/marker/AliasMarker-test.js
index a272d9b704a6cb759b578839c5ca071d0ec86da2..f7f10ead74c5b8aea29e9cefe937a41862f05b27 100644
--- a/frontend-js/src/test/js/map/marker/AliasMarker-test.js
+++ b/frontend-js/src/test/js/map/marker/AliasMarker-test.js
@@ -1,106 +1,106 @@
-"use strict";
-
-require("../../mocha-config.js");
-
-var ServerConnector = require('../../ServerConnector-mock');
-
-var logger = require('../../logger');
-
-var AliasMarker = require('../../../../main/js/map/marker/AliasMarker');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var assert = require('assert');
-
-describe('AliasMarker', function () {
-
-  it("Constructor", function () {
-    var map, alias, marker;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      return map.getModel().getAliasById(329171);
-    }).then(function (result) {
-      alias = result;
-
-      var identifiedElement = new IdentifiedElement(alias);
-      identifiedElement.setIcon("empty.png");
-
-      marker = new AliasMarker({
-        element: identifiedElement,
-        map: map
-      });
-
-      assert.equal(alias.getId(), marker.getId());
-      assert.equal(map, marker.getCustomMap());
-      assert.equal("empty.png", marker.getIcon());
-      return marker.init();
-    }).then(function () {
-      assert.equal(alias, marker.getAliasData());
-      assert.ok(marker._marker);
-      assert.ok(marker.getBounds());
-      assert.equal(0, logger.getWarnings().length);
-    });
-  });
-
-  it("getIcon", function () {
-    var map = helper.createCustomMap();
-    var element = helper.createAlias(map);
-    var marker = new AliasMarker({
-      element: new IdentifiedElement(element),
-      map: map
-    });
-    var icon = "test.png";
-    marker.addIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.addIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.removeIcon("test.png");
-    assert.equal(icon, marker.getIcon());
-    marker.removeIcon("test.png");
-    assert.equal(undefined, marker.getIcon());
-  });
-
-  it("click on marker", function () {
-    var map;
-    var marker;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      return map.getModel().getAliasById(329171);
-    }).then(function (alias) {
-
-      var identifiedElement = new IdentifiedElement(alias);
-
-      marker = new AliasMarker({
-        element: identifiedElement,
-        map: map
-      });
-      return marker.init();
-    }).then(function () {
-      return google.maps.event.trigger(marker.getGoogleMarker(), "click");
-    });
-  });
-
-  it("click on marker when chemical is not available", function () {
-    var projectId = "complex_model_with_submaps";
-    helper.setUrl("http://test/?id=" + projectId);
-    var map;
-    var marker;
-    return ServerConnector.getProject(projectId).then(function (project) {
-      map = helper.createCustomMap(project);
-      var ov = helper.createChemicalDbOverlay(map);
-      ov.setAllowGeneralSearch(false);
-      ov.setAllowSearchById(false);
-      return map.getModel().getAliasById(345334);
-    }).then(function (alias) {
-      var identifiedElement = new IdentifiedElement(alias);
-
-      marker = new AliasMarker({
-        element: identifiedElement,
-        map: map
-      });
-      return marker.init();
-    }).then(function () {
-
-      return google.maps.event.trigger(marker.getGoogleMarker(), "click");
-    });
-  });
-
-});
+"use strict";
+
+require("../../mocha-config.js");
+
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var AliasMarker = require('../../../../main/js/map/marker/AliasMarker');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var assert = require('assert');
+
+describe('AliasMarker', function () {
+
+  it("Constructor", function () {
+    var map, alias, marker;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      return map.getModel().getAliasById(329171);
+    }).then(function (result) {
+      alias = result;
+
+      var identifiedElement = new IdentifiedElement(alias);
+      identifiedElement.setIcon("empty.png");
+
+      marker = new AliasMarker({
+        element: identifiedElement,
+        map: map
+      });
+
+      assert.equal(alias.getId(), marker.getId());
+      assert.equal(map, marker.getCustomMap());
+      assert.equal("empty.png", marker.getIcon());
+      return marker.init();
+    }).then(function () {
+      assert.equal(alias, marker.getAliasData());
+      assert.ok(marker._marker);
+      assert.ok(marker.getBounds());
+      assert.equal(0, logger.getWarnings().length);
+    });
+  });
+
+  it("getIcon", function () {
+    var map = helper.createCustomMap();
+    var element = helper.createAlias(map);
+    var marker = new AliasMarker({
+      element: new IdentifiedElement(element),
+      map: map
+    });
+    var icon = "test.png";
+    marker.addIcon("test.png");
+    assert.equal(icon, marker.getIcon());
+    marker.addIcon("test.png");
+    assert.equal(icon, marker.getIcon());
+    marker.removeIcon("test.png");
+    assert.equal(icon, marker.getIcon());
+    marker.removeIcon("test.png");
+    assert.equal(undefined, marker.getIcon());
+  });
+
+  it("click on marker", function () {
+    var map;
+    var marker;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      return map.getModel().getAliasById(329171);
+    }).then(function (alias) {
+
+      var identifiedElement = new IdentifiedElement(alias);
+
+      marker = new AliasMarker({
+        element: identifiedElement,
+        map: map
+      });
+      return marker.init();
+    }).then(function () {
+      return google.maps.event.trigger(marker.getGoogleMarker(), "click");
+    });
+  });
+
+  it("click on marker when chemical is not available", function () {
+    var projectId = "complex_model_with_submaps";
+    helper.setUrl("http://test/?id=" + projectId);
+    var map;
+    var marker;
+    return ServerConnector.getProject(projectId).then(function (project) {
+      map = helper.createCustomMap(project);
+      var ov = helper.createChemicalDbOverlay(map);
+      ov.setAllowGeneralSearch(false);
+      ov.setAllowSearchById(false);
+      return map.getModel().getAliasById(345334);
+    }).then(function (alias) {
+      var identifiedElement = new IdentifiedElement(alias);
+
+      marker = new AliasMarker({
+        element: identifiedElement,
+        map: map
+      });
+      return marker.init();
+    }).then(function () {
+
+      return google.maps.event.trigger(marker.getGoogleMarker(), "click");
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/marker/MarkerSurfaceCollection-test.js b/frontend-js/src/test/js/map/marker/MarkerSurfaceCollection-test.js
index d237863b0fd9b7954a556e55738dcd7aebced1af..c091f31dac8140d2572b97356a6f8537dce33cd4 100644
--- a/frontend-js/src/test/js/map/marker/MarkerSurfaceCollection-test.js
+++ b/frontend-js/src/test/js/map/marker/MarkerSurfaceCollection-test.js
@@ -1,134 +1,134 @@
-"use strict";
-
-require("../../mocha-config.js");
-
-var ServerConnector = require('../../ServerConnector-mock');
-
-/* exported logger */
-
-// noinspection JSUnusedLocalSymbols
-var logger = require('../../logger');
-
-var MarkerSurfaceCollection = require('../../../../main/js/map/marker/MarkerSurfaceCollection');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var assert = require('assert');
-
-describe('MarkerSurfaceCollection', function () {
-
-  describe("addMarker", function () {
-    it("update marker", function () {
-      var map, marker1, marker2, collection;
-      var element = new IdentifiedElement({
-        id: 329159,
-        modelId: 15781,
-        type: "ALIAS"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.addMarker({element: element, icons: ["empty.png"]});
-      }).then(function (result) {
-        marker1 = result;
-        element.setIcon("another.png");
-        return collection.addMarker({element: element, icons: ["empty2.png"]});
-      }).then(function (result) {
-        marker2 = result;
-        assert.equal(marker1, marker2);
-      });
-    });
-
-    it("reaction marker", function () {
-      var map, overlay, collection;
-      var element = new IdentifiedElement({
-        id: 153508,
-        modelId: 15781,
-        type: "REACTION"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        overlay = helper.createDbOverlay(map);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.addMarker({element: element, icons: ["empty.png"]});
-      }).then(function (result) {
-        assert.ok(result.getReactionData());
-      });
-    });
-
-    it("click on marker", function () {
-      var map, marker, collection;
-      var element = new IdentifiedElement({
-        id: 329159,
-        modelId: 15781,
-        type: "ALIAS"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.addMarker({element: element, icons: ["empty.png"]});
-      }).then(function (result) {
-        marker = result;
-        return marker.onClickHandler();
-      });
-    });
-
-  });
-
-  describe("createSurfaceForDbOverlay", function () {
-    it("click on element surface", function () {
-      var map, collection, overlay;
-      var element = new IdentifiedElement({
-        id: 329159,
-        modelId: 15781,
-        type: "ALIAS"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        overlay = helper.createSearchDbOverlay(map);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.createSurfaceForDbOverlay(element, overlay);
-      }).then(function (surface) {
-        return surface.onClickHandler();
-      });
-    });
-
-    it("click on reaction surface", function () {
-      var map, collection, overlay;
-      var element = new IdentifiedElement({
-        id: 153508,
-        modelId: 15781,
-        type: "REACTION"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        overlay = helper.createSearchDbOverlay(map);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.createSurfaceForDbOverlay(element, overlay);
-      }).then(function (surface) {
-        return surface.onClickHandler();
-      });
-    });
-    it("update surface", function () {
-      var map, collection, marker1, marker2, overlay;
-      var element = new IdentifiedElement({
-        id: 329159,
-        modelId: 15781,
-        type: "ALIAS"
-      });
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        overlay = helper.createDbOverlay(map);
-        collection = map.getMarkerSurfaceCollection();
-        return collection.createSurfaceForDbOverlay(element, overlay);
-      }).then(function (result) {
-        marker1 = result;
-        element.setColor("another.png");
-        return collection.createSurfaceForDbOverlay(element, overlay);
-      }).then(function (result) {
-        marker2 = result;
-        assert.equal(marker1, marker2);
-      });
-    });
-
-  });
-
-});
+"use strict";
+
+require("../../mocha-config.js");
+
+var ServerConnector = require('../../ServerConnector-mock');
+
+/* exported logger */
+
+// noinspection JSUnusedLocalSymbols
+var logger = require('../../logger');
+
+var MarkerSurfaceCollection = require('../../../../main/js/map/marker/MarkerSurfaceCollection');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var assert = require('assert');
+
+describe('MarkerSurfaceCollection', function () {
+
+  describe("addMarker", function () {
+    it("update marker", function () {
+      var map, marker1, marker2, collection;
+      var element = new IdentifiedElement({
+        id: 329159,
+        modelId: 15781,
+        type: "ALIAS"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.addMarker({element: element, icons: ["empty.png"]});
+      }).then(function (result) {
+        marker1 = result;
+        element.setIcon("another.png");
+        return collection.addMarker({element: element, icons: ["empty2.png"]});
+      }).then(function (result) {
+        marker2 = result;
+        assert.equal(marker1, marker2);
+      });
+    });
+
+    it("reaction marker", function () {
+      var map, overlay, collection;
+      var element = new IdentifiedElement({
+        id: 153508,
+        modelId: 15781,
+        type: "REACTION"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        overlay = helper.createDbOverlay(map);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.addMarker({element: element, icons: ["empty.png"]});
+      }).then(function (result) {
+        assert.ok(result.getReactionData());
+      });
+    });
+
+    it("click on marker", function () {
+      var map, marker, collection;
+      var element = new IdentifiedElement({
+        id: 329159,
+        modelId: 15781,
+        type: "ALIAS"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.addMarker({element: element, icons: ["empty.png"]});
+      }).then(function (result) {
+        marker = result;
+        return marker.onClickHandler();
+      });
+    });
+
+  });
+
+  describe("createSurfaceForDbOverlay", function () {
+    it("click on element surface", function () {
+      var map, collection, overlay;
+      var element = new IdentifiedElement({
+        id: 329159,
+        modelId: 15781,
+        type: "ALIAS"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        overlay = helper.createSearchDbOverlay(map);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.createSurfaceForDbOverlay(element, overlay);
+      }).then(function (surface) {
+        return surface.onClickHandler();
+      });
+    });
+
+    it("click on reaction surface", function () {
+      var map, collection, overlay;
+      var element = new IdentifiedElement({
+        id: 153508,
+        modelId: 15781,
+        type: "REACTION"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        overlay = helper.createSearchDbOverlay(map);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.createSurfaceForDbOverlay(element, overlay);
+      }).then(function (surface) {
+        return surface.onClickHandler();
+      });
+    });
+    it("update surface", function () {
+      var map, collection, marker1, marker2, overlay;
+      var element = new IdentifiedElement({
+        id: 329159,
+        modelId: 15781,
+        type: "ALIAS"
+      });
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        overlay = helper.createDbOverlay(map);
+        collection = map.getMarkerSurfaceCollection();
+        return collection.createSurfaceForDbOverlay(element, overlay);
+      }).then(function (result) {
+        marker1 = result;
+        element.setColor("another.png");
+        return collection.createSurfaceForDbOverlay(element, overlay);
+      }).then(function (result) {
+        marker2 = result;
+        assert.equal(marker1, marker2);
+      });
+    });
+
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js
index 809e7fd87ae5523ef118db2cdeaf8ecd484497ac..a29201f29f023de0708f59e05b41a3b84cdece13 100644
--- a/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js
@@ -1,99 +1,99 @@
-"use strict";
-
-var AbstractDbOverlay = require('../../../../main/js/map/overlay/AbstractDbOverlay');
-
-var assert = require('assert');
-var logger = require('../../logger');
-
-describe('AbstractDbOverlay', function() {
-  var mapMock = {
-    registerDbOverlay : function() {
-    },
-    refreshInfoWindows : function() {
-    },
-    updateInfoWindowForIdentifiedElement : function() {
-    },
-  };
-
-  it("constructor 1", function() {
-    var oc = new AbstractDbOverlay({
-      map : mapMock,
-      name : 'test name'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'test name');
-    assert.equal(logger.getWarnings().length, 0);
-  });
-
-  it("constructor 2", function() {
-    var oc = new AbstractDbOverlay({
-      map : mapMock,
-      name : 'test name',
-      allowSearchById : true
-    });
-    assert.ok(oc);
-    assert.ok(oc.allowSearchById());
-  });
-
-  it("constructor 3", function() {
-    var oc = new AbstractDbOverlay({
-      map : mapMock,
-      name : 'test name',
-      allowSearchById : false,
-      allowGeneralSearch : true
-    });
-    assert.ok(oc);
-    assert.ok(oc.allowGeneralSearch());
-  });
-
-  it("splitQuery", function() {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createSearchDbOverlay(map);
-
-    var result = oc.splitQuery("test q");
-    assert.equal(result[0], "test q");
-  });
-
-  it("splitQuery 2", function() {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createSearchDbOverlay(map);
-
-    var result = oc.splitQuery("test,q");
-    assert.equal(result[0], "test");
-    assert.equal(result[1], "q");
-  });
-
-  it("splitQuery 3", function() {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createSearchDbOverlay(map);
-
-    var result = oc.splitQuery("test;q");
-    assert.equal(result[0], "test");
-    assert.equal(result[1], "q");
-  });
-
-  it("splitQuery 4", function() {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createSearchDbOverlay(map);
-
-    var result = oc.splitQuery("test;q,bla");
-    assert.equal(result[0], "test");
-    assert.equal(result[1], "q,bla");
-    assert.equal(result.length, 2);
-  });
-
-  it("splitQuery 5", function() {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createSearchDbOverlay(map);
-
-    var result = oc.splitQuery("test;q,bla", true);
-    assert.equal(result[0], "test");
-    assert.equal(result[1], "q,bla");
-    assert.equal(result[2], "test;q,bla");
-  });
-});
+"use strict";
+
+var AbstractDbOverlay = require('../../../../main/js/map/overlay/AbstractDbOverlay');
+
+var assert = require('assert');
+var logger = require('../../logger');
+
+describe('AbstractDbOverlay', function () {
+  var mapMock = {
+    registerDbOverlay: function () {
+    },
+    refreshInfoWindows: function () {
+    },
+    updateInfoWindowForIdentifiedElement: function () {
+    }
+  };
+
+  it("constructor 1", function () {
+    var oc = new AbstractDbOverlay({
+      map: mapMock,
+      name: 'test name'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'test name');
+    assert.equal(logger.getWarnings().length, 0);
+  });
+
+  it("constructor 2", function () {
+    var oc = new AbstractDbOverlay({
+      map: mapMock,
+      name: 'test name',
+      allowSearchById: true
+    });
+    assert.ok(oc);
+    assert.ok(oc.allowSearchById());
+  });
+
+  it("constructor 3", function () {
+    var oc = new AbstractDbOverlay({
+      map: mapMock,
+      name: 'test name',
+      allowSearchById: false,
+      allowGeneralSearch: true
+    });
+    assert.ok(oc);
+    assert.ok(oc.allowGeneralSearch());
+  });
+
+  it("splitQuery", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createSearchDbOverlay(map);
+
+    var result = oc.splitQuery("test q");
+    assert.equal(result[0], "test q");
+  });
+
+  it("splitQuery 2", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createSearchDbOverlay(map);
+
+    var result = oc.splitQuery("test,q");
+    assert.equal(result[0], "test");
+    assert.equal(result[1], "q");
+  });
+
+  it("splitQuery 3", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createSearchDbOverlay(map);
+
+    var result = oc.splitQuery("test;q");
+    assert.equal(result[0], "test");
+    assert.equal(result[1], "q");
+  });
+
+  it("splitQuery 4", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createSearchDbOverlay(map);
+
+    var result = oc.splitQuery("test;q,bla");
+    assert.equal(result[0], "test");
+    assert.equal(result[1], "q,bla");
+    assert.equal(result.length, 2);
+  });
+
+  it("splitQuery 5", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createSearchDbOverlay(map);
+
+    var result = oc.splitQuery("test;q,bla", true);
+    assert.equal(result[0], "test");
+    assert.equal(result[1], "q,bla");
+    assert.equal(result[2], "test;q,bla");
+  });
+});
diff --git a/frontend-js/src/test/js/map/overlay/ChemicalDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/ChemicalDbOverlay-test.js
index 63d2e6c1eb7ff2ffba9d1fd48e803bb796a6c2cb..4fa5426a826f8505a77d7bace8b58aa4b0511d1b 100644
--- a/frontend-js/src/test/js/map/overlay/ChemicalDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/ChemicalDbOverlay-test.js
@@ -1,59 +1,59 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var ChemicalDbOverlay = require('../../../../main/js/map/overlay/ChemicalDbOverlay');
-
-var assert = require('assert');
-
-describe('ChemicalDbOverlay', function() {
-
-  it("constructor 1", function() {
-    var map = helper.createCustomMap();
-    var oc = new ChemicalDbOverlay({
-      map : map,
-      name : 'chemical'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'chemical');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  it("searchByQuery", function() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDb = helper.createChemicalDbOverlay(map);
-    return searchDb.searchByQuery("rotenone").then(function(chemicals) {
-      assert.equal(chemicals.length, 1);
-      assert.equal(searchDb.getQueries().length, 1);
-      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
-    }).then(function(elements) {
-      //these are targets
-      assert.ok(elements.length>0);
-      var chemical = elements.element;
-      assert.equal(chemical.getName(), "Rotenone");
-      return searchDb.getIdentifiedElements();
-    }).then(function(elements) {
-      assert.equal(elements.length,0);
-    });
-  });
-
-  it("searchNamesByTarget", function() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDb = helper.createChemicalDbOverlay(map);
-
-    var target = new IdentifiedElement({
-      type : "ALIAS",
-      id : 329170,
-      modelId : 15781,
-    });
-
-    return searchDb.searchNamesByTarget(target).then(function(chemicalNames) {
-      assert.equal(chemicalNames.length, 0);
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var ChemicalDbOverlay = require('../../../../main/js/map/overlay/ChemicalDbOverlay');
+
+var assert = require('assert');
+
+describe('ChemicalDbOverlay', function() {
+
+  it("constructor 1", function() {
+    var map = helper.createCustomMap();
+    var oc = new ChemicalDbOverlay({
+      map : map,
+      name : 'chemical'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'chemical');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  it("searchByQuery", function() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDb = helper.createChemicalDbOverlay(map);
+    return searchDb.searchByQuery("rotenone").then(function(chemicals) {
+      assert.equal(chemicals.length, 1);
+      assert.equal(searchDb.getQueries().length, 1);
+      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
+    }).then(function(elements) {
+      //these are targets
+      assert.ok(elements.length>0);
+      var chemical = elements.element;
+      assert.equal(chemical.getName(), "Rotenone");
+      return searchDb.getIdentifiedElements();
+    }).then(function(elements) {
+      assert.equal(elements.length,0);
+    });
+  });
+
+  it("searchNamesByTarget", function() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDb = helper.createChemicalDbOverlay(map);
+
+    var target = new IdentifiedElement({
+      type : "ALIAS",
+      id : 329170,
+      modelId : 15781
+    });
+
+    return searchDb.searchNamesByTarget(target).then(function(chemicalNames) {
+      assert.equal(chemicalNames.length, 0);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/CommentDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/CommentDbOverlay-test.js
index 70c616b099ba1f34e8d42f867691a44e6112b8a2..7e148461ffdeee9a58a37de7ee163d503f6b1cdd 100644
--- a/frontend-js/src/test/js/map/overlay/CommentDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/CommentDbOverlay-test.js
@@ -1,42 +1,42 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var CommentDbOverlay = require('../../../../main/js/map/overlay/CommentDbOverlay');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-
-var assert = require('assert');
-
-describe('CommentDbOverlay', function() {
-
-  it("constructor", function() {
-    var map = helper.createCustomMap();
-    var oc = new CommentDbOverlay({
-      map : map,
-      name : 'test name'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'test name');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  describe("getDetailDataByIdentifiedElement ", function() {
-    it("get by point", function() {
-      var map = helper.createCustomMap();
-      var oc = new CommentDbOverlay({
-        map : map,
-        name : 'test name'
-      });
-
-      return oc.getDetailDataByIdentifiedElement(new IdentifiedElement({
-        id : "(1.00,200.00)",
-        type : "POINT",
-        modelId : 15781
-      })).then(function(data) {
-        assert.ok(data.length > 0);
-      });
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var CommentDbOverlay = require('../../../../main/js/map/overlay/CommentDbOverlay');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+
+var assert = require('assert');
+
+describe('CommentDbOverlay', function () {
+
+  it("constructor", function () {
+    var map = helper.createCustomMap();
+    var oc = new CommentDbOverlay({
+      map: map,
+      name: 'test name'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'test name');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  describe("getDetailDataByIdentifiedElement ", function () {
+    it("get by point", function () {
+      var map = helper.createCustomMap();
+      var oc = new CommentDbOverlay({
+        map: map,
+        name: 'test name'
+      });
+
+      return oc.getDetailDataByIdentifiedElement(new IdentifiedElement({
+        id: "(1.00,200.00)",
+        type: "POINT",
+        modelId: 15781
+      })).then(function (data) {
+        assert.ok(data.length > 0);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/DbOverlayCollection-test.js b/frontend-js/src/test/js/map/overlay/DbOverlayCollection-test.js
index eb795f3b24856b04c1376c423cb8f42a4aa15e81..61e9788ce8f404554775cbe11d97cd8d14885cd4 100644
--- a/frontend-js/src/test/js/map/overlay/DbOverlayCollection-test.js
+++ b/frontend-js/src/test/js/map/overlay/DbOverlayCollection-test.js
@@ -1,18 +1,18 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var DbOverlayCollection = require('../../../../main/js/map/overlay/DbOverlayCollection');
-
-var assert = require('assert');
-
-describe('DbOverlayCollection', function() {
-  it("constructor", function() {
-    var map = helper.createCustomMap();
-    new DbOverlayCollection({
-      map : map,
-    });
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var DbOverlayCollection = require('../../../../main/js/map/overlay/DbOverlayCollection');
+
+var assert = require('assert');
+
+describe('DbOverlayCollection', function () {
+  it("constructor", function () {
+    var map = helper.createCustomMap();
+    new DbOverlayCollection({
+      map: map
+    });
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+});
diff --git a/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js
index da99679c858f222d701819aa9f32fc2b336c94df..44629660a5fe56a6f63f75516d9e735503fdc0f0 100644
--- a/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js
@@ -1,60 +1,61 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var DrugDbOverlay = require('../../../../main/js/map/overlay/DrugDbOverlay');
-
-var assert = require('assert');
-
-describe('DrugDbOverlay', function() {
-  it("constructor 1", function() {
-    var map = helper.createCustomMap();
-    var oc = new DrugDbOverlay({
-      map : map,
-      name : 'drug'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'drug');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  it("searchByQuery", function() {
-    helper.setUrl("http://test/?id=drug_target_sample");
-
-    var map, searchDb;
-    return ServerConnector.getProject("drug_target_sample").then(function(project) {
-      map = helper.createCustomMap(project);
-      searchDb = helper.createDrugDbOverlay(map);
-      return searchDb.searchByQuery("NADH");
-    }).then(function(drugs) {
-      assert.equal(drugs.length, 1);
-      assert.equal(searchDb.getQueries().length, 1);
-      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
-    }).then(function(elements) {
-      assert.ok(elements.length > 1);
-      return searchDb.getIdentifiedElements();
-    }).then(function(elements) {
-      assert.equal(elements.length, 1);
-    });
-  });
-
-  it("searchNamesByTarget", function() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDb = helper.createDrugDbOverlay(map);
-
-    var target = new IdentifiedElement({
-      type : "ALIAS",
-      id : 329170,
-      modelId : 15781,
-    });
-
-    return searchDb.searchNamesByTarget(target).then(function(drugNames) {
-      assert.equal(drugNames.length, 1);
-      assert.equal(drugNames[0], "NADH");
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var DrugDbOverlay = require('../../../../main/js/map/overlay/DrugDbOverlay');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+
+describe('DrugDbOverlay', function () {
+  it("constructor 1", function () {
+    var map = helper.createCustomMap();
+    var oc = new DrugDbOverlay({
+      map: map,
+      name: 'drug'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'drug');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  it("searchByQuery", function () {
+    helper.setUrl("http://test/?id=drug_target_sample");
+
+    var map, searchDb;
+    return ServerConnector.getProject("drug_target_sample").then(function (project) {
+      map = helper.createCustomMap(project);
+      searchDb = helper.createDrugDbOverlay(map);
+      return searchDb.searchByQuery("NADH");
+    }).then(function (drugs) {
+      assert.equal(drugs.length, 1);
+      assert.equal(searchDb.getQueries().length, 1);
+      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
+    }).then(function (elements) {
+      assert.ok(elements.length > 1);
+      return searchDb.getIdentifiedElements();
+    }).then(function (elements) {
+      assert.equal(elements.length, 1);
+    });
+  });
+
+  it("searchNamesByTarget", function () {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDb = helper.createDrugDbOverlay(map);
+
+    var target = new IdentifiedElement({
+      type: "ALIAS",
+      id: 329170,
+      modelId: 15781
+    });
+
+    return searchDb.searchNamesByTarget(target).then(function (drugNames) {
+      assert.equal(drugNames.length, 1);
+      assert.equal(drugNames[0], "NADH");
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/MiRnaDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/MiRnaDbOverlay-test.js
index d1cab3e25ed6b2169dd8928668be5a96fd42ab32..3364a97e466747bcea6ca81f233a13e5052b9ee1 100644
--- a/frontend-js/src/test/js/map/overlay/MiRnaDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/MiRnaDbOverlay-test.js
@@ -1,57 +1,58 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var MiRnaDbOverlay = require('../../../../main/js/map/overlay/MiRnaDbOverlay');
-
-var assert = require('assert');
-
-describe('MiRnaDbOverlay', function() {
-  it("constructor 1", function() {
-    var map = helper.createCustomMap();
-    var oc = new MiRnaDbOverlay({
-      map : map,
-      name : 'miRna'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'miRna');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  it("searchByQuery", function() {
-    var map, searchDb;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-      searchDb = helper.createMiRnaDbOverlay(map);
-      return searchDb.searchByQuery("hsa-miR-125a-3p");
-    }).then(function(miRnas) {
-      assert.equal(miRnas.length, 1);
-      assert.equal(searchDb.getQueries().length, 1);
-      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
-    }).then(function(elements) {
-      assert.equal(elements.length, 3);
-      return searchDb.getIdentifiedElements();
-    }).then(function(elements) {
-      assert.equal(elements.length, 0);
-    });
-  });
-
-  it("searchNamesByTarget", function() {
-    var map = helper.createCustomMap();
-    map.getModel().setId(15781);
-    var searchDb = helper.createMiRnaDbOverlay(map);
-
-    var target = new IdentifiedElement({
-      type : "ALIAS",
-      id : 329170,
-      modelId : 15781,
-    });
-
-    return searchDb.searchNamesByTarget(target).then(function(miRnaNames) {
-      assert.equal(miRnaNames.length, 0);
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var MiRnaDbOverlay = require('../../../../main/js/map/overlay/MiRnaDbOverlay');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+
+describe('MiRnaDbOverlay', function() {
+  it("constructor 1", function() {
+    var map = helper.createCustomMap();
+    var oc = new MiRnaDbOverlay({
+      map : map,
+      name : 'miRna'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'miRna');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  it("searchByQuery", function() {
+    var map, searchDb;
+    return ServerConnector.getProject().then(function(project) {
+      map = helper.createCustomMap(project);
+      searchDb = helper.createMiRnaDbOverlay(map);
+      return searchDb.searchByQuery("hsa-miR-125a-3p");
+    }).then(function(miRnas) {
+      assert.equal(miRnas.length, 1);
+      assert.equal(searchDb.getQueries().length, 1);
+      return searchDb.getElementsByQuery(searchDb.getQueries()[0]);
+    }).then(function(elements) {
+      assert.equal(elements.length, 3);
+      return searchDb.getIdentifiedElements();
+    }).then(function(elements) {
+      assert.equal(elements.length, 0);
+    });
+  });
+
+  it("searchNamesByTarget", function() {
+    var map = helper.createCustomMap();
+    map.getModel().setId(15781);
+    var searchDb = helper.createMiRnaDbOverlay(map);
+
+    var target = new IdentifiedElement({
+      type : "ALIAS",
+      id : 329170,
+      modelId : 15781
+    });
+
+    return searchDb.searchNamesByTarget(target).then(function(miRnaNames) {
+      assert.equal(miRnaNames.length, 0);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
index e466e58026f69561c1293cfd1d0e701ce84cec4c..3b2f590424bab6f119dce1589e977b279dea1b20 100644
--- a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js
@@ -1,191 +1,192 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var SearchDbOverlay = require('../../../../main/js/map/overlay/SearchDbOverlay');
-var AbstractDbOverlay = require('../../../../main/js/map/overlay/AbstractDbOverlay');
-
-var assert = require('assert');
-var Promise = require('bluebird');
-
-describe('SearchDbOverlay', function() {
-  it("constructor 1", function() {
-    var map = helper.createCustomMap();
-    var oc = new SearchDbOverlay({
-      map : map,
-      name : 'search'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'search');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  it("searchByCoordinates with too far alias as result", function() {
-    return ServerConnector.getProject().then(function(project) {
-      var map = helper.createCustomMap(project);
-      var searchDb = helper.createSearchDbOverlay(map);
-
-      var searchParams = {
-        modelId : map.getModel().getId(),
-        coordinates : new google.maps.Point(207.73, 479.18),
-        zoom : 4,
-      };
-      return searchDb.searchByCoordinates(searchParams);
-    }).then(function(result) {
-      assert.equal(result.length, 0);
-    });
-  });
-
-  describe("searchByQuery", function() {
-    it("with perfectMatch", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        map.getModel().setId(15781);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        return searchDb.searchByQuery("s1", true);
-      }).then(function(result) {
-        assert.equal(result.length, 1);
-        assert.equal(result[0].length, 1);
-      });
-    });
-    it("check state when network problems", function() {
-      var problematicQuery = "sxx1";
-      var searchDb;
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        searchDb = helper.createSearchDbOverlay(map);
-
-        return searchDb.searchByQuery(problematicQuery);
-      }).then(null, function() {
-        var queries = searchDb.getQueries();
-        var promises = [];
-        for (var i = 0; i < queries.length; i++) {
-          promises.push(searchDb.getElementsByQuery(queries[i]));
-        }
-        return Promise.all(promises);
-      });
-    });
-  });
-
-  it("searchByEncodedQuery", function() {
-    return ServerConnector.getProject().then(function(project) {
-      var map = helper.createCustomMap(project);
-      var searchDb = helper.createSearchDbOverlay(map);
-      var point = new google.maps.Point(316.05, 253.61);
-      var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES;
-      var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2);
-      return searchDb.searchByEncodedQuery(query);
-    }).then(function(result) {
-      assert.ok(result.length > 0);
-    });
-  });
-
-  describe("searchByCoordinates", function() {
-    it("with too far reaction as result", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(553.10, 479.18),
-          zoom : 4,
-        };
-        return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
-        assert.equal(result.length, 0);
-      });
-
-    });
-
-    it("on empty map", function() {
-      helper.setUrl("http://test/?id=empty");
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(553.10, 479.18),
-          zoom : 4,
-        };
-        return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
-        assert.equal(result.length, 0);
-      });
-
-    });
-
-    it("on hidden nested object", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(316.05, 253.61),
-          zoom : 2,
-        };
-        return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
-        // id of the parent
-        assert.equal(result[0].getId(), 329159);
-      });
-
-    });
-
-    it("on nested object", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = {
-          modelId : map.getModel().getId(),
-          coordinates : new google.maps.Point(316.05, 253.61),
-          zoom : 4,
-        };
-        return searchDb.searchByCoordinates(searchParams);
-      }).then(function(result) {
-        assert.equal(result[0].getId(), 329159);
-      });
-    });
-  });
-
-  describe("getDetailDataByIdentifiedElement", function() {
-    it("get by alias", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = new IdentifiedElement({
-          type : "ALIAS",
-          id : 329177,
-          modelId : project.getModel().getId(),
-        });
-        return searchDb.getDetailDataByIdentifiedElement(searchParams);
-      }).then(function(result) {
-        assert.equal(result.getId(), 329177);
-      });
-
-    });
-    it("get by point", function() {
-      return ServerConnector.getProject().then(function(project) {
-        var map = helper.createCustomMap(project);
-        var searchDb = helper.createSearchDbOverlay(map);
-
-        var searchParams = new IdentifiedElement({
-          type : "POINT",
-          id : "2,3",
-          modelId : project.getModel().getId(),
-        });
-        return searchDb.getDetailDataByIdentifiedElement(searchParams);
-      }).then(function(result) {
-        assert.equal(result, null);
-      });
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var SearchDbOverlay = require('../../../../main/js/map/overlay/SearchDbOverlay');
+var AbstractDbOverlay = require('../../../../main/js/map/overlay/AbstractDbOverlay');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+var Promise = require('bluebird');
+
+describe('SearchDbOverlay', function() {
+  it("constructor 1", function() {
+    var map = helper.createCustomMap();
+    var oc = new SearchDbOverlay({
+      map : map,
+      name : 'search'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'search');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  it("searchByCoordinates with too far alias as result", function() {
+    return ServerConnector.getProject().then(function(project) {
+      var map = helper.createCustomMap(project);
+      var searchDb = helper.createSearchDbOverlay(map);
+
+      var searchParams = {
+        modelId : map.getModel().getId(),
+        coordinates : new google.maps.Point(207.73, 479.18),
+        zoom : 4
+      };
+      return searchDb.searchByCoordinates(searchParams);
+    }).then(function(result) {
+      assert.equal(result.length, 0);
+    });
+  });
+
+  describe("searchByQuery", function() {
+    it("with perfectMatch", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        map.getModel().setId(15781);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        return searchDb.searchByQuery("s1", true);
+      }).then(function(result) {
+        assert.equal(result.length, 1);
+        assert.equal(result[0].length, 1);
+      });
+    });
+    it("check state when network problems", function() {
+      var problematicQuery = "sxx1";
+      var searchDb;
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        searchDb = helper.createSearchDbOverlay(map);
+
+        return searchDb.searchByQuery(problematicQuery);
+      }).then(null, function() {
+        var queries = searchDb.getQueries();
+        var promises = [];
+        for (var i = 0; i < queries.length; i++) {
+          promises.push(searchDb.getElementsByQuery(queries[i]));
+        }
+        return Promise.all(promises);
+      });
+    });
+  });
+
+  it("searchByEncodedQuery", function() {
+    return ServerConnector.getProject().then(function(project) {
+      var map = helper.createCustomMap(project);
+      var searchDb = helper.createSearchDbOverlay(map);
+      var point = new google.maps.Point(316.05, 253.61);
+      var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES;
+      var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2);
+      return searchDb.searchByEncodedQuery(query);
+    }).then(function(result) {
+      assert.ok(result.length > 0);
+    });
+  });
+
+  describe("searchByCoordinates", function() {
+    it("with too far reaction as result", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = {
+          modelId : map.getModel().getId(),
+          coordinates : new google.maps.Point(553.10, 479.18),
+          zoom : 4
+        };
+        return searchDb.searchByCoordinates(searchParams);
+      }).then(function(result) {
+        assert.equal(result.length, 0);
+      });
+
+    });
+
+    it("on empty map", function() {
+      helper.setUrl("http://test/?id=empty");
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = {
+          modelId : map.getModel().getId(),
+          coordinates : new google.maps.Point(553.10, 479.18),
+          zoom : 4
+        };
+        return searchDb.searchByCoordinates(searchParams);
+      }).then(function(result) {
+        assert.equal(result.length, 0);
+      });
+
+    });
+
+    it("on hidden nested object", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = {
+          modelId : map.getModel().getId(),
+          coordinates : new google.maps.Point(316.05, 253.61),
+          zoom : 2
+        };
+        return searchDb.searchByCoordinates(searchParams);
+      }).then(function(result) {
+        // id of the parent
+        assert.equal(result[0].getId(), 329159);
+      });
+
+    });
+
+    it("on nested object", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = {
+          modelId : map.getModel().getId(),
+          coordinates : new google.maps.Point(316.05, 253.61),
+          zoom : 4
+        };
+        return searchDb.searchByCoordinates(searchParams);
+      }).then(function(result) {
+        assert.equal(result[0].getId(), 329159);
+      });
+    });
+  });
+
+  describe("getDetailDataByIdentifiedElement", function() {
+    it("get by alias", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = new IdentifiedElement({
+          type : "ALIAS",
+          id : 329177,
+          modelId : project.getModel().getId()
+        });
+        return searchDb.getDetailDataByIdentifiedElement(searchParams);
+      }).then(function(result) {
+        assert.equal(result.getId(), 329177);
+      });
+
+    });
+    it("get by point", function() {
+      return ServerConnector.getProject().then(function(project) {
+        var map = helper.createCustomMap(project);
+        var searchDb = helper.createSearchDbOverlay(map);
+
+        var searchParams = new IdentifiedElement({
+          type : "POINT",
+          id : "2,3",
+          modelId : project.getModel().getId()
+        });
+        return searchDb.getDetailDataByIdentifiedElement(searchParams);
+      }).then(function(result) {
+        assert.equal(result, null);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
index 4a89b3d057a239868395ee6b9871bd49431fcc9a..6acfcabcc571ed4f80c7f37575be58dd67c58f55 100644
--- a/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/UserDbOverlay-test.js
@@ -1,110 +1,111 @@
-"use strict";
-
-var logger = require('../../logger');
-require("../../mocha-config");
-
-var CustomMap = require('../../../../main/js/map//CustomMap');
-var InvalidArgumentError = require('../../../../main/js/InvalidArgumentError');
-var UserDbOverlay = require('../../../../main/js/map/overlay/UserDbOverlay');
-
-var assert = require('assert');
-
-describe('UserDbOverlay', function() {
-  it("constructor 1", function() {
-    var map = helper.createCustomMap();
-    var oc = new UserDbOverlay({
-      map : map,
-      name : 'user'
-    });
-    assert.ok(oc);
-    assert.equal(oc.getName(), 'user');
-
-    assert.equal(logger.getWarnings.length, 0);
-  });
-
-  it("clear", function() {
-    var overlay;
-    return ServerConnector.getProject().then(function(project) {
-      var options = helper.createCustomMapOptions(project);
-      var map = new CustomMap(options);
-      overlay = new UserDbOverlay({
-        map : map,
-        name : 'user'
-      });
-      return overlay.addMarker({
-        element : {
-          id : 329171,
-          modelId : 15781,
-          type : "ALIAS"
-        },
-        options : {
-          type : "SURFACE"
-        }
-      });
-    }).then(function() {
-      return overlay.getIdentifiedElements();
-    }).then(function(elements) {
-      assert.equal(elements.length, 1);
-      return overlay.clear();
-    }).then(function() {
-      return overlay.getIdentifiedElements();
-    }).then(function(elements) {
-      assert.equal(elements.length, 0);
-    });
-  });
-
-  describe("addMarker", function() {
-    it("add non existing object", function() {
-      var overlay;
-      return ServerConnector.getProject().then(function(project) {
-        var options = helper.createCustomMapOptions(project);
-        var map = new CustomMap(options);
-        overlay = new UserDbOverlay({
-          map : map,
-          name : 'user'
-        });
-        return overlay.addMarker({
-          element : {
-            id : -1,
-            modelId : 15781,
-            type : "ALIAS"
-          },
-          options : {
-            type : "SURFACE"
-          }
-        });
-      }).then(function() {
-        assert.ok(false, "Exception expected");
-      }, function(error) {
-        assert.ok(error instanceof InvalidArgumentError);
-      });
-    });
-
-    it("add to non existing map", function() {
-      var overlay;
-      return ServerConnector.getProject().then(function(project) {
-        var options = helper.createCustomMapOptions(project);
-        var map = new CustomMap(options);
-        overlay = new UserDbOverlay({
-          map : map,
-          name : 'user'
-        });
-        return overlay.addMarker({
-          element : {
-            id : 329171,
-            modelId : -1,
-            type : "ALIAS"
-          },
-          options : {
-            type : "SURFACE"
-          }
-        });
-      }).then(function() {
-        assert.ok(false, "Exception expected");
-      }, function(error) {
-        assert.ok(error instanceof InvalidArgumentError);
-      });
-    });
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+require("../../mocha-config");
+
+var CustomMap = require('../../../../main/js/map/CustomMap');
+var InvalidArgumentError = require('../../../../main/js/InvalidArgumentError');
+var UserDbOverlay = require('../../../../main/js/map/overlay/UserDbOverlay');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+
+describe('UserDbOverlay', function () {
+  it("constructor 1", function () {
+    var map = helper.createCustomMap();
+    var oc = new UserDbOverlay({
+      map: map,
+      name: 'user'
+    });
+    assert.ok(oc);
+    assert.equal(oc.getName(), 'user');
+
+    assert.equal(logger.getWarnings.length, 0);
+  });
+
+  it("clear", function () {
+    var overlay;
+    return ServerConnector.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+      var map = new CustomMap(options);
+      overlay = new UserDbOverlay({
+        map: map,
+        name: 'user'
+      });
+      return overlay.addMarker({
+        element: {
+          id: 329171,
+          modelId: 15781,
+          type: "ALIAS"
+        },
+        options: {
+          type: "SURFACE"
+        }
+      });
+    }).then(function () {
+      return overlay.getIdentifiedElements();
+    }).then(function (elements) {
+      assert.equal(elements.length, 1);
+      return overlay.clear();
+    }).then(function () {
+      return overlay.getIdentifiedElements();
+    }).then(function (elements) {
+      assert.equal(elements.length, 0);
+    });
+  });
+
+  describe("addMarker", function () {
+    it("add non existing object", function () {
+      var overlay;
+      return ServerConnector.getProject().then(function (project) {
+        var options = helper.createCustomMapOptions(project);
+        var map = new CustomMap(options);
+        overlay = new UserDbOverlay({
+          map: map,
+          name: 'user'
+        });
+        return overlay.addMarker({
+          element: {
+            id: -1,
+            modelId: 15781,
+            type: "ALIAS"
+          },
+          options: {
+            type: "SURFACE"
+          }
+        });
+      }).then(function () {
+        assert.ok(false, "Exception expected");
+      }, function (error) {
+        assert.ok(error instanceof InvalidArgumentError);
+      });
+    });
+
+    it("add to non existing map", function () {
+      var overlay;
+      return ServerConnector.getProject().then(function (project) {
+        var options = helper.createCustomMapOptions(project);
+        var map = new CustomMap(options);
+        overlay = new UserDbOverlay({
+          map: map,
+          name: 'user'
+        });
+        return overlay.addMarker({
+          element: {
+            id: 329171,
+            modelId: -1,
+            type: "ALIAS"
+          },
+          options: {
+            type: "SURFACE"
+          }
+        });
+      }).then(function () {
+        assert.ok(false, "Exception expected");
+      }, function (error) {
+        assert.ok(error instanceof InvalidArgumentError);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/surface/AliasSurface-test.js b/frontend-js/src/test/js/map/surface/AliasSurface-test.js
index 571affd8c54bb501034e89d41b0541bfacd6fc8a..d31f5e49351a32d57de8748548d7f53ee8a80a60 100644
--- a/frontend-js/src/test/js/map/surface/AliasSurface-test.js
+++ b/frontend-js/src/test/js/map/surface/AliasSurface-test.js
@@ -1,97 +1,98 @@
-"use strict";
-
-var logger = require('../../logger');
-
-var AliasSurface = require('../../../../main/js/map/surface/AliasSurface');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-
-var assert = require('assert');
-
-describe('AliasSurface', function() {
-  it("constructor", function() {
-    var map = helper.createCustomMap();
-    var alias = helper.createAlias(map);
-    var layoutAlias = helper.createLayoutAlias(alias);
-
-    return AliasSurface.create({
-      overlayAlias : layoutAlias,
-      alias : alias,
-      map : map,
-      startX : 1,
-      endX : 2
-    }).then(function(result) {
-      assert.ok(result instanceof AliasSurface);
-      assert.equal(logger.getWarnings.length, 0);
-    });
-  });
-
-  it("createFromIdentifiedElement", function() {
-    var map;
-    var alias;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-      return map.getModel().getAliasById(329171);
-    }).then(function(result) {
-      alias = result;
-      var identifiedElement = new IdentifiedElement(alias);
-
-      return AliasSurface.createFromIdentifiedElement({
-        element : identifiedElement,
-        map : map
-      });
-    }).then(function(result) {
-      assert.ok(result instanceof AliasSurface);
-      assert.equal(logger.getWarnings.length, 0);
-    });
-  });
-  it("setBoundsForAlias", function() {
-    var map;
-    var alias;
-    return ServerConnector.getProject().then(function(project) {
-      map = helper.createCustomMap(project);
-      return map.getModel().getAliasById(329171);
-    }).then(function(result) {
-      alias = result;
-      var identifiedElement = new IdentifiedElement(alias);
-
-      return AliasSurface.createFromIdentifiedElement({
-        element : identifiedElement,
-        map : map
-      });
-    }).then(function(result) {
-      var bounds = result.getBounds();
-      result.setBoundsForAlias(1, 3);
-      var bounds2 = result.getBounds();
-      assert.equal(bounds.getSouthWest().lat(), bounds2.getSouthWest().lat());
-      assert.ok(bounds.getSouthWest().lng() !== bounds2.getSouthWest().lng());
-    });
-  });
-
-  describe('click', function() {
-    it("default", function() {
-      var map;
-      var alias;
-      var clicked = false;
-      return ServerConnector.getProject().then(function(project) {
-        map = helper.createCustomMap(project);
-        return map.getModel().getAliasById(329171);
-      }).then(function(result) {
-        alias = result;
-        var identifiedElement = new IdentifiedElement(alias);
-        return AliasSurface.createFromIdentifiedElement({
-          element : identifiedElement,
-          map : map,
-          onClick : function() {
-            clicked = true;
-          }
-        });
-      }).then(function(result) {
-        return result.onClickHandler();
-      }).then(function() {
-        assert.ok(clicked);
-      });
-    });
-
-  });
-
-});
+"use strict";
+
+var logger = require('../../logger');
+
+var AliasSurface = require('../../../../main/js/map/surface/AliasSurface');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+
+describe('AliasSurface', function() {
+  it("constructor", function() {
+    var map = helper.createCustomMap();
+    var alias = helper.createAlias(map);
+    var layoutAlias = helper.createLayoutAlias(alias);
+
+    return AliasSurface.create({
+      overlayAlias : layoutAlias,
+      alias : alias,
+      map : map,
+      startX : 1,
+      endX : 2
+    }).then(function(result) {
+      assert.ok(result instanceof AliasSurface);
+      assert.equal(logger.getWarnings.length, 0);
+    });
+  });
+
+  it("createFromIdentifiedElement", function() {
+    var map;
+    var alias;
+    return ServerConnector.getProject().then(function(project) {
+      map = helper.createCustomMap(project);
+      return map.getModel().getAliasById(329171);
+    }).then(function(result) {
+      alias = result;
+      var identifiedElement = new IdentifiedElement(alias);
+
+      return AliasSurface.createFromIdentifiedElement({
+        element : identifiedElement,
+        map : map
+      });
+    }).then(function(result) {
+      assert.ok(result instanceof AliasSurface);
+      assert.equal(logger.getWarnings.length, 0);
+    });
+  });
+  it("setBoundsForAlias", function() {
+    var map;
+    var alias;
+    return ServerConnector.getProject().then(function(project) {
+      map = helper.createCustomMap(project);
+      return map.getModel().getAliasById(329171);
+    }).then(function(result) {
+      alias = result;
+      var identifiedElement = new IdentifiedElement(alias);
+
+      return AliasSurface.createFromIdentifiedElement({
+        element : identifiedElement,
+        map : map
+      });
+    }).then(function(result) {
+      var bounds = result.getBounds();
+      result.setBoundsForAlias(1, 3);
+      var bounds2 = result.getBounds();
+      assert.equal(bounds.getSouthWest().lat(), bounds2.getSouthWest().lat());
+      assert.ok(bounds.getSouthWest().lng() !== bounds2.getSouthWest().lng());
+    });
+  });
+
+  describe('click', function() {
+    it("default", function() {
+      var map;
+      var alias;
+      var clicked = false;
+      return ServerConnector.getProject().then(function(project) {
+        map = helper.createCustomMap(project);
+        return map.getModel().getAliasById(329171);
+      }).then(function(result) {
+        alias = result;
+        var identifiedElement = new IdentifiedElement(alias);
+        return AliasSurface.createFromIdentifiedElement({
+          element : identifiedElement,
+          map : map,
+          onClick : function() {
+            clicked = true;
+          }
+        });
+      }).then(function(result) {
+        return result.onClickHandler();
+      }).then(function() {
+        assert.ok(clicked);
+      });
+    });
+
+  });
+
+});
diff --git a/frontend-js/src/test/js/map/surface/ReactionSurface-test.js b/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
index c2e3290e116151eca5a8039557f3a8f1ef916ea1..c8a81162dc4e1244185126d171bd98cbe1c36224 100644
--- a/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
+++ b/frontend-js/src/test/js/map/surface/ReactionSurface-test.js
@@ -1,113 +1,114 @@
-"use strict";
-
-require("../../mocha-config");
-var ReactionSurface = require('../../../../main/js/map/surface/ReactionSurface');
-
-var assert = require('assert');
-
-var logger = require('../../logger');
-
-describe('ReactionSurface', function () {
-  it("Constructor", function () {
-    var map = helper.createAbstractCustomMap();
-    var reaction = helper.createReaction(map);
-
-    var reactionOverlay = new ReactionSurface({
-      reaction: reaction,
-      map: map,
-      customized: false
-    });
-
-    assert.ok(reactionOverlay.getGoogleMapObjects().length > 0);
-    assert.ok(reactionOverlay.getColor());
-    assert.ok(reactionOverlay.getWidth());
-    assert.ok(reactionOverlay.getBounds());
-    assert.ok(reactionOverlay.getReactionData());
-    assert.ok(reactionOverlay.getCustomMap());
-    assert.ok(reactionOverlay.getId());
-    assert.ok(typeof reactionOverlay.getColor() === "string");
-  });
-  it("create", function () {
-    var map = helper.createAbstractCustomMap();
-    var reaction = helper.createReaction(map);
-    var layoutReaction = helper.createLayoutReaction(reaction);
-
-    return ReactionSurface.create({
-      layoutReaction: layoutReaction,
-      reaction: reaction,
-      map: map,
-      customized: false
-    }).then(function(reactionOverlay){
-
-      assert.ok(reactionOverlay.getGoogleMapObjects().length > 0);
-      assert.ok(reactionOverlay.getColor());
-      assert.ok(reactionOverlay.getWidth());
-      assert.ok(reactionOverlay.getBounds());
-      assert.ok(reactionOverlay.getReactionData());
-      assert.ok(reactionOverlay.getCustomMap());
-      assert.ok(reactionOverlay.getId());
-      assert.ok(typeof reactionOverlay.getColor() === "string");
-    });
-  });
-
-  it("show", function () {
-    var map = helper.createCustomMap();
-    var reaction = helper.createReaction(map);
-    var layoutReaction = helper.createLayoutReaction(reaction);
-
-    var reactionOverlay = new ReactionSurface({
-      overlayData: layoutReaction,
-      reaction: reaction,
-      map: map,
-      customized: false
-    });
-
-    reactionOverlay.hide();
-    assert.equal(reactionOverlay.isShown(), false);
-
-    reactionOverlay.show();
-    assert.ok(reactionOverlay.isShown());
-
-    assert.equal(logger.getWarnings().length, 0);
-
-    reactionOverlay.show();
-    assert.ok(reactionOverlay.isShown());
-    assert.equal(logger.getWarnings().length, 1);
-
-  });
-
-  it("changedToCustomized", function() {
-    var map = helper.createCustomMap();
-    var reaction = helper.createReaction(map);
-    var layoutReaction = helper.createLayoutReaction(reaction);
-
-    var reactionOverlay = new ReactionSurface({
-      overlayData: layoutReaction,
-      reaction: reaction,
-      map: map,
-      customized: false
-    });
-
-    reactionOverlay.changedToCustomized();
-    assert.ok(reactionOverlay.isCustomized());
-
-  });
-
-  it("createLine", function() {
-    var map = helper.createAbstractCustomMap();
-
-    var line = ReactionSurface.createLine({
-      start: {
-        x: 0,
-        y: 10
-      },
-      end: {
-        x: 100,
-        y: 100
-      },
-    }, "#000000", 3, map);
-
-    assert.ok(line);
-
-  });
-});
+"use strict";
+
+require("../../mocha-config");
+var ReactionSurface = require('../../../../main/js/map/surface/ReactionSurface');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var assert = require('assert');
+
+var logger = require('../../logger');
+
+describe('ReactionSurface', function () {
+  it("Constructor", function () {
+    var map = helper.createAbstractCustomMap();
+    var reaction = helper.createReaction(map);
+
+    var reactionOverlay = new ReactionSurface({
+      reaction: reaction,
+      map: map,
+      customized: false
+    });
+
+    assert.ok(reactionOverlay.getGoogleMapObjects().length > 0);
+    assert.ok(reactionOverlay.getColor());
+    assert.ok(reactionOverlay.getWidth());
+    assert.ok(reactionOverlay.getBounds());
+    assert.ok(reactionOverlay.getReactionData());
+    assert.ok(reactionOverlay.getCustomMap());
+    assert.ok(reactionOverlay.getId());
+    assert.ok(typeof reactionOverlay.getColor() === "string");
+  });
+  it("create", function () {
+    var map = helper.createAbstractCustomMap();
+    var reaction = helper.createReaction(map);
+    var layoutReaction = helper.createLayoutReaction(reaction);
+
+    return ReactionSurface.create({
+      layoutReaction: layoutReaction,
+      reaction: reaction,
+      map: map,
+      customized: false
+    }).then(function(reactionOverlay){
+
+      assert.ok(reactionOverlay.getGoogleMapObjects().length > 0);
+      assert.ok(reactionOverlay.getColor());
+      assert.ok(reactionOverlay.getWidth());
+      assert.ok(reactionOverlay.getBounds());
+      assert.ok(reactionOverlay.getReactionData());
+      assert.ok(reactionOverlay.getCustomMap());
+      assert.ok(reactionOverlay.getId());
+      assert.ok(typeof reactionOverlay.getColor() === "string");
+    });
+  });
+
+  it("show", function () {
+    var map = helper.createCustomMap();
+    var reaction = helper.createReaction(map);
+    var layoutReaction = helper.createLayoutReaction(reaction);
+
+    var reactionOverlay = new ReactionSurface({
+      overlayData: layoutReaction,
+      reaction: reaction,
+      map: map,
+      customized: false
+    });
+
+    reactionOverlay.hide();
+    assert.equal(reactionOverlay.isShown(), false);
+
+    reactionOverlay.show();
+    assert.ok(reactionOverlay.isShown());
+
+    assert.equal(logger.getWarnings().length, 0);
+
+    reactionOverlay.show();
+    assert.ok(reactionOverlay.isShown());
+    assert.equal(logger.getWarnings().length, 1);
+
+  });
+
+  it("changedToCustomized", function() {
+    var map = helper.createCustomMap();
+    var reaction = helper.createReaction(map);
+    var layoutReaction = helper.createLayoutReaction(reaction);
+
+    var reactionOverlay = new ReactionSurface({
+      overlayData: layoutReaction,
+      reaction: reaction,
+      map: map,
+      customized: false
+    });
+
+    reactionOverlay.changedToCustomized();
+    assert.ok(reactionOverlay.isCustomized());
+
+  });
+
+  it("createLine", function() {
+    var map = helper.createAbstractCustomMap();
+
+    var line = ReactionSurface.createLine({
+      start: {
+        x: 0,
+        y: 10
+      },
+      end: {
+        x: 100,
+        y: 100
+      },
+    }, "#000000", 3, map);
+
+    assert.ok(line);
+
+  });
+});
diff --git a/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js b/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js
index fda6cba7e906ee73638c3317a55294ca654c840a..566a46241afdafe4a649d642e33fd9994aa7523a 100644
--- a/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js
+++ b/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js
@@ -1,324 +1,325 @@
-"use strict";
-require("../../mocha-config");
-
-var Promise = require("bluebird");
-
-var functions = require('../../../../main/js/Functions');
-
-var Alias = require('../../../../main/js/map/data/Alias');
-var Drug = require('../../../../main/js/map/data/Drug');
-var AliasInfoWindow = require('../../../../main/js/map/window/AliasInfoWindow');
-var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
-var LayoutData = require('../../../../main/js/map/data/LayoutData');
-
-var assert = require('assert');
-
-var logger = require('../../logger');
-
-describe('AliasInfoWindow', function () {
-  describe('constructor', function () {
-    it("default", function () {
-      var map = helper.createCustomMap();
-
-      var alias = helper.createAlias();
-      alias.setId(30001);
-      alias.setIsComplete(false);
-      alias.setModelId(map.getId());
-      map.getModel().addAlias(alias);
-
-      var aliasWindow = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-
-      assert.equal(alias, aliasWindow.getAlias());
-      assert.equal(map, aliasWindow.getCustomMap());
-      assert.ok(aliasWindow.getContent().innerHTML.indexOf("loading") >= 0);
-      assert.equal(logger.getWarnings().length, 0);
-    });
-    it("loading data", function () {
-      var map = helper.createCustomMap();
-      map.getOverlayDataForAlias = function () {
-        return Promise.resolve([]);
-      };
-
-      var javaObject = {
-        bounds: {
-          x: 190,
-          y: 44,
-          width: 80,
-          height: 40
-        },
-        modelId: map.getId(),
-        idObject: 30001
-      };
-      var alias = new Alias(javaObject);
-      map.getModel().addAlias(alias);
-
-      var aliasWindow = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-
-      assert.equal(alias, aliasWindow.alias);
-      assert.equal(map, aliasWindow.customMap);
-      assert.ok(aliasWindow.getContent().innerHTML.indexOf("loading") > -1);
-    });
-  });
-
-  it("createOverlayInfoDiv", function () {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createDrugDbOverlay(map);
-
-    var alias = helper.createAlias(map);
-    var aliasWindow = new AliasInfoWindow({
-      alias: alias,
-      map: map
-    });
-
-    oc.searchNamesByTarget = function () {
-      return Promise.resolve(["xField"]);
-    };
-    oc.getElementsByQueryFromServer = function () {
-      return Promise.resolve([new Drug({
-        name: "xField",
-        references: [],
-        targets: [],
-      })]);
-    };
-
-    return oc.getDetailDataByIdentifiedElement(new IdentifiedElement(alias), true).then(function (data) {
-      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
-      assert.ok(functions.isDomElement(overlayDiv));
-      assert.ok(overlayDiv.innerHTML.indexOf('xField') >= 0);
-    });
-
-  });
-
-  it("createDrugOverlayInfoDiv", function () {
-    helper.setUrl("http://test/?id=drug_target_sample");
-
-    var map, ie, aliasWindow, oc;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-
-      oc = helper.createDrugDbOverlay(map);
-
-      ie = new IdentifiedElement({
-        id: 436152,
-        modelId: map.getId(),
-        type: "ALIAS"
-      });
-
-      return map.getModel().getByIdentifiedElement(ie, true);
-    }).then(function (alias) {
-      aliasWindow = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      return oc.getDetailDataByIdentifiedElement(ie, true);
-    }).then(function (data) {
-      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
-      assert.ok(functions.isDomElement(overlayDiv));
-      assert.ok(overlayDiv.innerHTML.indexOf('NADH') >= 0);
-
-    });
-  });
-
-  it("createChemicalOverlayInfoDiv", function () {
-    var map, ie, aliasWindow, oc;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-
-      oc = helper.createChemicalDbOverlay(map);
-
-      ie = new IdentifiedElement({
-        id: 329170,
-        modelId: map.getId(),
-        type: "ALIAS"
-      });
-
-      return map.getModel().getByIdentifiedElement(ie, true);
-    }).then(function (alias) {
-      aliasWindow = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      return oc.getDetailDataByIdentifiedElement(ie, true);
-    }).then(function (data) {
-      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
-      assert.ok(functions.isDomElement(overlayDiv));
-    });
-  });
-
-  it("createCommentOverlayInfoDiv", function () {
-    var map = helper.createCustomMap();
-
-    var oc = helper.createCommentDbOverlay(map);
-
-    var alias = helper.createAlias();
-    alias.setId(3001);
-    alias.setIsComplete(true);
-    alias.setModelId(map.getId());
-    map.getModel().addAlias(alias);
-
-    var aliasWindow = new AliasInfoWindow({
-      alias: alias,
-      map: map
-    });
-
-    return oc.getDetailDataByIdentifiedElement(new IdentifiedElement(alias), true).then(function (data) {
-      var comment = helper.createComment(alias);
-      comment.setContent("test comment Content");
-
-      data[0] = comment;
-      data['__FULL__'] = null;
-
-      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
-
-      assert.ok(functions.isDomElement(overlayDiv));
-      assert.ok(overlayDiv.innerHTML.indexOf(comment.getContent()) >= 0);
-      assert.ok(overlayDiv.innerHTML.indexOf(comment.getId()) >= 0);
-    });
-
-  });
-
-  it("createGeneticsDiv", function () {
-    var map;
-    var overlay;
-
-    var layoutAlias;
-    var win;
-
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      overlay = new LayoutData(18077, "xxx");
-      return overlay.init();
-    }).then(function () {
-      return overlay.getFullAliasById(overlay.getAliases()[0].getId());
-    }).then(function (data) {
-      layoutAlias = data;
-      return map.getModel().getAliasById(layoutAlias.getId());
-    }).then(function (alias) {
-      win = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      return win.init();
-    }).then(function () {
-      win.layoutAliases = [layoutAlias];
-      win.layoutNames = ["xxx"];
-      return win.createGenomicDiv();
-    }).then(function (div) {
-      assert.ok(div);
-      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") === -1);
-      win.destroy();
-    });
-
-  });
-
-  it("createGeneticsDiv with no genetic data", function () {
-    var map;
-
-    var win;
-    var aliasId = 329173;
-
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      var overlay = new LayoutData(18077, "xxx");
-      return overlay.init();
-    }).then(function () {
-      return map.getModel().getAliasById(aliasId);
-    }).then(function (alias) {
-      win = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      return win.init();
-    }).then(function () {
-      win.layoutAliases = [undefined];
-      return win.createGenomicDiv();
-    }).then(function (div) {
-      assert.ok(div);
-      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") === -1);
-      win.destroy();
-    });
-
-  });
-
-  it("createGeneticsDivForUnknownOrganism", function () {
-    var map;
-    var overlay;
-
-    var layoutAlias;
-    var win;
-
-    return ServerConnector.getProject().then(function (project) {
-      project.setOrganism({
-        type: "TAXONOMY",
-        resource: "123456"
-      });
-      map = helper.createCustomMap(project);
-      overlay = new LayoutData(18077, "xxx");
-      return overlay.init();
-    }).then(function () {
-      return overlay.getFullAliasById(overlay.getAliases()[0].getId());
-    }).then(function (data) {
-      layoutAlias = data;
-      return map.getModel().getAliasById(layoutAlias.getId());
-    }).then(function (alias) {
-      win = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      return win.init();
-    }).then(function () {
-      win.layoutAliases = [layoutAlias];
-      return win.createGenomicDiv();
-    }).then(function (div) {
-      assert.ok(div);
-      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") >= -1);
-      win.destroy();
-    });
-
-  });
-
-  it("createWaitingContentDiv", function () {
-    var map = helper.createCustomMap();
-    var alias = helper.createAlias(map);
-    alias.setIsComplete(true);
-
-    var aliasWindow = new AliasInfoWindow({
-      alias: alias,
-      map: map
-    });
-
-    assert.ok(functions.isDomElement(aliasWindow.createWaitingContentDiv()));
-  });
-
-  it("createChartDiv ", function () {
-    var map, ie, aliasWindow;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      ie = new IdentifiedElement({
-        id: 329170,
-        modelId: map.getId(),
-        type: "ALIAS"
-      });
-
-      return map.getModel().getByIdentifiedElement(ie, true);
-    }).then(function (alias) {
-      aliasWindow = new AliasInfoWindow({
-        alias: alias,
-        map: map
-      });
-      aliasWindow.layoutAliases = [helper.createLayoutAlias(alias), null];
-      aliasWindow.layoutNames = ["x", "y"];
-      return aliasWindow.createChartDiv();
-    }).then(function (div) {
-      assert.ok(div);
-    });
-  });
-
-});
+"use strict";
+require("../../mocha-config");
+var ServerConnector = require('../../ServerConnector-mock');
+
+var Promise = require("bluebird");
+
+var functions = require('../../../../main/js/Functions');
+
+var Alias = require('../../../../main/js/map/data/Alias');
+var Drug = require('../../../../main/js/map/data/Drug');
+var AliasInfoWindow = require('../../../../main/js/map/window/AliasInfoWindow');
+var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement');
+var LayoutData = require('../../../../main/js/map/data/LayoutData');
+
+var assert = require('assert');
+
+var logger = require('../../logger');
+
+describe('AliasInfoWindow', function () {
+  describe('constructor', function () {
+    it("default", function () {
+      var map = helper.createCustomMap();
+
+      var alias = helper.createAlias();
+      alias.setId(30001);
+      alias.setIsComplete(false);
+      alias.setModelId(map.getId());
+      map.getModel().addAlias(alias);
+
+      var aliasWindow = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+
+      assert.equal(alias, aliasWindow.getAlias());
+      assert.equal(map, aliasWindow.getCustomMap());
+      assert.ok(aliasWindow.getContent().innerHTML.indexOf("loading") >= 0);
+      assert.equal(logger.getWarnings().length, 0);
+    });
+    it("loading data", function () {
+      var map = helper.createCustomMap();
+      map.getOverlayDataForAlias = function () {
+        return Promise.resolve([]);
+      };
+
+      var javaObject = {
+        bounds: {
+          x: 190,
+          y: 44,
+          width: 80,
+          height: 40
+        },
+        modelId: map.getId(),
+        idObject: 30001
+      };
+      var alias = new Alias(javaObject);
+      map.getModel().addAlias(alias);
+
+      var aliasWindow = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+
+      assert.equal(alias, aliasWindow.alias);
+      assert.equal(map, aliasWindow.customMap);
+      assert.ok(aliasWindow.getContent().innerHTML.indexOf("loading") > -1);
+    });
+  });
+
+  it("createOverlayInfoDiv", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createDrugDbOverlay(map);
+
+    var alias = helper.createAlias(map);
+    var aliasWindow = new AliasInfoWindow({
+      alias: alias,
+      map: map
+    });
+
+    oc.searchNamesByTarget = function () {
+      return Promise.resolve(["xField"]);
+    };
+    oc.getElementsByQueryFromServer = function () {
+      return Promise.resolve([new Drug({
+        name: "xField",
+        references: [],
+        targets: []
+      })]);
+    };
+
+    return oc.getDetailDataByIdentifiedElement(new IdentifiedElement(alias), true).then(function (data) {
+      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
+      assert.ok(functions.isDomElement(overlayDiv));
+      assert.ok(overlayDiv.innerHTML.indexOf('xField') >= 0);
+    });
+
+  });
+
+  it("createDrugOverlayInfoDiv", function () {
+    helper.setUrl("http://test/?id=drug_target_sample");
+
+    var map, ie, aliasWindow, oc;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      oc = helper.createDrugDbOverlay(map);
+
+      ie = new IdentifiedElement({
+        id: 436152,
+        modelId: map.getId(),
+        type: "ALIAS"
+      });
+
+      return map.getModel().getByIdentifiedElement(ie, true);
+    }).then(function (alias) {
+      aliasWindow = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      return oc.getDetailDataByIdentifiedElement(ie, true);
+    }).then(function (data) {
+      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
+      assert.ok(functions.isDomElement(overlayDiv));
+      assert.ok(overlayDiv.innerHTML.indexOf('NADH') >= 0);
+
+    });
+  });
+
+  it("createChemicalOverlayInfoDiv", function () {
+    var map, ie, aliasWindow, oc;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+
+      oc = helper.createChemicalDbOverlay(map);
+
+      ie = new IdentifiedElement({
+        id: 329170,
+        modelId: map.getId(),
+        type: "ALIAS"
+      });
+
+      return map.getModel().getByIdentifiedElement(ie, true);
+    }).then(function (alias) {
+      aliasWindow = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      return oc.getDetailDataByIdentifiedElement(ie, true);
+    }).then(function (data) {
+      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
+      assert.ok(functions.isDomElement(overlayDiv));
+    });
+  });
+
+  it("createCommentOverlayInfoDiv", function () {
+    var map = helper.createCustomMap();
+
+    var oc = helper.createCommentDbOverlay(map);
+
+    var alias = helper.createAlias();
+    alias.setId(3001);
+    alias.setIsComplete(true);
+    alias.setModelId(map.getId());
+    map.getModel().addAlias(alias);
+
+    var aliasWindow = new AliasInfoWindow({
+      alias: alias,
+      map: map
+    });
+
+    return oc.getDetailDataByIdentifiedElement(new IdentifiedElement(alias), true).then(function (data) {
+      var comment = helper.createComment(alias);
+      comment.setContent("test comment Content");
+
+      data[0] = comment;
+      data['__FULL__'] = null;
+
+      var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data);
+
+      assert.ok(functions.isDomElement(overlayDiv));
+      assert.ok(overlayDiv.innerHTML.indexOf(comment.getContent()) >= 0);
+      assert.ok(overlayDiv.innerHTML.indexOf(comment.getId()) >= 0);
+    });
+
+  });
+
+  it("createGeneticsDiv", function () {
+    var map;
+    var overlay;
+
+    var layoutAlias;
+    var win;
+
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      overlay = new LayoutData(18077, "xxx");
+      return overlay.init();
+    }).then(function () {
+      return overlay.getFullAliasById(overlay.getAliases()[0].getId());
+    }).then(function (data) {
+      layoutAlias = data;
+      return map.getModel().getAliasById(layoutAlias.getId());
+    }).then(function (alias) {
+      win = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      return win.init();
+    }).then(function () {
+      win.layoutAliases = [layoutAlias];
+      win.layoutNames = ["xxx"];
+      return win.createGenomicDiv();
+    }).then(function (div) {
+      assert.ok(div);
+      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") === -1);
+      win.destroy();
+    });
+
+  });
+
+  it("createGeneticsDiv with no genetic data", function () {
+    var map;
+
+    var win;
+    var aliasId = 329173;
+
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      var overlay = new LayoutData(18077, "xxx");
+      return overlay.init();
+    }).then(function () {
+      return map.getModel().getAliasById(aliasId);
+    }).then(function (alias) {
+      win = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      return win.init();
+    }).then(function () {
+      win.layoutAliases = [undefined];
+      return win.createGenomicDiv();
+    }).then(function (div) {
+      assert.ok(div);
+      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") === -1);
+      win.destroy();
+    });
+
+  });
+
+  it("createGeneticsDivForUnknownOrganism", function () {
+    var map;
+    var overlay;
+
+    var layoutAlias;
+    var win;
+
+    return ServerConnector.getProject().then(function (project) {
+      project.setOrganism({
+        type: "TAXONOMY",
+        resource: "123456"
+      });
+      map = helper.createCustomMap(project);
+      overlay = new LayoutData(18077, "xxx");
+      return overlay.init();
+    }).then(function () {
+      return overlay.getFullAliasById(overlay.getAliases()[0].getId());
+    }).then(function (data) {
+      layoutAlias = data;
+      return map.getModel().getAliasById(layoutAlias.getId());
+    }).then(function (alias) {
+      win = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      return win.init();
+    }).then(function () {
+      win.layoutAliases = [layoutAlias];
+      return win.createGenomicDiv();
+    }).then(function (div) {
+      assert.ok(div);
+      assert.ok(div.innerHTML.indexOf("No reference genome data available on minerva platform") >= -1);
+      win.destroy();
+    });
+
+  });
+
+  it("createWaitingContentDiv", function () {
+    var map = helper.createCustomMap();
+    var alias = helper.createAlias(map);
+    alias.setIsComplete(true);
+
+    var aliasWindow = new AliasInfoWindow({
+      alias: alias,
+      map: map
+    });
+
+    assert.ok(functions.isDomElement(aliasWindow.createWaitingContentDiv()));
+  });
+
+  it("createChartDiv ", function () {
+    var map, ie, aliasWindow;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      ie = new IdentifiedElement({
+        id: 329170,
+        modelId: map.getId(),
+        type: "ALIAS"
+      });
+
+      return map.getModel().getByIdentifiedElement(ie, true);
+    }).then(function (alias) {
+      aliasWindow = new AliasInfoWindow({
+        alias: alias,
+        map: map
+      });
+      aliasWindow.layoutAliases = [helper.createLayoutAlias(alias), null];
+      aliasWindow.layoutNames = ["x", "y"];
+      return aliasWindow.createChartDiv();
+    }).then(function (div) {
+      assert.ok(div);
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index aa17ce693a54703205d7b43c2b756b58642921ef..9c743127841a5697b4725329b25ad589302997dc 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -1,268 +1,268 @@
-"use strict";
-
-require("./mocha-config");
-
-var minerva = require('../../main/js/minerva');
-var ServerConnectorMock = require('./ServerConnector-mock');
-var ProxyAccessPlugin = require('./plugin/ProxyAccessPlugin');
-
-var chai = require('chai');
-var assert = chai.assert;
-var logger = require('./logger');
-
-describe('minerva global', function () {
-  beforeEach(function () {
-    global.ServerConnector = undefined;
-  });
-
-  afterEach(function () {
-    global.ServerConnector = ServerConnectorMock;
-  });
-
-  describe('create', function () {
-    it('default', function () {
-      var options = null;
-      return ServerConnectorMock.getProject().then(function (project) {
-        options = helper.createCustomMapOptions(project);
-
-        return minerva.create(options);
-      }).then(function (result) {
-        assert.ok(result);
-        assert.equal(logger.getWarnings().length, 0);
-        return result.destroy();
-      });
-    });
-    it('invalid projectId', function () {
-      var options = {
-        projectId: "unknownId",
-        element: testDiv
-      };
-      return minerva.create(options).then(function () {
-        assert.ok(false);
-      }, function (error) {
-        assert.ok(error.message.indexOf("Project with given id doesn't exist") >= 0);
-      });
-    });
-    it('with overview', function () {
-      helper.setUrl("http://test/?id=complex_model_with_images");
-      var customMap;
-      return ServerConnectorMock.getProject().then(function (project) {
-        var options = helper.createOptions(project);
-
-        return minerva.create(options);
-      }).then(function (result) {
-        customMap = result;
-        assert.ok(result);
-        assert.equal(logger.getWarnings().length, 0);
-        var showOverviewButton = document.getElementsByName("showOverviewButton")[0];
-        return showOverviewButton.onclick();
-      }).then(function () {
-        return customMap.destroy();
-      });
-    });
-  });
-
-
-  it("showComments", function () {
-    var options = null;
-    var map ;
-    return ServerConnectorMock.getProject().then(function (project) {
-      options = helper.createCustomMapOptions(project);
-      return minerva.create(options);
-    }).then(function (result) {
-      map = result;
-      var commentCheckbox = document.getElementsByName("commentCheckbox")[0];
-      commentCheckbox.checked = true;
-      return commentCheckbox.onclick();
-    }).then(function () {
-      assert.ok(ServerConnectorMock.getSessionData(options.getProject()).getShowComments());
-      return map.destroy();
-    });
-  });
-
-  describe("constructor", function () {
-
-    it("with GET zoom param", function () {
-      helper.setUrl("http://test/?zoom=5");
-      var options;
-      return ServerConnectorMock.getProject().then(function (project) {
-        options = helper.createCustomMapOptions(project);
-        return minerva.create(options);
-      }).then(function (result) {
-        var sessionData = ServerConnectorMock.getSessionData(options.getProject());
-        assert.equal(sessionData.getZoomLevel(options.getProject().getModel()), 5);
-        return result.destroy();
-      });
-    });
-
-    it("with GET coordinates param", function () {
-      helper.setUrl("http://test/?x=5&y=6");
-      var options;
-      return ServerConnectorMock.getProject().then(function (project) {
-        options = helper.createCustomMapOptions(project);
-        return minerva.create(options);
-      }).then(function (result) {
-        var center = ServerConnectorMock.getSessionData(options.getProject()).getCenter(options.getProject().getModel());
-        assert.ok(center instanceof google.maps.Point);
-        assert.equal(center.x, 5);
-        assert.equal(center.y, 6);
-        return result.destroy();
-      });
-    });
-
-    it("simple", function () {
-      var options = {
-        projectId: "sample",
-        element: testDiv
-      };
-      return minerva.create(options).then(function (result) {
-        assert.ok(result);
-        result.destroy();
-      });
-    });
-  });
-
-  it('create with layout', function () {
-    var layout, project, plugin, map;
-    return ServerConnectorMock.getProject().then(function (result) {
-      project = result;
-      var options = helper.createCustomMapOptions(project);
-
-      plugin = new ProxyAccessPlugin({});
-      options.getPlugins().push(plugin);
-
-      layout = project.getModel().getLayouts()[1];
-
-      helper.setUrl("http://test/?layout=" + layout.getName());
-
-      return minerva.create(options);
-    }).then(function (result) {
-      map = result;
-      assert.ok(result);
-      // input file is not available so it's the background
-      return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays();
-    }).then(function (visibleDataOverlays) {
-      // input file is available so it's not the background file but overlay
-      assert.equal(visibleDataOverlays.length, 0);
-      assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), layout.getId());
-      assert.equal(logger.getWarnings().length, 0);
-      return map.destroy();
-    });
-  });
-
-  it('create with layout from session data', function () {
-    var layout;
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-
-      layout = project.getModel().getLayouts()[1];
-
-      ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId());
-
-      return minerva.create(options);
-    }).then(function (result) {
-      assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId());
-      return result.destroy();
-    });
-  });
-
-  it('create with layout 2', function () {
-    helper.setUrl("http://test/?layout=xxx");
-    var globalObject, plugin;
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-      plugin = new ProxyAccessPlugin();
-      options.getPlugins().push(plugin);
-      return minerva.create(options);
-    }).then(function (result) {
-      globalObject = result;
-      assert.ok(result);
-      return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays();
-    }).then(function (visibleDataOverlays) {
-      // input file is available so it's not the background file but overlay
-      assert.equal(visibleDataOverlays.length, 1);
-      assert.equal(logger.getWarnings().length, 0);
-      return globalObject.destroy();
-    });
-  });
-
-  it('create with search overlay and GET search param', function () {
-    helper.setUrl("http://test/?search=s1");
-
-    var globalObject, plugin;
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-      plugin = new ProxyAccessPlugin();
-      options.getPlugins().push(plugin);
-      return minerva.create(options);
-    }).then(function (result) {
-      globalObject = result;
-      return plugin.getMinervaPluginProxy().project.map.getHighlightedBioEntities("search");
-    }).then(function (elements) {
-      assert.ok(elements.length > 0);
-      return globalObject.destroy();
-    });
-  });
-
-  it('create with show submodel GET param', function () {
-    helper.setUrl("http://test/?submap=15781");
-
-    var project = helper.createProject();
-    project.getModel().setId(15781);
-
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-
-      return minerva.create(options);
-    }).then(function (result) {
-      return result.destroy();
-    });
-  });
-
-  it("constructor with touch enabled", function () {
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-      options.setCustomTouchInterface(true);
-      return minerva.create(options).then(function (result) {
-        assert.ok(result);
-        return result.destroy();
-      });
-    });
-  });
-
-
-  it('create Export', function () {
-    var options = null;
-    return ServerConnectorMock.getProject().then(function (project) {
-      options = helper.createCustomMapOptions(project);
-
-      return minerva.createExport(options);
-    }).then(function (result) {
-      assert.ok(result);
-      assert.equal(logger.getWarnings().length, 0);
-    });
-  });
-
-  it('create Admin', function () {
-    var options = null;
-    return ServerConnectorMock.getProject().then(function (project) {
-      options = helper.createCustomMapOptions(project);
-
-      return minerva.createAdmin(options);
-    }).then(function (result) {
-      assert.ok(result);
-      assert.equal(logger.getWarnings().length, 0);
-      result.destroy();
-    });
-  });
-  it('getProject', function () {
-    return ServerConnectorMock.getProject().then(function (project) {
-      var options = helper.createCustomMapOptions(project);
-      return minerva.create(options);
-    }).then(function (result) {
-      assert.equal(result.getProject().getProjectId(), "sample");
-      return result.destroy();
-    });
-  });
-
-});
+"use strict";
+
+require("./mocha-config");
+
+var minerva = require('../../main/js/minerva');
+var ServerConnectorMock = require('./ServerConnector-mock');
+var ProxyAccessPlugin = require('./plugin/ProxyAccessPlugin');
+
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('./logger');
+
+describe('minerva global', function () {
+  beforeEach(function () {
+    global.ServerConnector = undefined;
+  });
+
+  afterEach(function () {
+    global.ServerConnector = ServerConnectorMock;
+  });
+
+  describe('create', function () {
+    it('default', function () {
+      var options = null;
+      return ServerConnectorMock.getProject().then(function (project) {
+        options = helper.createCustomMapOptions(project);
+
+        return minerva.create(options);
+      }).then(function (result) {
+        assert.ok(result);
+        assert.equal(logger.getWarnings().length, 0);
+        return result.destroy();
+      });
+    });
+    it('invalid projectId', function () {
+      var options = {
+        projectId: "unknownId",
+        element: testDiv
+      };
+      return minerva.create(options).then(function () {
+        assert.ok(false);
+      }, function (error) {
+        assert.ok(error.message.indexOf("Project with given id doesn't exist") >= 0);
+      });
+    });
+    it('with overview', function () {
+      helper.setUrl("http://test/?id=complex_model_with_images");
+      var customMap;
+      return ServerConnectorMock.getProject().then(function (project) {
+        var options = helper.createOptions(project);
+
+        return minerva.create(options);
+      }).then(function (result) {
+        customMap = result;
+        assert.ok(result);
+        assert.equal(logger.getWarnings().length, 0);
+        var showOverviewButton = document.getElementsByName("showOverviewButton")[0];
+        return showOverviewButton.onclick();
+      }).then(function () {
+        return customMap.destroy();
+      });
+    });
+  });
+
+
+  it("showComments", function () {
+    var options = null;
+    var map ;
+    return ServerConnectorMock.getProject().then(function (project) {
+      options = helper.createCustomMapOptions(project);
+      return minerva.create(options);
+    }).then(function (result) {
+      map = result;
+      var commentCheckbox = document.getElementsByName("commentCheckbox")[0];
+      commentCheckbox.checked = true;
+      return commentCheckbox.onclick();
+    }).then(function () {
+      assert.ok(ServerConnectorMock.getSessionData(options.getProject()).getShowComments());
+      return map.destroy();
+    });
+  });
+
+  describe("constructor", function () {
+
+    it("with GET zoom param", function () {
+      helper.setUrl("http://test/?zoom=5");
+      var options;
+      return ServerConnectorMock.getProject().then(function (project) {
+        options = helper.createCustomMapOptions(project);
+        return minerva.create(options);
+      }).then(function (result) {
+        var sessionData = ServerConnectorMock.getSessionData(options.getProject());
+        assert.equal(sessionData.getZoomLevel(options.getProject().getModel()), 5);
+        return result.destroy();
+      });
+    });
+
+    it("with GET coordinates param", function () {
+      helper.setUrl("http://test/?x=5&y=6");
+      var options;
+      return ServerConnectorMock.getProject().then(function (project) {
+        options = helper.createCustomMapOptions(project);
+        return minerva.create(options);
+      }).then(function (result) {
+        var center = ServerConnectorMock.getSessionData(options.getProject()).getCenter(options.getProject().getModel());
+        assert.ok(center instanceof google.maps.Point);
+        assert.equal(center.x, 5);
+        assert.equal(center.y, 6);
+        return result.destroy();
+      });
+    });
+
+    it("simple", function () {
+      var options = {
+        projectId: "sample",
+        element: testDiv
+      };
+      return minerva.create(options).then(function (result) {
+        assert.ok(result);
+        result.destroy();
+      });
+    });
+  });
+
+  it('create with layout', function () {
+    var layout, project, plugin, map;
+    return ServerConnectorMock.getProject().then(function (result) {
+      project = result;
+      var options = helper.createCustomMapOptions(project);
+
+      plugin = new ProxyAccessPlugin({});
+      options.getPlugins().push(plugin);
+
+      layout = project.getModel().getLayouts()[1];
+
+      helper.setUrl("http://test/?layout=" + layout.getName());
+
+      return minerva.create(options);
+    }).then(function (result) {
+      map = result;
+      assert.ok(result);
+      // input file is not available so it's the background
+      return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays();
+    }).then(function (visibleDataOverlays) {
+      // input file is available so it's not the background file but overlay
+      assert.equal(visibleDataOverlays.length, 0);
+      assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), layout.getId());
+      assert.equal(logger.getWarnings().length, 0);
+      return map.destroy();
+    });
+  });
+
+  it('create with layout from session data', function () {
+    var layout;
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+
+      layout = project.getModel().getLayouts()[1];
+
+      ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId());
+
+      return minerva.create(options);
+    }).then(function (result) {
+      assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId());
+      return result.destroy();
+    });
+  });
+
+  it('create with layout 2', function () {
+    helper.setUrl("http://test/?layout=xxx");
+    var globalObject, plugin;
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+      plugin = new ProxyAccessPlugin();
+      options.getPlugins().push(plugin);
+      return minerva.create(options);
+    }).then(function (result) {
+      globalObject = result;
+      assert.ok(result);
+      return plugin.getMinervaPluginProxy().project.map.getVisibleDataOverlays();
+    }).then(function (visibleDataOverlays) {
+      // input file is available so it's not the background file but overlay
+      assert.equal(visibleDataOverlays.length, 1);
+      assert.equal(logger.getWarnings().length, 0);
+      return globalObject.destroy();
+    });
+  });
+
+  it('create with search overlay and GET search param', function () {
+    helper.setUrl("http://test/?search=s1");
+
+    var globalObject, plugin;
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+      plugin = new ProxyAccessPlugin();
+      options.getPlugins().push(plugin);
+      return minerva.create(options);
+    }).then(function (result) {
+      globalObject = result;
+      return plugin.getMinervaPluginProxy().project.map.getHighlightedBioEntities("search");
+    }).then(function (elements) {
+      assert.ok(elements.length > 0);
+      return globalObject.destroy();
+    });
+  });
+
+  it('create with show submodel GET param', function () {
+    helper.setUrl("http://test/?submap=15781");
+
+    var project = helper.createProject();
+    project.getModel().setId(15781);
+
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+
+      return minerva.create(options);
+    }).then(function (result) {
+      return result.destroy();
+    });
+  });
+
+  it("constructor with touch enabled", function () {
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+      options.setCustomTouchInterface(true);
+      return minerva.create(options).then(function (result) {
+        assert.ok(result);
+        return result.destroy();
+      });
+    });
+  });
+
+
+  it('create Export', function () {
+    var options = null;
+    return ServerConnectorMock.getProject().then(function (project) {
+      options = helper.createCustomMapOptions(project);
+
+      return minerva.createExport(options);
+    }).then(function (result) {
+      assert.ok(result);
+      assert.equal(logger.getWarnings().length, 0);
+    });
+  });
+
+  it('create Admin', function () {
+    var options = null;
+    return ServerConnectorMock.getProject().then(function (project) {
+      options = helper.createCustomMapOptions(project);
+
+      return minerva.createAdmin(options);
+    }).then(function (result) {
+      assert.ok(result);
+      assert.equal(logger.getWarnings().length, 0);
+      result.destroy();
+    });
+  });
+  it('getProject', function () {
+    return ServerConnectorMock.getProject().then(function (project) {
+      var options = helper.createCustomMapOptions(project);
+      return minerva.create(options);
+    }).then(function (result) {
+      assert.equal(result.getProject().getProjectId(), "sample");
+      return result.destroy();
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 9822eb85167b59678c335bbc85b94560cbcd60a4..9daf31dbe28dcb0c16e4dafa6a53509a21c9bb7f 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -1,152 +1,152 @@
-"use strict";
-
-var Promise = require("bluebird");
-var Cookies = require('js-cookie');
-
-var Helper = require('./helper');
-
-var GuiConnector = require('./GuiConnector-mock');
-
-var path = require('path');
-
-// -----------------------------
-
-var logger = require('./logger');
-
-function removeCookies() {
-  var cookies = Cookies.get();
-  for (var cookie in cookies) {
-    Cookies.remove(cookie);
-  }
-}
-
-function mockBootstrap() {
-  $.fn.typeahead = function () {
-    logger.debug("Mock typeahead function call");
-  };
-}
-
-before(function () {
-  // requirejs.config({
-  //   baseUrl: path.dirname(require.main.filename) + "/../../../"
-  // });
-
-// GLOBAL configuration
-  global.navigator = {
-    userAgent: 'node.js',
-    appName: 'MinervaUnitTest',
-    appVersion: '0.0.1'
-
-  };
-
-  var jsdom = require('jsdom');
-  global.dom = new jsdom.JSDOM();
-  global.window = global.dom.window;
-  global.document = window.document;
-  global.document.elementFromPoint = function () {
-  };
-
-  global.$ = require('jquery');
-  global.jQuery = $;
-  global.window.$ = $;
-
-// additions to jsdom implementations:
-  global.Option = window.Option;
-  global.Blob = window.Blob;
-  global.MouseEvent = window.MouseEvent;
-  global.FileReader = window.FileReader;
-
-  var originalCreateElement = document.createElement;
-  document.createElement = function (arg) {
-    var result = originalCreateElement.call(this, arg);
-    // workaround for: https://github.com/tmpvar/jsdom/issues/961
-    if ("li" === arg) {
-      result.dataset = [];
-    }
-    return result;
-  };
-
-  window.open = function () {
-    var result = {};
-    result.focus = function () {
-
-    };
-    return result;
-  };
-  window.URL.createObjectURL = function () {
-
-  };
-
-// pileup is using heavily some browser defined javascript
-  var pileup = require('pileup');
-  pileup.create = function () {
-    return {
-      destroy: function () {
-      }
-    };
-  };
-  pileup.formats.twoBit = function () {
-    return {};
-  };
-  pileup.formats.bigBed = function () {
-    return {};
-  };
-// ---
-
-  require('jquery-ui-dist/jquery-ui.js');
-
-  require("bootstrap");
-
-  require('datatables.net')(window, $);
-  require('spectrum-colorpicker');
-  global.tinycolor = window.tinycolor;
-  require('jstree');
-
-  global.google = require('./google-map-mock');
-
-  global.ServerConnector = require('./ServerConnector-mock');
-
-  Promise.longStackTraces();
-
-  mockBootstrap();
-});
-
-beforeEach(function () {
-  window.onresize = undefined;
-
-  logger.flushBuffer();
-
-  removeCookies();
-
-  ServerConnector.init();
-
-  ServerConnector.getSessionData(null).setToken("MOCK_TOKEN_ID");
-  ServerConnector.getSessionData(null).setLogin("anonymous");
-
-
-  global.testDiv = document.createElement("div");
-  global.testDiv.id = "test";
-  document.body.appendChild(testDiv);
-
-  return ServerConnector.getConfiguration().then(function (configuration) {
-    global.helper = new Helper(configuration);
-    helper.setUrl("http://test/");
-    GuiConnector.init();
-  });
-
-});
-
-afterEach(function () {
-  document.body.removeChild(global.testDiv);
-  delete global.testDiv;
-  if (this.currentTest.state !== 'failed') {
-    if (document.body.hasChildNodes()) {
-      var content = document.body.innerHTML;
-      document.body.innerHTML = "";
-      this.test.error(new Error("Test didn't left clean document. Found: " + content));
-    } else if ($._data(window, "events").resize) {
-      logger.debug($._data(window, "events").resize);
-      this.test.error(new Error("Test didn't left clean resize events handlers."));
-    }
-  }
-});
+"use strict";
+
+var Promise = require("bluebird");
+var Cookies = require('js-cookie');
+
+var Helper = require('./helper');
+
+var GuiConnector = require('./GuiConnector-mock');
+
+var path = require('path');
+
+// -----------------------------
+
+var logger = require('./logger');
+
+function removeCookies() {
+  var cookies = Cookies.get();
+  for (var cookie in cookies) {
+    Cookies.remove(cookie);
+  }
+}
+
+function mockBootstrap() {
+  $.fn.typeahead = function () {
+    logger.debug("Mock typeahead function call");
+  };
+}
+
+before(function () {
+  // requirejs.config({
+  //   baseUrl: path.dirname(require.main.filename) + "/../../../"
+  // });
+
+// GLOBAL configuration
+  global.navigator = {
+    userAgent: 'node.js',
+    appName: 'MinervaUnitTest',
+    appVersion: '0.0.1'
+
+  };
+
+  var jsdom = require('jsdom');
+  global.dom = new jsdom.JSDOM();
+  global.window = global.dom.window;
+  global.document = window.document;
+  global.document.elementFromPoint = function () {
+  };
+
+  global.$ = require('jquery');
+  global.jQuery = $;
+  global.window.$ = $;
+
+// additions to jsdom implementations:
+  global.Option = window.Option;
+  global.Blob = window.Blob;
+  global.MouseEvent = window.MouseEvent;
+  global.FileReader = window.FileReader;
+
+  var originalCreateElement = document.createElement;
+  document.createElement = function (arg) {
+    var result = originalCreateElement.call(this, arg);
+    // workaround for: https://github.com/tmpvar/jsdom/issues/961
+    if ("li" === arg) {
+      result.dataset = [];
+    }
+    return result;
+  };
+
+  window.open = function () {
+    var result = {};
+    result.focus = function () {
+
+    };
+    return result;
+  };
+  window.URL.createObjectURL = function () {
+
+  };
+
+// pileup is using heavily some browser defined javascript
+  var pileup = require('pileup');
+  pileup.create = function () {
+    return {
+      destroy: function () {
+      }
+    };
+  };
+  pileup.formats.twoBit = function () {
+    return {};
+  };
+  pileup.formats.bigBed = function () {
+    return {};
+  };
+// ---
+
+  require('jquery-ui-dist/jquery-ui.js');
+
+  require("bootstrap");
+
+  require('datatables.net')(window, $);
+  require('spectrum-colorpicker');
+  global.tinycolor = window.tinycolor;
+  require('jstree');
+
+  global.google = require('./google-map-mock');
+
+  global.ServerConnector = require('./ServerConnector-mock');
+
+  Promise.longStackTraces();
+
+  mockBootstrap();
+});
+
+beforeEach(function () {
+  window.onresize = undefined;
+
+  logger.flushBuffer();
+
+  removeCookies();
+
+  ServerConnector.init();
+
+  ServerConnector.getSessionData(null).setToken("MOCK_TOKEN_ID");
+  ServerConnector.getSessionData(null).setLogin("anonymous");
+
+
+  global.testDiv = document.createElement("div");
+  global.testDiv.id = "test";
+  document.body.appendChild(testDiv);
+
+  return ServerConnector.getConfiguration().then(function (configuration) {
+    global.helper = new Helper(configuration);
+    helper.setUrl("http://test/");
+    GuiConnector.init();
+  });
+
+});
+
+afterEach(function () {
+  document.body.removeChild(global.testDiv);
+  delete global.testDiv;
+  if (this.currentTest.state !== 'failed') {
+    if (document.body.hasChildNodes()) {
+      var content = document.body.innerHTML;
+      document.body.innerHTML = "";
+      this.test.error(new Error("Test didn't left clean document. Found: " + content));
+    } else if ($._data(window, "events").resize) {
+      logger.debug($._data(window, "events").resize);
+      this.test.error(new Error("Test didn't left clean resize events handlers."));
+    }
+  }
+});
diff --git a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
index dec73809dc8a0cb8b1c9ae354efd912c2eb6c5c2..ef6bb30f5fca0f800d87f7fe151fcb01256a7518 100644
--- a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
+++ b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
@@ -1,443 +1,443 @@
-"use strict";
-
-require("../mocha-config");
-
-var Alias = require('../../../main/js/map/data/Alias');
-var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy');
-var ServerConnector = require('../ServerConnector-mock');
-
-var logger = require('../logger');
-
-var chai = require('chai');
-var assert = chai.assert;
-
-function createProxy(map) {
-  return new MinervaPluginProxy({
-    map: map,
-    element: testDiv,
-    pluginId: "xx",
-    configuration: helper.getConfiguration()
-  });
-}
-
-describe('MinervaPluginProxy', function () {
-  it('constructor', function () {
-    var map = helper.createCustomMap();
-    var proxy = new MinervaPluginProxy({
-      map: map,
-      element: testDiv,
-      pluginId: "xx",
-      configuration: helper.getConfiguration()
-    });
-    assert.ok(proxy);
-    assert.ok(proxy.pluginId);
-    assert.ok(proxy.element);
-    assert.ok(proxy.project);
-    assert.ok(proxy.configuration);
-    assert.equal(0, logger.getWarnings().length);
-  });
-
-  it('add search listener', function () {
-    var callbackOk = false;
-    var map;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      helper.createSearchDbOverlay(map);
-      var proxy = createProxy(map);
-
-      proxy.project.map.addListener({
-        dbOverlayName: "search",
-        type: "onSearch",
-        callback: function (elements) {
-          assert.ok(elements.length > 0);
-          assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
-          callbackOk = true;
-        }
-      });
-      return map.getOverlayByName("search").searchByQuery("s1");
-    }).then(function () {
-      assert.ok(callbackOk);
-      callbackOk = false;
-      return map.getOverlayByName("search").searchByQuery("s1");
-    }).then(function () {
-      assert.ok(callbackOk);
-      callbackOk = false;
-      var params = {
-        coordinates: new google.maps.Point(184.79, 365.76),
-        zoom: 2,
-        modelId: map.getProject().getModel().getId()
-      };
-      return map.getOverlayByName("search").searchByCoordinates(params);
-    }).then(function () {
-      assert.ok(callbackOk);
-      return map.destroy();
-    });
-  });
-
-  describe('removeListener', function () {
-    it('valid listener', function () {
-      var callbackOk = false;
-      var map, options;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        helper.createSearchDbOverlay(map);
-        var proxy = createProxy(map);
-
-        options = {
-          dbOverlayName: "search",
-          type: "onSearch",
-          callback: function (elements) {
-            assert.ok(elements.length > 0);
-            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
-            callbackOk = true;
-          }
-        };
-        proxy.project.map.addListener(options);
-        proxy.project.map.removeListener(options);
-        assert.equal(0, logger.getWarnings().length);
-        return map.destroy();
-      });
-    });
-    it('unknown listener', function () {
-      var callbackOk = false;
-      var map, options;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        helper.createSearchDbOverlay(map);
-        var proxy = createProxy(map);
-
-        options = {
-          dbOverlayName: "search",
-          type: "onSearch",
-          callback: function (elements) {
-            assert.ok(elements.length > 0);
-            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
-            callbackOk = true;
-          }
-        };
-        proxy.project.map.addListener(options);
-        proxy.project.map.removeListener({});
-      }).then(function () {
-        assert.notOk("Exception expected");
-      }, function (error) {
-        assert.ok(error.message.indexOf("Listener doesn't exist") >= 0);
-
-        return map.destroy();
-      });
-    });
-  });
-  describe('removeAllListeners', function () {
-    it('valid listener', function () {
-      var callbackOk = false;
-      var map, options;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        helper.createSearchDbOverlay(map);
-        var proxy = createProxy(map);
-
-        options = {
-          dbOverlayName: "search",
-          type: "onSearch",
-          callback: function (elements) {
-            assert.ok(elements.length > 0);
-            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
-            callbackOk = true;
-          }
-        };
-        proxy.project.map.addListener(options);
-        var removedListeners = proxy.project.map.removeAllListeners();
-        assert.equal(1, removedListeners.length);
-        return map.destroy();
-      });
-    });
-    it('no listeners', function () {
-      var map;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        helper.createSearchDbOverlay(map);
-        var proxy = createProxy(map);
-        var removedListeners = proxy.project.map.removeAllListeners();
-        assert.equal(0, removedListeners.length);
-        return map.destroy();
-      });
-    });
-  });
-
-  describe("getBioEntityById", function () {
-    it("for alias", function () {
-      var map, proxy;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        proxy = createProxy(map);
-        return proxy.project.data.getBioEntityById({
-          id: 329177,
-          modelId: 15781,
-          type: "ALIAS"
-        });
-      }).then(function (result) {
-        assert.ok(result);
-      }).then(function () {
-        map.destroy();
-      });
-    });
-
-    it("for reaction", function () {
-      var map, proxy;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        proxy = createProxy(map);
-        return proxy.project.data.getBioEntityById({
-          id: 153508,
-          modelId: 15781,
-          type: "REACTION"
-        });
-      }).then(function (result) {
-        assert.ok(result);
-        assert.ok(result.getReactants()[0] instanceof Alias);
-      }).then(function () {
-        map.destroy();
-      });
-    });
-  });
-
-  describe("showElement", function () {
-    it("alias", function () {
-      var elementToShow = {
-        element: {
-          id: 329171,
-          modelId: 15781,
-          type: "ALIAS"
-        },
-        type: "ICON"
-      };
-
-      var elementToShow2 = {
-        element: {
-          id: 329171,
-          modelId: 15781,
-          type: "ALIAS"
-        },
-        type: "SURFACE",
-        options: {
-          color: "#FF0000"
-        }
-      };
-      var map, proxy;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        proxy = createProxy(map);
-        return proxy.project.map.showBioEntity(elementToShow);
-      }).then(function () {
-        return proxy.project.map.getHighlightedBioEntities();
-      }).then(function (elements) {
-        assert.equal(elements.length, 1);
-        return proxy.project.map.showBioEntity(elementToShow2);
-      }).then(function () {
-        return proxy.project.map.getHighlightedBioEntities();
-      }).then(function (elements) {
-        assert.equal(elements.length, 2);
-        return proxy.project.map.hideBioEntity(elementToShow);
-      }).then(function () {
-        return proxy.project.map.getHighlightedBioEntities();
-      }).then(function (elements) {
-        assert.equal(elements.length, 1);
-        return proxy.project.map.hideBioEntity(elementToShow2);
-      }).then(function () {
-        return proxy.project.map.getHighlightedBioEntities();
-      }).then(function (elements) {
-        assert.equal(elements.length, 0);
-        map.destroy();
-      });
-    });
-
-    it("show twice", function () {
-      var elementToShow = {
-        element: {
-          id: 329171,
-          modelId: 15781,
-          type: "ALIAS"
-        },
-        type: "ICON"
-      };
-      var elementToShow2 = {
-        element: {
-          id: 329171,
-          modelId: 15781,
-          type: "ALIAS"
-        },
-        type: "SURFACE",
-        options: {
-          color: "#FF0000"
-        }
-      };
-
-      var map, proxy;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        proxy = createProxy(map);
-        proxy.project.map.showBioEntity(elementToShow);
-        return proxy.project.map.showBioEntity(elementToShow2);
-      }).then(function () {
-        map.destroy();
-        assert.ok(false, "Should be rejected due to fact that there is show in progress");
-      }, function (error) {
-        assert.ok(error.message.indexOf("wait until previous Promise for showBioEntity/hideBioEntity is resolved") >= 0);
-        map.destroy();
-      });
-    });
-  });
-
-  it("setCenter", function () {
-    var map, proxy;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      proxy = createProxy(map);
-      return proxy.project.map.setCenter({
-        modelId: 15781,
-        x: 10,
-        y: 20
-      });
-    }).then(function () {
-      var sessionData = ServerConnector.getSessionData(map.getProject());
-      var center = sessionData.getCenter(map.getProject().getModel());
-      assert.ok(center instanceof google.maps.Point);
-      assert.closeTo(parseFloat(center.x), 10, helper.EPSILON);
-      assert.closeTo(parseFloat(center.y), 20, helper.EPSILON);
-    }).then(function () {
-      map.destroy();
-    });
-  });
-
-  it("setZoom", function () {
-    var map, proxy;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      proxy = createProxy(map);
-      return proxy.project.map.setZoom({
-        modelId: 15781,
-        zoom: 10
-      });
-    }).then(function () {
-      var sessionData = ServerConnector.getSessionData(map.getProject());
-      var zoom = sessionData.getZoomLevel(map.getProject().getModel());
-      assert.equal(zoom, 10);
-    }).then(function () {
-      map.destroy();
-    });
-  });
-
-  it("getReactionByParticipantId", function () {
-    var ie = {
-      modelId: 15781,
-      type: "ALIAS",
-      id: 329167
-    };
-
-    var map, proxy;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      proxy = createProxy(map);
-      return proxy.project.data.getReactionsWithElement(ie);
-    }).then(function (reactions) {
-      assert.equal(reactions.length, 5);
-    }).then(function () {
-      map.destroy();
-    });
-
-  });
-
-  it("getAllBioEntities", function () {
-    var map, proxy;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      proxy = createProxy(map);
-      return proxy.project.data.getAllBioEntities();
-    }).then(function (result) {
-      assert.ok(result);
-      assert.ok(result.length > 0);
-    }).then(function () {
-      map.destroy();
-    });
-  });
-
-  describe("configuration", function () {
-    it("elementTypes", function () {
-      var map, proxy;
-      return ServerConnector.getProject().then(function (project) {
-        map = helper.createCustomMap(project);
-        proxy = createProxy(map);
-        assert.ok(proxy.configuration.elementTypes.length > 0);
-        map.destroy();
-      });
-    });
-  });
-
-  it("fitBounds", function () {
-    var map, proxy;
-    return ServerConnector.getProject().then(function (project) {
-      map = helper.createCustomMap(project);
-      proxy = createProxy(map);
-      var center = map.getGoogleMap().getCenter();
-      proxy.project.map.fitBounds({
-        id: 329177,
-        modelId: 15781,
-        type: "ALIAS"
-      });
-      var center2 = map.getGoogleMap().getCenter();
-      assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng());
-    }).then(function () {
-      map.destroy();
-    });
-  });
-
-  it("getProjectId", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.equal("sample", proxy.project.data.getProjectId());
-      map.destroy();
-    });
-  });
-  it("getName", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.equal("UNKNOWN DISEASE MAP", proxy.project.data.getName());
-      map.destroy();
-    });
-  });
-  it("getVersion", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.equal("0", proxy.project.data.getVersion());
-      map.destroy();
-    });
-  });
-  it("getDisease", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.ok(proxy.project.data.getDisease());
-      map.destroy();
-    });
-  });
-  it("getOrganism", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.ok(proxy.project.data.getOrganism());
-      map.destroy();
-    });
-  });
-  it("getModels", function () {
-    return ServerConnector.getProject().then(function (project) {
-      var map = helper.createCustomMap(project);
-      var proxy = createProxy(map);
-      assert.equal(1, proxy.project.data.getModels().length);
-      map.destroy();
-    });
-  });
-
-
-});
+"use strict";
+
+require("../mocha-config");
+
+var Alias = require('../../../main/js/map/data/Alias');
+var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy');
+var ServerConnector = require('../ServerConnector-mock');
+
+var logger = require('../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+function createProxy(map) {
+  return new MinervaPluginProxy({
+    map: map,
+    element: testDiv,
+    pluginId: "xx",
+    configuration: helper.getConfiguration()
+  });
+}
+
+describe('MinervaPluginProxy', function () {
+  it('constructor', function () {
+    var map = helper.createCustomMap();
+    var proxy = new MinervaPluginProxy({
+      map: map,
+      element: testDiv,
+      pluginId: "xx",
+      configuration: helper.getConfiguration()
+    });
+    assert.ok(proxy);
+    assert.ok(proxy.pluginId);
+    assert.ok(proxy.element);
+    assert.ok(proxy.project);
+    assert.ok(proxy.configuration);
+    assert.equal(0, logger.getWarnings().length);
+  });
+
+  it('add search listener', function () {
+    var callbackOk = false;
+    var map;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      helper.createSearchDbOverlay(map);
+      var proxy = createProxy(map);
+
+      proxy.project.map.addListener({
+        dbOverlayName: "search",
+        type: "onSearch",
+        callback: function (elements) {
+          assert.ok(elements.length > 0);
+          assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
+          callbackOk = true;
+        }
+      });
+      return map.getOverlayByName("search").searchByQuery("s1");
+    }).then(function () {
+      assert.ok(callbackOk);
+      callbackOk = false;
+      return map.getOverlayByName("search").searchByQuery("s1");
+    }).then(function () {
+      assert.ok(callbackOk);
+      callbackOk = false;
+      var params = {
+        coordinates: new google.maps.Point(184.79, 365.76),
+        zoom: 2,
+        modelId: map.getProject().getModel().getId()
+      };
+      return map.getOverlayByName("search").searchByCoordinates(params);
+    }).then(function () {
+      assert.ok(callbackOk);
+      return map.destroy();
+    });
+  });
+
+  describe('removeListener', function () {
+    it('valid listener', function () {
+      var callbackOk = false;
+      var map, options;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+
+        options = {
+          dbOverlayName: "search",
+          type: "onSearch",
+          callback: function (elements) {
+            assert.ok(elements.length > 0);
+            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
+            callbackOk = true;
+          }
+        };
+        proxy.project.map.addListener(options);
+        proxy.project.map.removeListener(options);
+        assert.equal(0, logger.getWarnings().length);
+        return map.destroy();
+      });
+    });
+    it('unknown listener', function () {
+      var callbackOk = false;
+      var map, options;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+
+        options = {
+          dbOverlayName: "search",
+          type: "onSearch",
+          callback: function (elements) {
+            assert.ok(elements.length > 0);
+            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
+            callbackOk = true;
+          }
+        };
+        proxy.project.map.addListener(options);
+        proxy.project.map.removeListener({});
+      }).then(function () {
+        assert.notOk("Exception expected");
+      }, function (error) {
+        assert.ok(error.message.indexOf("Listener doesn't exist") >= 0);
+
+        return map.destroy();
+      });
+    });
+  });
+  describe('removeAllListeners', function () {
+    it('valid listener', function () {
+      var callbackOk = false;
+      var map, options;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+
+        options = {
+          dbOverlayName: "search",
+          type: "onSearch",
+          callback: function (elements) {
+            assert.ok(elements.length > 0);
+            assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
+            callbackOk = true;
+          }
+        };
+        proxy.project.map.addListener(options);
+        var removedListeners = proxy.project.map.removeAllListeners();
+        assert.equal(1, removedListeners.length);
+        return map.destroy();
+      });
+    });
+    it('no listeners', function () {
+      var map;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+        var removedListeners = proxy.project.map.removeAllListeners();
+        assert.equal(0, removedListeners.length);
+        return map.destroy();
+      });
+    });
+  });
+
+  describe("getBioEntityById", function () {
+    it("for alias", function () {
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        proxy = createProxy(map);
+        return proxy.project.data.getBioEntityById({
+          id: 329177,
+          modelId: 15781,
+          type: "ALIAS"
+        });
+      }).then(function (result) {
+        assert.ok(result);
+      }).then(function () {
+        map.destroy();
+      });
+    });
+
+    it("for reaction", function () {
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        proxy = createProxy(map);
+        return proxy.project.data.getBioEntityById({
+          id: 153508,
+          modelId: 15781,
+          type: "REACTION"
+        });
+      }).then(function (result) {
+        assert.ok(result);
+        assert.ok(result.getReactants()[0] instanceof Alias);
+      }).then(function () {
+        map.destroy();
+      });
+    });
+  });
+
+  describe("showElement", function () {
+    it("alias", function () {
+      var elementToShow = {
+        element: {
+          id: 329171,
+          modelId: 15781,
+          type: "ALIAS"
+        },
+        type: "ICON"
+      };
+
+      var elementToShow2 = {
+        element: {
+          id: 329171,
+          modelId: 15781,
+          type: "ALIAS"
+        },
+        type: "SURFACE",
+        options: {
+          color: "#FF0000"
+        }
+      };
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        proxy = createProxy(map);
+        return proxy.project.map.showBioEntity(elementToShow);
+      }).then(function () {
+        return proxy.project.map.getHighlightedBioEntities();
+      }).then(function (elements) {
+        assert.equal(elements.length, 1);
+        return proxy.project.map.showBioEntity(elementToShow2);
+      }).then(function () {
+        return proxy.project.map.getHighlightedBioEntities();
+      }).then(function (elements) {
+        assert.equal(elements.length, 2);
+        return proxy.project.map.hideBioEntity(elementToShow);
+      }).then(function () {
+        return proxy.project.map.getHighlightedBioEntities();
+      }).then(function (elements) {
+        assert.equal(elements.length, 1);
+        return proxy.project.map.hideBioEntity(elementToShow2);
+      }).then(function () {
+        return proxy.project.map.getHighlightedBioEntities();
+      }).then(function (elements) {
+        assert.equal(elements.length, 0);
+        map.destroy();
+      });
+    });
+
+    it("show twice", function () {
+      var elementToShow = {
+        element: {
+          id: 329171,
+          modelId: 15781,
+          type: "ALIAS"
+        },
+        type: "ICON"
+      };
+      var elementToShow2 = {
+        element: {
+          id: 329171,
+          modelId: 15781,
+          type: "ALIAS"
+        },
+        type: "SURFACE",
+        options: {
+          color: "#FF0000"
+        }
+      };
+
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        proxy = createProxy(map);
+        proxy.project.map.showBioEntity(elementToShow);
+        return proxy.project.map.showBioEntity(elementToShow2);
+      }).then(function () {
+        map.destroy();
+        assert.ok(false, "Should be rejected due to fact that there is show in progress");
+      }, function (error) {
+        assert.ok(error.message.indexOf("wait until previous Promise for showBioEntity/hideBioEntity is resolved") >= 0);
+        map.destroy();
+      });
+    });
+  });
+
+  it("setCenter", function () {
+    var map, proxy;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      proxy = createProxy(map);
+      return proxy.project.map.setCenter({
+        modelId: 15781,
+        x: 10,
+        y: 20
+      });
+    }).then(function () {
+      var sessionData = ServerConnector.getSessionData(map.getProject());
+      var center = sessionData.getCenter(map.getProject().getModel());
+      assert.ok(center instanceof google.maps.Point);
+      assert.closeTo(parseFloat(center.x), 10, helper.EPSILON);
+      assert.closeTo(parseFloat(center.y), 20, helper.EPSILON);
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  it("setZoom", function () {
+    var map, proxy;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      proxy = createProxy(map);
+      return proxy.project.map.setZoom({
+        modelId: 15781,
+        zoom: 10
+      });
+    }).then(function () {
+      var sessionData = ServerConnector.getSessionData(map.getProject());
+      var zoom = sessionData.getZoomLevel(map.getProject().getModel());
+      assert.equal(zoom, 10);
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  it("getReactionByParticipantId", function () {
+    var ie = {
+      modelId: 15781,
+      type: "ALIAS",
+      id: 329167
+    };
+
+    var map, proxy;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      proxy = createProxy(map);
+      return proxy.project.data.getReactionsWithElement(ie);
+    }).then(function (reactions) {
+      assert.equal(reactions.length, 5);
+    }).then(function () {
+      map.destroy();
+    });
+
+  });
+
+  it("getAllBioEntities", function () {
+    var map, proxy;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      proxy = createProxy(map);
+      return proxy.project.data.getAllBioEntities();
+    }).then(function (result) {
+      assert.ok(result);
+      assert.ok(result.length > 0);
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  describe("configuration", function () {
+    it("elementTypes", function () {
+      var map, proxy;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        proxy = createProxy(map);
+        assert.ok(proxy.configuration.elementTypes.length > 0);
+        map.destroy();
+      });
+    });
+  });
+
+  it("fitBounds", function () {
+    var map, proxy;
+    return ServerConnector.getProject().then(function (project) {
+      map = helper.createCustomMap(project);
+      proxy = createProxy(map);
+      var center = map.getGoogleMap().getCenter();
+      proxy.project.map.fitBounds({
+        id: 329177,
+        modelId: 15781,
+        type: "ALIAS"
+      });
+      var center2 = map.getGoogleMap().getCenter();
+      assert.ok(center.lat() !== center2.lat() || center.lng() !== center2.lng());
+    }).then(function () {
+      map.destroy();
+    });
+  });
+
+  it("getProjectId", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.equal("sample", proxy.project.data.getProjectId());
+      map.destroy();
+    });
+  });
+  it("getName", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.equal("UNKNOWN DISEASE MAP", proxy.project.data.getName());
+      map.destroy();
+    });
+  });
+  it("getVersion", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.equal("0", proxy.project.data.getVersion());
+      map.destroy();
+    });
+  });
+  it("getDisease", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.ok(proxy.project.data.getDisease());
+      map.destroy();
+    });
+  });
+  it("getOrganism", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.ok(proxy.project.data.getOrganism());
+      map.destroy();
+    });
+  });
+  it("getModels", function () {
+    return ServerConnector.getProject().then(function (project) {
+      var map = helper.createCustomMap(project);
+      var proxy = createProxy(map);
+      assert.equal(1, proxy.project.data.getModels().length);
+      map.destroy();
+    });
+  });
+
+
+});
diff --git a/frontend-js/src/test/js/plugin/Plugin-test.js b/frontend-js/src/test/js/plugin/Plugin-test.js
index cac782f04f88cb35a5a70a6fd1fdbbcf5b659caf..ae4bb0cbebbb4e871e499bd998d96b7bc2c56a2b 100644
--- a/frontend-js/src/test/js/plugin/Plugin-test.js
+++ b/frontend-js/src/test/js/plugin/Plugin-test.js
@@ -1,102 +1,100 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-require("../mocha-config");
-
-var Plugin = require('../../../main/js/plugin/Plugin');
-
-var logger = require('../logger');
-var assert = require('assert');
-
-var fs = require('fs');
-
-describe('Plugin', function () {
-  it('constructor', function () {
-    var plugin = new Plugin({
-      url: "./testFiles/plugin/empty.js",
-      configuration: helper.getConfiguration()
-    });
-    assert.ok(plugin);
-  });
-
-  it('test plugins', function () {
-    var map = helper.createCustomMap();
-    var promises = [];
-
-    fs.readdirSync('./testFiles/plugin/').forEach(function (file) {
-      var element = document.createElement("div");
-      testDiv.appendChild(element);
-      var plugin = new Plugin({
-        url: "./testFiles/plugin/" + file,
-        map: map,
-        element: element,
-        configuration: helper.getConfiguration()
-      });
-      promises.push(plugin.load());
-    });
-    return Promise.all(promises);
-  });
-
-  describe('load', function () {
-    it('default', function () {
-      var map = helper.createCustomMap();
-
-      var plugin = new Plugin({
-        url: "./testFiles/plugin/empty.js",
-        map: map,
-        configuration: helper.getConfiguration()
-      });
-      return plugin.load().then(function () {
-        assert.equal("test plugin", plugin.getName());
-        assert.equal("0.0.1", plugin.getVersion());
-        assert.equal(0, logger.getWarnings().length);
-      });
-    });
-
-    it('invalid javascript code', function () {
-      var plugin = new Plugin({
-        url: "./testFiles/plugin-invalid/invalid_javascript.js",
-        map: helper.createCustomMap(),
-        configuration: helper.getConfiguration()
-      });
-      return plugin.load().then(function () {
-        assert.false("expected error");
-      }, function (error) {
-        assert.ok(error.message.indexOf("Unexpected identifier") >= 0);
-      });
-    });
-
-    it('plugin register crash', function () {
-      var plugin = new Plugin({
-        url: "./testFiles/plugin-invalid/invalid_register.js",
-        map: helper.createCustomMap(),
-        configuration: helper.getConfiguration()
-      });
-      return plugin.load().then(function () {
-        assert.false("expected error");
-      }, function (error) {
-        assert.ok(error.message.indexOf("Let's crash") >= 0);
-      });
-    });
-  });
-  describe('unload', function () {
-    it('warning about cleaning', function () {
-      var map = helper.createCustomMap();
-      helper.createSearchDbOverlay(map);
-
-      var plugin = new Plugin({
-        url: "./testFiles/plugin-invalid/unclean-unregister.js",
-        map: map,
-        configuration: helper.getConfiguration()
-      });
-      return plugin.load().then(function () {
-        assert.equal(0, logger.getWarnings().length);
-        return plugin.unload();
-      }).then(function () {
-        assert.equal(1, logger.getWarnings().length);
-      });
-    });
-  });
-});
+"use strict";
+
+require("../mocha-config");
+
+var Plugin = require('../../../main/js/plugin/Plugin');
+
+var logger = require('../logger');
+var chai = require('chai');
+var assert = chai.assert;
+
+var fs = require('fs');
+
+describe('Plugin', function () {
+  it('constructor', function () {
+    var plugin = new Plugin({
+      url: "./testFiles/plugin/empty.js",
+      configuration: helper.getConfiguration()
+    });
+    assert.ok(plugin);
+  });
+
+  it('test plugins', function () {
+    var map = helper.createCustomMap();
+    var promises = [];
+
+    fs.readdirSync('./testFiles/plugin/').forEach(function (file) {
+      var element = document.createElement("div");
+      testDiv.appendChild(element);
+      var plugin = new Plugin({
+        url: "./testFiles/plugin/" + file,
+        map: map,
+        element: element,
+        configuration: helper.getConfiguration()
+      });
+      promises.push(plugin.load());
+    });
+    return Promise.all(promises);
+  });
+
+  describe('load', function () {
+    it('default', function () {
+      var map = helper.createCustomMap();
+
+      var plugin = new Plugin({
+        url: "./testFiles/plugin/empty.js",
+        map: map,
+        configuration: helper.getConfiguration()
+      });
+      return plugin.load().then(function () {
+        assert.equal("test plugin", plugin.getName());
+        assert.equal("0.0.1", plugin.getVersion());
+        assert.equal(0, logger.getWarnings().length);
+      });
+    });
+
+    it('invalid javascript code', function () {
+      var plugin = new Plugin({
+        url: "./testFiles/plugin-invalid/invalid_javascript.js",
+        map: helper.createCustomMap(),
+        configuration: helper.getConfiguration()
+      });
+      return plugin.load().then(function () {
+        assert.notOk("expected error");
+      }, function (error) {
+        assert.ok(error.message.indexOf("Unexpected identifier") >= 0);
+      });
+    });
+
+    it('plugin register crash', function () {
+      var plugin = new Plugin({
+        url: "./testFiles/plugin-invalid/invalid_register.js",
+        map: helper.createCustomMap(),
+        configuration: helper.getConfiguration()
+      });
+      return plugin.load().then(function () {
+        assert.false("expected error");
+      }, function (error) {
+        assert.ok(error.message.indexOf("Let's crash") >= 0);
+      });
+    });
+  });
+  describe('unload', function () {
+    it('warning about cleaning', function () {
+      var map = helper.createCustomMap();
+      helper.createSearchDbOverlay(map);
+
+      var plugin = new Plugin({
+        url: "./testFiles/plugin-invalid/unclean-unregister.js",
+        map: map,
+        configuration: helper.getConfiguration()
+      });
+      return plugin.load().then(function () {
+        assert.equal(0, logger.getWarnings().length);
+        return plugin.unload();
+      }).then(function () {
+        assert.equal(1, logger.getWarnings().length);
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/plugin/PluginManager-test.js b/frontend-js/src/test/js/plugin/PluginManager-test.js
index f37e2cfeee5c2c6e391f57eb9ca6e1ac156e8d09..8a289f88e6fef708a6b5a16014b2aca9ddd22d13 100644
--- a/frontend-js/src/test/js/plugin/PluginManager-test.js
+++ b/frontend-js/src/test/js/plugin/PluginManager-test.js
@@ -1,96 +1,93 @@
-"use strict";
-
-/* exported logger */
-/* exported assert */
-
-require("../mocha-config");
-
-var Plugin = require('../../../main/js/plugin/Plugin');
-var PluginManager = require('../../../main/js/plugin/PluginManager');
-var ProxyAccessPlugin = require('./ProxyAccessPlugin');
-
-
-var logger = require('../logger');
-var assert = require('assert');
-
-describe('PluginManager', function () {
-  var createParams = function () {
-    var map = helper.createCustomMap();
-    return {
-      map: map,
-      configuration: helper.getConfiguration(),
-      element: testDiv
-    };
-  };
-  it('constructor', function () {
-    var manager = new PluginManager(createParams());
-    assert.ok(manager);
-    assert.equal(0, logger.getWarnings().length);
-  });
-
-  it('getPlugins', function () {
-    var manager = new PluginManager(createParams());
-    assert.equal(0, manager.getPlugins().length);
-  });
-
-  describe('addPlugin', function () {
-    it('default', function () {
-      var manager = new PluginManager(createParams());
-      return manager.addPlugin({url: "./testFiles/plugin/empty.js"}).then(function () {
-        assert.equal(1, manager.getPlugins().length);
-      });
-    });
-    it('with min width', function () {
-      var manager = new PluginManager(createParams());
-      return manager.addPlugin({url: "./testFiles/plugin/min-width.js"}).then(function () {
-        assert.equal("200px", $(manager.getElement()).css("min-width"));
-      });
-    });
-    it('with onResize listener', function () {
-      var manager = new PluginManager(createParams());
-      var plugin = new ProxyAccessPlugin({});
-      var listenerCalled = false;
-      return manager.addPlugin(plugin).then(function () {
-        plugin.getMinervaPluginProxy().project.map.addListener({
-          object: "plugin", type: "onResize", callback: function () {
-            listenerCalled = true;
-          }
-        });
-        return manager.addPlugin({url: "./testFiles/plugin/min-width.js"});
-      }).then(function () {
-        assert.ok(listenerCalled);
-      });
-    });
-    it('after removal', function () {
-      var manager = new PluginManager(createParams());
-      return manager.addPlugin({url: "./testFiles/plugin/empty.js"}).then(function (plugin) {
-        return manager.removePlugin(plugin);
-      }).then(function () {
-        return manager.addPlugin({url: "./testFiles/plugin/empty.js"});
-      }).then(function () {
-        assert.equal(1, manager.getPlugins().length);
-      });
-    });
-  });
-
-  describe('removePlugin', function () {
-    it('default', function () {
-      var manager = new PluginManager(createParams());
-      return manager.addPlugin({url: "testFiles/plugin/empty.js"}).then(function (plugin) {
-        return manager.removePlugin(plugin);
-      }).then(function () {
-        assert.equal(0, manager.getPlugins().length);
-      });
-    });
-    it('removing non existing plugin', function () {
-      var manager = new PluginManager(createParams());
-      var plugin = new Plugin({url: "testFiles/plugin/empty.js"});
-      return manager.removePlugin(plugin).then(function () {
-        assert.false("Error expected");
-      }, function (error) {
-        assert.ok(error.message.indexOf("Plugin not registered") >= 0);
-      });
-    });
-  });
-
-});
+"use strict";
+
+require("../mocha-config");
+
+var Plugin = require('../../../main/js/plugin/Plugin');
+var PluginManager = require('../../../main/js/plugin/PluginManager');
+var ProxyAccessPlugin = require('./ProxyAccessPlugin');
+
+var logger = require('../logger');
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('PluginManager', function () {
+  var createParams = function () {
+    var map = helper.createCustomMap();
+    return {
+      map: map,
+      configuration: helper.getConfiguration(),
+      element: testDiv
+    };
+  };
+  it('constructor', function () {
+    var manager = new PluginManager(createParams());
+    assert.ok(manager);
+    assert.equal(0, logger.getWarnings().length);
+  });
+
+  it('getPlugins', function () {
+    var manager = new PluginManager(createParams());
+    assert.equal(0, manager.getPlugins().length);
+  });
+
+  describe('addPlugin', function () {
+    it('default', function () {
+      var manager = new PluginManager(createParams());
+      return manager.addPlugin({url: "./testFiles/plugin/empty.js"}).then(function () {
+        assert.equal(1, manager.getPlugins().length);
+      });
+    });
+    it('with min width', function () {
+      var manager = new PluginManager(createParams());
+      return manager.addPlugin({url: "./testFiles/plugin/min-width.js"}).then(function () {
+        assert.equal("200px", $(manager.getElement()).css("min-width"));
+      });
+    });
+    it('with onResize listener', function () {
+      var manager = new PluginManager(createParams());
+      var plugin = new ProxyAccessPlugin({});
+      var listenerCalled = false;
+      return manager.addPlugin(plugin).then(function () {
+        plugin.getMinervaPluginProxy().project.map.addListener({
+          object: "plugin", type: "onResize", callback: function () {
+            listenerCalled = true;
+          }
+        });
+        return manager.addPlugin({url: "./testFiles/plugin/min-width.js"});
+      }).then(function () {
+        assert.ok(listenerCalled);
+      });
+    });
+    it('after removal', function () {
+      var manager = new PluginManager(createParams());
+      return manager.addPlugin({url: "./testFiles/plugin/empty.js"}).then(function (plugin) {
+        return manager.removePlugin(plugin);
+      }).then(function () {
+        return manager.addPlugin({url: "./testFiles/plugin/empty.js"});
+      }).then(function () {
+        assert.equal(1, manager.getPlugins().length);
+      });
+    });
+  });
+
+  describe('removePlugin', function () {
+    it('default', function () {
+      var manager = new PluginManager(createParams());
+      return manager.addPlugin({url: "testFiles/plugin/empty.js"}).then(function (plugin) {
+        return manager.removePlugin(plugin);
+      }).then(function () {
+        assert.equal(0, manager.getPlugins().length);
+      });
+    });
+    it('removing non existing plugin', function () {
+      var manager = new PluginManager(createParams());
+      var plugin = new Plugin({url: "testFiles/plugin/empty.js"});
+      return manager.removePlugin(plugin).then(function () {
+        assert.notOk("Error expected");
+      }, function (error) {
+        assert.ok(error.message.indexOf("Plugin not registered") >= 0);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js b/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js
index 696549ef59ca79472fa1082f85f7ed6735fe1350..a546e8725a88fbef76d957e0ae481c2b5a97f5d9 100644
--- a/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js
+++ b/frontend-js/src/test/js/plugin/ProxyAccessPlugin.js
@@ -1,44 +1,44 @@
-"use strict";
-
-var Plugin = require('../../../main/js/plugin/Plugin');
-var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy');
-
-var Promise = require('bluebird');
-
-var logger = require('../logger');
-
-function ProxyAccessPlugin(options) {
-  Plugin.call(this);
-}
-
-ProxyAccessPlugin.prototype = Object.create(Plugin.prototype);
-ProxyAccessPlugin.prototype.constructor = ProxyAccessPlugin;
-
-ProxyAccessPlugin.prototype.setOptions = function (options) {
-  if (options !== undefined) {
-    options.plugin = this;
-    this.setMinervaPluginProxy(new MinervaPluginProxy(options));
-  }
-};
-
-ProxyAccessPlugin.prototype.load = function () {
-  this.setLoadedPluginData({
-    getName: function () {
-      return "ProxyAccessPlugin"
-    },
-    getVersion: function () {
-      return "0.0.1";
-    },
-    unregister: function () {
-      logger.debug("un-registering ProxyAccessPlugin");
-    },
-    register: function () {
-      logger.debug("registering ProxyAccessPlugin");
-    }
-  });
-  return Promise.resolve();
-};
-ProxyAccessPlugin.prototype.unload = function () {
-  return Promise.resolve();
-};
-module.exports = ProxyAccessPlugin;
+"use strict";
+
+var Plugin = require('../../../main/js/plugin/Plugin');
+var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy');
+
+var Promise = require('bluebird');
+
+var logger = require('../logger');
+
+function ProxyAccessPlugin(options) {
+  Plugin.call(this);
+}
+
+ProxyAccessPlugin.prototype = Object.create(Plugin.prototype);
+ProxyAccessPlugin.prototype.constructor = ProxyAccessPlugin;
+
+ProxyAccessPlugin.prototype.setOptions = function (options) {
+  if (options !== undefined) {
+    options.plugin = this;
+    this.setMinervaPluginProxy(new MinervaPluginProxy(options));
+  }
+};
+
+ProxyAccessPlugin.prototype.load = function () {
+  this.setLoadedPluginData({
+    getName: function () {
+      return "ProxyAccessPlugin"
+    },
+    getVersion: function () {
+      return "0.0.1";
+    },
+    unregister: function () {
+      logger.debug("un-registering ProxyAccessPlugin");
+    },
+    register: function () {
+      logger.debug("registering ProxyAccessPlugin");
+    }
+  });
+  return Promise.resolve();
+};
+ProxyAccessPlugin.prototype.unload = function () {
+  return Promise.resolve();
+};
+module.exports = ProxyAccessPlugin;