diff --git a/index.html b/index.html
index 465c80b3a3ea87ad38bb09c6cb72afad5153f592..64f15a1c0c3726630f8bdc985ab7fdd543058245 100644
--- a/index.html
+++ b/index.html
@@ -76,7 +76,7 @@
                 <button id="exampleData" class="onClick" onclick="loadExampleData()">Click here to load the sample datasets</button>
             </div>
 
-            <div id="layers" style="font-family: monospace; margin-left: 1vw; margin-top: 2vh; font-size: 18px; height: 53vh; overflow-y: scroll;"></div>
+            <div id="layers" style="font-family: monospace; margin-left: 1vw; margin-top: 2vh; font-size: 18px; height: 52vh; overflow-y: scroll;"></div>
         </div>
         
         <div id="map" style="position: relative; z-index: 1; height: 80vh;">
@@ -203,7 +203,7 @@
                                 <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z"/>
                             </svg>
                         </div>
-
+                        
                         <p>Choose map layers in prioritised order:</p>
                         
                         <div id="priorityDiv">
@@ -217,7 +217,11 @@
                             </div>
                         </div>
 
-                        <p>Hei 8)</p>
+                        <p>Give this suitability analyse a cathegory name:</p>
+
+                        <input id="suitabilityName"><br>
+
+                        <button class="button" style="font-size: 25px; margin-top: 4vh;" onclick="suitability()">Calculate suitable areas</button>
                     </div>
 
                     <div id="unionBox" class="box">
diff --git a/javascript/leafletLayerControl.js b/javascript/leafletLayerControl.js
index 998ffb727c26cb8384763c13fc739285d50ed22a..aed39662e70ab26dabd559148b1f5b20c8813d09 100644
--- a/javascript/leafletLayerControl.js
+++ b/javascript/leafletLayerControl.js
@@ -85,7 +85,7 @@ function checkExampleData() {
 
     exampleLoaded = false;
     document.getElementById("exampleData").style.display = "block";
-    document.getElementById("layers").style.height = "53vh";
+    document.getElementById("layers").style.height = "52vh";
 }
 
 function handleLayer(name) { // Funksjon som viser og skjuler kartlag i kartet og endrer farge på knappene i sidebaren avhengig av lagets synlighet
@@ -121,3 +121,12 @@ function doLayerExist(name) {
     }
     return false;
 }
