Merge branch 'time-selection' into v1.1
diff --git a/index.html b/index.html
index 9dc52b4..0e65137 100644
--- a/index.html
+++ b/index.html
@@ -90,7 +90,7 @@
                         Heu triat una assignatura que es fa en dues aules alhora. Comproveu que sou a l'aula <strong id="repeated-subject-warning-class">aula</strong>.
                     </div>
                 </article>
-            </div>
+            </div> -->
 
             <div id="letter-container" class="buttons grid">
                 <button class="button" id="letter-A" data-letter="A">A</button>
diff --git a/js/build_page.js b/js/build_page.js
index 25acea3..81b76ed 100644
--- a/js/build_page.js
+++ b/js/build_page.js
@@ -1,358 +1,377 @@
-
-
-const idsFormulari = {
-    room: "1063142948",
-    day: "2115504093",
-    begins: "1749141911",
-    ends: "1827359679",
-    rows: {
-        A: "208184485",
-        B: "1077148310",
-        C: "642851281",
-        D: "1686039024",
-        E: "697835787",
-        F: "1511799646",
-        G: "809853432",
-        H: "182597499",
-        I: "1890539481",
-        J: "529159478",
-        K: "1615241874",
-        L: "1334263875"
-    },
-    notes: "1600275159"
-};
-
-const formBaseUrl = "https://docs.google.com/forms/d/e/1FAIpQLSfT9o287VqLyhwR8LPdloAQWhuqCgA3NfdhgP5vb9_sVQHL-g/viewform";
-
-const MIN_HOUR = 8;
-const MAX_HOUR = 14;
-
-var final_JSON = {
-    "class": null,
-    "number": "",
-    "letter": ""
-};
-
-var current_section = "section-1";
-
-var repeated_subjects;
-var current_time;
-
-
-function fillInSummary() {
-    var begins = new Date(parseInt(final_JSON.class.begins)*1000);
-    var ends = new Date(parseInt(final_JSON.class.ends)*1000);
-
-    document.getElementById('subject-final').textContent = final_JSON.class.friendly_name || final_JSON.class.calendar_name;
-    document.getElementById('classroom-final').textContent = final_JSON.class.room;
-    document.getElementById('date-final').textContent = begins.toLocaleDateString();
-    document.getElementById('time-final').textContent = formatTime(begins) + ' - ' + formatTime(ends);
-    document.getElementById('letter-final').textContent = final_JSON.letter;
-    document.getElementById('number-final').textContent = final_JSON.number;
-}
-
-function clickButton(element) {
-    var btn = element.currentTarget;
-    var parent = btn.parent;
-
-    if (parent == "subject-container") {
-        // Canvi de background del button
-        var selectedClass = JSON.parse(btn.getAttribute('data-class'));
-        $("#subject-container .complex-button").removeClass("is-link")
-        btn.classList.add("is-link");
-        // Canvi JSON
-        final_JSON["class"] = selectedClass;
-        // Missatge advertència classe repetida
-        if (repeated_subjects.has(selectedClass.id)) {
-            document.getElementById('repeated-subject-warning').classList.remove('is-hidden');
-            document.getElementById('repeated-subject-warning-class').textContent = selectedClass.room;
-        } else {
-            document.getElementById('repeated-subject-warning').classList.add('is-hidden');
-        }
-        // Anchor següent pregunta
-        switchSection("section-2");
-    } else if (parent == "number-container") {
-        // Canvi de background del button
-        $("#number-container .button").removeClass("is-link is-light is-active")
-        btn.classList.add("is-link", "is-light", "is-active");
-        // Canvi JSON
-        final_JSON["number"] = btn.getAttribute('data-number');
-        // Introducció de totes les dades al resum final
-        fillInSummary();
-        // Anchor següent pregunta
-        switchSection("section-send");
-    } else if (parent == "letter-container") {
-        // Canvi de background del button
-        $("#letter-container .button").removeClass("is-link is-light is-active")
-        btn.classList.add("is-link", "is-light", "is-active");
-        // Canvi JSON
-        final_JSON["letter"] = btn.getAttribute('data-letter');
-        // Anchor següent pregunta
-        switchSection("section-3");
-    }
-}
-
-function switchSection(s) {
-    setTimeout(function(){ 
-        document.getElementById(current_section).classList.add('is-hidden');
-        document.getElementById(s).classList.remove('is-hidden');
-        current_section = s;
-    }, 75);
-}
-
-function findRepeatedSubjects(classes) {
-    var rep = new Set();
-    for (var [i, classe] of classes.entries()) {
-        if (i > 0 && classes[i-1].calendar_name == classe.calendar_name) {
-            rep.add(classe.id);
-            rep.add(classes[i-1].id);
-        }
-    }
-    return rep;
-}
-
-function buildSubjectContainer(classes, repeated) {
-    document.getElementById("subject-container").innerHTML = "";
-    console.log(classes);
-    for (var classe of classes) {
-        var hora_inici = formatTime(new Date(parseInt(classe.begins)*1000));
-        var hora_final = formatTime(new Date(parseInt(classe.ends)*1000));
-
-        var classeDiv = document.createElement('div');
-        classeDiv.classList.add('message', 'complex-button');
-        classeDiv.id = 'subject-' + classe.subject_id + '-' + classe.room;
-        classeDiv.setAttribute('data-class', JSON.stringify(classe));
-
-        var header = document.createElement('div');
-        header.classList.add('message-header');
-        header.textContent = classe.friendly_name || classe.calendar_name;
-
-        var body = document.createElement('div');
-        body.classList.add('message-body');
-
-        var div1 = document.createElement('div');
-        var span = document.createElement('span');
-        span.textContent = classe.room;
-
-        if (repeated.has(classe.id)) {
-            div1.classList.add('has-text-danger', 'has-text-weight-bold');
-        }
-
-        div1.textContent = 'Aula ';
-        div1.appendChild(span);
-
-        var div2 = document.createElement('div');
-        div2.textContent = hora_inici + ' - ' + hora_final;
-
-        body.appendChild(div1);
-        body.appendChild(div2);
-
-        classeDiv.appendChild(header);
-        classeDiv.appendChild(body);
-
-        document.getElementById("subject-container").appendChild(classeDiv);
-    }
-    console.log(document.getElementById("subject-container").innerHTML);
-
-    var elements = document.getElementsByClassName("button");
-    Array.from(elements).forEach(function(element) {
-        element.addEventListener('click', clickButton);
-        element.parent = element.parentNode.id;
-    });
-    var elements = document.getElementsByClassName("complex-button");
-    Array.from(elements).forEach(function(element) {
-        element.addEventListener('click', clickButton);
-        element.parent = element.parentNode.id;
-    });
-}
-
-function getDefaultTime() {
-    var time = new Date();
-    time.setSeconds(0);
-    time.setMilliseconds(0);
-    if (time.getMinutes() < 30) time.setMinutes(0);
-    else time.setMinutes(30);
-    if (time.getHours() < MIN_HOUR) {
-        time.setHours(MIN_HOUR);
-        time.setMinutes(0);
-    }
-    if (time.getHours() >= MAX_HOUR) {
-        time.setHours(MAX_HOUR - 1);
-        time.setMinutes(30);
-    }
-    return time
-}
-
-function buildTimeSelector(date) {
-    document.getElementById("date-selector").value = formatDate(date);
-    var end_time = new Date(date.getTime() + 30*60000);  // 1 min = 60000 ms
-    document.getElementById("time-selector").value = formatTime(date) + " - " + formatTime(end_time);
-}
-
-function addDateEventListeners(date) {
-    document.getElementById("date-prev").addEventListener('click', function (el) {
-        current_time = new Date(current_time.getTime() - 24*60*60000);
-        buildTimeSelector(current_time);
-        fetchClasses();
-    });
-    document.getElementById("date-next").addEventListener('click', function (el) {
-        current_time = new Date(current_time.getTime() + 24*60*60000);
-        buildTimeSelector(current_time);
-        fetchClasses();
-    });
-    document.getElementById("time-prev").addEventListener('click', function (el) {
-        current_time = new Date(current_time.getTime() - 30*60000);
-        if (current_time.getHours() < MIN_HOUR) {
-            current_time = new Date(current_time.getTime() - 24*60*60000);
-            current_time.setHours(MAX_HOUR - 1);
-            current_time.setMinutes(30);
-        }
-        buildTimeSelector(current_time);
-        fetchClasses();
-    });
-    document.getElementById("time-next").addEventListener('click', function (el) {
-        current_time = new Date(current_time.getTime() + 30*60000);
-        if (current_time.getHours() >= MAX_HOUR) {
-            current_time = new Date(current_time.getTime() + 24*60*60000);
-            current_time.setHours(MIN_HOUR);
-            current_time.setMinutes(0);
-        }
-        buildTimeSelector(current_time);
-        fetchClasses();
-    });
-}
-
-function formatTime(d) {
-    return d.toLocaleTimeString("ca", {timeStyle: 'short'});
-    /* var str = "";
-    str += d.getHours();
-    str += ":";
-    if (d.getMinutes() < 10) str += "0";
-     str += d.getMinutes();
-    return str; */
-}
-
-function formatDate(d) {
-    return d.toLocaleDateString("ca");
-}
-
-function fetchClasses() {
-    console.log(api_url + "getClassesInTime/" + current_time.getTime()/1000);
-    fetch(api_url + "getClassesInTime/" + current_time.getTime()/1000, {
-        "mode": "cors",
-        "credentials": "include"
-    })
-        .then(response => response.json())
-        .then(data => {
-            if (data.payload.classes.length == 0) {
-                document.getElementById('no-subjects').classList.remove('is-hidden');
-                document.getElementById('subject-container').classList.add('is-hidden');
-                document.getElementById('fme-maps-container').classList.add('is-hidden');
-            } else {
-                repeated_subjects = findRepeatedSubjects(data.payload.classes);
-                buildSubjectContainer(data.payload.classes, repeated_subjects);
-                document.getElementById('no-subjects').classList.add('is-hidden');
-                document.getElementById('subject-container').classList.remove('is-hidden');
-                document.getElementById('fme-maps-container').classList.remove('is-hidden');
-            }
-
-        });
-}
-
-function onPageLoad() {
-
-    // Check if user is signed in
-    if (localStorage.getItem('devMode') == 'true') {
-        var banner = document.getElementById('dev-mode');
-        banner.addEventListener('click', _ => {
-            localStorage.devMode = 'false';
-            location.reload();
-        });
-        banner.classList.remove('is-hidden');
-        api_url = localStorage.getItem('apiUrl') || 'https://covid-tracability-backend-dev.sandbox.avm99963.com/api/v1/'
-    } else {
-        api_url = "https://covid-tracability-backend-prod.sandbox.avm99963.com/api/v1/";
-    }
-
-    current_time = getDefaultTime();
-    buildTimeSelector(current_time);
-
-    fetch(api_url + "isSignedIn", {
-        "mode": "cors",
-        "credentials": "include"
-    })
-        .then(response => response.json())
-        .then(data => {
-            if (!data.payload.signedIn) {
-                console.log("Not signed in!");
-                fetch(api_url + "getAuthUrl", {
-                    "mode": "cors",
-                    "credentials": "include"
-                })
-                    .then(response => response.json())
-                    .then(data => {
-                        // TODO: redirect here
-                        // location.href = data.payload.url;
-                        console.warn('Log in here: ', data.payload.url);
-                    });
-            }
-        });
-
-    fetchClasses();
-}
-
-function sendForm() {
-    // Add subject to user
-    fetch(api_url + "addUserSubject", {
-        "method": "POST",
-        "body": JSON.stringify({
-            subject: final_JSON.class.subject_id
-        }),
-        "mode": "cors",
-        "credentials": "include"
-    })
-        .then(res => res.json())
-        .then(json => {
-            console.log("Subject added to user: ", json);
-
-            var begins = new Date(parseInt(final_JSON.class.begins)*1000);
-            var ends = new Date(parseInt(final_JSON.class.ends)*1000);
-
-            var params = new URLSearchParams();
-            params.append("entry." + idsFormulari.room, final_JSON.class.room); // class, number, letter
-            params.append("entry." + idsFormulari.day, begins.getFullYear().toString() + '-' + (begins.getMonth() + 1).toString().padStart(2, "0") + '-' + begins.getDate().toString().padStart(2, "0"));
-            params.append("entry." + idsFormulari.begins, formatTime(begins));
-            params.append("entry." + idsFormulari.ends, formatTime(ends));
-            params.append("entry." + idsFormulari.rows[final_JSON.letter], 'Columna ' + final_JSON.number);
-            // params.append("entry." + idsFormulari.notes, '[Autogenerat per delefme/covid-tracability -- Assignatura seleccionada: ' + (final_JSON.class.friendly_name || final_JSON.class.calendar_name) + ']');
-
-            var formulari_link = formBaseUrl + '?' + params.toString() + '#i1';
-            window.location.href = formulari_link;
-        });
-}
-
-
-function addEventListeners() {
-    window.addEventListener('load', onPageLoad);
-
-    var elements = document.getElementsByClassName("button");
-    Array.from(elements).forEach(function(element) {
-        element.addEventListener('click', clickButton);
-        element.parent = element.parentNode.id;
-    });
-
-    var elements = document.getElementsByClassName("complex-button");
-    Array.from(elements).forEach(function(element) {
-        element.addEventListener('click', clickButton);
-        element.parent = element.parentNode.id;
-    });
-
-    document.getElementById("send-button").addEventListener('click', function (el) {
-        document.getElementById("send-button").classList.add('is-loading');
-        sendForm();
-    });
-
-    addDateEventListeners();
-}
-
-addEventListeners();
+const idsFormulari = {

+    room: "1063142948",

+    day: "2115504093",

+    begins: "1749141911",

+    ends: "1827359679",

+    rows: {

+        A: "208184485",

+        B: "1077148310",

+        C: "642851281",

+        D: "1686039024",

+        E: "697835787",

+        F: "1511799646",

+        G: "809853432",

+        H: "182597499",

+        I: "1890539481",

+        J: "529159478",

+        K: "1615241874",

+        L: "1334263875"

+    },

+    notes: "1600275159"

+};

