-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtimetable.js
123 lines (109 loc) · 3.58 KB
/
timetable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Returns current week of the semester
function currentWeek() {
var today = new Date();
var diff = new Date (today.getTime()-O_WEEK.getTime());
var week = Math.floor(diff.getTime() / (1000 * 60 * 60 * 24 * 7));
if (today >= MID_BREAK) {
week--;
}
return week;
}
// Returns the week the timetable is displaying for
function getWeek() {
return document.title.match(/\d+/);
}
// Sets the week the timetable is displaying for
function setWeek(week) {
document.title="Week "+week;
window.status="Timetable for Week "+week;
}
// Adds a rule to the CSS stylesheet
function addCSSRule(name, text) {
var styleSheet = document.styleSheets[0];
if (styleSheet.insertRule) {
styleSheet.insertRule(name+" {"+text+"}", styleSheet.cssRules.length);
} else if (styleSheet.addRule) {
styleSheet.addRule(name, text);
} else {
alert("ERROR: Cannot add CSS rule");
}
}
// Removes a rule from the CSS stylesheet
function removeCSSRule(name) {
var cssRules = [];
if (document.styleSheets[0].cssRules) {
cssRules = document.styleSheets[0].cssRules;
} else if (document.styleSheets[0].rules) {
cssRules = document.styleSheets[0].rules;
} else {
alert("ERROR: Cannot see CSS rules");
}
for (var i = 0, len = cssRules.length; i < len; i++) {
if (cssRules[i].selectorText === name) {
if (document.styleSheets[0].deleteRule) {
document.styleSheets[0].deleteRule(i);
} else if (document.styleSheets[0].removeRule) {
document.styleSheets[0].removeRule(i);
} else {
alert("ERROR: Cannot remove CSS rule");
}
break;
}
}
}
// Displays the appropriate timetable for the given week
// if no week is given, uses current week
function displayTimetable(week) {
if (week === undefined) {
week = currentWeek();
}
if (week < 1) {
alert("Uni hasn't started yet!");
window.location = "index.html";
} else if (week > 13) {
window.location = "exam";
}
document.getElementById('prev').disabled = (week <= 1);
document.getElementById('this').disabled = (week == currentWeek());
document.getElementById('next').disabled = (week >= 13);
if (getWeek() !== null) {
removeCSSRule(".notWk"+getWeek());
}
addCSSRule(".notWk"+week, "display: none");
// Make sure we do this last!
setWeek(week);
}
function init(e) {
displayTimetable();
addCSSRule("#nojs", "display: none");
removeCSSRule("#navigation");
removeCSSRule("#timetable");
if (document.addEventListener) {
document.getElementById('prev').addEventListener('click', function () {
displayTimetable(parseInt(getWeek())-1);
}, false);
document.getElementById('this').addEventListener('click', function () {
displayTimetable();
}, false);
document.getElementById('next').addEventListener('click', function () {
displayTimetable(parseInt(getWeek())+1);
}, false);
} else {
document.getElementById('prev').attachEvent('onclick', function () {
displayTimetable(parseInt(getWeek())-1);
});
document.getElementById('this').attachEvent('onclick', function () {
displayTimetable();
});
document.getElementById('next').attachEvent('onclick', function () {
displayTimetable(parseInt(getWeek())+1);
});
}
}
if (window.addEventListener) {
window.addEventListener('load', init, false);
} else if (document.addEventListener) {
document.addEventListener('load', init, false);
} else if (window.attachEvent) {
window.attachEvent('onload', init);
}