function createRequest() {
  try {
    request = new XMLHttpRequest();
  } catch (tryMS) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (otherMS) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }	
  return request;
}

function addEventHandler(obj, eventName, handler) {
    if (document.attachEvent) {
        obj.attachEvent("on" + eventName, handler);
    } else if (document.addEventListener) {
        obj.addEventListener(eventName, handler, false);
    }
}
function removeEventHandler(obj, eventName, handler) {
    if (document.attachEvent) {
        obj.detachEvent("on" + eventName, handler);
    } else if (document.addEventListener) {
        obj.removeEventListener(eventName, handler, false);
    }
}
function fireEvent(obj, eventName){
    if (document.attachEvent){
        var evt = document.createEventObject();
        return obj.fireEvent('on'+eventName,evt)
    }else if (document.addEventListener){
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(eventName, true, true ); // event type,bubbling,cancelable
        return !obj.dispatchEvent(evt);
    }
}
