f347af2b6acffbfc118097c276905a4137a3b62e
[knw_133/.git] / js / main.js
1 model=window.model||{};
2
3 var lastxhr;
4
5 function load(path,onload,onerror){
6   onerror = onerror||function(){};
7   var xhr = new XMLHttpRequest();
8   xhr.onload = function(){
9     if( this.status != 200 ){
10       onerror( this.responseText, this.status );
11     }else{
12       onload( this.responseText );
13     }
14   };
15   function errorHandler( e ){
16     onerror( (e||e.error).stack );
17   }
18   xhr.onerror = errorHandler;
19   try {
20     xhr.open("GET",path,true);
21     xhr.send();
22   } catch( e ) {
23     errorHandler(e);
24   }
25   if( lastxhr && lastxhr.readyState != 4 && lastxhr.abord )
26     lastxhr.abord();
27   lastxhr = xhr;
28 }
29
30 var jobId = null;
31 var classId = null;
32 var date = new Date();
33
34 Date.prototype.getDayOfYear = function(){
35   var start = new Date(this.getFullYear(), 0, 0);
36   var diff = this - start;
37   var oneDay = 1000 * 60 * 60 * 24;
38   var day = Math.floor(diff / oneDay);
39   return day;
40 };
41
42 Date.prototype.nextWeek = function(){
43   this.setDate(this.getDate()+7);
44 }
45
46 Date.prototype.lastWeek = function(){
47   this.setDate(this.getDate()-7);
48 }
49
50 function updateDate(){
51   model.week = Math.floor(date.getDayOfYear()/7) + '-' + date.getFullYear();
52   loadCalendar();
53 }
54
55 model.nextWeek = function(){
56   date.nextWeek();
57   updateDate();
58 }
59 model.lastWeek = function(){
60   date.lastWeek();
61   updateDate();
62 }
63
64 function loadClasses(){
65   jobId = this.value;
66   classId = null;
67   model.classes = null;
68   model.displayInfo="none";
69   model.calendar = null;
70   load(
71     "http://home.gibm.ch/interfaces/133/klassen.php?beruf_id=" + jobId,
72     function( res ){
73       model.classes = {
74         list: JSON.parse( res ),
75         loadCalendar: loadCalendar
76       };
77     },
78     console.error
79   );
80 }
81
82 function loadCalendar(){
83   if( "value" in this )
84     classId = this.value;
85   if( classId === null || jobId === null )
86     return;
87   model.calendar = null;
88   model.displayInfo="none";
89   load(
90     "http://home.gibm.ch/interfaces/133/tafel.php?klasse_id=" + classId + "&woche=" + model.week,
91     function( res ){
92       var events = JSON.parse( res );
93       if( events.length ){
94         model.calendar = {
95           events: events
96         };
97         model.displayInfo="none";
98       }else{
99         model.displayInfo="block";
100       }
101     },
102     console.error
103   );
104 }
105
106 updateDate();
107
108 model.displayInfo="none";
109
110 model.jobs = null;
111 load("http://home.gibm.ch/interfaces/133/berufe.php", function( res ){
112   jobId = null;
113   model.displayInfo="none";
114   model.jobs = {
115     list: JSON.parse( res ),
116     loadClasses: loadClasses
117   };
118 },console.error);