function createLoader(htmlEl, id) {
  loadDiv = document.createElement("div");
  loadDiv.id = id;
  loadDiv.className = "loading";
  htmlEl.className = htmlEl.className + " loader";
  htmlEl.appendChild(loadDiv);
  return document.getElementById(id);
}

function serverResp(resp) {
  var alert = null;
  if (resp == 408) {
    alert = "The server timed out. Please try again.";
  } else if (resp >= 500 || resp <= 599) {
    alert = "Sorry, there seems to be a problem with the requested server.";
  } else {
    alert = "There was a error with the request. Error code: " + resp;
  }
  return alert;
}

function deleteChildren(obj) {
  while (obj.firstChild) {
    obj.removeChild(obj.firstChild);
  }
}

function createOption(selectObj, text, value) {
  var option = document.createElement("option");
  text = document.createTextNode(text);
  option.value = value;
  option.appendChild(text);
  selectObj.appendChild(option);
}

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if (node == null)
    node = document;
  if (tag == null)
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if (pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}

function findFirstFullChildObject(obj) {
  for (i=0; i<obj.childNodes.length; i++) {
    if (obj.childNodes[i].firstChild != null) {
      var fullObj = obj.childNodes[i];
      return fullObj;
    }
  }
  return false;
}

function getXMLNodeSerialisation(xmlNode) {
  var text = false;
  try {
    // Gecko-based browsers, Safari, Opera.
    var serializer = new XMLSerializer();
    text = serializer.serializeToString(xmlNode);
  }
  catch (e) {
    try {
      // Internet Explorer.
      text = xmlNode.xml;
    }
    catch (e) {}
  }
  return text;
}
