73bc2b541fb983613695d04df8b90a24998f9b12
[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 remove_children(obj)
24 {
25     while (obj.childNodes.length > 0)
26         obj.removeChild(obj.childNodes[0]);
27 }
28
29 function fetch_incoming_callback(data)
30 {
31     var calls = document.getElementById('incoming_calls');
32     var div = document.getElementById('incoming');
33
34     remove_children(calls);
35
36     if (data.incoming.length > 0) {
37         div.style.display = '';
38
39         for (var i=0; i < data.incoming.length; i++) {
40             var elem = document.createElement('li');
41             var text = data.incoming[i].date + ', ';
42             if (data.incoming[i].name == '*** Unknown ***' && data.incoming[i].number != '0')
43                 text += data.incoming[i].number;
44             else
45                 text += data.incoming[i].name;
46             text += ', ' + data.incoming[i].length;
47
48             elem.innerHTML = text;
49             elem.payload = new Array();
50             elem.payload['dir'] = 'incoming';
51             elem.payload['call'] = data.incoming[i].fname;
52             if (data.incoming[i].read == undefined)
53                 elem.className = 'new';
54             if (data.incoming[i].note.length)
55                 elem.title = data.incoming[i].note;
56             elem.onclick = play_message;
57             elem.oncontextmenu = list_context;
58             calls.appendChild(elem);
59         }
60     } else {
61         div.style.display = 'none';
62     }
63 }
64
65 function fetch_incoming()
66 {
67     ajax_request('incoming', '', fetch_incoming_callback);
68 }
69
70 function fetch_archive_callback(data)
71 {
72     var calls = document.getElementById('archive_calls');
73     var div = document.getElementById('archive');
74
75     remove_children(calls);
76
77     if (data.archive.length > 0) {
78         div.style.display = '';
79
80         for (var i=0; i < data.archive.length; i++) {
81             var elem = document.createElement('li');
82             var text = data.archive[i].date + ', ';
83             if (data.archive[i].name == '*** Unknown ***' && data.archive[i].number != '0')
84                 text += data.archive[i].number;
85             else
86                 text += data.archive[i].name;
87             text += ', ' + data.archive[i].length;
88
89             elem.innerHTML = text;
90             elem.payload = new Array();
91             elem.payload['dir'] = 'archive';
92             elem.payload['call'] = data.archive[i].fname;
93             if (data.archive[i].note.length)
94                 elem.title = data.archive[i].note;
95             elem.onclick = play_message;
96             elem.oncontextmenu = list_context;
97             calls.appendChild(elem);
98         }
99     } else {
100         div.style.display = 'none';
101     }
102 }
103
104 function fetch_archive()
105 {
106     ajax_request('archive', '', fetch_archive_callback);
107 }
108
109 function play_message_callback(data)
110 {
111     var speaker = document.getElementById('callspeaker');
112     var date = document.getElementById('calldate');
113     var note = document.getElementById('callnote');
114
115     if (data.dir == 'messages') {
116         date.innerHTML = '&nbsp;';
117         speaker.innerHTML = 'Message ' + data.call;
118         note.innerHTML = '';
119         return;
120     }
121
122     var text = data.name;
123     if (data.number != '0') text += ' (' + data.number + ')';
124     speaker.innerHTML = text;
125     date.innerHTML = data.date + ', ' + data.length;
126     note.innerHTML = data.note;
127 }
128
129 function play_message(event)
130 {
131     var frame = document.getElementById('phonecall');
132     var params = 'dir='+event.originalTarget.payload['dir']+'&call='+event.originalTarget.payload['call'];
133     ajax_request('callinfo', params, play_message_callback);
134     frame.src = 'index.php?'+params;
135     event.originalTarget.className = '';
136 }
137
138 function save_callback(data)
139 {
140     field = document.getElementById('edit_status');
141     field.innerHTML = 'Call saved';
142 }
143
144 function save()
145 {
146     var dir = document.getElementById('edit_dir');
147     var call = document.getElementById('edit_call');
148     var name = document.getElementById('edit_name');
149     var note = document.getElementById('edit_note');
150     var params = 'dir=' + dir.value + '&call=' + call.value;
151     params += '&name=' + name.value + '&note=' + note.value;
152
153     ajax_request('save', params, save_callback);
154 }
155
156 function list_context(e)
157 {
158     var menu = document.getElementById('menu_list');
159     if (!menu)
160         menu = menu_create('menu_list', menu_list);
161
162     menu.style.left = e.pageX - 40;
163     menu.style.top = e.pageY - 15;
164     menu.style.display = '';
165     menu.payload = new Array();
166     menu.payload['dir'] = e.target.payload['dir'];
167     menu.payload['call'] = e.target.payload['call'];
168
169     return false;
170 }
171
172 function menu_list_archive_callback(data)
173 {
174     fetch_incoming();
175     fetch_archive();
176 }
177
178 function menu_list_edit_callback(data)
179 {
180     var fields = ['name','note','dir','call'];
181     var field;
182
183     for (var i=0; i < fields.length; i++) {
184         field = document.getElementById('edit_' + fields[i]);
185         field.value = data[fields[i]];
186     }
187
188     fields = ['name','note'];
189     for (var i=0; i < fields.length; i++) {
190         field = document.getElementById('edit_' + fields[i]);
191         field.innerHTML = data[fields[i]];
192     }
193
194     field = document.getElementById('edit_date');
195     field.innerHTML = data.date + ', ' + data.length;
196     field = document.getElementById('edit_status');
197     field.innerHTML = '';
198 }
199
200 function menu_list_archive(e)
201 {
202     if (e.target.parentNode.payload['dir'] == 'incoming')
203         ajax_request('archive_call', 'call='+e.target.parentNode.payload['call'], menu_list_archive_callback);
204
205     e.target.parentNode.style.display = 'none';
206 }
207
208 function menu_list_edit(e)
209 {
210     var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
211     ajax_request('callinfo', params, menu_list_edit_callback);
212
213     e.target.parentNode.style.display = 'none';
214
215     var edit = document.getElementById('container_edit');
216     var config = document.getElementById('container_config');
217
218     edit.style.display = '';
219     config.style.display = 'none';
220 }
221
222 function menu_list_delete(e)
223 {
224     var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
225     ajax_request('delete_call', params, menu_list_archive_callback);
226
227     e.target.parentNode.style.display = 'none';
228 }
229
230 function fetch_messages_callback(data)
231 {
232     var calls = document.getElementById('internal_calls');
233
234     remove_children(calls);
235
236     if (data.messages.length > 0) {
237         for (var i=0; i < data.messages.length; i++) {
238             var elem = document.createElement('li');
239
240             elem.innerHTML = data.messages[i].fname;
241             elem.payload = new Array();
242             elem.payload['dir'] = 'messages';
243             elem.payload['call'] = data.messages[i].fname;
244             elem.onclick = play_message;
245             calls.appendChild(elem);
246         }
247     }
248 }
249
250 function toggle_messages()
251 {
252     var edit = document.getElementById('container_edit');
253     var config = document.getElementById('container_config');
254
255     config.style.display = '';
256     edit.style.display = 'none';
257
258     ajax_request('messages', '', fetch_messages_callback);
259 }