+
+function doLayerExist2(name) {
+    for (key in overlayMaps) {
+        if (key.toString().slice(0, -1) == name) {
+            return true;
+        }
+    }
+    return false;
+}
diff --git a/javascript/suitability.js b/javascript/suitability.js
index 74f7ca7e8250a64918e0a1ce01930ac315de7070..8e7fa27c0bdd30640c823afe63ca2c918ff60a76 100644
--- a/javascript/suitability.js
+++ b/javascript/suitability.js
@@ -24,5 +24,185 @@ function removePrioritizedLayer(numb) {
 }
 
 function suitability() {
+    // Sjekker at det er gitt inn navn:
+    var regex = /^[a-zA-Z_0-9]+$/;
+    if (!document.getElementById("suitabilityName").value) {
+        return alert("You need to choose a name for the new layer!");
+    } else if (!document.getElementById("suitabilityName").value.match(regex)) {
+        return alert("The new name must consist of normal letters!");
+    } else if (doLayerExist2(document.getElementById("suitabilityName").value)) {
+        return alert("Choose another name! There exists already a layer with that name.")
+    }
+    categoryName = document.getElementById("suitabilityName").value;
+
+    // Henter aktuelle element:
+    var numb = document.getElementById("priorityDiv").childElementCount;
+    var priEl = [];
+    for (var i = 1; i < numb + 1; i++) {
+        priEl.push("priority" + i.toString());
+    }
+    
+    // Finner alle mulige kombinasjoner av elementene:
+    priEl = getCombinations(priEl);
+
+    // Beregner poengscore for hver kombinasjon:
+
+    var scores = getScores(numb, priEl);
+
+    // Sorterer lista basert på score:
+
+    priEl = insertionSort(priEl, scores);
+
+    // Lager de ulike kartlagene med intersect:
+
+    var newLayers = [];
+
+    for (var i = 0; i < priEl.length; i++) {
+        if (priEl[i].length == 1) {
+            var a = getMapLayer(priEl[i][0]);
+            if (a == null) {
+                return alert("You need to choose all layers!");
+            }
+            newLayers.push(a);
+        } else {
+            var a = getMapLayer(priEl[i][0]);
+            if (a == null) {
+                return alert("You need to choose all layers!");
+            }
+            var newLayer = featureCollectionToMultiPolygon(a);
+            for (var j = 1; j < priEl[i].length; j++) {
+                var b = getMapLayer(priEl[i][j]);
+                if (b == null) {
+                    return alert("You need to choose all layers!");
+                }
+                var layer = featureCollectionToMultiPolygon(b);
+                newLayer = turf.intersect(newLayer, layer);
+            }
+            newLayers.push(newLayer);
+        }
+    }
+
+    // Bruker difference for å unngå overlappende kartlag:
+
+    for (var i = 1; i < newLayers.length; i++) {
+        for (var j = 0; j < i; j++) {
+
+            var a = newLayers[i];
+            var b = newLayers[j];
+
+            if (a == undefined || b == undefined) {
+                break;
+            }
+
+            if (!isMultiPolygon(a)) {
+                a = featureCollectionToMultiPolygon(a);
+            }
+            if (!isMultiPolygon(b)) {
+                b = featureCollectionToMultiPolygon(b);
+            }
+
+            newLayers[i] = turf.difference(a, b);
+        }
+    }
+
+    // Gjør om tilbake til FeatureCollection fra MultiPolygon:
+    for (var i = 0; i < newLayers.length; i++) {
+        if (newLayers[i] == undefined) {
+            continue;
+        } else if (isMultiPolygon(newLayers[i])) {
+            newLayers[i] = multiPolygonToFeatureCollection(newLayers[i]);
+        }
+    }
+
+    // Legger til de nye lagene som har innhold i kartet:
+    
+    // Karakteristiske farger for lagene:
+    // Rødt: "rgb(255,0,0)" Grønt: "rgb(0,255,0)"
+
+    var intervall = 255 / (newLayers.length - 1);
+    var r = 0;
+    var g = 255;
 
-}
\ No newline at end of file
+    for (var i = 0; i < newLayers.length; i++) {
+        if (newLayers[i] == undefined) {
+            continue;
+        }
+        var name = categoryName + (i+1).toString();
+
+        var newLayer = L.geoJSON(newLayers[i], {style: {color: "rgb(" + r.toString() + "," + g.toString() + ",0)"}});
+        r += intervall;
+        g += -intervall;
+        overlayMaps[name] = newLayer;
+        updateSidebar();
+        handleLayer(name);
+    }
+
+    document.getElementById("suitabilityName").value = "";
+    for (var i = 2; i <= numb; i++) {
+        removePrioritizedLayer(i);
+    }
+    fillSelect("priority1");
+}
+
+function getCombinations(valuesArray) {
+    var combi = [];
+    var temp = [];
+    var slent = Math.pow(2, valuesArray.length);
+
+    for (var i = 0; i < slent; i++) {
+        temp = [];
+        for (var j = 0; j < valuesArray.length; j++) {
+            if ((i & Math.pow(2, j))) {
+                temp.push(valuesArray[j]);
+            }
+        }
+        if (temp.length > 0) {
+            combi.push(temp);
+        }
+    }
+
+    combi.sort((a, b) => b.length - a.length);
+    //console.log(combi.join("\n"));
+    return combi;
+}
+
+function getScores(numb, list) {
+    var scores = {};
+    for (var i = 0; i < list.length; i++) {
+        var score = 0;
+        for (var j = 0; j < list[i].length; j++) {
+            score += numb + 1 - parseInt(list[i][j].slice(-1));
+        }
+        scores[list[i]] = score;
+    }
+    return scores;
+}
+
+function insertionSort(list, dict) {
+    sorted = [list[0]]
+    for (var i = 1; i < list.length; i++) {
+        if (dict[list[i]] < dict[sorted[sorted.length - 1]]) {
+            sorted.push(list[i]);
+        } else {
+            for (var j = 0; j < sorted.length; j++) {
+                if (dict[sorted[j]] <= dict[list[i]]) {
+                    sorted.push(sorted[sorted.length - 1]);
+                    for (var k = sorted.length - 2; k > j; k--) {
+                        sorted[k] = sorted[k - 1];
+                    }
+                    sorted[j] = list[i];
+                    break;
+                }
+            }
+        }
+    }
+    return sorted;
+}
+
+function getMapLayer(string) {
+    var input = document.getElementById(string).value;
+    if (input == "- - -") {
+        return null;
+    }
+    return overlayMaps[input].toGeoJSON();
+}