+

+const formBaseUrl = "https://docs.google.com/forms/d/e/1FAIpQLSfT9o287VqLyhwR8LPdloAQWhuqCgA3NfdhgP5vb9_sVQHL-g/viewform";

+

+const MIN_HOUR = 8;

+const MAX_HOUR = 23; // Pels altres graus de la Facultat

+

+var final_JSON = {

+    "class": null,

+    "number": "",

+    "letter": ""

+};

+

+var current_section = "section-1";

+

+var repeated_subjects;

+var current_time;

+

+

+function fillInSummary() {

+    var begins = new Date(parseInt(final_JSON.class.begins)*1000);

+    var ends = new Date(parseInt(final_JSON.class.ends)*1000);

+

+    document.getElementById('subject-final').textContent = final_JSON.class.friendly_name || final_JSON.class.calendar_name;

+    document.getElementById('classroom-final').textContent = final_JSON.class.room;

+    document.getElementById('date-final').textContent = begins.toLocaleDateString();

+    document.getElementById('time-final').textContent = formatTime(begins) + ' - ' + formatTime(ends);

+    document.getElementById('letter-final').textContent = final_JSON.letter;

+    document.getElementById('number-final').textContent = final_JSON.number;

+}

+

+function clickButton(element) {

+    var btn = element.currentTarget;

+    var parent = btn.parent;

+

+    if (parent == "subject-container") {

+        // Canvi de background del button

+        var selectedClass = JSON.parse(btn.getAttribute('data-class'));

+        $("#subject-container .complex-button").removeClass("is-link")

+        btn.classList.add("is-link");

+        // Canvi JSON

+        final_JSON["class"] = selectedClass;

+        // Missatge advertència classe repetida

+        if (repeated_subjects.has(selectedClass.id)) {

+            document.getElementById('repeated-subject-warning').classList.remove('is-hidden');

+            document.getElementById('repeated-subject-warning-class').textContent = selectedClass.room;

+        } else {

+            document.getElementById('repeated-subject-warning').classList.add('is-hidden');

+        }

+        // Anchor següent pregunta

+        switchSection("section-2");

+    } else if (parent == "number-container") {

+        // Canvi de background del button

+        $("#number-container .button").removeClass("is-link is-light is-active")

+        btn.classList.add("is-link", "is-light", "is-active");

+        // Canvi JSON

+        final_JSON["number"] = btn.getAttribute('data-number');

+        // Introducció de totes les dades al resum final

+        fillInSummary();

+        // Anchor següent pregunta

+        switchSection("section-send");

+    } else if (parent == "letter-container") {

+        // Canvi de background del button

+        $("#letter-container .button").removeClass("is-link is-light is-active")

+        btn.classList.add("is-link", "is-light", "is-active");

+        // Canvi JSON

+        final_JSON["letter"] = btn.getAttribute('data-letter');

+        // Anchor següent pregunta

+        switchSection("section-3");

+    }

+}

