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