var req;

function loadXMLDoc(url) {
  if(window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);
  } else if(window.ActiveXObject) {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    if(req) {
      req.onreadystatechange = processReqChange;
      req.open("GET", url, true);
      req.send();
    }
  }
}

function processReqChange() {
  if (req.readyState == 4) {
    if (req.status == 200) {
      handleHttpResponse();
    } else {
      alert("There was a problem retrieving the XML data:\n" + req.statusText);
    }
  }
}

function replaceOuterHTML(elm,outerHTML) {
  if(elm) {
    if(elm.outerHTML) {
      //ie5+
      elm.outerHTML = outerHTML;
      return;
    }
    else if(elm.innerHTML != undefined) {
      //what is the tag we are trying to replace?
      var innerHTML = '';
      var endtagname = outerHTML.indexOf(' ');
      var tag = outerHTML.substr(1,(endtagname-1));
      var newNode = document.createElement(tag);
      var firstCloseTag = outerHTML.indexOf('>');
      //put the new tag out there
      elm.parentNode.replaceChild(newNode,elm);
      //set the attributes
      var strParse = outerHTML.substr(endtagname+1,firstCloseTag-(endtagname+1));
      //alert('parsing:' + strParse + '.');
      while(strParse.length > 0) {
        if(strParse.substr(0,1) == ' ') {
          strParse = strParse.substr(1,strParse.length);
        }
        else {
          var start = strParse.indexOf('="');
          var attributeName = strParse.substr(0,start);
          var end = (strParse.indexOf('"',(start + 2))) - (start + 2);
          var attributeValue = strParse.substr(start + 2, end);
          newNode.setAttribute(attributeName,attributeValue);
          strParse = strParse.substr(start + end + 4, strParse.length);
        }
      }
      //set the innerHTML
      if(outerHTML.substr(firstCloseTag-1,1) == '/') {
        innerHTML = outerHTML.substr(firstCloseTag +1, outerHTML.length);
      }
      else {
        var i = outerHTML.length - 2;
        var strStartClose = '';
        while(strStartClose != "<" && i>0) {
          strStartClose = outerHTML.substr(i,1);
          i--;
        }
        innerHTML = outerHTML.substr(firstCloseTag +1,i - firstCloseTag);
      }
    newNode.innerHTML = innerHTML;
    return;
    }
  }
}

