0a2a9964f36be41a73d73540f7f087b5fbbc9e9e
[infodrom/phone] / phone.js
1 var menu_list = {
2     'title': 'Calls',
3     'items': [{'name': 'Archive', 'callback': menu_list_archive},
4               {'name': 'Edit', 'callback': menu_list_edit},
5               {'name': 'Delete', 'callback': menu_list_delete},
6               {'name': 'Cancel', 'type': 'hide'}]
7 };
8
9 function page_init()
10 {
11     var frame = document.getElementById('phonecall');
12     frame.src = '';
13     fetch_incoming();
14     fetch_archive();
15 }
16
17 function reload()
18 {
19     fetch_incoming();
20     fetch_archive();
21 }
22
23 function fetch_incoming_callback(data)
24 {
25     var calls = document.getElementById('incoming_calls');
26     var div = document.getElementById('incoming');
27
28     while (calls.childNodes.length > 0)
29         calls.removeChild(calls.childNodes[0]);
30
31     if (data.incoming.length > 0) {
32         div.style.display = '';
33
34         for (var i=0; i < data.incoming.length; i++) {
35             var elem = document.createElement('li');
36             var text = data.incoming[i].date + ', ';
37             if (data.incoming[i].name == '*** Unknown ***' && data.incoming[i].number != '0')
38                 text += data.incoming[i].number;
39             else
40                 text += data.incoming[i].name;
41             text += ', ' + data.incoming[i].length;
42
43             elem.innerHTML = text;
44             elem.payload = new Array();
45             elem.payload['dir'] = 'incoming';
46             elem.payload['call'] = data.incoming[i].fname;
47             if (data.incoming[i].read == undefined)
48                 elem.className = 'new';
49             elem.onclick = play_message;
50             elem.oncontextmenu = list_context;
51             calls.appendChild(elem);
52         }
53     } else {
54         div.style.display = 'none';
55     }
56 }
57
58 function fetch_incoming()
59 {
60     ajax_request('incoming', '', fetch_incoming_callback);
61 }
62
63 function fetch_archive_callback(data)
64 {
65     var calls = document.getElementById('archive_calls');
66     var div = document.getElementById('archive');
67
68     while (calls.childNodes.length > 0)
69         calls.removeChild(calls.childNodes[0]);
70
71     if (data.archive.length > 0) {
72         div.style.display = '';
73
74         for (var i=0; i < data.archive.length; i++) {
75             var elem = document.createElement('li');
76             var text = data.archive[i].date + ', ';
77             if (data.archive[i].name == '*** Unknown ***' && data.archive[i].number != '0')
78                 text += data.archive[i].number;
79             else
80                 text += data.archive[i].name;
81             text += ', ' + data.archive[i].length;
82
83             elem.innerHTML = text;
84             elem.payload = new Array();
85             elem.payload['dir'] = 'archive';
86             elem.payload['call'] = data.archive[i].fname;
87             elem.onclick = play_message;
88             elem.oncontextmenu = list_context;
89             calls.appendChild(elem);
90         }
91     } else {
92         div.style.display = 'none';
93     }
94 }
95
96 function fetch_archive()
97 {
98     ajax_request('archive', '', fetch_archive_callback);
99 }
100
101 function play_message_callback(data)
102 {
103     var speaker = document.getElementById('callspeaker');
104     var date = document.getElementById('calldate');
105     var note = document.getElementById('callnote');
106
107     var text = data.name;
108     if (data.number != '0') text += ' (' + data.number + ')';
109     speaker.innerHTML = text;
110     date.innerHTML = data.date + ', ' + data.length;
111     note.innerHTML = data.note;
112 }
113
114 function play_message(event)
115 {
116     var frame = document.getElementById('phonecall');
117     var params = 'dir='+event.originalTarget.payload['dir']+'&call='+event.originalTarget.payload['call'];
118     ajax_request('callinfo', params, play_message_callback);
119     frame.src = 'index.php?'+params;
120     event.originalTarget.className = '';
121 }
122
123 function save_callback(data)
124 {
125     field = document.getElementById('edit_status');
126     field.innerHTML = 'Call saved';
127 }
128
129 function save()
130 {
131     var dir = document.getElementById('edit_dir');
132     var call = document.getElementById('edit_call');
133     var name = document.getElementById('edit_name');
134     var note = document.getElementById('edit_note');
135     var params = 'dir=' + dir.value + '&call=' + call.value;
136     params += '&name=' + name.value + '&note=' + note.value;
137
138     ajax_request('save', params, save_callback);
139 }
140
141 function list_context(e)
142 {
143     var menu = document.getElementById('menu_list');
144     if (!menu)
145         menu = menu_create('menu_list', menu_list);
146
147     menu.style.left = e.pageX - 40;
148     menu.style.top = e.pageY - 15;
149     menu.style.display = '';
150     menu.payload = new Array();
151     menu.payload['dir'] = e.target.payload['dir'];
152     menu.payload['call'] = e.target.payload['call'];
153
154     return false;
155 }
156
157 function menu_list_archive_callback(data)
158 {
159     fetch_incoming();
160     fetch_archive();
161 }
162
163 function menu_list_edit_callback(data)
164 {
165     var fields = ['name','note','dir','call'];
166     var field;
167
168     for (var i=0; i < fields.length; i++) {
169         field = document.getElementById('edit_' + fields[i]);
170         field.value = data[fields[i]];
171     }
172
173     fields = ['name','note'];
174     for (var i=0; i < fields.length; i++) {
175         field = document.getElementById('edit_' + fields[i]);
176         field.innerHTML = data[fields[i]];
177     }
178
179     field = document.getElementById('edit_date');
180     field.innerHTML = data.date + ', ' + data.length;
181     field = document.getElementById('edit_status');
182     field.innerHTML = '';
183 }
184
185 function menu_list_archive(e)
186 {
187     if (e.target.parentNode.payload['dir'] == 'incoming')
188         ajax_request('archive_call', 'call='+e.target.parentNode.payload['call'], menu_list_archive_callback);
189
190     e.target.parentNode.style.display = 'none';
191 }
192
193 function menu_list_edit(e)
194 {
195     var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
196     ajax_request('callinfo', params, menu_list_edit_callback);
197
198     e.target.parentNode.style.display = 'none';
199 }
200
201 function menu_list_delete(e)
202 {
203     var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
204     ajax_request('delete_call', params, menu_list_archive_callback);
205
206     e.target.parentNode.style.display = 'none';
207 }