diff ajax.js @ 105:a85f258f6beb

Move some things around and modularize the code.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 21 Oct 2013 16:26:42 +0300
parents
children b5981168ed85
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ajax.js	Mon Oct 21 16:26:42 2013 +0300
@@ -0,0 +1,152 @@
+function statusMsg(msg)
+{
+  document.getElementById("nstatus").innerHTML = msg;
+}
+
+
+function strtrim(str)
+{
+  if (!str || str == null)
+    return "";
+  return str.replace(/^\s+|\s+$/g,'')
+}
+
+
+function strencode(str)
+{
+  return encodeURIComponent(str);
+}
+
+
+function createXMLRequest()
+{
+  var req;
+  if (window.XMLHttpRequest)
+  {
+    // Modern browsers
+    req = new XMLHttpRequest();
+  }
+  else
+  {
+    // Old IE versions
+    req = new ActiveXObject("Microsoft.XMLHTTP");
+  }
+  return req;
+}
+
+
+function sendPOSTRequest(params, success, failure)
+{
+  var req = createXMLRequest();
+  req.open("POST", "admajax.php", true);
+  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+  req.setRequestHeader("Content-length", params.length);
+  req.setRequestHeader("Connection", "close");
+
+  req.onreadystatechange = function()
+  {
+    if (req.readyState == 4)
+    {
+      if (req.status == 404)
+      {
+        window.location = "admlogout.php";
+      }
+      else
+      if (req.status == 200)
+      {
+        if (success)
+        {
+          success(req.responseText);
+        }
+        statusMsg(req.statusText);
+      }
+      else
+      {
+        if (failure)
+        {
+          failure(req.status, req.statusText, req.responseText);
+        }
+        else
+        {
+          statusMsg("["+req.status+" - "+req.statusText+"] "+ req.responseText);
+        }
+      }
+    }
+  }
+  req.send(params);
+}
+
+
+function makePostArgs(fields, fprefix, fsuffix)
+{
+  var res = [];
+  for (var id in fields)
+  {
+    var elem = document.getElementById(fprefix + id + fsuffix);
+    if (!elem)
+    {
+      alert("No such DOM element '"+ fprefix + id + fsuffix +"'.");
+      return "";
+    }
+
+    switch (fields[id])
+    {
+      case 0:
+      case 1:
+      case 4:
+        {
+          var str = strtrim(elem.value);
+          if ((fields[id] == 1 || fields[id] == 4) && str == "")
+          {
+            alert("One or more of the required fields are empty.");
+            return "";
+          }
+          if (fields[id] == 4)
+            res.push(id+"="+parseInt(elem.value));
+          else
+            res.push(id+"="+strencode(str));
+        }
+        break;
+
+      case 2:
+        res.push(id+"="+parseInt(elem.value));
+        break;
+
+      case 3:
+        res.push(id+"="+(elem.checked ? "1" : "0"));
+        break;
+
+    }
+  }
+  return res.join("&");
+}
+
+
+function refreshItems(id,name,msgname)
+{
+  var msuccess = function(txt)
+  {
+    var nitem = document.getElementById(id);
+    nitem.innerHTML = txt;
+  }
+
+  sendPOSTRequest("action=get&type="+name, msuccess);
+}
+
+
+function deleteItem(id,prefix,type,func,dsc)
+{
+  var msuccess = function(txt)
+  {
+    var item = document.getElementById(prefix+id);
+    item.style.display = "none";
+    setTimeout(func, 50);
+  }
+
+  if (confirm("Are you sure you want to delete "+dsc+" #"+id+"?"))
+  {
+    sendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess);
+  }
+}
+
+