+

+function switchSection(s) {

+    setTimeout(function(){ 

+        document.getElementById(current_section).classList.add('is-hidden');

+        document.getElementById(s).classList.remove('is-hidden');

+        current_section = s;

+    }, 75);

+}

+

+function findRepeatedSubjects(classes) {

+    var rep = new Set();

+    for (var [i, classe] of classes.entries()) {

+        if (i > 0 && classes[i-1].calendar_name == classe.calendar_name) {

+            rep.add(classe.id);

+            rep.add(classes[i-1].id);

+        }

+    }

+    return rep;

+}

+

+function buildSubjectContainer(classes, repeated) {

+    var duplicateSubjectBoolNext, duplicateSubjectBoolPrev;

+    var duplicateSubjectCounter = 0;

+    

+    for (var [i, classe] of classes) {        

+        var hora_inici = formatDate(new Date(parseInt(classe.begins)*1000));

+        var hora_final = formatDate(new Date(parseInt(classe.ends)*1000));

+        var classeDiv = document.createElement('div');

+        

+        // Check if the subject is repeated

+        duplicateSubjectBoolNext = data.payload.classes[i+1].friendly_name == classe.friendly_name;

+        duplicateSubjectBoolPrev = data.payload.classes[i-1].friendly_name == classe.friendly_name;

+        

+        if(duplicateSubjectBoolNext && i < classes.length - 1 && duplicateSubjectCounter%2 == 1) {

+            classeDiv.classList.add('message', 'complex-button-full');

+        }

+        

+        if (duplicateSubjectBoolPrev && i > 0) {

+            classeDiv.classList.add('message', 'complex-button2Right');

+        } else if(duplicateSubjectBoolNext && i < data.payload.classes.length - 1) {

+            classeDiv.classList.add('message', 'complex-button2Left');

+        } else {

+            classeDiv.classList.add('message', 'complex-button');

+        }

+        

+        classeDiv.classList.add('message', 'complex-button');

+        classeDiv.id = 'subject-' + classe.subject_id + '-' + classe.room;

+        classeDiv.setAttribute('data-class', JSON.stringify(classe));

+

+        var header = document.createElement('div');

+        header.classList.add('message-header');

+

+        if (!(duplicateSubjectBoolPrev && i > 0)) {

+            header.textContent = classe.friendly_name || classe.calendar_name;

+        } else {

+            header.textContent = classe.friendly_name || classe.calendar_name;;

+            header.style.color = "#4A4A4A";

+        }

+        

+        var body = document.createElement('div');

+        body.classList.add('message-body');

+

+        var div1 = document.createElement('div');

+        var span = document.createElement('span');

+        span.textContent = classe.room;

+

+        div1.classList.add('has-text-weight-bold');

+

+        div1.textContent = 'Aula ';

+        div1.appendChild(span);

+

+        var div2 = document.createElement('div');

+        div2.textContent = hora_inici + ' - ' + hora_final;

+

+        body.appendChild(div1);

+        body.appendChild(div2);

+

+        classeDiv.appendChild(header);

+        classeDiv.appendChild(body);

+

+        document.getElementById("subject-container").appendChild(classeDiv);

+        ++duplicateSubjectCounter;

+    }

+  

+    var elements = document.getElementsByClassName("button");

+    Array.from(elements).forEach(function(element) {

+        element.addEventListener('click', clickButton);

+        element.parent = element.parentNode.id;

+    });

+    var elements = document.getElementsByClassName("complex-button");

+    Array.from(elements).forEach(function(element) {

+        element.addEventListener('click', clickButton);

+        element.parent = element.parentNode.id;

+    });

+}

