Allow playing of internal messages
[infodrom/phone] / phone.js
index f69498c..b249880 100644 (file)
--- a/phone.js
+++ b/phone.js
@@ -1,8 +1,29 @@
+var menu_list = {
+    'title': 'Calls',
+    'items': [{'name': 'Archive', 'callback': menu_list_archive},
+              {'name': 'Edit', 'callback': menu_list_edit},
+              {'name': 'Delete', 'callback': menu_list_delete},
+              {'name': 'Cancel', 'type': 'hide'}]
+};
+
 function page_init()
 {
     var frame = document.getElementById('phonecall');
     frame.src = '';
     fetch_incoming();
 function page_init()
 {
     var frame = document.getElementById('phonecall');
     frame.src = '';
     fetch_incoming();
+    fetch_archive();
+}
+
+function reload()
+{
+    fetch_incoming();
+    fetch_archive();
+}
+
+function remove_children(obj)
+{
+    while (obj.childNodes.length > 0)
+       obj.removeChild(obj.childNodes[0]);
 }
 
 function fetch_incoming_callback(data)
 }
 
 function fetch_incoming_callback(data)
@@ -10,8 +31,7 @@ function fetch_incoming_callback(data)
     var calls = document.getElementById('incoming_calls');
     var div = document.getElementById('incoming');
 
     var calls = document.getElementById('incoming_calls');
     var div = document.getElementById('incoming');
 
-    while (calls.childNodes.length > 0)
-       calls.removeChild(calls.childNodes[0]);
+    remove_children(calls);
 
     if (data.incoming.length > 0) {
        div.style.display = '';
 
     if (data.incoming.length > 0) {
        div.style.display = '';
@@ -28,8 +48,11 @@ function fetch_incoming_callback(data)
            elem.innerHTML = text;
            elem.payload = new Array();
            elem.payload['dir'] = 'incoming';
            elem.innerHTML = text;
            elem.payload = new Array();
            elem.payload['dir'] = 'incoming';
-           elem.payload['fname'] = data.incoming[i].fname;
+           elem.payload['call'] = data.incoming[i].fname;
+           if (data.incoming[i].read == undefined)
+               elem.className = 'new';
            elem.onclick = play_message;
            elem.onclick = play_message;
+           elem.oncontextmenu = list_context;
            calls.appendChild(elem);
        }
     } else {
            calls.appendChild(elem);
        }
     } else {
@@ -42,13 +65,55 @@ function fetch_incoming()
     ajax_request('incoming', '', fetch_incoming_callback);
 }
 
     ajax_request('incoming', '', fetch_incoming_callback);
 }
 
