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