+

+function getDefaultTime() {

+    var time = new Date();

+    time.setSeconds(0);

+    time.setMilliseconds(0);

+    if (time.getMinutes() < 30) time.setMinutes(0);

+    else time.setMinutes(30);

+    if (time.getHours() < MIN_HOUR) {

+        time.setHours(MIN_HOUR);

+        time.setMinutes(0);

+    }

+    if (time.getHours() >= MAX_HOUR) {

+        time.setHours(MAX_HOUR - 1);

+        time.setMinutes(30);

+    }

+    return time

+}

+

+function buildTimeSelector(date) {

+    document.getElementById("date-selector").value = formatDate(date);

+    var end_time = new Date(date.getTime() + 30*60000);  // 1 min = 60000 ms

+    document.getElementById("time-selector").value = formatTime(date) + " - " + formatTime(end_time);

+}

+

+function addDateEventListeners(date) {

+    document.getElementById("date-prev").addEventListener('click', function (el) {

+        current_time = new Date(current_time.getTime() - 24*60*60000);

+        buildTimeSelector(current_time);

+        fetchClasses();

+    });

+    document.getElementById("date-next").addEventListener('click', function (el) {

+        current_time = new Date(current_time.getTime() + 24*60*60000);

+        buildTimeSelector(current_time);

+        fetchClasses();

+    });

+    document.getElementById("time-prev").addEventListener('click', function (el) {

+        current_time = new Date(current_time.getTime() - 30*60000);

+        if (current_time.getHours() < MIN_HOUR) {

+            current_time = new Date(current_time.getTime() - 24*60*60000);

+            current_time.setHours(MAX_HOUR - 1);

+            current_time.setMinutes(30);

+        }

+        buildTimeSelector(current_time);

+        fetchClasses();

+    });

+    document.getElementById("time-next").addEventListener('click', function (el) {

+        current_time = new Date(current_time.getTime() + 30*60000);

+        if (current_time.getHours() >= MAX_HOUR) {

+            current_time = new Date(current_time.getTime() + 24*60*60000);

+            current_time.setHours(MIN_HOUR);

+            current_time.setMinutes(0);

+        }

+        buildTimeSelector(current_time);

+        fetchClasses();

+    });

+}

