--- /dev/null
+/*
+ * Change style of DOM elements
+ */
+function style_adjust(styles)
+{
+ var obj;
+ if (!styles) return;
+
+ for (id in styles) {
+ obj = document.getElementById(id);
+ if (!obj) continue;
+ for (item in styles[id])
+ obj.style[item] = styles[id][item];
+ }
+}
+
+/*
+ * Small AJAX framework
+ */
+function ajax_request_callback(req)
+{
+ if (req.readyState == 4 && req.status == 200) {
+ var data = json_parse(req.responseText);
+
+ if (req.oncomplete)
+ req.oncomplete(data);
+ }
+}
+
+function ajax_request(func,params,oncomplete)
+{
+ var req = new XMLHttpRequest();
+ if (!req) return;
+
+ var params = 'func=' + func + '&' + params;
+ req.open ("POST", 'index.php');
+ req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ req.setRequestHeader("Content-length", params.length);
+ req.setRequestHeader("Connection", "close");
+ if (typeof oncomplete == 'function') {
+ req.onreadystatechange = function() { ajax_request_callback(req); }
+ req.oncomplete = oncomplete;
+ }
+ req.send(params);
+}
+
+/*
+ * Small context menu framework
+ */
+function menu_hide(e)
+{
+ e.target.parentNode.style.display = 'none';
+}
+
+function menu_create(id,data)
+{
+ var div = document.createElement('div');
+ div.id = id;
+ div.className = 'popup';
+
+ var elem = document.createElement('span');
+ elem.className = 'popupTitle';
+ elem.innerHTML = data['title'];
+ elem.onmouseup = menu_hide;
+ div.appendChild(elem);
+
+ for (var i=0; i < data['items'].length; i++) {
+ elem = document.createElement('span');
+ elem.className = 'popup';
+ elem.innerHTML = data['items'][i]['name'];
+ if (data['items'][i]['type'] == 'hide')
+ elem.onmouseup = menu_hide;
+ else
+ elem.onmouseup = data['items'][i]['callback'];
+ div.appendChild(elem);
+ }
+
+ document.body.appendChild(div);
+ return div;
+}