view ajax.js @ 115:87d3ce535834

Comments.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 22 Oct 2013 12:26:06 +0300
parents b5981168ed85
children 986c25c2e2bc
line wrap: on
line source

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 for creating AJAX POST request arguments list based
// on fields and giving them specified types. Also basic check
// for validity can be performed (e.g. field empty or not)
//
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);
  }

  // Clearly mark the element when asking confirmation
  var item = document.getElementById(prefix+id);
  var tmp = item.style.background;
  item.style.background = "red";

  // Ask confirmation for deletion
  if (confirm("Are you sure you want to delete "+dsc+" #"+id+"?"))
  {
    // Okay, delete
    sendPOSTRequest("action=delete&type="+type+"&id="+id, msuccess);
  }

  // Restore background
  item.style.background = tmp;
}