Set date-style accordingly
[infodrom.org/service.infodrom.org] / src / 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  * Simple popup creation
56  */
57 function popup_create(id,title,content)
58 {
59     var div = document.createElement('div');
60     div.id = id;
61     div.style.zIndex = 20;
62     div.className = 'popup';
63
64     var elem = document.createElement('span');
65     elem.className = 'popupTitle';
66     elem.innerHTML = title;
67     div.appendChild(elem);
68
69     elem = document.createElement('div');
70     elem.className = 'popupContent';
71     elem.innerHTML = content;
72     div.appendChild(elem);
73
74     document.body.appendChild(div);
75     return div;
76 }
77
78 /*
79  * Small context menu framework
80  */
81 function menu_hide(e)
82 {
83     e.target.parentNode.style.display = 'none';
84     if (e.target.parentNode.payload['row'] != undefined)
85         e.target.parentNode.payload['row'].style.backgroundColor = '';
86 }
87
88 function menu_create(id,data)
89 {
90     var div = document.createElement('div');
91     div.id = id;
92     div.className = 'popup';
93
94     var elem = document.createElement('span');
95     elem.className = 'popupTitle';
96     elem.innerHTML = data['title'];
97     elem.onmouseup = menu_hide;
98     div.appendChild(elem);
99
100     for (var i=0; i < data['items'].length; i++) {
101         elem = document.createElement('span');
102         elem.className = 'popup';
103         elem.innerHTML = data['items'][i]['name'];
104         if (data['items'][i]['type'] == 'hide')
105             elem.onmouseup = menu_hide;
106         else
107             elem.onmouseup = data['items'][i]['callback'];
108         div.appendChild(elem);
109     }
110
111     document.body.appendChild(div);
112     return div;
113 }
114
115 function menu_position(e,menu,diffX,diffY,items)
116 {
117     var height = (items.length + 1) * 14;
118     var top = e.pageY + diffY;
119
120     menu.style.left = e.pageX + diffX;
121
122     if (top + height > window.innerHeight)
123         menu.style.top = window.innerHeight - height;
124     else
125         menu.style.top = top;
126 }