+

+function formatTime(d) {

+    return d.toLocaleTimeString("ca", {timeStyle: 'short'});

+    /* var str = "";

+    str += d.getHours();

+    str += ":";

+    if (d.getMinutes() < 10) str += "0";

+     str += d.getMinutes();

+    return str; */

+}

+

+function formatDate(d) {

+    return d.toLocaleDateString("ca");

+}

+

+function fetchClasses() {

+    console.log(api_url + "getClassesInTime/" + current_time.getTime()/1000);

+    fetch(api_url + "getClassesInTime/" + current_time.getTime()/1000, {

+        "mode": "cors",

+        "credentials": "include"

+    })

+        .then(response => response.json())

+        .then(data => {

+            if (data.payload.classes.length == 0) {

+                document.getElementById('no-subjects').classList.remove('is-hidden');

+                document.getElementById('subject-container').classList.add('is-hidden');

+                document.getElementById('fme-maps-container').classList.add('is-hidden');

+            } else {

+                repeated_subjects = findRepeatedSubjects(data.payload.classes);

+                buildSubjectContainer(data.payload.classes, repeated_subjects);

+                document.getElementById('no-subjects').classList.add('is-hidden');

+                document.getElementById('subject-container').classList.remove('is-hidden');

+                document.getElementById('fme-maps-container').classList.remove('is-hidden');

+            }

+

+        });

+}