+function fetch_archive_callback(data)
+{
+    var calls = document.getElementById('archive_calls');
+    var div = document.getElementById('archive');
+
+    remove_children(calls);
+
+    if (data.archive.length > 0) {
+       div.style.display = '';
+
+       for (var i=0; i < data.archive.length; i++) {
+           var elem = document.createElement('li');
+           var text = data.archive[i].date + ', ';
+           if (data.archive[i].name == '*** Unknown ***' && data.archive[i].number != '0')
+               text += data.archive[i].number;
+           else
+               text += data.archive[i].name;
+           text += ', ' + data.archive[i].length;
+
+           elem.innerHTML = text;
+           elem.payload = new Array();
+           elem.payload['dir'] = 'archive';
+           elem.payload['call'] = data.archive[i].fname;
+           elem.onclick = play_message;
+           elem.oncontextmenu = list_context;
+           calls.appendChild(elem);
+       }
+    } else {
+       div.style.display = 'none';
+    }
+}
+
+function fetch_archive()
+{
+    ajax_request('archive', '', fetch_archive_callback);
+}
+
 function play_message_callback(data)
 {
     var speaker = document.getElementById('callspeaker');
     var date = document.getElementById('calldate');
     var note = document.getElementById('callnote');
 
 function play_message_callback(data)
 {
     var speaker = document.getElementById('callspeaker');
     var date = document.getElementById('calldate');
     var note = document.getElementById('callnote');
 
-    Debug.ObjDump(data);
+    if (data.dir == 'messages') {
+       date.innerHTML = '&nbsp;';
+       speaker.innerHTML = 'Message ' + data.call;
+       note.innerHTML = '';
+       return;
+    }
 
     var text = data.name;
     if (data.number != '0') text += ' (' + data.number + ')';
 
     var text = data.name;
     if (data.number != '0') text += ' (' + data.number + ')';
@@ -59,10 +124,132 @@ function play_message_callback(data)
 
 function play_message(event)
 {
 
 function play_message(event)
 {
-    Debug.write('Request ' + event.originalTarget.payload['fname'] + ' in ' + event.originalTarget.payload['dir']);
-
     var frame = document.getElementById('phonecall');
     var frame = document.getElementById('phonecall');
-    var parms = 'dir='+event.originalTarget.payload['dir']+'&call='+event.originalTarget.payload['fname'];
-    ajax_request('callinfo', parms, play_message_callback);
-    frame.src = 'index.php?'+parms;
+    var params = 'dir='+event.originalTarget.payload['dir']+'&call='+event.originalTarget.payload['call'];
+    ajax_request('callinfo', params, play_message_callback);
+    frame.src = 'index.php?'+params;
+    event.originalTarget.className = '';
+}
+
+function save_callback(data)
+{
+    field = document.getElementById('edit_status');
+    field.innerHTML = 'Call saved';
+}
+
+function save()
+{
+    var dir = document.getElementById('edit_dir');
+    var call = document.getElementById('edit_call');
+    var name = document.getElementById('edit_name');
+    var note = document.getElementById('edit_note');
+    var params = 'dir=' + dir.value + '&call=' + call.value;
+    params += '&name=' + name.value + '&note=' + note.value;
+
+    ajax_request('save', params, save_callback);
+}
+
+function list_context(e)
+{
+    var menu = document.getElementById('menu_list');
+    if (!menu)
+        menu = menu_create('menu_list', menu_list);
+
+    menu.style.left = e.pageX - 40;
+    menu.style.top = e.pageY - 15;
+    menu.style.display = '';
+    menu.payload = new Array();
+    menu.payload['dir'] = e.target.payload['dir'];
+    menu.payload['call'] = e.target.payload['call'];
+
+    return false;
+}
+
+function menu_list_archive_callback(data)
+{
+    fetch_incoming();
+    fetch_archive();
+}
+
+function menu_list_edit_callback(data)
+{
+    var fields = ['name','note','dir','call'];
+    var field;
+
+    for (var i=0; i < fields.length; i++) {
+       field = document.getElementById('edit_' + fields[i]);
+       field.value = data[fields[i]];
+    }
+
+    fields = ['name','note'];
+    for (var i=0; i < fields.length; i++) {
+       field = document.getElementById('edit_' + fields[i]);
+       field.innerHTML = data[fields[i]];
+    }
+
+    field = document.getElementById('edit_date');
+    field.innerHTML = data.date + ', ' + data.length;
+    field = document.getElementById('edit_status');
+    field.innerHTML = '';
+}
+
+function menu_list_archive(e)
+{
+    if (e.target.parentNode.payload['dir'] == 'incoming')
+       ajax_request('archive_call', 'call='+e.target.parentNode.payload['call'], menu_list_archive_callback);
+
+    e.target.parentNode.style.display = 'none';
+}
+
+function menu_list_edit(e)
+{
+    var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
+    ajax_request('callinfo', params, menu_list_edit_callback);
+
+    e.target.parentNode.style.display = 'none';
+
+    var edit = document.getElementById('container_edit');
+    var config = document.getElementById('container_config');
+
+    edit.style.display = '';
+    config.style.display = 'none';
+}
+
+function menu_list_delete(e)
+{
+    var params = 'dir='+e.target.parentNode.payload['dir']+'&call='+e.target.parentNode.payload['call'];
+    ajax_request('delete_call', params, menu_list_archive_callback);
+
+    e.target.parentNode.style.display = 'none';
+}
+
+function fetch_messages_callback(data)
+{
+    var calls = document.getElementById('internal_calls');
+
+    remove_children(calls);
+
+    if (data.messages.length > 0) {
+       for (var i=0; i < data.messages.length; i++) {
+           var elem = document.createElement('li');
+
+           elem.innerHTML = data.messages[i].fname;
+           elem.payload = new Array();
+           elem.payload['dir'] = 'messages';
+           elem.payload['call'] = data.messages[i].fname;
+           elem.onclick = play_message;
+           calls.appendChild(elem);
+       }
+    }
+}
+
+function toggle_messages()
+{
+    var edit = document.getElementById('container_edit');
+    var config = document.getElementById('container_config');
+
+    config.style.display = '';
+    edit.style.display = 'none';
+
+    ajax_request('messages', '', fetch_messages_callback);
 }
 }