function getRequest () {
  var request = null;

  try {
    request = new XMLHttpRequest();
  } catch (tryMS) {
    try {
      request = new ActiveXObject('Msxms2.XMLHTTP');
    } catch (tryOtherMS) {
      try {
        request = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (failure) {
        request = null;
      }
    }
  }
  return request;
}

function replaceText(el, text) {
  if (el != null) {
    clearText(el);
    var newNode = document.createTextNode(text);
    el.appendChild(newNode);
  }
}

function clearText(el) {
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        el.removeChild(childNode);
      }
    }
  }
}

function getText(el) {
  var text = '';
  if (el != null) {
    if (el.childNodes) {
      for (var i = 0; i < el.childNodes.length; i++) {
        var childNode = el.childNodes[i];
        if (childNode.nodeValue != null) {
          text = text + childNode.nodeValue;
        }
      }
    }
  }
  return text;
}

/*
 document.getElementById(id)
 document.createElement(tag)
 document.createTextNode(text)
 elem.getElementsByTagName(tag)
 elem.appendChild(node)
 elem.insertBefore(node, beforeNode)
 elem.replaceNode(node, replacedNode)
 elem.nodeName -> tag
 elem.nodeValue -> text
 elem.firstChild
 elem.childNodes[]
 elem.lastChild
 elem.parentNode

 request.onreadystatechange = <function>
 request.open("GET/POST", 'url', t/f(async));
 request.send(<post params>);

*/

