Added autocomplete
diff --git a/ajax/getusers.php b/ajax/getusers.php
index e797c7b..7d9f52e 100644
--- a/ajax/getusers.php
+++ b/ajax/getusers.php
@@ -1,13 +1,14 @@
-<option selected disabled hidden>Selecciona usuari...</option>
-
 <?php
 	require '../credentials.php';
 	require '../php/utils.php';
-	$users = get_users(0);
-
-	foreach ($users as $user) {
-		$nopassword = $user->md5password == "" ? "nopassword" : "";
-		$mort = $user->mort ? "disabled" : "";
-		echo "<option ".$mort." class='".$nopassword."' value='".$user->id."'>".$user->nomcomplet."</option>\n";
+	
+	$users = get_users(0, false);
+	foreach ($users as &$user) {
+		if ($user["mort"]) continue;
+		
+		$user["nopassword"] = $user["md5password"] == "" ? "nopassword" : "";
+		unset($user["md5password"]);
 	}
+	
+	echo json_encode($users);
 ?>
diff --git a/css/login.css b/css/login.css
index 6b6b20f..2ad3b75 100644
--- a/css/login.css
+++ b/css/login.css
@@ -8,3 +8,123 @@
 	font-size: 18px;
 	height: 2em;
 }
+
+.md-google-search__metacontainer {
+	position: relative;
+	height: 48px;
+	width: 100%;
+	margin-bottom: 16px;
+}
+
+.md-google-search__container {
+	display: block;
+	height: 48px;
+	width: 100%;
+	max-width: 720px;
+	white-space: nowrap;
+}
+
+.md-google-search {
+	height: 48px;
+	background-color: rgba(245, 245, 245, 1);
+	border: 1px solid rgba(0, 0, 0, 0.2);
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	max-width: 600px;
+	position: relative;
+	-webkit-transition: background-color 100ms ease-in, width 100ms ease-out;
+	transition: background-color 100ms ease-in, width 100ms ease-out;
+}
+
+.md-google-search:focus-within {
+	border: 1px solid rgba(0, 0, 0, 0.45);
+	background-color: rgba(255, 255, 255, 1);
+	-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
+	box-shadow: 0 1px 1px rgba(0, 0, 0, .2);
+}
+
+.md-google-search__search-btn {
+	float: left;
+	background: none;
+	border: none;
+	opacity: .54;
+	outline: none;
+	padding: 0 4px;
+	line-height: 0;
+	color: #212121;
+}
+
+.md-google-search__search-btn svg, .md-google-search__empty-btn svg {
+	padding: 7px;
+	margin: 4px;
+}
+
+.md-google-search__field-container {
+	height: 46px;
+	padding: 0 11px;
+	margin-right: 48px;
+}
+
+.md-google-search__field {
+	border: none;
+	font: normal 16px Roboto, sans-serif;
+	height: 24px;
+	outline: none;
+	padding: 11px 0 11px 16px;
+	width: 100%;
+	background: transparent;
+	box-sizing: unset;
+}
+
+.md-google-search__empty-btn {
+	position: absolute;
+	right: 0;
+	top: 0;
+	background: none;
+	border: none;
+	opacity: .54;
+	outline: none;
+	padding: 0 4px;
+	line-height: 0;
+	color: #212121;
+	cursor: pointer;
+}
+
+/**
+  * Search Box Autocomplete
+  */
+.autocomplete-container {
+	z-index: 110;
+	position: absolute;
+	top: Calc(100% + 2px);
+	left: 0;
+	width: 100%;
+}
+
+.autocomplete-items {
+	display: block;
+	width: 100%;
+	max-width: 600px;
+	background-color: white;
+	color: black;
+	box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.258824), 0 2px 10px 0
+	rgba(0, 0, 0, 0.156863) !important;
+	max-height: 510px;
+	overflow-y: auto;
+}
+
+.autocomplete-item {
+	font-size: 16px;
+	padding: 12px 14px;
+	cursor: pointer;
+}
+
+.autocomplete-item:hover, .autocomplete-active {
+	background: #eee;
+}
+
+.autocomplete-grau-curs {
+	position: relative;
+	z-index: 120;
+	color: #222;
+}
diff --git a/index.php b/index.php
index f62abd9..9ef86fe 100644
--- a/index.php
+++ b/index.php
@@ -20,8 +20,28 @@
 				<h1>Selecciona el teu nom</h1>
 				<p>Per entrar al joc de la Pastanaga Assessina</p>
 				<form action="./php/login.php" method="POST">
