1var scale = 60
  2var eventDivPaddingOffset = 10;
  3
  4if (localStorage.getItem('dark-mode') == null){
  5    localStorage.setItem('dark-mode',false);
  6}
  7
  8var scheduleData;
  9var weekNumber;
 10var dayOfWeek;
 11var realWeekNumber;
 12
 13var datesData;
 14
 15function animateScheduleEventDestroy() {
 16    scheduleEventElements = document.getElementsByClassName("schedule-event")
 17    for (let i = 0; i < scheduleEventElements.length; i++) {
 18        scheduleEventElements[i].className += " schedule-event-destroy";
 19    }
 20}
 21
 22function toastNotification(textToDisplay) {
 23    document.getElementById("toast-notification").innerHTML = textToDisplay;
 24    document.getElementById("toast-notification").style.top = "0px";
 25    setTimeout(function() {
 26        document.getElementById("toast-notification").style = "";
 27    }, 2000);
 28}
 29
 30function toastCopyright() {
 31    toastNotification("Copyright. Louis Dalibard. 2021. All rights reserved.")
 32}
 33
 34function lastWeek() {
 35    weekNumber--;
 36    animateScheduleEventDestroy();
 37    setTimeout(updateSchedule, 150);
 38}
 39
 40function nextWeek() {
 41    weekNumber++;
 42    animateScheduleEventDestroy();
 43    setTimeout(updateSchedule, 150);
 44}
 45
 46function toggleDarkMode(){
 47    if(localStorage.getItem('dark-mode') == "true"){
 48        localStorage.setItem('dark-mode',false);
 49        offDarkMode();
 50        toastNotification("Retina burning action!")
 51    } else{
 52        localStorage.setItem('dark-mode',true);
 53        onDarkMode();
 54        toastNotification("Lights out!")
 55    }
 56}
 57function onDarkMode(){
 58    var root = document.documentElement;
 59    root.style.setProperty('--main-bg-color', "black");
 60    root.style.setProperty('--text-color', "white");
 61    root.style.setProperty('--text-secondary-color', "#ababab");
 62    root.style.setProperty('--border-color', "rgba(255, 255, 255, 0.33)");
 63    root.style.setProperty('--semi-bg-color', "rgba(255, 255, 255, 0.03)");
 64    document.getElementById("header-icon-image").style.filter = "invert(1)";
 65
 66}
 67function offDarkMode(){
 68    var root = document.documentElement;
 69    root.style.setProperty('--main-bg-color', "white");
 70        root.style.setProperty('--text-color', "black");
 71        root.style.setProperty('--text-secondary-color', "#555");
 72        root.style.setProperty('--border-color', "rgba(0, 0, 0, 0.33)");
 73        root.style.setProperty('--semi-bg-color', "rgba(0, 0, 0, 0.03)");
 74        document.getElementById("header-icon-image").style.filter = "invert(0)";
 75}
 76
 77function formatDateForUse(dateString){
 78    return moment(dateString).format('dddd, MMMM D, YYYY');
 79}
 80
 81function loadCurrentSchedule() {
 82    scheduleData = JSON.parse(localStorage.getItem('schedule-file'));
 83    weekNumber = 0;
 84    var a = moment(scheduleData.weeks.startDate);
 85    var b = moment();
 86    var diffdays = b.diff(a, 'days');
 87    dayOfWeek = diffdays % 7;
 88    weekNumber = Math.floor(diffdays / 7);
 89    realWeekNumber = weekNumber;
 90}
 91
 92function loadDates(){
 93    datesData = JSON.parse(localStorage.getItem('dates-file'));
 94}
 95
 96function updateSchedule() {
 97    document.getElementById("week-count").innerHTML = weekNumber;
 98    if (weekNumber == realWeekNumber) {
 99        document.getElementById("week-count").style.textDecoration = "underline dotted var(--text-color)";
100    } else {
101        document.getElementById("week-count").style.textDecoration = "underline dotted transparent";
102    }
103    var weekType = scheduleData.weeks.weekTypeString[weekNumber];
104    var weekData = scheduleData.schedule[weekType];
105    document.getElementById("schedule-days").innerHTML=`<div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div><div class="schedule-day"></div>`;
106    for (let i = 0; i < weekData.length; i++) {
107        var dayData = weekData[i];
108        document.getElementById("schedule-days").children[i].innerHTML = "";
109        for (let j = 0; j < dayData.length; j++) {
110            var eventData = dayData[j]
111            var eventStart = eventData.start.split(":")[0] * 60 + eventData.start.split(":")[1];
112            var eventEnd = eventData.end.split(":")[0] * 60 + eventData.end.split(":")[1];
113            var eventDuration = eventEnd - eventStart
114            const eventDiv = document.createElement("div");
115            const eventNameDiv = document.createElement("div");
116            eventNameDiv.innerHTML = eventData.name;
117            eventNameDiv.className = "schedule-event-name";
118            eventDiv.appendChild(eventNameDiv);
119            const eventTimeDiv = document.createElement("div");
120            eventTimeDiv.innerHTML = eventData.start + " - " + eventData.end;
121            eventTimeDiv.className = "schedule-event-time";
122            eventDiv.appendChild(eventTimeDiv);
123            const eventRoomDiv = document.createElement("div");
124            eventRoomDiv.innerHTML = eventData.room;
125            eventTimeDiv.className = "schedule-event-time";
126            eventDiv.appendChild(eventRoomDiv);
127            eventDiv.className = "schedule-event";
128            eventDiv.style = "height: " + String((eventDuration / scale) - eventDivPaddingOffset) + "px;" + "top: " + String(eventStart / scale) + "px;"
129            document.getElementById("schedule-days").children[i].appendChild(eventDiv);
130            if (i == dayOfWeek) {
131                document.getElementsByClassName("schedule-weekday-name")[i].style.textDecoration = "underline dotted var(--text-color)";
132            } else {
133                document.getElementsByClassName("schedule-weekday-name")[i].style.textDecoration = "underline dotted transparent";
134            }
135        }
136    }
137}
138
139function updateDates(){
140    datesDataList = datesData.dates;
141    document.getElementById("dates-list-list").innerHTML = "";
142    currdatepassed = false;
143    for (let i = 0; i < datesDataList.length; i++) {
144        var itDateData=datesDataList[i]
145        var dateDiv = document.createElement("div");
146        dateDiv.className = "dates-date";
147        var dateTitleDiv = document.createElement("div");
148        dateTitleDiv.innerHTML = itDateData.title;
149        dateTitleDiv.className = "dates-date-title";
150        var dateDateDiv = document.createElement("div");
151        if (itDateData.startDate != itDateData.endDate){
152        dateDateDiv.innerHTML = formatDateForUse(itDateData.startDate)+" - "+formatDateForUse(itDateData.endDate);
153        } else{
154            dateDateDiv.innerHTML = formatDateForUse(itDateData.startDate)
155        }
156        dateDateDiv.className = "dates-date-date";
157        var dateContentDiv = document.createElement("div");
158        dateContentDiv.innerHTML = itDateData.description;
159        dateContentDiv.className = "dates-date-description";
160        dateDiv.appendChild(dateTitleDiv);
161        dateDiv.appendChild(dateContentDiv);
162        dateDiv.appendChild(dateDateDiv);
163        if (moment(itDateData.startDate)-moment() > 0){
164            if (!currdatepassed){
165                currdatepassed = true;
166                var seperatorDiv = document.createElement("div");
167                seperatorDiv.id = "dates-seperator";
168                seperatorDiv.innerHTML = "Current Date ("+(new Date().toLocaleString()).split(",")[0]+")";
169                document.getElementById("dates-list-list").appendChild(seperatorDiv);
170            }
171        }
172        document.getElementById("dates-list-list").appendChild(dateDiv);
173}}
174
175function upload() {
176    document.getElementById('FileAttachment').click();
177}
178
179function uploadDatesList() {
180    document.getElementById('FileAttachmentDates').click();
181}
182
183function loadTSCDFile(filetoload) {
184    var reader = new FileReader();
185    reader.readAsText(filetoload, 'UTF-8');
186    reader.onload = readerEvent => {
187        var content = readerEvent.target.result;
188        localStorage.setItem('schedule-file', content);
189        loadCurrentSchedule();
190        updateSchedule();
191    }
192}
193
194function loadTSCDateFile(filetoload) {
195    var reader = new FileReader();
196    reader.readAsText(filetoload, 'UTF-8');
197    reader.onload = readerEvent => {
198        var content = readerEvent.target.result;
199        localStorage.setItem('dates-file', content);
200        loadDates();
201        updateDates();
202    }
203}
204
205document.getElementById('FileAttachment').onchange = e => {
206    var file = e.target.files[0];
207    loadTSCDFile(file);
208}
209
210document.getElementById('FileAttachmentDates').onchange = e => {
211    var dateFile = e.target.files[0];
212    loadTSCDateFile(dateFile);
213}
214
215if(localStorage.getItem('dark-mode') == "true"){
216    onDarkMode();
217} else{
218    offDarkMode();
219}
220setTimeout(function(){document.documentElement.style.transition = "color 1s ease, background 1s ease, border 1s ease";},100);
221
222loadCurrentSchedule();
223updateSchedule();
224loadDates();
225updateDates();