+

+function onPageLoad() {

+

+    // Check if user is signed in

+    if (localStorage.getItem('devMode') == 'true') {

+        var banner = document.getElementById('dev-mode');

+        banner.addEventListener('click', _ => {

+            localStorage.devMode = 'false';

+            location.reload();

+        });

+        banner.classList.remove('is-hidden');

+        api_url = localStorage.getItem('apiUrl') || 'https://covid-tracability-backend-dev.sandbox.avm99963.com/api/v1/'

+    } else {

+        api_url = "https://covid-tracability-backend-prod.sandbox.avm99963.com/api/v1/";

+    }

+

+    current_time = getDefaultTime();

+    buildTimeSelector(current_time);

+

+    fetch(api_url + "isSignedIn", {

+        "mode": "cors",

+        "credentials": "include"

+    })

+        .then(response => response.json())

+        .then(data => {

+            if (!data.payload.signedIn) {

+                console.log("Not signed in!");

+                fetch(api_url + "getAuthUrl", {

+                    "mode": "cors",

+                    "credentials": "include"

+                })

+                    .then(response => response.json())

+                    .then(data => {

+                        // TODO: redirect here

+                        // location.href = data.payload.url;

+                        console.warn('Log in here: ', data.payload.url);

+                    });

+            }

+        });

+

+    fetchClasses();

+}