-					<select name="user" id="list">
-					</select>
+					<input type="hidden" name="user" id="user">
+
+					<!-- MD Search Box -->
+					<div class="md-google-search__metacontainer">
+					  <div class="md-google-search__container">
+						<div class="md-google-search">
+						  <span class="md-google-search__search-btn">
+							<svg height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
+						  </span>
+						  <div class="md-google-search__field-container">
+							<input id="search-input" class="md-google-search__field" autocomplete="off" placeholder="Usuari" value="" name="search" type="text" spellcheck="false" style="outline: none;">
+						  </div>
+						  <span class="md-google-search__empty-btn" style="display: none;">
+							<svg focusable="false" height="24px" viewBox="0 0 24 24" width="24px" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg>
+						  </span>
+						</div>
+					  </div>
+
+							<div class="autocomplete-container" style="display: none;">
+						  <div id="autocomplete-list" class="autocomplete-items"></div>
+						</div>
+					</div>
 
 					<input disabled required placeholder="Clau d'accés..." id="password" type="password" name="password"/>
 					<input type="submit" value="Entrar" />
@@ -29,10 +49,12 @@
 			</div>
 		</div>
 
+		<script src="./js/autocomplete.js"></script>
 		<script>
-			$.post("./ajax/getusers.php", function(data, status){
-				$("#list").html(data);
-								
+			fetch("./ajax/getusers.php").then(result => result.json()).then(users => {
+				console.log(users);
+				autocomplete(document.getElementById("search-input"), users, "search");
+			
 				userid = <?=isset($_COOKIE['user']) ? $_COOKIE['user'] : -1 ?>;
 				username = $('option[value=' + userid + ']').text();
 		
@@ -42,11 +64,6 @@
 				}
 			});
 
-			$('select').on('change', function() {
-				let nopassword = $('select option:selected').hasClass('nopassword');
-				$('#password').prop('disabled', nopassword);
-			});
-			
 			$(document).ready(function() {
 				// Notify of messages
 				if (getUrlParameter("passwordchanged")) read_message("La teva clau d'accés ha canviat", "error");
diff --git a/js/autocomplete.js b/js/autocomplete.js
new file mode 100644
index 0000000..28b9abf
--- /dev/null
+++ b/js/autocomplete.js
@@ -0,0 +1,122 @@
+function autocomplete(inp, obj, act) {
+  /*the autocomplete function takes two arguments,
+  the text field element and an objay of possible autocompleted values:*/
+  var currentFocus;
+  /*execute a function when someone writes in the text field:*/
+  inp.addEventListener("input", function(e) {
+    var a, b, i, val = this.value;
+    /*close any already open lists of autocompleted values*/
+    clearLists();
+    document.querySelector(".md-google-search__empty-btn").style.display = (val ? "block" : "none");
+    if (!val || val.length < 3) return false;
+    currentFocus = -1;
+    var is_empty = true;
+
+    /*for each item in the object...*/
+    for (node in obj) {
+      var nomNode = obj[node].nomcomplet;
+
+      if (nomNode.toUpperCase().includes(val.toUpperCase())) {
+        is_empty = false;
+        var parts = nomNode.toUpperCase().split(val.toUpperCase());
+
+        /*create a DIV element for each matching element:*/
+        b = document.createElement("div");
+        b.setAttribute("class", "autocomplete-item");
+
+        /*make the matching letters bold:*/
+        if (parts[0].length == 0) b.innerHTML = "";
+        else b.innerHTML = "<span style='font-weight: bold; position:relative; z-index:120;'>" + nomNode.substr(0, parts[0].length) + "</span>";
+
+        b.innerHTML += nomNode.substr(parts[0].length, val.length);
+        b.innerHTML += "<span style='font-weight: bold; position:relative; z-index:120;'>" + nomNode.substr(parts[0].length + val.length) + "</span>";
+        b.innerHTML += " <span class='autocomplete-year'>(" + obj[node].curs + "-" + obj[node].grau + ")</span>";
+
+        /*include node id to keep track of which is it*/
+        b.dataset.id = node;
+
+        /*execute a function when someone clicks on the item value (DIV element):*/
+        b.addEventListener("click", function(e) {
+          /*insert the value for the autocomplete text field:*/
+          var n = this.dataset.id;
+          inp.value = obj[n].nomcomplet;
+
+          switch (act) {
+            case "search":
+            // Insert hidden input id and show password field if applicable
+            document.getElementById("user").value = obj[n].id;
+            $('#password').prop('disabled', (obj[n].nopassword == "nopassword"));
+            break;
+          }
+
+          /*close the list of autocompleted values,
+          (or any other open lists of autocompleted values:*/
+          clearLists();
+        });
+
+          document.querySelector("#autocomplete-list").appendChild(b);
+      }
+    }
+
+    document.querySelector(".autocomplete-container").style.display = (is_empty ? "none" : "block");
+  });
+
+  document.querySelector(".md-google-search__empty-btn").addEventListener("click", function() {
+    document.querySelector("#search-input").value = "";
+    this.style.display = "none";
+  });
+
+  /*execute a function presses a key on the keyboard:*/
+  inp.addEventListener("keydown", function(e) {
+    var x = document.getElementById("autocomplete-list");
+    if (x) x = x.getElementsByTagName("div");
+    if (x.length == 0) return;
+    if (e.keyCode == 40) {
+      /*If the objow DOWN key is pressed,
+      increase the currentFocus variable:*/
+      currentFocus++;
+      /*and and make the current item more visible:*/
+      addActive(x);
+    } else if (e.keyCode == 38) { //up
+      /*If the objow UP key is pressed,
+      decrease the currentFocus variable:*/
+      currentFocus--;
+      /*and and make the current item more visible:*/
+      addActive(x);
+    } else if (e.keyCode == 13) {
+      /*If the ENTER key is pressed, prevent the form from being submitted,*/
+      e.preventDefault();
+      if (currentFocus > -1) {
+        /*and simulate a click on the "active" item:*/
+        if (x) x[currentFocus].click();
+      }
+    }
+  });
+  function addActive(x) {
+    /*a function to classify an item as "active":*/
+    if (!x) return false;
+    /*start by removing the "active" class on all items:*/
+    removeActive(x);
+    if (currentFocus >= x.length) currentFocus = 0;
+    if (currentFocus < 0) currentFocus = (x.length - 1);
+    /*add class "autocomplete-active":*/
+    x[currentFocus].classList.add("autocomplete-active");
+  }
+  function removeActive(x) {
+    /*a function to remove the "active" class from all autocomplete items:*/
+    for (var i = 0; i < x.length; i++) {
+      x[i].classList.remove("autocomplete-active");
+    }
+  }
+  function clearLists() {
+    /*close all autocomplete lists in the document,
+    except the one passed as an argument:*/
+    var x = document.querySelector("#autocomplete-list");
+    x.innerHTML = "";
+    document.querySelector(".autocomplete-container").style.display = "none";
+  }
+  /*execute a function when someone clicks in the document:*/
+  document.addEventListener("click", function (e) {
+    clearLists();
+  });
+}
diff --git a/php/utils.php b/php/utils.php
index 19b9146..a187aea 100644
--- a/php/utils.php
+++ b/php/utils.php
@@ -29,7 +29,7 @@
 		return $result;
 	}
 	
-	function get_users($id = 0) {
+	function get_users($id = 0, $getAsObjects = true) {
 		$users = [];
 		
 		// Prepare the query
@@ -39,16 +39,27 @@
 		// Fetch the information of the user
 		if ($result = query($query)) {
 			while ($row = $result->fetch_row()) {
-				$user = new User();
-				
-				$user->id = $row[0];
-				$user->nomcomplet = $row[1];
-				$user->curs = $row[2];
-				$user->grau = $row[3];
-				$user->quimata = $row[4];
-				$user->requested = $row[5];
-				$user->mort = $row[6];
-				$user->md5password = $row[7];
+				if ($getAsObjects) {
+					$user = new User();
+					$user->id = $row[0];
+					$user->nomcomplet = $row[1];
+					$user->curs = $row[2];
+					$user->grau = $row[3];
+					$user->quimata = $row[4];
+					$user->requested = $row[5];
+					$user->mort = $row[6];
+					$user->md5password = $row[7];
+				} else {
+					$user = [];
+					$user["id"] = $row[0];
+					$user["nomcomplet"] = $row[1];
+					$user["curs"] = $row[2];
+					$user["grau"] = $row[3];
+					$user["quimata"] = $row[4];
+					$user["requested"] = $row[5];
+					$user["mort"] = $row[6];
+					$user["md5password"] = $row[7];
+				}
 				
 				array_push($users, $user);
 			}