Stop event propagation based on http://www.quirksmode.org/js/events_order.html
[infodrom/phone] / lib / basics.js
1 /*
2  * Change style of DOM elements
3  */
4 function style_adjust(styles)
5 {
6     var obj;
7     if (!styles) return;
8
9     for (id in styles) {
10         obj = document.getElementById(id);
11         if (!obj) continue;
12         for (item in styles[id])
13             obj.style[item] = styles[id][item];
14     }
15 }
16
17 function stop_propagation(e)
18 {
19     if (!e) var e = window.event;
20     e.cancelBubble = true;
21     if (e.stopPropagation) e.stopPropagation();
22 }
23
24 /*
25  * Small AJAX framework
26  */
27 function ajax_request_callback(req)
28 {
29     if (req.readyState == 4 && req.status == 200) {
30         var data = json_parse(req.responseText);
31
32         if (req.oncomplete)
33             req.oncomplete(data);
34     }
35 }
36
37 function ajax_request(func,params,oncomplete)
38 {
39     var req = new XMLHttpRequest();
40     if (!req) return;
41
42     var params = 'func=' + func + '&' + params;
43     req.open ("POST", 'index.php');
44     req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
45     req.setRequestHeader("Content-length", params.length);
46     req.setRequestHeader("Connection", "close");
47     if (typeof oncomplete == 'function') {
48         req.onreadystatechange = function() { ajax_request_callback(req); }
49         req.oncomplete = oncomplete;
50     }
51     req.send(params);
52 }
53
54 /*
55  * Small context menu framework
56  */
57 function menu_hide(e)
58 {
59     e.target.parentNode.style.display = 'none';
60 }
61
62 function menu_create(id,data)
63 {
64     var div = document.createElement('div');
65     div.id = id;
66     div.className = 'popup';
67
68     var elem = document.createElement('span');
69     elem.className = 'popupTitle';
70     elem.innerHTML = data['title'];
71     elem.onmouseup = menu_hide;
72     div.appendChild(elem);
73
74     for (var i=0; i < data['items'].length; i++) {
75         elem = document.createElement('span');
76         elem.className = 'popup';
77         elem.innerHTML = data['items'][i]['name'];
78         if (data['items'][i]['type'] == 'hide')
79             elem.onmouseup = menu_hide;
80         else
81             elem.onmouseup = data['items'][i]['callback'];
82         div.appendChild(elem);
83     }
84
85     document.body.appendChild(div);
86     return div;
87 }