+

+function sendForm() {

+    // Add subject to user

+    fetch(api_url + "addUserSubject", {

+        "method": "POST",

+        "body": JSON.stringify({

+            subject: final_JSON.class.subject_id

+        }),

+        "mode": "cors",

+        "credentials": "include"

+    })

+        .then(res => res.json())

+        .then(json => {

+            console.log("Subject added to user: ", json);

+

+            var begins = new Date(parseInt(final_JSON.class.begins)*1000);

+            var ends = new Date(parseInt(final_JSON.class.ends)*1000);

+

+            var params = new URLSearchParams();

+            params.append("entry." + idsFormulari.room, final_JSON.class.room); // class, number, letter

+            params.append("entry." + idsFormulari.day, begins.getFullYear().toString() + '-' + (begins.getMonth() + 1).toString().padStart(2, "0") + '-' + begins.getDate().toString().padStart(2, "0"));

+            params.append("entry." + idsFormulari.begins, formatTime(begins));

+            params.append("entry." + idsFormulari.ends, formatTime(ends));

+            params.append("entry." + idsFormulari.rows[final_JSON.letter], 'Columna ' + final_JSON.number);

+            // params.append("entry." + idsFormulari.notes, '[Autogenerat per delefme/covid-tracability -- Assignatura seleccionada: ' + (final_JSON.class.friendly_name || final_JSON.class.calendar_name) + ']');

+

+            var formulari_link = formBaseUrl + '?' + params.toString() + '#i1';

+            window.location.href = formulari_link;

+        });

+}

+

+

+function addEventListeners() {

+    window.addEventListener('load', onPageLoad);

+

+    var elements = document.getElementsByClassName("button");

+    Array.from(elements).forEach(function(element) {

+        element.addEventListener('click', clickButton);

+        element.parent = element.parentNode.id;

+    });

+

+    var elements = document.getElementsByClassName("complex-button");

+    Array.from(elements).forEach(function(element) {

+        element.addEventListener('click', clickButton);

+        element.parent = element.parentNode.id;

+    });

+

+    document.getElementById("send-button").addEventListener('click', function (el) {

+        document.getElementById("send-button").classList.add('is-loading');

+        sendForm();

+    });

+

+    addDateEventListeners();

+}

+

+addEventListeners();